1const sw = () => Promise.resolve().then(() => aw), i9 = globalThis.__GLOBALS__.ReactJSXRuntime, { Fragment: C, jsx: i, jsxs: c } = i9; 2"use" in globalThis.__GLOBALS__.React || (globalThis.__GLOBALS__.React.use = () => { 3 throw new Error("`use` is not available in this version of React. Make currently only supports React 18, but `use` is only available in React 19+."); 4}); 5function O6(t) { 6 const e = t?.props?._fgT, s = typeof e == "function" || typeof e == "string" || typeof e == "object" && e !== null && "$$typeof" in e; 7 return globalThis.__GLOBALS__.React.isValidElement(t) && s; 8} 9function jt(t) { 10 return globalThis.__GLOBALS__.React.isValidElement(t) && t.type === "fg-txt"; 11} 12function V6(t) { 13 const { _fgT: e, _fgS: s, _fgB: r, _fgD: n, ...o } = t.props; 14 return globalThis.__GLOBALS__.React.createElement(e, { 15 ...o, 16 key: t.key 17 }, o.children); 18} 19function w2(t) { 20 return O6(t) ? V6(t) : jt(t) ? t.props.children : t; 21} 22const Ft = globalThis.__GLOBALS__.React.Children, d5 = { 23 map(t, e, s) { 24 return Ft.map(t, (r, n) => { 25 const o = w2(r); 26 return jt(r) ? null : e.call(s, o, n); 27 }); 28 }, 29 forEach(t, e, s) { 30 Ft.forEach(t, (r, n) => { 31 if (jt(r)) 32 return; 33 const o = w2(r); 34 e.call(s, o, n); 35 }); 36 }, 37 count(t) { 38 let e = 0; 39 return Ft.forEach(t, (s) => { 40 jt(s) || e++; 41 }), e; 42 }, 43 toArray(t) { 44 const e = []; 45 return Ft.forEach(t, (s) => { 46 jt(s) || e.push(w2(s)); 47 }), e; 48 }, 49 only(t) { 50 const e = Ft.only(t); 51 return w2(e); 52 } 53}, $3 = [ 54 "_fgT", 55 "_fgS", 56 "_fgB", 57 "_fgD" 58]; 59function r9(t) { 60 if (t == null || typeof t != "object") return t; 61 const e = Object.keys(t); 62 let s = !1; 63 for (let n = 0; n < $3.length; n++) 64 if ($3[n] in t) { 65 s = !0; 66 break; 67 } 68 if (!s) return t; 69 const r = {}; 70 for (let n = 0; n < e.length; n++) { 71 const o = e[n]; 72 $3.indexOf(o) === -1 && (r[o] = t[o]); 73 } 74 return r; 75} 76const n0 = globalThis.__GLOBALS__.React.cloneElement, g2 = (t, ...e) => { 77 if (O6(t)) { 78 const s = V6(t), r = e[0]; 79 return r != null && typeof r == "object" && (e = [ 80 r9(r), 81 ...e.slice(1) 82 ]), n0(s, ...e); 83 } 84 return n0(t, ...e); 85}, ae = { 86 ...globalThis.__GLOBALS__.React, 87 Children: d5, 88 cloneElement: g2 89}, { Component: g5, createContext: r1, createElement: s1, createFactory: n9, createRef: o9, forwardRef: Tt, Fragment: b3, isValidElement: v3, lazy: L9, memo: c9, Profiler: l9, PureComponent: d9, startTransition: g9, StrictMode: f9, Suspense: p9, use: M9, useCallback: Ge, useContext: oe, useDebugValue: u9, useDeferredValue: h9, useEffect: q, useId: y3, useImperativeHandle: m9, useInsertionEffect: f2, useLayoutEffect: f5, useMemo: M1, useReducer: x9, useRef: H, useState: j, useSyncExternalStore: _9, useTransition: b9, version: v9, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: y9 } = globalThis.__GLOBALS__.React, H6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ 90 __proto__: null, 91 Children: d5, 92 Component: g5, 93 Fragment: b3, 94 Profiler: l9, 95 PureComponent: d9, 96 StrictMode: f9, 97 Suspense: p9, 98 __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: y9, 99 cloneElement: g2, 100 createContext: r1, 101 createElement: s1, 102 createFactory: n9, 103 createRef: o9, 104 default: ae, 105 forwardRef: Tt, 106 isValidElement: v3, 107 lazy: L9, 108 memo: c9, 109 startTransition: g9, 110 use: M9, 111 useCallback: Ge, 112 useContext: oe, 113 useDebugValue: u9, 114 useDeferredValue: h9, 115 useEffect: q, 116 useId: y3, 117 useImperativeHandle: m9, 118 useInsertionEffect: f2, 119 useLayoutEffect: f5, 120 useMemo: M1, 121 useReducer: x9, 122 useRef: H, 123 useState: j, 124 useSyncExternalStore: _9, 125 useTransition: b9, 126 version: v9 127}, Symbol.toStringTag, { value: "Module" })), a = ae.forwardRef(function({ _fgT: e, _fgS: s, _fgB: r, ...n }, o) { 128 const L = o ? { ...n, ref: o } : n; 129 return typeof window < "u" && window.__FGInspectorCmp ? ae.createElement(window.__FGInspectorCmp, { _fgT: e, _fgS: s, _fgB: r, ...L }) : ae.createElement(e, L); 130}); 131function w9(t, e) { 132 if (t instanceof RegExp) return { keys: !1, pattern: t }; 133 var s, r, n, o, L = [], d = "", l = t.split("/"); 134 for (l[0] || l.shift(); n = l.shift(); ) 135 s = n[0], s === "*" ? (L.push(s), d += n[1] === "?" ? "(?:/(.*))?" : "/(.*)") : s === ":" ? (r = n.indexOf("?", 1), o = n.indexOf(".", 1), L.push(n.substring(1, ~r ? r : ~o ? o : n.length)), d += ~r && !~o ? "(?:/([^/]+?))?" : "/([^/]+?)", ~o && (d += (~r ? "?" : "") + "\\" + n.substring(o))) : d += "/" + n; 136 return { 137 keys: L, 138 pattern: new RegExp("^" + d + (e ? "(?=$|/)" : "/?$"), "i") 139 }; 140} 141function T9(t) { 142 if (Object.prototype.hasOwnProperty.call(t, "__esModule")) return t; 143 var e = t.default; 144 if (typeof e == "function") { 145 var s = function r() { 146 return this instanceof r ? Reflect.construct(e, arguments, this.constructor) : e.apply(this, arguments); 147 }; 148 s.prototype = e.prototype; 149 } else s = {}; 150 return Object.defineProperty(s, "__esModule", { value: !0 }), Object.keys(t).forEach(function(r) { 151 var n = Object.getOwnPropertyDescriptor(t, r);
152 Object.defineProperty(s, r, n.get ? n : { 153 enumerable: !0, 154 get: function() { 155 return t[r]; 156 } 157 }); 158 }), s; 159} 160var q3 = { exports: {} }, U3 = {}; 161const S9 = /* @__PURE__ */ T9(H6); 162/** 163 * @license React 164 * use-sync-external-store-shim.production.js 165 * 166 * Copyright (c) Meta Platforms, Inc. and affiliates. 167 * 168 * This source code is licensed under the MIT license found in the 169 * LICENSE file in the root directory of this source tree. 170 */ 171var o0; 172function B9() { 173 if (o0) return U3; 174 o0 = 1; 175 var t = S9; 176 function e(p, M) { 177 return p === M && (p !== 0 || 1 / p === 1 / M) || p !== p && M !== M; 178 } 179 var s = typeof Object.is == "function" ? Object.is : e, r = t.useState, n = t.useEffect, o = t.useLayoutEffect, L = t.useDebugValue; 180 function d(p, M) { 181 var u = M(), h = r({ inst: { value: u, getSnapshot: M } }), x = h[0].inst, _ = h[1]; 182 return o( 183 function() { 184 x.value = u, x.getSnapshot = M, l(x) && _({ inst: x }); 185 }, 186 [p, u, M] 187 ), n( 188 function() { 189 return l(x) && _({ inst: x }), p(function() { 190 l(x) && _({ inst: x }); 191 }); 192 }, 193 [p] 194 ), L(u), u; 195 } 196 function l(p) { 197 var M = p.getSnapshot; 198 p = p.value; 199 try { 200 var u = M(); 201 return !s(p, u); 202 } catch { 203 return !0; 204 } 205 } 206 function g(p, M) { 207 return M(); 208 } 209 var f = typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u" ? g : d; 210 return U3.useSyncExternalStore = t.useSyncExternalStore !== void 0 ? t.useSyncExternalStore : f, U3; 211} 212var L0; 213function k9() { 214 return L0 || (L0 = 1, q3.exports = B9()), q3.exports; 215} 216var A9 = k9(); 217const N9 = H6.useInsertionEffect, I9 = typeof window < "u" && typeof window.document < "u" && typeof window.document.createElement < "u", P9 = I9 ? f5 : q, C9 = N9 || P9, Z6 = (t) => { 218 const e = H([t, (...s) => e[0](...s)]).current; 219 return C9(() => { 220 e[0] = t; 221 }), e[1]; 222}, c0 = ["popstate", "pushState", "replaceState", "hashchange"]; 223let Ot = []; 224const l0 = () => Ot.forEach((t) => t()), F9 = (t) => (Ot.push(t) === 1 && c0.forEach((e) => addEventListener(e, l0)), () => { 225 Ot = Ot.filter((e) => e !== t), Ot.length || c0.forEach((e) => removeEventListener(e, l0)); 226}), W6 = (t, e) => A9.useSyncExternalStore(F9, t, e), d0 = () => location.search, E9 = ({ ssrSearch: t } = {}) => W6( 227 d0, 228 // != null checks for both null and undefined, but allows empty string "" 229 // This allows proper hydration: server renders with ssrSearch="?foo", 230 // client hydrates with just <Router /> and reads from location.search 231 t != null ? () => t : d0 232), g0 = () => location.pathname, R9 = ({ ssrPath: t } = {}) => W6( 233 g0, 234 // != null checks for both null and undefined, but allows empty string "" 235 // This allows proper hydration: server renders with ssrPath="/foo", 236 // client hydrates with just <Router /> and reads from location.pathname 237 t != null ? () => t : g0 238), D9 = (t, { replace: e = !1, state: s = null } = {}) => history[e ? "replaceState" : "pushState"](s, "", t), z9 = (t) => [R9(t), D9], f0 = Symbol.for("wouter_v3"); 239if (typeof history < "u" && typeof window[f0] > "u") { 240 for (const t of ["pushState", "replaceState"]) { 241 const e = history[t]; 242 history[t] = function() { 243 const s = e.apply(this, arguments), r = new Event(t); 244 return r.arguments = arguments, dispatchEvent(r), s; 245 }; 246 } 247 Object.defineProperty(window, f0, { value: !0 }); 248} 249const $6 = (t = "") => t === "/" ? "" : t, j9 = (t, e) => t[0] === "~" ? t.slice(1) : $6(e) + t, q6 = (t, e) => (t = p0($6(t)), e = p0(e), !t || !e.toLowerCase().indexOf(t.toLowerCase()) ? e.slice(t.length) || "/" : "~" + e), p0 = (t) => { 250 try { 251 return t.includes("%") ? decodeURI(t) : t; 252 } catch { 253 return t; 254 } 255}, U6 = { 256 hook: z9, 257 searchHook: E9, 258 parser: w9, 259 base: "", 260 // this option is used to override the current location during SSR 261 ssrPath: void 0, 262 ssrSearch: void 0, 263 // optional context to track render state during SSR 264 ssrContext: void 0, 265 // customizes how `href` props are transformed for <Link /> 266 hrefs: (t) => t, 267 // wraps navigate calls, useful for view transitions 268 aroundNav: (t, e, s) => t(e, s) 269}, G6 = r1(U6), p2 = () => oe(G6), J6 = {}, K6 = r1(J6), Y6 = () =>
269 oe(K6), X6 = (t, e = t.base) => q6(e, t.hook(t)[0]), Q6 = (t) => { 270 const [e, s] = t.hook(t); 271 return [ 272 q6(t.base, e), 273 Z6( 274 (r, n) => t.aroundNav(s, j9(r, t.base), n) 275 ) 276 ]; 277}, p5 = () => Q6(p2()), es = (t, e, s, r) => { 278 const { pattern: n, keys: o } = e instanceof RegExp ? { pattern: e } : t(e || "*", r), L = n.exec(s); 279 if (!L) return [!1, null]; 280 const d = {}; 281 for (let l = 1; l < L.length; l++) d[l - 1] = L[l]; 282 if (o) 283 for (let l = 0; l < o.length; l++) d[o[l]] = L[l + 1]; 284 else 285 Object.assign(d, L.groups); 286 return r ? [!0, d, L[0]] : [!0, d]; 287}, O9 = ({ children: t, ...e }) => { 288 const s = p2(), r = e.hook ? U6 : s; 289 let n = r; 290 if (e.ssrPath) { 291 const [l, g = e.ssrSearch ?? ""] = e.ssrPath.split("?"); 292 l && (e.ssrSearch = g, e.ssrPath = l); 293 } 294 e.hrefs = e.hrefs ?? e.hook?.hrefs, e.searchHook = e.searchHook ?? e.hook?.searchHook; 295 let o = H(r), L = o.current, d = L; 296 for (let l in r) { 297 const g = l === "base" ? ( 298 /* base is special case, it is appended to the parent's base */ 299 r[l] + (e[l] ?? "") 300 ) : e[l] ?? r[l]; 301 g !== d[l] && (L === d && (o.current = d = { ...d }), d[l] = g), (g !== r[l] || g !== n[l]) && (n = d); 302 } 303 return s1(G6.Provider, { value: n }, t); 304}, V9 = ({ children: t, component: e }, s) => e ? s1(e, { params: s }) : typeof t == "function" ? t(s) : t, H9 = (t) => { 305 let e = H(J6); 306 const s = e.current, r = Object.keys(t); 307 return e.current = // Update cache if number of params changed or any value changed 308 r.length !== Object.keys(s).length || r.some((n) => t[n] !== s[n]) ? t : s; 309}, J = ({ path: t, nest: e, match: s, ...r }) => { 310 const n = p2(), o = X6(n), [L, d, l] = ( 311 // `match` is a special prop to give up control to the parent, 312 // it is used by the `Switch` to avoid double matching 313 s ?? es(n.parser, t, o, e) 314 ), g = H9({ ...Y6(), ...d }); 315 if (!L) return null; 316 const f = V9(r, g); 317 return s1( 318 K6.Provider, 319 { value: g }, 320 l ? s1(O9, { base: l }, f) : f 321 ); 322}, E = Tt((t, e) => { 323 const s = p2(), [r, n] = Q6(s), { 324 to: o = "", 325 href: L = o, 326 onClick: d, 327 asChild: l, 328 children: g, 329 className: f, 330 /* eslint-disable no-unused-vars */ 331 replace: p, 332 state: M, 333 transition: u, 334 /* eslint-enable no-unused-vars */ 335 ...h 336 } = t; 337 return h.onClick = Z6((x) => { 338 x.ctrlKey || x.metaKey || x.altKey || x.shiftKey || x.button !== 0 || (d?.(x), x.defaultPrevented || (x.preventDefault(), n(L, t))); 339 }), h.href = s.hrefs( 340 L[0] === "~" ? L.slice(1) : s.base + L, 341 s 342 // pass router as a second argument for convinience 343 ), f !== void 0 && (h.className = f?.call ? f(r === L) : f), e && (h.ref = e), l && v3(g) ? g2(g, h) : s1("a", h, g); 344}), ts = (t, e = []) => { 345 if (Array.isArray(t)) 346 for (const s of t) 347 ts(s && s.type === b3 ? s.props.children : s, e); 348 else e.push(t); 349 return e; 350}, Z9 = ({ children: t, location: e }) => { 351 const s = p2(), r = X6(s); 352 for (const n of ts(t)) { 353 let o = 0; 354 if (v3(n) && // we don't require an element to be of type Route, 355 // but we do require it to contain a truthy `path` prop. 356 // this allows to use different components that wrap Route 357 // inside of a switch, for example <AnimatedRoute />. 358 (o = es( 359 s.parser, 360 n.props.path, 361 e || r, 362 n.props.nest 363 ))[0]) 364 return g2(n, { match: o }); 365 } 366 return null; 367}, M5 = r1({}); 368function St(t) { 369 const e = H(null); 370 return e.current === null && (e.current = t()), e.current; 371} 372const u5 = typeof window < "u", w3 = u5 ? f5 : q, T3 = /* @__PURE__ */ r1(null); 373function h5(t, e) { 374 t.indexOf(e) === -1 && t.push(e); 375} 376function m5(t, e) { 377 const s = t.indexOf(e); 378 s > -1 && t.splice(s, 1); 379} 380const i1 = (t, e, s) => s > e ? e : s < t ? t : s; 381let Xt = () => { 382}; 383const u1 = {}, as = (t) => /^-?(?:\d+(?:\.\d+)?|\.\d+)$/u.test(t); 384function ss(t) { 385 return typeof t == "object" && t !== null; 386} 387const is = (t) => /^0[^.\s]+$/u.test(t); 388// @__NO_SIDE_EFFECTS__ 389function x5(t) { 390 let e; 391 return () => (e === void 0 && (e = t()), e); 392} 393const Ne = /* @__NO_SIDE_EFFECTS__ */ (t) => t, W9 = (t, e) => (s) => e(t(s)), M2 = (...t) => t.reduce(W9), vt = /* @__NO_SIDE_EFFECTS__ */ (t, e, s) => { 394 const r = e - t; 395 return r === 0 ? 1 : (s - t) / r; 396}; 397class _5 { 398 constructor() { 399 this.subscriptions = []; 400 } 401 add(e) { 402 return h5(this.subscriptions, e), () => m5(this.subscriptions, e); 403 } 404 notify(e, s, r) { 405 const n = this.subscriptions.length; 406 if (n) 407 if (n === 1) 408 this.subscriptions[0](e, s, r); 409 else 410 for (let o = 0; o < n; o++) { 411 const L = this.subscriptions[o]; 412 L && L(e, s, r); 413 } 414 } 415 getSize() { 416 return this.subscriptions.length; 417 } 418 clear() { 419 this.subscriptions.length = 0; 420 } 421} 422const t1 = /* @__NO_SIDE_EFFECTS__ */ (t) => t * 1e3, Oe = /* @__NO_SIDE_EFFECTS__ */ (t) => t / 1e3; 423function b5(t, e) { 424 return e ? t * (1e3 / e) : 0; 425} 426const rs = (t, e, s) => (((1 - 3 * s + 3 * e) * t + (3 * s - 6 * e)) * t + 3 * e) * t, $9 = 1e-7, q9 = 12; 427function U9(t, e, s, r, n) { 428 let o, L, d = 0; 429 do 430 L = e + (s - e) / 2, o = rs(L, r, n) - t, o > 0 ? s = L : e = L; 431 while (Math.abs(o) > $9 && ++d < q9); 432 return L; 433} 434function u2(t, e, s, r) { 435 if (t === e && s === r) 436 return Ne; 437 const n = (o) => U9(o, 0, 1, t, s); 438 return (o) => o === 0 || o === 1 ? o : rs(n(o), e, r); 439} 440const ns = (t) => (e) => e <= 0.5 ? t(2 * e) / 2 : (2 - t(2 * (1 - e))) / 2, os = (t) => (e) => 1 - t(1 - e), Ls = /* @__PURE__ */ u2(0.33, 1.53, 0.69, 0.99), v5 = /* @__PURE__ */ os(Ls), cs = /* @__PURE__ */ ns(v5), ls = (t) => (t *= 2) < 1 ? 0.5 * v5(t) : 0.5 * (2 - Math.pow(2, -10 * (t - 1))), y5 = (t) => 1 - Math.sin(Math.acos(t)), ds = os(y5), gs = ns(y5), G9 = /* @__PURE__ */ u2(0.42, 0, 1, 1), J9 = /* @__PURE__ */ u2(0, 0, 0.58, 1), fs = /* @__PURE__ */ u2(0.42, 0, 0.58, 1), K9 = (t) =>
vendor: 10,762 bytes, lines 440-747
440 Array.isArray(t) && typeof t[0] != "number", ps = (t) => Array.isArray(t) && typeof t[0] == "number", Y9 = { 441 linear: Ne, 442 easeIn: G9, 443 easeInOut: fs, 444 easeOut: J9, 445 circIn: y5, 446 circInOut: gs, 447 circOut: ds, 448 backIn: v5, 449 backInOut: cs, 450 backOut: Ls, 451 anticipate: ls 452}, X9 = (t) => typeof t == "string", M0 = (t) => { 453 if (ps(t)) { 454 Xt(t.length === 4); 455 const [e, s, r, n] = t; 456 return u2(e, s, r, n); 457 } else if (X9(t)) 458 return Y9[t]; 459 return t; 460}, T2 = [ 461 "setup", 462 // Compute 463 "read", 464 // Read 465 "resolveKeyframes", 466 // Write/Read/Write/Read 467 "preUpdate", 468 // Compute 469 "update", 470 // Compute 471 "preRender", 472 // Compute 473 "render", 474 // Write 475 "postRender" 476 // Compute 477]; 478function Q9(t, e) { 479 let s = /* @__PURE__ */ new Set(), r = /* @__PURE__ */ new Set(), n = !1, o = !1; 480 const L = /* @__PURE__ */ new WeakSet(); 481 let d = { 482 delta: 0, 483 timestamp: 0, 484 isProcessing: !1 485 }; 486 function l(f) { 487 L.has(f) && (g.schedule(f), t()), f(d); 488 } 489 const g = { 490 /** 491 * Schedule a process to run on the next frame. 492 */ 493 schedule: (f, p = !1, M = !1) => { 494 const h = M && n ? s : r; 495 return p && L.add(f), h.has(f) || h.add(f), f; 496 }, 497 /** 498 * Cancel the provided callback from running on the next frame. 499 */ 500 cancel: (f) => { 501 r.delete(f), L.delete(f); 502 }, 503 /** 504 * Execute all schedule callbacks. 505 */ 506 process: (f) => { 507 if (d = f, n) { 508 o = !0; 509 return; 510 } 511 n = !0, [s, r] = [r, s], s.forEach(l), s.clear(), n = !1, o && (o = !1, g.process(f)); 512 } 513 }; 514 return g; 515} 516const er = 40; 517function Ms(t, e) { 518 let s = !1, r = !0; 519 const n = { 520 delta: 0, 521 timestamp: 0, 522 isProcessing: !1 523 }, o = () => s = !0, L = T2.reduce((b, S) => (b[S] = Q9(o), b), {}), { setup: d, read: l, resolveKeyframes: g, preUpdate: f, update: p, preRender: M, render: u, postRender: h } = L, x = () => { 524 const b = u1.useManualTiming ? n.timestamp : performance.now(); 525 s = !1, u1.useManualTiming || (n.delta = r ? 1e3 / 60 : Math.max(Math.min(b - n.timestamp, er), 1)), n.timestamp = b, n.isProcessing = !0, d.process(n), l.process(n), g.process(n), f.process(n), p.process(n), M.process(n), u.process(n), h.process(n), n.isProcessing = !1, s && e && (r = !1, t(x)); 526 }, _ = () => { 527 s = !0, r = !0, n.isProcessing || t(x); 528 }; 529 return { schedule: T2.reduce((b, S) => { 530 const k = L[S]; 531 return b[S] = (A, I = !1, w = !1) => (s || _(), k.schedule(A, I, w)), b; 532 }, {}), cancel: (b) => { 533 for (let S = 0; S < T2.length; S++) 534 L[T2[S]].cancel(b); 535 }, state: n, steps: L }; 536} 537const { schedule: $, cancel: Je, state: me, steps: G3 } = /* @__PURE__ */ Ms(typeof requestAnimationFrame < "u" ? requestAnimationFrame : Ne, !0); 538let G2; 539function tr() { 540 G2 = void 0; 541} 542const Ae = { 543 now: () => (G2 === void 0 && Ae.set(me.isProcessing || u1.useManualTiming ? me.timestamp : performance.now()), G2), 544 set: (t) => { 545 G2 = t, queueMicrotask(tr); 546 } 547}, us = (t) => (e) => typeof e == "string" && e.startsWith(t), w5 = /* @__PURE__ */ us("--"), ar = /* @__PURE__ */ us("var(--"), T5 = (t) => ar(t) ? sr.test(t.split("/*")[0].trim()) : !1, sr = /var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu, Bt = { 548 test: (t) => typeof t == "number", 549 parse: parseFloat, 550 transform: (t) => t 551}, Qt = { 552 ...Bt, 553 transform: (t) => i1(0, 1, t) 554}, S2 = { 555 ...Bt, 556 default: 1 557}, $t = (t) => Math.round(t * 1e5) / 1e5, S5 = /-?(?:\d+(?:\.\d+)?|\.\d+)/gu; 558function ir(t) { 559 return t == null; 560} 561const rr = /^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))$/iu, B5 = (t, e) => (s) => !!(typeof s == "string" && rr.test(s) && s.startsWith(t) || e && !ir(s) && Object.prototype.hasOwnProperty.call(s, e)), hs = (t, e, s) => (r) => { 562 if (typeof r != "string") 563 return r; 564 const [n, o, L, d] = r.match(S5); 565 return { 566 [t]: parseFloat(n), 567 [e]: parseFloat(o), 568 [s]: parseFloat(L), 569 alpha: d !== void 0 ? parseFloat(d) : 1 570 }; 571}, nr = (t) => i1(0, 255, t), J3 = { 572 ...Bt, 573 transform: (t) => Math.round(nr(t)) 574}, z1 = { 575 test: /* @__PURE__ */ B5("rgb", "red"), 576 parse: /* @__PURE__ */ hs("red", "green", "blue"), 577 transform: ({ red: t, green: e, blue: s, alpha: r = 1 }) => "rgba(" + J3.transform(t) + ", " + J3.transform(e) + ", " + J3.transform(s) + ", " + $t(Qt.transform(r)) + ")" 578}; 579function or(t) { 580 let e = "", s = "", r = "", n = ""; 581 return t.length > 5 ? (e = t.substring(1, 3), s = t.substring(3, 5), r = t.substring(5, 7), n = t.substring(7, 9)) : (e = t.substring(1, 2), s = t.substring(2, 3), r = t.substring(3, 4), n = t.substring(4, 5), e += e, s += s, r += r, n += n), { 582 red: parseInt(e, 16), 583 green: parseInt(s, 16), 584 blue: parseInt(r, 16), 585 alpha: n ? parseInt(n, 16) / 255 : 1 586 }; 587} 588const T4 = { 589 test: /* @__PURE__ */ B5("#"), 590 parse: or, 591 transform: z1.transform 592}, h2 = /* @__NO_SIDE_EFFECTS__ */ (t) => ({ 593 test: (e) => typeof e == "string" && e.endsWith(t) && e.split(" ").length === 1, 594 parse: parseFloat, 595 transform: (e) => `${e}${t}` 596}), m1 = /* @__PURE__ */ h2("deg"), a1 = /* @__PURE__ */ h2("%"), R = /* @__PURE__ */ h2("px"), Lr = /* @__PURE__ */ h2("vh"), cr = /* @__PURE__ */ h2("vw"), u0 = { 597 ...a1, 598 parse: (t) => a1.parse(t) / 100, 599 transform: (t) => a1.transform(t * 100) 600}, rt = { 601 test: /* @__PURE__ */ B5("hsl", "hue"), 602 parse: /* @__PURE__ */ hs("hue", "saturation", "lightness"), 603 transform: ({ hue: t, saturation: e, lightness: s, alpha: r = 1 }) => "hsla(" + Math.round(t) + ", " + a1.transform($t(e)) + ", " + a1.transform($t(s)) + ", " + $t(Qt.transform(r)) + ")" 604}, ge = { 605 test: (t) => z1.test(t) || T4.test(t) || rt.test(t), 606 parse: (t) => z1.test(t) ? z1.parse(t) : rt.test(t) ? rt.parse(t) : T4.parse(t), 607 transform: (t) => typeof t == "string" ? t : t.hasOwnProperty("red") ? z1.transform(t) : rt.transform(t), 608 getAnimatableNone: (t) => { 609 const e = ge.parse(t); 610 return e.alpha = 0, ge.transform(e); 611 } 612}, lr = /(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\))/giu; 613function dr(t) { 614 return isNaN(t) && typeof t == "string" && (t.match(S5)?.length || 0) + (t.match(lr)?.length || 0) > 0; 615} 616const ms = "number", xs = "color", gr = "var", fr = "var(", h0 = "${}", pr = /var\s*\(\s*--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)|#[\da-f]{3,8}|(?:rgb|hsl)a?\((?:-?[\d.]+%?[,\s]+){2}-?[\d.]+%?\s*(?:[,/]\s*)?(?:\b\d+(?:\.\d+)?|\.\d+)?%?\)|-?(?:\d+(?:\.\d+)?|\.\d+)/giu; 617function e2(t) { 618 const e = t.toString(), s = [], r = { 619 color: [], 620 number: [], 621 var: [] 622 }, n = []; 623 let o = 0; 624 const d = e.replace(pr, (l) => (ge.test(l) ? (r.color.push(o), n.push(xs), s.push(ge.parse(l))) : l.startsWith(fr) ? (r.var.push(o), n.push(gr), s.push(l)) : (r.number.push(o), n.push(ms), s.push(parseFloat(l))), ++o, h0)).split(h0); 625 return { values: s, split: d, indexes: r, types: n }; 626} 627function _s(t) { 628 return e2(t).values; 629} 630function bs(t) { 631 const { split: e, types: s } = e2(t), r = e.length; 632 return (n) => { 633 let o = ""; 634 for (let L = 0; L < r; L++) 635 if (o += e[L], n[L] !== void 0) { 636 const d = s[L]; 637 d === ms ? o += $t(n[L]) : d === xs ? o += ge.transform(n[L]) : o += n[L]; 638 } 639 return o; 640 }; 641} 642const Mr = (t) => typeof t == "number" ? 0 : ge.test(t) ? ge.getAnimatableNone(t) : t; 643function ur(t) { 644 const e = _s(t); 645 return bs(t)(e.map(Mr)); 646} 647const v1 = { 648 test: dr, 649 parse: _s, 650 createTransformer: bs, 651 getAnimatableNone: ur 652}; 653function K3(t, e, s) { 654 return s < 0 && (s += 1), s > 1 && (s -= 1), s < 1 / 6 ? t + (e - t) * 6 * s : s < 1 / 2 ? e : s < 2 / 3 ? t + (e - t) * (2 / 3 - s) * 6 : t; 655} 656function hr({ hue: t, saturation: e, lightness: s, alpha: r }) { 657 t /= 360, e /= 100, s /= 100; 658 let n = 0, o = 0, L = 0; 659 if (!e) 660 n = o = L = s; 661 else { 662 const d = s < 0.5 ? s * (1 + e) : s + e - s * e, l = 2 * s - d; 663 n = K3(l, d, t + 1 / 3), o = K3(l, d, t), L = K3(l, d, t - 1 / 3); 664 } 665 return { 666 red: Math.round(n * 255), 667 green: Math.round(o * 255), 668 blue: Math.round(L * 255), 669 alpha: r 670 }; 671} 672function r3(t, e) { 673 return (s) => s > 0 ? e : t; 674} 675const se = (t, e, s) => t + (e - t) * s, Y3 = (t, e, s) => { 676 const r = t * t, n = s * (e * e - r) + r; 677 return n < 0 ? 0 : Math.sqrt(n); 678}, mr = [T4, z1, rt], xr = (t) => mr.find((e) => e.test(t)); 679function m0(t) { 680 const e = xr(t); 681 if (!e) 682 return !1; 683 let s = e.parse(t); 684 return e === rt && (s = hr(s)), s; 685} 686const x0 = (t, e) => { 687 const s = m0(t), r = m0(e); 688 if (!s || !r) 689 return r3(t, e); 690 const n = { ...s }; 691 return (o) => (n.red = Y3(s.red, r.red, o), n.green = Y3(s.green, r.green, o), n.blue = Y3(s.blue, r.blue, o), n.alpha = se(s.alpha, r.alpha, o), z1.transform(n)); 692}, S4 = /* @__PURE__ */ new Set(["none", "hidden"]); 693function _r(t, e) { 694 return S4.has(t) ? (s) => s <= 0 ? t : e : (s) => s >= 1 ? e : t; 695} 696function br(t, e) { 697 return (s) => se(t, e, s); 698} 699function k5(t) { 700 return typeof t == "number" ? br : typeof t == "string" ? T5(t) ? r3 : ge.test(t) ? x0 : wr : Array.isArray(t) ? vs : typeof t == "object" ? ge.test(t) ? x0 : vr : r3; 701} 702function vs(t, e) { 703 const s = [...t], r = s.length, n = t.map((o, L) => k5(o)(o, e[L])); 704 return (o) => { 705 for (let L = 0; L < r; L++) 706 s[L] = n[L](o); 707 return s; 708 }; 709} 710function vr(t, e) { 711 const s = { ...t, ...e }, r = {}; 712 for (const n in s) 713 t[n] !== void 0 && e[n] !== void 0 && (r[n] = k5(t[n])(t[n], e[n])); 714 return (n) => { 715 for (const o in r) 716 s[o] = r[o](n); 717 return s; 718 }; 719} 720function yr(t, e) { 721 const s = [], r = { color: 0, var: 0, number: 0 }; 722 for (let n = 0; n < e.values.length; n++) { 723 const o = e.types[n], L = t.indexes[o][r[o]], d = t.values[L] ?? 0; 724 s[n] = d, r[o]++; 725 } 726 return s; 727} 728const wr = (t, e) => { 729 const s = v1.createTransformer(e), r = e2(t), n = e2(e); 730 return r.indexes.var.length === n.indexes.var.length && r.indexes.color.length === n.indexes.color.length && r.indexes.number.length >= n.indexes.number.length ? S4.has(t) && !n.values.length || S4.has(e) && !r.values.length ? _r(t, e) : M2(vs(yr(r, n), n.values), s) : r3(t, e); 731}; 732function ys(t, e, s) { 733 return typeof t == "number" && typeof e == "number" && typeof s == "number" ? se(t, e, s) : k5(t)(t, e); 734} 735const Tr = (t) => { 736 const e = ({ timestamp: s }) => t(s); 737 return { 738 start: (s = !0) => $.update(e, s), 739 stop: () => Je(e), 740 /** 741 * If we're processing this frame we can use the 742 * framelocked timestamp to keep things in sync. 743 */ 744 now: () => me.isProcessing ? me.timestamp : Ae.now() 745 }; 746}, ws = (t, e, s = 10) => { 747 let r = "";
vendor: 4,171 bytes, lines 748-897
748 const n = Math.max(Math.round(e / s), 2); 749 for (let o = 0; o < n; o++) 750 r += Math.round(t(o / (n - 1)) * 1e4) / 1e4 + ", "; 751 return `linear(${r.substring(0, r.length - 2)})`; 752}, n3 = 2e4; 753function A5(t) { 754 let e = 0; 755 const s = 50; 756 let r = t.next(e); 757 for (; !r.done && e < n3; ) 758 e += s, r = t.next(e); 759 return e >= n3 ? 1 / 0 : e; 760} 761function Sr(t, e = 100, s) { 762 const r = s({ ...t, keyframes: [0, e] }), n = Math.min(A5(r), n3); 763 return { 764 type: "keyframes", 765 ease: (o) => r.next(n * o).value / e, 766 duration: /* @__PURE__ */ Oe(n) 767 }; 768} 769const Br = 5; 770function Ts(t, e, s) { 771 const r = Math.max(e - Br, 0); 772 return b5(s - t(r), e - r); 773} 774const ne = { 775 // Default spring physics 776 stiffness: 100, 777 damping: 10, 778 mass: 1, 779 velocity: 0, 780 // Default duration/bounce-based options 781 duration: 800, 782 // in ms 783 bounce: 0.3, 784 visualDuration: 0.3, 785 // in seconds 786 // Rest thresholds 787 restSpeed: { 788 granular: 0.01, 789 default: 2 790 }, 791 restDelta: { 792 granular: 5e-3, 793 default: 0.5 794 }, 795 // Limits 796 minDuration: 0.01, 797 // in seconds 798 maxDuration: 10, 799 // in seconds 800 minDamping: 0.05, 801 maxDamping: 1 802}, X3 = 1e-3; 803function kr({ duration: t = ne.duration, bounce: e = ne.bounce, velocity: s = ne.velocity, mass: r = ne.mass }) { 804 let n, o, L = 1 - e; 805 L = i1(ne.minDamping, ne.maxDamping, L), t = i1(ne.minDuration, ne.maxDuration, /* @__PURE__ */ Oe(t)), L < 1 ? (n = (g) => { 806 const f = g * L, p = f * t, M = f - s, u = B4(g, L), h = Math.exp(-p); 807 return X3 - M / u * h; 808 }, o = (g) => { 809 const p = g * L * t, M = p * s + s, u = Math.pow(L, 2) * Math.pow(g, 2) * t, h = Math.exp(-p), x = B4(Math.pow(g, 2), L); 810 return (-n(g) + X3 > 0 ? -1 : 1) * ((M - u) * h) / x; 811 }) : (n = (g) => { 812 const f = Math.exp(-g * t), p = (g - s) * t + 1; 813 return -X3 + f * p; 814 }, o = (g) => { 815 const f = Math.exp(-g * t), p = (s - g) * (t * t); 816 return f * p; 817 }); 818 const d = 5 / t, l = Nr(n, o, d); 819 if (t = /* @__PURE__ */ t1(t), isNaN(l)) 820 return { 821 stiffness: ne.stiffness, 822 damping: ne.damping, 823 duration: t 824 }; 825 { 826 const g = Math.pow(l, 2) * r; 827 return { 828 stiffness: g, 829 damping: L * 2 * Math.sqrt(r * g), 830 duration: t 831 }; 832 } 833} 834const Ar = 12; 835function Nr(t, e, s) { 836 let r = s; 837 for (let n = 1; n < Ar; n++) 838 r = r - t(r) / e(r); 839 return r; 840} 841function B4(t, e) { 842 return t * Math.sqrt(1 - e * e); 843} 844const Ir = ["duration", "bounce"], Pr = ["stiffness", "damping", "mass"]; 845function _0(t, e) { 846 return e.some((s) => t[s] !== void 0); 847} 848function Cr(t) { 849 let e = { 850 velocity: ne.velocity, 851 stiffness: ne.stiffness, 852 damping: ne.damping, 853 mass: ne.mass, 854 isResolvedFromDuration: !1, 855 ...t 856 }; 857 if (!_0(t, Pr) && _0(t, Ir)) 858 if (t.visualDuration) { 859 const s = t.visualDuration, r = 2 * Math.PI / (s * 1.2), n = r * r, o = 2 * i1(0.05, 1, 1 - (t.bounce || 0)) * Math.sqrt(n); 860 e = { 861 ...e, 862 mass: ne.mass, 863 stiffness: n, 864 damping: o 865 }; 866 } else { 867 const s = kr(t); 868 e = { 869 ...e, 870 ...s, 871 mass: ne.mass 872 }, e.isResolvedFromDuration = !0; 873 } 874 return e; 875} 876function o3(t = ne.visualDuration, e = ne.bounce) { 877 const s = typeof t != "object" ? { 878 visualDuration: t, 879 keyframes: [0, 1], 880 bounce: e 881 } : t; 882 let { restSpeed: r, restDelta: n } = s; 883 const o = s.keyframes[0], L = s.keyframes[s.keyframes.length - 1], d = { done: !1, value: o }, { stiffness: l, damping: g, mass: f, duration: p, velocity: M, isResolvedFromDuration: u } = Cr({ 884 ...s, 885 velocity: -/* @__PURE__ */ Oe(s.velocity || 0) 886 }), h = M || 0, x = g / (2 * Math.sqrt(l * f)), _ = L - o, v = /* @__PURE__ */ Oe(Math.sqrt(l / f)), y = Math.abs(_) < 5; 887 r || (r = y ? ne.restSpeed.granular : ne.restSpeed.default), n || (n = y ? ne.restDelta.granular : ne.restDelta.default); 888 let b; 889 if (x < 1) { 890 const k = B4(v, x); 891 b = (A) => { 892 const I = Math.exp(-x * v * A); 893 return L - I * ((h + x * v * _) / k * Math.sin(k * A) + _ * Math.cos(k * A)); 894 }; 895 } else if (x === 1) 896 b = (k) => L - Math.exp(-v * k) * (_ + (h + v * _) * k); 897 else {
vendor: 18,085 bytes, lines 898-1438
898 const k = v * Math.sqrt(x * x - 1); 899 b = (A) => { 900 const I = Math.exp(-x * v * A), w = Math.min(k * A, 300); 901 return L - I * ((h + x * v * _) * Math.sinh(w) + k * _ * Math.cosh(w)) / k; 902 }; 903 } 904 const S = { 905 calculatedDuration: u && p || null, 906 next: (k) => { 907 const A = b(k); 908 if (u) 909 d.done = k >= p; 910 else { 911 let I = k === 0 ? h : 0; 912 x < 1 && (I = k === 0 ? /* @__PURE__ */ t1(h) : Ts(b, k, A)); 913 const w = Math.abs(I) <= r, P = Math.abs(L - A) <= n; 914 d.done = w && P; 915 } 916 return d.value = d.done ? L : A, d; 917 }, 918 toString: () => { 919 const k = Math.min(A5(S), n3), A = ws((I) => S.next(k * I).value, k, 30); 920 return k + "ms " + A; 921 }, 922 toTransition: () => { 923 } 924 }; 925 return S; 926} 927o3.applyToOptions = (t) => { 928 const e = Sr(t, 100, o3); 929 return t.ease = e.ease, t.duration = /* @__PURE__ */ t1(e.duration), t.type = "keyframes", t; 930}; 931function k4({ keyframes: t, velocity: e = 0, power: s = 0.8, timeConstant: r = 325, bounceDamping: n = 10, bounceStiffness: o = 500, modifyTarget: L, min: d, max: l, restDelta: g = 0.5, restSpeed: f }) { 932 const p = t[0], M = { 933 done: !1, 934 value: p 935 }, u = (w) => d !== void 0 && w < d || l !== void 0 && w > l, h = (w) => d === void 0 ? l : l === void 0 || Math.abs(d - w) < Math.abs(l - w) ? d : l; 936 let x = s * e; 937 const _ = p + x, v = L === void 0 ? _ : L(_); 938 v !== _ && (x = v - p); 939 const y = (w) => -x * Math.exp(-w / r), b = (w) => v + y(w), S = (w) => { 940 const P = y(w), z = b(w); 941 M.done = Math.abs(P) <= g, M.value = M.done ? v : z; 942 }; 943 let k, A; 944 const I = (w) => { 945 u(M.value) && (k = w, A = o3({ 946 keyframes: [M.value, h(M.value)], 947 velocity: Ts(b, w, M.value), 948 // TODO: This should be passing * 1000 949 damping: n, 950 stiffness: o, 951 restDelta: g, 952 restSpeed: f 953 })); 954 }; 955 return I(0), { 956 calculatedDuration: null, 957 next: (w) => { 958 let P = !1; 959 return !A && k === void 0 && (P = !0, S(w), I(w)), k !== void 0 && w >= k ? A.next(w - k) : (!P && S(w), M); 960 } 961 }; 962} 963function Fr(t, e, s) { 964 const r = [], n = s || u1.mix || ys, o = t.length - 1; 965 for (let L = 0; L < o; L++) { 966 let d = n(t[L], t[L + 1]); 967 if (e) { 968 const l = Array.isArray(e) ? e[L] || Ne : e; 969 d = M2(l, d); 970 } 971 r.push(d); 972 } 973 return r; 974} 975function N5(t, e, { clamp: s = !0, ease: r, mixer: n } = {}) { 976 const o = t.length; 977 if (Xt(o === e.length), o === 1) 978 return () => e[0]; 979 if (o === 2 && e[0] === e[1]) 980 return () => e[1]; 981 const L = t[0] === t[1]; 982 t[0] > t[o - 1] && (t = [...t].reverse(), e = [...e].reverse()); 983 const d = Fr(e, r, n), l = d.length, g = (f) => { 984 if (L && f < t[0]) 985 return e[0]; 986 let p = 0; 987 if (l > 1) 988 for (; p < t.length - 2 && !(f < t[p + 1]); p++) 989 ; 990 const M = /* @__PURE__ */ vt(t[p], t[p + 1], f); 991 return d[p](M); 992 }; 993 return s ? (f) => g(i1(t[0], t[o - 1], f)) : g; 994} 995function Er(t, e) { 996 const s = t[t.length - 1]; 997 for (let r = 1; r <= e; r++) { 998 const n = /* @__PURE__ */ vt(0, e, r); 999 t.push(se(s, 1, n)); 1000 } 1001} 1002function Ss(t) { 1003 const e = [0]; 1004 return Er(e, t.length - 1), e; 1005} 1006function Rr(t, e) { 1007 return t.map((s) => s * e); 1008} 1009function Dr(t, e) { 1010 return t.map(() => e || fs).splice(0, t.length - 1); 1011} 1012function qt({ duration: t = 300, keyframes: e, times: s, ease: r = "easeInOut" }) { 1013 const n = K9(r) ? r.map(M0) : M0(r), o = { 1014 done: !1, 1015 value: e[0] 1016 }, L = Rr( 1017 // Only use the provided offsets if they're the correct length 1018 // TODO Maybe we should warn here if there's a length mismatch 1019 s && s.length === e.length ? s : Ss(e), 1020 t 1021 ), d = N5(L, e, { 1022 ease: Array.isArray(n) ? n : Dr(e, n) 1023 }); 1024 return { 1025 calculatedDuration: t, 1026 next: (l) => (o.value = d(l), o.done = l >= t, o) 1027 }; 1028} 1029const zr = (t) => t !== null; 1030function I5(t, { repeat: e, repeatType: s = "loop" }, r, n = 1) { 1031 const o = t.filter(zr), d = n < 0 || e && s !== "loop" && e % 2 === 1 ? 0 : o.length - 1; 1032 return !d || r === void 0 ? o[d] : r; 1033} 1034const jr = { 1035 decay: k4, 1036 inertia: k4, 1037 tween: qt, 1038 keyframes: qt, 1039 spring: o3 1040}; 1041function Bs(t) { 1042 typeof t.type == "string" && (t.type = jr[t.type]); 1043} 1044class P5 { 1045 constructor() { 1046 this.updateFinished(); 1047 } 1048 get finished() { 1049 return this._finished; 1050 } 1051 updateFinished() { 1052 this._finished = new Promise((e) => { 1053 this.resolve = e; 1054 }); 1055 } 1056 notifyFinished() { 1057 this.resolve(); 1058 } 1059 /** 1060 * Allows the animation to be awaited. 1061 * 1062 * @deprecated Use `finished` instead. 1063 */ 1064 then(e, s) { 1065 return this.finished.then(e, s); 1066 } 1067} 1068const Or = (t) => t / 100; 1069class S3 extends P5 { 1070 constructor(e) { 1071 super(), this.state = "idle", this.startTime = null, this.isStopped = !1, this.currentTime = 0, this.holdTime = null, this.playbackSpeed = 1, this.stop = () => { 1072 const { motionValue: s } = this.options; 1073 s && s.updatedAt !== Ae.now() && this.tick(Ae.now()), this.isStopped = !0, this.state !== "idle" && (this.teardown(), this.options.onStop?.()); 1074 }, this.options = e, this.initAnimation(), this.play(), e.autoplay === !1 && this.pause(); 1075 } 1076 initAnimation() { 1077 const { options: e } = this; 1078 Bs(e); 1079 const { type: s = qt, repeat: r = 0, repeatDelay: n = 0, repeatType: o, velocity: L = 0 } = e; 1080 let { keyframes: d } = e; 1081 const l = s || qt; 1082 l !== qt && typeof d[0] != "number" && (this.mixKeyframes = M2(Or, ys(d[0], d[1])), d = [0, 100]); 1083 const g = l({ ...e, keyframes: d }); 1084 o === "mirror" && (this.mirroredGenerator = l({ 1085 ...e, 1086 keyframes: [...d].reverse(), 1087 velocity: -L 1088 })), g.calculatedDuration === null && (g.calculatedDuration = A5(g)); 1089 const { calculatedDuration: f } = g; 1090 this.calculatedDuration = f, this.resolvedDuration = f + n, this.totalDuration = this.resolvedDuration * (r + 1) - n, this.generator = g; 1091 } 1092 updateTime(e) { 1093 const s = Math.round(e - this.startTime) * this.playbackSpeed; 1094 this.holdTime !== null ? this.currentTime = this.holdTime : this.currentTime = s; 1095 } 1096 tick(e, s = !1) { 1097 const { generator: r, totalDuration: n, mixKeyframes: o, mirroredGenerator: L, resolvedDuration: d, calculatedDuration: l } = this; 1098 if (this.startTime === null) 1099 return r.next(0); 1100 const { delay: g = 0, keyframes: f, repeat: p, repeatType: M, repeatDelay: u, type: h, onUpdate: x, finalKeyframe: _ } = this.options; 1101 this.speed > 0 ? this.startTime = Math.min(this.startTime, e) : this.speed < 0 && (this.startTime = Math.min(e - n / this.speed, this.startTime)), s ? this.currentTime = e : this.updateTime(e); 1102 const v = this.currentTime - g * (this.playbackSpeed >= 0 ? 1 : -1), y = this.playbackSpeed >= 0 ? v < 0 : v > n; 1103 this.currentTime = Math.max(v, 0), this.state === "finished" && this.holdTime === null && (this.currentTime = n); 1104 let b = this.currentTime, S = r; 1105 if (p) { 1106 const w = Math.min(this.currentTime, n) / d; 1107 let P = Math.floor(w), z = w % 1; 1108 !z && w >= 1 && (z = 1), z === 1 && P--, P = Math.min(P, p + 1), !!(P % 2) && (M === "reverse" ? (z = 1 - z, u && (z -= u / d)) : M === "mirror" && (S = L)), b = i1(0, 1, z) * d; 1109 } 1110 const k = y ? { done: !1, value: f[0] } : S.next(b); 1111 o && (k.value = o(k.value)); 1112 let { done: A } = k; 1113 !y && l !== null && (A = this.playbackSpeed >= 0 ? this.currentTime >= n : this.currentTime <= 0); 1114 const I = this.holdTime === null && (this.state === "finished" || this.state === "running" && A); 1115 return I && h !== k4 && (k.value = I5(f, this.options, _, this.speed)), x && x(k.value), I && this.finish(), k; 1116 } 1117 /** 1118 * Allows the returned animation to be awaited or promise-chained. Currently 1119 * resolves when the animation finishes at all but in a future update could/should 1120 * reject if its cancels. 1121 */ 1122 then(e, s) { 1123 return this.finished.then(e, s); 1124 } 1125 get duration() { 1126 return /* @__PURE__ */ Oe(this.calculatedDuration); 1127 } 1128 get iterationDuration() { 1129 const { delay: e = 0 } = this.options || {}; 1130 return this.duration + /* @__PURE__ */ Oe(e); 1131 } 1132 get time() { 1133 return /* @__PURE__ */ Oe(this.currentTime); 1134 } 1135 set time(e) { 1136 e = /* @__PURE__ */ t1(e), this.currentTime = e, this.startTime === null || this.holdTime !== null || this.playbackSpeed === 0 ? this.holdTime = e : this.driver && (this.startTime = this.driver.now() - e / this.playbackSpeed), this.driver?.start(!1); 1137 } 1138 get speed() { 1139 return this.playbackSpeed; 1140 } 1141 set speed(e) { 1142 this.updateTime(Ae.now()); 1143 const s = this.playbackSpeed !== e; 1144 this.playbackSpeed = e, s && (this.time = /* @__PURE__ */ Oe(this.currentTime)); 1145 } 1146 play() { 1147 if (this.isStopped) 1148 return; 1149 const { driver: e = Tr, startTime: s } = this.options; 1150 this.driver || (this.driver = e((n) => this.tick(n))), this.options.onPlay?.(); 1151 const r = this.driver.now(); 1152 this.state === "finished" ? (this.updateFinished(), this.startTime = r) : this.holdTime !== null ? this.startTime = r - this.holdTime : this.startTime || (this.startTime = s ?? r), this.state === "finished" && this.speed < 0 && (this.startTime += this.calculatedDuration), this.holdTime = null, this.state = "running", this.driver.start(); 1153 } 1154 pause() { 1155 this.state = "paused", this.updateTime(Ae.now()), this.holdTime = this.currentTime; 1156 } 1157 complete() { 1158 this.state !== "running" && this.play(), this.state = "finished", this.holdTime = null; 1159 } 1160 finish() { 1161 this.notifyFinished(), this.teardown(), this.state = "finished", this.options.onComplete?.(); 1162 } 1163 cancel() { 1164 this.holdTime = null, this.startTime = 0, this.tick(0), this.teardown(), this.options.onCancel?.(); 1165 } 1166 teardown() { 1167 this.state = "idle", this.stopDriver(), this.startTime = this.holdTime = null; 1168 } 1169 stopDriver() { 1170 this.driver && (this.driver.stop(), this.driver = void 0); 1171 } 1172 sample(e) { 1173 return this.startTime = 0, this.tick(e, !0); 1174 } 1175 attachTimeline(e) { 1176 return this.options.allowFlatten && (this.options.type = "keyframes", this.options.ease = "linear", this.initAnimation()), this.driver?.stop(), e.observe(this); 1177 } 1178} 1179function Vr(t) { 1180 for (let e = 1; e < t.length; e++) 1181 t[e] ?? (t[e] = t[e - 1]); 1182} 1183const j1 = (t) => t * 180 / Math.PI, A4 = (t) => { 1184 const e = j1(Math.atan2(t[1], t[0])); 1185 return N4(e); 1186}, Hr = { 1187 x: 4, 1188 y: 5, 1189 translateX: 4, 1190 translateY: 5, 1191 scaleX: 0, 1192 scaleY: 3, 1193 scale: (t) => (Math.abs(t[0]) + Math.abs(t[3])) / 2, 1194 rotate: A4, 1195 rotateZ: A4, 1196 skewX: (t) => j1(Math.atan(t[1])), 1197 skewY: (t) => j1(Math.atan(t[2])), 1198 skew: (t) => (Math.abs(t[1]) + Math.abs(t[2])) / 2 1199}, N4 = (t) => (t = t % 360, t < 0 && (t += 360), t), b0 = A4, v0 = (t) => Math.sqrt(t[0] * t[0] + t[1] * t[1]), y0 = (t) => Math.sqrt(t[4] * t[4] + t[5] * t[5]), Zr = { 1200 x: 12, 1201 y: 13, 1202 z: 14, 1203 translateX: 12, 1204 translateY: 13, 1205 translateZ: 14, 1206 scaleX: v0, 1207 scaleY: y0, 1208 scale: (t) => (v0(t) + y0(t)) / 2, 1209 rotateX: (t) => N4(j1(Math.atan2(t[6], t[5]))), 1210 rotateY: (t) => N4(j1(Math.atan2(-t[2], t[0]))), 1211 rotateZ: b0, 1212 rotate: b0, 1213 skewX: (t) => j1(Math.atan(t[4])), 1214 skewY: (t) => j1(Math.atan(t[1])), 1215 skew: (t) => (Math.abs(t[1]) + Math.abs(t[4])) / 2 1216}; 1217function I4(t) { 1218 return t.includes("scale") ? 1 : 0; 1219} 1220function P4(t, e) { 1221 if (!t || t === "none") 1222 return I4(e); 1223 const s = t.match(/^matrix3d\(([-\d.e\s,]+)\)$/u); 1224 let r, n; 1225 if (s) 1226 r = Zr, n = s; 1227 else { 1228 const d = t.match(/^matrix\(([-\d.e\s,]+)\)$/u); 1229 r = Hr, n = d; 1230 } 1231 if (!n) 1232 return I4(e); 1233 const o = r[e], L = n[1].split(",").map($r); 1234 return typeof o == "function" ? o(L) : L[o]; 1235} 1236const Wr = (t, e) => { 1237 const { transform: s = "none" } = getComputedStyle(t); 1238 return P4(s, e); 1239}; 1240function $r(t) { 1241 return parseFloat(t.trim()); 1242} 1243const kt = [ 1244 "transformPerspective", 1245 "x", 1246 "y", 1247 "z", 1248 "translateX", 1249 "translateY", 1250 "translateZ", 1251 "scale", 1252 "scaleX", 1253 "scaleY", 1254 "rotate", 1255 "rotateX", 1256 "rotateY", 1257 "rotateZ", 1258 "skew", 1259 "skewX", 1260 "skewY" 1261], At = new Set(kt), w0 = (t) => t === Bt || t === R, qr = /* @__PURE__ */ new Set(["x", "y", "z"]), Ur = kt.filter((t) => !qr.has(t)); 1262function Gr(t) { 1263 const e = []; 1264 return Ur.forEach((s) => { 1265 const r = t.getValue(s); 1266 r !== void 0 && (e.push([s, r.get()]), r.set(s.startsWith("scale") ? 1 : 0)); 1267 }), e; 1268} 1269const q1 = { 1270 // Dimensions 1271 width: ({ x: t }, { paddingLeft: e = "0", paddingRight: s = "0" }) => t.max - t.min - parseFloat(e) - parseFloat(s), 1272 height: ({ y: t }, { paddingTop: e = "0", paddingBottom: s = "0" }) => t.max - t.min - parseFloat(e) - parseFloat(s), 1273 top: (t, { top: e }) => parseFloat(e), 1274 left: (t, { left: e }) => parseFloat(e), 1275 bottom: ({ y: t }, { top: e }) => parseFloat(e) + (t.max - t.min), 1276 right: ({ x: t }, { left: e }) => parseFloat(e) + (t.max - t.min), 1277 // Transform 1278 x: (t, { transform: e }) => P4(e, "x"), 1279 y: (t, { transform: e }) => P4(e, "y") 1280}; 1281q1.translateX = q1.x; 1282q1.translateY = q1.y; 1283const U1 = /* @__PURE__ */ new Set(); 1284let C4 = !1, F4 = !1, E4 = !1; 1285function ks() { 1286 if (F4) { 1287 const t = Array.from(U1).filter((r) => r.needsMeasurement), e = new Set(t.map((r) => r.element)), s = /* @__PURE__ */ new Map(); 1288 e.forEach((r) => { 1289 const n = Gr(r); 1290 n.length && (s.set(r, n), r.render()); 1291 }), t.forEach((r) => r.measureInitialState()), e.forEach((r) => { 1292 r.render(); 1293 const n = s.get(r); 1294 n && n.forEach(([o, L]) => { 1295 r.getValue(o)?.set(L); 1296 }); 1297 }), t.forEach((r) => r.measureEndState()), t.forEach((r) => { 1298 r.suspendedScrollY !== void 0 && window.scrollTo(0, r.suspendedScrollY); 1299 }); 1300 } 1301 F4 = !1, C4 = !1, U1.forEach((t) => t.complete(E4)), U1.clear(); 1302} 1303function As() { 1304 U1.forEach((t) => { 1305 t.readKeyframes(), t.needsMeasurement && (F4 = !0); 1306 }); 1307} 1308function Jr() { 1309 E4 = !0, As(), ks(), E4 = !1; 1310} 1311class C5 { 1312 constructor(e, s, r, n, o, L = !1) { 1313 this.state = "pending", this.isAsync = !1, this.needsMeasurement = !1, this.unresolvedKeyframes = [...e], this.onComplete = s, this.name = r, this.motionValue = n, this.element = o, this.isAsync = L; 1314 } 1315 scheduleResolve() { 1316 this.state = "scheduled", this.isAsync ? (U1.add(this), C4 || (C4 = !0, $.read(As), $.resolveKeyframes(ks))) : (this.readKeyframes(), this.complete()); 1317 } 1318 readKeyframes() { 1319 const { unresolvedKeyframes: e, name: s, element: r, motionValue: n } = this; 1320 if (e[0] === null) { 1321 const o = n?.get(), L = e[e.length - 1]; 1322 if (o !== void 0) 1323 e[0] = o; 1324 else if (r && s) { 1325 const d = r.readValue(s, L); 1326 d != null && (e[0] = d); 1327 } 1328 e[0] === void 0 && (e[0] = L), n && o === void 0 && n.set(e[0]); 1329 } 1330 Vr(e); 1331 } 1332 setFinalKeyframe() { 1333 } 1334 measureInitialState() { 1335 } 1336 renderEndStyles() { 1337 } 1338 measureEndState() { 1339 } 1340 complete(e = !1) { 1341 this.state = "complete", this.onComplete(this.unresolvedKeyframes, this.finalKeyframe, e), U1.delete(this); 1342 } 1343 cancel() { 1344 this.state === "scheduled" && (U1.delete(this), this.state = "pending"); 1345 } 1346 resume() { 1347 this.state === "pending" && this.scheduleResolve(); 1348 } 1349} 1350const Kr = (t) => t.startsWith("--"); 1351function Yr(t, e, s) { 1352 Kr(e) ? t.style.setProperty(e, s) : t.style[e] = s; 1353} 1354const Ns = /* @__PURE__ */ x5(() => window.ScrollTimeline !== void 0), Xr = {}; 1355function Qr(t, e) { 1356 const s = /* @__PURE__ */ x5(t); 1357 return () => Xr[e] ?? s(); 1358} 1359const Is = /* @__PURE__ */ Qr(() => { 1360 try { 1361 document.createElement("div").animate({ opacity: 0 }, { easing: "linear(0, 1)" }); 1362 } catch { 1363 return !1; 1364 } 1365 return !0; 1366}, "linearEasing"), Vt = ([t, e, s, r]) => `cubic-bezier(${t}, ${e}, ${s}, ${r})`, T0 = { 1367 linear: "linear", 1368 ease: "ease", 1369 easeIn: "ease-in", 1370 easeOut: "ease-out", 1371 easeInOut: "ease-in-out", 1372 circIn: /* @__PURE__ */ Vt([0, 0.65, 0.55, 1]), 1373 circOut: /* @__PURE__ */ Vt([0.55, 0, 1, 0.45]), 1374 backIn: /* @__PURE__ */ Vt([0.31, 0.01, 0.66, -0.59]), 1375 backOut: /* @__PURE__ */ Vt([0.33, 1.53, 0.69, 0.99]) 1376}; 1377function Ps(t, e) { 1378 if (t) 1379 return typeof t == "function" ? Is() ? ws(t, e) : "ease-out" : ps(t) ? Vt(t) : Array.isArray(t) ? t.map((s) => Ps(s, e) || T0.easeOut) : T0[t]; 1380} 1381function en(t, e, s, { delay: r = 0, duration: n = 300, repeat: o = 0, repeatType: L = "loop", ease: d = "easeOut", times: l } = {}, g = void 0) { 1382 const f = { 1383 [e]: s 1384 }; 1385 l && (f.offset = l); 1386 const p = Ps(d, n); 1387 Array.isArray(p) && (f.easing = p); 1388 const M = { 1389 delay: r, 1390 duration: n, 1391 easing: Array.isArray(p) ? "linear" : p, 1392 fill: "both", 1393 iterations: o + 1, 1394 direction: L === "reverse" ? "alternate" : "normal" 1395 }; 1396 return g && (M.pseudoElement = g), t.animate(f, M); 1397} 1398function Cs(t) { 1399 return typeof t == "function" && "applyToOptions" in t; 1400} 1401function tn({ type: t, ...e }) { 1402 return Cs(t) && Is() ? t.applyToOptions(e) : (e.duration ?? (e.duration = 300), e.ease ?? (e.ease = "easeOut"), e); 1403} 1404class an extends P5 { 1405 constructor(e) { 1406 if (super(), this.finishedTime = null, this.isStopped = !1, !e) 1407 return; 1408 const { element: s, name: r, keyframes: n, pseudoElement: o, allowFlatten: L = !1, finalKeyframe: d, onComplete: l } = e; 1409 this.isPseudoElement = !!o, this.allowFlatten = L, this.options = e, Xt(typeof e.type != "string"); 1410 const g = tn(e); 1411 this.animation = en(s, r, n, g, o), g.autoplay === !1 && this.animation.pause(), this.animation.onfinish = () => { 1412 if (this.finishedTime = this.time, !o) { 1413 const f = I5(n, this.options, d, this.speed); 1414 this.updateMotionValue ? this.updateMotionValue(f) : Yr(s, r, f), this.animation.cancel(); 1415 } 1416 l?.(), this.notifyFinished(); 1417 }; 1418 } 1419 play() { 1420 this.isStopped || (this.animation.play(), this.state === "finished" && this.updateFinished()); 1421 } 1422 pause() { 1423 this.animation.pause(); 1424 } 1425 complete() { 1426 this.animation.finish?.(); 1427 } 1428 cancel() { 1429 try { 1430 this.animation.cancel(); 1431 } catch { 1432 } 1433 } 1434 stop() { 1435 if (this.isStopped) 1436 return; 1437 this.isStopped = !0; 1438 const { state: e } = this;
1439 e === "idle" || e === "finished" || (this.updateMotionValue ? this.updateMotionValue() : this.commitStyles(), this.isPseudoElement || this.cancel()); 1440 } 1441 /** 1442 * WAAPI doesn't natively have any interruption capabilities. 1443 * 1444 * In this method, we commit styles back to the DOM before cancelling 1445 * the animation. 1446 * 1447 * This is designed to be overridden by NativeAnimationExtended, which 1448 * will create a renderless JS animation and sample it twice to calculate 1449 * its current value, "previous" value, and therefore allow 1450 * Motion to also correctly calculate velocity for any subsequent animation 1451 * while deferring the commit until the next animation frame. 1452 */ 1453 commitStyles() { 1454 this.isPseudoElement || this.animation.commitStyles?.(); 1455 } 1456 get duration() { 1457 const e = this.animation.effect?.getComputedTiming?.().duration || 0; 1458 return /* @__PURE__ */ Oe(Number(e)); 1459 } 1460 get iterationDuration() { 1461 const { delay: e = 0 } = this.options || {}; 1462 return this.duration + /* @__PURE__ */ Oe(e); 1463 } 1464 get time() { 1465 return /* @__PURE__ */ Oe(Number(this.animation.currentTime) || 0); 1466 } 1467 set time(e) { 1468 this.finishedTime = null, this.animation.currentTime = /* @__PURE__ */ t1(e); 1469 } 1470 /** 1471 * The playback speed of the animation. 1472 * 1 = normal speed, 2 = double speed, 0.5 = half speed. 1473 */ 1474 get speed() { 1475 return this.animation.playbackRate; 1476 } 1477 set speed(e) { 1478 e < 0 && (this.finishedTime = null), this.animation.playbackRate = e; 1479 } 1480 get state() { 1481 return this.finishedTime !== null ? "finished" : this.animation.playState; 1482 } 1483 get startTime() { 1484 return Number(this.animation.startTime); 1485 } 1486 set startTime(e) { 1487 this.animation.startTime = e; 1488 } 1489 /** 1490 * Attaches a timeline to the animation, for instance the `ScrollTimeline`. 1491 */ 1492 attachTimeline({ timeline: e, observe: s }) { 1493 return this.allowFlatten && this.animation.effect?.updateTiming({ easing: "linear" }), this.animation.onfinish = null, e && Ns() ? (this.animation.timeline = e, Ne) : s(this); 1494 } 1495} 1496const Fs = { 1497 anticipate: ls, 1498 backInOut: cs, 1499 circInOut: gs 1500}; 1501function sn(t) { 1502 return t in Fs; 1503} 1504function rn(t) { 1505 typeof t.ease == "string" && sn(t.ease) && (t.ease = Fs[t.ease]); 1506} 1507const S0 = 10; 1508class nn extends an { 1509 constructor(e) { 1510 rn(e), Bs(e), super(e), e.startTime && (this.startTime = e.startTime), this.options = e; 1511 } 1512 /** 1513 * WAAPI doesn't natively have any interruption capabilities. 1514 * 1515 * Rather than read commited styles back out of the DOM, we can 1516 * create a renderless JS animation and sample it twice to calculate 1517 * its current value, "previous" value, and therefore allow 1518 * Motion to calculate velocity for any subsequent animation. 1519 */ 1520 updateMotionValue(e) { 1521 const { motionValue: s, onUpdate: r, onComplete: n, element: o, ...L } = this.options; 1522 if (!s) 1523 return; 1524 if (e !== void 0) { 1525 s.set(e); 1526 return; 1527 } 1528 const d = new S3({ 1529 ...L, 1530 autoplay: !1 1531 }), l = /* @__PURE__ */ t1(this.finishedTime ?? this.time); 1532 s.setWithVelocity(d.sample(l - S0).value, d.sample(l).value, S0), d.stop(); 1533 } 1534} 1535const B0 = (t, e) => e === "zIndex" ? !1 : !!(typeof t == "number" || Array.isArray(t) || typeof t == "string" && // It's animatable if we have a string 1536(v1.test(t) || t === "0") && // And it contains numbers and/or colors 1537!t.startsWith("url(")); 1538function on(t) { 1539 const e = t[0]; 1540 if (t.length === 1) 1541 return !0; 1542 for (let s = 0; s < t.length; s++) 1543 if (t[s] !== e) 1544 return !0; 1545} 1546function Ln(t, e, s, r) { 1547 const n = t[0]; 1548 if (n === null) 1549 return !1; 1550 if (e === "display" || e === "visibility") 1551 return !0; 1552 const o = t[t.length - 1], L = B0(n, e), d = B0(o, e); 1553 return !L || !d ? !1 : on(t) || (s === "spring" || Cs(s)) && r; 1554} 1555function R4(t) { 1556 t.duration = 0, t.type = "keyframes"; 1557} 1558const cn = /* @__PURE__ */ new Set([ 1559 "opacity", 1560 "clipPath", 1561 "filter", 1562 "transform" 1563 // TODO: Could be re-enabled now we have support for linear() easing 1564 // "background-color" 1565]), ln = /* @__PURE__ */ x5(() => Object.hasOwnProperty.call(Element.prototype, "animate")); 1566function dn(t) { 1567 const { motionValue: e, name: s, repeatDelay: r, repeatType: n, damping: o, type: L } = t; 1568 if (!(e?.owner?.current instanceof HTMLElement)) 1569 return !1; 1570 const { onUpdate: l, transformTemplate: g } = e.owner.getProps(); 1571 return ln() && s && cn.has(s) && (s !== "transform" || !g) && /** 1572 * If we're outputting values to onUpdate then we can't use WAAPI as there's 1573 * no way to read the value from WAAPI every frame. 1574 */ 1575 !l && !r && n !== "mirror" && o !== 0 && L !== "inertia"; 1576} 1577const gn = 40; 1578class fn extends P5 { 1579 constructor({ autoplay: e = !0, delay: s = 0, type: r = "keyframes", repeat: n = 0, repeatDelay: o = 0, repeatType: L = "loop", keyframes: d, name: l, motionValue: g, element: f, ...p }) { 1580 super(), this.stop = () => { 1581 this._animation && (this._animation.stop(), this.stopTimeline?.()), this.keyframeResolver?.cancel(); 1582 }, this.createdAt = Ae.now(); 1583 const M = { 1584 autoplay: e, 1585 delay: s, 1586 type: r, 1587 repeat: n, 1588 repeatDelay: o, 1589 repeatType: L, 1590 name: l, 1591 motionValue: g, 1592 element: f, 1593 ...p 1594 }, u = f?.KeyframeResolver || C5; 1595 this.keyframeResolver = new u(d, (h, x, _) => this.onKeyframesResolved(h, x, M, !_), l, g, f), this.keyframeResolver?.scheduleResolve(); 1596 } 1597 onKeyframesResolved(e, s, r, n) { 1598 this.keyframeResolver = void 0; 1599 const { name: o, type: L, velocity: d, delay: l, isHandoff: g, onUpdate: f } = r; 1600 this.resolvedAt = Ae.now(), Ln(e, o, L, d) || ((u1.instantAnimations || !l) && f?.(I5(e, r, s)), e[0] = e[e.length - 1], R4(r), r.repeat = 0); 1601 const M = { 1602 startTime: n ? this.resolvedAt ? this.resolvedAt - this.createdAt > gn ? this.resolvedAt : this.createdAt : this.createdAt : void 0, 1603 finalKeyframe: s, 1604 ...r, 1605 keyframes: e 1606 }, u = !g && dn(M) ? new nn({ 1607 ...M, 1608 element: M.motionValue.owner.current 1609 }) : new S3(M); 1610 u.finished.then(() => this.notifyFinished()).catch(Ne), this.pendingTimeline && (this.stopTimeline = u.attachTimeline(this.pendingTimeline), this.pendingTimeline = void 0), this._animation = u; 1611 } 1612 get finished() { 1613 return this._animation ? this.animation.finished : this._finished; 1614 } 1615 then(e, s) { 1616 return this.finished.finally(e).then(() => { 1617 }); 1618 } 1619 get animation() { 1620 return this._animation || (this.keyframeResolver?.resume(), Jr()), this._animation; 1621 } 1622 get duration() { 1623 return this.animation.duration; 1624 } 1625 get iterationDuration() { 1626 return this.animation.iterationDuration; 1627 } 1628 get time() { 1629 return this.animation.time; 1630 } 1631 set time(e) { 1632 this.animation.time = e; 1633 } 1634 get speed() { 1635 return this.animation.speed; 1636 } 1637 get state() { 1638 return this.animation.state; 1639 } 1640 set speed(e) { 1641 this.animation.speed = e; 1642 } 1643 get startTime() { 1644 return this.animation.startTime; 1645 } 1646 attachTimeline(e) { 1647 return this._animation ? this.stopTimeline = this.animation.attachTimeline(e) : this.pendingTimeline = e, () => this.stop(); 1648 } 1649 play() { 1650 this.animation.play(); 1651 } 1652 pause() { 1653 this.animation.pause(); 1654 } 1655 complete() { 1656 this.animation.complete(); 1657 } 1658 cancel() { 1659 this._animation && this.animation.cancel(), this.keyframeResolver?.cancel(); 1660 } 1661} 1662const pn = ( 1663 // eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words 1664 /^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u 1665); 1666function Mn(t) { 1667 const e = pn.exec(t); 1668 if (!e) 1669 return [,]; 1670 const [, s, r, n] = e; 1671 return [`--${s ?? r}`, n]; 1672} 1673function Es(t, e, s = 1) { 1674 const [r, n] = Mn(t); 1675 if (!r) 1676 return; 1677 const o = window.getComputedStyle(e).getPropertyValue(r); 1678 if (o) { 1679 const L = o.trim(); 1680 return as(L) ? parseFloat(L) : L; 1681 } 1682 return T5(n) ? Es(n, e, s + 1) : n; 1683} 1684function F5(t, e) { 1685 return t?.[e] ?? t?.default ?? t; 1686} 1687const Rs = /* @__PURE__ */ new Set([ 1688 "width", 1689 "height", 1690 "top", 1691 "left", 1692 "right", 1693 "bottom", 1694 ...kt 1695]), un = { 1696 test: (t) => t === "auto", 1697 parse: (t) => t 1698}, Ds = (t) => (e) => e.test(t), zs = [Bt, R, a1, m1, cr, Lr, un], k0 = (t) => zs.find(Ds(t)); 1699function hn(t) { 1700 return typeof t == "number" ? t === 0 : t !== null ? t === "none" || t === "0" || is(t) : !0; 1701} 1702const mn = /* @__PURE__ */ new Set(["brightness", "contrast", "saturate", "opacity"]); 1703function xn(t) { 1704 const [e, s] = t.slice(0, -1).split("("); 1705 if (e === "drop-shadow") 1706 return t;
vendor: 13,856 bytes, lines 1707-2195
1707 const [r] = s.match(S5) || []; 1708 if (!r) 1709 return t; 1710 const n = s.replace(r, ""); 1711 let o = mn.has(e) ? 1 : 0; 1712 return r !== s && (o *= 100), e + "(" + o + n + ")"; 1713} 1714const _n = /\b([a-z-]*)\(.*?\)/gu, D4 = { 1715 ...v1, 1716 getAnimatableNone: (t) => { 1717 const e = t.match(_n); 1718 return e ? e.map(xn).join(" ") : t; 1719 } 1720}, A0 = { 1721 ...Bt, 1722 transform: Math.round 1723}, bn = { 1724 rotate: m1, 1725 rotateX: m1, 1726 rotateY: m1, 1727 rotateZ: m1, 1728 scale: S2, 1729 scaleX: S2, 1730 scaleY: S2, 1731 scaleZ: S2, 1732 skew: m1, 1733 skewX: m1, 1734 skewY: m1, 1735 distance: R, 1736 translateX: R, 1737 translateY: R, 1738 translateZ: R, 1739 x: R, 1740 y: R, 1741 z: R, 1742 perspective: R, 1743 transformPerspective: R, 1744 opacity: Qt, 1745 originX: u0, 1746 originY: u0, 1747 originZ: R 1748}, E5 = { 1749 // Border props 1750 borderWidth: R, 1751 borderTopWidth: R, 1752 borderRightWidth: R, 1753 borderBottomWidth: R, 1754 borderLeftWidth: R, 1755 borderRadius: R, 1756 radius: R, 1757 borderTopLeftRadius: R, 1758 borderTopRightRadius: R, 1759 borderBottomRightRadius: R, 1760 borderBottomLeftRadius: R, 1761 // Positioning props 1762 width: R, 1763 maxWidth: R, 1764 height: R, 1765 maxHeight: R, 1766 top: R, 1767 right: R, 1768 bottom: R, 1769 left: R, 1770 // Spacing props 1771 padding: R, 1772 paddingTop: R, 1773 paddingRight: R, 1774 paddingBottom: R, 1775 paddingLeft: R, 1776 margin: R, 1777 marginTop: R, 1778 marginRight: R, 1779 marginBottom: R, 1780 marginLeft: R, 1781 // Misc 1782 backgroundPositionX: R, 1783 backgroundPositionY: R, 1784 ...bn, 1785 zIndex: A0, 1786 // SVG 1787 fillOpacity: Qt, 1788 strokeOpacity: Qt, 1789 numOctaves: A0 1790}, vn = { 1791 ...E5, 1792 // Color props 1793 color: ge, 1794 backgroundColor: ge, 1795 outlineColor: ge, 1796 fill: ge, 1797 stroke: ge, 1798 // Border props 1799 borderColor: ge, 1800 borderTopColor: ge, 1801 borderRightColor: ge, 1802 borderBottomColor: ge, 1803 borderLeftColor: ge, 1804 filter: D4, 1805 WebkitFilter: D4 1806}, js = (t) => vn[t]; 1807function Os(t, e) { 1808 let s = js(t); 1809 return s !== D4 && (s = v1), s.getAnimatableNone ? s.getAnimatableNone(e) : void 0; 1810} 1811const yn = /* @__PURE__ */ new Set(["auto", "none", "0"]); 1812function wn(t, e, s) { 1813 let r = 0, n; 1814 for (; r < t.length && !n; ) { 1815 const o = t[r]; 1816 typeof o == "string" && !yn.has(o) && e2(o).values.length && (n = t[r]), r++; 1817 } 1818 if (n && s) 1819 for (const o of e) 1820 t[o] = Os(s, n); 1821} 1822class Tn extends C5 { 1823 constructor(e, s, r, n, o) { 1824 super(e, s, r, n, o, !0); 1825 } 1826 readKeyframes() { 1827 const { unresolvedKeyframes: e, element: s, name: r } = this; 1828 if (!s || !s.current) 1829 return; 1830 super.readKeyframes(); 1831 for (let l = 0; l < e.length; l++) { 1832 let g = e[l]; 1833 if (typeof g == "string" && (g = g.trim(), T5(g))) { 1834 const f = Es(g, s.current); 1835 f !== void 0 && (e[l] = f), l === e.length - 1 && (this.finalKeyframe = g); 1836 } 1837 } 1838 if (this.resolveNoneKeyframes(), !Rs.has(r) || e.length !== 2) 1839 return; 1840 const [n, o] = e, L = k0(n), d = k0(o); 1841 if (L !== d) 1842 if (w0(L) && w0(d)) 1843 for (let l = 0; l < e.length; l++) { 1844 const g = e[l]; 1845 typeof g == "string" && (e[l] = parseFloat(g)); 1846 } 1847 else q1[r] && (this.needsMeasurement = !0); 1848 } 1849 resolveNoneKeyframes() { 1850 const { unresolvedKeyframes: e, name: s } = this, r = []; 1851 for (let n = 0; n < e.length; n++) 1852 (e[n] === null || hn(e[n])) && r.push(n); 1853 r.length && wn(e, r, s); 1854 } 1855 measureInitialState() { 1856 const { element: e, unresolvedKeyframes: s, name: r } = this; 1857 if (!e || !e.current) 1858 return; 1859 r === "height" && (this.suspendedScrollY = window.pageYOffset), this.measuredOrigin = q1[r](e.measureViewportBox(), window.getComputedStyle(e.current)), s[0] = this.measuredOrigin; 1860 const n = s[s.length - 1]; 1861 n !== void 0 && e.getValue(r, n).jump(n, !1); 1862 } 1863 measureEndState() { 1864 const { element: e, name: s, unresolvedKeyframes: r } = this; 1865 if (!e || !e.current) 1866 return; 1867 const n = e.getValue(s); 1868 n && n.jump(this.measuredOrigin, !1); 1869 const o = r.length - 1, L = r[o]; 1870 r[o] = q1[s](e.measureViewportBox(), window.getComputedStyle(e.current)), L !== null && this.finalKeyframe === void 0 && (this.finalKeyframe = L), this.removedTransforms?.length && this.removedTransforms.forEach(([d, l]) => { 1871 e.getValue(d).set(l); 1872 }), this.resolveNoneKeyframes(); 1873 } 1874} 1875function R5(t, e, s) { 1876 if (t instanceof EventTarget) 1877 return [t]; 1878 if (typeof t == "string") { 1879 const n = document.querySelectorAll(t); 1880 return n ? Array.from(n) : []; 1881 } 1882 return Array.from(t); 1883} 1884const Vs = (t, e) => e && typeof t == "number" ? e.transform(t) : t; 1885function D5(t) { 1886 return ss(t) && "offsetHeight" in t; 1887} 1888const N0 = 30, Sn = (t) => !isNaN(parseFloat(t)), Ut = { 1889 current: void 0 1890}; 1891class Bn { 1892 /** 1893 * @param init - The initiating value 1894 * @param config - Optional configuration options 1895 * 1896 * - `transformer`: A function to transform incoming values with. 1897 */ 1898 constructor(e, s = {}) { 1899 this.canTrackVelocity = null, this.events = {}, this.updateAndNotify = (r) => { 1900 const n = Ae.now(); 1901 if (this.updatedAt !== n && this.setPrevFrameValue(), this.prev = this.current, this.setCurrent(r), this.current !== this.prev && (this.events.change?.notify(this.current), this.dependents)) 1902 for (const o of this.dependents) 1903 o.dirty(); 1904 }, this.hasAnimated = !1, this.setCurrent(e), this.owner = s.owner; 1905 } 1906 setCurrent(e) { 1907 this.current = e, this.updatedAt = Ae.now(), this.canTrackVelocity === null && e !== void 0 && (this.canTrackVelocity = Sn(this.current)); 1908 } 1909 setPrevFrameValue(e = this.current) { 1910 this.prevFrameValue = e, this.prevUpdatedAt = this.updatedAt; 1911 } 1912 /** 1913 * Adds a function that will be notified when the `MotionValue` is updated. 1914 * 1915 * It returns a function that, when called, will cancel the subscription. 1916 * 1917 * When calling `onChange` inside a React component, it should be wrapped with the 1918 * `useEffect` hook. As it returns an unsubscribe function, this should be returned 1919 * from the `useEffect` function to ensure you don't add duplicate subscribers.. 1920 * 1921 * ```jsx 1922 * export const MyComponent = () => { 1923 * const x = useMotionValue(0) 1924 * const y = useMotionValue(0) 1925 * const opacity = useMotionValue(1) 1926 * 1927 * useEffect(() => { 1928 * function updateOpacity() { 1929 * const maxXY = Math.max(x.get(), y.get()) 1930 * const newOpacity = transform(maxXY, [0, 100], [1, 0]) 1931 * opacity.set(newOpacity) 1932 * } 1933 * 1934 * const unsubscribeX = x.on("change", updateOpacity) 1935 * const unsubscribeY = y.on("change", updateOpacity) 1936 * 1937 * return () => { 1938 * unsubscribeX() 1939 * unsubscribeY() 1940 * } 1941 * }, []) 1942 * 1943 * return <motion.div style={{ x }} /> 1944 * } 1945 * ``` 1946 * 1947 * @param subscriber - A function that receives the latest value. 1948 * @returns A function that, when called, will cancel this subscription. 1949 * 1950 * @deprecated 1951 */ 1952 onChange(e) { 1953 return this.on("change", e); 1954 } 1955 on(e, s) { 1956 this.events[e] || (this.events[e] = new _5()); 1957 const r = this.events[e].add(s); 1958 return e === "change" ? () => { 1959 r(), $.read(() => { 1960 this.events.change.getSize() || this.stop(); 1961 }); 1962 } : r; 1963 } 1964 clearListeners() { 1965 for (const e in this.events) 1966 this.events[e].clear(); 1967 } 1968 /** 1969 * Attaches a passive effect to the `MotionValue`. 1970 */ 1971 attach(e, s) { 1972 this.passiveEffect = e, this.stopPassiveEffect = s; 1973 } 1974 /** 1975 * Sets the state of the `MotionValue`. 1976 * 1977 * @remarks 1978 * 1979 * ```jsx 1980 * const x = useMotionValue(0) 1981 * x.set(10) 1982 * ``` 1983 * 1984 * @param latest - Latest value to set. 1985 * @param render - Whether to notify render subscribers. Defaults to `true` 1986 * 1987 * @public 1988 */ 1989 set(e) { 1990 this.passiveEffect ? this.passiveEffect(e, this.updateAndNotify) : this.updateAndNotify(e); 1991 } 1992 setWithVelocity(e, s, r) { 1993 this.set(s), this.prev = void 0, this.prevFrameValue = e, this.prevUpdatedAt = this.updatedAt - r; 1994 } 1995 /** 1996 * Set the state of the `MotionValue`, stopping any active animations, 1997 * effects, and resets velocity to `0`. 1998 */ 1999 jump(e, s = !0) { 2000 this.updateAndNotify(e), this.prev = e, this.prevUpdatedAt = this.prevFrameValue = void 0, s && this.stop(), this.stopPassiveEffect && this.stopPassiveEffect(); 2001 } 2002 dirty() { 2003 this.events.change?.notify(this.current); 2004 } 2005 addDependent(e) { 2006 this.dependents || (this.dependents = /* @__PURE__ */ new Set()), this.dependents.add(e); 2007 } 2008 removeDependent(e) { 2009 this.dependents && this.dependents.delete(e); 2010 } 2011 /** 2012 * Returns the latest state of `MotionValue` 2013 * 2014 * @returns - The latest state of `MotionValue` 2015 * 2016 * @public 2017 */ 2018 get() { 2019 return Ut.current && Ut.current.push(this), this.current; 2020 } 2021 /** 2022 * @public 2023 */ 2024 getPrevious() { 2025 return this.prev; 2026 } 2027 /** 2028 * Returns the latest velocity of `MotionValue` 2029 * 2030 * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical. 2031 * 2032 * @public 2033 */ 2034 getVelocity() { 2035 const e = Ae.now(); 2036 if (!this.canTrackVelocity || this.prevFrameValue === void 0 || e - this.updatedAt > N0) 2037 return 0; 2038 const s = Math.min(this.updatedAt - this.prevUpdatedAt, N0); 2039 return b5(parseFloat(this.current) - parseFloat(this.prevFrameValue), s); 2040 } 2041 /** 2042 * Registers a new animation to control this `MotionValue`. Only one 2043 * animation can drive a `MotionValue` at one time. 2044 * 2045 * ```jsx 2046 * value.start() 2047 * ``` 2048 * 2049 * @param animation - A function that starts the provided animation 2050 */ 2051 start(e) { 2052 return this.stop(), new Promise((s) => { 2053 this.hasAnimated = !0, this.animation = e(s), this.events.animationStart && this.events.animationStart.notify(); 2054 }).then(() => { 2055 this.events.animationComplete && this.events.animationComplete.notify(), this.clearAnimation(); 2056 }); 2057 } 2058 /** 2059 * Stop the currently active animation. 2060 * 2061 * @public 2062 */ 2063 stop() { 2064 this.animation && (this.animation.stop(), this.events.animationCancel && this.events.animationCancel.notify()), this.clearAnimation(); 2065 } 2066 /** 2067 * Returns `true` if this value is currently animating. 2068 * 2069 * @public 2070 */ 2071 isAnimating() { 2072 return !!this.animation; 2073 } 2074 clearAnimation() { 2075 delete this.animation; 2076 } 2077 /** 2078 * Destroy and clean up subscribers to this `MotionValue`. 2079 * 2080 * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically 2081 * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually 2082 * created a `MotionValue` via the `motionValue` function. 2083 * 2084 * @public 2085 */ 2086 destroy() { 2087 this.dependents?.clear(), this.events.destroy?.notify(), this.clearListeners(), this.stop(), this.stopPassiveEffect && this.stopPassiveEffect(); 2088 } 2089} 2090function Ue(t, e) { 2091 return new Bn(t, e); 2092} 2093const { schedule: z5 } = /* @__PURE__ */ Ms(queueMicrotask, !1), Ze = { 2094 x: !1, 2095 y: !1 2096}; 2097function Hs() { 2098 return Ze.x || Ze.y; 2099} 2100function kn(t) { 2101 return t === "x" || t === "y" ? Ze[t] ? null : (Ze[t] = !0, () => { 2102 Ze[t] = !1; 2103 }) : Ze.x || Ze.y ? null : (Ze.x = Ze.y = !0, () => { 2104 Ze.x = Ze.y = !1; 2105 }); 2106} 2107function Zs(t, e) { 2108 const s = R5(t), r = new AbortController(), n = { 2109 passive: !0, 2110 ...e, 2111 signal: r.signal 2112 }; 2113 return [s, n, () => r.abort()]; 2114} 2115function I0(t) { 2116 return !(t.pointerType === "touch" || Hs()); 2117} 2118function An(t, e, s = {}) { 2119 const [r, n, o] = Zs(t, s), L = (d) => { 2120 if (!I0(d)) 2121 return; 2122 const { target: l } = d, g = e(l, d); 2123 if (typeof g != "function" || !l) 2124 return; 2125 const f = (p) => { 2126 I0(p) && (g(p), l.removeEventListener("pointerleave", f)); 2127 }; 2128 l.addEventListener("pointerleave", f, n); 2129 }; 2130 return r.forEach((d) => { 2131 d.addEventListener("pointerenter", L, n); 2132 }), o; 2133} 2134const Ws = (t, e) => e ? t === e ? !0 : Ws(t, e.parentElement) : !1, j5 = (t) => t.pointerType === "mouse" ? typeof t.button != "number" || t.button <= 0 : t.isPrimary !== !1, Nn = /* @__PURE__ */ new Set([ 2135 "BUTTON", 2136 "INPUT", 2137 "SELECT", 2138 "TEXTAREA", 2139 "A" 2140]); 2141function In(t) { 2142 return Nn.has(t.tagName) || t.tabIndex !== -1; 2143} 2144const J2 = /* @__PURE__ */ new WeakSet(); 2145function P0(t) { 2146 return (e) => { 2147 e.key === "Enter" && t(e); 2148 }; 2149} 2150function Q3(t, e) { 2151 t.dispatchEvent(new PointerEvent("pointer" + e, { isPrimary: !0, bubbles: !0 })); 2152} 2153const Pn = (t, e) => { 2154 const s = t.currentTarget; 2155 if (!s) 2156 return; 2157 const r = P0(() => { 2158 if (J2.has(s)) 2159 return; 2160 Q3(s, "down"); 2161 const n = P0(() => { 2162 Q3(s, "up"); 2163 }), o = () => Q3(s, "cancel"); 2164 s.addEventListener("keyup", n, e), s.addEventListener("blur", o, e); 2165 }); 2166 s.addEventListener("keydown", r, e), s.addEventListener("blur", () => s.removeEventListener("keydown", r), e); 2167}; 2168function C0(t) { 2169 return j5(t) && !Hs(); 2170} 2171function Cn(t, e, s = {}) { 2172 const [r, n, o] = Zs(t, s), L = (d) => { 2173 const l = d.currentTarget; 2174 if (!C0(d)) 2175 return; 2176 J2.add(l); 2177 const g = e(l, d), f = (u, h) => { 2178 window.removeEventListener("pointerup", p), window.removeEventListener("pointercancel", M), J2.has(l) && J2.delete(l), C0(u) && typeof g == "function" && g(u, { success: h }); 2179 }, p = (u) => { 2180 f(u, l === window || l === document || s.useGlobalTarget || Ws(l, u.target)); 2181 }, M = (u) => { 2182 f(u, !1); 2183 }; 2184 window.addEventListener("pointerup", p, n), window.addEventListener("pointercancel", M, n); 2185 }; 2186 return r.forEach((d) => { 2187 (s.useGlobalTarget ? window : d).addEventListener("pointerdown", L, n), D5(d) && (d.addEventListener("focus", (g) => Pn(g, n)), !In(d) && !d.hasAttribute("tabindex") && (d.tabIndex = 0)); 2188 }), o; 2189} 2190function O5(t) { 2191 return ss(t) && "ownerSVGElement" in t; 2192} 2193const K2 = /* @__PURE__ */ new WeakMap(); 2194let Y2; 2195const $s = (t, e, s) => (r, n) => n && n[0] ? n[0][t + "Size"] : O5(r) && "getBBox" in r ? r.getBBox()[e] : r[s], Fn
2195= /* @__PURE__ */ $s("inline", "width", "offsetWidth"), En = /* @__PURE__ */ $s("block", "height", "offsetHeight"); 2196function Rn({ target: t, borderBoxSize: e }) { 2197 K2.get(t)?.forEach((s) => { 2198 s(t, { 2199 get width() { 2200 return Fn(t, e); 2201 }, 2202 get height() { 2203 return En(t, e); 2204 } 2205 }); 2206 }); 2207} 2208function Dn(t) { 2209 t.forEach(Rn); 2210} 2211function zn() { 2212 typeof ResizeObserver > "u" || (Y2 = new ResizeObserver(Dn)); 2213} 2214function jn(t, e) { 2215 Y2 || zn(); 2216 const s = R5(t); 2217 return s.forEach((r) => { 2218 let n = K2.get(r); 2219 n || (n = /* @__PURE__ */ new Set(), K2.set(r, n)), n.add(e), Y2?.observe(r); 2220 }), () => { 2221 s.forEach((r) => { 2222 const n = K2.get(r); 2223 n?.delete(e), n?.size || Y2?.unobserve(r); 2224 }); 2225 }; 2226} 2227const X2 = /* @__PURE__ */ new Set(); 2228let nt; 2229function On() { 2230 nt = () => { 2231 const t = { 2232 get width() { 2233 return window.innerWidth; 2234 }, 2235 get height() { 2236 return window.innerHeight; 2237 } 2238 }; 2239 X2.forEach((e) => e(t)); 2240 }, window.addEventListener("resize", nt); 2241} 2242function Vn(t) { 2243 return X2.add(t), nt || On(), () => { 2244 X2.delete(t), !X2.size && typeof nt == "function" && (window.removeEventListener("resize", nt), nt = void 0); 2245 }; 2246} 2247function Hn(t, e) { 2248 return typeof t == "function" ? Vn(t) : jn(t, e); 2249} 2250function qs(t, e) { 2251 let s; 2252 const r = () => { 2253 const { currentTime: n } = e, L = (n === null ? 0 : n.value) / 100; 2254 s !== L && t(L), s = L; 2255 }; 2256 return $.preUpdate(r, !0), () => Je(r); 2257} 2258function Zn(t) { 2259 return O5(t) && t.tagName === "svg"; 2260} 2261function Wn(...t) { 2262 const e = !Array.isArray(t[0]), s = e ? 0 : -1, r = t[0 + s], n = t[1 + s], o = t[2 + s], L = t[3 + s], d = N5(n, o, L); 2263 return e ? d(r) : d; 2264} 2265const xe = (t) => !!(t && t.getVelocity); 2266function $n(t, e, s) { 2267 const r = t.get(); 2268 let n = null, o = r, L; 2269 const d = typeof r == "string" ? r.replace(/[\d.-]/g, "") : void 0, l = () => { 2270 n && (n.stop(), n = null); 2271 }, g = () => { 2272 l(), n = new S3({ 2273 keyframes: [E0(t.get()), E0(o)], 2274 velocity: t.getVelocity(), 2275 type: "spring", 2276 restDelta: 1e-3, 2277 restSpeed: 0.01, 2278 ...s, 2279 onUpdate: L 2280 }); 2281 }; 2282 if (t.attach((f, p) => { 2283 o = f, L = (M) => p(F0(M, d)), $.postRender(g); 2284 }, l), xe(e)) { 2285 const f = e.on("change", (M) => t.set(F0(M, d))), p = t.on("destroy", f); 2286 return () => { 2287 f(), p(); 2288 }; 2289 } 2290 return l; 2291} 2292function F0(t, e) { 2293 return e ? t + e : t; 2294} 2295function E0(t) { 2296 return typeof t == "number" ? t : parseFloat(t); 2297} 2298const qn = [...zs, ge, v1], Un = (t) => qn.find(Ds(t)), m2 = r1({ 2299 transformPagePoint: (t) => t, 2300 isStatic: !1, 2301 reducedMotion: "never" 2302}); 2303function R0(t, e) { 2304 if (typeof t == "function") 2305 return t(e); 2306 t != null && (t.current = e); 2307} 2308function Gn(...t) { 2309 return (e) => { 2310 let s = !1; 2311 const r = t.map((n) => { 2312 const o = R0(n, e); 2313 return !s && typeof o == "function" && (s = !0), o; 2314 }); 2315 if (s) 2316 return () => { 2317 for (let n = 0; n < r.length; n++) { 2318 const o = r[n]; 2319 typeof o == "function" ? o() : R0(t[n], null); 2320 } 2321 }; 2322 }; 2323} 2324function Jn(...t) { 2325 return Ge(Gn(...t), t); 2326} 2327class Kn extends g5 { 2328 getSnapshotBeforeUpdate(e) { 2329 const s = this.props.childRef.current; 2330 if (s && e.isPresent && !this.props.isPresent) { 2331 const r = s.offsetParent, n = D5(r) && r.offsetWidth || 0, o = this.props.sizeRef.current; 2332 o.height = s.offsetHeight || 0, o.width = s.offsetWidth || 0, o.top = s.offsetTop, o.left = s.offsetLeft, o.right = n - o.width - o.left; 2333 } 2334 return null; 2335 } 2336 /** 2337 * Required with getSnapshotBeforeUpdate to stop React complaining. 2338 */ 2339 componentDidUpdate() { 2340 } 2341 render() { 2342 return this.props.children; 2343 } 2344} 2345function Yn({ children: t, isPresent: e, anchorX: s, root: r }) { 2346 const n = y3(), o = H(null), L = H({ 2347 width: 0, 2348 height: 0, 2349 top: 0, 2350 left: 0, 2351 right: 0 2352 }), { nonce: d } = oe(m2), l = Jn(o, t?.ref); 2353 return f2(() => { 2354 const { width: g, height: f, top: p, left: M, right: u } = L.current; 2355 if (e || !o.current || !g || !f) 2356 return; 2357 const h = s === "left" ? `left: ${M}` : `right: ${u}`; 2358 o.current.dataset.motionPopId = n; 2359 const x = document.createElement("style"); 2360 d && (x.nonce = d); 2361 const _ = r ?? document.head; 2362 return _.appendChild(x), x.sheet && x.sheet.insertRule(` 2363 [data-motion-pop-id="${n}"] { 2364 position: absolute !important; 2365 width: ${g}px !important; 2366 height: ${f}px !important; 2367 ${h}px !important; 2368 top: ${p}px !important; 2369 } 2370 `), () => { 2371 _.contains(x) && _.removeChild(x); 2372 }; 2373 }, [e]), i(Kn, { isPresent: e, childRef: o, sizeRef: L, children: g2(t, { ref: l }) }); 2374} 2375const Xn = ({ children: t, initial: e, isPresent: s, onExitComplete: r, custom: n, presenceAffectsLayout: o, mode: L, anchorX: d, root: l }) => { 2376 const g = St(Qn), f = y3(); 2377 let p = !0, M = M1(() => (p = !1, { 2378 id: f, 2379 initial: e, 2380 isPresent: s, 2381 custom: n, 2382 onExitComplete: (u) => { 2383 g.set(u, !0); 2384 for (const h of g.values()) 2385 if (!h) 2386 return; 2387 r && r(); 2388 }, 2389 register: (u) => (g.set(u, !1), () => g.delete(u)) 2390 }), [s, g, r]); 2391 return o && p && (M = { ...M }), M1(() => { 2392 g.forEach((u, h) => g.set(h, !1)); 2393 }, [s]), q(() => { 2394 !s && !g.size && r && r(); 2395 }, [s]), L === "popLayout" && (t = i(Yn, { isPresent: s, anchorX: d, root: l, children: t })), i(T3.Provider, { value: M, children: t }); 2396}; 2397function Qn() { 2398 return /* @__PURE__ */ new Map(); 2399} 2400function Us(t = !0) { 2401 const e = oe(T3); 2402 if (e === null) 2403 return [!0, null]; 2404 const { isPresent: s, onExitComplete: r, register: n } = e, o = y3(); 2405 q(() => { 2406 if (t) 2407 return n(o); 2408 }, [t]); 2409 const L = Ge(() => t && r && r(o), [o, r, t]); 2410 return !s && r ? [!1, L] : [!0]; 2411} 2412const B2 = (t) => t.key || ""; 2413function D0(t) { 2414 const e = [];
2415 return d5.forEach(t, (s) => { 2416 v3(s) && e.push(s); 2417 }), e; 2418} 2419const pe = ({ children: t, custom: e, initial: s = !0, onExitComplete: r, presenceAffectsLayout: n = !0, mode: o = "sync", propagate: L = !1, anchorX: d = "left", root: l }) => { 2420 const [g, f] = Us(L), p = M1(() => D0(t), [t]), M = L && !g ? [] : p.map(B2), u = H(!0), h = H(p), x = St(() => /* @__PURE__ */ new Map()), [_, v] = j(p), [y, b] = j(p); 2421 w3(() => { 2422 u.current = !1, h.current = p; 2423 for (let A = 0; A < y.length; A++) { 2424 const I = B2(y[A]); 2425 M.includes(I) ? x.delete(I) : x.get(I) !== !0 && x.set(I, !1); 2426 } 2427 }, [y, M.length, M.join("-")]); 2428 const S = []; 2429 if (p !== _) { 2430 let A = [...p]; 2431 for (let I = 0; I < y.length; I++) { 2432 const w = y[I], P = B2(w); 2433 M.includes(P) || (A.splice(I, 0, w), S.push(w)); 2434 } 2435 return o === "wait" && S.length && (A = S), b(D0(A)), v(p), null; 2436 } 2437 const { forceRender: k } = oe(M5); 2438 return i(C, { children: y.map((A) => { 2439 const I = B2(A), w = L && !g ? !1 : p === y || M.includes(I), P = () => { 2440 if (x.has(I)) 2441 x.set(I, !0); 2442 else 2443 return; 2444 let z = !0; 2445 x.forEach((V) => { 2446 V || (z = !1); 2447 }), z && (k?.(), b(h.current), L && f?.(), r && r()); 2448 }; 2449 return i(Xn, { isPresent: w, initial: !u.current || s ? void 0 : !1, custom: e, presenceAffectsLayout: n, mode: o, root: l, onExitComplete: w ? void 0 : P, anchorX: d, children: A }, I); 2450 }) }); 2451}, Gs = r1({ strict: !1 }), z0 = { 2452 animation: [ 2453 "animate", 2454 "variants", 2455 "whileHover", 2456 "whileTap", 2457 "exit", 2458 "whileInView", 2459 "whileFocus", 2460 "whileDrag" 2461 ], 2462 exit: ["exit"], 2463 drag: ["drag", "dragControls"], 2464 focus: ["whileFocus"], 2465 hover: ["whileHover", "onHoverStart", "onHoverEnd"], 2466 tap: ["whileTap", "onTap", "onTapStart", "onTapCancel"], 2467 pan: ["onPan", "onPanStart", "onPanSessionStart", "onPanEnd"], 2468 inView: ["whileInView", "onViewportEnter", "onViewportLeave"], 2469 layout: ["layout", "layoutId"] 2470}, yt = {}; 2471for (const t in z0) 2472 yt[t] = { 2473 isEnabled: (e) => z0[t].some((s) => !!e[s]) 2474 }; 2475function eo(t) { 2476 for (const e in t) 2477 yt[e] = { 2478 ...yt[e], 2479 ...t[e] 2480 }; 2481} 2482const to = /* @__PURE__ */ new Set([ 2483 "animate", 2484 "exit", 2485 "variants", 2486 "initial", 2487 "style", 2488 "values", 2489 "variants", 2490 "transition", 2491 "transformTemplate", 2492 "custom", 2493 "inherit", 2494 "onBeforeLayoutMeasure", 2495 "onAnimationStart", 2496 "onAnimationComplete", 2497 "onUpdate", 2498 "onDragStart", 2499 "onDrag", 2500 "onDragEnd", 2501 "onMeasureDragConstraints", 2502 "onDirectionLock", 2503 "onDragTransitionEnd", 2504 "_dragX", 2505 "_dragY", 2506 "onHoverStart", 2507 "onHoverEnd", 2508 "onViewportEnter", 2509 "onViewportLeave", 2510 "globalTapTarget", 2511 "ignoreStrict", 2512 "viewport" 2513]); 2514function L3(t) { 2515 return t.startsWith("while") || t.startsWith("drag") && t !== "draggable" || t.startsWith("layout") || t.startsWith("onTap") || t.startsWith("onPan") || t.startsWith("onLayout") || to.has(t); 2516} 2517let Js = (t) => !L3(t); 2518function ao(t) { 2519 typeof t == "function" && (Js = (e) => e.startsWith("on") ? !L3(e) : t(e)); 2520} 2521try { 2522 ao(require("@emotion/is-prop-valid").default); 2523} catch { 2524} 2525function so(t, e, s) { 2526 const r = {}; 2527 for (const n in t) 2528 n === "values" && typeof t.values == "object" || (Js(n) || s === !0 && L3(n) || !e && !L3(n) || // If trying to use native HTML drag events, forward drag listeners 2529 t.draggable && n.startsWith("onDrag")) && (r[n] = t[n]); 2530 return r; 2531} 2532const B3 = /* @__PURE__ */ r1({}); 2533function k3(t) { 2534 return t !== null && typeof t == "object" && typeof t.start == "function"; 2535} 2536function t2(t) { 2537 return typeof t == "string" || Array.isArray(t); 2538} 2539const V5 = [ 2540 "animate", 2541 "whileInView", 2542 "whileFocus", 2543 "whileHover", 2544 "whileTap", 2545 "whileDrag", 2546 "exit" 2547], H5 = ["initial", ...V5]; 2548function A3(t) { 2549 return k3(t.animate) || H5.some((e) => t2(t[e])); 2550} 2551function Ks(t) { 2552 return !!(A3(t) || t.variants); 2553} 2554function io(t, e) { 2555 if (A3(t)) { 2556 const { initial: s, animate: r } = t; 2557 return { 2558 initial: s === !1 || t2(s) ? s : void 0, 2559 animate: t2(r) ? r : void 0 2560 }; 2561 } 2562 return t.inherit !== !1 ? e : {}; 2563} 2564function ro(t) { 2565 const { initial: e, animate: s } = io(t, oe(B3)); 2566 return M1(() => ({ initial: e, animate: s }), [j0(e), j0(s)]); 2567} 2568function j0(t) { 2569 return Array.isArray(t) ? t.join(" ") : t; 2570} 2571const a2 = {}; 2572function no(t) { 2573 for (const e in t) 2574 a2[e] = t[e], w5(e) && (a2[e].isCSSVariable = !0); 2575} 2576function Ys(t, { layout: e, layoutId: s }) { 2577 return At.has(t) || t.startsWith("origin") || (e || s !== void 0) && (!!a2[t] || t === "opacity"); 2578} 2579const oo = { 2580 x: "translateX", 2581 y: "translateY", 2582 z: "translateZ", 2583 transformPerspective: "perspective" 2584}, Lo = kt.length; 2585function co(t, e, s) { 2586 let r = "", n = !0; 2587 for (let o = 0; o < Lo; o++) { 2588 const L = kt[o], d = t[L]; 2589 if (d === void 0) 2590 continue; 2591 let l = !0; 2592 if (typeof d == "number" ? l = d === (L.startsWith("scale") ? 1 : 0) : l = parseFloat(d) === 0, !l || s) { 2593 const g = Vs(d, E5[L]); 2594 if (!l) { 2595 n = !1; 2596 const f = oo[L] || L; 2597 r += `${f}(${g}) `; 2598 } 2599 s && (e[L] = g); 2600 } 2601 } 2602 return r = r.trim(), s ? r = s(e, n ? "" : r) : n && (r = "none"), r; 2603} 2604function Z5(t, e, s) { 2605 const { style: r, vars: n, transformOrigin: o } = t; 2606 let L = !1, d = !1; 2607 for (const l in e) { 2608 const g = e[l]; 2609 if (At.has(l)) { 2610 L = !0; 2611 continue; 2612 } else if (w5(l)) { 2613 n[l] = g; 2614 continue; 2615 } else { 2616 const f = Vs(g, E5[l]); 2617 l.startsWith("origin") ? (d = !0, o[l] = f) : r[l] = f; 2618 } 2619 } 2620 if (e.transform || (L || s ? r.transform = co(e, t.transform, s) : r.transform && (r.transform = "none")), d) { 2621 const { originX: l = "50%", originY: g = "50%", originZ: f = 0 } = o; 2622 r.transformOrigin = `${l} ${g} ${f}`; 2623 } 2624} 2625const W5 = () => ({ 2626 style: {}, 2627 transform: {}, 2628 transformOrigin: {}, 2629 vars: {} 2630}); 2631function Xs(t, e, s) { 2632 for (const r in e) 2633 !xe(e[r]) && !Ys(r, s) && (t[r] = e[r]); 2634} 2635function lo({ transformTemplate: t }, e) { 2636 return M1(() => { 2637 const s = W5(); 2638 return Z5(s, e, t), Object.assign({}, s.vars, s.style); 2639 }, [e]); 2640} 2641function go(t, e) { 2642 const s = t.style || {}, r = {}; 2643 return Xs(r, s, t), Object.assign(r, lo(t, e)), r; 2644} 2645function fo(t, e) { 2646 const s = {}, r = go(t, e); 2647 return t.drag && t.dragListener !== !1 && (s.draggable = !1, r.userSelect = r.WebkitUserSelect = r.WebkitTouchCallout = "none", r.touchAction = t.drag === !0 ? "none" : `pan-${t.drag === "x" ? "y" : "x"}
2647`), t.tabIndex === void 0 && (t.onTap || t.onTapStart || t.whileTap) && (s.tabIndex = 0), s.style = r, s; 2648} 2649const po = { 2650 offset: "stroke-dashoffset", 2651 array: "stroke-dasharray" 2652}, Mo = { 2653 offset: "strokeDashoffset", 2654 array: "strokeDasharray" 2655}; 2656function uo(t, e, s = 1, r = 0, n = !0) { 2657 t.pathLength = 1; 2658 const o = n ? po : Mo; 2659 t[o.offset] = R.transform(-r); 2660 const L = R.transform(e), d = R.transform(s); 2661 t[o.array] = `${L} ${d}`; 2662} 2663function Qs(t, { 2664 attrX: e, 2665 attrY: s, 2666 attrScale: r, 2667 pathLength: n, 2668 pathSpacing: o = 1, 2669 pathOffset: L = 0, 2670 // This is object creation, which we try to avoid per-frame. 2671 ...d 2672}, l, g, f) { 2673 if (Z5(t, d, g), l) { 2674 t.style.viewBox && (t.attrs.viewBox = t.style.viewBox); 2675 return; 2676 } 2677 t.attrs = t.style, t.style = {}; 2678 const { attrs: p, style: M } = t; 2679 p.transform && (M.transform = p.transform, delete p.transform), (M.transform || p.transformOrigin) && (M.transformOrigin = p.transformOrigin ?? "50% 50%", delete p.transformOrigin), M.transform && (M.transformBox = f?.transformBox ?? "fill-box", delete p.transformBox), e !== void 0 && (p.x = e), s !== void 0 && (p.y = s), r !== void 0 && (p.scale = r), n !== void 0 && uo(p, n, o, L, !1); 2680} 2681const e7 = () => ({ 2682 ...W5(), 2683 attrs: {} 2684}), t7 = (t) => typeof t == "string" && t.toLowerCase() === "svg"; 2685function ho(t, e, s, r) { 2686 const n = M1(() => { 2687 const o = e7(); 2688 return Qs(o, e, t7(r), t.transformTemplate, t.style), { 2689 ...o.attrs, 2690 style: { ...o.style } 2691 }; 2692 }, [e]); 2693 if (t.style) { 2694 const o = {}; 2695 Xs(o, t.style, t), n.style = { ...o, ...n.style }; 2696 } 2697 return n; 2698} 2699const mo = [ 2700 "animate", 2701 "circle", 2702 "defs", 2703 "desc", 2704 "ellipse", 2705 "g", 2706 "image", 2707 "line", 2708 "filter", 2709 "marker", 2710 "mask", 2711 "metadata", 2712 "path", 2713 "pattern", 2714 "polygon", 2715 "polyline", 2716 "rect", 2717 "stop", 2718 "switch", 2719 "symbol", 2720 "svg", 2721 "text", 2722 "tspan", 2723 "use", 2724 "view" 2725]; 2726function $5(t) { 2727 return ( 2728 /** 2729 * If it's not a string, it's a custom React component. Currently we only support 2730 * HTML custom React components. 2731 */ 2732 typeof t != "string" || /** 2733 * If it contains a dash, the element is a custom HTML webcomponent. 2734 */ 2735 t.includes("-") ? !1 : ( 2736 /** 2737 * If it's in our list of lowercase SVG tags, it's an SVG component 2738 */ 2739 !!(mo.indexOf(t) > -1 || /** 2740 * If it contains a capital letter, it's an SVG component 2741 */ 2742 /[A-Z]/u.test(t)) 2743 ) 2744 ); 2745} 2746function xo(t, e, s, { latestValues: r }, n, o = !1) { 2747 const d = ($5(t) ? ho : fo)(e, r, n, t), l = so(e, typeof t == "string", o), g = t !== b3 ? { ...l, ...d, ref: s } : {}, { children: f } = e, p = M1(() => xe(f) ? f.get() : f, [f]); 2748 return s1(t, { 2749 ...g, 2750 children: p 2751 }); 2752} 2753function O0(t) { 2754 const e = [{}, {}]; 2755 return t?.values.forEach((s, r) => { 2756 e[0][r] = s.get(), e[1][r] = s.getVelocity(); 2757 }), e; 2758} 2759function q5(t, e, s, r) { 2760 if (typeof e == "function") { 2761 const [n, o] = O0(r); 2762 e = e(s !== void 0 ? s : t.custom, n, o); 2763 } 2764 if (typeof e == "string" && (e = t.variants && t.variants[e]), typeof e == "function") { 2765 const [n, o] = O0(r); 2766 e = e(s !== void 0 ? s : t.custom, n, o); 2767 } 2768 return e; 2769} 2770function Q2(t) { 2771 return xe(t) ? t.get() : t; 2772} 2773function _o({ scrapeMotionValuesFromProps: t, createRenderState: e }, s, r, n) { 2774 return { 2775 latestValues: bo(s, r, n, t), 2776 renderState: e() 2777 }; 2778} 2779function bo(t, e, s, r) { 2780 const n = {}, o = r(t, {}); 2781 for (const M in o) 2782 n[M] = Q2(o[M]); 2783 let { initial: L, animate: d } = t; 2784 const l = A3(t), g = Ks(t); 2785 e && g && !l && t.inherit !== !1 && (L === void 0 && (L = e.initial), d === void 0 && (d = e.animate)); 2786 let f = s ? s.initial === !1 : !1; 2787 f = f || L === !1; 2788 const p = f ? d : L; 2789 if (p && typeof p != "boolean" && !k3(p)) { 2790 const M = Array.isArray(p) ? p : [p]; 2791 for (let u = 0; u < M.length; u++) { 2792 const h = q5(t, M[u]); 2793 if (h) { 2794 const { transitionEnd: x, transition: _, ...v } = h; 2795 for (const y in v) { 2796 let b = v[y]; 2797 if (Array.isArray(b)) { 2798 const S = f ? b.length - 1 : 0; 2799 b = b[S]; 2800 } 2801 b !== null && (n[y] = b); 2802 } 2803 for (const y in x) 2804 n[y] = x[y]; 2805 } 2806 } 2807 } 2808 return n; 2809} 2810const a7 = (t) => (e, s) => { 2811 const r = oe(B3), n = oe(T3), o = () => _o(t, e, r, n); 2812 return s ? o() : St(o); 2813}; 2814function U5(t, e, s) { 2815 const { style: r }
2815 = t, n = {}; 2816 for (const o in r) 2817 (xe(r[o]) || e.style && xe(e.style[o]) || Ys(o, t) || s?.getValue(o)?.liveStyle !== void 0) && (n[o] = r[o]); 2818 return n; 2819} 2820const vo = /* @__PURE__ */ a7({ 2821 scrapeMotionValuesFromProps: U5, 2822 createRenderState: W5 2823}); 2824function s7(t, e, s) { 2825 const r = U5(t, e, s); 2826 for (const n in t) 2827 if (xe(t[n]) || xe(e[n])) { 2828 const o = kt.indexOf(n) !== -1 ? "attr" + n.charAt(0).toUpperCase() + n.substring(1) : n; 2829 r[o] = t[n]; 2830 } 2831 return r; 2832} 2833const yo = /* @__PURE__ */ a7({ 2834 scrapeMotionValuesFromProps: s7, 2835 createRenderState: e7 2836}), wo = Symbol.for("motionComponentSymbol"); 2837function ot(t) { 2838 return t && typeof t == "object" && Object.prototype.hasOwnProperty.call(t, "current"); 2839} 2840function To(t, e, s) { 2841 return Ge( 2842 (r) => { 2843 r && t.onMount && t.onMount(r), e && (r ? e.mount(r) : e.unmount()), s && (typeof s == "function" ? s(r) : ot(s) && (s.current = r)); 2844 }, 2845 /** 2846 * Include externalRef in dependencies to ensure the callback updates 2847 * when the ref changes, allowing proper ref forwarding. 2848 */ 2849 [e] 2850 ); 2851} 2852const G5 = (t) => t.replace(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase(), So = "framerAppearId", i7 = "data-" + G5(So), r7 = r1({}); 2853function Bo(t, e, s, r, n) { 2854 const { visualElement: o } = oe(B3), L = oe(Gs), d = oe(T3), l = oe(m2).reducedMotion, g = H(null); 2855 r = r || L.renderer, !g.current && r && (g.current = r(t, { 2856 visualState: e, 2857 parent: o, 2858 props: s, 2859 presenceContext: d, 2860 blockInitialAnimation: d ? d.initial === !1 : !1, 2861 reducedMotionConfig: l 2862 })); 2863 const f = g.current, p = oe(r7); 2864 f && !f.projection && n && (f.type === "html" || f.type === "svg") && ko(g.current, s, n, p); 2865 const M = H(!1); 2866 f2(() => { 2867 f && M.current && f.update(s, d); 2868 }); 2869 const u = s[i7], h = H(!!u && !window.MotionHandoffIsComplete?.(u) && window.MotionHasOptimisedAnimation?.(u)); 2870 return w3(() => { 2871 f && (M.current = !0, window.MotionIsMounted = !0, f.updateFeatures(), f.scheduleRenderMicrotask(), h.current && f.animationState && f.animationState.animateChanges()); 2872 }), q(() => { 2873 f && (!h.current && f.animationState && f.animationState.animateChanges(), h.current && (queueMicrotask(() => { 2874 window.MotionHandoffMarkAsComplete?.(u); 2875 }), h.current = !1), f.enteringChildren = void 0); 2876 }), f; 2877} 2878function ko(t, e, s, r) { 2879 const { layoutId: n, layout: o, drag: L, dragConstraints: d, layoutScroll: l, layoutRoot: g, layoutCrossfade: f } = e; 2880 t.projection = new s(t.latestValues, e["data-framer-portal-id"] ? void 0 : n7(t.parent)), t.projection.setOptions({ 2881 layoutId: n, 2882 layout: o, 2883 alwaysMeasureLayout: !!L || d && ot(d), 2884 visualElement: t, 2885 /** 2886 * TODO: Update options in an effect. This could be tricky as it'll be too late 2887 * to update by the time layout animations run. 2888 * We also need to fix this safeToRemove by linking it up to the one returned by usePresence, 2889 * ensuring it gets called if there's no potential layout animations. 2890 * 2891 */ 2892 animationType: typeof o == "string" ? o : "both", 2893 initialPromotionConfig: r, 2894 crossfade: f, 2895 layoutScroll: l, 2896 layoutRoot: g 2897 }); 2898} 2899function n7(t) { 2900 if (t) 2901 return t.options.allowProjection !== !1 ? t.projection : n7(t.parent); 2902} 2903function e4(t, { forwardMotionProps: e = !1 } = {}, s, r) { 2904 s && eo(s); 2905 const n = $5(t) ? yo : vo; 2906 function o(d, l) { 2907 let g; 2908 const f = { 2909 ...oe(m2), 2910 ...d, 2911 layoutId: Ao(d) 2912 }, { isStatic: p } = f, M = ro(d), u = n(d, p); 2913 if (!p && u5) { 2914 No(); 2915 const h = Io(f); 2916 g = h.MeasureLayout, M.visualElement = Bo(t, u, f, r, h.ProjectionNode); 2917 } 2918 return c(B3.Provider, { value: M, children: [g && M.visualElement ? i(g, { visualElement: M.visualElement, ...f }) : null, xo(t, d, To(u, M.visualElement, l), u, p, e)] }); 2919 } 2920 o.displayName = `motion.${typeof t == "string" ? t : `create(${t.displayName ?? t.name ?? ""})`}`; 2921 const L = Tt(o); 2922 return L[wo] = t, L; 2923} 2924function Ao({ layoutId: t }) { 2925 const e = oe(M5).id; 2926 return e && t !== void 0 ? e + "-" + t : t; 2927} 2928function No(t, e) { 2929 oe(Gs).strict; 2930} 2931function Io(t) { 2932 const { drag: e, layout: s } = yt; 2933 if (!e && !s) 2934 return {}; 2935 const r = { ...e, ...s }; 2936 return { 2937 MeasureLayout: e?.isEnabled(t) || s?.isEnabled(t) ? r.MeasureLayout : void 0, 2938 ProjectionNode: r.ProjectionNode 2939 }; 2940} 2941function Po(t, e) { 2942 if (typeof Proxy > "u") 2943 return e4; 2944 const s = /* @__PURE__ */ new Map(), r = (o, L) => e4(o, L, t, e), n = (o, L) => r(o, L); 2945 return new Proxy(n, { 2946 /** 2947 * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.
vendor: 6,066 bytes, lines 2948-3113
2948 * The prop name is passed through as `key` and we can use that to generate a `motion` 2949 * DOM component with that name. 2950 */ 2951 get: (o, L) => L === "create" ? r : (s.has(L) || s.set(L, e4(L, void 0, t, e)), s.get(L)) 2952 }); 2953} 2954function o7({ top: t, left: e, right: s, bottom: r }) { 2955 return { 2956 x: { min: e, max: s }, 2957 y: { min: t, max: r } 2958 }; 2959} 2960function Co({ x: t, y: e }) { 2961 return { top: e.min, right: t.max, bottom: e.max, left: t.min }; 2962} 2963function Fo(t, e) { 2964 if (!e) 2965 return t; 2966 const s = e({ x: t.left, y: t.top }), r = e({ x: t.right, y: t.bottom }); 2967 return { 2968 top: s.y, 2969 left: s.x, 2970 bottom: r.y, 2971 right: r.x 2972 }; 2973} 2974function t4(t) { 2975 return t === void 0 || t === 1; 2976} 2977function z4({ scale: t, scaleX: e, scaleY: s }) { 2978 return !t4(t) || !t4(e) || !t4(s); 2979} 2980function C1(t) { 2981 return z4(t) || L7(t) || t.z || t.rotate || t.rotateX || t.rotateY || t.skewX || t.skewY; 2982} 2983function L7(t) { 2984 return V0(t.x) || V0(t.y); 2985} 2986function V0(t) { 2987 return t && t !== "0%"; 2988} 2989function c3(t, e, s) { 2990 const r = t - s, n = e * r; 2991 return s + n; 2992} 2993function H0(t, e, s, r, n) { 2994 return n !== void 0 && (t = c3(t, n, r)), c3(t, s, r) + e; 2995} 2996function j4(t, e = 0, s = 1, r, n) { 2997 t.min = H0(t.min, e, s, r, n), t.max = H0(t.max, e, s, r, n); 2998} 2999function c7(t, { x: e, y: s }) { 3000 j4(t.x, e.translate, e.scale, e.originPoint), j4(t.y, s.translate, s.scale, s.originPoint); 3001} 3002const Z0 = 0.999999999999, W0 = 1.0000000000001; 3003function Eo(t, e, s, r = !1) { 3004 const n = s.length; 3005 if (!n) 3006 return; 3007 e.x = e.y = 1; 3008 let o, L; 3009 for (let d = 0; d < n; d++) { 3010 o = s[d], L = o.projectionDelta; 3011 const { visualElement: l } = o.options; 3012 l && l.props.style && l.props.style.display === "contents" || (r && o.options.layoutScroll && o.scroll && o !== o.root && ct(t, { 3013 x: -o.scroll.offset.x, 3014 y: -o.scroll.offset.y 3015 }), L && (e.x *= L.x.scale, e.y *= L.y.scale, c7(t, L)), r && C1(o.latestValues) && ct(t, o.latestValues)); 3016 } 3017 e.x < W0 && e.x > Z0 && (e.x = 1), e.y < W0 && e.y > Z0 && (e.y = 1); 3018} 3019function Lt(t, e) { 3020 t.min = t.min + e, t.max = t.max + e; 3021} 3022function $0(t, e, s, r, n = 0.5) { 3023 const o = se(t.min, t.max, n); 3024 j4(t, e, s, o, r); 3025} 3026function ct(t, e) { 3027 $0(t.x, e.x, e.scaleX, e.scale, e.originX), $0(t.y, e.y, e.scaleY, e.scale, e.originY); 3028} 3029function l7(t, e) { 3030 return o7(Fo(t.getBoundingClientRect(), e)); 3031} 3032function Ro(t, e, s) { 3033 const r = l7(t, s), { scroll: n } = e; 3034 return n && (Lt(r.x, n.offset.x), Lt(r.y, n.offset.y)), r; 3035} 3036const q0 = () => ({ 3037 translate: 0, 3038 scale: 1, 3039 origin: 0, 3040 originPoint: 0 3041}), lt = () => ({ 3042 x: q0(), 3043 y: q0() 3044}), U0 = () => ({ min: 0, max: 0 }), ce = () => ({ 3045 x: U0(), 3046 y: U0() 3047}), O4 = { current: null }, d7 = { current: !1 }; 3048function Do() { 3049 if (d7.current = !0, !!u5) 3050 if (window.matchMedia) { 3051 const t = window.matchMedia("(prefers-reduced-motion)"), e = () => O4.current = t.matches; 3052 t.addEventListener("change", e), e(); 3053 } else 3054 O4.current = !1; 3055} 3056const zo = /* @__PURE__ */ new WeakMap(); 3057function jo(t, e, s) { 3058 for (const r in e) { 3059 const n = e[r], o = s[r]; 3060 if (xe(n)) 3061 t.addValue(r, n); 3062 else if (xe(o)) 3063 t.addValue(r, Ue(n, { owner: t })); 3064 else if (o !== n) 3065 if (t.hasValue(r)) { 3066 const L = t.getValue(r); 3067 L.liveStyle === !0 ? L.jump(n) : L.hasAnimated || L.set(n); 3068 } else { 3069 const L = t.getStaticValue(r); 3070 t.addValue(r, Ue(L !== void 0 ? L : n, { owner: t })); 3071 } 3072 } 3073 for (const r in s) 3074 e[r] === void 0 && t.removeValue(r); 3075 return e; 3076} 3077const G0 = [ 3078 "AnimationStart", 3079 "AnimationComplete", 3080 "Update", 3081 "BeforeLayoutMeasure", 3082 "LayoutMeasure", 3083 "LayoutAnimationStart", 3084 "LayoutAnimationComplete" 3085]; 3086class Oo { 3087 /** 3088 * This method takes React props and returns found MotionValues. For example, HTML 3089 * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays. 3090 * 3091 * This isn't an abstract method as it needs calling in the constructor, but it is 3092 * intended to be one. 3093 */ 3094 scrapeMotionValuesFromProps(e, s, r) { 3095 return {}; 3096 } 3097 constructor({ parent: e, props: s, presenceContext: r, reducedMotionConfig: n, blockInitialAnimation: o, visualState: L }, d = {}) { 3098 this.current = null, this.children = /* @__PURE__ */ new Set(), this.isVariantNode = !1, this.isControllingVariants = !1, this.shouldReduceMotion = null, this.values = /* @__PURE__ */ new Map(), this.KeyframeResolver = C5, this.features = {}, this.valueSubscriptions = /* @__PURE__ */ new Map(), this.prevMotionValues = {}, this.events = {}, this.propEventSubscriptions = {}, this.notifyUpdate = () => this.notify("Update", this.latestValues), this.render = () => { 3099 this.current && (this.triggerBuild(), this.renderInstance(this.current, this.renderState, this.props.style, this.projection)); 3100 }, this.renderScheduledAt = 0, this.scheduleRender = () => { 3101 const M = Ae.now(); 3102 this.renderScheduledAt < M && (this.renderScheduledAt = M, $.render(this.render, !1, !0)); 3103 }; 3104 const { latestValues: l, renderState: g } = L; 3105 this.latestValues = l, this.baseTarget = { ...l }, this.initialValues = s.initial ? { ...l } : {}, this.renderState = g, this.parent = e, this.props = s, this.presenceContext = r, this.depth = e ? e.depth + 1 : 0, this.reducedMotionConfig = n, this.options = d, this.blockInitialAnimation = !!o, this.isControllingVariants = A3(s), this.isVariantNode = Ks(s), this.isVariantNode && (this.variantChildren = /* @__PURE__ */ new Set()), this.manuallyAnimateOnMount = !!(e && e.current); 3106 const { willChange: f, ...p } = this.scrapeMotionValuesFromProps(s, {}, this); 3107 for (const M in p) { 3108 const u = p[M]; 3109 l[M] !== void 0 && xe(u) && u.set(l[M]); 3110 } 3111 } 3112 mount(e) { 3113 this.current = e, zo.set(e, this), this.projection && !this.projection.instance && this.projection.mount(e), this.parent && this.isVariantNode && !this.isControllingVariants && (this.removeFromVariantTree = this.parent.addVariantChild(this)), this.values.forEac
vendor: 17,421 bytes, lines 3113-3636
3113h((s, r) => this.bindToMotionValue(r, s)), d7.current || Do(), this.shouldReduceMotion = this.reducedMotionConfig === "never" ? !1 : this.reducedMotionConfig === "always" ? !0 : O4.current, this.parent?.addChild(this), this.update(this.props, this.presenceContext); 3114 } 3115 unmount() { 3116 this.projection && this.projection.unmount(), Je(this.notifyUpdate), Je(this.render), this.valueSubscriptions.forEach((e) => e()), this.valueSubscriptions.clear(), this.removeFromVariantTree && this.removeFromVariantTree(), this.parent?.removeChild(this); 3117 for (const e in this.events) 3118 this.events[e].clear(); 3119 for (const e in this.features) { 3120 const s = this.features[e]; 3121 s && (s.unmount(), s.isMounted = !1); 3122 } 3123 this.current = null; 3124 } 3125 addChild(e) { 3126 this.children.add(e), this.enteringChildren ?? (this.enteringChildren = /* @__PURE__ */ new Set()), this.enteringChildren.add(e); 3127 } 3128 removeChild(e) { 3129 this.children.delete(e), this.enteringChildren && this.enteringChildren.delete(e); 3130 } 3131 bindToMotionValue(e, s) { 3132 this.valueSubscriptions.has(e) && this.valueSubscriptions.get(e)(); 3133 const r = At.has(e); 3134 r && this.onBindTransform && this.onBindTransform(); 3135 const n = s.on("change", (L) => { 3136 this.latestValues[e] = L, this.props.onUpdate && $.preRender(this.notifyUpdate), r && this.projection && (this.projection.isTransformDirty = !0), this.scheduleRender(); 3137 }); 3138 let o; 3139 window.MotionCheckAppearSync && (o = window.MotionCheckAppearSync(this, e, s)), this.valueSubscriptions.set(e, () => { 3140 n(), o && o(), s.owner && s.stop(); 3141 }); 3142 } 3143 sortNodePosition(e) { 3144 return !this.current || !this.sortInstanceNodePosition || this.type !== e.type ? 0 : this.sortInstanceNodePosition(this.current, e.current); 3145 } 3146 updateFeatures() { 3147 let e = "animation"; 3148 for (e in yt) { 3149 const s = yt[e]; 3150 if (!s) 3151 continue; 3152 const { isEnabled: r, Feature: n } = s; 3153 if (!this.features[e] && n && r(this.props) && (this.features[e] = new n(this)), this.features[e]) { 3154 const o = this.features[e]; 3155 o.isMounted ? o.update() : (o.mount(), o.isMounted = !0); 3156 } 3157 } 3158 } 3159 triggerBuild() { 3160 this.build(this.renderState, this.latestValues, this.props); 3161 } 3162 /** 3163 * Measure the current viewport box with or without transforms. 3164 * Only measures axis-aligned boxes, rotate and skew must be manually 3165 * removed with a re-render to work. 3166 */ 3167 measureViewportBox() { 3168 return this.current ? this.measureInstanceViewportBox(this.current, this.props) : ce(); 3169 } 3170 getStaticValue(e) { 3171 return this.latestValues[e]; 3172 } 3173 setStaticValue(e, s) { 3174 this.latestValues[e] = s; 3175 } 3176 /** 3177 * Update the provided props. Ensure any newly-added motion values are 3178 * added to our map, old ones removed, and listeners updated. 3179 */ 3180 update(e, s) { 3181 (e.transformTemplate || this.props.transformTemplate) && this.scheduleRender(), this.prevProps = this.props, this.props = e, this.prevPresenceContext = this.presenceContext, this.presenceContext = s; 3182 for (let r = 0; r < G0.length; r++) { 3183 const n = G0[r]; 3184 this.propEventSubscriptions[n] && (this.propEventSubscriptions[n](), delete this.propEventSubscriptions[n]); 3185 const o = "on" + n, L = e[o]; 3186 L && (this.propEventSubscriptions[n] = this.on(n, L)); 3187 } 3188 this.prevMotionValues = jo(this, this.scrapeMotionValuesFromProps(e, this.prevProps, this), this.prevMotionValues), this.handleChildMotionValue && this.handleChildMotionValue(); 3189 } 3190 getProps() { 3191 return this.props; 3192 } 3193 /** 3194 * Returns the variant definition with a given name. 3195 */ 3196 getVariant(e) { 3197 return this.props.variants ? this.props.variants[e] : void 0; 3198 } 3199 /** 3200 * Returns the defined default transition on this component. 3201 */ 3202 getDefaultTransition() { 3203 return this.props.transition; 3204 } 3205 getTransformPagePoint() { 3206 return this.props.transformPagePoint; 3207 } 3208 getClosestVariantNode() { 3209 return this.isVariantNode ? this : this.parent ? this.parent.getClosestVariantNode() : void 0; 3210 } 3211 /** 3212 * Add a child visual element to our set of children. 3213 */ 3214 addVariantChild(e) { 3215 const s = this.getClosestVariantNode(); 3216 if (s) 3217 return s.variantChildren && s.variantChildren.add(e), () => s.variantChildren.delete(e); 3218 } 3219 /** 3220 * Add a motion value and bind it to this visual element. 3221 */ 3222 addValue(e, s) { 3223 const r = this.values.get(e); 3224 s !== r && (r && this.removeValue(e), this.bindToMotionValue(e, s), this.values.set(e, s), this.latestValues[e] = s.get()); 3225 } 3226 /** 3227 * Remove a motion value and unbind any active subscriptions. 3228 */ 3229 removeValue(e) { 3230 this.values.delete(e); 3231 const s = this.valueSubscriptions.get(e); 3232 s && (s(), this.valueSubscriptions.delete(e)), delete this.latestValues[e], this.removeValueFromRenderState(e, this.renderState); 3233 } 3234 /** 3235 * Check whether we have a motion value for this key 3236 */ 3237 hasValue(e) { 3238 return this.values.has(e); 3239 } 3240 getValue(e, s) { 3241 if (this.props.values && this.props.values[e]) 3242 return this.props.values[e]; 3243 let r = this.values.get(e); 3244 return r === void 0 && s !== void 0 && (r = Ue(s === null ? void 0 : s, { owner: this }), this.addValue(e, r)), r; 3245 } 3246 /** 3247 * If we're trying to animate to a previously unencountered value, 3248 * we need to check for it in our state and as a last resort read it 3249 * directly from the instance (which might have performance implications). 3250 */ 3251 readValue(e, s) { 3252 let r = this.latestValues[e] !== void 0 || !this.current ? this.latestValues[e] : this.getBaseTargetFromProps(this.props, e) ?? this.readValueFromInstance(this.current, e, this.options); 3253 return r != null && (typeof r == "string" && (as(r) || is(r)) ? r = parseFloat(r) : !Un(r) && v1.test(s) && (r = Os(e, s)), this.setBaseTarget(e, xe(r) ? r.get() : r)), xe(r) ? r.get() : r; 3254 } 3255 /** 3256 * Set the base target to later animate back to. This is currently 3257 * only hydrated on creation and when we first read a value. 3258 */ 3259 setBaseTarget(e, s) { 3260 this.baseTarget[e] = s; 3261 } 3262 /** 3263 * Find the base target for a value thats been removed from all animation 3264 * props. 3265 */ 3266 getBaseTarget(e) { 3267 const { initial: s } = this.props; 3268 let r; 3269 if (typeof s == "string" || typeof s == "object") { 3270 const o = q5(this.props, s, this.presenceContext?.custom); 3271 o && (r = o[e]); 3272 } 3273 if (s && r !== void 0) 3274 return r; 3275 const n = this.getBaseTargetFromProps(this.props, e); 3276 return n !== void 0 && !xe(n) ? n : this.initialValues[e] !== void 0 && r === void 0 ? void 0 : this.baseTarget[e]; 3277 } 3278 on(e, s) { 3279 return this.events[e] || (this.events[e] = new _5()), this.events[e].add(s); 3280 } 3281 notify(e, ...s) { 3282 this.events[e] && this.events[e].notify(...s); 3283 } 3284 scheduleRenderMicrotask() { 3285 z5.render(this.render); 3286 } 3287} 3288class g7 extends Oo { 3289 constructor() { 3290 super(...arguments), this.KeyframeResolver = Tn; 3291 } 3292 sortInstanceNodePosition(e, s) { 3293 return e.compareDocumentPosition(s) & 2 ? 1 : -1; 3294 } 3295 getBaseTargetFromProps(e, s) { 3296 return e.style ? e.style[s] : void 0; 3297 } 3298 removeValueFromRenderState(e, { vars: s, style: r }) { 3299 delete s[e], delete r[e]; 3300 } 3301 handleChildMotionValue() { 3302 this.childSubscription && (this.childSubscription(), delete this.childSubscription); 3303 const { children: e } = this.props; 3304 xe(e) && (this.childSubscription = e.on("change", (s) => { 3305 this.current && (this.current.textContent = `${s}`); 3306 })); 3307 } 3308} 3309function f7(t, { style: e, vars: s }, r, n) { 3310 const o = t.style; 3311 let L; 3312 for (L in e) 3313 o[L] = e[L]; 3314 n?.applyProjectionStyles(o, r); 3315 for (L in s) 3316 o.setProperty(L, s[L]); 3317} 3318function Vo(t) { 3319 return window.getComputedStyle(t); 3320} 3321class Ho extends g7 { 3322 constructor() { 3323 super(...arguments), this.type = "html", this.renderInstance = f7; 3324 } 3325 readValueFromInstance(e, s) { 3326 if (At.has(s)) 3327 return this.projection?.isProjecting ? I4(s) : Wr(e, s); 3328 { 3329 const r = Vo(e), n = (w5(s) ? r.getPropertyValue(s) : r[s]) || 0; 3330 return typeof n == "string" ? n.trim() : n; 3331 } 3332 } 3333 measureInstanceViewportBox(e, { transformPagePoint: s }) { 3334 return l7(e, s); 3335 } 3336 build(e, s, r) { 3337 Z5(e, s, r.transformTemplate); 3338 } 3339 scrapeMotionValuesFromProps(e, s, r) { 3340 return U5(e, s, r); 3341 } 3342} 3343const p7 = /* @__PURE__ */ new Set([ 3344 "baseFrequency", 3345 "diffuseConstant", 3346 "kernelMatrix", 3347 "kernelUnitLength", 3348 "keySplines", 3349 "keyTimes", 3350 "limitingConeAngle", 3351 "markerHeight", 3352 "markerWidth", 3353 "numOctaves", 3354 "targetX", 3355 "targetY", 3356 "surfaceScale", 3357 "specularConstant", 3358 "specularExponent", 3359 "stdDeviation", 3360 "tableValues", 3361 "viewBox", 3362 "gradientTransform", 3363 "pathLength", 3364 "startOffset", 3365 "textLength", 3366 "lengthAdjust" 3367]); 3368function Zo(t, e, s, r) { 3369 f7(t, e, void 0, r); 3370 for (const n in e.attrs) 3371 t.setAttribute(p7.has(n) ? n : G5(n), e.attrs[n]); 3372} 3373class Wo extends g7 { 3374 constructor() { 3375 super(...arguments), this.type = "svg", this.isSVGTag = !1, this.measureInstanceViewportBox = ce; 3376 } 3377 getBaseTargetFromProps(e, s) { 3378 return e[s]; 3379 } 3380 readValueFromInstance(e, s) { 3381 if (At.has(s)) { 3382 const r = js(s); 3383 return r && r.default || 0; 3384 } 3385 return s = p7.has(s) ? s : G5(s), e.getAttribute(s); 3386 } 3387 scrapeMotionValuesFromProps(e, s, r) { 3388 return s7(e, s, r); 3389 } 3390 build(e, s, r) { 3391 Qs(e, s, this.isSVGTag, r.transformTemplate, r.style); 3392 } 3393 renderInstance(e, s, r, n) { 3394 Zo(e, s, r, n); 3395 } 3396 mount(e) { 3397 this.isSVGTag = t7(e.tagName), super.mount(e); 3398 } 3399} 3400const $o = (t, e) => $5(t) ? new Wo(e) : new Ho(e, { 3401 allowProjection: t !== b3 3402}); 3403function pt(t, e, s) { 3404 const r = t.getProps(); 3405 return q5(r, e, s !== void 0 ? s : r.custom, t); 3406} 3407const V4 = (t) => Array.isArray(t); 3408function qo(t, e, s) { 3409 t.hasValue(e) ? t.getValue(e).set(s) : t.addValue(e, Ue(s)); 3410} 3411function Uo(t) { 3412 return V4(t) ? t[t.length - 1] || 0 : t; 3413} 3414function Go(t, e) { 3415 const s = pt(t, e); 3416 let { transitionEnd: r = {}, transition: n = {}, ...o } = s || {}; 3417 o = { ...o, ...r }; 3418 for (const L in o) { 3419 const d = Uo(o[L]); 3420 qo(t, L, d); 3421 } 3422} 3423function Jo(t) { 3424 return !!(xe(t) && t.add); 3425} 3426function H4(t, e) { 3427 const s = t.getValue("willChange"); 3428 if (Jo(s)) 3429 return s.add(e); 3430 if (!s && u1.WillChange) { 3431 const r = new u1.WillChange("auto"); 3432 t.addValue("willChange", r), r.add(e); 3433 } 3434} 3435function M7(t) { 3436 return t.props[i7]; 3437} 3438const Ko = (t) => t !== null; 3439function Yo(t, { repeat: e, repeatType: s = "loop" }, r) { 3440 const n = t.filter(Ko), o = e && s !== "loop" && e % 2 === 1 ? 0 : n.length - 1; 3441 return n[o]; 3442} 3443const Xo = { 3444 type: "spring", 3445 stiffness: 500, 3446 damping: 25, 3447 restSpeed: 10 3448}, Qo = (t) => ({ 3449 type: "spring", 3450 stiffness: 550, 3451 damping: t === 0 ? 2 * Math.sqrt(550) : 30, 3452 restSpeed: 10 3453}), e8 = { 3454 type: "keyframes", 3455 duration: 0.8 3456}, t8 = { 3457 type: "keyframes", 3458 ease: [0.25, 0.1, 0.35, 1], 3459 duration: 0.3 3460}, a8 = (t, { keyframes: e }) => e.length > 2 ? e8 : At.has(t) ? t.startsWith("scale") ? Qo(e[1]) : Xo : t8; 3461function s8({ when: t, delay: e, delayChildren: s, staggerChildren: r, staggerDirection: n, repeat: o, repeatType: L, repeatDelay: d, from: l, elapsed: g, ...f }) { 3462 return !!Object.keys(f).length; 3463} 3464const J5 = (t, e, s, r = {}, n, o) => (L) => { 3465 const d = F5(r, t) || {}, l = d.delay || r.delay || 0; 3466 let { elapsed: g = 0 } = r; 3467 g = g - /* @__PURE__ */ t1(l); 3468 const f = { 3469 keyframes: Array.isArray(s) ? s : [null, s], 3470 ease: "easeOut", 3471 velocity: e.getVelocity(), 3472 ...d, 3473 delay: -g, 3474 onUpdate: (M) => { 3475 e.set(M), d.onUpdate && d.onUpdate(M); 3476 }, 3477 onComplete: () => { 3478 L(), d.onComplete && d.onComplete(); 3479 }, 3480 name: t, 3481 motionValue: e, 3482 element: o ? void 0 : n 3483 }; 3484 s8(d) || Object.assign(f, a8(t, f)), f.duration && (f.duration = /* @__PURE__ */ t1(f.duration)), f.repeatDelay && (f.repeatDelay = /* @__PURE__ */ t1(f.repeatDelay)), f.from !== void 0 && (f.keyframes[0] = f.from); 3485 let p = !1; 3486 if ((f.type === !1 || f.duration === 0 && !f.repeatDelay) && (R4(f), f.delay === 0 && (p = !0)), (u1.instantAnimations || u1.skipAnimations) && (p = !0, R4(f), f.delay = 0), f.allowFlatten = !d.type && !d.ease, p && !o && e.get() !== void 0) { 3487 const M = Yo(f.keyframes, d); 3488 if (M !== void 0) { 3489 $.update(() => { 3490 f.onUpdate(M), f.onComplete(); 3491 }); 3492 return; 3493 } 3494 } 3495 return d.isSync ? new S3(f) : new fn(f); 3496}; 3497function i8({ protectedKeys: t, needsAnimating: e }, s) { 3498 const r = t.hasOwnProperty(s) && e[s] !== !0; 3499 return e[s] = !1, r; 3500} 3501function u7(t, e, { delay: s = 0, transitionOverride: r, type: n } = {}) { 3502 let { transition: o = t.getDefaultTransition(), transitionEnd: L, ...d } = e; 3503 r && (o = r); 3504 const l = [], g = n && t.animationState && t.animationState.getState()[n]; 3505 for (const f in d) { 3506 const p = t.getValue(f, t.latestValues[f] ?? null), M = d[f]; 3507 if (M === void 0 || g && i8(g, f)) 3508 continue; 3509 const u = { 3510 delay: s, 3511 ...F5(o || {}, f) 3512 }, h = p.get(); 3513 if (h !== void 0 && !p.isAnimating && !Array.isArray(M) && M === h && !u.velocity) 3514 continue; 3515 let x = !1; 3516 if (window.MotionHandoffAnimation) { 3517 const v = M7(t); 3518 if (v) { 3519 const y = window.MotionHandoffAnimation(v, f, $); 3520 y !== null && (u.startTime = y, x = !0); 3521 } 3522 } 3523 H4(t, f), p.start(J5(f, p, M, t.shouldReduceMotion && Rs.has(f) ? { type: !1 } : u, t, x)); 3524 const _ = p.animation; 3525 _ && l.push(_); 3526 } 3527 return L && Promise.all(l).then(() => { 3528 $.update(() => { 3529 L && Go(t, L); 3530 }); 3531 }), l; 3532} 3533function h7(t, e, s, r = 0, n = 1) { 3534 const o = Array.from(t).sort((g, f) => g.sortNodePosition(f)).indexOf(e), L = t.size, d = (L - 1) * r; 3535 return typeof s == "function" ? s(o, L) : n === 1 ? o * r : d - o * r; 3536} 3537function Z4(t, e, s = {}) { 3538 const r = pt(t, e, s.type === "exit" ? t.presenceContext?.custom : void 0); 3539 let { transition: n = t.getDefaultTransition() || {} } = r || {}; 3540 s.transitionOverride && (n = s.transitionOverride); 3541 const o = r ? () => Promise.all(u7(t, r, s)) : () => Promise.resolve(), L = t.variantChildren && t.variantChildren.size ? (l = 0) => { 3542 const { delayChildren: g = 0, staggerChildren: f, staggerDirection: p } = n; 3543 return r8(t, e, l, g, f, p, s); 3544 } : () => Promise.resolve(), { when: d } = n; 3545 if (d) { 3546 const [l, g] = d === "beforeChildren" ? [o, L] : [L, o]; 3547 return l().then(() => g()); 3548 } else 3549 return Promise.all([o(), L(s.delay)]); 3550} 3551function r8(t, e, s = 0, r = 0, n = 0, o = 1, L) { 3552 const d = []; 3553 for (const l of t.variantChildren) 3554 l.notify("AnimationStart", e), d.push(Z4(l, e, { 3555 ...L, 3556 delay: s + (typeof r == "function" ? 0 : r) + h7(t.variantChildren, l, r, n, o) 3557 }).then(() => l.notify("AnimationComplete", e))); 3558 return Promise.all(d); 3559} 3560function n8(t, e, s = {}) { 3561 t.notify("AnimationStart", e); 3562 let r; 3563 if (Array.isArray(e)) { 3564 const n = e.map((o) => Z4(t, o, s)); 3565 r = Promise.all(n); 3566 } else if (typeof e == "string") 3567 r = Z4(t, e, s); 3568 else { 3569 const n = typeof e == "function" ? pt(t, e, s.custom) : e; 3570 r = Promise.all(u7(t, n, s)); 3571 } 3572 return r.then(() => { 3573 t.notify("AnimationComplete", e); 3574 }); 3575} 3576function m7(t, e) { 3577 if (!Array.isArray(e)) 3578 return !1; 3579 const s = e.length; 3580 if (s !== t.length) 3581 return !1; 3582 for (let r = 0; r < s; r++) 3583 if (e[r] !== t[r]) 3584 return !1; 3585 return !0; 3586} 3587const o8 = H5.length; 3588function x7(t) { 3589 if (!t) 3590 return; 3591 if (!t.isControllingVariants) { 3592 const s = t.parent ? x7(t.parent) || {} : {}; 3593 return t.props.initial !== void 0 && (s.initial = t.props.initial), s; 3594 } 3595 const e = {}; 3596 for (let s = 0; s < o8; s++) { 3597 const r = H5[s], n = t.props[r]; 3598 (t2(n) || n === !1) && (e[r] = n); 3599 } 3600 return e; 3601} 3602const L8 = [...V5].reverse(), c8 = V5.length; 3603function l8(t) { 3604 return (e) => Promise.all(e.map(({ animation: s, options: r }) => n8(t, s, r))); 3605} 3606function d8(t) { 3607 let e = l8(t), s = J0(), r = !0; 3608 const n = (l) => (g, f) => { 3609 const p = pt(t, f, l === "exit" ? t.presenceContext?.custom : void 0); 3610 if (p) { 3611 const { transition: M, transitionEnd: u, ...h } = p; 3612 g = { ...g, ...h, ...u }; 3613 } 3614 return g; 3615 }; 3616 function o(l) { 3617 e = l(t); 3618 } 3619 function L(l) { 3620 const { props: g } = t, f = x7(t.parent) || {}, p = [], M = /* @__PURE__ */ new Set(); 3621 let u = {}, h = 1 / 0; 3622 for (let _ = 0; _ < c8; _++) { 3623 const v = L8[_], y = s[v], b = g[v] !== void 0 ? g[v] : f[v], S = t2(b), k = v === l ? y.isActive : null; 3624 k === !1 && (h = _); 3625 let A = b === f[v] && b !== g[v] && S; 3626 if (A && r && t.manuallyAnimateOnMount && (A = !1), y.protectedKeys = { ...u }, // If it isn't active and hasn't *just* been set as inactive 3627 !y.isActive && k === null || // If we didn't and don't have any defined prop for this animation type 3628 !b && !y.prevProp || // Or if the prop doesn't define an animation 3629 k3(b) || typeof b == "boolean") 3630 continue; 3631 const I = g8(y.prevProp, b); 3632 let w = I || // If we're making this variant active, we want to always make it active 3633 v === l && y.isActive && !A && S || // If we removed a higher-priority variant (i is in reverse order) 3634 _ > h && S, P = !1; 3635 const z = Array.isArray(b) ? b : [b]; 3636 let V = z.reduce(n(v), {});
3637 k === !1 && (V = {}); 3638 const { prevResolvedValues: Se = {} } = y, Ie = { 3639 ...Se, 3640 ...V 3641 }, le = (ee) => { 3642 w = !0, M.has(ee) && (P = !0, M.delete(ee)), y.needsAnimating[ee] = !0; 3643 const ye = t.getValue(ee); 3644 ye && (ye.liveStyle = !1); 3645 }; 3646 for (const ee in Ie) { 3647 const ye = V[ee], Ke = Se[ee]; 3648 if (u.hasOwnProperty(ee)) 3649 continue; 3650 let o1 = !1; 3651 V4(ye) && V4(Ke) ? o1 = !m7(ye, Ke) : o1 = ye !== Ke, o1 ? ye != null ? le(ee) : M.add(ee) : ye !== void 0 && M.has(ee) ? le(ee) : y.protectedKeys[ee] = !0; 3652 } 3653 y.prevProp = b, y.prevResolvedValues = V, y.isActive && (u = { ...u, ...V }), r && t.blockInitialAnimation && (w = !1); 3654 const Ee = A && I; 3655 w && (!Ee || P) && p.push(...z.map((ee) => { 3656 const ye = { type: v }; 3657 if (typeof ee == "string" && r && !Ee && t.manuallyAnimateOnMount && t.parent) { 3658 const { parent: Ke } = t, o1 = pt(Ke, ee); 3659 if (Ke.enteringChildren && o1) { 3660 const { delayChildren: W3 } = o1.transition || {}; 3661 ye.delay = h7(Ke.enteringChildren, t, W3); 3662 } 3663 } 3664 return { 3665 animation: ee, 3666 options: ye 3667 }; 3668 })); 3669 } 3670 if (M.size) { 3671 const _ = {}; 3672 if (typeof g.initial != "boolean") { 3673 const v = pt(t, Array.isArray(g.initial) ? g.initial[0] : g.initial); 3674 v && v.transition && (_.transition = v.transition); 3675 } 3676 M.forEach((v) => { 3677 const y = t.getBaseTarget(v), b = t.getValue(v); 3678 b && (b.liveStyle = !0), _[v] = y ?? null; 3679 }), p.push({ animation: _ }); 3680 } 3681 let x = !!p.length; 3682 return r && (g.initial === !1 || g.initial === g.animate) && !t.manuallyAnimateOnMount && (x = !1), r = !1, x ? e(p) : Promise.resolve(); 3683 } 3684 function d(l, g) { 3685 if (s[l].isActive === g) 3686 return Promise.resolve(); 3687 t.variantChildren?.forEach((p) => p.animationState?.setActive(l, g)), s[l].isActive = g; 3688 const f = L(l); 3689 for (const p in s) 3690 s[p].protectedKeys = {}; 3691 return f; 3692 } 3693 return { 3694 animateChanges: L, 3695 setActive: d, 3696 setAnimateFunction: o, 3697 getState: () => s, 3698 reset: () => { 3699 s = J0(); 3700 } 3701 }; 3702} 3703function g8(t, e) { 3704 return typeof e == "string" ? e !== t : Array.isArray(e) ? !m7(e, t) : !1; 3705} 3706function N1(t = !1) { 3707 return { 3708 isActive: t, 3709 protectedKeys: {}, 3710 needsAnimating: {}, 3711 prevResolvedValues: {} 3712 }; 3713} 3714function J0() { 3715 return { 3716 animate: N1(!0), 3717 whileInView: N1(), 3718 whileHover: N1(), 3719 whileTap: N1(), 3720 whileDrag: N1(), 3721 whileFocus: N1(), 3722 exit: N1() 3723 }; 3724} 3725class B1 { 3726 constructor(e) { 3727 this.isMounted = !1, this.node = e; 3728 } 3729 update() { 3730 } 3731} 3732class f8 extends B1 { 3733 /** 3734 * We dynamically generate the AnimationState manager as it contains a reference 3735 * to the underlying animation library. We only want to load that if we load this, 3736 * so people can optionally code split it out using the `m` component. 3737 */ 3738 constructor(e) { 3739 super(e), e.animationState || (e.animationState = d8(e)); 3740 } 3741 updateAnimationControlsSubscription() { 3742 const { animate: e } = this.node.getProps(); 3743 k3(e) && (this.unmountControls = e.subscribe(this.node)); 3744 } 3745 /** 3746 * Subscribe any provided AnimationControls to the component's VisualElement 3747 */ 3748 mount() { 3749 this.updateAnimationControlsSubscription(); 3750 } 3751 update() { 3752 const { animate: e } = this.node.getProps(), { animate: s } = this.node.prevProps || {}; 3753 e !== s && this.updateAnimationControlsSubscription(); 3754 } 3755 unmount() { 3756 this.node.animationState.reset(), this.unmountControls?.(); 3757 } 3758} 3759let p8 = 0; 3760class M8 extends B1 { 3761 constructor() { 3762 super(...arguments), this.id = p8++; 3763 } 3764 update() { 3765 if (!this.node.presenceContext) 3766 return; 3767 const { isPresent: e, onExitComplete: s } = this.node.presenceContext, { isPresent: r } = this.node.prevPresenceContext || {}; 3768 if (!this.node.animationState || e === r) 3769 return; 3770 const n = this.node.animationState.setActive("exit", !e); 3771 s && !e && n.then(() => { 3772 s(this.id); 3773 }); 3774 } 3775 mount() { 3776 const { register: e, onExitComplete: s } = this.node.presenceContext || {};
vendor: 8,703 bytes, lines 3777-4011
3777 s && s(this.id), e && (this.unmount = e(this.id)); 3778 } 3779 unmount() { 3780 } 3781} 3782const u8 = { 3783 animation: { 3784 Feature: f8 3785 }, 3786 exit: { 3787 Feature: M8 3788 } 3789}; 3790function s2(t, e, s, r = { passive: !0 }) { 3791 return t.addEventListener(e, s, r), () => t.removeEventListener(e, s); 3792} 3793function x2(t) { 3794 return { 3795 point: { 3796 x: t.pageX, 3797 y: t.pageY 3798 } 3799 }; 3800} 3801const h8 = (t) => (e) => j5(e) && t(e, x2(e)); 3802function Gt(t, e, s, r) { 3803 return s2(t, e, h8(s), r); 3804} 3805const _7 = 1e-4, m8 = 1 - _7, x8 = 1 + _7, b7 = 0.01, _8 = 0 - b7, b8 = 0 + b7; 3806function we(t) { 3807 return t.max - t.min; 3808} 3809function v8(t, e, s) { 3810 return Math.abs(t - e) <= s; 3811} 3812function K0(t, e, s, r = 0.5) { 3813 t.origin = r, t.originPoint = se(e.min, e.max, t.origin), t.scale = we(s) / we(e), t.translate = se(s.min, s.max, t.origin) - t.originPoint, (t.scale >= m8 && t.scale <= x8 || isNaN(t.scale)) && (t.scale = 1), (t.translate >= _8 && t.translate <= b8 || isNaN(t.translate)) && (t.translate = 0); 3814} 3815function Jt(t, e, s, r) { 3816 K0(t.x, e.x, s.x, r ? r.originX : void 0), K0(t.y, e.y, s.y, r ? r.originY : void 0); 3817} 3818function Y0(t, e, s) { 3819 t.min = s.min + e.min, t.max = t.min + we(e); 3820} 3821function y8(t, e, s) { 3822 Y0(t.x, e.x, s.x), Y0(t.y, e.y, s.y); 3823} 3824function X0(t, e, s) { 3825 t.min = e.min - s.min, t.max = t.min + we(e); 3826} 3827function Kt(t, e, s) { 3828 X0(t.x, e.x, s.x), X0(t.y, e.y, s.y); 3829} 3830function ze(t) { 3831 return [t("x"), t("y")]; 3832} 3833const v7 = ({ current: t }) => t ? t.ownerDocument.defaultView : null, Q0 = (t, e) => Math.abs(t - e); 3834function w8(t, e) { 3835 const s = Q0(t.x, e.x), r = Q0(t.y, e.y); 3836 return Math.sqrt(s ** 2 + r ** 2); 3837} 3838class y7 { 3839 constructor(e, s, { transformPagePoint: r, contextWindow: n = window, dragSnapToOrigin: o = !1, distanceThreshold: L = 3 } = {}) { 3840 if (this.startEvent = null, this.lastMoveEvent = null, this.lastMoveEventInfo = null, this.handlers = {}, this.contextWindow = window, this.updatePoint = () => { 3841 if (!(this.lastMoveEvent && this.lastMoveEventInfo)) 3842 return; 3843 const M = s4(this.lastMoveEventInfo, this.history), u = this.startEvent !== null, h = w8(M.offset, { x: 0, y: 0 }) >= this.distanceThreshold; 3844 if (!u && !h) 3845 return; 3846 const { point: x } = M, { timestamp: _ } = me; 3847 this.history.push({ ...x, timestamp: _ }); 3848 const { onStart: v, onMove: y } = this.handlers; 3849 u || (v && v(this.lastMoveEvent, M), this.startEvent = this.lastMoveEvent), y && y(this.lastMoveEvent, M); 3850 }, this.handlePointerMove = (M, u) => { 3851 this.lastMoveEvent = M, this.lastMoveEventInfo = a4(u, this.transformPagePoint), $.update(this.updatePoint, !0); 3852 }, this.handlePointerUp = (M, u) => { 3853 this.end(); 3854 const { onEnd: h, onSessionEnd: x, resumeAnimation: _ } = this.handlers; 3855 if (this.dragSnapToOrigin && _ && _(), !(this.lastMoveEvent && this.lastMoveEventInfo)) 3856 return; 3857 const v = s4(M.type === "pointercancel" ? this.lastMoveEventInfo : a4(u, this.transformPagePoint), this.history); 3858 this.startEvent && h && h(M, v), x && x(M, v); 3859 }, !j5(e)) 3860 return; 3861 this.dragSnapToOrigin = o, this.handlers = s, this.transformPagePoint = r, this.distanceThreshold = L, this.contextWindow = n || window; 3862 const d = x2(e), l = a4(d, this.transformPagePoint), { point: g } = l, { timestamp: f } = me; 3863 this.history = [{ ...g, timestamp: f }]; 3864 const { onSessionStart: p } = s; 3865 p && p(e, s4(l, this.history)), this.removeListeners = M2(Gt(this.contextWindow, "pointermove", this.handlePointerMove), Gt(this.contextWindow, "pointerup", this.handlePointerUp), Gt(this.contextWindow, "pointercancel", this.handlePointerUp)); 3866 } 3867 updateHandlers(e) { 3868 this.handlers = e; 3869 } 3870 end() { 3871 this.removeListeners && this.removeListeners(), Je(this.updatePoint); 3872 } 3873} 3874function a4(t, e) { 3875 return e ? { point: e(t.point) } : t; 3876} 3877function ea(t, e) { 3878 return { x: t.x - e.x, y: t.y - e.y }; 3879} 3880function s4({ point: t }, e) { 3881 return { 3882 point: t, 3883 delta: ea(t, w7(e)), 3884 offset: ea(t, T8(e)), 3885 velocity: S8(e, 0.1) 3886 }; 3887} 3888function T8(t) { 3889 return t[0]; 3890} 3891function w7(t) { 3892 return t[t.length - 1]; 3893} 3894function S8(t, e) { 3895 if (t.length < 2) 3896 return { x: 0, y: 0 }; 3897 let s = t.length - 1, r = null; 3898 const n = w7(t); 3899 for (; s >= 0 && (r = t[s], !(n.timestamp - r.timestamp > /* @__PURE__ */ t1(e))); ) 3900 s--; 3901 if (!r) 3902 return { x: 0, y: 0 }; 3903 const o = /* @__PURE__ */ Oe(n.timestamp - r.timestamp); 3904 if (o === 0) 3905 return { x: 0, y: 0 }; 3906 const L = { 3907 x: (n.x - r.x) / o, 3908 y: (n.y - r.y) / o 3909 }; 3910 return L.x === 1 / 0 && (L.x = 0), L.y === 1 / 0 && (L.y = 0), L; 3911} 3912function B8(t, { min: e, max: s }, r) { 3913 return e !== void 0 && t < e ? t = r ? se(e, t, r.min) : Math.max(t, e) : s !== void 0 && t > s && (t = r ? se(s, t, r.max) : Math.min(t, s)), t; 3914} 3915function ta(t, e, s) { 3916 return { 3917 min: e !== void 0 ? t.min + e : void 0, 3918 max: s !== void 0 ? t.max + s - (t.max - t.min) : void 0 3919 }; 3920} 3921function k8(t, { top: e, left: s, bottom: r, right: n }) { 3922 return { 3923 x: ta(t.x, s, n), 3924 y: ta(t.y, e, r) 3925 }; 3926} 3927function aa(t, e) { 3928 let s = e.min - t.min, r = e.max - t.max; 3929 return e.max - e.min < t.max - t.min && ([s, r] = [r, s]), { min: s, max: r }; 3930} 3931function A8(t, e) { 3932 return { 3933 x: aa(t.x, e.x), 3934 y: aa(t.y, e.y) 3935 }; 3936} 3937function N8(t, e) { 3938 let s = 0.5; 3939 const r = we(t), n = we(e); 3940 return n > r ? s = /* @__PURE__ */ vt(e.min, e.max - r, t.min) : r > n && (s = /* @__PURE__ */ vt(t.min, t.max - n, e.min)), i1(0, 1, s); 3941} 3942function I8(t, e) { 3943 const s = {}; 3944 return e.min !== void 0 && (s.min = e.min - t.min), e.max !== void 0 && (s.max = e.max - t.min), s; 3945} 3946const W4 = 0.35; 3947function P8(t = W4) { 3948 return t === !1 ? t = 0 : t === !0 && (t = W4), { 3949 x: sa(t, "left", "right"), 3950 y: sa(t, "top", "bottom") 3951 }; 3952} 3953function sa(t, e, s) { 3954 return { 3955 min: ia(t, e), 3956 max: ia(t, s) 3957 }; 3958} 3959function ia(t, e) { 3960 return typeof t == "number" ? t : t[e] || 0; 3961} 3962const C8 = /* @__PURE__ */ new WeakMap(); 3963class F8 { 3964 constructor(e) { 3965 this.openDragLock = null, this.isDragging = !1, this.currentDirection = null, this.originPoint = { x: 0, y: 0 }, this.constraints = !1, this.hasMutatedConstraints = !1, this.elastic = ce(), this.latestPointerEvent = null, this.latestPanInfo = null, this.visualElement = e; 3966 } 3967 start(e, { snapToCursor: s = !1, distanceThreshold: r } = {}) { 3968 const { presenceContext: n } = this.visualElement; 3969 if (n && n.isPresent === !1) 3970 return; 3971 const o = (p) => { 3972 const { dragSnapToOrigin: M } = this.getProps(); 3973 M ? this.pauseAnimation() : this.stopAnimation(), s && this.snapToCursor(x2(p).point); 3974 }, L = (p, M) => { 3975 const { drag: u, dragPropagation: h, onDragStart: x } = this.getProps(); 3976 if (u && !h && (this.openDragLock && this.openDragLock(), this.openDragLock = kn(u), !this.openDragLock)) 3977 return; 3978 this.latestPointerEvent = p, this.latestPanInfo = M, this.isDragging = !0, this.currentDirection = null, this.resolveConstraints(), this.visualElement.projection && (this.visualElement.projection.isAnimationBlocked = !0, this.visualElement.projection.target = void 0), ze((v) => { 3979 let y = this.getAxisMotionValue(v).get() || 0; 3980 if (a1.test(y)) { 3981 const { projection: b } = this.visualElement; 3982 if (b && b.layout) { 3983 const S = b.layout.layoutBox[v]; 3984 S && (y = we(S) * (parseFloat(y) / 100)); 3985 } 3986 } 3987 this.originPoint[v] = y; 3988 }), x && $.postRender(() => x(p, M)), H4(this.visualElement, "transform"); 3989 const { animationState: _ } = this.visualElement; 3990 _ && _.setActive("whileDrag", !0); 3991 }, d = (p, M) => { 3992 this.latestPointerEvent = p, this.latestPanInfo = M; 3993 const { dragPropagation: u, dragDirectionLock: h, onDirectionLock: x, onDrag: _ } = this.getProps(); 3994 if (!u && !this.openDragLock) 3995 return; 3996 const { offset: v } = M; 3997 if (h && this.currentDirection === null) { 3998 this.currentDirection = E8(v), this.currentDirection !== null && x && x(this.currentDirection); 3999 return; 4000 } 4001 this.updateAxis("x", M.point, v), this.updateAxis("y", M.point, v), this.visualElement.render(), _ && _(p, M); 4002 }, l = (p, M) => { 4003 this.latestPointerEvent = p, this.latestPanInfo = M, this.stop(p, M), this.latestPointerEvent = null, this.latestPanInfo = null; 4004 }, g = () => ze((p) => this.getAnimationState(p) === "paused" && this.getAxisMotionValue(p).animation?.play()), { dragSnapToOrigin: f } = this.getProps(); 4005 this.panSession = new y7(e, { 4006 onSessionStart: o, 4007 onStart: L, 4008 onMove: d, 4009 onSessionEnd: l, 4010 resumeAnimation: g 4011 }, {
vendor: 9,742 bytes, lines 4012-4282
4012 transformPagePoint: this.visualElement.getTransformPagePoint(), 4013 dragSnapToOrigin: f, 4014 distanceThreshold: r, 4015 contextWindow: v7(this.visualElement) 4016 }); 4017 } 4018 /** 4019 * @internal 4020 */ 4021 stop(e, s) { 4022 const r = e || this.latestPointerEvent, n = s || this.latestPanInfo, o = this.isDragging; 4023 if (this.cancel(), !o || !n || !r) 4024 return; 4025 const { velocity: L } = n; 4026 this.startAnimation(L); 4027 const { onDragEnd: d } = this.getProps(); 4028 d && $.postRender(() => d(r, n)); 4029 } 4030 /** 4031 * @internal 4032 */ 4033 cancel() { 4034 this.isDragging = !1; 4035 const { projection: e, animationState: s } = this.visualElement; 4036 e && (e.isAnimationBlocked = !1), this.panSession && this.panSession.end(), this.panSession = void 0; 4037 const { dragPropagation: r } = this.getProps(); 4038 !r && this.openDragLock && (this.openDragLock(), this.openDragLock = null), s && s.setActive("whileDrag", !1); 4039 } 4040 updateAxis(e, s, r) { 4041 const { drag: n } = this.getProps(); 4042 if (!r || !k2(e, n, this.currentDirection)) 4043 return; 4044 const o = this.getAxisMotionValue(e); 4045 let L = this.originPoint[e] + r[e]; 4046 this.constraints && this.constraints[e] && (L = B8(L, this.constraints[e], this.elastic[e])), o.set(L); 4047 } 4048 resolveConstraints() { 4049 const { dragConstraints: e, dragElastic: s } = this.getProps(), r = this.visualElement.projection && !this.visualElement.projection.layout ? this.visualElement.projection.measure(!1) : this.visualElement.projection?.layout, n = this.constraints; 4050 e && ot(e) ? this.constraints || (this.constraints = this.resolveRefConstraints()) : e && r ? this.constraints = k8(r.layoutBox, e) : this.constraints = !1, this.elastic = P8(s), n !== this.constraints && r && this.constraints && !this.hasMutatedConstraints && ze((o) => { 4051 this.constraints !== !1 && this.getAxisMotionValue(o) && (this.constraints[o] = I8(r.layoutBox[o], this.constraints[o])); 4052 }); 4053 } 4054 resolveRefConstraints() { 4055 const { dragConstraints: e, onMeasureDragConstraints: s } = this.getProps(); 4056 if (!e || !ot(e)) 4057 return !1; 4058 const r = e.current, { projection: n } = this.visualElement; 4059 if (!n || !n.layout) 4060 return !1; 4061 const o = Ro(r, n.root, this.visualElement.getTransformPagePoint()); 4062 let L = A8(n.layout.layoutBox, o); 4063 if (s) { 4064 const d = s(Co(L)); 4065 this.hasMutatedConstraints = !!d, d && (L = o7(d)); 4066 } 4067 return L; 4068 } 4069 startAnimation(e) { 4070 const { drag: s, dragMomentum: r, dragElastic: n, dragTransition: o, dragSnapToOrigin: L, onDragTransitionEnd: d } = this.getProps(), l = this.constraints || {}, g = ze((f) => { 4071 if (!k2(f, s, this.currentDirection)) 4072 return; 4073 let p = l && l[f] || {}; 4074 L && (p = { min: 0, max: 0 }); 4075 const M = n ? 200 : 1e6, u = n ? 40 : 1e7, h = { 4076 type: "inertia", 4077 velocity: r ? e[f] : 0, 4078 bounceStiffness: M, 4079 bounceDamping: u, 4080 timeConstant: 750, 4081 restDelta: 1, 4082 restSpeed: 10, 4083 ...o, 4084 ...p 4085 }; 4086 return this.startAxisValueAnimation(f, h); 4087 }); 4088 return Promise.all(g).then(d); 4089 } 4090 startAxisValueAnimation(e, s) { 4091 const r = this.getAxisMotionValue(e); 4092 return H4(this.visualElement, e), r.start(J5(e, r, 0, s, this.visualElement, !1)); 4093 } 4094 stopAnimation() { 4095 ze((e) => this.getAxisMotionValue(e).stop()); 4096 } 4097 pauseAnimation() { 4098 ze((e) => this.getAxisMotionValue(e).animation?.pause()); 4099 } 4100 getAnimationState(e) { 4101 return this.getAxisMotionValue(e).animation?.state; 4102 } 4103 /** 4104 * Drag works differently depending on which props are provided. 4105 * 4106 * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values. 4107 * - Otherwise, we apply the delta to the x/y motion values. 4108 */ 4109 getAxisMotionValue(e) { 4110 const s = `_drag${e.toUpperCase()}`, r = this.visualElement.getProps(), n = r[s]; 4111 return n || this.visualElement.getValue(e, (r.initial ? r.initial[e] : void 0) || 0); 4112 } 4113 snapToCursor(e) { 4114 ze((s) => { 4115 const { drag: r } = this.getProps(); 4116 if (!k2(s, r, this.currentDirection)) 4117 return; 4118 const { projection: n } = this.visualElement, o = this.getAxisMotionValue(s); 4119 if (n && n.layout) { 4120 const { min: L, max: d } = n.layout.layoutBox[s]; 4121 o.set(e[s] - se(L, d, 0.5)); 4122 } 4123 }); 4124 } 4125 /** 4126 * When the viewport resizes we want to check if the measured constraints 4127 * have changed and, if so, reposition the element within those new constraints 4128 * relative to where it was before the resize. 4129 */ 4130 scalePositionWithinConstraints() { 4131 if (!this.visualElement.current) 4132 return; 4133 const { drag: e, dragConstraints: s } = this.getProps(), { projection: r } = this.visualElement; 4134 if (!ot(s) || !r || !this.constraints) 4135 return; 4136 this.stopAnimation(); 4137 const n = { x: 0, y: 0 }; 4138 ze((L) => { 4139 const d = this.getAxisMotionValue(L); 4140 if (d && this.constraints !== !1) { 4141 const l = d.get(); 4142 n[L] = N8({ min: l, max: l }, this.constraints[L]); 4143 } 4144 }); 4145 const { transformTemplate: o } = this.visualElement.getProps(); 4146 this.visualElement.current.style.transform = o ? o({}, "") : "none", r.root && r.root.updateScroll(), r.updateLayout(), this.resolveConstraints(), ze((L) => { 4147 if (!k2(L, e, null)) 4148 return; 4149 const d = this.getAxisMotionValue(L), { min: l, max: g } = this.constraints[L]; 4150 d.set(se(l, g, n[L])); 4151 }); 4152 } 4153 addListeners() { 4154 if (!this.visualElement.current) 4155 return; 4156 C8.set(this.visualElement, this); 4157 const e = this.visualElement.current, s = Gt(e, "pointerdown", (l) => { 4158 const { drag: g, dragListener: f = !0 } = this.getProps(); 4159 g && f && this.start(l); 4160 }), r = () => { 4161 const { dragConstraints: l } = this.getProps(); 4162 ot(l) && l.current && (this.constraints = this.resolveRefConstraints()); 4163 }, { projection: n } = this.visualElement, o = n.addEventListener("measure", r); 4164 n && !n.layout && (n.root && n.root.updateScroll(), n.updateLayout()), $.read(r); 4165 const L = s2(window, "resize", () => this.scalePositionWithinConstraints()), d = n.addEventListener("didUpdate", (({ delta: l, hasLayoutChanged: g }) => { 4166 this.isDragging && g && (ze((f) => { 4167 const p = this.getAxisMotionValue(f); 4168 p && (this.originPoint[f] += l[f].translate, p.set(p.get() + l[f].translate)); 4169 }), this.visualElement.render()); 4170 })); 4171 return () => { 4172 L(), s(), o(), d && d(); 4173 }; 4174 } 4175 getProps() { 4176 const e = this.visualElement.getProps(), { drag: s = !1, dragDirectionLock: r = !1, dragPropagation: n = !1, dragConstraints: o = !1, dragElastic: L = W4, dragMomentum: d = !0 } = e; 4177 return { 4178 ...e, 4179 drag: s, 4180 dragDirectionLock: r, 4181 dragPropagation: n, 4182 dragConstraints: o, 4183 dragElastic: L, 4184 dragMomentum: d 4185 }; 4186 } 4187} 4188function k2(t, e, s) { 4189 return (e === !0 || e === t) && (s === null || s === t); 4190} 4191function E8(t, e = 10) { 4192 let s = null; 4193 return Math.abs(t.y) > e ? s = "y" : Math.abs(t.x) > e && (s = "x"), s; 4194} 4195class R8 extends B1 { 4196 constructor(e) { 4197 super(e), this.removeGroupControls = Ne, this.removeListeners = Ne, this.controls = new F8(e); 4198 } 4199 mount() { 4200 const { dragControls: e } = this.node.getProps(); 4201 e && (this.removeGroupControls = e.subscribe(this.controls)), this.removeListeners = this.controls.addListeners() || Ne; 4202 } 4203 unmount() { 4204 this.removeGroupControls(), this.removeListeners(); 4205 } 4206} 4207const ra = (t) => (e, s) => { 4208 t && $.postRender(() => t(e, s)); 4209}; 4210class D8 extends B1 { 4211 constructor() { 4212 super(...arguments), this.removePointerDownListener = Ne; 4213 } 4214 onPointerDown(e) { 4215 this.session = new y7(e, this.createPanHandlers(), { 4216 transformPagePoint: this.node.getTransformPagePoint(), 4217 contextWindow: v7(this.node) 4218 }); 4219 } 4220 createPanHandlers() { 4221 const { onPanSessionStart: e, onPanStart: s, onPan: r, onPanEnd: n } = this.node.getProps(); 4222 return { 4223 onSessionStart: ra(e), 4224 onStart: ra(s), 4225 onMove: r, 4226 onEnd: (o, L) => { 4227 delete this.session, n && $.postRender(() => n(o, L)); 4228 } 4229 }; 4230 } 4231 mount() { 4232 this.removePointerDownListener = Gt(this.node.current, "pointerdown", (e) => this.onPointerDown(e)); 4233 } 4234 update() { 4235 this.session && this.session.updateHandlers(this.createPanHandlers()); 4236 } 4237 unmount() { 4238 this.removePointerDownListener(), this.session && this.session.end(); 4239 } 4240} 4241const e3 = { 4242 /** 4243 * Global flag as to whether the tree has animated since the last time 4244 * we resized the window 4245 */ 4246 hasAnimatedSinceResize: !0, 4247 /** 4248 * We set this to true once, on the first update. Any nodes added to the tree beyond that 4249 * update will be given a `data-projection-id` attribute. 4250 */ 4251 hasEverUpdated: !1 4252}; 4253function na(t, e) { 4254 return e.max === e.min ? 0 : t / (e.max - e.min) * 100; 4255} 4256const Et = { 4257 correct: (t, e) => { 4258 if (!e.target) 4259 return t; 4260 if (typeof t == "string") 4261 if (R.test(t)) 4262 t = parseFloat(t); 4263 else 4264 return t; 4265 const s = na(t, e.target.x), r = na(t, e.target.y); 4266 return `${s}% ${r}%`; 4267 } 4268}, z8 = { 4269 correct: (t, { treeScale: e, projectionDelta: s }) => { 4270 const r = t, n = v1.parse(t); 4271 if (n.length > 5) 4272 return r; 4273 const o = v1.createTransformer(t), L = typeof n[0] != "number" ? 1 : 0, d = s.x.scale * e.x, l = s.y.scale * e.y; 4274 n[0 + L] /= d, n[1 + L] /= l; 4275 const g = se(d, l, 0.5); 4276 return typeof n[2 + L] == "number" && (n[2 + L] /= g), typeof n[3 + L] == "number" && (n[3 + L] /= g), o(n); 4277 } 4278}; 4279let i4 = !1; 4280class j8 extends g5 { 4281 /** 4282 * This only mounts projection nodes for components that
vendor: 4,105 bytes, lines 4283-4395
4283 * need measuring, we might want to do it for all components 4284 * in order to incorporate transforms 4285 */ 4286 componentDidMount() { 4287 const { visualElement: e, layoutGroup: s, switchLayoutGroup: r, layoutId: n } = this.props, { projection: o } = e; 4288 no(O8), o && (s.group && s.group.add(o), r && r.register && n && r.register(o), i4 && o.root.didUpdate(), o.addEventListener("animationComplete", () => { 4289 this.safeToRemove(); 4290 }), o.setOptions({ 4291 ...o.options, 4292 onExitComplete: () => this.safeToRemove() 4293 })), e3.hasEverUpdated = !0; 4294 } 4295 getSnapshotBeforeUpdate(e) { 4296 const { layoutDependency: s, visualElement: r, drag: n, isPresent: o } = this.props, { projection: L } = r; 4297 return L && (L.isPresent = o, i4 = !0, n || e.layoutDependency !== s || s === void 0 || e.isPresent !== o ? L.willUpdate() : this.safeToRemove(), e.isPresent !== o && (o ? L.promote() : L.relegate() || $.postRender(() => { 4298 const d = L.getStack(); 4299 (!d || !d.members.length) && this.safeToRemove(); 4300 }))), null; 4301 } 4302 componentDidUpdate() { 4303 const { projection: e } = this.props.visualElement; 4304 e && (e.root.didUpdate(), z5.postRender(() => { 4305 !e.currentAnimation && e.isLead() && this.safeToRemove(); 4306 })); 4307 } 4308 componentWillUnmount() { 4309 const { visualElement: e, layoutGroup: s, switchLayoutGroup: r } = this.props, { projection: n } = e; 4310 i4 = !0, n && (n.scheduleCheckAfterUnmount(), s && s.group && s.group.remove(n), r && r.deregister && r.deregister(n)); 4311 } 4312 safeToRemove() { 4313 const { safeToRemove: e } = this.props; 4314 e && e(); 4315 } 4316 render() { 4317 return null; 4318 } 4319} 4320function T7(t) { 4321 const [e, s] = Us(), r = oe(M5); 4322 return i(j8, { ...t, layoutGroup: r, switchLayoutGroup: oe(r7), isPresent: e, safeToRemove: s }); 4323} 4324const O8 = { 4325 borderRadius: { 4326 ...Et, 4327 applyTo: [ 4328 "borderTopLeftRadius", 4329 "borderTopRightRadius", 4330 "borderBottomLeftRadius", 4331 "borderBottomRightRadius" 4332 ] 4333 }, 4334 borderTopLeftRadius: Et, 4335 borderTopRightRadius: Et, 4336 borderBottomLeftRadius: Et, 4337 borderBottomRightRadius: Et, 4338 boxShadow: z8 4339}; 4340function V8(t, e, s) { 4341 const r = xe(t) ? t : Ue(t); 4342 return r.start(J5("", r, e, s)), r.animation; 4343} 4344const H8 = (t, e) => t.depth - e.depth; 4345class Z8 { 4346 constructor() { 4347 this.children = [], this.isDirty = !1; 4348 } 4349 add(e) { 4350 h5(this.children, e), this.isDirty = !0; 4351 } 4352 remove(e) { 4353 m5(this.children, e), this.isDirty = !0; 4354 } 4355 forEach(e) { 4356 this.isDirty && this.children.sort(H8), this.isDirty = !1, this.children.forEach(e); 4357 } 4358} 4359function W8(t, e) { 4360 const s = Ae.now(), r = ({ timestamp: n }) => { 4361 const o = n - s; 4362 o >= e && (Je(r), t(o - e)); 4363 }; 4364 return $.setup(r, !0), () => Je(r); 4365} 4366const S7 = ["TopLeft", "TopRight", "BottomLeft", "BottomRight"], $8 = S7.length, oa = (t) => typeof t == "string" ? parseFloat(t) : t, La = (t) => typeof t == "number" || R.test(t); 4367function q8(t, e, s, r, n, o) { 4368 n ? (t.opacity = se(0, s.opacity ?? 1, U8(r)), t.opacityExit = se(e.opacity ?? 1, 0, G8(r))) : o && (t.opacity = se(e.opacity ?? 1, s.opacity ?? 1, r)); 4369 for (let L = 0; L < $8; L++) { 4370 const d = `border${S7[L]}Radius`; 4371 let l = ca(e, d), g = ca(s, d); 4372 if (l === void 0 && g === void 0) 4373 continue; 4374 l || (l = 0), g || (g = 0), l === 0 || g === 0 || La(l) === La(g) ? (t[d] = Math.max(se(oa(l), oa(g), r), 0), (a1.test(g) || a1.test(l)) && (t[d] += "%")) : t[d] = g; 4375 } 4376 (e.rotate || s.rotate) && (t.rotate = se(e.rotate || 0, s.rotate || 0, r)); 4377} 4378function ca(t, e) { 4379 return t[e] !== void 0 ? t[e] : t.borderRadius; 4380} 4381const U8 = /* @__PURE__ */ B7(0, 0.5, ds), G8 = /* @__PURE__ */ B7(0.5, 0.95, Ne); 4382function B7(t, e, s) { 4383 return (r) => r < t ? 0 : r > e ? 1 : s(/* @__PURE__ */ vt(t, e, r)); 4384} 4385function la(t, e) { 4386 t.min = e.min, t.max = e.max; 4387} 4388function Re(t, e) { 4389 la(t.x, e.x), la(t.y, e.y); 4390} 4391function da(t, e) { 4392 t.translate = e.translate, t.scale = e.scale, t.originPoint = e.originPoint, t.origin = e.origin; 4393} 4394function ga(t, e, s, r, n) { 4395 return t -= e, t = c3(t, 1 / s, r), n !== void 0 && (t = c3(t, 1 / n, r)), t;
vendor: 5,188 bytes, lines 4396-4523
4396} 4397function J8(t, e = 0, s = 1, r = 0.5, n, o = t, L = t) { 4398 if (a1.test(e) && (e = parseFloat(e), e = se(L.min, L.max, e / 100) - L.min), typeof e != "number") 4399 return; 4400 let d = se(o.min, o.max, r); 4401 t === o && (d -= e), t.min = ga(t.min, e, s, d, n), t.max = ga(t.max, e, s, d, n); 4402} 4403function fa(t, e, [s, r, n], o, L) { 4404 J8(t, e[s], e[r], e[n], e.scale, o, L); 4405} 4406const K8 = ["x", "scaleX", "originX"], Y8 = ["y", "scaleY", "originY"]; 4407function pa(t, e, s, r) { 4408 fa(t.x, e, K8, s ? s.x : void 0, r ? r.x : void 0), fa(t.y, e, Y8, s ? s.y : void 0, r ? r.y : void 0); 4409} 4410function Ma(t) { 4411 return t.translate === 0 && t.scale === 1; 4412} 4413function k7(t) { 4414 return Ma(t.x) && Ma(t.y); 4415} 4416function ua(t, e) { 4417 return t.min === e.min && t.max === e.max; 4418} 4419function X8(t, e) { 4420 return ua(t.x, e.x) && ua(t.y, e.y); 4421} 4422function ha(t, e) { 4423 return Math.round(t.min) === Math.round(e.min) && Math.round(t.max) === Math.round(e.max); 4424} 4425function A7(t, e) { 4426 return ha(t.x, e.x) && ha(t.y, e.y); 4427} 4428function ma(t) { 4429 return we(t.x) / we(t.y); 4430} 4431function xa(t, e) { 4432 return t.translate === e.translate && t.scale === e.scale && t.originPoint === e.originPoint; 4433} 4434class Q8 { 4435 constructor() { 4436 this.members = []; 4437 } 4438 add(e) { 4439 h5(this.members, e), e.scheduleRender(); 4440 } 4441 remove(e) { 4442 if (m5(this.members, e), e === this.prevLead && (this.prevLead = void 0), e === this.lead) { 4443 const s = this.members[this.members.length - 1]; 4444 s && this.promote(s); 4445 } 4446 } 4447 relegate(e) { 4448 const s = this.members.findIndex((n) => e === n); 4449 if (s === 0) 4450 return !1; 4451 let r; 4452 for (let n = s; n >= 0; n--) { 4453 const o = this.members[n]; 4454 if (o.isPresent !== !1) { 4455 r = o; 4456 break; 4457 } 4458 } 4459 return r ? (this.promote(r), !0) : !1; 4460 } 4461 promote(e, s) { 4462 const r = this.lead; 4463 if (e !== r && (this.prevLead = r, this.lead = e, e.show(), r)) { 4464 r.instance && r.scheduleRender(), e.scheduleRender(), e.resumeFrom = r, s && (e.resumeFrom.preserveOpacity = !0), r.snapshot && (e.snapshot = r.snapshot, e.snapshot.latestValues = r.animationValues || r.latestValues), e.root && e.root.isUpdating && (e.isLayoutDirty = !0); 4465 const { crossfade: n } = e.options; 4466 n === !1 && r.hide(); 4467 } 4468 } 4469 exitAnimationComplete() { 4470 this.members.forEach((e) => { 4471 const { options: s, resumingFrom: r } = e; 4472 s.onExitComplete && s.onExitComplete(), r && r.options.onExitComplete && r.options.onExitComplete(); 4473 }); 4474 } 4475 scheduleRender() { 4476 this.members.forEach((e) => { 4477 e.instance && e.scheduleRender(!1); 4478 }); 4479 } 4480 /** 4481 * Clear any leads that have been removed this render to prevent them from being 4482 * used in future animations and to prevent memory leaks 4483 */ 4484 removeLeadSnapshot() { 4485 this.lead && this.lead.snapshot && (this.lead.snapshot = void 0); 4486 } 4487} 4488function eL(t, e, s) { 4489 let r = ""; 4490 const n = t.x.translate / e.x, o = t.y.translate / e.y, L = s?.z || 0; 4491 if ((n || o || L) && (r = `translate3d(${n}px, ${o}px, ${L}px) `), (e.x !== 1 || e.y !== 1) && (r += `scale(${1 / e.x}, ${1 / e.y}) `), s) { 4492 const { transformPerspective: g, rotate: f, rotateX: p, rotateY: M, skewX: u, skewY: h } = s; 4493 g && (r = `perspective(${g}px) ${r}`), f && (r += `rotate(${f}deg) `), p && (r += `rotateX(${p}deg) `), M && (r += `rotateY(${M}deg) `), u && (r += `skewX(${u}deg) `), h && (r += `skewY(${h}deg) `); 4494 } 4495 const d = t.x.scale * e.x, l = t.y.scale * e.y; 4496 return (d !== 1 || l !== 1) && (r += `scale(${d}, ${l})`), r || "none"; 4497} 4498const r4 = ["", "X", "Y", "Z"], tL = 1e3; 4499let aL = 0; 4500function n4(t, e, s, r) { 4501 const { latestValues: n } = e; 4502 n[t] && (s[t] = n[t], e.setStaticValue(t, 0), r && (r[t] = 0)); 4503} 4504function N7(t) { 4505 if (t.hasCheckedOptimisedAppear = !0, t.root === t) 4506 return; 4507 const { visualElement: e } = t.options; 4508 if (!e) 4509 return; 4510 const s = M7(e); 4511 if (window.MotionHasOptimisedAnimation(s, "transform")) { 4512 const { layout: n, layoutId: o } = t.options; 4513 window.MotionCancelOptimisedAnimation(s, "transform", $, !(n || o)); 4514 } 4515 const { parent: r } = t; 4516 r && !r.hasCheckedOptimisedAppear && N7(r); 4517} 4518function I7({ attachResizeListener: t, defaultParent: e, measureScroll: s, checkIsScrollRoot: r, resetTransform: n }) { 4519 return class { 4520 constructor(L = {}, d = e?.()) { 4521 this.id = aL++, this.animationId = 0, this.animationCommitId = 0, this.children = /* @__PURE__ */ new Set(), this.options = {}, this.isTreeAnimating = !1, this.isAnimationBlocked = !1, this.isLayoutDirty = !1, this.isProjectionDirty = !1, this.isSharedProjectionDirty = !1, this.isTransformDirty = !1, this.updateManuallyBlocked = !1, this.updateBlockedByResize = !1, this.isUpdating = !1, this.isSVG = !1, this.needsReset = !1, this.shouldResetTransform = !1, this.hasCheckedOptimisedAppear = !1, this.treeScale = { x: 1, y: 1 }, this.eventHandlers = /* @__PURE__ */ new Map(), this.hasTreeAnimated = !1, this.updateScheduled = !1, this.scheduleUpdate = () => this.update(), this.projectionUpdateScheduled = !1, this.checkUpdateFailed = () => { 4522 this.isUpdating && (this.isUpdating = !1, this.clearAllSnapshots()); 4523 }, this.updateProjection = () => {
vendor: 4,285 bytes, lines 4524-4608
4524 this.projectionUpdateScheduled = !1, this.nodes.forEach(rL), this.nodes.forEach(cL), this.nodes.forEach(lL), this.nodes.forEach(nL); 4525 }, this.resolvedRelativeTargetAt = 0, this.hasProjected = !1, this.isVisible = !0, this.animationProgress = 0, this.sharedNodes = /* @__PURE__ */ new Map(), this.latestValues = L, this.root = d ? d.root || d : this, this.path = d ? [...d.path, d] : [], this.parent = d, this.depth = d ? d.depth + 1 : 0; 4526 for (let l = 0; l < this.path.length; l++) 4527 this.path[l].shouldResetTransform = !0; 4528 this.root === this && (this.nodes = new Z8()); 4529 } 4530 addEventListener(L, d) { 4531 return this.eventHandlers.has(L) || this.eventHandlers.set(L, new _5()), this.eventHandlers.get(L).add(d); 4532 } 4533 notifyListeners(L, ...d) { 4534 const l = this.eventHandlers.get(L); 4535 l && l.notify(...d); 4536 } 4537 hasListeners(L) { 4538 return this.eventHandlers.has(L); 4539 } 4540 /** 4541 * Lifecycles 4542 */ 4543 mount(L) { 4544 if (this.instance) 4545 return; 4546 this.isSVG = O5(L) && !Zn(L), this.instance = L; 4547 const { layoutId: d, layout: l, visualElement: g } = this.options; 4548 if (g && !g.current && g.mount(L), this.root.nodes.add(this), this.parent && this.parent.children.add(this), this.root.hasTreeAnimated && (l || d) && (this.isLayoutDirty = !0), t) { 4549 let f, p = 0; 4550 const M = () => this.root.updateBlockedByResize = !1; 4551 $.read(() => { 4552 p = window.innerWidth; 4553 }), t(L, () => { 4554 const u = window.innerWidth; 4555 u !== p && (p = u, this.root.updateBlockedByResize = !0, f && f(), f = W8(M, 250), e3.hasAnimatedSinceResize && (e3.hasAnimatedSinceResize = !1, this.nodes.forEach(va))); 4556 }); 4557 } 4558 d && this.root.registerSharedNode(d, this), this.options.animate !== !1 && g && (d || l) && this.addEventListener("didUpdate", ({ delta: f, hasLayoutChanged: p, hasRelativeLayoutChanged: M, layout: u }) => { 4559 if (this.isTreeAnimationBlocked()) { 4560 this.target = void 0, this.relativeTarget = void 0; 4561 return; 4562 } 4563 const h = this.options.transition || g.getDefaultTransition() || ML, { onLayoutAnimationStart: x, onLayoutAnimationComplete: _ } = g.getProps(), v = !this.targetLayout || !A7(this.targetLayout, u), y = !p && M; 4564 if (this.options.layoutRoot || this.resumeFrom || y || p && (v || !this.currentAnimation)) { 4565 this.resumeFrom && (this.resumingFrom = this.resumeFrom, this.resumingFrom.resumingFrom = void 0); 4566 const b = { 4567 ...F5(h, "layout"), 4568 onPlay: x, 4569 onComplete: _ 4570 }; 4571 (g.shouldReduceMotion || this.options.layoutRoot) && (b.delay = 0, b.type = !1), this.startAnimation(b), this.setAnimationOrigin(f, y); 4572 } else 4573 p || va(this), this.isLead() && this.options.onExitComplete && this.options.onExitComplete(); 4574 this.targetLayout = u; 4575 }); 4576 } 4577 unmount() { 4578 this.options.layoutId && this.willUpdate(), this.root.nodes.remove(this); 4579 const L = this.getStack(); 4580 L && L.remove(this), this.parent && this.parent.children.delete(this), this.instance = void 0, this.eventHandlers.clear(), Je(this.updateProjection); 4581 } 4582 // only on the root 4583 blockUpdate() { 4584 this.updateManuallyBlocked = !0; 4585 } 4586 unblockUpdate() { 4587 this.updateManuallyBlocked = !1; 4588 } 4589 isUpdateBlocked() { 4590 return this.updateManuallyBlocked || this.updateBlockedByResize; 4591 } 4592 isTreeAnimationBlocked() { 4593 return this.isAnimationBlocked || this.parent && this.parent.isTreeAnimationBlocked() || !1; 4594 } 4595 // Note: currently only running on root node 4596 startUpdate() { 4597 this.isUpdateBlocked() || (this.isUpdating = !0, this.nodes && this.nodes.forEach(dL), this.animationId++); 4598 } 4599 getTransformTemplate() { 4600 const { visualElement: L } = this.options; 4601 return L && L.getProps().transformTemplate; 4602 } 4603 willUpdate(L = !0) { 4604 if (this.root.hasTreeAnimated = !0, this.root.isUpdateBlocked()) { 4605 this.options.onExitComplete && this.options.onExitComplete(); 4606 return; 4607 } 4608 if (window.MotionCancelOptimisedAnimation && !this.hasCheckedOptimisedAppear && N7(this), !this.root.isUpdating && this.root.startUpd
4608ate(), this.isLayoutDirty) 4609 return; 4610 this.isLayoutDirty = !0; 4611 for (let f = 0; f < this.path.length; f++) { 4612 const p = this.path[f]; 4613 p.shouldResetTransform = !0, p.updateScroll("snapshot"), p.options.layoutRoot && p.willUpdate(!1); 4614 } 4615 const { layoutId: d, layout: l } = this.options; 4616 if (d === void 0 && !l) 4617 return; 4618 const g = this.getTransformTemplate(); 4619 this.prevTransformTemplateValue = g ? g(this.latestValues, "") : void 0, this.updateSnapshot(), L && this.notifyListeners("willUpdate"); 4620 } 4621 update() { 4622 if (this.updateScheduled = !1, this.isUpdateBlocked()) { 4623 this.unblockUpdate(), this.clearAllSnapshots(), this.nodes.forEach(_a); 4624 return; 4625 } 4626 if (this.animationId <= this.animationCommitId) { 4627 this.nodes.forEach(ba); 4628 return; 4629 } 4630 this.animationCommitId = this.animationId, this.isUpdating ? (this.isUpdating = !1, this.nodes.forEach(LL), this.nodes.forEach(sL), this.nodes.forEach(iL)) : this.nodes.forEach(ba), this.clearAllSnapshots(); 4631 const d = Ae.now(); 4632 me.delta = i1(0, 1e3 / 60, d - me.timestamp), me.timestamp = d, me.isProcessing = !0, G3.update.process(me), G3.preRender.process(me), G3.render.process(me), me.isProcessing = !1; 4633 } 4634 didUpdate() { 4635 this.updateScheduled || (this.updateScheduled = !0, z5.read(this.scheduleUpdate)); 4636 } 4637 clearAllSnapshots() { 4638 this.nodes.forEach(oL), this.sharedNodes.forEach(gL); 4639 } 4640 scheduleUpdateProjection() { 4641 this.projectionUpdateScheduled || (this.projectionUpdateScheduled = !0, $.preRender(this.updateProjection, !1, !0)); 4642 } 4643 scheduleCheckAfterUnmount() { 4644 $.postRender(() => { 4645 this.isLayoutDirty ? this.root.didUpdate() : this.root.checkUpdateFailed(); 4646 }); 4647 } 4648 /** 4649 * Update measurements 4650 */ 4651 updateSnapshot() { 4652 this.snapshot || !this.instance || (this.snapshot = this.measure(), this.snapshot && !we(this.snapshot.measuredBox.x) && !we(this.snapshot.measuredBox.y) && (this.snapshot = void 0)); 4653 } 4654 updateLayout() { 4655 if (!this.instance || (this.updateScroll(), !(this.options.alwaysMeasureLayout && this.isLead()) && !this.isLayoutDirty)) 4656 return; 4657 if (this.resumeFrom && !this.resumeFrom.instance) 4658 for (let l = 0; l < this.path.length; l++) 4659 this.path[l].updateScroll(); 4660 const L = this.layout; 4661 this.layout = this.measure(!1), this.layoutCorrected = ce(), this.isLayoutDirty = !1, this.projectionDelta = void 0, this.notifyListeners("measure", this.layout.layoutBox); 4662 const { visualElement: d } = this.options; 4663 d && d.notify("LayoutMeasure", this.layout.layoutBox, L ? L.layoutBox : void 0); 4664 } 4665 updateScroll(L = "measure") { 4666 let d = !!(this.options.layoutScroll && this.instance); 4667 if (this.scroll && this.scroll.animationId === this.root.animationId && this.scroll.phase === L && (d = !1), d && this.instance) { 4668 const l = r(this.instance); 4669 this.scroll = { 4670 animationId: this.root.animationId, 4671 phase: L, 4672 isRoot: l, 4673 offset: s(this.instance), 4674 wasRoot: this.scroll ? this.scroll.isRoot : l 4675 }; 4676 } 4677 } 4678 resetTransform() { 4679 if (!n) 4680 return; 4681 const L = this.isLayoutDirty || this.shouldResetTransform || this.options.alwaysMeasureLayout, d = this.projectionDelta && !k7(this.projectionDelta), l = this.getTransformTemplate(), g = l ? l(this.latestValues, "") : void 0, f = g !== this.prevTransformTemplateValue; 4682 L && this.instance && (d || C1(this.latestValues) || f) && (n(this.instance, g), this.shouldResetTransform = !1, this.scheduleRender()); 4683 } 4684 measure(L = !0) { 4685 const d = this.measurePageBox(); 4686 let l = this.removeElementScroll(d); 4687 return L && (l = this.removeTransform(l)), uL(l), { 4688 animationId: this.root.animationId, 4689 measuredBox: d, 4690 layoutBox: l, 4691 latestValues: {}, 4692 source: this.id 4693 }; 4694 } 4695 measurePageBox() { 4696 const { visualElement: L } = this.options; 4697 if (!L) 4698 return ce(); 4699 const d = L.measureViewportBox(); 4700 if (!(this.scroll?.wasRoot || this.path.some(hL))) { 4701 const { scroll: g } = this.root; 4702 g && (Lt(d.x, g.offset.x), Lt(d.y, g.offset.y)); 4703 } 4704 return d; 4705 } 4706 removeElementScroll(L) { 4707 const d = ce(); 4708 if (Re(d, L), this.scroll?.wasRoot) 4709 return d; 4710 for (let l = 0; l < this.path.length; l++) { 4711 const g = this.path[l], { scroll: f, options: p } = g; 4712 g !== this.root && f && p.layoutScroll && (f.wasRoot && Re(d, L), Lt(d.x, f.offset.x), Lt(d.y, f.offset.y)); 4713 } 4714 return d; 4715 } 4716 applyTransform(L, d = !1) { 4717 const l = ce(); 4718 Re(l, L); 4719 for (let g = 0; g < this.path.length; g++) { 4720 const f = this.path[g]; 4721 !d && f.options.layoutScroll && f.scroll && f !== f.root && ct(l, { 4722 x: -f.scroll.offset.x, 4723 y: -f.scroll.offset.y 4724 }), C1(f.latestValues) && ct(l, f.latestValues); 4725 } 4726 return C1(this.latestValues) && ct(l, this.latestValues), l; 4727 } 4728 removeTransform(L) { 4729 const d = ce(); 4730 Re(d, L); 4731 for (let l = 0; l < this.path.length; l++) { 4732 const g = this.path[l]; 4733 if (!g.instance || !C1(g.latestValues)) 4734 continue; 4735 z4(g.latestValues) && g.updateSnapshot(); 4736 const f = ce(), p = g.measurePageBox(); 4737 Re(f, p), pa(d, g.latestValues, g.snapshot ? g.snapshot.layoutBox : void 0, f); 4738 } 4739 return C1(this.latestValues) && pa(d, this.latestValues), d; 4740 } 4741 setTargetDelta(L) { 4742 this.targetDelta = L, this.root.scheduleUpdateProjection(), this.isProjectionDirty = !0; 4743 } 4744 setOptions(L) { 4745 this.options = { 4746 ...this.options, 4747 ...L, 4748 crossfade: L.crossfade !== void 0 ? L.crossfade : !0 4749 }; 4750 } 4751 clearMeasurements() { 4752 this.scroll = void 0, this.layout = void 0, this.snapshot = void 0, this.prevTransformTemplateValue = void 0, this.targetDelta = void 0, this.target = void 0, this.isLayoutDirty = !1; 4753 } 4754 forceRelativeParentToResolveTarget() { 4755 this.relativeParent && this.relativeParent.resolvedRelativeTargetAt !== me.timestamp && this.relativeParent.resolveTargetDelta(!0); 4756 } 4757 resolveTargetDelta(L = !1) { 4758 const d = this.getLead(); 4759 this.isProjectionDirty || (this.isProjectionDirty = d.isProjectionDirty), this.isTransformDirty || (this.isTransformDirty = d.isTransformDirty), this.isSharedProjectionDirty || (this.isSharedProjectionDirty = d.isS
vendor: 4,285 bytes, lines 4759-4808
4759haredProjectionDirty); 4760 const l = !!this.resumingFrom || this !== d; 4761 if (!(L || l && this.isSharedProjectionDirty || this.isProjectionDirty || this.parent?.isProjectionDirty || this.attemptToResolveRelativeTarget || this.root.updateBlockedByResize)) 4762 return; 4763 const { layout: f, layoutId: p } = this.options; 4764 if (!(!this.layout || !(f || p))) { 4765 if (this.resolvedRelativeTargetAt = me.timestamp, !this.targetDelta && !this.relativeTarget) { 4766 const M = this.getClosestProjectingParent(); 4767 M && M.layout && this.animationProgress !== 1 ? (this.relativeParent = M, this.forceRelativeParentToResolveTarget(), this.relativeTarget = ce(), this.relativeTargetOrigin = ce(), Kt(this.relativeTargetOrigin, this.layout.layoutBox, M.layout.layoutBox), Re(this.relativeTarget, this.relativeTargetOrigin)) : this.relativeParent = this.relativeTarget = void 0; 4768 } 4769 if (!(!this.relativeTarget && !this.targetDelta) && (this.target || (this.target = ce(), this.targetWithTransforms = ce()), this.relativeTarget && this.relativeTargetOrigin && this.relativeParent && this.relativeParent.target ? (this.forceRelativeParentToResolveTarget(), y8(this.target, this.relativeTarget, this.relativeParent.target)) : this.targetDelta ? (this.resumingFrom ? this.target = this.applyTransform(this.layout.layoutBox) : Re(this.target, this.layout.layoutBox), c7(this.target, this.targetDelta)) : Re(this.target, this.layout.layoutBox), this.attemptToResolveRelativeTarget)) { 4770 this.attemptToResolveRelativeTarget = !1; 4771 const M = this.getClosestProjectingParent(); 4772 M && !!M.resumingFrom == !!this.resumingFrom && !M.options.layoutScroll && M.target && this.animationProgress !== 1 ? (this.relativeParent = M, this.forceRelativeParentToResolveTarget(), this.relativeTarget = ce(), this.relativeTargetOrigin = ce(), Kt(this.relativeTargetOrigin, this.target, M.target), Re(this.relativeTarget, this.relativeTargetOrigin)) : this.relativeParent = this.relativeTarget = void 0; 4773 } 4774 } 4775 } 4776 getClosestProjectingParent() { 4777 if (!(!this.parent || z4(this.parent.latestValues) || L7(this.parent.latestValues))) 4778 return this.parent.isProjecting() ? this.parent : this.parent.getClosestProjectingParent(); 4779 } 4780 isProjecting() { 4781 return !!((this.relativeTarget || this.targetDelta || this.options.layoutRoot) && this.layout); 4782 } 4783 calcProjection() { 4784 const L = this.getLead(), d = !!this.resumingFrom || this !== L; 4785 let l = !0; 4786 if ((this.isProjectionDirty || this.parent?.isProjectionDirty) && (l = !1), d && (this.isSharedProjectionDirty || this.isTransformDirty) && (l = !1), this.resolvedRelativeTargetAt === me.timestamp && (l = !1), l) 4787 return; 4788 const { layout: g, layoutId: f } = this.options; 4789 if (this.isTreeAnimating = !!(this.parent && this.parent.isTreeAnimating || this.currentAnimation || this.pendingAnimation), this.isTreeAnimating || (this.targetDelta = this.relativeTarget = void 0), !this.layout || !(g || f)) 4790 return; 4791 Re(this.layoutCorrected, this.layout.layoutBox); 4792 const p = this.treeScale.x, M = this.treeScale.y; 4793 Eo(this.layoutCorrected, this.treeScale, this.path, d), L.layout && !L.target && (this.treeScale.x !== 1 || this.treeScale.y !== 1) && (L.target = L.layout.layoutBox, L.targetWithTransforms = ce()); 4794 const { target: u } = L; 4795 if (!u) { 4796 this.prevProjectionDelta && (this.createProjectionDeltas(), this.scheduleRender()); 4797 return; 4798 } 4799 !this.projectionDelta || !this.prevProjectionDelta ? this.createProjectionDeltas() : (da(this.prevProjectionDelta.x, this.projectionDelta.x), da(this.prevProjectionDelta.y, this.projectionDelta.y)), Jt(this.projectionDelta, this.layoutCorrected, u, this.latestValues), (this.treeScale.x !== p || this.treeScale.y !== M || !xa(this.projectionDelta.x, this.prevProjectionDelta.x) || !xa(this.projectionDelta.y, this.prevProjectionDelta.y)) && (this.hasProjected = !0, this.scheduleRender(), this.notifyListeners("projectionUpdate", u)); 4800 } 4801 hide() { 4802 this.isVisible = !1; 4803 } 4804 show() { 4805 this.isVisible = !0; 4806 } 4807 scheduleRender(L = !0) { 4808 if (this.options.visualElement?.scheduleRender(), L) {
vendor: 10,323 bytes, lines 4809-5037
4809 const d = this.getStack(); 4810 d && d.scheduleRender(); 4811 } 4812 this.resumingFrom && !this.resumingFrom.instance && (this.resumingFrom = void 0); 4813 } 4814 createProjectionDeltas() { 4815 this.prevProjectionDelta = lt(), this.projectionDelta = lt(), this.projectionDeltaWithTransform = lt(); 4816 } 4817 setAnimationOrigin(L, d = !1) { 4818 const l = this.snapshot, g = l ? l.latestValues : {}, f = { ...this.latestValues }, p = lt(); 4819 (!this.relativeParent || !this.relativeParent.options.layoutRoot) && (this.relativeTarget = this.relativeTargetOrigin = void 0), this.attemptToResolveRelativeTarget = !d; 4820 const M = ce(), u = l ? l.source : void 0, h = this.layout ? this.layout.source : void 0, x = u !== h, _ = this.getStack(), v = !_ || _.members.length <= 1, y = !!(x && !v && this.options.crossfade === !0 && !this.path.some(pL)); 4821 this.animationProgress = 0; 4822 let b; 4823 this.mixTargetDelta = (S) => { 4824 const k = S / 1e3; 4825 ya(p.x, L.x, k), ya(p.y, L.y, k), this.setTargetDelta(p), this.relativeTarget && this.relativeTargetOrigin && this.layout && this.relativeParent && this.relativeParent.layout && (Kt(M, this.layout.layoutBox, this.relativeParent.layout.layoutBox), fL(this.relativeTarget, this.relativeTargetOrigin, M, k), b && X8(this.relativeTarget, b) && (this.isProjectionDirty = !1), b || (b = ce()), Re(b, this.relativeTarget)), x && (this.animationValues = f, q8(f, g, this.latestValues, k, y, v)), this.root.scheduleUpdateProjection(), this.scheduleRender(), this.animationProgress = k; 4826 }, this.mixTargetDelta(this.options.layoutRoot ? 1e3 : 0); 4827 } 4828 startAnimation(L) { 4829 this.notifyListeners("animationStart"), this.currentAnimation?.stop(), this.resumingFrom?.currentAnimation?.stop(), this.pendingAnimation && (Je(this.pendingAnimation), this.pendingAnimation = void 0), this.pendingAnimation = $.update(() => { 4830 e3.hasAnimatedSinceResize = !0, this.motionValue || (this.motionValue = Ue(0)), this.currentAnimation = V8(this.motionValue, [0, 1e3], { 4831 ...L, 4832 velocity: 0, 4833 isSync: !0, 4834 onUpdate: (d) => { 4835 this.mixTargetDelta(d), L.onUpdate && L.onUpdate(d); 4836 }, 4837 onStop: () => { 4838 }, 4839 onComplete: () => { 4840 L.onComplete && L.onComplete(), this.completeAnimation(); 4841 } 4842 }), this.resumingFrom && (this.resumingFrom.currentAnimation = this.currentAnimation), this.pendingAnimation = void 0; 4843 }); 4844 } 4845 completeAnimation() { 4846 this.resumingFrom && (this.resumingFrom.currentAnimation = void 0, this.resumingFrom.preserveOpacity = void 0); 4847 const L = this.getStack(); 4848 L && L.exitAnimationComplete(), this.resumingFrom = this.currentAnimation = this.animationValues = void 0, this.notifyListeners("animationComplete"); 4849 } 4850 finishAnimation() { 4851 this.currentAnimation && (this.mixTargetDelta && this.mixTargetDelta(tL), this.currentAnimation.stop()), this.completeAnimation(); 4852 } 4853 applyTransformsToTarget() { 4854 const L = this.getLead(); 4855 let { targetWithTransforms: d, target: l, layout: g, latestValues: f } = L; 4856 if (!(!d || !l || !g)) { 4857 if (this !== L && this.layout && g && P7(this.options.animationType, this.layout.layoutBox, g.layoutBox)) { 4858 l = this.target || ce(); 4859 const p = we(this.layout.layoutBox.x); 4860 l.x.min = L.target.x.min, l.x.max = l.x.min + p; 4861 const M = we(this.layout.layoutBox.y); 4862 l.y.min = L.target.y.min, l.y.max = l.y.min + M; 4863 } 4864 Re(d, l), ct(d, f), Jt(this.projectionDeltaWithTransform, this.layoutCorrected, d, f); 4865 } 4866 } 4867 registerSharedNode(L, d) { 4868 this.sharedNodes.has(L) || this.sharedNodes.set(L, new Q8()), this.sharedNodes.get(L).add(d); 4869 const g = d.options.initialPromotionConfig; 4870 d.promote({ 4871 transition: g ? g.transition : void 0, 4872 preserveFollowOpacity: g && g.shouldPreserveFollowOpacity ? g.shouldPreserveFollowOpacity(d) : void 0 4873 }); 4874 } 4875 isLead() { 4876 const L = this.getStack(); 4877 return L ? L.lead === this : !0; 4878 } 4879 getLead() { 4880 const { layoutId: L } = this.options; 4881 return L ? this.getStack()?.lead || this : this; 4882 } 4883 getPrevLead() { 4884 const { layoutId: L } = this.options; 4885 return L ? this.getStack()?.prevLead : void 0; 4886 } 4887 getStack() { 4888 const { layoutId: L } = this.options; 4889 if (L) 4890 return this.root.sharedNodes.get(L); 4891 } 4892 promote({ needsReset: L, transition: d, preserveFollowOpacity: l } = {}) { 4893 const g = this.getStack(); 4894 g && g.promote(this, l), L && (this.projectionDelta = void 0, this.needsReset = !0), d && this.setOptions({ transition: d }); 4895 } 4896 relegate() { 4897 const L = this.getStack(); 4898 return L ? L.relegate(this) : !1; 4899 } 4900 resetSkewAndRotation() { 4901 const { visualElement: L } = this.options; 4902 if (!L) 4903 return; 4904 let d = !1; 4905 const { latestValues: l } = L; 4906 if ((l.z || l.rotate || l.rotateX || l.rotateY || l.rotateZ || l.skewX || l.skewY) && (d = !0), !d) 4907 return; 4908 const g = {}; 4909 l.z && n4("z", L, g, this.animationValues); 4910 for (let f = 0; f < r4.length; f++) 4911 n4(`rotate${r4[f]}`, L, g, this.animationValues), n4(`skew${r4[f]}`, L, g, this.animationValues); 4912 L.render(); 4913 for (const f in g) 4914 L.setStaticValue(f, g[f]), this.animationValues && (this.animationValues[f] = g[f]); 4915 L.scheduleRender(); 4916 } 4917 applyProjectionStyles(L, d) { 4918 if (!this.instance || this.isSVG) 4919 return; 4920 if (!this.isVisible) { 4921 L.visibility = "hidden"; 4922 return; 4923 } 4924 const l = this.getTransformTemplate(); 4925 if (this.needsReset) { 4926 this.needsReset = !1, L.visibility = "", L.opacity = "", L.pointerEvents = Q2(d?.pointerEvents) || "", L.transform = l ? l(this.latestValues, "") : "none"; 4927 return; 4928 } 4929 const g = this.getLead(); 4930 if (!this.projectionDelta || !this.layout || !g.target) { 4931 this.options.layoutId && (L.opacity = this.latestValues.opacity !== void 0 ? this.latestValues.opacity : 1, L.pointerEvents = Q2(d?.pointerEvents) || ""), this.hasProjected && !C1(this.latestValues) && (L.transform = l ? l({}, "") : "none", this.hasProjected = !1); 4932 return; 4933 } 4934 L.visibility = ""; 4935 const f = g.animationValues || g.latestValues; 4936 this.applyTransformsToTarget(); 4937 let p = eL(this.projectionDeltaWithTransform, this.treeScale, f); 4938 l && (p = l(f, p)), L.transform = p; 4939 const { x: M, y: u } = this.projectionDelta; 4940 L.transformOrigin = `${M.origin * 100}% ${u.origin * 100}% 0`, g.animationValues ? L.opacity = g === this ? f.opacity ?? this.latestValues.opacity ?? 1 : this.preserveOpacity ? this.latestValues.opacity : f.opacityExit : L.opacity = g === this ? f.opacity !== void 0 ? f.opacity : "" : f.opacityExit !== void 0 ? f.opacityExit : 0; 4941 for (const h in a2) { 4942 if (f[h] === void 0) 4943 continue; 4944 const { correct: x, applyTo: _, isCSSVariable: v } = a2[h], y = p === "none" ? f[h] : x(f[h], g); 4945 if (_) { 4946 const b = _.length; 4947 for (let S = 0; S < b; S++) 4948 L[_[S]] = y; 4949 } else 4950 v ? this.options.visualElement.renderState.vars[h] = y : L[h] = y; 4951 } 4952 this.options.layoutId && (L.pointerEvents = g === this ? Q2(d?.pointerEvents) || "" : "none"); 4953 } 4954 clearSnapshot() { 4955 this.resumeFrom = this.snapshot = void 0; 4956 } 4957 // Only run on root 4958 resetTree() { 4959 this.root.nodes.forEach((L) => L.currentAnimation?.stop()), this.root.nodes.forEach(_a), this.root.sharedNodes.clear(); 4960 } 4961 }; 4962} 4963function sL(t) { 4964 t.updateLayout(); 4965} 4966function iL(t) { 4967 const e = t.resumeFrom?.snapshot || t.snapshot; 4968 if (t.isLead() && t.layout && e && t.hasListeners("didUpdate")) { 4969 const { layoutBox: s, measuredBox: r } = t.layout, { animationType: n } = t.options, o = e.source !== t.layout.source; 4970 n === "size" ? ze((f) => { 4971 const p = o ? e.measuredBox[f] : e.layoutBox[f], M = we(p); 4972 p.min = s[f].min, p.max = p.min + M; 4973 }) : P7(n, e.layoutBox, s) && ze((f) => { 4974 const p = o ? e.measuredBox[f] : e.layoutBox[f], M = we(s[f]); 4975 p.max = p.min + M, t.relativeTarget && !t.currentAnimation && (t.isProjectionDirty = !0, t.relativeTarget[f].max = t.relativeTarget[f].min + M); 4976 }); 4977 const L = lt(); 4978 Jt(L, s, e.layoutBox); 4979 const d = lt(); 4980 o ? Jt(d, t.applyTransform(r, !0), e.measuredBox) : Jt(d, s, e.layoutBox); 4981 const l = !k7(L); 4982 let g = !1; 4983 if (!t.resumeFrom) { 4984 const f = t.getClosestProjectingParent(); 4985 if (f && !f.resumeFrom) { 4986 const { snapshot: p, layout: M } = f; 4987 if (p && M) { 4988 const u = ce(); 4989 Kt(u, e.layoutBox, p.layoutBox); 4990 const h = ce(); 4991 Kt(h, s, M.layoutBox), A7(u, h) || (g = !0), f.options.layoutRoot && (t.relativeTarget = h, t.relativeTargetOrigin = u, t.relativeParent = f); 4992 } 4993 } 4994 } 4995 t.notifyListeners("didUpdate", { 4996 layout: s, 4997 snapshot: e, 4998 delta: d, 4999 layoutDelta: L, 5000 hasLayoutChanged: l, 5001 hasRelativeLayoutChanged: g 5002 }); 5003 } else if (t.isLead()) { 5004 const { onExitComplete: s } = t.options; 5005 s && s(); 5006 } 5007 t.options.transition = void 0; 5008} 5009function rL(t) { 5010 t.parent && (t.isProjecting() || (t.isProjectionDirty = t.parent.isProjectionDirty), t.isSharedProjectionDirty || (t.isSharedProjectionDirty = !!(t.isProjectionDirty || t.parent.isProjectionDirty || t.parent.isSharedProjectionDirty)), t.isTransformDirty || (t.isTransformDirty = t.parent.isTransformDirty)); 5011} 5012function nL(t) { 5013 t.isProjectionDirty = t.isSharedProjectionDirty = t.isTransformDirty = !1; 5014} 5015function oL(t) { 5016 t.clearSnapshot(); 5017} 5018function _a(t) { 5019 t.clearMeasurements(); 5020} 5021function ba(t) { 5022 t.isLayoutDirty = !1; 5023} 5024function LL(t) { 5025 const { visualElement: e } = t.options; 5026 e && e.getProps().onBeforeLayoutMeasure && e.notify("BeforeLayoutMeasure"), t.resetTransform(); 5027} 5028function va(t) { 5029 t.finishAnimation(), t.targetDelta = t.relativeTarget = t.target = void 0, t.isProjectionDirty = !0; 5030} 5031function cL(t) { 5032 t.resolveTargetDelta(); 5033} 5034function lL(t) { 5035 t.calcProjection(); 5036} 5037function dL(t) {
5038 t.resetSkewAndRotation(); 5039} 5040function gL(t) { 5041 t.removeLeadSnapshot(); 5042} 5043function ya(t, e, s) { 5044 t.translate = se(e.translate, 0, s), t.scale = se(e.scale, 1, s), t.origin = e.origin, t.originPoint = e.originPoint; 5045} 5046function wa(t, e, s, r) { 5047 t.min = se(e.min, s.min, r), t.max = se(e.max, s.max, r); 5048} 5049function fL(t, e, s, r) { 5050 wa(t.x, e.x, s.x, r), wa(t.y, e.y, s.y, r); 5051} 5052function pL(t) { 5053 return t.animationValues && t.animationValues.opacityExit !== void 0; 5054} 5055const ML = { 5056 duration: 0.45, 5057 ease: [0.4, 0, 0.1, 1] 5058}, Ta = (t) => typeof navigator < "u" && navigator.userAgent && navigator.userAgent.toLowerCase().includes(t), Sa = Ta("applewebkit/") && !Ta("chrome/") ? Math.round : Ne; 5059function Ba(t) { 5060 t.min = Sa(t.min), t.max = Sa(t.max); 5061} 5062function uL(t) { 5063 Ba(t.x), Ba(t.y); 5064} 5065function P7(t, e, s) { 5066 return t === "position" || t === "preserve-aspect" && !v8(ma(e), ma(s), 0.2); 5067} 5068function hL(t) { 5069 return t !== t.root && t.scroll?.wasRoot; 5070} 5071const mL = I7({ 5072 attachResizeListener: (t, e) => s2(t, "resize", e), 5073 measureScroll: () => ({ 5074 x: document.documentElement.scrollLeft || document.body.scrollLeft, 5075 y: document.documentElement.scrollTop || document.body.scrollTop 5076 }), 5077 checkIsScrollRoot: () => !0 5078}), o4 = { 5079 current: void 0 5080}, C7 = I7({ 5081 measureScroll: (t) => ({ 5082 x: t.scrollLeft, 5083 y: t.scrollTop 5084 }), 5085 defaultParent: () => { 5086 if (!o4.current) { 5087 const t = new mL({}); 5088 t.mount(window), t.setOptions({ layoutScroll: !0 }), o4.current = t; 5089 } 5090 return o4.current; 5091 }, 5092 resetTransform: (t, e) => { 5093 t.style.transform = e !== void 0 ? e : "none"; 5094 }, 5095 checkIsScrollRoot: (t) => window.getComputedStyle(t).position === "fixed" 5096}), xL = { 5097 pan: { 5098 Feature: D8 5099 }, 5100 drag: { 5101 Feature: R8, 5102 ProjectionNode: C7, 5103 MeasureLayout: T7 5104 } 5105}; 5106function ka(t, e, s) { 5107 const { props: r } = t; 5108 t.animationState && r.whileHover && t.animationState.setActive("whileHover", s === "Start"); 5109 const n = "onHover" + s, o = r[n]; 5110 o && $.postRender(() => o(e, x2(e))); 5111} 5112class _L extends B1 { 5113 mount() { 5114 const { current: e } = this.node; 5115 e && (this.unmount = An(e, (s, r) => (ka(this.node, r, "Start"), (n) => ka(this.node, n, "End")))); 5116 } 5117 unmount() { 5118 } 5119} 5120class bL extends B1 { 5121 constructor() { 5122 super(...arguments), this.isActive = !1; 5123 } 5124 onFocus() { 5125 let e = !1; 5126 try { 5127 e = this.node.current.matches(":focus-visible"); 5128 } catch { 5129 e = !0; 5130 } 5131 !e || !this.node.animationState || (this.node.animationState.setActive("whileFocus", !0), this.isActive = !0); 5132 } 5133 onBlur() { 5134 !this.isActive || !this.node.animationState || (this.node.animationState.setActive("whileFocus", !1), this.isActive = !1); 5135 } 5136 mount() { 5137 this.unmount = M2(s2(this.node.current, "focus", () => this.onFocus()), s2(this.node.current, "blur", () => this.onBlur())); 5138 } 5139 unmount() { 5140 } 5141} 5142function Aa(t, e, s) { 5143 const { props: r } = t; 5144 if (t.current instanceof HTMLButtonElement && t.current.disabled) 5145 return; 5146 t.animationState && r.whileTap && t.animationState.setActive("whileTap", s === "Start"); 5147 const n = "onTap" + (s === "End" ? "" : s), o = r[n]; 5148 o && $.postRender(() => o(e, x2(e))); 5149} 5150class vL extends B1 { 5151 mount() { 5152 const { current: e } = this.node; 5153 e && (this.unmount = Cn(e, (s, r) => (Aa(this.node, r, "Start"), (n, { success: o }) => Aa(this.node, n, o ? "End" : "Cancel")), { useGlobalTarget: this.node.props.globalTapTarget })); 5154 } 5155 unmount() { 5156 } 5157} 5158const $4 = /* @__PURE__ */ new WeakMap(), L4 = /* @__PURE__ */ new WeakMap(), yL = (t) => { 5159 const e = $4.get(t.target); 5160 e && e(t); 5161}, wL = (t) => { 5162 t.forEach(yL); 5163}; 5164function TL({ root: t, ...e }) { 5165 const s = t || document; 5166 L4.has(s) || L4.set(s, {}); 5167 const r = L4.get(s), n = JSON.stringify(e); 5168 return r[n] || (r[n] = new IntersectionObserver(wL, { root: t, ...e })), r[n]; 5169} 5170function SL(t, e, s) { 5171 const r = TL(e); 5172 return $4.set(t, s), r.observe(t), () => { 5173 $4.delete(t), r.unobserve(t); 5174 }; 5175} 5176const BL = { 5177 some: 0, 5178 all: 1 5179}; 5180class kL extends B1 { 5181 constructor() { 5182 super(...arguments), this.hasEnteredView = !1, this.isInView = !1; 5183 } 5184 startObserver() { 5185 this.unmount(); 5186 const { viewport: e = {} } = this.node.getProps(), { root: s, margin: r, amount: n = "some", once: o } = e, L = { 5187 root: s ? s.current : void 0, 5188 rootMargin: r, 5189 threshold: typeof n == "number" ? n : BL[n] 5190 }, d = (l) => { 5191 const { isIntersecting: g } = l; 5192 if (this.isInView === g || (this.isInView = g, o && !g && this.hasEnteredView)) 5193 return; 5194 g && (this.hasEnteredView = !0), this.node.animationState && this.node.animationState.setActive("whileInView", g); 5195 const { onViewportEnter: f, onViewportLeave: p } = this.node.getProps(), M = g ? f : p; 5196 M && M(l); 5197 }; 5198 return SL(this.node.current, L, d); 5199 } 5200 mount() { 5201 this.startObserver(); 5202 } 5203 update() { 5204 if (typeof IntersectionObserver > "u") 5205 return; 5206 const { props: e, prevProps: s } = this.node; 5207 ["amount", "margin", "root"].some(AL(e, s)) && this.startObserver(); 5208 } 5209 unmount() { 5210 } 5211} 5212function AL({ viewport: t = {} }, { viewport: e = {} } = {}) { 5213 return (s) => t[s] !== e[s]; 5214} 5215const NL = { 5216 inView: { 5217 Feature: kL 5218 }, 5219 tap: { 5220 Feature: vL 5221 }, 5222 focus: { 5223 Feature: bL 5224 }, 5225 hover: { 5226 Feature: _L 5227 } 5228}, IL = { 5229 layout: { 5230 ProjectionNode: C7, 5231 MeasureLayout: T7 5232 } 5233}, PL = { 5234 ...u8, 5235 ...NL, 5236 ...xL, 5237 ...IL 5238}, m = /* @__PURE__ */ Po(PL, $o); 5239function F7(t, e, s) { 5240 f2(() => t.on(e, s), [t, e, s]); 5241} 5242const CL = 50, Na = () => ({ 5243 current: 0, 5244 offset: [], 5245 progress: 0, 5246 scrollLength: 0, 5247 targetOffset: 0, 5248 targetLength: 0, 5249 containerLength: 0, 5250 velocity: 0 5251}), FL = () => ({ 5252 time: 0, 5253 x: Na(), 5254 y: Na() 5255}), EL = { 5256 x: { 5257 length: "Width", 5258 position: "Left" 5259 }, 5260 y: { 5261 length: "Height", 5262 position: "Top" 5263 } 5264}; 5265function Ia(t, e, s, r) { 5266 const n = s[e], { length: o, position: L } = EL[e], d = n.current, l = s.time; 5267 n.current = t[`scroll${L}`], n.scrollLength = t[`scroll${o}`] - t[`client${o}`], n.offset.length = 0, n.offset[0] = 0, n.offset[1] = n.scrollLength, n.progress = /* @__PURE__ */ vt(0, n.scrollLength, n.current); 5268 const g = r - l; 5269 n.velocity = g > CL ? 0 : b5(n.current - d, g); 5270} 5271function RL(t, e, s) { 5272 Ia(t, "x", e, s), Ia(t, "y", e, s), e.time = s; 5273} 5274function DL(t, e) { 5275 const s = { x: 0, y: 0 }; 5276 let r = t; 5277 for (; r && r !== e; ) 5278 if (D5(r)) 5279 s.x += r.offsetLeft, s.y += r.offsetTop, r = r.offsetParent; 5280 else if (r.tagName === "svg") { 5281 const n = r.getBoundingClientRect(); 5282 r = r.parentElement; 5283 const o = r.getBoundingClientRect(); 5284 s.x += n.left - o.left, s.y += n.top - o.top; 5285 } else if (r instanceof SVGGraphicsElement) { 5286 const { x: n, y: o } = r.getBBox(); 5287 s.x += n, s.y += o; 5288 let L = null, d = r.parentNode; 5289 for (; !L; ) 5290 d.tagName === "svg" && (L = d), d = r.parentNode; 5291 r = L; 5292 } else 5293 break; 5294 return s; 5295} 5296const q4 = { 5297 start: 0, 5298 center: 0.5, 5299 end: 1 5300}; 5301function Pa(t, e, s = 0) { 5302 let r = 0; 5303 if (t in q4 && (t = q4[t]), typeof t == "string") { 5304 const n = parseFloat(t); 5305 t.endsWith("px") ? r = n : t.endsWith("%") ? t = n / 100 : t.endsWith("vw") ? r = n / 100 * document.documentElement.clientWidth : t.endsWith("vh") ? r = n / 100 * document.documentElement.clientHeight : t = n; 5306 } 5307 return typeof t == "number" && (r = e * t), s + r; 5308} 5309const zL = [0, 0]; 5310function jL(t, e, s, r) { 5311 let n = Array.isArray(t) ? t : zL, o = 0, L = 0; 5312 return typeof t == "number" ? n = [t, t] : typeof t == "string" && (t = t.trim(), t.includes(" ") ? n = t.split(" ") : n = [t, q4[t] ? t : "0"]), o = Pa(n[0], s, r), L = Pa(n[1], e), o - L; 5313} 5314const OL = { 5315 All: [ 5316 [0, 0], 5317 [1, 1] 5318 ] 5319}, VL = { x: 0, y: 0 }; 5320function HL(t) { 5321 return "getBBox" in t && t.tagName !== "svg" ? t.getBBox() : { width: t.clientWidth, height: t.clientHeight }; 5322} 5323function ZL(t, e, s) { 5324 const { offset: r = OL.All } = s, { target: n = t, axis: o = "y" } = s, L = o === "y" ? "height" : "width", d = n !== t ? DL(n, t) : VL, l = n === t ? { width: t.scrollWidth, height: t.scrollHeight } : HL(n), g = { 5325 width: t.clientWidth, 5326 height: t.clientHeight 5327 }; 5328 e[o].offset.length = 0; 5329 let f = !e[o].interpolate; 5330 const p = r.length; 5331 for (let M = 0; M < p; M++) { 5332 const u = jL(r[M], g[L], l[L], d[o]);
5333 !f && u !== e[o].interpolatorOffsets[M] && (f = !0), e[o].offset[M] = u; 5334 } 5335 f && (e[o].interpolate = N5(e[o].offset, Ss(r), { clamp: !1 }), e[o].interpolatorOffsets = [...e[o].offset]), e[o].progress = i1(0, 1, e[o].interpolate(e[o].current)); 5336} 5337function WL(t, e = t, s) { 5338 if (s.x.targetOffset = 0, s.y.targetOffset = 0, e !== t) { 5339 let r = e; 5340 for (; r && r !== t; ) 5341 s.x.targetOffset += r.offsetLeft, s.y.targetOffset += r.offsetTop, r = r.offsetParent; 5342 } 5343 s.x.targetLength = e === t ? e.scrollWidth : e.clientWidth, s.y.targetLength = e === t ? e.scrollHeight : e.clientHeight, s.x.containerLength = t.clientWidth, s.y.containerLength = t.clientHeight; 5344} 5345function $L(t, e, s, r = {}) { 5346 return { 5347 measure: (n) => { 5348 WL(t, r.target, s), RL(t, s, n), (r.offset || r.target) && ZL(t, s, r); 5349 }, 5350 notify: () => e(s) 5351 }; 5352} 5353const Rt = /* @__PURE__ */ new WeakMap(), Ca = /* @__PURE__ */ new WeakMap(), c4 = /* @__PURE__ */ new WeakMap(), Fa = (t) => t === document.scrollingElement ? window : t; 5354function E7(t, { container: e = document.scrollingElement, ...s } = {}) { 5355 if (!e) 5356 return Ne; 5357 let r = c4.get(e); 5358 r || (r = /* @__PURE__ */ new Set(), c4.set(e, r)); 5359 const n = FL(), o = $L(e, t, n, s); 5360 if (r.add(o), !Rt.has(e)) { 5361 const d = () => { 5362 for (const p of r) 5363 p.measure(me.timestamp); 5364 $.preUpdate(l); 5365 }, l = () => { 5366 for (const p of r) 5367 p.notify(); 5368 }, g = () => $.read(d); 5369 Rt.set(e, g); 5370 const f = Fa(e); 5371 window.addEventListener("resize", g, { passive: !0 }), e !== document.documentElement && Ca.set(e, Hn(e, g)), f.addEventListener("scroll", g, { passive: !0 }), g(); 5372 } 5373 const L = Rt.get(e); 5374 return $.read(L, !1, !0), () => { 5375 Je(L); 5376 const d = c4.get(e); 5377 if (!d || (d.delete(o), d.size)) 5378 return; 5379 const l = Rt.get(e); 5380 Rt.delete(e), l && (Fa(e).removeEventListener("scroll", l), Ca.get(e)?.(), window.removeEventListener("resize", l)); 5381 }; 5382} 5383const Ea = /* @__PURE__ */ new Map(); 5384function qL(t) { 5385 const e = { value: 0 }, s = E7((r) => { 5386 e.value = r[t.axis].progress * 100; 5387 }, t); 5388 return { currentTime: e, cancel: s }; 5389} 5390function R7({ source: t, container: e, ...s }) { 5391 const { axis: r } = s; 5392 t && (e = t); 5393 const n = Ea.get(e) ?? /* @__PURE__ */ new Map(); 5394 Ea.set(e, n); 5395 const o = s.target ?? "self", L = n.get(o) ?? {}, d = r + (s.offset ?? []).join(","); 5396 return L[d] || (L[d] = !s.target && Ns() ? new ScrollTimeline({ source: e, axis: r }) : qL({ container: e, ...s })), L[d]; 5397} 5398function UL(t, e) { 5399 const s = R7(e); 5400 return t.attachTimeline({ 5401 timeline: e.target ? void 0 : s, 5402 observe: (r) => (r.pause(), qs((n) => { 5403 r.time = r.iterationDuration * n; 5404 }, s)) 5405 }); 5406} 5407function GL(t) { 5408 return t.length === 2; 5409} 5410function JL(t, e) { 5411 return GL(t) ? E7((s) => { 5412 t(s[e.axis].progress, s); 5413 }, e) : qs(t, R7(e)); 5414} 5415function KL(t, { axis: e = "y", container: s = document.scrollingElement, ...r } = {}) { 5416 if (!s) 5417 return Ne; 5418 const n = { axis: e, container: s, ...r }; 5419 return typeof t == "function" ? JL(t, n) : UL(t, n); 5420} 5421const YL = () => ({ 5422 scrollX: Ue(0), 5423 scrollY: Ue(0), 5424 scrollXProgress: Ue(0), 5425 scrollYProgress: Ue(0) 5426}), A2 = (t) => t ? !t.current : !1; 5427function D7({ container: t, target: e, ...s } = {}) { 5428 const r = St(YL), n = H(null), o = H(!1), L = Ge(() => (n.current = KL((d, { x: l, y: g }) => { 5429 r.scrollX.set(l.current), r.scrollXProgress.set(l.progress), r.scrollY.set(g.current), r.scrollYProgress.set(g.progress); 5430 }, { 5431 ...s, 5432 container: t?.current || void 0, 5433 target: e?.current || void 0 5434 }), () => { 5435 n.current?.(); 5436 }), [t, e, JSON.stringify(s.offset)]); 5437 return w3(() => { 5438 if (o.current = !1, A2(t) || A2(e)) { 5439 o.current = !0; 5440 return; 5441 } else 5442 return L(); 5443 }, [L]), q(() => { 5444 if (o.current) 5445 return Xt(!A2(t)), Xt(!A2(e)), L(); 5446 }, [L]), r; 5447} 5448function z7(t) { 5449 const e = St(() => Ue(t)), { isStatic: s } = oe(m2); 5450 if (s) { 5451 const [, r] = j(t); 5452 q(() => e.on("change", r), []); 5453 } 5454 return e; 5455} 5456function j7(t, e) { 5457 const s = z7(e()), r = () => s.set(e()); 5458 return r(), w3(() => { 5459 const n = () => $.preRender(r, !1, !0), o = t.map((L) => L.on("change", n)); 5460 return () => { 5461 o.forEach((L) => L()), Je(r); 5462 }; 5463 }), s; 5464} 5465function XL(t) { 5466 Ut.current = [], t(); 5467 const e = j7(Ut.current, t); 5468 return Ut.current = void 0, e; 5469} 5470function O7(t, e, s, r) { 5471 if (typeof t == "function") 5472 return XL(t); 5473 const n = typeof e == "function" ? e : Wn(e, s, r); 5474 return Array.isArray(t) ? Ra(t, n) : Ra([t], ([o]) => n(o)); 5475} 5476function Ra(t, e) { 5477 const s = St(() => []); 5478 return j7(t, () => { 5479 s.length = 0; 5480 const r = t.length; 5481 for (let n = 0; n < r; n++) 5482 s[n] = t[n].get(); 5483 return e(s); 5484 }); 5485} 5486function QL(t, e = {}) { 5487 const { isStatic: s } = oe(m2), r = () => xe(t) ? t.get() : t; 5488 if (s) 5489 return O7(r); 5490 const n = z7(r()); 5491 return f2(() => $n(n, t, e), [n, JSON.stringify(e)]), n; 5492} 5493const ec = { 5494 some: 0, 5495 all: 1 5496}; 5497function tc(t, e, { root: s, margin: r, amount: n = "some" } = {}) { 5498 const o = R5(t), L = /* @__PURE__ */ new WeakMap(), d = (g) => { 5499 g.forEach((f) => { 5500 const p = L.get(f.target); 5501 if (f.isIntersecting !== !!p) 5502 if (f.isIntersecting) { 5503 const M = e(f.target, f); 5504 typeof M == "function" ? L.set(f.target, M) : l.unobserve(f.target); 5505 } else typeof p == "function" && (p(f), L.delete(f.target)); 5506 }); 5507 }, l = new IntersectionObserver(d, { 5508 root: s, 5509 rootMargin: r, 5510 threshold: typeof n == "number" ? n : ec[n] 5511 }); 5512 return o.forEach((g) => l.observe(g)), () => l.disconnect(); 5513} 5514function Nt(t, { root: e, margin: s, amount: r, once: n = !1, initial: o = !1 } = {}) { 5515 const [L, d] = j(o); 5516 return q(() => { 5517 if (!t.current || n && L) 5518 return; 5519 const l = () => (d(!0), n ? void 0 : () => d(!1)), g = { 5520 root: e && e.current || void 0, 5521 margin: s, 5522 amount: r 5523 }; 5524 return tc(t.current, l, g); 5525 }, [e, t, s, n, r]), L; 5526} 5527/** 5528 * @license lucide-react v0.487.0 - ISC 5529 * 5530 * This source code is licensed under the ISC license. 5531 * See the LICENSE file in the root directory of this source tree. 5532 */ 5533const ac = (t) => t.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), sc = (t) => t.replace( 5534 /^([A-Z])|[\s-_]+(\w)/g, 5535 (e, s, r) => r ? r.toUpperCase() : s.toLowerCase() 5536), Da = (t) => { 5537 const e = sc(t); 5538 return e.charAt(0).toUpperCase() + e.slice(1); 5539}, V7 = (...t) => t.filter((e, s, r) => !!e && e.trim() !== "" && r.indexOf(e) === s).join(" ").trim(); 5540/** 5541 * @license lucide-react v0.487.0 - ISC 5542 * 5543 * This source code is licensed under the ISC license. 5544 * See the LICENSE file in the root directory of this source tree. 5545 */ 5546var ic = { 5547 xmlns: "http://www.w3.org/2000/svg", 5548 width: 24, 5549 height: 24, 5550 viewBox: "0 0 24 24", 5551 fill: "none", 5552 stroke: "currentColor", 5553 strokeWidth: 2, 5554 strokeLinecap: "round", 5555 strokeLinejoin: "round" 5556}; 5557/** 5558 * @license lucide-react v0.487.0 - ISC 5559 * 5560 * This source code is licensed under the ISC license. 5561 * See the LICENSE file in the root directory of this source tree. 5562 */ 5563const rc = Tt(
vendor: 6,492 bytes, lines 5564-5785
5564 ({ 5565 color: t = "currentColor", 5566 size: e = 24, 5567 strokeWidth: s = 2, 5568 absoluteStrokeWidth: r, 5569 className: n = "", 5570 children: o, 5571 iconNode: L, 5572 ...d 5573 }, l) => s1( 5574 "svg", 5575 { 5576 ref: l, 5577 ...ic, 5578 width: e, 5579 height: e, 5580 stroke: t, 5581 strokeWidth: r ? Number(s) * 24 / Number(e) : s, 5582 className: V7("lucide", n), 5583 ...d 5584 }, 5585 [ 5586 ...L.map(([g, f]) => s1(g, f)), 5587 ...Array.isArray(o) ? o : [o] 5588 ] 5589 ) 5590); 5591/** 5592 * @license lucide-react v0.487.0 - ISC 5593 * 5594 * This source code is licensed under the ISC license. 5595 * See the LICENSE file in the root directory of this source tree. 5596 */ 5597const T = (t, e) => { 5598 const s = Tt( 5599 ({ className: r, ...n }, o) => s1(rc, { 5600 ref: o, 5601 iconNode: e, 5602 className: V7( 5603 `lucide-${ac(Da(t))}`, 5604 `lucide-${t}`, 5605 r 5606 ), 5607 ...n 5608 }) 5609 ); 5610 return s.displayName = Da(t), s; 5611}; 5612/** 5613 * @license lucide-react v0.487.0 - ISC 5614 * 5615 * This source code is licensed under the ISC license. 5616 * See the LICENSE file in the root directory of this source tree. 5617 */ 5618const nc = [ 5619 ["circle", { cx: "16", cy: "4", r: "1", key: "1grugj" }], 5620 ["path", { d: "m18 19 1-7-6 1", key: "r0i19z" }], 5621 ["path", { d: "m5 8 3-3 5.5 3-2.36 3.5", key: "9ptxx2" }], 5622 ["path", { d: "M4.24 14.5a5 5 0 0 0 6.88 6", key: "10kmtu" }], 5623 ["path", { d: "M13.76 17.5a5 5 0 0 0-6.88-6", key: "2qq6rc" }] 5624], _2 = T("accessibility", nc); 5625/** 5626 * @license lucide-react v0.487.0 - ISC 5627 * 5628 * This source code is licensed under the ISC license. 5629 * See the LICENSE file in the root directory of this source tree. 5630 */ 5631const oc = [ 5632 [ 5633 "path", 5634 { 5635 d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2", 5636 key: "169zse" 5637 } 5638 ] 5639], N3 = T("activity", oc); 5640/** 5641 * @license lucide-react v0.487.0 - ISC 5642 * 5643 * This source code is licensed under the ISC license. 5644 * See the LICENSE file in the root directory of this source tree. 5645 */ 5646const Lc = [ 5647 [ 5648 "path", 5649 { 5650 d: "M12 20.94c1.5 0 2.75 1.06 4 1.06 3 0 6-8 6-12.22A4.91 4.91 0 0 0 17 5c-2.22 0-4 1.44-5 2-1-.56-2.78-2-5-2a4.9 4.9 0 0 0-5 4.78C2 14 5 22 8 22c1.25 0 2.5-1.06 4-1.06Z", 5651 key: "3s7exb" 5652 } 5653 ], 5654 ["path", { d: "M10 2c1 .5 2 2 2 5", key: "fcco2y" }] 5655], cc = T("apple", Lc); 5656/** 5657 * @license lucide-react v0.487.0 - ISC 5658 * 5659 * This source code is licensed under the ISC license. 5660 * See the LICENSE file in the root directory of this source tree. 5661 */ 5662const lc = [ 5663 ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }], 5664 ["path", { d: "M19 12H5", key: "x3x0zl" }] 5665], O1 = T("arrow-left", lc); 5666/** 5667 * @license lucide-react v0.487.0 - ISC 5668 * 5669 * This source code is licensed under the ISC license. 5670 * See the LICENSE file in the root directory of this source tree. 5671 */ 5672const dc = [ 5673 ["path", { d: "M5 12h14", key: "1ays0h" }], 5674 ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }] 5675], D = T("arrow-right", dc); 5676/** 5677 * @license lucide-react v0.487.0 - ISC 5678 * 5679 * This source code is licensed under the ISC license. 5680 * See the LICENSE file in the root directory of this source tree. 5681 */ 5682const gc = [ 5683 ["path", { d: "M7 7h10v10", key: "1tivn9" }], 5684 ["path", { d: "M7 17 17 7", key: "1vkiza" }] 5685], fc = T("arrow-up-right", gc); 5686/** 5687 * @license lucide-react v0.487.0 - ISC 5688 * 5689 * This source code is licensed under the ISC license. 5690 * See the LICENSE file in the root directory of this source tree. 5691 */ 5692const pc = [ 5693 ["rect", { width: "20", height: "12", x: "2", y: "6", rx: "2", key: "9lu3g6" }], 5694 ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }], 5695 ["path", { d: "M6 12h.01M18 12h.01", key: "113zkx" }] 5696], Mc = T("banknote", pc); 5697/** 5698 * @license lucide-react v0.487.0 - ISC 5699 * 5700 * This source code is licensed under the ISC license. 5701 * See the LICENSE file in the root directory of this source tree. 5702 */ 5703const uc = [ 5704 ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }], 5705 [ 5706 "path", 5707 { 5708 d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326", 5709 key: "11g9vi" 5710 } 5711 ] 5712], H7 = T("bell", uc); 5713/** 5714 * @license lucide-react v0.487.0 - ISC 5715 * 5716 * This source code is licensed under the ISC license. 5717 * See the LICENSE file in the root directory of this source tree. 5718 */ 5719const hc = [ 5720 ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }], 5721 ["path", { d: "M22 8c0-2.3-.8-4.3-2-6", key: "5bb3ad" }], 5722 [ 5723 "path", 5724 { 5725 d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326", 5726 key: "11g9vi" 5727 } 5728 ], 5729 ["path", { d: "M4 2C2.8 3.7 2 5.7 2 8", key: "tap9e0" }] 5730], mc = T("bell-ring", hc); 5731/** 5732 * @license lucide-react v0.487.0 - ISC 5733 * 5734 * This source code is licensed under the ISC license. 5735 * See the LICENSE file in the root directory of this source tree. 5736 */ 5737const xc = [ 5738 ["path", { d: "M12 7v14", key: "1akyts" }], 5739 [ 5740 "path", 5741 { 5742 d: "M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z", 5743 key: "ruj8y" 5744 } 5745 ] 5746], Z7 = T("book-open", xc); 5747/** 5748 * @license lucide-react v0.487.0 - ISC 5749 * 5750 * This source code is licensed under the ISC license. 5751 * See the LICENSE file in the root directory of this source tree. 5752 */ 5753const _c = [ 5754 ["path", { d: "M12 8V4H8", key: "hb8ula" }], 5755 ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }], 5756 ["path", { d: "M2 14h2", key: "vft8re" }], 5757 ["path", { d: "M20 14h2", key: "4cs60a" }], 5758 ["path", { d: "M15 13v2", key: "1xurst" }], 5759 ["path", { d: "M9 13v2", key: "rq6x2g" }] 5760], K5 = T("bot", _c); 5761/** 5762 * @license lucide-react v0.487.0 - ISC 5763 * 5764 * This source code is licensed under the ISC license. 5765 * See the LICENSE file in the root directory of this source tree. 5766 */ 5767const bc = [ 5768 [ 5769 "path", 5770 { 5771 d: "M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z", 5772 key: "l5xja" 5773 } 5774 ], 5775 [ 5776 "path", 5777 { 5778 d: "M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z", 5779 key: "ep3f8r" 5780 } 5781 ], 5782 ["path", { d: "M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4", key: "1p4c4q" }], 5783 ["path", { d: "M17.599 6.5a3 3 0 0 0 .399-1.375", key: "tmeiqw" }], 5784 ["path", { d: "M6.003 5.125A3 3 0 0 0 6.401 6.5", key: "105sqy" }], 5785 ["path", { d: "M3.477 10.896a4 4 0 0 1 .585-.396", key: "ql3yin" }
5785], 5786 ["path", { d: "M19.938 10.5a4 4 0 0 1 .585.396", key: "1qfode" }], 5787 ["path", { d: "M6 18a4 4 0 0 1-1.967-.516", key: "2e4loj" }], 5788 ["path", { d: "M19.967 17.484A4 4 0 0 1 18 18", key: "159ez6" }] 5789], vc = T("brain", bc); 5790/** 5791 * @license lucide-react v0.487.0 - ISC 5792 * 5793 * This source code is licensed under the ISC license. 5794 * See the LICENSE file in the root directory of this source tree. 5795 */ 5796const yc = [ 5797 ["path", { d: "M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16", key: "jecpp" }], 5798 ["rect", { width: "20", height: "14", x: "2", y: "6", rx: "2", key: "i6l2r4" }] 5799], W7 = T("briefcase", yc); 5800/** 5801 * @license lucide-react v0.487.0 - ISC 5802 * 5803 * This source code is licensed under the ISC license. 5804 * See the LICENSE file in the root directory of this source tree. 5805 */ 5806const wc = [ 5807 ["path", { d: "M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z", key: "1b4qmf" }], 5808 ["path", { d: "M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2", key: "i71pzd" }], 5809 ["path", { d: "M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2", key: "10jefs" }], 5810 ["path", { d: "M10 6h4", key: "1itunk" }], 5811 ["path", { d: "M10 10h4", key: "tcdvrf" }], 5812 ["path", { d: "M10 14h4", key: "kelpxr" }], 5813 ["path", { d: "M10 18h4", key: "1ulq68" }] 5814], k1 = T("building-2", wc); 5815/** 5816 * @license lucide-react v0.487.0 - ISC 5817 * 5818 * This source code is licensed under the ISC license. 5819 * See the LICENSE file in the root directory of this source tree. 5820 */ 5821const Tc = [ 5822 ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }], 5823 ["path", { d: "M9 22v-4h6v4", key: "r93iot" }], 5824 ["path", { d: "M8 6h.01", key: "1dz90k" }], 5825 ["path", { d: "M16 6h.01", key: "1x0f13" }], 5826 ["path", { d: "M12 6h.01", key: "1vi96p" }], 5827 ["path", { d: "M12 10h.01", key: "1nrarc" }], 5828 ["path", { d: "M12 14h.01", key: "1etili" }], 5829 ["path", { d: "M16 10h.01", key: "1m94wz" }], 5830 ["path", { d: "M16 14h.01", key: "1gbofw" }], 5831 ["path", { d: "M8 10h.01", key: "19clt8" }], 5832 ["path", { d: "M8 14h.01", key: "6423bh" }] 5833], Sc = T("building", Tc); 5834/** 5835 * @license lucide-react v0.487.0 - ISC 5836 * 5837 * This source code is licensed under the ISC license. 5838 * See the LICENSE file in the root directory of this source tree. 5839 */ 5840const Bc = [ 5841 ["path", { d: "M8 6v6", key: "18i7km" }], 5842 ["path", { d: "M15 6v6", key: "1sg6z9" }], 5843 ["path", { d: "M2 12h19.6", key: "de5uta" }], 5844 [ 5845 "path", 5846 { 5847 d: "M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2 0-.4-.1-.8-.2-1.2l-1.4-5C20.1 6.8 19.1 6 18 6H4a2 2 0 0 0-2 2v10h3", 5848 key: "1wwztk" 5849 } 5850 ], 5851 ["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }], 5852 ["path", { d: "M9 18h5", key: "lrx6i" }], 5853 ["circle", { cx: "16", cy: "18", r: "2", key: "1v4tcr" }] 5854], kc = T("bus", Bc); 5855/** 5856 * @license lucide-react v0.487.0 - ISC 5857 * 5858 * This source code is licensed under the ISC license. 5859 * See the LICENSE file in the root directory of this source tree. 5860 */ 5861const Ac = [ 5862 ["path", { d: "M8 2v4", key: "1cmpym" }], 5863 ["path", { d: "M16 2v4", key: "4m81vk" }], 5864 ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }], 5865 ["path", { d: "M3 10h18", key: "8toen8" }], 5866 ["path", { d: "m9 16 2 2 4-4", key: "19s6y9" }] 5867], $7 = T("calendar-check", Ac); 5868/** 5869 * @license lucide-react v0.487.0 - ISC 5870 * 5871 * This source code is licensed under the ISC license. 5872 * See the LICENSE file in the root directory of this source tree. 5873 */ 5874const Nc = [ 5875 ["path", { d: "M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5", key: "1osxxc" }], 5876 ["path", { d: "M16 2v4", key: "4m81vk" }], 5877 ["path", { d: "M8 2v4", key: "1cmpym" }], 5878 ["path", { d: "M3 10h5", key: "r794hk" }], 5879 ["path", { d: "M17.5 17.5 16 16.3V14", key: "akvzfd" }], 5880 ["circle", { cx: "16", cy: "16", r: "6", key: "qoo3c4" }] 5881]; 5882T("calendar-clock", Nc); 5883/** 5884 * @license lucide-react v0.487.0 - ISC 5885 * 5886 * This source code is licensed under the ISC license. 5887 * See the LICENSE file in the root directory of this source tree. 5888 */ 5889const Ic = [ 5890 ["path", { d: "M8 2v4", key: "1cmpym" }], 5891 ["path", { d: "M16 2v4", key: "4m81vk" }], 5892 ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }
5892], 5893 ["path", { d: "M3 10h18", key: "8toen8" }] 5894], i2 = T("calendar", Ic); 5895/** 5896 * @license lucide-react v0.487.0 - ISC 5897 * 5898 * This source code is licensed under the ISC license. 5899 * See the LICENSE file in the root directory of this source tree. 5900 */ 5901const Pc = [ 5902 [ 5903 "path", 5904 { d: "m21 8-2 2-1.5-3.7A2 2 0 0 0 15.646 5H8.4a2 2 0 0 0-1.903 1.257L5 10 3 8", key: "1imjwt" } 5905 ], 5906 ["path", { d: "M7 14h.01", key: "1qa3f1" }], 5907 ["path", { d: "M17 14h.01", key: "7oqj8z" }], 5908 ["rect", { width: "18", height: "8", x: "3", y: "10", rx: "2", key: "a7itu8" }], 5909 ["path", { d: "M5 18v2", key: "ppbyun" }], 5910 ["path", { d: "M19 18v2", key: "gy7782" }] 5911], Cc = T("car-front", Pc); 5912/** 5913 * @license lucide-react v0.487.0 - ISC 5914 * 5915 * This source code is licensed under the ISC license. 5916 * See the LICENSE file in the root directory of this source tree. 5917 */ 5918const Fc = [ 5919 [ 5920 "path", 5921 { 5922 d: "M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2", 5923 key: "5owen" 5924 } 5925 ], 5926 ["circle", { cx: "7", cy: "17", r: "2", key: "u2ysq9" }], 5927 ["path", { d: "M9 17h6", key: "r8uit2" }], 5928 ["circle", { cx: "17", cy: "17", r: "2", key: "axvx0g" }] 5929], q7 = T("car", Fc); 5930/** 5931 * @license lucide-react v0.487.0 - ISC 5932 * 5933 * This source code is licensed under the ISC license. 5934 * See the LICENSE file in the root directory of this source tree. 5935 */ 5936const Ec = [ 5937 ["path", { d: "M3 3v16a2 2 0 0 0 2 2h16", key: "c24i48" }], 5938 ["path", { d: "M18 17V9", key: "2bz60n" }], 5939 ["path", { d: "M13 17V5", key: "1frdt8" }], 5940 ["path", { d: "M8 17v-3", key: "17ska0" }] 5941], y1 = T("chart-column", Ec); 5942/** 5943 * @license lucide-react v0.487.0 - ISC 5944 * 5945 * This source code is licensed under the ISC license. 5946 * See the LICENSE file in the root directory of this source tree. 5947 */ 5948const Rc = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]], Dc = T("check", Rc); 5949/** 5950 * @license lucide-react v0.487.0 - ISC 5951 * 5952 * This source code is licensed under the ISC license. 5953 * See the LICENSE file in the root directory of this source tree. 5954 */ 5955const zc = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]], t3 = T("chevron-down", zc); 5956/** 5957 * @license lucide-react v0.487.0 - ISC 5958 * 5959 * This source code is licensed under the ISC license. 5960 * See the LICENSE file in the root directory of this source tree. 5961 */ 5962const jc = [ 5963 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 5964 ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }], 5965 ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }] 5966], Y5 = T("circle-alert", jc); 5967/** 5968 * @license lucide-react v0.487.0 - ISC 5969 * 5970 * This source code is licensed under the ISC license. 5971 * See the LICENSE file in the root directory of this source tree. 5972 */ 5973const Oc = [ 5974 ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }], 5975 ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }] 5976], b2 = T("circle-check-big", Oc); 5977/** 5978 * @license lucide-react v0.487.0 - ISC 5979 * 5980 * This source code is licensed under the ISC license. 5981 * See the LICENSE file in the root directory of this source tree. 5982 */ 5983const Vc = [ 5984 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 5985 ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }] 5986], G = T("circle-check", Vc); 5987/** 5988 * @license lucide-react v0.487.0 - ISC 5989 * 5990 * This source code is licensed under the ISC license. 5991 * See the LICENSE file in the root directory of this source tree. 5992 */ 5993const Hc = [ 5994 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 5995 ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }] 5996], w1 = T("circle-dot", Hc); 5997/** 5998 * @license lucide-react v0.487.0 - ISC 5999 * 6000 * This source code is licensed under the ISC license. 6001 * See the LICENSE file in the root directory of this source tree. 6002 */ 6003const Zc = [ 6004 ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }], 6005 [ 6006 "path", 6007 { 6008 d: "M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2", 6009 key: "116196" 6010 } 6011 ], 6012 ["path", { d: "m9 14 2 2 4-4", key: "df797q" }] 6013], Wc = T("clipboard-check", Zc); 6014/** 6015 * @license lucide-react v0.487.0 - ISC 6016 * 6017 * This source code is licensed under the ISC license. 6018 * See the LICENSE file in the root directory of this source tree. 6019 */ 6020const $c = [ 6021 ["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }], 6022 [ 6023 "path", 6024 { 6025 d: "M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2", 6026 key: "116196" 6027 } 6028 ], 6029 ["path", { d: "M12 11h4", key: "1jrz19" }], 6030 ["path", { d: "M12 16h4", key: "n85exb" }], 6031 ["path", { d: "M8 11h.01", key: "1dfujw" }], 6032 ["path", { d: "M8 16h.01", key: "18s6g9" }] 6033], T1 = T("clipboard-list", $c); 6034/** 6035 * @license lucide-react v0.487.0 - ISC 6036 * 6037 * This source code is licensed under the ISC license. 6038 * See the LICENSE file in the root directory of this source tree. 6039 */ 6040const qc = [ 6041 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 6042 ["polyline", { points: "12 6 12 12 16 14", key: "68esgv" }] 6043], It = T("clock", qc); 6044/** 6045 * @license lucide-react v0.487.0 - ISC 6046 * 6047 * This source code is licensed under the ISC license. 6048 * See the LICENSE file in the root directory of this source tree. 6049 */ 6050const Uc = [ 6051 ["path", { d: "M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z", key: "p7xjir" }] 6052], U4 = T("cloud", Uc); 6053/** 6054 * @license lucide-react v0.487.0 - ISC 6055 * 6056 * This source code is licensed under the ISC license. 6057 * See the LICENSE file in the root directory of this source tree. 6058 */ 6059const Gc = [ 6060 ["rect", { width: "20", height: "14", x: "2", y: "5", rx: "2", key: "ynyp8z" }], 6061 ["line", { x1: "2", x2: "22", y1: "10", y2: "10", key: "1b3vmo" }] 6062], U7 = T("credit-card", Gc); 6063/** 6064 * @license lucide-react v0.487.0 - ISC 6065 * 6066 * This source code is licensed under the ISC license. 6067 * See the LICENSE file in the root directory of this source tree. 6068 */ 6069const Jc = [ 6070 ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }], 6071 ["polyline", { points: "7 10 12 15 17 10", key: "2ggqvy" }], 6072 ["line", { x1: "12", x2: "12", y1: "15", y2: "3", key: "1vk2je" }] 6073], Kc = T("download", Jc); 6074/** 6075 * @license lucide-react v0.487.0 - ISC 6076 * 6077 * This source code is licensed under the ISC license. 6078 * See the LICENSE file in the root directory of this source tree. 6079 */ 6080const Yc = [ 6081 ["path", { d: "M15 3h6v6", key: "1q9fwt" }], 6082 ["path", { d: "M10 14 21 3", key: "gplh6r" }], 6083 ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }] 6084], Xc = T("external-link", Yc); 6085/** 6086 * @license lucide-react v0.487.0 - ISC 6087 * 6088 * This source code is licensed under the ISC license. 6089 * See the LICENSE file in the root directory of this source tree. 6090 */ 6091const Qc = [ 6092 ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }], 6093 ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }], 6094 ["path", { d: "M10 9H8", key: "b1mrlr" }], 6095 ["path", { d: "M16 13H8", key: "t4e002" }], 6096 ["path", { d: "M16 17H8", key: "z1uh3a" }] 6097], G7 = T("file-text", Qc); 6098/** 6099 * @license lucide-react v0.487.0 - ISC 6100 * 6101 * This source code is licensed under the ISC license. 6102 * See the LICENSE file in the root directory of this source tree. 6103 */ 6104const el = [ 6105 ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }], 6106 ["path", { d: "M12 9v4", key: "juzpu7" }], 6107 ["path", { d: "M12 17h.01", key: "p32p05" }] 6108], tl = T("file-warning", el); 6109/** 6110 * @license lucide-react v0.487.0 - ISC 6111 * 6112 * This source code is licensed under the ISC license. 6113 * See the LICENSE file in the root directory of this source tree. 6114 */ 6115const al = [ 6116 ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }], 6117 ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }], 6118 ["path", { d: "m14.5 12.5-5 5", key: "b62r18" }], 6119 ["path", { d: "m9.5 12.5 5 5", key: "1rk7el" }] 6120], sl = T("file-x", al); 6121/** 6122 * @license lucide-react v0.487.0 - ISC 6123 * 6124 * This source code is licensed under the ISC license. 6125 * See the LICENSE file in the root directory of this source tree. 6126 */ 6127const il = [ 6128 ["path", { d: "m12 14 4-4", key: "9kzdfg" }], 6129 ["path", { d: "M3.34 19a10 10 0 1 1 17.32 0", key: "19p75a" }] 6130], rl = T("gauge", il); 6131/** 6132 * @license lucide-react v0.487.0 - ISC 6133 * 6134 * This source code is licensed under the ISC license. 6135 * See the LICENSE file in the root directory of this source tree. 6136 */ 6137const nl = [ 6138 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 6139 ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }], 6140 ["path", { d: "M2 12h20", key: "9i4pu4" }] 6141], J1 = T("globe", nl); 6142/** 6143 * @license lucide-react v0.487.0 - ISC 6144 * 6145 * This source code is licensed under the ISC license. 6146 * See the LICENSE file in the root directory of this source tree. 6147 */ 6148const ol = [ 6149 [ 6150 "path", 6151 { 6152 d: "M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z", 6153 key: "j76jl0" 6154 } 6155 ], 6156 ["path", { d: "M22 10v6", key: "1lu8f3" }], 6157 ["path", { d: "M6 12.5V16a6 3 0 0 0 12 0v-3.5", key: "1r8lef" }] 6158], Ll = T("graduation-cap", ol); 6159/** 6160 * @license lucide-react v0.487.0 - ISC 6161 * 6162 * This source code is licensed under the ISC license. 6163 * See the LICENSE file in the root directory of this source tree. 6164 */ 6165const cl = [ 6166 ["path", { d: "m11 17 2 2a1 1 0 1 0 3-3", key: "efffak" }], 6167 [ 6168 "path", 6169 { 6170 d: "m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4", 6171 key: "9pr0kb" 6172 } 6173 ], 6174 ["path", { d: "m21 3 1 11h-2", key: "1tisrp" }], 6175 ["path", { d: "M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3", key: "1uvwmv" }], 6176 ["path", { d: "M3 4h8", key: "1ep09j" }] 6177], J7 = T("handshake", cl); 6178/** 6179 * @license lucide-react v0.487.0 - ISC 6180 * 6181 * This source code is licensed under the ISC license. 6182 * See the LICENSE file in the root directory of this source tree. 6183 */ 6184const ll = [ 6185 [ 6186 "path", 6187 { 6188 d: "M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3", 6189 key: "1xhozi" 6190 } 6191 ] 6192], dl = T("headphones", ll); 6193/** 6194 * @license lucide-react v0.487.0 - ISC 6195 * 6196 * This source code is licensed under the ISC license. 6197 * See the LICENSE file in the root directory of this source tree. 6198 */ 6199const gl = [ 6200 ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }], 6201 [ 6202 "path", 6203 { 6204 d: "M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z", 6205 key: "1d0kgt" 6206 } 6207 ] 6208], fl = T("house", gl); 6209/** 6210 * @license lucide-react v0.487.0 - ISC 6211 * 6212 * This source code is licensed under the ISC license. 6213 * See the LICENSE file in the root directory of this source tree. 6214 */ 6215const pl = [ 6216 [ 6217 "path", 6218 { 6219 d: "M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z", 6220 key: "zw3jo" 6221 } 6222 ], 6223 [ 6224 "path", 6225 { 6226 d: "M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12", 6227 key: "1wduqc" 6228 } 6229 ], 6230 [ 6231 "path", 6232 { 6233 d: "M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17", 6234 key: "kqbvx6" 6235 } 6236 ] 6237], I3 = T("layers", pl); 6238/** 6239 * @license lucide-react v0.487.0 - ISC 6240 * 6241 * This source code is licensed under the ISC license. 6242 * See the LICENSE file in the root directory of this source tree. 6243 */ 6244const Ml = [ 6245 ["rect", { width: "7", height: "7", x: "3", y: "3", rx: "1", key: "1g98yp" }], 6246 ["rect", { width: "7", height: "7", x: "14", y: "3", rx: "1", key: "6d4xhi" }], 6247 ["rect", { width: "7", height: "7", x: "14", y: "14", rx: "1", key: "nxv5o0" }
6247], 6248 ["rect", { width: "7", height: "7", x: "3", y: "14", rx: "1", key: "1bb6yr" }] 6249], P3 = T("layout-grid", Ml); 6250/** 6251 * @license lucide-react v0.487.0 - ISC 6252 * 6253 * This source code is licensed under the ISC license. 6254 * See the LICENSE file in the root directory of this source tree. 6255 */ 6256const ul = [ 6257 [ 6258 "path", 6259 { 6260 d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z", 6261 key: "nnexq3" 6262 } 6263 ], 6264 ["path", { d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12", key: "mt58a7" }] 6265], hl = T("leaf", ul); 6266/** 6267 * @license lucide-react v0.487.0 - ISC 6268 * 6269 * This source code is licensed under the ISC license. 6270 * See the LICENSE file in the root directory of this source tree. 6271 */ 6272const ml = [ 6273 [ 6274 "path", 6275 { 6276 d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5", 6277 key: "1gvzjb" 6278 } 6279 ], 6280 ["path", { d: "M9 18h6", key: "x1upvd" }], 6281 ["path", { d: "M10 22h4", key: "ceow96" }] 6282], xl = T("lightbulb", ml); 6283/** 6284 * @license lucide-react v0.487.0 - ISC 6285 * 6286 * This source code is licensed under the ISC license. 6287 * See the LICENSE file in the root directory of this source tree. 6288 */ 6289const _l = [ 6290 ["path", { d: "M9 17H7A5 5 0 0 1 7 7h2", key: "8i5ue5" }], 6291 ["path", { d: "M15 7h2a5 5 0 1 1 0 10h-2", key: "1b9ql8" }], 6292 ["line", { x1: "8", x2: "16", y1: "12", y2: "12", key: "1jonct" }] 6293], bl = T("link-2", _l); 6294/** 6295 * @license lucide-react v0.487.0 - ISC 6296 * 6297 * This source code is licensed under the ISC license. 6298 * See the LICENSE file in the root directory of this source tree. 6299 */ 6300const vl = [ 6301 [ 6302 "path", 6303 { 6304 d: "M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z", 6305 key: "c2jq9f" 6306 } 6307 ], 6308 ["rect", { width: "4", height: "12", x: "2", y: "9", key: "mk3on5" }], 6309 ["circle", { cx: "4", cy: "4", r: "2", key: "bt5ra8" }] 6310], K7 = T("linkedin", vl); 6311/** 6312 * @license lucide-react v0.487.0 - ISC 6313 * 6314 * This source code is licensed under the ISC license. 6315 * See the LICENSE file in the root directory of this source tree. 6316 */ 6317const yl = [ 6318 ["rect", { width: "20", height: "16", x: "2", y: "4", rx: "2", key: "18n3k1" }], 6319 ["path", { d: "m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7", key: "1ocrg3" }] 6320], K1 = T("mail", yl); 6321/** 6322 * @license lucide-react v0.487.0 - ISC 6323 * 6324 * This source code is licensed under the ISC license. 6325 * See the LICENSE file in the root directory of this source tree. 6326 */ 6327const wl = [ 6328 [ 6329 "path", 6330 { 6331 d: "M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0", 6332 key: "1r0f0z" 6333 } 6334 ], 6335 ["circle", { cx: "12", cy: "10", r: "3", key: "ilqhr7" }] 6336], Pt = T("map-pin", wl); 6337/** 6338 * @license lucide-react v0.487.0 - ISC 6339 * 6340 * This source code is licensed under the ISC license. 6341 * See the LICENSE file in the root directory of this source tree. 6342 */ 6343const Tl = [ 6344 [ 6345 "path", 6346 { 6347 d: "M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z", 6348 key: "169xi5" 6349 } 6350 ], 6351 ["path", { d: "M15 5.764v15", key: "1pn4in" }], 6352 ["path", { d: "M9 3.236v15", key: "1uimfh" }] 6353], S1 = T("map", Tl); 6354/** 6355 * @license lucide-react v0.487.0 - ISC 6356 * 6357 * This source code is licensed under the ISC license. 6358 * See the LICENSE file in the root directory of this source tree. 6359 */ 6360const Sl = [ 6361 ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }], 6362 ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }], 6363 ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }], 6364 ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }] 6365], C3 = T("maximize-2", Sl); 6366/** 6367 * @license lucide-react v0.487.0 - ISC 6368 * 6369 * This source code is licensed under the ISC license. 6370 * See the LICENSE file in the root directory of this source tree. 6371 */ 6372const Bl = [ 6373 ["line", { x1: "4", x2: "20", y1: "12", y2: "12", key: "1e0a9i" }], 6374 ["line", { x1: "4", x2: "20", y1: "6", y2: "6", key: "1owob3" }], 6375 ["line", { x1: "4", x2: "20", y1: "18", y2: "18", key: "yk5zj1" }
6375] 6376], kl = T("menu", Bl); 6377/** 6378 * @license lucide-react v0.487.0 - ISC 6379 * 6380 * This source code is licensed under the ISC license. 6381 * See the LICENSE file in the root directory of this source tree. 6382 */ 6383const Al = [ 6384 ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }] 6385], Y7 = T("message-square", Al); 6386/** 6387 * @license lucide-react v0.487.0 - ISC 6388 * 6389 * This source code is licensed under the ISC license. 6390 * See the LICENSE file in the root directory of this source tree. 6391 */ 6392const Nl = [ 6393 ["path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z", key: "131961" }], 6394 ["path", { d: "M19 10v2a7 7 0 0 1-14 0v-2", key: "1vc78b" }], 6395 ["line", { x1: "12", x2: "12", y1: "19", y2: "22", key: "x3vr5v" }] 6396], Il = T("mic", Nl); 6397/** 6398 * @license lucide-react v0.487.0 - ISC 6399 * 6400 * This source code is licensed under the ISC license. 6401 * See the LICENSE file in the root directory of this source tree. 6402 */ 6403const Pl = [["path", { d: "M5 12h14", key: "1ays0h" }]], Cl = T("minus", Pl); 6404/** 6405 * @license lucide-react v0.487.0 - ISC 6406 * 6407 * This source code is licensed under the ISC license. 6408 * See the LICENSE file in the root directory of this source tree. 6409 */ 6410const Fl = [ 6411 ["polygon", { points: "3 11 22 2 13 21 11 13 3 11", key: "1ltx0t" }] 6412], El = T("navigation", Fl); 6413/** 6414 * @license lucide-react v0.487.0 - ISC 6415 * 6416 * This source code is licensed under the ISC license. 6417 * See the LICENSE file in the root directory of this source tree. 6418 */ 6419const Rl = [ 6420 ["rect", { x: "16", y: "16", width: "6", height: "6", rx: "1", key: "4q2zg0" }], 6421 ["rect", { x: "2", y: "16", width: "6", height: "6", rx: "1", key: "8cvhb9" }], 6422 ["rect", { x: "9", y: "2", width: "6", height: "6", rx: "1", key: "1egb70" }], 6423 ["path", { d: "M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3", key: "1jsf9p" }], 6424 ["path", { d: "M12 12V8", key: "2874zd" }] 6425], X7 = T("network", Rl); 6426/** 6427 * @license lucide-react v0.487.0 - ISC 6428 * 6429 * This source code is licensed under the ISC license. 6430 * See the LICENSE file in the root directory of this source tree. 6431 */ 6432const Dl = [ 6433 [ 6434 "path", 6435 { 6436 d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z", 6437 key: "foiqr5" 6438 } 6439 ], 6440 ["path", { d: "M14.05 2a9 9 0 0 1 8 7.94", key: "vmijpz" }], 6441 ["path", { d: "M14.05 6A5 5 0 0 1 18 10", key: "13nbpp" }] 6442], Q7 = T("phone-call", Dl); 6443/** 6444 * @license lucide-react v0.487.0 - ISC 6445 * 6446 * This source code is licensed under the ISC license. 6447 * See the LICENSE file in the root directory of this source tree. 6448 */ 6449const zl = [ 6450 [ 6451 "path", 6452 { 6453 d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z", 6454 key: "foiqr5" 6455 } 6456 ] 6457], Y = T("phone", zl); 6458/** 6459 * @license lucide-react v0.487.0 - ISC 6460 * 6461 * This source code is licensed under the ISC license. 6462 * See the LICENSE file in the root directory of this source tree. 6463 */ 6464const jl = [ 6465 ["path", { d: "M19.07 4.93A10 10 0 0 0 6.99 3.34", key: "z3du51" }], 6466 ["path", { d: "M4 6h.01", key: "oypzma" }], 6467 ["path", { d: "M2.29 9.62A10 10 0 1 0 21.31 8.35", key: "qzzz0" }], 6468 ["path", { d: "M16.24 7.76A6 6 0 1 0 8.23 16.67", key: "1yjesh" }], 6469 ["path", { d: "M12 18h.01", key: "mhygvu" }], 6470 ["path", { d: "M17.99 11.66A6 6 0 0 1 15.77 16.67", key: "1u2y91" }], 6471 ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }], 6472 ["path", { d: "m13.41 10.59 5.66-5.66", key: "mhq4k0" }] 6473], Ol = T("radar", jl); 6474/** 6475 * @license lucide-react v0.487.0 - ISC 6476 * 6477 * This source code is licensed under the ISC license. 6478 * See the LICENSE file in the root directory of this source tree. 6479 */ 6480const Vl = [ 6481 ["path", { d: "M4.9 19.1C1 15.2 1 8.8 4.9 4.9", key: "1vaf9d" }], 6482 ["path", { d: "M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5", key: "u1ii0m" }], 6483 ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }], 6484 ["path", { d: "M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5", key: "1j5fej" }], 6485 ["path", { d: "M19.1 4.9C23 8.8 23 15.1 19.1 19", key: "10b0cb" }] 6486], Hl = T("radio", Vl); 6487/** 6488 * @license lucide-react v0.487.0 - ISC 6489 * 6490 * This source code is licensed under the ISC license. 6491 * See the LICENSE file in the root directory of this source tree. 6492 */ 6493const Zl = [ 6494 [ 6495 "path", 6496 { d: "M4 2v20l2-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1V2l-2 1-2-1-2 1-2-1-2 1-2-1-2 1Z", key: "q3az6g" } 6497 ], 6498 ["path", { d: "M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8", key: "1h4pet" }], 6499 ["path", { d: "M12 17.5v-11", key: "1jc1ny" }] 6500], Wl = T("receipt", Zl); 6501/** 6502 * @license lucide-react v0.487.0 - ISC 6503 * 6504 * This source code is licensed under the ISC license. 6505 * See the LICENSE file in the root directory of this source tree. 6506 */ 6507const $l = [ 6508 ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }], 6509 ["path", { d: "M21 3v5h-5", key: "1q7to0" }], 6510 ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }], 6511 ["path", { d: "M8 16H3v5", key: "1cv678" }] 6512], ql = T("refresh-cw", $l); 6513/** 6514 * @license lucide-react v0.487.0 - ISC 6515 * 6516 * This source code is licensed under the ISC license. 6517 * See the LICENSE file in the root directory of this source tree. 6518 */ 6519const Ul = [ 6520 ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }], 6521 ["path", { d: "M3 3v5h5", key: "1xhq8a" }] 6522], ei = T("rotate-ccw", Ul); 6523/** 6524 * @license lucide-react v0.487.0 - ISC 6525 * 6526 * This source code is licensed under the ISC license. 6527 * See the LICENSE file in the root directory of this source tree. 6528 */ 6529const Gl = [ 6530 ["path", { d: "M4 11a9 9 0 0 1 9 9", key: "pv89mb" }], 6531 ["path", { d: "M4 4a16 16 0 0 1 16 16", key: "k0647b" }], 6532 ["circle", { cx: "5", cy: "19", r: "1", key: "bfqh0e" }] 6533], X5 = T("rss", Gl); 6534/** 6535 * @license lucide-react v0.487.0 - ISC 6536 * 6537 * This source code is licensed under the ISC license. 6538 * See the LICENSE file in the root directory of this source tree. 6539 */ 6540const Jl = [ 6541 ["path", { d: "m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "7g6ntu" }], 6542 ["path", { d: "m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "ijws7r" }], 6543 ["path", { d: "M7 21h10", key: "1b0cd5" }], 6544 ["path", { d: "M12 3v18", key: "108xh3" }],
6545 ["path", { d: "M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2", key: "3gwbw2" }] 6546], Kl = T("scale", Jl); 6547/** 6548 * @license lucide-react v0.487.0 - ISC 6549 * 6550 * This source code is licensed under the ISC license. 6551 * See the LICENSE file in the root directory of this source tree. 6552 */ 6553const Yl = [ 6554 ["path", { d: "M3 7V5a2 2 0 0 1 2-2h2", key: "aa7l1z" }], 6555 ["path", { d: "M17 3h2a2 2 0 0 1 2 2v2", key: "4qcy5o" }], 6556 ["path", { d: "M21 17v2a2 2 0 0 1-2 2h-2", key: "6vwrx8" }], 6557 ["path", { d: "M7 21H5a2 2 0 0 1-2-2v-2", key: "ioqczr" }], 6558 ["path", { d: "M7 12h10", key: "b7w52i" }] 6559], Xl = T("scan-line", Yl); 6560/** 6561 * @license lucide-react v0.487.0 - ISC 6562 * 6563 * This source code is licensed under the ISC license. 6564 * See the LICENSE file in the root directory of this source tree. 6565 */ 6566const Ql = [ 6567 ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }], 6568 ["path", { d: "M8.12 8.12 12 12", key: "1alkpv" }], 6569 ["path", { d: "M20 4 8.12 15.88", key: "xgtan2" }], 6570 ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }], 6571 ["path", { d: "M14.8 14.8 20 20", key: "ptml3r" }] 6572], Q5 = T("scissors", Ql); 6573/** 6574 * @license lucide-react v0.487.0 - ISC 6575 * 6576 * This source code is licensed under the ISC license. 6577 * See the LICENSE file in the root directory of this source tree. 6578 */ 6579const ed = [ 6580 [ 6581 "path", 6582 { 6583 d: "M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z", 6584 key: "1ffxy3" 6585 } 6586 ], 6587 ["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }] 6588], ti = T("send", ed); 6589/** 6590 * @license lucide-react v0.487.0 - ISC 6591 * 6592 * This source code is licensed under the ISC license. 6593 * See the LICENSE file in the root directory of this source tree. 6594 */ 6595const td = [ 6596 [ 6597 "path", 6598 { 6599 d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z", 6600 key: "oel41y" 6601 } 6602 ], 6603 ["path", { d: "M12 8v4", key: "1got3b" }], 6604 ["path", { d: "M12 16h.01", key: "1drbdi" }] 6605], ad = T("shield-alert", td); 6606/** 6607 * @license lucide-react v0.487.0 - ISC 6608 * 6609 * This source code is licensed under the ISC license. 6610 * See the LICENSE file in the root directory of this source tree. 6611 */ 6612const sd = [ 6613 [ 6614 "path", 6615 { 6616 d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z", 6617 key: "oel41y" 6618 } 6619 ], 6620 ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }] 6621], F3 = T("shield-check", sd); 6622/** 6623 * @license lucide-react v0.487.0 - ISC 6624 * 6625 * This source code is licensed under the ISC license. 6626 * See the LICENSE file in the root directory of this source tree. 6627 */ 6628const id = [ 6629 [ 6630 "path", 6631 { 6632 d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z", 6633 key: "oel41y" 6634 } 6635 ] 6636], rd = T("shield", id); 6637/** 6638 * @license lucide-react v0.487.0 - ISC 6639 * 6640 * This source code is licensed under the ISC license. 6641 * See the LICENSE file in the root directory of this source tree. 6642 */ 6643const nd = [ 6644 ["path", { d: "m18 14 4 4-4 4", key: "10pe0f" }], 6645 ["path", { d: "m18 2 4 4-4 4", key: "pucp1d" }], 6646 ["path", { d: "M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22", key: "1ailkh" }], 6647 ["path", { d: "M2 6h1.972a4 4 0 0 1 3.6 2.2", key: "km57vx" }], 6648 ["path", { d: "M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45", key: "os18l9" }] 6649], ai = T("shuffle", nd); 6650/** 6651 * @license lucide-react v0.487.0 - ISC 6652 * 6653 * This source code is licensed under the ISC license. 6654 * See the LICENSE file in the root directory of this source tree. 6655 */ 6656const od = [ 6657 ["rect", { width: "14", height: "20", x: "5", y: "2", rx: "2", ry: "2", key: "1yt0o3" }], 6658 ["path", { d: "M12 18h.01", key: "mhygvu" }] 6659], Fe = T("smartphone", od); 6660/** 6661 * @license lucide-react v0.487.0 - ISC 6662 * 6663 * This source code is licensed under the ISC license. 6664 * See the LICENSE file in the root directory of this source tree. 6665 */ 6666const Ld = [ 6667 ["path", { d: "M7 20h10", key: "e6iznv" }], 6668 ["path", { d: "M10 20c5.5-2.5.8-6.4 3-10", key: "161w41" }], 6669 [ 6670 "path", 6671 { 6672 d: "M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z", 6673 key: "9gtqwd" 6674 } 6675 ], 6676 [ 6677 "path", 6678 { 6679 d: "M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z", 6680 key: "bkxnd2" 6681 } 6682 ] 6683], cd = T("sprout", Ld); 6684/** 6685 * @license lucide-react v0.487.0 - ISC 6686 * 6687 * This source code is licensed under the ISC license. 6688 * See the LICENSE file in the root directory of this source tree. 6689 */ 6690const ld = [ 6691 ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }], 6692 ["path", { d: "M8 12h8", key: "1wcyev" }], 6693 ["path", { d: "M12 8v8", key: "napkw2" }] 6694], dd = T("square-plus", ld); 6695/** 6696 * @license lucide-react v0.487.0 - ISC 6697 * 6698 * This source code is licensed under the ISC license. 6699 * See the LICENSE file in the root directory of this source tree. 6700 */ 6701const gd = [ 6702 ["path", { d: "M11 2v2", key: "1539x4" }], 6703 ["path", { d: "M5 2v2", key: "1yf1q8" }], 6704 ["path", { d: "M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1", key: "rb5t3r" }], 6705 ["path", { d: "M8 15a6 6 0 0 0 12 0v-3", key: "x18d4x" }], 6706 ["circle", { cx: "20", cy: "10", r: "2", key: "ts1r5v" }] 6707], fd = T("stethoscope", gd); 6708/** 6709 * @license lucide-react v0.487.0 - ISC 6710 * 6711 * This source code is licensed under the ISC license. 6712 * See the LICENSE file in the root directory of this source tree. 6713 */ 6714const pd = [
6715 ["path", { d: "m2 7 4.41-4.41A2 2 0 0 1 7.83 2h8.34a2 2 0 0 1 1.42.59L22 7", key: "ztvudi" }], 6716 ["path", { d: "M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8", key: "1b2hhj" }], 6717 ["path", { d: "M15 22v-4a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v4", key: "2ebpfo" }], 6718 ["path", { d: "M2 7h20", key: "1fcdvo" }], 6719 [ 6720 "path", 6721 { 6722 d: "M22 7v3a2 2 0 0 1-2 2a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 16 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 12 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 8 12a2.7 2.7 0 0 1-1.59-.63.7.7 0 0 0-.82 0A2.7 2.7 0 0 1 4 12a2 2 0 0 1-2-2V7", 6723 key: "6c3vgh" 6724 } 6725 ] 6726], Md = T("store", pd); 6727/** 6728 * @license lucide-react v0.487.0 - ISC 6729 * 6730 * This source code is licensed under the ISC license. 6731 * See the LICENSE file in the root directory of this source tree. 6732 */ 6733const ud = [ 6734 ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }], 6735 ["line", { x1: "12", x2: "12.01", y1: "18", y2: "18", key: "1dp563" }] 6736], e0 = T("tablet", ud); 6737/** 6738 * @license lucide-react v0.487.0 - ISC 6739 * 6740 * This source code is licensed under the ISC license. 6741 * See the LICENSE file in the root directory of this source tree. 6742 */ 6743const hd = [ 6744 [ 6745 "path", 6746 { 6747 d: "M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z", 6748 key: "vktsd0" 6749 } 6750 ], 6751 ["circle", { cx: "7.5", cy: "7.5", r: ".5", fill: "currentColor", key: "kqv944" }] 6752], G4 = T("tag", hd); 6753/** 6754 * @license lucide-react v0.487.0 - ISC 6755 * 6756 * This source code is licensed under the ISC license. 6757 * See the LICENSE file in the root directory of this source tree. 6758 */ 6759const md = [ 6760 ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], 6761 ["circle", { cx: "12", cy: "12", r: "6", key: "1vlfrh" }], 6762 ["circle", { cx: "12", cy: "12", r: "2", key: "1c9p78" }] 6763], xd = T("target", md); 6764/** 6765 * @license lucide-react v0.487.0 - ISC 6766 * 6767 * This source code is licensed under the ISC license. 6768 * See the LICENSE file in the root directory of this source tree. 6769 */ 6770const _d = [ 6771 ["path", { d: "M17 14V2", key: "8ymqnk" }], 6772 [ 6773 "path", 6774 { 6775 d: "M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z", 6776 key: "m61m77" 6777 } 6778 ] 6779], bd = T("thumbs-down", _d); 6780/** 6781 * @license lucide-react v0.487.0 - ISC 6782 * 6783 * This source code is licensed under the ISC license. 6784 * See the LICENSE file in the root directory of this source tree. 6785 */ 6786const vd = [ 6787 ["path", { d: "M7 10v12", key: "1qc93n" }], 6788 [ 6789 "path", 6790 { 6791 d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z", 6792 key: "emmmcr" 6793 } 6794 ] 6795], yd = T("thumbs-up", vd); 6796/** 6797 * @license lucide-react v0.487.0 - ISC 6798 * 6799 * This source code is licensed under the ISC license. 6800 * See the LICENSE file in the root directory of this source tree. 6801 */ 6802const wd = [ 6803 [ 6804 "path", 6805 { 6806 d: "M8 19a4 4 0 0 1-2.24-7.32A3.5 3.5 0 0 1 9 6.03V6a3 3 0 1 1 6 0v.04a3.5 3.5 0 0 1 3.24 5.65A4 4 0 0 1 16 19Z", 6807 key: "oadzkq" 6808 } 6809 ], 6810 ["path", { d: "M12 19v3", key: "npa21l" }] 6811], Td = T("tree-deciduous", wd); 6812/** 6813 * @license lucide-react v0.487.0 - ISC 6814 * 6815 * This source code is licensed under the ISC license. 6816 * See the LICENSE file in the root directory of this source tree. 6817 */ 6818const Sd = [ 6819 [ 6820 "path", 6821 { 6822 d: "m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z", 6823 key: "cpyugq" 6824 } 6825 ], 6826 ["path", { d: "M12 22v-3", key: "kmzjlo" }] 6827], Bd = T("tree-pine", Sd); 6828/** 6829 * @license lucide-react v0.487.0 - ISC 6830 * 6831 * This source code is licensed under the ISC license. 6832 * See the LICENSE file in the root directory of this source tree. 6833 */ 6834const kd = [ 6835 ["polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7", key: "1r2t7k" }], 6836 ["polyline", { points: "16 17 22 17 22 11", key: "11uiuu" }] 6837], Ad = T("trending-down", kd); 6838/** 6839 * @license lucide-react v0.487.0 - ISC 6840 * 6841 * This source code is licensed under the ISC license. 6842 * See the LICENSE file in the root directory of this source tree. 6843 */ 6844const Nd = [ 6845 ["polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17", key: "126l90" }], 6846 ["polyline", { points: "16 7 22 7 22 13", key: "kwv8wd" }] 6847], E3 = T("trending-up", Nd); 6848/** 6849 * @license lucide-react v0.487.0 - ISC 6850 * 6851 * This source code is licensed under the ISC license. 6852 * See the LICENSE file in the root directory of this source tree. 6853 */ 6854const Id = [ 6855 [ 6856 "path", 6857 { 6858 d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3", 6859 key: "wmoenq" 6860 } 6861 ], 6862 ["path", { d: "M12 9v4", key: "juzpu7" }], 6863 ["path", { d: "M12 17h.01", key: "p32p05" }]
6864], R3 = T("triangle-alert", Id); 6865/** 6866 * @license lucide-react v0.487.0 - ISC 6867 * 6868 * This source code is licensed under the ISC license. 6869 * See the LICENSE file in the root directory of this source tree. 6870 */ 6871const Pd = [ 6872 ["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }], 6873 ["path", { d: "M15 18H9", key: "1lyqi6" }], 6874 [ 6875 "path", 6876 { 6877 d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14", 6878 key: "lysw3i" 6879 } 6880 ], 6881 ["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }], 6882 ["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }] 6883], si = T("truck", Pd); 6884/** 6885 * @license lucide-react v0.487.0 - ISC 6886 * 6887 * This source code is licensed under the ISC license. 6888 * See the LICENSE file in the root directory of this source tree. 6889 */ 6890const Cd = [ 6891 ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }], 6892 ["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }], 6893 ["polyline", { points: "16 11 18 13 22 9", key: "1pwet4" }] 6894], Fd = T("user-check", Cd); 6895/** 6896 * @license lucide-react v0.487.0 - ISC 6897 * 6898 * This source code is licensed under the ISC license. 6899 * See the LICENSE file in the root directory of this source tree. 6900 */ 6901const Ed = [ 6902 ["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }], 6903 ["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }] 6904], v2 = T("user", Ed); 6905/** 6906 * @license lucide-react v0.487.0 - ISC 6907 * 6908 * This source code is licensed under the ISC license. 6909 * See the LICENSE file in the root directory of this source tree. 6910 */ 6911const Rd = [ 6912 ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }], 6913 ["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }], 6914 ["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87", key: "kshegd" }], 6915 ["path", { d: "M16 3.13a4 4 0 0 1 0 7.75", key: "1da9ce" }] 6916], h1 = T("users", Rd); 6917/** 6918 * @license lucide-react v0.487.0 - ISC 6919 * 6920 * This source code is licensed under the ISC license. 6921 * See the LICENSE file in the root directory of this source tree. 6922 */ 6923const Dd = [ 6924 [ 6925 "path", 6926 { 6927 d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z", 6928 key: "cbrjhi" 6929 } 6930 ] 6931], zd = T("wrench", Dd); 6932/** 6933 * @license lucide-react v0.487.0 - ISC 6934 * 6935 * This source code is licensed under the ISC license. 6936 * See the LICENSE file in the root directory of this source tree. 6937 */ 6938const jd = [ 6939 ["path", { d: "M18 6 6 18", key: "1bl5f8" }], 6940 ["path", { d: "m6 6 12 12", key: "d8bk6v" }] 6941], D3 = T("x", jd); 6942/** 6943 * @license lucide-react v0.487.0 - ISC 6944 * 6945 * This source code is licensed under the ISC license. 6946 * See the LICENSE file in the root directory of this source tree. 6947 */ 6948const Od = [ 6949 [ 6950 "path", 6951 { 6952 d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z", 6953 key: "1xq2db" 6954 } 6955 ] 6956], Te = T("zap", Od), ii = r1({ 6957 isOpen: !1, 6958 openContactModal: () => { 6959 }, 6960 closeContactModal: () => { 6961 } 6962}); 6963function Z() { 6964 return oe(ii); 6965} 6966function Vd({ children: t }) { 6967 const [e, s] = j(!1), r = Ge(() => s(!0), []), n = Ge(() => s(!1), []); 6968 return /* @__PURE__ */ i(a, { _fgT: ii.Provider, _fgS: "cnbh0", _fgB: 1790697589400, _fgD: !0, value: { isOpen: e, openContactModal: r, closeContactModal: n }, "data-fg-cnbh0": ":0:/src/app/components/ContactModalContext.tsx:26:5:715:139:e:ContactModalContext.Provider:c:1", children: t }); 6969} 6970const Hd = globalThis.__GLOBALS__.getAssetURL("cd85615b0ba2fff565ee759ebd86f5ea1899588c.png"); 6971function Zd() { 6972 const [t, e] = j(!1), [s, r] = j(!1), { scrollY: n } = D7(), [o] = p5(), { openContactModal: L } = Z(); 6973 F7(n, "change", (h) => { 6974 e(h > 50); 6975 }); 6976 const d = () => { 6977 r(!1); 6978 }, l = (h) => o === h, g = (h) => h.some((x) => o === x), f = ["/markets", "/microtransit", "/paratransit", "/nemt", "/markets/fixed-route", "/taxi-dispatch"], p = ["/about", "/news-articles"], u = ["/all-in-one-platform", ...["/ai-solutions", "/ai/voice", "/ai/digital", "/ai/analytics", "/ai/feedback", "/ai/workshop"]]; 6979 return /* @__PURE__ */ c( 6980 a, 6981 { 6982 _fgT: "nav", 6983 _fgS: "cqpb0", 6984 _fgB: 1790697589380, 6985 _fgD: !0, 6986 className: `fixed top-0 left-0 right-0 z-50 transition-all duration-300 bg-white ${t ? "py-3 shadow-sm" : "py-6"}`, 6987 "data-fg-cqpb0": ":0:/src/app/components/Navbar.tsx:35:5:1389:9603:e:nav:etxtx:1", 6988 children: [
6989 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb1", _fgB: 1790697589380, className: "max-w-7xl mx-auto px-6 flex items-center justify-between", "data-fg-cqpb1": ":0:/src/app/components/Navbar.tsx:40:7:1553:5714:e:div:etxtetxte", children: [ 6990 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb2", _fgB: 1790697589380, href: "/", "data-fg-cqpb2": ":0:node_modules/wouter:41:9:1636:286:e:Link:e:::::C4yE", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb3", _fgB: 1790697589380, className: "flex items-center gap-2 cursor-pointer", "data-fg-cqpb3": ":0:/src/app/components/Navbar.tsx:42:11:1662:244:e:div:e", children: /* @__PURE__ */ i( 6991 a, 6992 { 6993 _fgT: "img", 6994 _fgS: "cqpb4", 6995 _fgB: 1790697589380, 6996 src: Hd, 6997 alt: "IT Curves", 6998 className: "h-10 w-auto object-contain transition-all duration-300", 6999 "data-fg-cqpb4": ":0:/src/app/components/Navbar.tsx:43:13:1731:158:e:img" 7000 } 7001 ) }) }),
7002 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb6", _fgB: 1790697589380, className: "hidden md:flex items-center gap-8 text-[13px] uppercase tracking-widest transition-colors text-black font-[Inter]", style: { fontWeight: 600 }, "data-fg-cqpb6": ":0:/src/app/components/Navbar.tsx:52:9:1961:4962:e:div:xtetxtetxtete", children: [ 7003 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb8", _fgB: 1790697589380, className: "relative group", "data-fg-cqpb8": ":0:/src/app/components/Navbar.tsx:55:11:2177:1759:e:div:ete", children: [ 7004 /* @__PURE__ */ c(a, { _fgT: E, _fgS: "cqpb9", _fgB: 1790697589380, href: "/markets", className: `flex items-center gap-1 hover:text-[#EFBB0F] transition-colors focus:outline-none font-[inherit] text-[13px] tracking-[inherit] uppercase ${g(f) ? "text-[#EFBB0F]" : ""}`, style: { fontWeight: 600, letterSpacing: "inherit" }, "data-fg-cqpb9": ":0:node_modules/wouter:56:13:2222:355:e:Link:te:::::C4yE", children: [ 7005 "Our Markets ", 7006 /* @__PURE__ */ i(a, { _fgT: t3, _fgS: "cqpb11", _fgB: 1790697589380, size: 14, "data-fg-cqpb11": ":0:node_modules/lucide-react:57:27:2532:25:e:ChevronDown::::::Ddn3" }) 7007 ] }),
7008 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb12", _fgB: 1790697589380, className: "absolute top-full left-0 pt-4 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform translate-y-2 group-hover:translate-y-0", "data-fg-cqpb12": ":0:/src/app/components/Navbar.tsx:60:13:2603:1316:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb13", _fgB: 1790697589380, className: "bg-white rounded-xl shadow-xl border border-slate-100 overflow-hidden min-w-[220px] flex flex-col text-slate-800 py-2", "data-fg-cqpb13": ":0:/src/app/components/Navbar.tsx:61:15:2807:1093:e:div:etetetete", children: [ 7009 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb14", _fgB: 1790697589380, href: "/markets/fixed-route", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb14": ":0:node_modules/wouter:62:17:2959:177:e:Link:t:::::C4yE", children: "Fixed Route" }), 7010 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb16", _fgB: 1790697589380, href: "/paratransit", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb16": ":0:node_modules/wouter:65:17:3153:169:e:Link:t:::::C4yE", children: "Paratransit" }),
7011 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb18", _fgB: 1790697589380, href: "/microtransit", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb18": ":0:node_modules/wouter:68:17:3339:171:e:Link:t:::::C4yE", children: "Microtransit" }), 7012 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb20", _fgB: 1790697589380, href: "/nemt", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb20": ":0:node_modules/wouter:71:17:3527:155:e:Link:t:::::C4yE", children: "NEMT" }), 7013 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb22", _fgB: 1790697589380, href: "/taxi-dispatch", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb22": ":0:node_modules/wouter:74:17:3699:180:e:Link:t:::::C4yE", children: "Private TNC's & Taxi" }) 7014 ] }) }) 7015 ] }), 7016 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb25", _fgB: 1790697589380, className: "relative group", "data-fg-cqpb25": ":0:/src/app/components/Navbar.tsx:82:11:3985:1387:e:div:ete", children: [
7017 /* @__PURE__ */ c(a, { _fgT: "button", _fgS: "cqpb26", _fgB: 1790697589380, className: `flex items-center gap-1 hover:text-[#EFBB0F] transition-colors focus:outline-none font-[inherit] text-[13px] tracking-[inherit] uppercase ${g(u) ? "text-[#EFBB0F]" : ""}`, style: { fontWeight: 600, letterSpacing: "inherit" }, "data-fg-cqpb26": ":0:/src/app/components/Navbar.tsx:83:13:4030:344:e:button:te", children: [ 7018 "Solutions ", 7019 /* @__PURE__ */ i(a, { _fgT: t3, _fgS: "cqpb28", _fgB: 1790697589380, size: 14, "data-fg-cqpb28": ":0:node_modules/lucide-react:84:25:4327:25:e:ChevronDown::::::Ddn3" }) 7020 ] }), 7021 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb29", _fgB: 1790697589380, className: "absolute top-full left-0 pt-4 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform translate-y-2 group-hover:translate-y-0", "data-fg-cqpb29": ":0:/src/app/components/Navbar.tsx:87:13:4400:955:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb30", _fgB: 1790697589380, className: "bg-white rounded-xl shadow-xl border border-slate-100 overflow-hidden min-w-[240px] flex flex-col text-slate-800 py-2", "data-fg-cqpb30": ":0:/src/app/components/Navbar.tsx:88:15:4604:732:e:div:etete", children: [
7022 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb31", _fgB: 1790697589380, href: "/all-in-one-platform", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb31": ":0:node_modules/wouter:89:17:4756:185:e:Link:t:::::C4yE", children: "All-In-One Platform" }), 7023 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb33", _fgB: 1790697589380, href: "/ai-solutions", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb33": ":0:node_modules/wouter:92:17:4958:171:e:Link:t:::::C4yE", children: "AI Solutions" }), 7024 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb35", _fgB: 1790697589380, href: "/ai/workshop", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb35": ":0:node_modules/wouter:95:17:5146:169:e:Link:t:::::C4yE", children: "AI Workshop" }) 7025 ] }) }) 7026 ] }), 7027 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb38", _fgB: 1790697589380, className: "relative group", "data-fg-cqpb38": ":0:/src/app/components/Navbar.tsx:103:11:5427:1172:e:div:ete", children: [
7028 /* @__PURE__ */ c(a, { _fgT: "button", _fgS: "cqpb39", _fgB: 1790697589380, className: `flex items-center gap-1 hover:text-[#EFBB0F] transition-colors focus:outline-none font-[inherit] text-[13px] tracking-[inherit] uppercase ${g(p) ? "text-[#EFBB0F]" : ""}`, style: { fontWeight: 600, letterSpacing: "inherit" }, "data-fg-cqpb39": ":0:/src/app/components/Navbar.tsx:104:13:5472:336:e:button:te", children: [ 7029 "About ", 7030 /* @__PURE__ */ i(a, { _fgT: t3, _fgS: "cqpb41", _fgB: 1790697589380, size: 14, "data-fg-cqpb41": ":0:node_modules/lucide-react:105:21:5761:25:e:ChevronDown::::::Ddn3" }) 7031 ] }), 7032 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb42", _fgB: 1790697589380, className: "absolute top-full right-0 pt-4 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform translate-y-2 group-hover:translate-y-0", "data-fg-cqpb42": ":0:/src/app/components/Navbar.tsx:108:13:5834:748:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb43", _fgB: 1790697589380, className: "bg-white rounded-xl shadow-xl border border-slate-100 overflow-hidden min-w-[200px] flex flex-col text-slate-800 py-2", "data-fg-cqpb43": ":0:/src/app/components/Navbar.tsx:109:15:6039:524:e:div:ete", children: [
7033 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb44", _fgB: 1790697589380, href: "/about", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb44": ":0:node_modules/wouter:110:17:6191:159:e:Link:t:::::C4yE", children: "Company" }), 7034 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb46", _fgB: 1790697589380, href: "/news-articles", className: "px-6 py-3 hover:bg-slate-50 hover:text-[#EFBB0F] transition-colors text-left", "data-fg-cqpb46": ":0:node_modules/wouter:113:17:6367:175:e:Link:t:::::C4yE", children: "News & Articles" }) 7035 ] }) }) 7036 ] }), 7037 /* @__PURE__ */ i( 7038 a, 7039 { 7040 _fgT: E, 7041 _fgS: "cqpb48", 7042 _fgB: 1790697589380, 7043 href: "/contact", 7044 className: "px-6 py-3 hover:bg-opacity-90 transition-all rounded-lg bg-[rgb(239,187,15)] text-black hover:bg-[rgb(210,165,10)] hover:text-white cursor-pointer", 7045 style: { fontWeight: 700 }, 7046 "data-fg-cqpb48": ":0:node_modules/wouter:120:11:6611:297:e:Link:t:::::C4yE", 7047 children: "Contact Us" 7048 } 7049 ) 7050 ] }),
7051 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb51", _fgB: 1790697589380, className: "md:hidden", "data-fg-cqpb51": ":0:/src/app/components/Navbar.tsx:130:9:6968:286:e:div:e", children: /* @__PURE__ */ i( 7052 a, 7053 { 7054 _fgT: "button", 7055 _fgS: "cqpb52", 7056 _fgB: 1790697589380, 7057 onClick: () => r(!s), 7058 className: "p-2 transition-colors text-black", 7059 "data-fg-cqpb52": ":0:/src/app/components/Navbar.tsx:131:11:7006:233:e:button:x", 7060 children: s ? /* @__PURE__ */ i(a, { _fgT: D3, _fgS: "cqpb54", _fgB: 1790697589380, size: 24, "data-fg-cqpb54": ":0:node_modules/lucide-react:135:33:7182:15:e:X::::::TvS" }) : /* @__PURE__ */ i(a, { _fgT: kl, _fgS: "cqpb55", _fgB: 1790697589380, size: 24, "data-fg-cqpb55": ":0:node_modules/lucide-react:135:51:7200:18:e:Menu::::::D5X5" }) 7061 } 7062 ) }) 7063 ] }), 7064 s && /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb58", _fgB: 1790697589380, className: "md:hidden absolute top-full left-0 right-0 bg-black border-t border-white/10 p-6 flex flex-col gap-6 text-white text-sm font-semibold uppercase tracking-widest max-h-[80vh] overflow-y-auto", "data-fg-cqpb58": ":0:/src/app/components/Navbar.tsx:142:9:7332:3640:e:div:xtetxtetxtete", children: [
7065 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb60", _fgB: 1790697589380, className: "flex flex-col gap-4", "data-fg-cqpb60": ":0:/src/app/components/Navbar.tsx:145:11:7601:1602:e:div:ete", children: [ 7066 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cqpb61", _fgB: 1790697589380, className: "flex items-center justify-between", onClick: d, "data-fg-cqpb61": ":0:/src/app/components/Navbar.tsx:146:14:7652:272:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb62", _fgB: 1790697589380, href: "/markets", className: `hover:text-[#EFBB0F] ${l("/markets") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb62": ":0:node_modules/wouter:147:17:7745:159:e:Link:t:::::C4yE", children: "Our Markets" }) }), 7067 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb64", _fgB: 1790697589380, className: "flex flex-col gap-3 pl-4 border-l border-white/10", "data-fg-cqpb64": ":0:/src/app/components/Navbar.tsx:151:14:7938:1248:e:div:etetetete", children: [ 7068 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb65", _fgB: 1790697589380, href: "/markets/fixed-route", onClick: d, className: `text-xs hover:text-[#EFBB0F] ${l("/markets/fixed-route") ? "text-[#EFBB0F]" : "text-white/70"}`, "data-fg-cqpb65": ":0:node_modules/wouter:152:17:8022:229:e:Link:t:::::C4yE", children: "Fixed Route" }),
7069 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb67", _fgB: 1790697589380, href: "/paratransit", onClick: d, className: `text-xs hover:text-[#EFBB0F] ${l("/paratransit") ? "text-[#EFBB0F]" : "text-white/70"}`, "data-fg-cqpb67": ":0:node_modules/wouter:155:17:8268:213:e:Link:t:::::C4yE", children: "Paratransit" }), 7070 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb69", _fgB: 1790697589380, href: "/microtransit", onClick: d, className: `text-xs hover:text-[#EFBB0F] ${l("/microtransit") ? "text-[#EFBB0F]" : "text-white/70"}`, "data-fg-cqpb69": ":0:node_modules/wouter:158:17:8498:216:e:Link:t:::::C4yE", children: "Microtransit" }), 7071 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb71", _fgB: 1790697589380, href: "/nemt", onClick: d, className: `text-xs hover:text-[#EFBB0F] ${l("/nemt") ? "text-[#EFBB0F]" : "text-white/70"}`, "data-fg-cqpb71": ":0:node_modules/wouter:161:17:8731:192:e:Link:t:::::C4yE", children: "NEMT" }), 7072 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb73", _fgB: 1790697589380, href: "/taxi-dispatch", onClick: d, className: `text-xs hover:text-[#EFBB0F] ${l("/taxi-dispatch") ? "text-[#EFBB0F]" : "text-white/70"}`, "data-fg-cqpb73": ":0:node_modules/wouter:164:17:8940:226:e:Link:t:::::C4yE", children: "Private TNC's & Taxi" }) 7073 ] }) 7074 ] }),
7075 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb76", _fgB: 1790697589380, className: "flex flex-col gap-4", "data-fg-cqpb76": ":0:/src/app/components/Navbar.tsx:171:11:9258:797:e:div:etetete", children: [ 7076 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cqpb77", _fgB: 1790697589380, className: "text-white/50 text-xs font-bold uppercase tracking-widest pl-2", "data-fg-cqpb77": ":0:/src/app/components/Navbar.tsx:172:13:9308:97:e:span:t", children: "Solutions" }), 7077 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb79", _fgB: 1790697589380, href: "/all-in-one-platform", onClick: d, className: `hover:text-[#EFBB0F] pl-4 ${l("/all-in-one-platform") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb79": ":0:node_modules/wouter:173:13:9418:213:e:Link:t:::::C4yE", children: "All-In-One Platform" }), 7078 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb81", _fgB: 1790697589380, href: "/ai-solutions", onClick: d, className: `hover:text-[#EFBB0F] pl-4 ${l("/ai-solutions") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb81": ":0:node_modules/wouter:176:13:9644:192:e:Link:t:::::C4yE", children: "AI Solutions" }),
7079 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb83", _fgB: 1790697589380, href: "/ai/workshop", onClick: d, className: `hover:text-[#EFBB0F] pl-4 ${l("/ai/workshop") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb83": ":0:node_modules/wouter:179:13:9849:189:e:Link:t:::::C4yE", children: "AI Workshop" }) 7080 ] }), 7081 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cqpb86", _fgB: 1790697589380, className: "flex flex-col gap-4 border-t border-white/10 pt-4 mt-2", "data-fg-cqpb86": ":0:/src/app/components/Navbar.tsx:185:11:10116:594:e:div:etete", children: [ 7082 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cqpb87", _fgB: 1790697589380, className: "text-white/50 text-xs font-bold uppercase tracking-widest pl-2", "data-fg-cqpb87": ":0:/src/app/components/Navbar.tsx:186:13:10201:96:e:span:t", children: "About Us" }), 7083 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb89", _fgB: 1790697589380, href: "/about", onClick: d, className: `hover:text-[#EFBB0F] pl-4 ${l("/about") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb89": ":0:node_modules/wouter:187:13:10310:173:e:Link:t:::::C4yE", children: "Company" }),
7084 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cqpb91", _fgB: 1790697589380, href: "/news-articles", onClick: d, className: `hover:text-[#EFBB0F] pl-4 ${l("/news-articles") ? "text-[#EFBB0F]" : ""}`, "data-fg-cqpb91": ":0:node_modules/wouter:190:13:10496:197:e:Link:t:::::C4yE", children: "News & Articles" }) 7085 ] }), 7086 /* @__PURE__ */ i( 7087 a, 7088 { 7089 _fgT: E, 7090 _fgS: "cqpb93", 7091 _fgB: 1790697589380, 7092 href: "/contact", 7093 onClick: d, 7094 className: "bg-[#EFBB0F] text-black px-6 py-3 text-center font-bold rounded-lg cursor-pointer block", 7095 "data-fg-cqpb93": ":0:node_modules/wouter:195:11:10722:235:e:Link:t:::::C4yE", 7096 children: "Contact Us" 7097 } 7098 ) 7099 ] }) 7100 ] 7101 } 7102 ); 7103} 7104function Wd() { 7105 const [t] = p5(); 7106 return q(() => { 7107 window.scrollTo(0, 0); 7108 }, [t]), null; 7109} 7110function $d() { 7111 return q(() => { 7112 const t = "flexagents-embed"; 7113 if (document.getElementById(t)) return; 7114 const e = document.createElement("script"); 7115 e.id = t, e.src = "https://dashboard.flexagents.ai/embed.js", e.async = !0, e.setAttribute("data-agent-id", "6a79fab9e4183b30d903cf71"), e.setAttribute("data-org-id", "6a797c79e4183b30d903cf62"), e.setAttribute("data-color", "#0f172a"), e.setAttribute("data-position", "right"), document.body.appendChild(e); 7116 }, []), null; 7117} 7118function qd() { 7119 const { isOpen: t, closeContactModal: e } = Z(), s = H(!1); 7120 return q(() => (t ? document.body.style.overflow = "hidden" : document.body.style.overflow = "", () => { 7121 document.body.style.overflow = ""; 7122 }), [t]), q(() => { 7123 const r = (n) => { 7124 n.key === "Escape" && t && e(); 7125 }; 7126 return window.addEventListener("keydown", r), () => window.removeEventListener("keydown", r); 7127 }, [t, e]), /* @__PURE__ */ c(C, { children: [ 7128 /* @__PURE__ */ i( 7129 a, 7130 { 7131 _fgT: "div", 7132 _fgS: "bxly2", 7133 _fgB: 1790697589409, 7134 "aria-hidden": "true", 7135 style: { 7136 position: "fixed", 7137 width: 0, 7138 height: 0, 7139 overflow: "hidden", 7140 opacity: 0, 7141 pointerEvents: "none", 7142 zIndex: -1 7143 }, 7144 "data-fg-bxly2": ":0:/src/app/components/ContactModal.tsx:34:7:980:546:e:div:e", 7145 children: /* @__PURE__ */ i( 7146 a, 7147 { 7148 _fgT: "iframe", 7149 _fgS: "bxly3", 7150 _fgB: 1790697589409, 7151 src: "https://meetings.hubspot.com/itcurves/sales-meeting?embed=true", 7152 title: "Schedule a Meeting (preload)", 7153 width: "1", 7154 height: "1", 7155 style: { border: "none" }, 7156 onLoad: () => { 7157 s.current = !0; 7158 }, 7159 "data-fg-bxly3": ":0:/src/app/components/ContactModal.tsx:4
71596:9:1233:280:e:iframe" 7160 } 7161 ) 7162 } 7163 ), 7164 /* @__PURE__ */ c( 7165 a, 7166 { 7167 _fgT: "div", 7168 _fgS: "bxly5", 7169 _fgB: 1790697589409, 7170 className: "fixed inset-0 z-[9999] flex items-center justify-center p-4", 7171 style: { 7172 opacity: t ? 1 : 0, 7173 visibility: t ? "visible" : "hidden", 7174 transition: "opacity 0.25s ease, visibility 0.25s ease", 7175 pointerEvents: t ? "auto" : "none" 7176 }, 7177 "data-fg-bxly5": ":0:/src/app/components/ContactModal.tsx:57:7:1608:2448:e:div:xtetxte", 7178 children: [ 7179 /* @__PURE__ */ i( 7180 a, 7181 { 7182 _fgT: "div", 7183 _fgS: "bxly7", 7184 _fgB: 1790697589409, 7185 className: "absolute inset-0 bg-black/60 backdrop-blur-sm", 7186 onClick: e, 7187 "data-fg-bxly7": ":0:/src/app/components/ContactModal.tsx:67:9:1968:121:e:div" 7188 } 7189 ), 7190 /* @__PURE__ */ c( 7191 a, 7192 { 7193 _fgT: m.div, 7194 _fgS: "bxly9", 7195 _fgB: 1790697589409, 7196 className: "relative w-full max-w-[700px] max-h-[90vh] bg-white rounded-2xl shadow-2xl border border-slate-100 z-10 flex flex-col", 7197 animate: t ? { opacity: 1, y: 0, scale: 1 } : { opacity: 0, y: 40, scale: 0.95 }, 7198 transition: { duration: 0.3, ease: [0.22, 1, 0.36, 1] }, 7199 "data-fg-bxly9": ":0:/src/app/components/ContactModal.tsx:73:9:2127:1916:e:motion.div:xtetxtetxte", 7200 children: [
7201 /* @__PURE__ */ i( 7202 a, 7203 { 7204 _fgT: "button", 7205 _fgS: "bxly11", 7206 _fgB: 1790697589409, 7207 onClick: e, 7208 className: "absolute top-4 right-4 z-20 text-slate-400 hover:text-slate-800 transition-colors p-1.5 hover:bg-slate-100 rounded-lg", 7209 "data-fg-bxly11": ":0:/src/app/components/ContactModal.tsx:83:11:2546:249:e:button:e", 7210 children: /* @__PURE__ */ i(a, { _fgT: D3, _fgS: "bxly12", _fgB: 1790697589409, size: 20, "data-fg-bxly12": ":0:node_modules/lucide-react:87:13:2760:15:e:X::::::TvS" }) 7211 } 7212 ), 7213 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bxly14", _fgB: 1790697589409, className: "p-6 sm:p-8 pb-4 border-b border-slate-100 shrink-0", "data-fg-bxly14": ":0:/src/app/components/ContactModal.tsx:91:11:2832:345:e:div:ete", children: [ 7214 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bxly15", _fgB: 1790697589409, className: "text-xl sm:text-2xl font-bold text-slate-900 tracking-tight", "data-fg-bxly15": ":0:/src/app/components/ContactModal.tsx:92:13:2913:127:e:h3:t", children: "Schedule a Meeting" }),
7215 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bxly17", _fgB: 1790697589409, className: "text-sm text-slate-500 mt-1", "data-fg-bxly17": ":0:/src/app/components/ContactModal.tsx:95:13:3053:107:e:p:t", children: "Choose a time that works for you" }) 7216 ] }), 7217 /* @__PURE__ */ i( 7218 a, 7219 { 7220 _fgT: "div", 7221 _fgS: "bxly20", 7222 _fgB: 1790697589409, 7223 className: "flex-1 overflow-y-auto overscroll-contain p-4 sm:p-6", 7224 style: { WebkitOverflowScrolling: "touch" }, 7225 "data-fg-bxly20": ":0:/src/app/components/ContactModal.tsx:101:11:3250:771:e:div:e", 7226 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bxly21", _fgB: 1790697589409, className: "relative w-full", style: { minHeight: "660px" }, "data-fg-bxly21": ":0:/src/app/components/ContactModal.tsx:105:13:3413:591:e:div:e", children: /* @__PURE__ */ i( 7227 a, 7228 { 7229 _fgT: "iframe", 7230 _fgS: "bxly22", 7231 _fgB: 1790697589409, 7232 src: "https://meetings.hubspot.com/itcurves/sales-meeting?embed=true", 7233 width: "100%", 7234 height: "660", 7235 frameBorder: "0", 7236 scrolling: "yes", 7237 allow: "fullscreen", 7238 style: { 7239 border: "none", 7240 minHeight: "660px", 7241 width: "1px", 7242 minWidth: "100%" 7243 }, 7244 title: "Schedule a Meeting", 7245 "data-fg-bxly22": ":0:/src/app/components/ContactModal.tsx:106:15:3492:493:e:iframe" 7246 } 7247 ) }) 7248 } 7249 ) 7250 ] 7251 } 7252 ) 7253 ] 7254 } 7255 ) 7256 ] }); 7257} 7258const Ud = "/_components/v2/6f7c1cc6f4e6b5f46153147a1b8d898db9975c9c/hero-background-new-website2.9b1046f9.jpg", Gd = globalThis.__GLOBALS__.getAssetURL("b0bb89aabcc7b14684b682ee09a1c12ee0266ee0.png"), za = { 7259 hidden: { scale: 1.08, opacity: 0 }, 7260 visible: { 7261 scale: 1, 7262 opacity: 1, 7263 transition: { duration: 1.8, ease: [0.25, 0.46, 0.45, 0.94] } 7264 } 7265}, Jd = { 7266 hidden: {}, 7267 visible: { 7268 transition: { staggerChildren: 0.18, delayChildren: 0.6 } 7269 } 7270}, ja = { 7271 hidden: { opacity: 0, y: 28 }, 7272 visible: { 7273 opacity: 1, 7274 y: 0, 7275 transition: { duration: 0.75, ease: [0.22, 1, 0.36, 1] } 7276 } 7277}, Kd = { 7278 hidden: { opacity: 0, scale: 0.92 }, 7279 visible: { 7280 opacity: 1, 7281 scale: 1, 7282 transition: { duration: 0.55, delay: 1.5, type: "spring", stiffness: 200 } 7283 } 7284}; 7285function Yd() { 7286 const { openContactModal: t } = Z(); 7287 return /* @__PURE__ */ c( 7288 a, 7289 { 7290 _fgT: "section", 7291 _fgS: "b3wz0", 7292 _fgB: 1790697590022, 7293 _fgD: !0, 7294 "aria-label": "Hero", 7295 className: "relative h-[85vh] min-h-[560px] flex items-center justify-start overflow-hidden bg-[#050505]", 7296 "data-fg-b3wz0": ":0:/src/app/components/HeroV2.tsx:48:5:1174:2552:e:section:xtetxtetxtetxte:1", 7297 children: [
7298 /* @__PURE__ */ i( 7299 a, 7300 { 7301 _fgT: m.div, 7302 _fgS: "b3wz2", 7303 _fgB: 1790697590022, 7304 className: "absolute inset-0 bg-cover bg-right md:bg-center bg-no-repeat hidden md:block", 7305 style: { backgroundImage: `url(${Ud})` }, 7306 variants: za, 7307 initial: "hidden", 7308 animate: "visible", 7309 "data-fg-b3wz2": ":0:/src/app/components/HeroV2.tsx:53:7:1396:252:e:motion.div" 7310 } 7311 ), 7312 /* @__PURE__ */ i( 7313 a, 7314 { 7315 _fgT: m.div, 7316 _fgS: "b3wz4", 7317 _fgB: 1790697590022, 7318 className: "absolute inset-0 bg-cover bg-center bg-no-repeat block md:hidden", 7319 style: { backgroundImage: `url(${Gd})` }, 7320 variants: za, 7321 initial: "hidden", 7322 animate: "visible", 7323 "data-fg-b3wz4": ":0:/src/app/components/HeroV2.tsx:62:7:1707:246:e:motion.div" 7324 } 7325 ), 7326 /* @__PURE__ */ i( 7327 a, 7328 { 7329 _fgT: "div", 7330 _fgS: "b3wz6", 7331 _fgB: 1790697590022, 7332 className: "absolute inset-0", 7333 style: { 7334 background: "linear-gradient(105deg, rgba(5,5,5,0.41) 0%, rgba(5,5,5,0.18) 50%, rgba(5,5,5,0.02) 100%)" 7335 }, 7336 "data-fg-b3wz6": ":0:/src/app/components/HeroV2.tsx:71:7:2036:205:e:div" 7337 } 7338 ),
7339 /* @__PURE__ */ c( 7340 a, 7341 { 7342 _fgT: m.div, 7343 _fgS: "b3wz8", 7344 _fgB: 1790697590022, 7345 className: "relative z-10 w-full max-w-7xl mx-auto px-6 md:px-12 lg:px-16 pt-36 md:pt-40 pb-20 flex flex-col items-start", 7346 variants: Jd, 7347 initial: "hidden", 7348 animate: "visible", 7349 "data-fg-b3wz8": ":0:/src/app/components/HeroV2.tsx:80:7:2282:1429:e:motion.div:xtetxtetxte", 7350 children: [ 7351 /* @__PURE__ */ i( 7352 a, 7353 { 7354 _fgT: m.h1, 7355 _fgS: "b3wz10", 7356 _fgB: 1790697590022, 7357 variants: ja, 7358 className: "text-3xl md:text-4xl lg:text-5xl font-bold text-white tracking-tight leading-tight font-space-grotesk max-w-3xl mb-6", 7359 "data-fg-b3wz10": ":0:/src/app/components/HeroV2.tsx:87:9:2552:285:e:motion.h1:t", 7360 children: "Intelligent Software Built for Transit, by Transit Experts" 7361 } 7362 ),
7363 /* @__PURE__ */ i( 7364 a, 7365 { 7366 _fgT: m.p, 7367 _fgS: "b3wz13", 7368 _fgB: 1790697590022, 7369 variants: ja, 7370 className: "text-[#D0D0D0] text-lg md:text-xl font-light mb-10 max-w-xl leading-relaxed", 7371 "data-fg-b3wz13": ":0:/src/app/components/HeroV2.tsx:95:9:2876:257:e:motion.p:t", 7372 children: "Serving Paratransit, Fixed Route, Microtransit, NEMT, and Taxi Operations" 7373 } 7374 ), 7375 /* @__PURE__ */ i( 7376 a, 7377 { 7378 _fgT: m.button, 7379 _fgS: "b3wz16", 7380 _fgB: 1790697590022, 7381 variants: Kd, 7382 initial: "hidden", 7383 animate: "visible", 7384 onClick: t, 7385 whileHover: { scale: 1.05, backgroundColor: "#004494" }, 7386 whileTap: { scale: 0.97 }, 7387 className: "bg-[#0056B3] text-white font-bold px-8 py-4 uppercase tracking-widest rounded-xl shadow-[0_0_24px_rgba(0,86,179,0.35)] hover:shadow-[0_0_36px_rgba(0,86,179,0.55)] transition-shadow cursor-pointer", 7388 "data-fg-b3wz16": ":0:/src/app/components/HeroV2.tsx:103:9:3163:528:e:motion.button:t", 7389 children: "Schedule a Meeting" 7390 } 7391 ) 7392 ] 7393 } 7394 ) 7395 ] 7396 } 7397 ); 7398} 7399const Xd = globalThis.__GLOBALS__.getAssetURL("f6d56eb00d318697fc3e224b7c314922409c78d2.png"); 7400function Qd() { 7401 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "b5w0", _fgB: 1790697590044, _fgD: !0, className: "relative bg-[rgb(13,87,177)] overflow-hidden", "data-fg-b5w0": ":0:/src/app/components/AcquisitionBanner.tsx:8:5:254:2459:e:section:xtete:1", children: [ 7402 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b5w2", _fgB: 1790697590044, className: "absolute inset-0 opacity-5", "data-fg-b5w2": ":0:/src/app/components/AcquisitionBanner.tsx:10:7:367:306:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b5w3", _fgB: 1790697590044, className: "absolute inset-0", style: { 7403 backgroundImage: "radial-gradient(circle at 20% 50%, rgba(239,187,15,0.3) 0%, transparent 50%), radial-gradient(circle at 80% 50%, rgba(59,130,246,0.2) 0%, transparent 50%)" 7404 }, "data-fg-b5w3": ":0:/src/app/components/AcquisitionBanner.tsx:11:9:420:240:e:div" }) }), 7405 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b5w4", _fgB: 1790697590044, className: "relative z-10 max-w-6xl mx-auto px-6 py-10 md:py-14", "data-fg-b5w4": ":0:/src/app/components/AcquisitionBanner.tsx:16:7:681:2017:e:div:e", children: /* @__PURE__ */ c( 7406 a, 7407 { 7408 _fgT: m.div, 7409 _fgS: "b5w5", 7410 _fgB: 1790697590044, 7411 initial: { opacity: 0, y: 20 }, 7412 whileInView: { opacity: 1, y: 0 }, 7413 viewport: { once: !0 }, 7414 transition: { duration: 0.6 }, 7415 className: "flex flex-col md:flex-row items-center gap-6 md:gap-10", 7416 "data-fg-b5w5": ":0:/src/app/components/AcquisitionBanner.tsx:17:9:759:1926:e:motion.div:xtetxtetxte", 7417 children: [
7418 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b5w7", _fgB: 1790697590044, className: "flex-shrink-0", "data-fg-b5w7": ":0:/src/app/components/AcquisitionBanner.tsx:25:11:1069:268:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b5w8", _fgB: 1790697590044, className: "inline-block bg-[rgb(239,187,15)] text-[#0A1628] text-[11px] uppercase tracking-[0.15em] px-4 py-1.5 rounded-full", style: { fontWeight: 700 }, "data-fg-b5w8": ":0:/src/app/components/AcquisitionBanner.tsx:26:13:1113:207:e:span:t", children: "Announcement" }) }), 7419 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b5w11", _fgB: 1790697590044, className: "flex flex-col sm:flex-row items-center gap-5 md:gap-8 flex-1 text-center sm:text-left", "data-fg-b5w11": ":0:/src/app/components/AcquisitionBanner.tsx:32:11:1375:806:e:div:etxte", children: [ 7420 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "b5w12", _fgB: 1790697590044, className: "text-white text-[17px] md:text-[19px] leading-relaxed", "data-fg-b5w12": ":0:/src/app/components/AcquisitionBanner.tsx:33:13:1491:377:e:p:esteste", children: [
7421 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b5w13", _fgB: 1790697590044, className: "text-white", "data-fg-b5w13": ":0:/src/app/components/AcquisitionBanner.tsx:34:15:1575:58:e:span:t", children: "IT Curves has acquired" }), 7422 " ", 7423 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b5w16", _fgB: 1790697590044, className: "text-[rgb(239,187,15)]", style: { fontWeight: 700 }, "data-fg-b5w16": ":0:/src/app/components/AcquisitionBanner.tsx:35:15:1653:86:e:span:t", children: "AI Dev Lab" }), 7424 " ", 7425 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b5w19", _fgB: 1790697590044, className: "text-white", "data-fg-b5w19": ":0:/src/app/components/AcquisitionBanner.tsx:36:15:1759:92:e:span:t", children: "â strengthening our Agentic AI capabilities for transit." }) 7426 ] }), 7427 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b5w22", _fgB: 1790697590044, className: "flex-shrink-0 bg-white rounded-xl px-5 py-3", "data-fg-b5w22": ":0:/src/app/components/AcquisitionBanner.tsx:40:13:1918:246:e:div:e", children: /* @__PURE__ */ i( 7428 a, 7429 { 7430 _fgT: "img", 7431 _fgS: "b5w23", 7432 _fgB: 1790697590044, 7433 src: Xd, 7434 alt: "AI Dev Lab", 7435 className: "h-8 md:h-10 w-auto object-contain", 7436 "data-fg-b5w23": ":0:/src/app/components/AcquisitionBanner.tsx:41:15:1994:151:e:img" 7437 } 7438 ) }) 7439 ] }),
7440 /* @__PURE__ */ c( 7441 a, 7442 { 7443 _fgT: E, 7444 _fgS: "b5w25", 7445 _fgB: 1790697590044, 7446 href: "/news-articles/it-curves-acquires-ai-dev-lab", 7447 className: "flex-shrink-0 inline-flex items-center gap-2 border border-[rgb(239,187,15)] text-[rgb(239,187,15)] px-5 py-2.5 rounded-lg hover:bg-[rgb(239,187,15)] hover:text-[#0A1628] transition-all text-[13px] uppercase tracking-widest", 7448 style: { fontWeight: 700 }, 7449 "data-fg-b5w25": ":0:node_modules/wouter:50:11:2215:448:e:Link:te:::::C4yE", 7450 children: [ 7451 "Read More", 7452 /* @__PURE__ */ i(a, { _fgT: Xc, _fgS: "b5w27", _fgB: 1790697590044, size: 14, "data-fg-b5w27": ":0:node_modules/lucide-react:56:13:2619:26:e:ExternalLink::::::tit" }) 7453 ] 7454 } 7455 ) 7456 ] 7457 } 7458 ) }) 7459 ] }); 7460} 7461const eg = globalThis.__GLOBALS__.getAssetURL("54ac76442af4746a27a2b2be0cfab735c0305041.png"), tg = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg=="; 7462function Le(t) { 7463 const [e, s] = j(!1), r = () => { 7464 s(!0); 7465 }, { src: n, alt: o, style: L, className: d, ...l } = t; 7466 return e ? /* @__PURE__ */ i( 7467 a, 7468 { 7469 _fgT: "div", 7470 _fgS: "csfh0", 7471 _fgB: 1790697592595, 7472 className: `inline-block bg-gray-100 text-center align-middle ${d ?? ""}`, 7473 style: L, 7474 "data-fg-csfh0": ":0:/src/app/components/figma/ImageWithFallback.tsx:16:5:728:310:e:div:e", 7475 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "csfh1", _fgB: 1790697592595, className: "flex items-center justify-center w-full h-full", "data-fg-csfh1": ":0:/src/app/components/figma/ImageWithFallback.tsx:20:7:854:173:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "csfh2", _fgB: 1790697592595, src: tg, alt: "Error loading image", ...l, "data-original-url": n, "data-fg-csfh2": ":0:/src/app/components/figma/ImageWithFallback.tsx:21:9:927:87:e:img" }) }) 7476 } 7477 ) : /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "csfh3", _fgB: 1790697592595, src: n, alt: o, className: d, style: L, ...l, onError: r, "data-fg-csfh3": ":0:/src/app/components/figma/ImageWithFallback.tsx:25:5:1051:95:e:img" }); 7478} 7479const ag = globalThis.__GLOBALS__.getAssetURL("cb92dca244274b7fd0d5dfacfde8008a71319747.png"), sg = globalThis.__GLOBALS__.getAssetURL("87c4fa7af57ad070bf18e293e0a7f75b4f7020ef.png"), ig = globalThis.__GLOBALS__.getAssetURL("553a8fa482c9c9c6f76b1d23b29dcea207c73db1.png"), rg = globalThis.__GLOBALS__.getAssetURL("75982e5590fc43f6937a9864f987d374abee42f8.png"), I1 = [ 7480 { 7481 id: "microtransit", 7482 label: "Microtransit", 7483 num: "01", 7484 title: "Microtransit", 7485 desc: "Transform traditional fixed routes into dynamic, demand-responsive networks. Our AI algorithms optimize real-time vehicle routing, reduce empty miles, and maximize fleet utilization while delivering app-based convenience that today's riders expect.", 7486 image: eg, 7487 btnText: "Explore Microtransit Solutions", 7488 link: "/microtransit" 7489 }, 7490 { 7491 id: "paratransit", 7492 label: "Paratransit", 7493 num: "02", 7494 title: "Paratransit", 7495 desc: "Deliver compassionate, compliant ADA service with intelligent scheduling that balances rider needs with operational efficiency. Our platform streamlines eligibility management, optimizes trip grouping, and ensures on-time performance for your riders.", 7496 image: ag, 7497 btnText: "See Paratransit Features" 7498 }, 7499 { 7500 id: "fixed-route", 7501 label: "Fixed Route", 7502 num: "03", 7503 title: "Fixed Route", 7504 desc: "Modernize traditional transit with smart scheduling, real-time tracking, and predictive maintenance. Our AI analyzes ridership patterns to recommend service adjustments, while providing riders with accurate arrival predictions and seamless digital payment options.", 7505 image: sg, 7506 btnText: "Explore Fixed Route", 7507 link: "/markets/fixed-route" 7508 }, 7509 { 7510 id: "nemt", 7511 label: "NEMT", 7512 num: "04", 7513 title: "NEMT", 7514 desc: "Streamline non-emergency medical transportation with HIPAA-compliant scheduling, automated broker integration, and intelligent dispatch. Reduce no-shows, optimize driver assignments, and ensure patients reach critical appointments.", 7515 image: ig, 7516 btnText: "Explore NEMT Solutions", 7517 link: "/nemt" 7518 }, 7519 { 7520 id: "taxi-dispatch", 7521 label: "Private TNC's and Taxi", 7522 num: "05", 7523 title: "Private TNC's and Taxi", 7524 desc: "Manage multiple fleets from a single dispatch center with our comprehensive platform for Transportation Network Companies (TNCs) and taxi providers. Handle dispatch, driver settlements, and account billing for multiple companies while maintaining unique branding and business rules for each.", 7525 image: rg, 7526 btnText: "Explore TNC & Taxi Solutions", 7527 link: "/taxi-dispatch" 7528 } 7529], ng = { 7530 hidden: { opacity: 0 }, 7531 visible: { 7532 opacity: 1, 7533 transition: { 7534 staggerChildren: 0.1, 7535 delayChildren: 0.3 7536 } 7537 } 7538}, og = { 7539 hidden: { y: "100%", opacity: 0 }, 7540 visible: { 7541 y: 0, 7542 opacity: 1, 7543 transition: { 7544 duration: 0.8, 7545 ease: [0.33, 1, 0.68, 1] 7546 } 7547 } 7548}; 7549function Lg() { 7550 const [t, e] = j(I1[0].id), s = I1.find((h) => h.id === t) || I1[0], [r, n] = j(!1), [o, L] = j(0), d = H(null), l = H(null), g = 1e4, f = 50, p
7550= Ge(() => { 7551 e((h) => { 7552 const _ = (I1.findIndex((v) => v.id === h) + 1) % I1.length; 7553 return I1[_].id; 7554 }), L(0); 7555 }, []); 7556 q(() => (l.current = setInterval(() => { 7557 L((h) => { 7558 const x = h + f / g * 100; 7559 return x >= 100 ? 100 : x; 7560 }); 7561 }, f), d.current = setInterval(() => { 7562 p(); 7563 }, g), () => { 7564 d.current && clearInterval(d.current), l.current && clearInterval(l.current); 7565 }), [t, p]); 7566 const M = (h) => { 7567 e(h), L(0); 7568 }, u = "We power innovation across all transit segments.".split(" "); 7569 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "d5se0", _fgB: 1790697590037, _fgD: !0, id: "markets", className: "py-12 sm:py-16 md:py-24 px-4 sm:px-6 bg-zinc-50 relative overflow-hidden", style: { fontFamily: "Inter, sans-serif" }, "data-fg-d5se0": ":0:/src/app/components/Markets.tsx:137:5:4967:8006:e:section:xtetete:1", children: [ 7570 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se2", _fgB: 1790697590037, className: "fixed top-[-20%] left-[-10%] w-[50%] h-[50%] blur-[120px] rounded-full pointer-events-none bg-[#0056B3]/10 opacity-50", "data-fg-d5se2": ":0:/src/app/components/Markets.tsx:139:7:5164:137:e:div" }), 7571 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se3", _fgB: 1790697590037, className: "fixed bottom-[-20%] right-[-10%] w-[50%] h-[50%] bg-[#0056B3]/5 blur-[120px] rounded-full pointer-events-none opacity-50", "data-fg-d5se3": ":0:/src/app/components/Markets.tsx:140:7:5308:140:e:div" }), 7572 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d5se4", _fgB: 1790697590037, className: "max-w-[1400px] mx-auto relative z-10", "data-fg-d5se4": ":0:/src/app/components/Markets.tsx:142:7:5456:7502:e:div:ete", children: [
7573 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d5se5", _fgB: 1790697590037, className: "text-center mb-10", "data-fg-d5se5": ":0:/src/app/components/Markets.tsx:143:9:5519:2031:e:div:etete", children: [ 7574 /* @__PURE__ */ i( 7575 a, 7576 { 7577 _fgT: m.div, 7578 _fgS: "d5se6", 7579 _fgB: 1790697590037, 7580 initial: { opacity: 0, y: 10 }, 7581 whileInView: { opacity: 1, y: 0 }, 7582 viewport: { once: !0, amount: 0.8, margin: "0px 0px -100px 0px" }, 7583 transition: { delay: 0.2 }, 7584 className: "inline-flex items-center justify-center px-4 py-1.5 rounded-full border border-[#0056B3]/10 bg-blue-50 text-[#0056B3] text-xs font-bold uppercase tracking-widest mb-8 font-[Space_Grotesk]", 7585 "data-fg-d5se6": ":0:/src/app/components/Markets.tsx:144:11:5565:496:e:motion.div:t", 7586 children: "Our Markets" 7587 } 7588 ), 7589 /* @__PURE__ */ i( 7590 a, 7591 { 7592 _fgT: m.h2, 7593 _fgS: "d5se8", 7594 _fgB: 1790697590037, 7595 className: "text-3xl sm:text-4xl md:text-5xl lg:text-7xl xl:text-8xl font-light tracking-tighter text-slate-900 mb-4 sm:mb-6 md:mb-8 font-[Space_Grotesk] flex flex-wrap justify-center gap-x-2 sm:gap-x-3 md:gap-x-4 gap-y-1 sm:gap-y-2", 7596 variants: ng, 7597 initial: "hidden", 7598 whileInView: "visible", 7599 viewport: { once: !0, amount: 0.8, margin: "0px 0px -150px 0px" }, 7600 "data-fg-d5se8": ":0:/src/app/components/Markets.tsx:154:11:6083:912:e:motion.h2:x", 7601 children: u.map((h, x) => /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d5se10", _fgB: 1790697590037, className: "inline-block overflow-hidden py-1 sm:py-2 md:py-3 px-0.5 sm:px-1", "data-fg-d5se10": ":0:/src/app/components/Markets.tsx:162:15:6584:372:e:span:e", children: /* @__PURE__ */ i( 7602 a, 7603 { 7604 _fgT: m.span, 7605 _fgS: "d5se11", 7606 _fgB: 1790697590037, 7607 className: `inline-block ${h === "all" ? "font-serif italic text-[rgb(239,187,15)]" : ""}`, 7608 variants: og, 7609 "data-fg-d5se11": ":0:/src/app/components/Markets.tsx:163:17:6692:242:e:motion.span:x", 7610 children: h 7611 } 7612 ) }, x)) 7613 } 7614 ),
7615 /* @__PURE__ */ i( 7616 a, 7617 { 7618 _fgT: m.p, 7619 _fgS: "d5se13", 7620 _fgB: 1790697590037, 7621 initial: { opacity: 0, y: 20 }, 7622 whileInView: { opacity: 1, y: 0 }, 7623 viewport: { once: !0, amount: 0.8, margin: "0px 0px -100px 0px" }, 7624 transition: { delay: 0.8, duration: 0.8 }, 7625 className: "text-sm sm:text-base md:text-lg lg:text-xl font-light text-slate-600 max-w-3xl mx-auto text-center", 7626 "data-fg-d5se13": ":0:/src/app/components/Markets.tsx:173:11:7017:518:e:motion.p:t", 7627 children: "From on-demand microtransit to specialized paratransitâour AI-driven platform adapts to your operational needs." 7628 } 7629 ) 7630 ] }), 7631 /* @__PURE__ */ c( 7632 a, 7633 { 7634 _fgT: "div", 7635 _fgS: "d5se15", 7636 _fgB: 1790697590037, 7637 className: "grid grid-cols-12 gap-4 sm:gap-6 md:gap-8 lg:gap-12 xl:gap-20 items-start", 7638 "data-fg-d5se15": ":0:/src/app/components/Markets.tsx:184:9:7560:5385:e:div:xtetxte", 7639 children: [
7640 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se17", _fgB: 1790697590037, className: "col-span-5 flex flex-col gap-2 sm:gap-3 md:gap-4", "data-fg-d5se17": ":0:/src/app/components/Markets.tsx:188:11:7710:2374:e:div:x", children: I1.map((h, x) => { 7641 const _ = t === h.id; 7642 return /* @__PURE__ */ c( 7643 a, 7644 { 7645 _fgT: m.button, 7646 _fgS: "d5se19", 7647 _fgB: 1790697590037, 7648 initial: { opacity: 0, x: -20 }, 7649 whileInView: { opacity: 1, x: 0 }, 7650 viewport: { once: !0, amount: 0.5 }, 7651 transition: { delay: 0.2 + x * 0.1 }, 7652 onClick: () => M(h.id), 7653 className: `group relative overflow-hidden rounded-xl sm:rounded-2xl md:rounded-3xl text-left px-3 sm:px-5 md:px-8 py-3 sm:py-5 md:py-8 transition-all duration-500 border ${_ ? "bg-gradient-to-r from-[#0056B3] to-[#00408A] border-blue-500/50 shadow-lg scale-[1.02]" : "bg-white border-black/5 hover:bg-slate-50 opacity-60 hover:opacity-100"}`, 7654 "data-fg-d5se19": ":0:/src/app/components/Markets.tsx:192:17:7917:2117:e:motion.button:xtxte", 7655 children: [ 7656 _ && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se22", _fgB: 1790697590037, className: "absolute bottom-0 left-0 right-0 h-[3px] bg-white/10", "data-fg-d5se22": ":0:/src/app/components/Markets.tsx:207:21:8832:354:e:div:e", children: /* @__PURE__ */ i( 7657 a, 7658 { 7659 _fgT: m.div, 7660 _fgS: "d5se23", 7661 _fgB: 1790697590037, 7662 className: "h-full bg-white/50 rounded-full", 7663 style: { width: `${o}%` }, 7664 transition: { duration: 0.05, ease: "linear" }, 7665 "data-fg-d5se23": ":0:/src/app/components/Markets.tsx:208:23:8925:234:e:motion.div" 7666 } 7667 ) }),
7668 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d5se24", _fgB: 1790697590037, className: "relative z-10 flex items-center justify-between", "data-fg-d5se24": ":0:/src/app/components/Markets.tsx:215:19:9226:775:e:div:ete", children: [ 7669 /* @__PURE__ */ i( 7670 a, 7671 { 7672 _fgT: "h3", 7673 _fgS: "d5se25", 7674 _fgB: 1790697590037, 7675 className: `text-sm sm:text-lg md:text-2xl lg:text-3xl xl:text-4xl font-light tracking-tighter transition-colors ${_ ? "text-white" : "text-slate-500 group-hover:text-slate-700"}`, 7676 "data-fg-d5se25": ":0:/src/app/components/Markets.tsx:216:21:9312:346:e:h3:x", 7677 children: h.label 7678 } 7679 ), 7680 /* @__PURE__ */ i( 7681 a, 7682 { 7683 _fgT: "span", 7684 _fgS: "d5se27", 7685 _fgB: 1790697590037, 7686 className: `text-[10px] sm:text-xs md:text-sm font-mono font-medium transition-colors ${_ ? "text-white/80" : "text-slate-400"}`, 7687 "data-fg-d5se27": ":0:/src/app/components/Markets.tsx:223:21:9679:297:e:span:x", 7688 children: h.num 7689 } 7690 ) 7691 ] }) 7692 ] 7693 }, 7694 h.id 7695 ); 7696 }) }),
7697 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d5se30", _fgB: 1790697590037, className: "col-span-7 sticky top-24", "data-fg-d5se30": ":0:/src/app/components/Markets.tsx:237:11:10122:2808:e:div:ete", children: [ 7698 /* @__PURE__ */ c( 7699 a, 7700 { 7701 _fgT: m.div, 7702 _fgS: "d5se31", 7703 _fgB: 1790697590037, 7704 initial: { opacity: 0, scale: 0.95 }, 7705 whileInView: { opacity: 1, scale: 1 }, 7706 viewport: { once: !0, amount: 0.3 }, 7707 transition: { duration: 0.8 }, 7708 className: "relative aspect-[21/9] overflow-hidden rounded-xl sm:rounded-2xl md:rounded-3xl bg-slate-900 border border-black/10 shadow-2xl mb-3 sm:mb-4 md:mb-6", 7709 "data-fg-d5se31": ":0:/src/app/components/Markets.tsx:238:13:10177:1165:e:motion.div:ete", 7710 children: [ 7711 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se32", _fgB: 1790697590037, className: "absolute inset-0 bg-black/20 z-10 bg-[rgba(0,218,182,0)]", "data-fg-d5se32": ":0:/src/app/components/Markets.tsx:245:15:10595:76:e:div" }),
7712 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "d5se33", _fgB: 1790697590037, mode: "wait", "data-fg-d5se33": ":0:node_modules/motion:246:15:10686:630:e:AnimatePresence:e:::::DAs4", children: /* @__PURE__ */ i( 7713 a, 7714 { 7715 _fgT: m.div, 7716 _fgS: "d5se34", 7717 _fgB: 1790697590037, 7718 initial: { opacity: 0, scale: 1.05 }, 7719 animate: { opacity: 1, scale: 1 }, 7720 exit: { opacity: 0 }, 7721 transition: { duration: 0.5 }, 7722 className: "w-full h-full", 7723 "data-fg-d5se34": ":0:/src/app/components/Markets.tsx:247:17:10732:551:e:motion.div:e", 7724 children: /* @__PURE__ */ i( 7725 a, 7726 { 7727 _fgT: Le, 7728 _fgS: "d5se35", 7729 _fgB: 1790697590037, 7730 src: s.image, 7731 alt: s.title, 7732 className: "w-full h-full object-cover", 7733 "data-fg-d5se35": ":0:/src/app/components/Markets.tsx:255:19:11065:188:e:ImageWithFallback::::::DGky" 7734 } 7735 ) 7736 }, 7737 s.image 7738 ) }) 7739 ] 7740 } 7741 ),
7742 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "d5se36", _fgB: 1790697590037, mode: "wait", "data-fg-d5se36": ":0:node_modules/motion:264:13:11356:1557:e:AnimatePresence:e:::::DAs4", children: /* @__PURE__ */ i( 7743 a, 7744 { 7745 _fgT: m.div, 7746 _fgS: "d5se37", 7747 _fgB: 1790697590037, 7748 initial: { opacity: 0, y: 20 }, 7749 animate: { opacity: 1, y: 0 }, 7750 exit: { opacity: 0, y: -20 }, 7751 transition: { duration: 0.3 }, 7752 "data-fg-d5se37": ":0:/src/app/components/Markets.tsx:265:15:11400:1482:e:motion.div:e", 7753 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d5se38", _fgB: 1790697590037, className: "flex flex-col gap-4", "data-fg-d5se38": ":0:/src/app/components/Markets.tsx:272:17:11670:1184:e:div:etete", children: [ 7754 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "d5se39", _fgB: 1790697590037, className: "text-base sm:text-lg md:text-2xl lg:text-3xl font-light tracking-tight text-slate-900", "data-fg-d5se39": ":0:/src/app/components/Markets.tsx:273:19:11726:167:e:h3:x", children: s.title }),
7755 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "d5se41", _fgB: 1790697590037, className: "text-xs sm:text-sm md:text-base lg:text-lg leading-relaxed font-light text-slate-600", "data-fg-d5se41": ":0:/src/app/components/Markets.tsx:276:19:11912:163:e:p:x", children: s.desc }), 7756 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d5se43", _fgB: 1790697590037, className: "pt-1 sm:pt-2", "data-fg-d5se43": ":0:/src/app/components/Markets.tsx:279:19:12094:737:e:div:e", children: /* @__PURE__ */ c( 7757 a, 7758 { 7759 _fgT: E, 7760 _fgS: "d5se44", 7761 _fgB: 1790697590037, 7762 href: s.link || `/markets#${s.id}`, 7763 className: "group inline-flex items-center justify-center rounded-full px-3 sm:px-4 md:px-6 py-2 sm:py-2.5 md:py-3 text-[10px] sm:text-xs md:text-sm font-bold uppercase tracking-widest bg-[#0056B3] text-white hover:bg-[#004494] hover:text-white transition-all duration-300 shadow-xl", 7764 "data-fg-d5se44": ":0:node_modules/wouter:280:21:12145:661:e:Link:ete:::::C4yE", 7765 children: [
7766 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d5se45", _fgB: 1790697590037, className: "mr-1 sm:mr-2", "data-fg-d5se45": ":0:/src/app/components/Markets.tsx:284:23:12580:60:e:span:x", children: s.btnText }), 7767 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "d5se47", _fgB: 1790697590037, size: 12, className: "sm:w-3.5 sm:h-3.5 md:w-4 md:h-4 transition-transform group-hover:translate-x-1", "data-fg-d5se47": ":0:node_modules/lucide-react:285:23:12663:115:e:ArrowRight::::::s5N" }) 7768 ] 7769 } 7770 ) }) 7771 ] }) 7772 }, 7773 s.id 7774 ) }) 7775 ] }) 7776 ] 7777 } 7778 ) 7779 ] }) 7780 ] }); 7781} 7782const cg = globalThis.__GLOBALS__.getAssetURL("40cf81b3682d8072928cbd6cf4aac5bd31c56e61.png"), lg = globalThis.__GLOBALS__.getAssetURL("c2dc0dbbab320fc6f2f1c34ed8eb30f6501ddca5.png"), dg = globalThis.__GLOBALS__.getAssetURL("7fbc18109d9de3fec98ad38befa8daa83a1cf93a.png"), gg = globalThis.__GLOBALS__.getAssetURL("7a4528c6db094eb78a6a42713d69c9380a2ea7bc.png"), fg = globalThis.__GLOBALS__.getAssetURL("ceb62601a2fed9d7a96bb945e725befacbe7265d.png"), pg = globalThis.__GLOBALS__.getAssetURL("d9bc69fd27736db1017964eec5da64eadac8ad51.png"), Mg = globalThis.__GLOBALS__.getAssetURL("3ef1b360d02473dcc9685f8be6bb60ea5018eea1.png"), ug = globalThis.__GLOBALS__.getAssetURL("d46938bcb1d96770eda0743fd8f877b7b7c5d681.png"), hg = globalThis.__GLOBALS__.getAssetURL("86ca4d2fa032fb0cf63b5e3672a31ae5f999fb37.png"), mg = globalThis.__GLOBALS__.getAssetURL("e6e8339d63f4f773f8aed310e947e1c98c6d9008.png"), xg = globalThis.__GLOBALS__.getAssetURL("e64b8f13b71c77eeae83ecb05f8d35f8e191d7d6.png"), _g = globalThis.__GLOBALS__.getAssetURL("5db8e8a1fc6730b9d4b6744f75a974be9ff5e00c.png"), l4 = [ 7783 { name: "City of Albany", src: gg, height: 52, url: "https://www.cityofalbany.net" }, 7784 { name: "Chatham Area Transit", src: ug, height: 72, url: "https://www.catchacat.org" }, 7785 { name: "Grant Transit Authority", src: Mg, height: 52, url: "https://www.granttransit.com" }, 7786 { name: "Allegany County", src: dg, height: 52, url: "https://www.alleganymd.gov" }, 7787 { name: "Annapolis Transit", src: pg, height: 52, url: "https://www.annapolis.gov/2177/Go-Time-Annapolis-On-Demand-Transit" }, 7788 { name: "JeffTran", src: cg, height: 52, url: "https://www.ridejefftran.com" }, 7789 { name: "Nexus Labs", src: fg, height: 64, url: "https://www.wmata.com" }, 7790 { name: "Access", src: hg, height: 36, url: "https://www.accessservices.org" }, 7791 { name: "SilverRide", src: mg, height: 36, url: "https://www.silverride.com" }, 7792 { name: "WeAchieve", src: _g, height: 52, url: "https://weachieveinc.org" }, 7793 { name: "Tulalip Health System", src: xg, height: 72, url: "https://www.tulaliphealthsystem.com" }, 7794 { name: "Transit Group Inc.", src: lg, height: 52, url: "" } 7795]; 7796function bg() { 7797 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dbyz0", _fgB: 1790697590032, _fgD: !0, className: "bg-white py-12 border-b border-gray-100", "data-fg-dbyz0": ":0:/src/app/components/TrustedAgencies.tsx:38:5:2281:1695:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbyz1", _fgB: 1790697590032, className: "max-w-7xl mx-auto px-6", "data-fg-dbyz1": ":0:/src/app/components/TrustedAgencies.tsx:39:7:2349:1612:e:div:ete", children: [ 7798 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dbyz2", _fgB: 1790697590032, className: "uppercase text-xs font-bold text-[#0056B3] tracking-widest text-center mb-8 text-[20px] font-[Space_Grotesk] no-underline", "data-fg-dbyz2": ":0:/src/app/components/TrustedAgencies.tsx:40:9:2398:194:e:p:t", children: "Trusted by these Leading Agencies" }), 7799 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbyz4", _fgB: 1790697590032, className: "relative overflow-hidden w-full mask-linear-fade", "data-fg-dbyz4": ":0:/src/app/components/TrustedAgencies.tsx:44:9:2610:1338:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbyz5", _fgB: 1790697590032, className: "flex w-max animate-ticker items-center", "data-fg-dbyz5": ":0:/src/app/components/TrustedAgencie
7799s.tsx:45:11:2687:1246:e:div:xtx", children: [...l4, ...l4, ...l4].map((t, e) => { 7800 const s = /* @__PURE__ */ i( 7801 a, 7802 { 7803 _fgT: "img", 7804 _fgS: "dbyz8", 7805 _fgB: 1790697590032, 7806 src: t.src, 7807 alt: t.name, 7808 className: "w-auto object-contain px-6", 7809 style: { mixBlendMode: "multiply", height: `${t.height}px` }, 7810 "data-fg-dbyz8": ":0:/src/app/components/TrustedAgencies.tsx:49:17:2920:236:e:img" 7811 } 7812 ); 7813 return t.url ? /* @__PURE__ */ i( 7814 a, 7815 { 7816 _fgT: "a", 7817 _fgS: "dbyz9", 7818 _fgB: 1790697590032, 7819 href: t.url, 7820 target: "_blank", 7821 rel: "noopener noreferrer", 7822 className: "flex items-center mx-8 opacity-80 hover:opacity-100 transition-opacity cursor-pointer", 7823 title: t.name, 7824 "data-fg-dbyz9": ":0:/src/app/components/TrustedAgencies.tsx:58:17:3227:383:e:a:x", 7825 children: s 7826 }, 7827 `${t.name}-${e}` 7828 ) : /* @__PURE__ */ i( 7829 a, 7830 { 7831 _fgT: "div", 7832 _fgS: "dbyz11", 7833 _fgB: 1790697590032, 7834 className: "flex items-center mx-8 opacity-80 cursor-default", 7835 title: t.name, 7836 "data-fg-dbyz11": ":0:/src/app/components/TrustedAgencies.tsx:69:17:3647:236:e:div:x", 7837 children: s 7838 }, 7839 `${t.name}-${e}` 7840 ); 7841 }) }) }) 7842 ] }) }); 7843} 7844const vg = globalThis.__GLOBALS__.getAssetURL("af0b7bd3db71235173fef30e6fb48e3c0d0342af.png"), yg = globalThis.__GLOBALS__.getAssetURL("c71d8f09a3f1ee6cba433f54af8a2de3392ced31.png"), wg = globalThis.__GLOBALS__.getAssetURL("9abf29097e80a334c89411e3945186ea2cb38e9a.png"), Tg = globalThis.__GLOBALS__.getAssetURL("afbbf9490fef0ec3ae2cb39fd4469f2789faea05.png"), Sg = globalThis.__GLOBALS__.getAssetURL("b608d88efca543c800f623910d562d37d9abb502.png"), Bg = [ 7845 { 7846 num: "01", 7847 title: "Trip Intelligence", 7848 subtitle: "AI-Powered Optimization", 7849 features: [ 7850 { 7851 label: "Intelligent Scheduling", 7852 bullets: [
7853 /* @__PURE__ */ c(C, { children: [ 7854 "Automated algorithm optimizes routes in ", 7855 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka2", _fgB: 1790697590027, "data-fg-deka2": ":0:/src/app/components/PlatformStack.tsx:39:53:1490:26:e:strong:t", children: "real-time" }) 7856 ] }), 7857 /* @__PURE__ */ c(C, { children: [ 7858 "Reduces ", 7859 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka6", _fgB: 1790697590027, "data-fg-deka6": ":0:/src/app/components/PlatformStack.tsx:40:21:1541:31:e:strong:t", children: "deadhead miles" }), 7860 " and boosts passenger capacity" 7861 ] }), 7862 /* @__PURE__ */ c(C, { children: [ 7863 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka10", _fgB: 1790697590027, "data-fg-deka10": ":0:/src/app/components/PlatformStack.tsx:41:13:1619:41:e:strong:t", children: "Zero manual intervention" }), 7864 " required" 7865 ] }) 7866 ] 7867 }, 7868 { 7869 label: "Optimized Routing Engine", 7870 bullets: [
7871 /* @__PURE__ */ c(C, { children: [ 7872 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka14", _fgB: 1790697590027, "data-fg-deka14": ":0:/src/app/components/PlatformStack.tsx:47:13:1776:28:e:strong:t", children: "Google Maps" }), 7873 " integration for live traffic analysis" 7874 ] }), 7875 /* @__PURE__ */ c(C, { children: [ 7876 "Dynamic rerouting based on ", 7877 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka19", _fgB: 1790697590027, "data-fg-deka19": ":0:/src/app/components/PlatformStack.tsx:48:40:1886:37:e:strong:t", children: "real-time conditions" }) 7878 ] }), 7879 /* @__PURE__ */ c(C, { children: [ 7880 "Built-in ", 7881 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka23", _fgB: 1790697590027, "data-fg-deka23": ":0:/src/app/components/PlatformStack.tsx:49:22:1949:35:e:strong:t", children: "address validation" }), 7882 " at every step" 7883 ] }) 7884 ] 7885 } 7886 ], 7887 btn: "Explore Routing", 7888 img: yg, 7889 link: "/ai-solutions" 7890 }, 7891 { 7892 num: "02", 7893 title: "Dispatch & Fleet Operations", 7894 subtitle: "Intelligent Automation", 7895 features: [ 7896 { 7897 label: "Real-Time Dispatching", 7898 bullets: [
7899 /* @__PURE__ */ c(C, { children: [ 7900 "Automated dispatch via ", 7901 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka28", _fgB: 1790697590027, "data-fg-deka28": ":0:/src/app/components/PlatformStack.tsx:65:36:2332:30:e:strong:t", children: "first-in-zone" }), 7902 ", nearest cab, or co-located stand" 7903 ] }), 7904 /* @__PURE__ */ c(C, { children: [ 7905 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka32", _fgB: 1790697590027, "data-fg-deka32": ":0:/src/app/components/PlatformStack.tsx:66:13:2413:33:e:strong:t", children: "Priority routing" }), 7906 " for scheduled and urgent trips" 7907 ] }), 7908 /* @__PURE__ */ c(C, { children: [ 7909 "Unprocessable trips ", 7910 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka37", _fgB: 1790697590027, "data-fg-deka37": ":0:/src/app/components/PlatformStack.tsx:67:33:2514:29:e:strong:t", children: "auto-flagged" }), 7911 " for manager attention" 7912 ] }) 7913 ] 7914 }, 7915 { 7916 label: "Hardware Ecosystem", 7917 bullets: [
7918 /* @__PURE__ */ c(C, { children: [ 7919 "Off-the-shelf tablets installed in vehicles, ", 7920 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka42", _fgB: 1790697590027, "data-fg-deka42": ":0:/src/app/components/PlatformStack.tsx:73:58:2711:32:e:strong:t", children: "BYOD compatible" }) 7921 ] }), 7922 /* @__PURE__ */ c(C, { children: [ 7923 "Integrated with ", 7924 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka46", _fgB: 1790697590027, "data-fg-deka46": ":0:/src/app/components/PlatformStack.tsx:74:29:2776:62:e:strong:t", children: "automatic passenger counters and annunciators" }) 7925 ] }), 7926 /* @__PURE__ */ c(C, { children: [ 7927 "Connects vehicles to dispatch for ", 7928 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka50", _fgB: 1790697590027, "data-fg-deka50": ":0:/src/app/components/PlatformStack.tsx:75:47:2889:46:e:strong:t", children: "synchronized fleet visibility" }) 7929 ] }) 7930 ] 7931 } 7932 ], 7933 btn: "Explore Dispatch", 7934 img: vg, 7935 link: "/drivigo" 7936 }, 7937 { 7938 num: "03", 7939 title: "Rider & Driver Experience", 7940 subtitle: "Passenger & Driver Apps", 7941 features: [ 7942 { 7943 label: "Transigo", 7944 bullets: [
7945 /* @__PURE__ */ c(C, { children: [ 7946 "Real-time ", 7947 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka54", _fgB: 1790697590027, "data-fg-deka54": ":0:/src/app/components/PlatformStack.tsx:91:23:3237:33:e:strong:t", children: "vehicle tracking" }), 7948 " and ETA on map" 7949 ] }), 7950 /* @__PURE__ */ c(C, { children: [ 7951 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka58", _fgB: 1790697590027, "data-fg-deka58": ":0:/src/app/components/PlatformStack.tsx:92:13:3302:31:e:strong:t", children: "3-step booking" }), 7952 " for now, future, or on behalf of others" 7953 ] }), 7954 /* @__PURE__ */ c(C, { children: [ 7955 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka62", _fgB: 1790697590027, "data-fg-deka62": ":0:/src/app/components/PlatformStack.tsx:93:13:3390:31:e:strong:t", children: "Digital wallet" }), 7956 " with automatic copay and subsidy splitting" 7957 ] }), 7958 /* @__PURE__ */ c(C, { children: [ 7959 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka66", _fgB: 1790697590027, "data-fg-deka66": ":0:/src/app/components/PlatformStack.tsx:94:13:3481:24:e:strong:t", children: "QR code" }), 7960 " contactless boarding" 7961 ] }),
7962 /* @__PURE__ */ c(C, { children: [ 7963 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka70", _fgB: 1790697590027, "data-fg-deka70": ":0:/src/app/components/PlatformStack.tsx:95:13:3543:29:e:strong:t", children: "BLE guidance" }), 7964 " navigates riders directly to their vehicle" 7965 ] }) 7966 ] 7967 }, 7968 { 7969 label: "Drivego", 7970 bullets: [ 7971 /* @__PURE__ */ c(C, { children: [ 7972 "Full ", 7973 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka75", _fgB: 1790697590027, "data-fg-deka75": ":0:/src/app/components/PlatformStack.tsx:101:18:3710:30:e:strong:t", children: "trip manifest" }), 7974 " in stop order, always up to date" 7975 ] }), 7976 /* @__PURE__ */ c(C, { children: [ 7977 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka79", _fgB: 1790697590027, "data-fg-deka79": ":0:/src/app/components/PlatformStack.tsx:102:13:3790:29:e:strong:t", children: "Push-to-Talk" }), 7978 " with dispatchers, masked calls with riders" 7979 ] }),
7980 /* @__PURE__ */ c(C, { children: [ 7981 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka83", _fgB: 1790697590027, "data-fg-deka83": ":0:/src/app/components/PlatformStack.tsx:103:13:3879:27:e:strong:t", children: "Wall trips" }), 7982 " for driver self-dispatch" 7983 ] }), 7984 /* @__PURE__ */ c(C, { children: [ 7985 "Soft ", 7986 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka88", _fgB: 1790697590027, "data-fg-deka88": ":0:/src/app/components/PlatformStack.tsx:104:18:3953:27:e:strong:t", children: "taxi meter" }), 7987 " with flexible fare and copay calculation" 7988 ] }), 7989 /* @__PURE__ */ c(C, { children: [ 7990 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka92", _fgB: 1790697590027, "data-fg-deka92": ":0:/src/app/components/PlatformStack.tsx:105:13:4038:34:e:strong:t", children: "Digital signature" }), 7991 " capture, available iOS & Android" 7992 ] }) 7993 ] 7994 } 7995 ], 7996 btn: "Explore Rider & Driver Apps", 7997 img: wg, 7998 link: "/rider-apps" 7999 }, 8000 { 8001 num: "04", 8002 title: "Finance & Integrations", 8003 subtitle: "EDI, APIs & Invoicing", 8004 features: [ 8005 { 8006 label: "Automated Billing", 8007 bullets: [
8008 /* @__PURE__ */ c(C, { children: [ 8009 "Handles ", 8010 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka97", _fgB: 1790697590027, "data-fg-deka97": ":0:/src/app/components/PlatformStack.tsx:121:21:4430:29:e:strong:t", children: "credit cards" }), 8011 ", subsidized billing, and vouchers" 8012 ] }), 8013 /* @__PURE__ */ c(C, { children: [ 8014 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka101", _fgB: 1790697590027, "data-fg-deka101": ":0:/src/app/components/PlatformStack.tsx:122:13:4510:32:e:strong:t", children: "Batch invoicing" }), 8015 " across multiple funding sources at once" 8016 ] }), 8017 /* @__PURE__ */ c(C, { children: [ 8018 "Tracks receivables with ", 8019 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka106", _fgB: 1790697590027, "data-fg-deka106": ":0:/src/app/components/PlatformStack.tsx:123:37:4623:30:e:strong:t", children: "aging reports" }), 8020 " and re-invoicing" 8021 ] }), 8022 /* @__PURE__ */ c(C, { children: [ 8023 "Integrates with ",
8024 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka111", _fgB: 1790697590027, "data-fg-deka111": ":0:/src/app/components/PlatformStack.tsx:124:29:4703:41:e:strong:t", children: "Stripe, Square, Ingenico" }), 8025 ", and Verifone" 8026 ] }) 8027 ] 8028 }, 8029 { 8030 label: "Broker Integration", 8031 bullets: [ 8032 /* @__PURE__ */ c(C, { children: [ 8033 "Automated data exchange with ", 8034 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka116", _fgB: 1790697590027, "data-fg-deka116": ":0:/src/app/components/PlatformStack.tsx:130:42:4888:31:e:strong:t", children: "Modivcare, MTM" }), 8035 ", and other brokers" 8036 ] }), 8037 /* @__PURE__ */ c(C, { children: [ 8038 "Streamlines ", 8039 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka121", _fgB: 1790697590027, "data-fg-deka121": ":0:/src/app/components/PlatformStack.tsx:131:25:4967:29:e:strong:t", children: "trip imports" }), 8040 " directly into dispatch" 8041 ] }),
8042 /* @__PURE__ */ c(C, { children: [ 8043 "Reduces ", 8044 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka126", _fgB: 1790697590027, "data-fg-deka126": ":0:/src/app/components/PlatformStack.tsx:132:21:5044:29:e:strong:t", children: "manual entry" }), 8045 " and billing errors across providers" 8046 ] }) 8047 ] 8048 } 8049 ], 8050 btn: "Explore Billing", 8051 img: Tg, 8052 link: "/fixed-route" 8053 }, 8054 { 8055 num: "05", 8056 title: "Fixed Route Operations", 8057 subtitle: "Flexible Route Creation and Operation Tools", 8058 features: [ 8059 { 8060 label: "Route Planning & Scheduling", 8061 bullets: [ 8062 /* @__PURE__ */ c(C, { children: [ 8063 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka130", _fgB: 1790697590027, "data-fg-deka130": ":0:/src/app/components/PlatformStack.tsx:148:13:5439:41:e:strong:t", children: "Graphical route planning" }), 8064 " with stations, waypoints, and custom blocks" 8065 ] }), 8066 /* @__PURE__ */ c(C, { children: [
8067 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka134", _fgB: 1790697590027, "data-fg-deka134": ":0:/src/app/components/PlatformStack.tsx:149:13:5541:40:e:strong:t", children: "Blocking and runcutting" }), 8068 " made easy." 8069 ] }), 8070 /* @__PURE__ */ c(C, { children: [ 8071 "Driver and shift scheduling with ", 8072 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka139", _fgB: 1790697590027, "data-fg-deka139": ":0:/src/app/components/PlatformStack.tsx:150:46:5642:38:e:strong:t", children: "weekly hours tracking" }) 8073 ] }) 8074 ] 8075 }, 8076 { 8077 label: "Live Operations & Integration", 8078 bullets: [ 8079 /* @__PURE__ */ c(C, { children: [ 8080 "Live operator dashboard with ", 8081 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka143", _fgB: 1790697590027, "data-fg-deka143": ":0:/src/app/components/PlatformStack.tsx:156:42:5821:35:e:strong:t", children: "real-time tracking" }), 8082 ", passenger counts, and dwell time" 8083 ] }),
8084 /* @__PURE__ */ c(C, { children: [ 8085 "Driver MDTs with ", 8086 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka148", _fgB: 1790697590027, "data-fg-deka148": ":0:/src/app/components/PlatformStack.tsx:157:30:5924:40:e:strong:t", children: "stop-by-stop navigation" }), 8087 " and automatic rider onboarding" 8088 ] }), 8089 /* @__PURE__ */ c(C, { children: [ 8090 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka152", _fgB: 1790697590027, "data-fg-deka152": ":0:/src/app/components/PlatformStack.tsx:158:13:6012:33:e:strong:t", children: "GTFS integration" }), 8091 " with live feeds and automatic uploads" 8092 ] }), 8093 /* @__PURE__ */ c(C, { children: [ 8094 "Integrates with ", 8095 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "deka157", _fgB: 1790697590027, "data-fg-deka157": ":0:/src/app/components/PlatformStack.tsx:159:29:6116:37:e:strong:t", children: "Iris and Jarvis APCs" }), 8096 " for automatic passenger counting" 8097 ] }) 8098 ] 8099 } 8100 ], 8101 btn: "Explore Fixed Route", 8102 img: Sg, 8103 link: "/fixed-route" 8104 } 8105]; 8106function kg({ card: t, index: e }) { 8107 return /* @__PURE__ */ i( 8108 a, 8109 { 8110 _fgT: "div", 8111 _fgS: "deka160", 8112 _fgB: 1790697590027, 8113 _fgD: !0, 8114 className: "sticky top-[15vh] flex items-start justify-center w-full mb-6", 8115 style: { 8116 zIndex: e + 10 8117 }, 8118 "data-fg-deka160": ":0:/src/app/components/PlatformStack.tsx:171:5:6392:3376:e:div:e:1", 8119 children: /* @__PURE__ */ c( 8120 a, 8121 { 8122 _fgT: m.div, 8123 _fgS: "deka161", 8124 _fgB: 1790697590027, 8125 initial: { opacity: 0, y: 50, scale: 0.95 }, 8126 whileInView: { opacity: 1, y: 0, scale: 1 }, 8127 viewport: { once: !0, amount: 0.4 }, 8128 transition: { duration: 0.5, ease: "easeOut" }, 8129 className: "relative w-[95%] max-w-[1200px] min-h-[70vh] bg-[#0056B3] border border-white/20 rounded-2xl overflow-hidden shadow-2xl grid grid-cols-1 md:grid-cols-[2fr_3fr] group", 8130 "data-fg-deka161": ":0:/src/app/components/PlatformStack.tsx:177:7:6543:3214:e:motion.div:xtetxte", 8131 children: [
8132 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deka163", _fgB: 1790697590027, className: "p-6 md:p-8 lg:p-10 flex flex-col order-2 md:order-1 z-10 h-full overflow-y-auto", "data-fg-deka163": ":0:/src/app/components/PlatformStack.tsx:186:9:7000:2237:e:div:xtetxtetxte", children: [ 8133 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deka165", _fgB: 1790697590027, className: "mb-5 shrink-0", "data-fg-deka165": ":0:/src/app/components/PlatformStack.tsx:188:11:7133:630:e:div:ete", children: [ 8134 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deka166", _fgB: 1790697590027, className: "flex justify-between items-start", "data-fg-deka166": ":0:/src/app/components/PlatformStack.tsx:189:13:7177:400:e:div:ete", children: [ 8135 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "deka167", _fgB: 1790697590027, className: "text-[32px] md:text-[54px] tracking-tight font-space-grotesk leading-[1.05] text-white", style: { fontWeight: 800 }, "data-fg-deka167": ":0:/src/app/components/PlatformStack.tsx:190:15:7242:180:e:h3:x", children: t.title }),
8136 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka169", _fgB: 1790697590027, className: "text-4xl font-semibold text-white/20 font-space-grotesk", "data-fg-deka169": ":0:/src/app/components/PlatformStack.tsx:193:15:7437:121:e:div:x", children: t.num }) 8137 ] }), 8138 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "deka171", _fgB: 1790697590027, className: "text-[13px] mt-3 text-blue-200/85 uppercase font-semibold", style: { letterSpacing: "0.18em" }, "data-fg-deka171": ":0:/src/app/components/PlatformStack.tsx:197:13:7590:156:e:p:x", children: t.subtitle }) 8139 ] }), 8140 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka174", _fgB: 1790697590027, className: "flex-1 min-h-0 space-y-1", "data-fg-deka174": ":0:/src/app/components/PlatformStack.tsx:203:11:7820:968:e:div:x", children: t.features.map((s, r) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deka176", _fgB: 1790697590027, className: r > 0 ? "mt-[22px]" : "", "data-fg-deka176": ":0:/src/app/components/PlatformStack.tsx:205:15:7929:826:e:div:ete", children: [
8141 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "deka177", _fgB: 1790697590027, className: "text-[13px] uppercase tracking-widest text-amber-200 mb-1.5", style: { fontWeight: 700 }, "data-fg-deka177": ":0:/src/app/components/PlatformStack.tsx:206:17:8002:160:e:h4:x", children: s.label }), 8142 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "deka179", _fgB: 1790697590027, className: "space-y-[7px]", style: { fontSize: "15px" }, "data-fg-deka179": ":0:/src/app/components/PlatformStack.tsx:209:17:8179:555:e:ul:x", children: s.bullets.map((n, o) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "deka181", _fgB: 1790697590027, className: "flex items-start gap-2 text-blue-100/[.77] leading-[1.6] [&_strong]:text-white [&_strong]:font-[650]", style: { fontWeight: 500, fontSize: "15px" }, "data-fg-deka181": ":0:/src/app/components/PlatformStack.tsx:211:21:8318:372:e:li:ete", children: [ 8143 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "deka182", _fgB: 1790697590027, className: "mt-[7px] h-1.5 w-1.5 rounded-full bg-amber-400 shrink-0", "data-fg-deka182": ":0:/src/app/components/PlatformStack.tsx:212:23:8515:76:e:span" }),
8144 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "deka183", _fgB: 1790697590027, style: { fontSize: "15px" }, "data-fg-deka183": ":0:/src/app/components/PlatformStack.tsx:213:23:8614:50:e:span:x", children: n }) 8145 ] }, o)) }) 8146 ] }, r)) }), 8147 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka186", _fgB: 1790697590027, className: "mt-4 shrink-0", "data-fg-deka186": ":0:/src/app/components/PlatformStack.tsx:222:11:8832:390:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: E, _fgS: "deka187", _fgB: 1790697590027, href: t.link || "#", className: "flex items-center gap-2 text-white uppercase tracking-widest text-xs font-semibold border-b border-white/30 pb-2 w-max hover:border-white hover:text-white transition-colors group-hover:pl-2 duration-300", "data-fg-deka187": ":0:node_modules/wouter:223:13:8876:329:e:Link:xte:::::C4yE", children: [ 8148 t.btn, 8149 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "deka189", _fgB: 1790697590027, size: 16, "data-fg-deka189": ":0:node_modules/lucide-react:225:1
81495:9161:24:e:ArrowRight::::::s5N" }) 8150 ] }) }) 8151 ] }), 8152 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka191", _fgB: 1790697590027, className: "relative h-48 md:h-full overflow-hidden order-1 md:order-2 bg-[#004494]", "data-fg-deka191": ":0:/src/app/components/PlatformStack.tsx:231:9:9269:468:e:div:e", children: /* @__PURE__ */ i( 8153 a, 8154 { 8155 _fgT: Le, 8156 _fgS: "deka192", 8157 _fgB: 1790697590027, 8158 src: t.img, 8159 alt: t.title, 8160 className: `w-full h-full transition-transform duration-[1500ms] ease-out group-hover:scale-105 ${t.title === "Rider & Driver Experience" ? "object-cover object-top -scale-x-100 group-hover:scale-x-[-1.05] group-hover:scale-y-105" : "object-cover"}`, 8161 "data-fg-deka192": ":0:/src/app/components/PlatformStack.tsx:232:11:9369:353:e:ImageWithFallback::::::DGky" 8162 } 8163 ) }) 8164 ] 8165 } 8166 ) 8167 } 8168 ); 8169} 8170const Ag = { 8171 hidden: { opacity: 0 }, 8172 visible: { 8173 opacity: 1, 8174 transition: { 8175 staggerChildren: 0.1, 8176 delayChildren: 0.2 8177 } 8178 } 8179}, Ng = { 8180 hidden: { y: "110%", rotate: 3 }, 8181 visible: { 8182 y: 0, 8183 rotate: 0, 8184 transition: { 8185 duration: 0.8, 8186 ease: [0.2, 0.65, 0.3, 0.9] 8187 } 8188 } 8189}; 8190function Ig() { 8191 const t = ["COMPLETE", "TRANSIT", "SUITE"]; 8192 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "deka193", _fgB: 1790697590027, _fgD: !0, id: "solutions", className: "py-24 relative bg-white", "data-fg-deka193": ":0:/src/app/components/PlatformStack.tsx:270:5:10236:1641:e:section:ete:1", children: [ 8193 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deka194", _fgB: 1790697590027, className: "text-center mb-16 px-6", "data-fg-deka194": ":0:/src/app/components/PlatformStack.tsx:271:7:10303:1370:e:div:etete", children: [
8194 /* @__PURE__ */ i( 8195 a, 8196 { 8197 _fgT: m.div, 8198 _fgS: "deka195", 8199 _fgB: 1790697590027, 8200 initial: { opacity: 0, y: 10 }, 8201 whileInView: { opacity: 1, y: 0 }, 8202 viewport: { once: !0, amount: 0.8 }, 8203 className: "uppercase text-xs font-bold text-[#0056B3] tracking-widest mb-4", 8204 "data-fg-deka195": ":0:/src/app/components/PlatformStack.tsx:272:9:10352:289:e:motion.div:t", 8205 children: "The Platform" 8206 } 8207 ), 8208 /* @__PURE__ */ i( 8209 a, 8210 { 8211 _fgT: m.h2, 8212 _fgS: "deka197", 8213 _fgB: 1790697590027, 8214 className: "text-5xl md:text-7xl font-semibold text-slate-900 tracking-tight font-space-grotesk mb-6 flex justify-center gap-4 flex-wrap", 8215 variants: Ag, 8216 initial: "hidden", 8217 whileInView: "visible", 8218 viewport: { once: !0, amount: 0.8, margin: "0px 0px -100px 0px" }, 8219 "data-fg-deka197": ":0:/src/app/components/PlatformStack.tsx:281:9:10659:611:e:motion.h2:x", 8220 children: t.map((e, s) => /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka199", _fgB: 1790697590027, className: "overflow-hidden", "data-fg-deka199": ":0:/src/app/components/PlatformStack.tsx:289:13:11053:182:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: m.span, _fgS: "deka200", _fgB: 1790697590027, className: "block", variants: Ng, "data-fg-deka200": ":0:/src/app/components/PlatformStack.tsx:290:15:11109:107:e:motion.span:x", children: e }) }, s)) 8221 } 8222 ),
8223 /* @__PURE__ */ i( 8224 a, 8225 { 8226 _fgT: m.p, 8227 _fgS: "deka202", 8228 _fgB: 1790697590027, 8229 initial: { opacity: 0, y: 20 }, 8230 whileInView: { opacity: 1, y: 0 }, 8231 viewport: { once: !0, amount: 0.8 }, 8232 transition: { delay: 0.5, duration: 0.8 }, 8233 className: "font-light text-slate-600 max-w-xl mx-auto text-lg", 8234 "data-fg-deka202": ":0:/src/app/components/PlatformStack.tsx:297:9:11288:372:e:motion.p:t", 8235 children: "One platform to rule every aspect of your transit operation" 8236 } 8237 ) 8238 ] }), 8239 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "deka204", _fgB: 1790697590027, className: "w-full max-w-[1400px] mx-auto px-6 pb-24", "data-fg-deka204": ":0:/src/app/components/PlatformStack.tsx:308:7:11681:181:e:div:x", children: Bg.map((e, s) => /* @__PURE__ */ i(a, { _fgT: kg, _fgS: "deka206", _fgB: 1790697590027, card: e, index: s, "data-fg-deka206": ":0:/src/app/components/PlatformStack.tsx:310:19:11792:45:e:Card::::::B4Xc" }, e.num)) }) 8240 ] }); 8241} 8242const Pg = globalThis.__GLOBALS__.getAssetURL("2eb91e84f53b0a5e76be6b68861a7e5535f1b1d8.png"), Cg = { 8243 hidden: { opacity: 0 }, 8244 visible: { 8245 opacity: 1, 8246 transition: { 8247 staggerChildren: 0.05, 8248 delayChildren: 0.1 8249 } 8250 } 8251}, Oa = { 8252 hidden: { opacity: 0, y: 20, filter: "blur(8px)" }, 8253 visible: { 8254 opacity: 1, 8255 y: 0, 8256 filter: "blur(0px)", 8257 transition: { 8258 duration: 0.6, 8259 ease: "easeOut" 8260 } 8261 } 8262}; 8263function Fg() { 8264 const { openContactModal: t } = Z(), e = "Your riders are waiting.".split(" "), s = "Let's build something better.".split(" "); 8265 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "dn1t0", _fgB: 1790697590041, _fgD: !0, id: "contact", className: "relative z-20 overflow-hidden px-4 md:px-8 py-4 md:py-8", "data-fg-dn1t0": ":0:/src/app/components/CTA.tsx:35:5:782:2271:e:section:xtete:1", children: [ 8266 /* @__PURE__ */ i( 8267 a, 8268 { 8269 _fgT: "img", 8270 _fgS: "dn1t2", 8271 _fgB: 1790697590041, 8272 src: Pg, 8273 alt: "", 8274 className: "absolute inset-4 md:inset-8 w-[calc(100%-2rem)] md:w-[calc(100%-4rem)] h-[calc(100%-2rem)] md:h-[calc(100%-4rem)] object-cover rounded-2xl md:rounded-3xl", 8275 "data-fg-dn1t2": ":0:/src/app/components/CTA.tsx:37:7:946:222
8275:e:img" 8276 } 8277 ), 8278 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dn1t3", _fgB: 1790697590041, className: "relative z-10 flex flex-col items-center min-h-[750px] md:min-h-[900px] px-6 text-center", "data-fg-dn1t3": ":0:/src/app/components/CTA.tsx:43:7:1176:1862:e:div:xtetxtetxte", children: [ 8279 /* @__PURE__ */ c( 8280 a, 8281 { 8282 _fgT: m.h2, 8283 _fgS: "dn1t5", 8284 _fgB: 1790697590041, 8285 className: "text-4xl md:text-6xl font-bold text-[#1a2332] pt-12 md:pt-16 tracking-tight font-space-grotesk", 8286 variants: Cg, 8287 initial: "hidden", 8288 whileInView: "visible", 8289 viewport: { once: !0, amount: 0.8, margin: "0px 0px -100px 0px" }, 8290 "data-fg-dn1t5": ":0:/src/app/components/CTA.tsx:45:9:1334:869:e:motion.h2:ete", 8291 children: [ 8292 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dn1t6", _fgB: 1790697590041, className: "flex flex-wrap justify-center gap-x-3", "data-fg-dn1t6": ":0:/src/app/components/CTA.tsx:52:11:1660:253:e:span:x", children: e.map((r, n) => /* @__PURE__ */ i(a, { _fgT: m.span, _fgS: "dn1t8", _fgB: 1790697590041, variants: Oa, "data-fg-dn1t8": ":0:/src/app/components/CTA.tsx:54:15:1774:105:e:motion.span:x", children: r }, `l1-${n}`)) }),
8293 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dn1t10", _fgB: 1790697590041, className: "flex flex-wrap justify-center gap-x-3 mt-1", "data-fg-dn1t10": ":0:/src/app/components/CTA.tsx:59:11:1924:258:e:span:x", children: s.map((r, n) => /* @__PURE__ */ i(a, { _fgT: m.span, _fgS: "dn1t12", _fgB: 1790697590041, variants: Oa, "data-fg-dn1t12": ":0:/src/app/components/CTA.tsx:61:15:2043:105:e:motion.span:x", children: r }, `l2-${n}`)) }) 8294 ] 8295 } 8296 ), 8297 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dn1t15", _fgB: 1790697590041, className: "flex-1", "data-fg-dn1t15": ":0:/src/app/components/CTA.tsx:69:9:2275:26:e:div" }), 8298 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dn1t17", _fgB: 1790697590041, className: "pb-10 md:pb-14", "data-fg-dn1t17": ":0:/src/app/components/CTA.tsx:72:9:2372:653:e:div:e", children: /* @__PURE__ */ i( 8299 a, 8300 { 8301 _fgT: m.div, 8302 _fgS: "dn1t18", 8303 _fgB: 1790697590041, 8304 initial: { opacity: 0, y: 20 }, 8305 whileInView: { opacity: 1, y: 0 }, 8306 viewport: { once: !0, amount: 1 }, 8307 transition: { delay: 0.6, duration: 0.5 }, 8308 "data-fg-dn1t18": ":0:/src/app/components/CTA.tsx:73:11:2415:595:e:motion.div:e", 8309 children: /* @__PURE__ */ i( 8310 a, 8311 { 8312 _fgT: "button", 8313 _fgS: "dn1t19", 8314 _fgB: 1790697590041, 8315 onClick: t, 8316 className: "inline-block bg-transparent border-2 border-white text-white font-bold tracking-widest rounded-full px-14 py-6 text-lg hover:bg-white/15 transition-all duration-300 backdrop-blur-sm cursor-pointer", 8317 "data-fg-dn1t19": ":0:/src/app/components/CTA.tsx:79:13:2646:340:e:button:t", 8318 children: "Schedule a Meeting" 8319 } 8320 ) 8321 } 8322 ) }) 8323 ] }) 8324 ] }); 8325} 8326const Eg = globalThis.__GLOBALS__.getAssetURL("13f77251b9538c4af5e5122a2eab7014a16ccf54.png"); 8327function Me() { 8328 p5(); 8329 const t = (e) => { 8330 switch (e) { 8331 case "All Markets": 8332 return "/markets"; 8333 case "Microtransit": 8334 return "/microtransit"; 8335 case "Paratransit": 8336 return "/paratransit"; 8337 case "NEMT": 8338 return "/nemt"; 8339 case "Fixed Route": 8340 return "/markets/fixed-route"; 8341 case "Private TNC's & Taxi": 8342 return "/taxi-dispatch"; 8343 case "Offerings": 8344 return "/offerings"; 8345 case "All-In-One Platform": 8346 return "/all-in-one-platform"; 8347 case "AI Solutions": 8348 return "/ai-solutions"; 8349 case "About Us": 8350 return "/about"; 8351 case "News & Articles": 8352 return "/news-articles"; 8353 case "Book a Meeting": 8354 return "/meet"; 8355 default: 8356 return "#"; 8357 } 8358 }; 8359 return /* @__PURE__ */ i(a, { _fgT: "footer", _fgS: "bb440", _fgB: 1790697589916, _fgD: !0, className: "w-full bg-[#0A1628] text-white py-8 md:py-10", "data-fg-bb440": ":0:/src/app/components/Footer.tsx:26:5:941:4932:e:footer:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb441", _fgB: 1790697589916, className: "w-full max-w-7xl mx-auto px-6", "data-fg-bb441": ":0:/src/app/components/Footer.tsx:27:7:1013:4846:e:div:ete", children: [ 8360 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb442", _fgB: 1790697589916, className: "grid grid-cols-1 md:grid-cols-12 gap-8 w-full mb-8 items-start", "data-fg-bb442": ":0:/src/app/components/Footer.tsx:28:9:1069:4311:e:div:xtetxte", children: [
8361 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb444", _fgB: 1790697589916, className: "md:col-span-5 flex flex-col gap-4", "data-fg-bb444": ":0:/src/app/components/Footer.tsx:30:11:1184:1316:e:div:etete", children: [ 8362 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "bb445", _fgB: 1790697589916, href: "/", className: "self-start inline-block transition-transform duration-300 hover:-translate-y-1", "data-fg-bb445": ":0:node_modules/wouter:31:13:1248:299:e:Link:e:::::C4yE", children: /* @__PURE__ */ i( 8363 a, 8364 { 8365 _fgT: "img", 8366 _fgS: "bb446", 8367 _fgB: 1790697589916, 8368 src: Eg, 8369 alt: "IT Curves", 8370 className: "h-8 w-auto object-contain brightness-0 invert", 8371 "data-fg-bb446": ":0:/src/app/components/Footer.tsx:32:15:1369:158:e:img" 8372 } 8373 ) }), 8374 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bb447", _fgB: 1790697589916, className: "text-blue-100 max-w-sm font-light text-sm leading-snug", "data-fg-bb447": ":0:/src/app/components/Footer.tsx:38:13:1560:226:e:p:t", children: "Empowering transportation service providers with next-generation dispatch, scheduling, and routing technology." }),
8375 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bb449", _fgB: 1790697589916, className: "flex gap-2.5 mt-1", "data-fg-bb449": ":0:/src/app/components/Footer.tsx:42:13:1799:684:e:div:x", children: [ 8376 { Icon: K7, href: "https://www.linkedin.com/company/it-curves/posts/?feedView=all" } 8377 ].map(({ Icon: e, href: s }, r) => /* @__PURE__ */ i( 8378 a, 8379 { 8380 _fgT: "a", 8381 _fgS: "bb4411", 8382 _fgB: 1790697589916, 8383 href: s, 8384 target: "_blank", 8385 rel: "noopener noreferrer", 8386 className: "w-8 h-8 rounded-full border border-white/20 flex items-center justify-center transition-all duration-300 hover:-translate-y-1 hover:text-yellow-400 hover:border-yellow-400 bg-white/5", 8387 "data-fg-bb4411": ":0:/src/app/components/Footer.tsx:46:17:2021:425:e:a:e", 8388 children: /* @__PURE__ */ i(a, { _fgT: e, _fgS: "bb4412", _fgB: 1790697589916, size: 14, "data-fg-bb4412": ":0:/src/app/components/Footer.tsx:53:19:2407:18:e:Icon" }) 8389 }, 8390 r 8391 )) }) 8392 ] }),
8393 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4414", _fgB: 1790697589916, className: "md:col-span-7 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-8 md:gap-4 md:pl-10", "data-fg-bb4414": ":0:/src/app/components/Footer.tsx:60:11:2564:2801:e:div:etetete", children: [ 8394 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4415", _fgB: 1790697589916, "data-fg-bb4415": ":0:/src/app/components/Footer.tsx:61:13:2679:677:e:div:ete", children: [ 8395 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bb4416", _fgB: 1790697589916, className: "font-bold uppercase tracking-widest text-[11px] mb-3 text-blue-200", "data-fg-bb4416": ":0:/src/app/components/Footer.tsx:62:15:2699:127:e:h4:t", children: "Markets" }), 8396 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bb4418", _fgB: 1790697589916, className: "flex flex-col gap-2 text-white text-[13px] font-medium", "data-fg-bb4418": ":0:/src/app/components/Footer.tsx:65:15:2841:496:e:ul:x", children: ["All Markets", "Microtransit", "Paratransit", "NEMT", "Fixed Route", "Private TNC's & Taxi"].map((e) => /* @__PURE__ */ i(a, { _fgT: "li", _fgS: "bb4420", _fgB: 1790697589916, "data-fg-bb4420": ":0:/src/app/components/Footer.tsx:67:19:3058:239:e:li:e", children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "bb4421", _fgB: 1790697589916, href: t(e), className: "inline-block transition-all duration-300 hover:text-yellow-400 hover:translate-x-1", "data-fg-bb4421": ":0:node_modules/wouter:68:21:3094:179:e:Link:x:::::C4yE", children: e }) }, e)) }) 8397 ] }),
8398 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4423", _fgB: 1790697589916, "data-fg-bb4423": ":0:/src/app/components/Footer.tsx:76:13:3370:625:e:div:ete", children: [ 8399 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bb4424", _fgB: 1790697589916, className: "font-bold uppercase tracking-widest text-[11px] mb-3 text-blue-200", "data-fg-bb4424": ":0:/src/app/components/Footer.tsx:77:15:3390:129:e:h4:t", children: "Solutions" }), 8400 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bb4426", _fgB: 1790697589916, className: "flex flex-col gap-2 text-white text-[13px] font-medium", "data-fg-bb4426": ":0:/src/app/components/Footer.tsx:80:15:3534:442:e:ul:x", children: ["All-In-One Platform", "AI Solutions"].map((e) => /* @__PURE__ */ i(a, { _fgT: "li", _fgS: "bb4428", _fgB: 1790697589916, "data-fg-bb4428": ":0:/src/app/components/Footer.tsx:82:19:3697:239:e:li:e", children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "bb4429", _fgB: 1790697589916, href: t(e), className: "inline-block transition-all duration-300 hover:text-yellow-400 hover:translate-x-1", "data-fg-bb4429": ":0:node_modules/wouter:83:21:3733:179:e:Link:x:::::C4yE", children: e }) }, e)) }) 8401 ] }),
8402 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4431", _fgB: 1790697589916, "data-fg-bb4431": ":0:/src/app/components/Footer.tsx:91:13:4009:779:e:div:ete", children: [ 8403 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bb4432", _fgB: 1790697589916, className: "font-bold uppercase tracking-widest text-[11px] mb-3 text-blue-200", "data-fg-bb4432": ":0:/src/app/components/Footer.tsx:92:15:4029:127:e:h4:t", children: "Company" }), 8404 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bb4434", _fgB: 1790697589916, className: "flex flex-col gap-2 text-white text-[13px] font-medium", "data-fg-bb4434": ":0:/src/app/components/Footer.tsx:95:15:4171:598:e:ul:x", children: ["About Us", "News & Articles", "Book a Meeting"].map((e) => /* @__PURE__ */ i(a, { _fgT: "li", _fgS: "bb4436", _fgB: 1790697589916, "data-fg-bb4436": ":0:/src/app/components/Footer.tsx:97:19:4344:385:e:li:e", children: /* @__PURE__ */ i( 8405 a, 8406 { 8407 _fgT: E, 8408 _fgS: "bb4437", 8409 _fgB: 1790697589916, 8410 href: t(e), 8411 onClick: () => { 8412 window.scrollTo(0, 0); 8413 }, 8414 className: "inline-block transition-all duration-300 hover:text-yellow-400 hover:translate-x-1 cursor-pointer", 8415 "data-fg-bb4437": ":0:node_modules/wouter:98:21:4380:325:e:Link:x:::::C4yE", 8416 children: e 8417 } 8418 ) }, e)) }) 8419 ] }),
8420 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4439", _fgB: 1790697589916, "data-fg-bb4439": ":0:/src/app/components/Footer.tsx:110:13:4802:546:e:div:ete", children: [ 8421 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bb4440", _fgB: 1790697589916, className: "font-bold uppercase tracking-widest text-[11px] mb-3 text-blue-200", "data-fg-bb4440": ":0:/src/app/components/Footer.tsx:111:15:4822:133:e:h4:t", children: "Quick Contact" }), 8422 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4442", _fgB: 1790697589916, className: "flex flex-col gap-2 text-white text-[13px] font-medium", "data-fg-bb4442": ":0:/src/app/components/Footer.tsx:114:15:4970:359:e:div:ete", children: [ 8423 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "bb4443", _fgB: 1790697589916, "data-fg-bb4443": ":0:/src/app/components/Footer.tsx:115:17:5059:58:e:p:tet", children: [ 8424 "8201 Snouffer School Rd", 8425 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bb4445", _fgB: 1790697589916, "data-fg-bb4445": ":0:/src/app/components/Footer.tsx:115:43:5085:6:e:br" }), 8426 "Gaithersburg, MD 20879" 8427 ] }),
8428 /* @__PURE__ */ i(a, { _fgT: "a", _fgS: "bb4447", _fgB: 1790697589916, href: "tel:+13012082222", className: "inline-block transition-all duration-300 hover:text-yellow-400 hover:translate-x-1", "data-fg-bb4447": ":0:/src/app/components/Footer.tsx:116:17:5134:174:e:a:t", children: "301.208.2222" }) 8429 ] }) 8430 ] }) 8431 ] }) 8432 ] }), 8433 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bb4449", _fgB: 1790697589916, className: "border-t border-white/10 pt-5 flex flex-col md:flex-row justify-between items-center gap-4 text-[11px] text-blue-200", "data-fg-bb4449": ":0:/src/app/components/Footer.tsx:124:9:5390:456:e:div:ete", children: [ 8434 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bb4450", _fgB: 1790697589916, "data-fg-bb4450": ":0:/src/app/components/Footer.tsx:125:11:5535:45:e:p:t", children: "© 2026 IT Curves. All rights reserved." }), 8435 /* @__PURE__ */ i( 8436 a, 8437 { 8438 _fgT: E, 8439 _fgS: "bb4452", 8440 _fgB: 1790697589916, 8441 href: "/flyers", 8442 onClick: () => { 8443 window.scrollTo(0, 0); 8444 }, 8445 className: "text-white/30 hover:text-white/60 transition-colors duration-300 cursor-pointer", 8446 "data-fg-bb4452": ":0:node_modules/wouter:126:11:5591:240:e:Link:t:::::C4yE", 8447 children: "Flyers" 8448 } 8449 ) 8450 ] }) 8451 ] }) }); 8452} 8453function Rg() { 8454 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "b3c70", _fgB: 1790697590043, _fgD: !0, className: "py-24 bg-[#0A1628]", "data-fg-b3c70": ":0:/src/app/components/VideoShowcase.tsx:5:5:89:1624:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b3c71", _fgB: 1790697590043, className: "container mx-auto px-6", "data-fg-b3c71": ":0:/src/app/components/VideoShowcase.tsx:6:7:136:1562:e:div:ete", children: [ 8455 /* @__PURE__ */ c( 8456 a, 8457 { 8458 _fgT: m.div, 8459 _fgS: "b3c72", 8460 _fgB: 1790697590043, 8461 initial: { opacity: 0, y: 30 }, 8462 whileInView: { opacity: 1, y: 0 }, 8463 viewport: { once: !0 }, 8464 transition: { duration: 0.6 }, 8465 className: "max-w-4xl mx-auto text-center mb-12", 8466 "data-fg-b3c72": ":0:/src/app/components/VideoShowcase.tsx:7:9:185:728:e:motion.div:ete", 8467 children: [
8468 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "b3c73", _fgB: 1790697590043, className: "text-3xl md:text-4xl font-light text-white mb-6 font-[Space_Grotesk]", "data-fg-b3c73": ":0:/src/app/components/VideoShowcase.tsx:14:11:439:148:e:h2:t", children: "IT Curves is more than technology." }), 8469 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b3c75", _fgB: 1790697590043, className: "text-gray-400 text-lg leading-relaxed max-w-3xl mx-auto", "data-fg-b3c75": ":0:/src/app/components/VideoShowcase.tsx:17:11:598:293:e:p:t", children: "IT Curves is more than technology. We're proud to be a Maryland-based, vertically integrated network of four transportation companiesâdelivering smarter, safer, and more reliable transportation." }) 8470 ] 8471 } 8472 ), 8473 /* @__PURE__ */ i( 8474 a, 8475 { 8476 _fgT: m.div, 8477 _fgS: "b3c77", 8478 _fgB: 1790697590043, 8479 initial: { opacity: 0, y: 30 }, 8480 whileInView: { opacity: 1, y: 0 }, 8481 viewport: { once: !0 }, 8482 transition: { duration: 0.6, delay: 0.2 }, 8483 className: "max-w-4xl mx-auto", 8484 "data-fg-b3c77": ":0:/src/app/components/VideoShowcase.tsx:22:9:923:762:e:motion.div:e", 8485 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b3c78", _fgB: 1790697590043, className: "relative w-full rounded-2xl overflow-hidden shadow-2xl border border-white/10", style: { paddingBottom: "56.25%" }, "data-fg-b3c78": ":0:/src/app/components/VideoShowcase.tsx:29:11:1171:492:e:div:e", children: /* @__PURE__ */ i( 8486 a, 8487 { 8488 _fgT: "iframe", 8489 _fgS: "b3c79", 8490 _fgB: 1790697590043, 8491 className: "absolute inset-0 w-full h-full", 8492 src: "https://www.youtube.com/embed/LyuFJtAiXUI", 8493 title: "IT Curves Video", 8494 allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share", 8495 allowFullScreen: !0, 8496 "data-fg-b3c79": ":0:/src/app/components/VideoShowcase.tsx:30:13:1315:331:e:iframe" 8497 } 8498 ) }) 8499 } 8500 ) 8501 ] }) }); 8502} 8503function Va() { 8504 return /* @__PURE__ */ c(C, { children: [ 8505 /* @__PURE__ */ i(a, { _fgT: Yd, _fgS: "q5z1", _fgB: 1790697589402, "data-fg-q5z1": ":0:/src/app/pages/HomePage.tsx:15:7:626:10:e:HeroV2::::::Dp4V" }), 8506 /* @__PURE__ */ i(a, { _fgT: Qd, _fgS: "q5z3", _fgB: 1790697589402, "data-fg-q5z3": ":0:/src/app/pages/HomePage.tsx:17:7:666:21:e:AcquisitionBanner::::::io3" }), 8507 /* @__PURE__ */ i(a, { _fgT: Lg, _fgS: "q5z4", _fgB: 1790697589402, "data-fg-q5z4": ":0:/src/app/pages/HomePage.tsx:18:7:694:11:e:Markets::::::BBXd" }), 8508 /* @__PURE__ */ i(a, { _fgT: bg, _fgS: "q5z5", _fgB: 1790697589402, "data-fg-q5z5": ":0:/src/app/pages/HomePage.tsx:19:7:712:19:e:TrustedAgencies::::::Bms5" }), 8509 /* @__PURE__ */ i(a, { _fgT: Ig, _fgS: "q5z6", _fgB: 1790697589402, "data-fg-q5z6": ":0:/src/app/pages/HomePage.tsx:20:7:738:17:e:PlatformStack::::::EFxV" }), 8510 /* @__PURE__ */ i(a, { _fgT: Rg, _fgS: "q5z8", _fgB: 1790697589402, "data-fg-q5z8": ":0:/src/app/pages/HomePage.tsx:22:7:793:17:e:VideoShowcase::::::oyR" }), 8511 /* @__PURE__ */ i(a, { _fgT: Fg, _fgS: "q5z9", _fgB: 1790697589402, "data-fg-q5z9": ":0:/src/app/pages/HomePage.tsx:23:7:817:7:e:CTA::::::EAYt" }), 8512 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "q5z10", _fgB: 1790697589402, "data-fg-q5z10": ":0:/src/app/pages/HomePage.tsx:24:7:831:10:e:Footer::::::B1Vv" }) 8513 ] }); 8514} 8515const Dg = globalThis.__GLOBALS__.getAssetURL("8c7e6bacabea10a317ff6e5ecdc576f762c88036.png"); 8516function zg() { 8517 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "ba160", _fgB: 1790697590046, _fgD: !0, className: "relative h-[80vh] min-h-[600px] overflow-hidden bg-black", "data-fg-ba160": ":0:/src/app/components/markets/MarketsHero.tsx:8:5:313:1437:e:section:xtetxte:1", children: [ 8518 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ba162", _fgB: 1790697590046, className: "absolute inset-0", "data-fg-ba162": ":0:/src/app/components/markets/MarketsHero.tsx:10:7:429:329:e:div:ete", children: [
8519 /* @__PURE__ */ i( 8520 a, 8521 { 8522 _fgT: Le, 8523 _fgS: "ba163", 8524 _fgB: 1790697590046, 8525 src: Dg, 8526 alt: "Transit riders", 8527 className: "w-full h-full object-cover object-top opacity-60", 8528 "data-fg-ba163": ":0:/src/app/components/markets/MarketsHero.tsx:11:9:472:161:e:ImageWithFallback::::::Bqoy" 8529 } 8530 ), 8531 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ba164", _fgB: 1790697590046, className: "absolute inset-0 bg-gradient-to-r from-black/80 via-black/40 to-transparent w-[60%]", "data-fg-ba164": ":0:/src/app/components/markets/MarketsHero.tsx:16:9:642:103:e:div" }) 8532 ] }), 8533 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ba166", _fgB: 1790697590046, className: "relative z-10 h-full flex flex-col justify-center px-6 md:px-12 lg:px-16 max-w-4xl mr-auto", "data-fg-ba166": ":0:/src/app/components/markets/MarketsHero.tsx:20:7:788:947:e:div:e", children: /* @__PURE__ */ c( 8534 a, 8535 { 8536 _fgT: m.div, 8537 _fgS: "ba167", 8538 _fgB: 1790697590046, 8539 initial: { opacity: 0, y: 30 }, 8540 animate: { opacity: 1, y: 0 }, 8541 transition: { duration: 0.8, delay: 0.2 }, 8542 "data-fg-ba167": ":0:/src/app/components/markets/MarketsHero.tsx:21:9:905:817:e:motion.div:etete", 8543 children: [
8544 /* @__PURE__ */ i(a, { _fgT: "h5", _fgS: "ba168", _fgB: 1790697590046, className: "text-[#EFBB0F] font-bold tracking-widest uppercase mb-4", "data-fg-ba168": ":0:/src/app/components/markets/MarketsHero.tsx:26:11:1073:96:e:h5:t", children: "Beyond the Software" }), 8545 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "ba1610", _fgB: 1790697590046, className: "text-5xl md:text-7xl lg:text-8xl font-light text-white mb-6 leading-[0.9] font-[Space_Grotesk]", "data-fg-ba1610": ":0:/src/app/components/markets/MarketsHero.tsx:27:11:1180:249:e:h1:tete", children: [ 8546 "Moving People, ", 8547 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "ba1612", _fgB: 1790697590046, "data-fg-ba1612": ":0:/src/app/components/markets/MarketsHero.tsx:28:28:1319:6:e:br" }), 8548 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ba1613", _fgB: 1790697590046, className: "font-serif italic text-blue-200", "data-fg-ba1613": ":0:/src/app/components/markets/MarketsHero.tsx:29:13:1338:75:e:span:t", children: "Not Just Vehicles." }) 8549 ] }),
8550 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ba1615", _fgB: 1790697590046, className: "text-xl md:text-2xl text-gray-200 max-w-2xl font-light leading-relaxed", "data-fg-ba1615": ":0:/src/app/components/markets/MarketsHero.tsx:31:11:1440:260:e:p:t", children: "IT Curves serves the full spectrum of public and specialized transit. One platform, purpose-built for the markets that keep communities connected." }) 8551 ] 8552 } 8553 ) }) 8554 ] }); 8555} 8556const Ha = [ 8557 { id: "paratransit", title: "Paratransit", desc: "Specialized care & ADA compliance", angle: 270, color: "bg-blue-100 text-blue-700", href: "/paratransit" }, 8558 { id: "fixed-route", title: "Fixed Route", desc: "Reliable backbone of city transit", angle: 342, color: "bg-amber-100 text-amber-700", href: "/markets/fixed-route" }, 8559 { id: "microtransit", title: "Microtransit", desc: "Flexible, on-demand urban mobility", angle: 54, color: "bg-green-100 text-green-700", href: "/microtransit" }, 8560 { id: "nemt", title: "NEMT", desc: "Compassionate medical transportation", angle: 126, color: "bg-purple-100 text-purple-700", href: "/nemt" }, 8561 { id: "taxi-dispatch", title: "Private TNC's & Taxi", desc: "Centralized multi-provider dispatch", angle: 198, color: "bg-yellow-100 text-yellow-700", href: "/taxi-dispatch" } 8562]; 8563function jg() { 8564 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "bwio0", _fgB: 1790697590062, _fgD: !0, className: "py-12 bg-gradient-to-b from-blue-50 via-sky-50 to-white overflow-hidden relative flex flex-col items-center", "data-fg-bwio0": ":0:/src/app/components/markets/MarketHub.tsx:18:5:1113:4854:e:section:etxte:1", children: [ 8565 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio1", _fgB: 1790697590062, className: "max-w-7xl mx-auto px-6 text-center relative z-10 mb-2", "data-fg-bwio1": ":0:/src/app/components/markets/MarketHub.tsx:19:7:1249:528:e:div:e", children: /* @__PURE__ */ c( 8566 a, 8567 { 8568 _fgT: m.div, 8569 _fgS: "bwio2", 8570 _fgB: 1790697590062, 8571 initial: { opacity: 0, y: 20 }, 8572 whileInView: { opacity: 1, y: 0 }, 8573 viewport: { once: !0 }, 8574 transition: { duration: 0.6 }, 8575 "data-fg-bwio2": ":0:/src/app/components/markets/MarketHub.tsx:20:9:1329:435:e:motion.div:ete", 8576 children: [
8577 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bwio3", _fgB: 1790697590062, className: "text-4xl md:text-5xl font-light text-slate-900 mb-4 font-[Space_Grotesk]", "data-fg-bwio3": ":0:/src/app/components/markets/MarketHub.tsx:26:11:1525:115:e:h2:t", children: "How Can We Serve You?" }), 8578 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bwio5", _fgB: 1790697590062, className: "text-slate-500 text-lg", "data-fg-bwio5": ":0:/src/app/components/markets/MarketHub.tsx:27:11:1651:91:e:p:t", children: "Select your market to explore tailored solutions." }) 8579 ] 8580 } 8581 ) }), 8582 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bwio8", _fgB: 1790697590062, className: "relative w-[850px] h-[850px] scale-[0.35] sm:scale-50 md:scale-65 lg:scale-80 xl:scale-90 flex-shrink-0 flex items-center justify-center", "data-fg-bwio8": ":0:/src/app/components/markets/MarketHub.tsx:32:7:1863:4089:e:div:xtetxtetxte", children: [ 8583 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio10", _fgB: 1790697590062, className: "absolute inset-0 z-10 pointer-events-none", "data-fg-bwio10": ":0:/src/app/components/markets/MarketHub.tsx:35:9:2063:1220:e:div:x", children: Ha.map((e, s) => /* @__PURE__ */ c( 8584 a, 8585 { 8586 _fgT: "div", 8587 _fgS: "bwio12", 8588 _fgB: 1790697590062, 8589 className: "absolute top-1/2 left-1/2 h-14 bg-gray-400/70 origin-left flex items-center overflow-hidden rounded-r-full", 8590 style: { 8591 width: "280px", 8592 transform: `translate(0, -50%) rotate(${e.angle}deg)` 8593 }, 8594 "data-fg-bwio12": ":0:/src/app/components/markets/MarketHub.tsx:37:13:2175:1079:e:div:ete", 8595 children: [
8596 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio13", _fgB: 1790697590062, className: "w-full h-0 border-t-2 border-dashed border-yellow-400", "data-fg-bwio13": ":0:/src/app/components/markets/MarketHub.tsx:45:15:2530:73:e:div" }), 8597 /* @__PURE__ */ i( 8598 a, 8599 { 8600 _fgT: m.div, 8601 _fgS: "bwio14", 8602 _fgB: 1790697590062, 8603 className: "absolute", 8604 animate: { 8605 left: ["10%", "80%", "10%"] 8606 }, 8607 transition: { 8608 duration: 10, 8609 repeat: 1 / 0, 8610 ease: "linear", 8611 delay: s * 2 8612 }, 8613 "data-fg-bwio14": ":0:/src/app/components/markets/MarketHub.tsx:47:15:2633:602:e:motion.div:e", 8614 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio15", _fgB: 1790697590062, className: "p-1.5 bg-white rounded-full shadow-sm border border-slate-300 rotate-90 relative z-20", "data-fg-bwio15": ":0:/src/app/components/markets/MarketHub.tsx:59:19:3014:193:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: kc, _fgS: "bwio16", _fgB: 1790697590062, size: 14, className: "text-[#EFBB0F]", "data-fg-bwio16": ":0:node_modules/lucide-react:60:21:3138:44:e:Bus::::::EI9C" }) }) 8615 } 8616 ) 8617 ] 8618 }, 8619 `road-${s}` 8620 )) }),
8621 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio18", _fgB: 1790697590062, className: "absolute inset-0 z-20 pointer-events-none", "data-fg-bwio18": ":0:/src/app/components/markets/MarketHub.tsx:68:9:3329:1800:e:div:x", children: Ha.map((e) => { 8622 const s = e.angle * Math.PI / 180, r = Math.cos(s) * 280, n = Math.sin(s) * 280; 8623 return /* @__PURE__ */ i( 8624 a, 8625 { 8626 _fgT: "div", 8627 _fgS: "bwio20", 8628 _fgB: 1790697590062, 8629 className: "absolute pointer-events-auto", 8630 style: { 8631 left: "50%", 8632 top: "50%", 8633 transform: `translate(${r}px, ${n}px) translate(-50%, -50%)` 8634 }, 8635 "data-fg-bwio20": ":0:/src/app/components/markets/MarketHub.tsx:75:16:3630:1454:e:div:e", 8636 children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "bwio21", _fgB: 1790697590062, href: e.href, "data-fg-bwio21": ":0:node_modules/wouter:84:18:3975:1087:e:Link:e:::::C4yE", children: /* @__PURE__ */ c( 8637 a, 8638 { 8639 _fgT: m.div, 8640 _fgS: "bwio22", 8641 _fgB: 1790697590062, 8642 whileHover: { scale: 1.05 }, 8643 whileTap: { scale: 0.95 }, 8644 className: "w-56 h-56 rounded-full bg-white border-4 border-white shadow-[0_8px_30px_rgba(0,0,0,0.12),0_2px_8px_rgba(0,0,0,0.06)] flex flex-col items-center justify-center p-5 cursor-pointer group transition-colors hover:border-blue-100", 8645 "data-fg-bwio22": ":0:/src/app/components/markets/MarketHub.tsx:85:20:4020:1017:e:motion.div:etete", 8646 children: [
8647 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio23", _fgB: 1790697590062, className: `w-12 h-12 rounded-full ${e.color} flex items-center justify-center mb-3 transition-transform duration-300`, "data-fg-bwio23": ":0:/src/app/components/markets/MarketHub.tsx:90:23:4435:343:e:div:e", children: /* @__PURE__ */ i( 8648 a, 8649 { 8650 _fgT: D, 8651 _fgS: "bwio24", 8652 _fgB: 1790697590062, 8653 size: 20, 8654 style: { transform: `rotate(${e.angle}deg)` }, 8655 "data-fg-bwio24": ":0:node_modules/lucide-react:91:26:4591:158:e:ArrowRight::::::s5N" 8656 } 8657 ) }), 8658 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bwio25", _fgB: 1790697590062, className: "font-bold text-slate-800 text-xl mb-1 text-center", "data-fg-bwio25": ":0:/src/app/components/markets/MarketHub.tsx:96:23:4801:85:e:h3:x", children: e.title }), 8659 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bwio27", _fgB: 1790697590062, className: "text-xs text-slate-500 leading-tight max-w-[160px] text-center", "data-fg-bwio27": ":0:/src/app/components/markets/MarketHub.tsx:97:23:4909:95:e:p:x", children: e.desc }) 8660 ] 8661 } 8662 ) }) 8663 }, 8664 `card-wrapper-${e.id}` 8665 ); 8666 }) }),
8667 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bwio30", _fgB: 1790697590062, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-30 pointer-events-none", "data-fg-bwio30": ":0:/src/app/components/markets/MarketHub.tsx:106:9:5179:751:e:div:ete", children: [ 8668 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio31", _fgB: 1790697590062, className: "w-44 h-44 bg-[#0056B3] rounded-full flex flex-col items-center justify-center shadow-[0_20px_50px_rgba(0,86,179,0.3)] relative border-[6px] border-white pointer-events-auto", "data-fg-bwio31": ":0:/src/app/components/markets/MarketHub.tsx:107:11:5292:454:e:div:xte", children: /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "bwio33", _fgB: 1790697590062, className: "text-white font-bold text-xl tracking-tight text-center leading-none", "data-fg-bwio33": ":0:/src/app/components/markets/MarketHub.tsx:109:13:5536:193:e:h1:tete", children: [ 8669 "Dispatching ", 8670 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bwio35", _fgB: 1790697590062, "data-fg-bwio35": ":0:/src/app/components/markets/MarketHub.tsx:110:27:5648:6:e:br" }),
8671 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bwio36", _fgB: 1790697590062, className: "text-2xl", "data-fg-bwio36": ":0:/src/app/components/markets/MarketHub.tsx:111:15:5669:42:e:span:t", children: "Platform" }) 8672 ] }) }), 8673 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bwio38", _fgB: 1790697590062, className: "absolute inset-0 rounded-full border-2 border-[#0056B3]/20 animate-ping pointer-events-none", style: { animationDuration: "3s" }, "data-fg-bwio38": ":0:/src/app/components/markets/MarketHub.tsx:115:11:5768:147:e:div" }) 8674 ] }) 8675 ] }) 8676 ] }); 8677} 8678const Og = globalThis.__GLOBALS__.getAssetURL("80cea0175c4f60a9cda5c3dc132266878b0d04e0.png"), Vg = globalThis.__GLOBALS__.getAssetURL("11b989c93598f45766dc3ea801f732037e64b931.png"), Hg = globalThis.__GLOBALS__.getAssetURL("66efa3c62e5aee394d99e73e037fdc61e8edcf77.png"), Zg = [ 8679 { 8680 id: "paratransit", 8681 tag: "PARATRANSIT", 8682 num: "01", 8683 title: "Preserving Dignity & Efficiency.", 8684 body: "Paratransit is the backbone of equitable transit. IT Curves has deep expertise in demand-response operations, ADA-compliant scheduling, and eligibility management. Our platform powers the full paratransit lifecycle: rider registration and eligibility verification, automated scheduling and dispatch, real-time vehicle tracking, driver manifests via Drivego, and rider self-service through Transigo and IVR.", 8685 features: [ 8686 { title: "Demand-Response Scheduling", desc: "Advanced algorithms optimize shared rides, reduce deadhead miles, and maximize vehicle utilization." }, 8687 { title: "Rider Self-Service", desc: "Riders book, track, and manage trips via Transigo, web portal, SMS, or IVR phone system." }, 8688 { title: "Compliance & Reporting", desc: "Built-in FTA compliance tools, ADA reporting, and NTD-ready data exports." } 8689 ], 8690 result: null, 8691 image: Og, 8692 btnText: "See Paratransit Features", 8693 link: "/paratransit" 8694 }, 8695 { 8696 id: "fixed-route", 8697 tag: "FIXED ROUTE", 8698 num: "02", 8699 title: "Flexible Urban Freedom.", 8700 body: "IT Curves entered the Fixed Route space in 2020 and has since built robust tools for route building, scheduling, zone management, and real-time rider information. The 'Where's My Bus?' feature gives riders live vehicle locations pulled directly from the dispatch AVL system.", 8701 features: [ 8702 { title: "Route Building & Scheduling", desc: "Graphical interface for creating and managing entire route networks with stops, timetables, and service parameters." }, 8703 { title: "AI-Optimized Planning", desc: "Algorithm-driven route optimization that maximizes resource utilization and on-time performance." }, 8704 { title: "Real-Time Rider Info", desc: "'Where's My Bus?' delivers live tracking via web, mobile app, and public displays." } 8705 ], 8706 result: null, 8707 image: "https://images.unsplash.com/photo-1600206085398-f6ede93b06f8?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjaXR5JTIwYnVzJTIwdXJiYW5lJTIwc3RyZWV0JTIwbW9kZXJufGVufDF8fHx8MTc3MDA2OTM5Nnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 8708 btnText: "Explore Fixed Route", 8709 link: "/markets/fixed-route" 8710 }, 8711 { 8712 id: "microtransit", 8713 tag: "MICROTRANSIT", 8714 num: "03", 8715 title: "The Backbone of Community Transit.", 8716 body: "Microtransit bridges the gap between fixed route and on-demand service. IT Curves powers flexible, zone-based transit that adapts to real-time rider demand. Our white-label capability means agencies deploy microtransit under their own brand.", 8717 features: [ 8718 { title: "Zone-Based Dispatch", desc: "Flexible service zones with real-time demand-response routing within defined areas." }, 8719 { title: "White-Label Deployment", desc: "Full brand customization, deployed as Annapolis Go Time and available for any agency." }, 8720 { title: "Rider Experience", desc: "Riders book on-demand through Transigo with real-time tracking and fare payment." } 8721 ], 8722 result: null, 8723 image: Vg, 8724 btnText: "Explore Microtransit", 8725 link: "/microtransit" 8726 }, 8727 { 8728 id: "nemt", 8729 tag: "NEMT", 8730 num: "04", 8731 title: "Compassion Powered by Technology.",
8732 body: "Non-Emergency Medical Transportation requires precision coordination between patients, healthcare facilities, transportation providers, and funding agencies. IT Curvesâ Rides to Health (RTH) platform is purpose-built for this challenge, specifically targeting the complex, repeat-need transportation required by dialysis patients and other chronic care needs.", 8733 features: [ 8734 { title: "Multi-Stakeholder Coordination", desc: "Central hub integrating patients, healthcare facilities, transportation providers, and funding agencies." }, 8735 { title: "Subsidy Integration", desc: "Manages public subsidy programs (Medicaid), checks eligibility, and provides secure digital wallet." }, 8736 { title: "Healthcare Facility Portal", desc: "Staff view, monitor, and manage all patient arrivals and departures regardless of assigned provider." } 8737 ], 8738 result: "Pilot with 3 local operators demonstrated cross-provider trip brokering. 7,242 pickups from dialysis centers.", 8739 image: Hg, 8740 btnText: "Explore NEMT Solutions", 8741 link: "/nemt" 8742 }, 8743 { 8744 id: "taxi-dispatch", 8745 tag: "PRIVATE TNC'S & TAXI", 8746 num: "05", 8747 title: "Centralized Dispatch for Multi-Provider Networks.", 8748 body: "Transit agencies and transportation brokers often coordinate service across multiple contracted taxi and transportation companies. Dispatch 2.0âs built-in broker capability centralizes ride request distribution, provider assignment, and real-time trip tracking across all contracted operators.", 8749 features: [ 8750 { title: "Multi-Provider Assignment", desc: "Route ride requests to the optimal provider based on availability, proximity, and cost." }, 8751 { title: "Unified Tracking", desc: "Real-time visibility across all contracted operators from one dispatch dashboard." }, 8752 { title: "Rider Transparency", desc: "Riders experience seamless service regardless of which provider is assigned." } 8753 ], 8754 result: null, 8755 image: "https://images.unsplash.com/photo-1657486232260-8be85026c8e0?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtb2Rlcm4lMjB0YXhpJTIwZmxlZXQlMjBkaXNwYXRjaCUyMGNlbnRlcnxlbnwxfHx8fDE3NzEwMDkxODB8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 8756 btnText: "Learn About TNC & Taxi Dispatch", 8757 link: "/taxi-dispatch" 8758 } 8759]; 8760function Wg() { 8761 const t = H(null), [e, s] = j({ width: 0, height: 0 }); 8762 return q(() => { 8763 if (!t.current) return; 8764 const r = new ResizeObserver((n) => { 8765 const o = n[0]; 8766 if (o) { 8767 const { width: L, height: d } = o.contentRect; 8768 s({ width: L, height: d }); 8769 } 8770 }); 8771 return r.observe(t.current), () => r.disconnect(); 8772 }, []), [t, e]; 8773} 8774function $g({ direction: t }) { 8775 const [e, { width: s, height: r }] = Wg(); 8776 if (s === 0 || r === 0) 8777 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a0", _fgB: 1790697590070, ref: e, className: "absolute inset-0 pointer-events-none", "data-fg-cd3a0": ":0:/src/app/components/markets/MarketDeepDives.tsx:128:12:7214:66:e:div" }); 8778 const n = s / 2, o = 0, L = s / 2, d = r, l = t === "left" ? s * 0.15 : s * 0.85, g = r / 2, f = ` 8779 M ${n}, ${o} 8780 C ${n}, ${r * 0.25}, ${l}, ${r * 0.25}, ${l}, ${g} 8781 C ${l}, ${r * 0.75}, ${L}, ${r * 0.75}, ${L}, ${d} 8782 `, p = 260, M = 20; 8783 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a1", _fgB: 1790697590070, _fgD: !0, ref: e, className: "absolute inset-0 pointer-events-none overflow-visible", "data-fg-cd3a1": ":0:/src/app/components/markets/MarketDeepDives.tsx:179:5:9009:1317:e:div:e:1", children: /* @__PURE__ */ c( 8784 a, 8785 { 8786 _fgT: "svg", 8787 _fgS: "cd3a2", 8788 _fgB: 1790697590070, 8789 width: s, 8790 height: r, 8791 className: "overflow-visible block", 8792 style: { width: "100%", height: "100%" }, 8793 "data-fg-cd3a2": ":0:/src/app/components/markets/MarketDeepDives.tsx:180:7:9097:1218:e:svg:xtetxtetxtetxte", 8794 children: [
8795 /* @__PURE__ */ i( 8796 "path", 8797 { 8798 d: f, 8799 fill: "none", 8800 stroke: "rgba(0,0,0,0.08)", 8801 strokeWidth: p + M * 2 + 10, 8802 strokeLinecap: "butt", 8803 className: "blur-sm", 8804 "data-fg-cd3a4": ":0:/src/app/components/markets/MarketDeepDives.tsx:187:10:9315:216:e:path" 8805 } 8806 ), 8807 /* @__PURE__ */ i( 8808 "path", 8809 { 8810 d: f, 8811 fill: "none", 8812 stroke: "rgba(255, 255, 255, 0.4)", 8813 strokeWidth: p + M * 2, 8814 strokeLinecap: "butt", 8815 "data-fg-cd3a6": ":0:/src/app/components/markets/MarketDeepDives.tsx:197:9:9600:189:e:path" 8816 } 8817 ), 8818 /* @__PURE__ */ i( 8819 "path", 8820 { 8821 d: f, 8822 fill: "none", 8823 stroke: "rgba(51, 65, 85, 0.2)", 8824 strokeWidth: p, 8825 strokeLinecap: "butt", 8826 "data-fg-cd3a8": ":0:/src/app/components/markets/MarketDeepDives.tsx:206:9:9856:168:e:path" 8827 } 8828 ),
8829 /* @__PURE__ */ i( 8830 "path", 8831 { 8832 d: f, 8833 fill: "none", 8834 stroke: "rgba(245, 158, 11, 0.5)", 8835 strokeWidth: 8, 8836 strokeDasharray: "40 50", 8837 strokeLinecap: "butt", 8838 "data-fg-cd3a10": ":0:/src/app/components/markets/MarketDeepDives.tsx:215:9:10105:197:e:path" 8839 } 8840 ) 8841 ] 8842 } 8843 ) }); 8844} 8845function qg() { 8846 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a11", _fgB: 1790697590070, _fgD: !0, className: "bg-zinc-50 relative overflow-hidden", "data-fg-cd3a11": ":0:/src/app/components/markets/MarketDeepDives.tsx:230:5:10386:6187:e:div:xtetetx:1", children: [ 8847 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a13", _fgB: 1790697590070, className: "fixed top-[-20%] left-[-10%] w-[50%] h-[50%] blur-[120px] rounded-full pointer-events-none bg-[#0056B3]/10 opacity-50 z-0", "data-fg-cd3a13": ":0:/src/app/components/markets/MarketDeepDives.tsx:232:7:10485:141:e:div" }), 8848 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a14", _fgB: 1790697590070, className: "fixed bottom-[-20%] right-[-10%] w-[50%] h-[50%] bg-[#0056B3]/5 blur-[120px] rounded-full pointer-events-none opacity-50 z-0", "data-fg-cd3a14": ":0:/src/app/components/markets/MarketDeepDives.tsx:233:7:10633:144:e:div" }), 8849 Zg.map((t, e) => { 8850 const s = e % 2 === 0, r = s ? "left" : "right"; 8851 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cd3a16", _fgB: 1790697590070, id: t.id, className: "relative py-24 md:py-32 w-full", "data-fg-cd3a16": ":0:/src/app/components/markets/MarketDeepDives.tsx:243:11:11245:5296:e:section:xtete", children: [
8852 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a18", _fgB: 1790697590070, className: "absolute inset-0 pointer-events-none flex justify-center overflow-hidden", "data-fg-cd3a18": ":0:/src/app/components/markets/MarketDeepDives.tsx:250:13:11549:262:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a19", _fgB: 1790697590070, className: "w-full max-w-[1400px] h-full relative", "data-fg-cd3a19": ":0:/src/app/components/markets/MarketDeepDives.tsx:251:16:11655:137:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: $g, _fgS: "cd3a20", _fgB: 1790697590070, direction: r, "data-fg-cd3a20": ":0:/src/app/components/markets/MarketDeepDives.tsx:252:19:11729:41:e:RoadSegment::::::DAb" }) }) }), 8853 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a21", _fgB: 1790697590070, className: "max-w-7xl mx-auto px-6 relative z-10", "data-fg-cd3a21": ":0:/src/app/components/markets/MarketDeepDives.tsx:256:13:11825:4695:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a22", _fgB: 1790697590070, className: `grid grid-cols-1 lg:grid-cols-2 gap-16 items-center ${s ? "" : "lg:flex-row-reverse"}`, "data-fg-cd3a22": ":0:/src/app/components/markets/MarketDeepDives.tsx:257:15:11894:4607:e:div:xtetxte", children: [
8854 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a24", _fgB: 1790697590070, className: `flex flex-col gap-6 ${s ? "lg:pr-20" : "lg:pl-20"}`, "data-fg-cd3a24": ":0:/src/app/components/markets/MarketDeepDives.tsx:260:17:12119:3483:e:div:etetetxtetxte", children: [ 8855 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a25", _fgB: 1790697590070, className: "flex items-center gap-4", "data-fg-cd3a25": ":0:/src/app/components/markets/MarketDeepDives.tsx:261:21:12215:458:e:div:etete", children: [ 8856 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cd3a26", _fgB: 1790697590070, className: "text-[#0056B3] font-mono text-xl font-bold bg-white/40 backdrop-blur-md px-2 py-1 rounded shadow-sm", "data-fg-cd3a26": ":0:/src/app/components/markets/MarketDeepDives.tsx:262:23:12279:135:e:span:x", children: t.num }), 8857 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a28", _fgB: 1790697590070, className: "h-px bg-[#0056B3]/30 w-12", "data-fg-cd3a28": ":0:/src/app/components/markets/MarketDeepDives.tsx:263:23:12437:45:e:div" }),
8858 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cd3a29", _fgB: 1790697590070, className: "text-slate-500 font-bold uppercase tracking-widest text-sm bg-white/40 backdrop-blur-md px-2 py-1 rounded", "data-fg-cd3a29": ":0:/src/app/components/markets/MarketDeepDives.tsx:264:23:12505:141:e:span:x", children: t.tag }) 8859 ] }), 8860 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cd3a31", _fgB: 1790697590070, className: "text-4xl md:text-5xl lg:text-6xl font-light tracking-tight text-slate-900 bg-zinc-50/60 backdrop-blur-md rounded-xl p-3 -ml-3 inline-block shadow-sm border border-white/20", "data-fg-cd3a31": ":0:/src/app/components/markets/MarketDeepDives.tsx:267:21:12715:249:e:h3:x", children: t.title }), 8861 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a33", _fgB: 1790697590070, className: "bg-zinc-50/70 backdrop-blur-md rounded-xl p-6 border border-white/50 shadow-lg", "data-fg-cd3a33": ":0:/src/app/components/markets/MarketDeepDives.tsx:271:21:13006:278:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cd3a34", _fgB: 1790697590070, className: "text-lg text-slate-700 font-light leading-relaxed", "data-fg-cd3a34": ":0:/src/app/components/markets/MarketDeepDives.tsx:272:25:13127:130:e:p:x", children: t.body }) }),
8862 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a37", _fgB: 1790697590070, className: "space-y-4 mt-2", "data-fg-cd3a37": ":0:/src/app/components/markets/MarketDeepDives.tsx:278:21:13348:836:e:div:x", children: t.features.map((n, o) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a39", _fgB: 1790697590070, className: "flex gap-4 p-4 rounded-xl bg-white/60 backdrop-blur-md border border-white/40 hover:bg-white/80 transition-colors shadow-sm", "data-fg-cd3a39": ":0:/src/app/components/markets/MarketDeepDives.tsx:280:29:13470:659:e:div:ete", children: [ 8863 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a40", _fgB: 1790697590070, className: "mt-1 flex-shrink-0 text-[#EFBB0F]", "data-fg-cd3a40": ":0:/src/app/components/markets/MarketDeepDives.tsx:281:33:13652:153:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cd3a41", _fgB: 1790697590070, size: 20, "data-fg-cd3a41": ":0:node_modules/lucide-react:282:37:13740:26:e:CheckCircle2::::::CELI" }) }), 8864 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a42", _fgB: 1790697590070, "data-fg-cd3a42": ":0:/src/app/components/markets/MarketDeepDives.tsx:284:33:13838:256:e:div:ete", children: [
8865 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "cd3a43", _fgB: 1790697590070, className: "font-bold text-slate-900 text-sm", "data-fg-cd3a43": ":0:/src/app/components/markets/MarketDeepDives.tsx:285:37:13880:69:e:h4:x", children: n.title }), 8866 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cd3a45", _fgB: 1790697590070, className: "text-slate-500 text-sm leading-snug", "data-fg-cd3a45": ":0:/src/app/components/markets/MarketDeepDives.tsx:286:37:13986:69:e:p:x", children: n.desc }) 8867 ] }) 8868 ] }, o)) }), 8869 t.result && /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a48", _fgB: 1790697590070, className: "bg-slate-900/95 backdrop-blur-md rounded-2xl p-6 border border-slate-800 flex items-start gap-4 shadow-xl mt-4 text-white", "data-fg-cd3a48": ":0:/src/app/components/markets/MarketDeepDives.tsx:293:23:14246:626:e:div:ete", children: [ 8870 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a49", _fgB: 1790697590070, className: "p-2 bg-white/10 rounded-lg shadow-sm text-[#EFBB0F]", "data-fg-cd3a49": ":0:/src/app/components/markets/MarketDeepDives.tsx:294:25:14410:151:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: E3, _fgS: "cd3a50", _fgB: 1790697590070, size: 20, "data-fg-cd3a50": ":0:node_modules/lucide-react:295:27:14506:24:e:TrendingUp::::::tM8" }) }),
8871 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cd3a51", _fgB: 1790697590070, "data-fg-cd3a51": ":0:/src/app/components/markets/MarketDeepDives.tsx:297:25:14586:257:e:div:ete", children: [ 8872 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "cd3a52", _fgB: 1790697590070, className: "font-bold text-xs uppercase tracking-wider text-slate-400 mb-1", "data-fg-cd3a52": ":0:/src/app/components/markets/MarketDeepDives.tsx:298:27:14618:90:e:h4:t", children: "Impact" }), 8873 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "cd3a54", _fgB: 1790697590070, className: "font-medium italic text-sm leading-relaxed", "data-fg-cd3a54": ":0:/src/app/components/markets/MarketDeepDives.tsx:299:27:14735:77:e:p:txt", children: [ 8874 '"', 8875 t.result, 8876 '"' 8877 ] }) 8878 ] }) 8879 ] }), 8880 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a58", _fgB: 1790697590070, className: "pt-4", "data-fg-cd3a58": ":0:/src/app/components/markets/MarketDeepDives.tsx:304:21:14937:642:e:div:e", children: /* @__PURE__ */ c( 8881 a, 8882 { 8883 _fgT: E, 8884 _fgS: "cd3a59", 8885 _fgB: 1790697590070, 8886 href: t.link || `/markets#${t.id}`, 8887 className: "group inline-flex items-center justify-center rounded-full px-8 py-4 text-sm font-bold uppercase tracking-widest bg-[#0056B3] text-white hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-2xl hover:-translate-y-1", 8888 "data-fg-cd3a59": ":0:node_modules/wouter:305:23:14982:570:e:Link:ete:::::C4yE", 8889 children: [
8890 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cd3a60", _fgB: 1790697590070, className: "mr-2", "data-fg-cd3a60": ":0:/src/app/components/markets/MarketDeepDives.tsx:309:25:15370:44:e:span:x", children: t.btnText }), 8891 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cd3a62", _fgB: 1790697590070, size: 16, className: "transition-transform group-hover:translate-x-1", "data-fg-cd3a62": ":0:node_modules/lucide-react:310:25:15439:83:e:ArrowRight::::::s5N" }) 8892 ] 8893 } 8894 ) }) 8895 ] }), 8896 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cd3a64", _fgB: 1790697590070, className: "relative", "data-fg-cd3a64": ":0:/src/app/components/markets/MarketDeepDives.tsx:316:17:15664:799:e:div:e", children: /* @__PURE__ */ i( 8897 a, 8898 { 8899 _fgT: m.div, 8900 _fgS: "cd3a65", 8901 _fgB: 1790697590070, 8902 initial: { opacity: 0, scale: 0.95 }, 8903 whileInView: { opacity: 1, scale: 1 }, 8904 viewport: { once: !0, amount: 0.3 }, 8905 transition: { duration: 0.8 }, 8906 className: "relative aspect-[4/3] overflow-hidden rounded-[2.5rem] bg-slate-100 shadow-2xl border-8 border-white z-10", 8907 "data-fg-cd3a65": ":0:/src/app/components/markets/MarketDeepDives.tsx:317:22:15712:728:e:motion.div:e", 8908 children: /* @__PURE__ */ i( 8909 a, 8910 { 8911 _fgT: Le, 8912 _fgS: "cd3a66", 8913 _fgB: 1790697590070, 8914 src: t.image, 8915 alt: t.title, 8916 className: "w-full h-full object-cover transition-transform duration-700 hover:scale-105", 8917 "data-fg-cd3a66": ":0:/src/app/components/markets/MarketDeepDives.tsx:324:25:16158:246:e:ImageWithFallback::::::Bqoy" 8918 } 8919 ) 8920 } 8921 ) }) 8922 ] }) }) 8923 ] }, t.id); 8924 }) 8925 ] }); 8926} 8927function Ug() { 8928 const { openContactModal: t } = Z(); 8929 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "be6g0", _fgB: 1790697590065, _fgD: !0, className: "py-24 bg-slate-900 text-white text-center relative overflow-hidden", "data-fg-be6g0": ":0:/src/app/components/markets/MarketsCTA.tsx:10:5:275:1927:e:section:xtete:1", children: [ 8930 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "be6g2", _fgB: 1790697590065, className: "absolute inset-0 opacity-20 bg-[radial-gradient(#ffffff_1px,transparent_1px)] [background-size:20px_20px]", "data-fg-be6g2": ":0:/src/app/components/markets/MarketsCTA.tsx:12:7:401:129:e:div:_" }), 8931 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "be6g3", _fgB: 1790697590065, className: "max-w-4xl mx-auto px-6 relative z-10", "data-fg-be6g3": ":0:/src/app/components/markets/MarketsCTA.tsx:14:7:544:1643:e:div:ete", children: [
8932 /* @__PURE__ */ c( 8933 a, 8934 { 8935 _fgT: m.h2, 8936 _fgS: "be6g4", 8937 _fgB: 1790697590065, 8938 initial: { opacity: 0, y: 20 }, 8939 whileInView: { opacity: 1, y: 0 }, 8940 viewport: { once: !0 }, 8941 className: "text-4xl md:text-5xl font-light mb-8 font-[Space_Grotesk]", 8942 "data-fg-be6g4": ":0:/src/app/components/markets/MarketsCTA.tsx:15:9:607:370:e:motion.h2:tete", 8943 children: [ 8944 "Ready to modernize your ", 8945 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "be6g6", _fgB: 1790697590065, "data-fg-be6g6": ":0:/src/app/components/markets/MarketsCTA.tsx:21:35:866:6:e:br" }), 8946 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "be6g7", _fgB: 1790697590065, className: "font-bold text-[#EFBB0F]", "data-fg-be6g7": ":0:/src/app/components/markets/MarketsCTA.tsx:22:11:883:73:e:span:t", children: "Transportation Service?" }) 8947 ] 8948 } 8949 ), 8950 /* @__PURE__ */ c( 8951 a, 8952 { 8953 _fgT: m.div, 8954 _fgS: "be6g9", 8955 _fgB: 1790697590065, 8956 initial: { opacity: 0, y: 20 }, 8957 whileInView: { opacity: 1, y: 0 }, 8958 viewport: { once: !0 }, 8959 transition: { delay: 0.2 }, 8960 className: "flex flex-col sm:flex-row items-center justify-center gap-6", 8961 "data-fg-be6g9": ":0:/src/app/components/markets/MarketsCTA.tsx:25:9:995:1179:e:motion.div:ete", 8962 children: [
8963 /* @__PURE__ */ c( 8964 a, 8965 { 8966 _fgT: "button", 8967 _fgS: "be6g10", 8968 _fgB: 1790697590065, 8969 onClick: t, 8970 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-[0_0_20px_rgba(0,86,179,0.5)] hover:shadow-[0_0_30px_rgba(0,86,179,0.7)] cursor-pointer", 8971 "data-fg-be6g10": ":0:/src/app/components/markets/MarketsCTA.tsx:32:11:1270:474:e:button:te", 8972 children: [ 8973 "Schedule a Meeting", 8974 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "be6g12", _fgB: 1790697590065, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-be6g12": ":0:node_modules/lucide-react:37:13:1641:83:e:ArrowRight::::::s5N" }) 8975 ] 8976 } 8977 ), 8978 /* @__PURE__ */ c( 8979 a, 8980 { 8981 _fgT: E, 8982 _fgS: "be6g13", 8983 _fgB: 1790697590065, 8984 href: "/contact", 8985 className: "group inline-flex items-center gap-3 bg-transparent border-2 border-white/20 text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-white/10 transition-all duration-300 cursor-pointer", 8986 "data-fg-be6g13": ":0:node_modules/wouter:40:11:1766:386:e:Link:te:::::C4yE", 8987 children: [ 8988 "Contact Us",
8989 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "be6g15", _fgB: 1790697590065, size: 20, className: "group-hover:scale-110 transition-transform", "data-fg-be6g15": ":0:node_modules/lucide-react:45:13:2061:73:e:Mail::::::D4VR" }) 8990 ] 8991 } 8992 ) 8993 ] 8994 } 8995 ) 8996 ] }) 8997 ] }); 8998} 8999function Gg() { 9000 return /* @__PURE__ */ c(C, { children: [ 9001 /* @__PURE__ */ i(a, { _fgT: zg, _fgS: "c0kn1", _fgB: 1790697589524, "data-fg-c0kn1": ":0:/src/app/pages/MarketsPage.tsx:11:7:463:15:e:MarketsHero::::::DHvh" }), 9002 /* @__PURE__ */ i(a, { _fgT: jg, _fgS: "c0kn2", _fgB: 1790697589524, "data-fg-c0kn2": ":0:/src/app/pages/MarketsPage.tsx:12:7:485:13:e:MarketHub::::::CJnR" }), 9003 /* @__PURE__ */ i(a, { _fgT: qg, _fgS: "c0kn3", _fgB: 1790697589524, "data-fg-c0kn3": ":0:/src/app/pages/MarketsPage.tsx:13:7:505:19:e:MarketDeepDives::::::DR5Z" }), 9004 /* @__PURE__ */ i(a, { _fgT: Ug, _fgS: "c0kn5", _fgB: 1790697589524, "data-fg-c0kn5": ":0:/src/app/pages/MarketsPage.tsx:15:7:568:14:e:MarketsCTA::::::BlMF" }), 9005 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "c0kn6", _fgB: 1790697589524, "data-fg-c0kn6": ":0:/src/app/pages/MarketsPage.tsx:16:7:589:10:e:Footer::::::B1Vv" }) 9006 ] }); 9007} 9008const Jg = globalThis.__GLOBALS__.getAssetURL("663bc8624ae08899af6b8e658b1c2327ec70a8cf.png"); 9009function Kg() { 9010 const { openContactModal: t } = Z(); 9011 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cy3s0", _fgB: 1790697590189, _fgD: !0, className: "relative h-[80vh] min-h-[600px] overflow-hidden bg-[#0B1B2B]", "data-fg-cy3s0": ":0:/src/app/components/offerings/OfferingsHero.tsx:9:5:277:1903:e:section:xtetxte:1", children: [ 9012 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cy3s2", _fgB: 1790697590189, className: "absolute inset-0", "data-fg-cy3s2": ":0:/src/app/components/offerings/OfferingsHero.tsx:11:7:397:377:e:div:etete", children: [
9013 /* @__PURE__ */ i( 9014 a, 9015 { 9016 _fgT: "img", 9017 _fgS: "cy3s3", 9018 _fgB: 1790697590189, 9019 src: Jg, 9020 alt: "Transit Operations", 9021 className: "w-full h-full object-cover opacity-50", 9022 "data-fg-cy3s3": ":0:/src/app/components/offerings/OfferingsHero.tsx:12:9:440:133:e:img" 9023 } 9024 ), 9025 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cy3s4", _fgB: 1790697590189, className: "absolute inset-0 bg-[#0B1B2B]/60 mix-blend-multiply", "data-fg-cy3s4": ":0:/src/app/components/offerings/OfferingsHero.tsx:17:9:582:71:e:div" }), 9026 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cy3s5", _fgB: 1790697590189, className: "absolute inset-0 bg-gradient-to-t from-[#0B1B2B] via-transparent to-transparent", "data-fg-cy3s5": ":0:/src/app/components/offerings/OfferingsHero.tsx:18:9:662:99:e:div" }) 9027 ] }), 9028 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cy3s7", _fgB: 1790697590189, className: "relative z-10 h-full flex flex-col justify-center items-center text-center px-6 md:px-12 pt-24 max-w-5xl mx-auto", "data-fg-cy3s7": ":0:/src/app/components/offerings/OfferingsHero.tsx:22:7:804:1361:e:div:e", children: /* @__PURE__ */ c( 9029 a, 9030 { 9031 _fgT: m.div, 9032 _fgS: "cy3s8", 9033 _fgB: 1790697590189, 9034 initial: { opacity: 0, y: 30 }, 9035 animate: { opacity: 1, y: 0 }, 9036 transition: { duration: 0.8 }, 9037 className: "flex flex-col items-center", 9038 "data-fg-cy3s8": ":0:/src/app/components/offerings/OfferingsHero.tsx:23:9:943:1209:e:motion.div:etete", 9039 children: [
9040 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "cy3s9", _fgB: 1790697590189, className: "text-5xl md:text-6xl lg:text-7xl font-bold text-white mb-6 leading-tight font-['DM_Sans']", "data-fg-cy3s9": ":0:/src/app/components/offerings/OfferingsHero.tsx:29:11:1148:285:e:h1:te", children: [ 9041 "The Complete Transit Ecosystem.", 9042 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cy3s11", _fgB: 1790697590189, className: "block text-[#EFBB0F] italic font-serif mt-2", "data-fg-cy3s11": ":0:/src/app/components/offerings/OfferingsHero.tsx:31:13:1311:106:e:span:t", children: "One Platform. Every Side of the Ride." }) 9043 ] }), 9044 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cy3s13", _fgB: 1790697590189, className: "text-lg md:text-xl text-gray-200 max-w-3xl font-light leading-relaxed mb-10 mx-auto", "data-fg-cy3s13": ":0:/src/app/components/offerings/OfferingsHero.tsx:34:11:1455:367:e:p:t", children: "Our platform connects every piece of your transit operation, from the moment a rider calls to the final compliance report. Scheduling, dispatch, driver tools, rider apps, billing, and reporting. All in one system. All talking to each other." }),
9045 /* @__PURE__ */ i( 9046 a, 9047 { 9048 _fgT: "button", 9049 _fgS: "cy3s15", 9050 _fgB: 1790697590189, 9051 onClick: t, 9052 className: "px-8 py-4 bg-[#0056B3] text-white font-bold rounded-full shadow-lg hover:bg-[#004494] transition-all hover:scale-105 hover:shadow-blue-500/25 text-lg cursor-pointer", 9053 "data-fg-cy3s15": ":0:/src/app/components/offerings/OfferingsHero.tsx:38:11:1834:296:e:button:t", 9054 children: "Schedule a Demo" 9055 } 9056 ) 9057 ] 9058 } 9059 ) }) 9060 ] }); 9061} 9062const J4 = [ 9063 { 9064 id: 1, 9065 side: "right", 9066 icon: Y, 9067 iconColor: "text-blue-500", 9068 bgColor: "bg-blue-50", 9069 title: "The Trip Comes In", 9070 points: [ 9071 "**Call center,** rider app, web portal, or IVR captures the request.", 9072 "**Caller ID** pulls up previous trips instantly so agents can rebook in seconds.", 9073 "**Bulk trip imports** and broker file ingestion for high-volume NEMT and Medicaid providers." 9074 ], 9075 linkText: "Explore Call Center & Telephony", 9076 linkUrl: "/ivr" 9077 }, 9078 { 9079 id: 2, 9080 side: "left", 9081 icon: S1, 9082 iconColor: "text-amber-500", 9083 bgColor: "bg-amber-50", 9084 title: "It Gets Routed", 9085 points: [ 9086 "**Patented ERSA algorithm** builds shared-ride manifests from thousands of requests.", 9087 "**Pickup windows,** max ride times, and driver hours all enforced automatically.", 9088 "**Dynamic mode** inserts same-day trips into active routes without rebuilding." 9089 ], 9090 linkText: "Explore Manifest Builder", 9091 linkUrl: "/fixed-route" 9092 }, 9093 { 9094 id: 3, 9095 side: "right", 9096 icon: Hl, 9097 iconColor: "text-blue-600", 9098 bgColor: "bg-blue-50", 9099 title: "It Gets Dispatched", 9100 points: [ 9101 "**Auto dispatch** by nearest vehicle, zone rank, or driver bidding.", 9102 "**Live map** tracks every vehicle with real-time status, speed, and location.",
9103 "**Priority handling** for scheduled, high-priority, and time-sensitive trips, with ranked route suggestions so dispatchers stay in control." 9104 ], 9105 linkText: "Explore Dispatch", 9106 linkUrl: "/taxi-dispatch" 9107 }, 9108 { 9109 id: 4, 9110 side: "left", 9111 icon: q7, 9112 iconColor: "text-green-500", 9113 bgColor: "bg-green-50", 9114 title: "The Ride Happens", 9115 points: [ 9116 "**Driver app** on phone or tablet shows manifest, navigation, and trip details.", 9117 "**Contactless rider ID** via facial recognition, QR code, or Bluetooth. Boarding is logged automatically with no driver input required.", 9118 "**Backseat interface** for passenger payment, tipping, and ride info." 9119 ], 9120 linkText: "Explore In-Vehicle Tools", 9121 linkUrl: "/drivigo" 9122 }, 9123 { 9124 id: 5, 9125 side: "right", 9126 icon: G7, 9127 iconColor: "text-amber-600", 9128 bgColor: "bg-amber-50", 9129 title: "It Gets Settled", 9130 points: [ 9131 "**Automated billing** by funding source, with copayments, subsidies, and program accounts separated and invoiced automatically.", 9132 "**Batch invoicing** across multiple accounts with custom rate structures per funder.", 9133 "**NTD-ready reporting** and trip-level audit trails for compliance." 9134 ], 9135 linkText: "Explore Billing & Cashiering", 9136 linkUrl: "/taxi-dispatch" 9137 } 9138], Za = [Td, Bd], Wa = [hl, cd], Yg = [U4], Xg = Array.from({ length: 80 }).map((t, e) => { 9139 const s = Math.random(); 9140 let r, n, o, L, d; 9141 if (s > 0.85) { 9142 r = Za[Math.floor(Math.random() * Za.length)]; 9143 const f = ["text-green-900", "text-emerald-900", "text-green-950", "text-lime-900"]; 9144 n = f[Math.floor(Math.random() * f.length)], o = Math.floor(Math.random() * 16) + 24, L = 0.9, d = 0; 9145 } else if (s > 0.75) 9146 r = Yg[0], n = "text-green-300", o = Math.floor(Math.random() * 10) + 16, L = 0.7, d = 0; 9147 else { 9148 r = Wa[Math.floor(Math.random() * Wa.length)]; 9149 const f = ["text-green-300", "text-emerald-300", "text-lime-400", "text-green-200"]; 9150 n = f[Math.floor(Math.random() * f.length)], o = Math.floor(Math.random() * 8) + 10, L = 0.7, d = Math.floor(Math.random() * 60) - 30; 9151 } 9152 const g = Math.random() > 0.5 ? Math.random() * 35 : 65 + Math.random() * 29; 9153 return { 9154 id: e, 9155 Type: r, 9156 top: `${Math.random() * 98}%`, 9157 left: `${g}%`, 9158 size: o, 9159 color: n, 9160 opacity: L, 9161 rotation: d 9162 }; 9163}), Qg = J4.map((t, e) => { 9164 const s = J4.length, r = e / (s - 1) * 0.85 + 0.05; 9165 return Math.max(0, r - 0.09); 9166}); 9167function ef() { 9168 const t = H(null), [e, s] = j(/* @__PURE__ */ new Set()), { scrollYProgress: r } = D7({ 9169 target: t, 9170 offset: ["start center", "end center"] 9171 }), n = QL(r, { 9172 stiffness: 200, 9173 damping: 25, 9174 restDelta: 1e-3 9175 }), o = O7(n, [0, 1], ["5%", "95%"]); 9176 return F7(n, "change", (L) => { 9177 const d = new Set(e); 9178 let l = !1; 9179 Qg.forEach((g, f) => { 9180 L >= g && !d.has(f) && (d.add(f), l = !0); 9181 }), l && s(new Set(d)); 9182 }), /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "by4t0", _fgB: 1790697590198, _fgD: !0, className: "py-24 bg-[#F8FAFC] relative overflow-hidden font-['DM_Sans']", "data-fg-by4t0": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:181:5:6065:7036:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t1", _fgB: 1790697590198, className: "relative z-10 max-w-7xl mx-auto px-6 flex flex-col items-center", "data-fg-by4t1": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:183:7:6161:6925:e:div:xtetxte", children: [ 9183 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t3", _fgB: 1790697590198, className: "text-center mb-24", "data-fg-by4t3": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:186:9:6291:525:e:div:etete", children: [
9184 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "by4t4", _fgB: 1790697590198, className: "text-[#0056B3] font-bold tracking-widest uppercase text-xs mb-3 block", "data-fg-by4t4": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:187:11:6337:114:e:span:t", children: "HOW IT ALL CONNECTS" }), 9185 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "by4t6", _fgB: 1790697590198, className: "text-4xl md:text-5xl font-bold text-[#0B1B2B] mb-4 font-['DM_Serif_Display']", "data-fg-by4t6": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:188:11:6462:138:e:h2:t", children: "Follow the Trip." }), 9186 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "by4t8", _fgB: 1790697590198, className: "text-xl text-slate-600 max-w-2xl mx-auto", "data-fg-by4t8": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:191:11:6611:190:e:p:t", children: "From the moment a rider reaches out to the final invoice, every step flows through one connected platform." }) 9187 ] }), 9188 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t11", _fgB: 1790697590198, className: "w-full relative", "data-fg-by4t11": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:197:9:6871:6201:e:div:e", children: /* @__PURE__ */ c( 9189 a, 9190 { 9191 _fgT: "div", 9192 _fgS: "by4t12", 9193 _fgB: 1790697590198, 9194 ref: t, 9195 style: { position: "relative" }, 9196 className: "relative min-h-[1600px] md:min-h-[1400px] bg-[#60A865] rounded-3xl border border-green-600 shadow-2xl overflow-hidden", 9197 "data-fg-by4t12": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:198:11:6915:6142:e:div:xtetxtetxtetxtetxte", 9198 children: [
9199 /* @__PURE__ */ i( 9200 a, 9201 { 9202 _fgT: "div", 9203 _fgS: "by4t14", 9204 _fgB: 1790697590198, 9205 className: "absolute inset-0 z-0 opacity-25", 9206 style: { 9207 backgroundImage: "radial-gradient(#519656 1.5px, transparent 1.5px)", 9208 backgroundSize: "32px 32px", 9209 backgroundPosition: "0 0" 9210 }, 9211 "data-fg-by4t14": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:204:15:7212:305:e:div" 9212 } 9213 ), 9214 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t16", _fgB: 1790697590198, className: "absolute inset-0 z-0 pointer-events-none overflow-hidden", "data-fg-by4t16": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:214:15:7569:726:e:div:x", children: Xg.map((L) => /* @__PURE__ */ i( 9215 a, 9216 { 9217 _fgT: "div", 9218 _fgS: "by4t18", 9219 _fgB: 1790697590198, 9220 className: `absolute ${L.color} transition-all duration-1000`, 9221 style: { 9222 top: L.top, 9223 left: L.left, 9224 opacity: L.opacity, 9225 transform: `rotate(${L.rotation}deg) ${L.Type === U4 ? "scaleY(0.6)" : ""}` 9226 }, 9227 "data-fg-by4t18": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:216:19:7709:545:e:div:e", 9228 children: /* @__PURE__ */ i(a, { _fgT: L.Type, _fgS: "by4t19", _fgB: 1790697590198, size: L.size, strokeWidth: L.Type === U4 ? 2 : 2.5, "data-fg-by4t19": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:226:21:8155:74:e:item.Type" }) 9229 }, 9230 L.id 9231 )) }),
9232 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t21", _fgB: 1790697590198, className: "absolute top-0 bottom-0 left-4 md:left-1/2 md:-translate-x-1/2 w-20 md:w-40 bg-[#333333] shadow-[0_0_15px_rgba(0,0,0,0.1)] z-10 flex flex-col items-center border-x-4 border-[#777777]", "data-fg-by4t21": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:232:15:8354:798:e:div:etetetete", children: [ 9233 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t22", _fgB: 1790697590198, className: "absolute inset-0 opacity-10 bg-[url('https://www.transparenttextures.com/patterns/asphalt-dark.png')] mix-blend-overlay", "data-fg-by4t22": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:233:18:8572:139:e:div" }), 9234 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t23", _fgB: 1790697590198, className: "absolute inset-y-0 w-2 border-l-2 border-dashed border-yellow-400 left-1/2 -translate-x-[3px]", "data-fg-by4t23": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:234:18:8729:113:e:div" }), 9235 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t24", _fgB: 1790697590198, className: "absolute inset-y-0 w-2 border-r-2 border-dashed border-yellow-400 left-1/2 translate-x-[3px]", "data-fg-by4t24": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:235:18:8860:112:e:div" }),
9236 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t25", _fgB: 1790697590198, className: "absolute inset-y-0 left-2 w-1 bg-white/80", "data-fg-by4t25": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:236:18:8990:61:e:div" }), 9237 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t26", _fgB: 1790697590198, className: "absolute inset-y-0 right-2 w-1 bg-white/80", "data-fg-by4t26": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:237:18:9069:62:e:div" }) 9238 ] }), 9239 /* @__PURE__ */ i( 9240 a, 9241 { 9242 _fgT: m.div, 9243 _fgS: "by4t28", 9244 _fgB: 1790697590198, 9245 className: "absolute left-4 md:left-1/2 md:-translate-x-1/2 -translate-y-1/2 z-30 w-14 md:w-auto h-24 md:h-auto bg-[#0056B3] rounded-lg md:rounded-xl p-1 md:p-2 shadow-2xl border-2 border-white flex flex-col items-center justify-between", 9246 style: { top: o }, 9247 "data-fg-by4t28": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:241:15:9218:2303:e:motion.div:e", 9248 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t29", _fgB: 1790697590198, className: "w-10 md:w-12 h-20 md:h-28 bg-[#0056B3] flex flex-col items-center justify-between py-1.5 relative overflow-hidden", "data-fg-by4t29": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:245:18:9557:1936:e:div:xtetxtetxte", children: [
9249 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t31", _fgB: 1790697590198, className: "w-8 md:w-10 h-3 flex justify-between px-0.5", "data-fg-by4t31": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:247:21:9759:342:e:div:ete", children: [ 9250 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t32", _fgB: 1790697590198, className: "w-2 h-2 bg-red-600 rounded-full animate-pulse shadow-[0_0_5px_rgba(220,38,38,0.8)]", "data-fg-by4t32": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:248:25:9845:102:e:div" }), 9251 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t33", _fgB: 1790697590198, className: "w-2 h-2 bg-red-600 rounded-full animate-pulse shadow-[0_0_5px_rgba(220,38,38,0.8)]", "data-fg-by4t33": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:249:25:9972:102:e:div" }) 9252 ] }), 9253 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t35", _fgB: 1790697590198, className: "w-8 md:w-10 h-10 bg-white/10 rounded-sm border border-white/20 flex items-center justify-center overflow-hidden p-0.5", "data-fg-by4t35": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:253:21:10205:563
9253:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Le, _fgS: "by4t36", _fgB: 1790697590198, src: "https://images.unsplash.com/photo-1571514926545-c61ae8be36be?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx0cmFuc2l0JTIwbG9nbyUyMGljb25zfGVufDF8fHx8MTc3MzE5MTE5MXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", alt: "Icons", className: "w-full h-full object-cover opacity-90 rounded-sm mix-blend-screen", "data-fg-by4t36": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:254:25:10365:376:e:ImageWithFallback::::::BDpS" }) }), 9254 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t38", _fgB: 1790697590198, className: "flex flex-col gap-1 w-full items-center", "data-fg-by4t38": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:258:21:10877:592:e:div:ete", children: [ 9255 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t39", _fgB: 1790697590198, className: "w-8 md:w-10 h-4 bg-sky-900/80 rounded-sm border border-white/20", "data-fg-by4t39": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:259:25:10959:83:e:div" }),
9256 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t40", _fgB: 1790697590198, className: "w-8 md:w-10 h-2 flex justify-between px-0.5 mt-0.5", "data-fg-by4t40": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:260:25:11067:375:e:div:ete", children: [ 9257 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t41", _fgB: 1790697590198, className: "w-2 h-1.5 bg-yellow-100 rounded-b-sm animate-pulse shadow-[0_0_8px_rgba(254,240,138,0.8)]", "data-fg-by4t41": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:261:29:11164:109:e:div" }), 9258 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t42", _fgB: 1790697590198, className: "w-2 h-1.5 bg-yellow-100 rounded-b-sm animate-pulse shadow-[0_0_8px_rgba(254,240,138,0.8)]", "data-fg-by4t42": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:262:29:11302:109:e:div" }) 9259 ] }) 9260 ] }) 9261 ] }) 9262 } 9263 ), 9264 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t44", _fgB: 1790697590198, className: "w-full flex flex-col justify-between h-full gap-24 py-24 relative z-20", "data-fg-by4t44": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:269:15:11572:1468:e:div:x", children: J4.map((L, d) => { 9265 const l = e.has(d); 9266 return /* @__PURE__ */ c( 9267 a, 9268 { 9269 _fgT: "div", 9270 _fgS: "by4t46", 9271 _fgB: 1790697590198, 9272 className: "relative w-full flex items-center min-h-[250px]", 9273 "data-fg-by4t46": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:274:21:11837:1141:e:div:xtetxtetxte", 9274 children: [
9275 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t48", _fgB: 1790697590198, className: "hidden md:flex flex-1 justify-end pr-16 lg:pr-24 pl-4", "data-fg-by4t48": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:279:23:12054:279:e:div:x", children: d % 2 !== 0 && /* @__PURE__ */ i(a, { _fgT: d4, _fgS: "by4t50", _fgB: 1790697590198, step: L, align: "right", isRevealed: l, index: d, "data-fg-by4t50": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:281:27:12194:83:e:TimelineCardContent::::::BUBj" }) }), 9276 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t52", _fgB: 1790697590198, className: "hidden md:flex flex-1 justify-start pl-16 lg:pl-24 pr-4", "data-fg-by4t52": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:286:23:12413:281:e:div:x", children: d % 2 === 0 && /* @__PURE__ */ i(a, { _fgT: d4, _fgS: "by4t54", _fgB: 1790697590198, step: L, align: "left", isRevealed: l, index: d, "data-fg-by4t54": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:288:27:12556:82:e:TimelineCardContent::::::BUBj" }) }),
9277 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t56", _fgB: 1790697590198, className: "md:hidden w-full pl-28 pr-4", "data-fg-by4t56": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:293:23:12760:191:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: d4, _fgS: "by4t57", _fgB: 1790697590198, step: L, align: "left", isMobile: !0, isRevealed: l, index: d, "data-fg-by4t57": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:294:26:12831:91:e:TimelineCardContent::::::BUBj" }) }) 9278 ] 9279 }, 9280 d 9281 ); 9282 }) }) 9283 ] 9284 } 9285 ) }) 9286 ] }) }); 9287} 9288function tf(t) { 9289 return t.split(/\*\*(.*?)\*\*/g).map( 9290 (s, r) => r % 2 === 1 ? /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "by4t58", _fgB: 1790697590198, className: "text-slate-900 font-semibold", "data-fg-by4t58": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:312:9:13252:72:e:strong:x", children: s }, r) : s 9291 ); 9292} 9293function d4({ step: t, align: e, isMobile: s = !1, isRevealed: r, index: n }) { 9294 return /* @__PURE__ */ i( 9295 a, 9296 { 9297 _fgT: m.div, 9298 _fgS: "by4t60", 9299 _fgB: 1790697590198, 9300 _fgD: !0, 9301 className: "w-full relative", 9302 initial: { opacity: 0, scale: 0.7, y: 30 }, 9303 animate: r ? { opacity: 1, scale: 1, y: 0 } : { opacity: 0, scale: 0.7, y: 30 }, 9304 transition: { 9305 duration: 0.6, 9306 ease: [0.34, 1.56, 0.64, 1], 9307 // springy overshoot 9308 delay: 0.1 9309 }, 9310 "data-fg-by4t60": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:320:5:13545:7141:e:motion.div:e:1", 9311 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t61", _fgB: 1790697590198, className: "p-6 md:p-8 bg-white/95 backdrop-blur-sm rounded-2xl shadow-[0_4px_20px_rgba(0,0,0,0.08)] flex flex-col gap-4 w-full hover:shadow-xl transition-all relative group border border-slate-100 z-20", "data-fg-by4t61": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:333:7:13906:6762:e:div:xtxtxtxtetete", children: [
9312 !s && /* @__PURE__ */ c(C, { children: [ 9313 /* @__PURE__ */ i( 9314 a, 9315 { 9316 _fgT: m.div, 9317 _fgS: "by4t66", 9318 _fgB: 1790697590198, 9319 className: `absolute top-1/2 -translate-y-1/2 h-[2px] border-t-2 border-dashed border-slate-400 origin-${e === "left" ? "right" : "left"} 9320 ${e === "left" ? "left-0 -translate-x-[64px] lg:-translate-x-[96px] w-[64px] lg:w-[96px]" : "right-0 translate-x-[64px] lg:translate-x-[96px] w-[64px] lg:w-[96px]"} 9321 `, 9322 initial: { scaleX: 0 }, 9323 animate: r ? { scaleX: 1 } : { scaleX: 0 }, 9324 transition: { duration: 0.4, delay: 0.3 }, 9325 style: { transformOrigin: e === "left" ? "right" : "left" }, 9326 "data-fg-by4t66": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:339:15:14272:706:e:motion.div" 9327 } 9328 ), 9329 /* @__PURE__ */ i( 9330 a, 9331 { 9332 _fgT: m.div, 9333 _fgS: "by4t68", 9334 _fgB: 1790697590198, 9335 className: `absolute top-1/2 -translate-y-1/2 w-3 h-3 rounded-full bg-slate-400 z-20 9336 ${e === "left" ? "left-[-64px] lg:left-[-96px]" : "right-[-64px] lg:right-[-96px]"} 9337 `, 9338 initial: { scale: 0 }, 9339 animate: r ? { scale: 1 } : { scale: 0 }, 9340 transition: { duration: 0.3, delay: 0.6, ease: [0.34, 1.56, 0.64, 1] }, 9341 "data-fg-by4t68": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:353:15:15058:449:e:motion.div" 9342 } 9343 ),
9344 /* @__PURE__ */ i( 9345 a, 9346 { 9347 _fgT: m.div, 9348 _fgS: "by4t70", 9349 _fgB: 1790697590198, 9350 className: `absolute z-10 flex flex-col items-center 9351 ${e === "left" ? "left-0 -translate-x-[200px] lg:-translate-x-[240px]" : "right-0 translate-x-[200px] lg:translate-x-[240px]"} 9352 `, 9353 style: { top: "calc(50% - 20px)" }, 9354 initial: { opacity: 0, y: -20, scale: 0.5 }, 9355 animate: r ? { opacity: 1, y: 0, scale: 1 } : { opacity: 0, y: -20, scale: 0.5 }, 9356 transition: { duration: 0.5, delay: 0.5, ease: [0.34, 1.56, 0.64, 1] }, 9357 "data-fg-by4t70": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:363:15:15580:2692:e:motion.div:e", 9358 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t71", _fgB: 1790697590198, className: "relative flex flex-col items-center group/stop", "data-fg-by4t71": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:378:18:16286:1958:e:div:etetxte", children: [
9359 /* @__PURE__ */ i( 9360 a, 9361 { 9362 _fgT: m.div, 9363 _fgS: "by4t72", 9364 _fgB: 1790697590198, 9365 className: "absolute top-1 w-10 h-10 rounded-full z-10", 9366 animate: r ? { 9367 boxShadow: [ 9368 "0 0 0 0 rgba(0, 86, 179, 0)", 9369 "0 0 0 12px rgba(0, 86, 179, 0.3)", 9370 "0 0 0 0 rgba(0, 86, 179, 0)" 9371 ] 9372 } : {}, 9373 transition: { duration: 1.5, delay: 0.8, ease: "easeOut" }, 9374 "data-fg-by4t72": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:379:20:16370:499:e:motion.div" 9375 } 9376 ), 9377 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t73", _fgB: 1790697590198, className: "relative z-20 flex items-center justify-center", "data-fg-by4t73": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:390:20:16889:1187:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "svg", _fgS: "by4t74", _fgB: 1790697590198, width: "40", height: "56", viewBox: "0 0 24 34", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "drop-shadow-lg", "data-fg-by4t74": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:391:22:16975:1075:e:svg:etete", children: [
9378 /* @__PURE__ */ i("path", { d: "M12 0C5.37258 0 0 5.37258 0 12C0 21 12 34 12 34C12 34 24 21 24 12C24 5.37258 18.6274 0 12 0ZM12 18C8.68629 18 6 15.3137 6 12C6 8.68629 8.68629 6 12 6C15.3137 6 18 8.68629 18 12C18 15.3137 15.3137 18 12 18Z", fill: "#0056B3", "data-fg-by4t75": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:392:24:17121:232:e:path" }), 9379 /* @__PURE__ */ i("path", { d: "M12 1.5C6.20101 1.5 1.5 6.20101 1.5 12C1.5 20.25 12 32.5 12 32.5C12 32.5 22.5 20.25 22.5 12C22.5 6.20101 17.799 1.5 12 1.5ZM12 18C8.68629 18 6 15.3137 6 12C6 8.68629 8.68629 6 12 6C15.3137 6 18 8.68629 18 12C18 15.3137 15.3137 18 12 18Z", fill: "url(#shading)", fillOpacity: "0.2", "data-fg-by4t76": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:393:24:17377:287:e:path" }), 9380 /* @__PURE__ */ i("defs", { "data-fg-by4t77": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:394:24:17688:334:e:defs:e", children: /* @__PURE__ */ c("linearGradient", { id: "shading", x1: "0", y1: "0", x2: "24", y2: "34", gradientUnits: "userSpaceOnUse", "data-fg-by4t78": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:395:26:17720:271:e:linearGradient:ete", children: [
9381 /* @__PURE__ */ i("stop", { offset: "0%", stopColor: "#ffffff", "data-fg-by4t79": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:396:28:17838:40:e:stop" }), 9382 /* @__PURE__ */ i("stop", { offset: "100%", stopColor: "#000000", "data-fg-by4t80": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:397:28:17906:42:e:stop" }) 9383 ] }) }) 9384 ] }) }), 9385 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "by4t82", _fgB: 1790697590198, className: "w-8 h-2 bg-black/20 rounded-full blur-[2px] mt-0 relative z-10", "data-fg-by4t82": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:403:20:18138:82:e:div" }) 9386 ] }) 9387 } 9388 ) 9389 ] }), 9390 s && /* @__PURE__ */ i( 9391 a, 9392 { 9393 _fgT: m.div, 9394 _fgS: "by4t85", 9395 _fgB: 1790697590198, 9396 className: "absolute left-0 top-8 -translate-x-[40px] w-[40px] h-[1px] border-t-2 border-dashed border-slate-400", 9397 initial: { scaleX: 0 }, 9398 animate: r ? { scaleX: 1 } : { scaleX: 0 }, 9399 transition: { duration: 0.3, delay: 0.3 }, 9400 style: { transformOrigin: "right" }, 9401 "data-fg-by4t85": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:411:13:18373:367:e:motion.div" 9402 } 9403 ),
9404 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t86", _fgB: 1790697590198, className: "flex items-center gap-4 border-b border-slate-100 pb-4 mb-2", "data-fg-by4t86": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:420:9:18761:577:e:div:ete", children: [ 9405 /* @__PURE__ */ i( 9406 a, 9407 { 9408 _fgT: m.div, 9409 _fgS: "by4t87", 9410 _fgB: 1790697590198, 9411 className: `w-12 h-12 rounded-xl ${t.bgColor} ${t.iconColor} flex items-center justify-center shrink-0`, 9412 initial: { rotate: -10 }, 9413 animate: r ? { rotate: 0 } : { rotate: -10 }, 9414 transition: { duration: 0.4, delay: 0.2 }, 9415 "data-fg-by4t87": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:421:11:18849:383:e:motion.div:e", 9416 children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "by4t88", _fgB: 1790697590198, size: 24, strokeWidth: 2, "data-fg-by4t88": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:427:13:19169:39:e:step.icon" }) 9417 } 9418 ),
9419 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "by4t89", _fgB: 1790697590198, className: "font-bold text-xl text-[#0B1B2B] leading-tight", "data-fg-by4t89": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:429:11:19243:80:e:h3:x", children: t.title }) 9420 ] }), 9421 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "by4t91", _fgB: 1790697590198, className: "space-y-3", "data-fg-by4t91": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:432:9:19356:737:e:ul:x", children: t.points.map((o, L) => /* @__PURE__ */ c( 9422 a, 9423 { 9424 _fgT: m.li, 9425 _fgS: "by4t93", 9426 _fgB: 1790697590198, 9427 className: "flex items-start text-slate-600 text-sm leading-relaxed", 9428 initial: { opacity: 0, x: -10 }, 9429 animate: r ? { opacity: 1, x: 0 } : { opacity: 0, x: -10 }, 9430 transition: { duration: 0.3, delay: 0.4 + L * 0.1 }, 9431 "data-fg-by4t93": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:435:19:19485:564:e:motion.li:ete", 9432 children: [
9433 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "by4t94", _fgB: 1790697590198, size: 14, className: `mt-1 mr-2 flex-shrink-0 ${t.iconColor}`, "data-fg-by4t94": ":0:node_modules/lucide-react:442:23:19877:82:e:CheckCircle2::::::CELI" }), 9434 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "by4t95", _fgB: 1790697590198, "data-fg-by4t95": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:443:23:19982:36:e:span:x", children: tf(o) }) 9435 ] 9436 }, 9437 L 9438 )) }), 9439 /* @__PURE__ */ i( 9440 a, 9441 { 9442 _fgT: m.div, 9443 _fgS: "by4t97", 9444 _fgB: 1790697590198, 9445 initial: { opacity: 0 }, 9446 animate: r ? { opacity: 1 } : { opacity: 0 }, 9447 transition: { duration: 0.3, delay: 0.7 }, 9448 "data-fg-by4t97": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:449:9:20103:552:e:motion.div:e", 9449 children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "by4t98", _fgB: 1790697590198, href: t.linkUrl, "data-fg-by4t98": ":0:node_modules/wouter:454:11:20288:345:e:Link:e:::::C4yE", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "by4t99", _fgB: 1790697590198, className: "inline-flex items-center text-[#0056B3] font-bold text-sm hover:text-[#004494] transition-colors cursor-pointer group/link mt-2", "data-fg-by4t99": ":0:/src/app/components/offerings/OfferingsTimeline.tsx:455:13:20327:288:e:div:xte", children: [ 9450 t.linkText, 9451 " ",
9452 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "by4t101", _fgB: 1790697590198, size: 16, className: "ml-2 group-hover/link:translate-x-1 transition-transform", "data-fg-by4t101": ":0:node_modules/lucide-react:456:31:20503:93:e:ArrowRight::::::s5N" }) 9453 ] }) }) 9454 } 9455 ) 9456 ] }) 9457 } 9458 ); 9459} 9460const af = [ 9461 { 9462 icon: Fe, 9463 title: "Transigo Rider App", 9464 desc: [ 9465 "Book, track, and pay from a branded mobile app on iOS and Android", 9466 "Fare estimates, favorite addresses, and trip history all at the rider's fingertips" 9467 ], 9468 linkText: "Explore Rider Apps", 9469 linkUrl: "/rider-apps" 9470 }, 9471 { 9472 icon: Pt, 9473 title: "Where's My Ride", 9474 desc: [ 9475 "Real-time vehicle tracking and ETA notifications across web, app, and IVR", 9476 "Digital wallet, trip planner, and automatic pickup alerts reduce no-shows" 9477 ], 9478 linkText: "Explore Rider Tools", 9479 linkUrl: "/fixed-route" 9480 }, 9481 { 9482 icon: Q7, 9483 title: "IVR Self-Service", 9484 desc: [ 9485 "Riders book, confirm, and cancel trips by phone without speaking to an agent", 9486 "Automated call-out messages notify riders when their vehicle is arriving" 9487 ], 9488 linkText: "Explore Telephony", 9489 linkUrl: "/ivr" 9490 } 9491]; 9492function sf() { 9493 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "caq80", _fgB: 1790697590215, _fgD: !0, className: "py-24 px-6 bg-white font-['DM_Sans'] border-t border-slate-100", "data-fg-caq80": ":0:/src/app/components/offerings/RiderTools.tsx:40:5:1130:2394:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "caq81", _fgB: 1790697590215, className: "max-w-7xl mx-auto", "data-fg-caq81": ":0:/src/app/components/offerings/RiderTools.tsx:41:7:1221:2288:e:div:ete", children: [ 9494 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "caq82", _fgB: 1790697590215, className: "text-center mb-16", "data-fg-caq82": ":0:/src/app/components/offerings/RiderTools.tsx:42:9:1265:506:e:div:etete", children: [
9495 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "caq83", _fgB: 1790697590215, className: "text-[#0056B3] font-bold tracking-widest uppercase text-xs mb-3 block", "data-fg-caq83": ":0:/src/app/components/offerings/RiderTools.tsx:43:11:1311:111:e:span:t", children: "RIDER EXPERIENCE" }), 9496 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "caq85", _fgB: 1790697590215, className: "text-4xl md:text-5xl font-bold text-[#0B1B2B] mb-4 font-['DM_Serif_Display']", "data-fg-caq85": ":0:/src/app/components/offerings/RiderTools.tsx:44:11:1433:152:e:h2:t", children: "Tools Your Riders Actually Use" }), 9497 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "caq87", _fgB: 1790697590215, className: "text-lg text-slate-600 max-w-2xl mx-auto", "data-fg-caq87": ":0:/src/app/components/offerings/RiderTools.tsx:47:11:1596:160:e:p:t", children: "Every rider touchpoint connects back to the same dispatch and data platform." }) 9498 ] }), 9499 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "caq89", _fgB: 1790697590215, className: "grid md:grid-cols-3 gap-8", "data-fg-caq89": ":0:/src/app/components/offerings/RiderTools.tsx:52:9:1781:1715:e:div:x", children: af.map((t, e) => /* @__PURE__ */ c( 9500 a, 9501 { 9502 _fgT: m.div, 9503 _fgS: "caq811", 9504 _fgB: 1790697590215, 9505 initial: { opacity: 0, y: 30 }, 9506 whileInView: { opacity: 1, y: 0 }, 9507 viewport: { once: !0 }, 9508 transition: { delay: e * 0.1 }, 9509 className: "group p-8 rounded-2xl border border-slate-100 bg-slate-50 hover:bg-white hover:shadow-xl hover:-translate-y-1 transition-all duration-300", 9510 "data-fg-caq811": ":0:/src/app/components/offerings/RiderTools.tsx:54:13:1877:1590:e:motion.div:etetete", 9511 children: [
9512 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "caq812", _fgB: 1790697590215, className: "w-14 h-14 bg-white rounded-xl shadow-sm border border-slate-100 flex items-center justify-center text-[#0056B3] mb-6 group-hover:bg-[#0056B3] group-hover:text-white transition-colors", "data-fg-caq812": ":0:/src/app/components/offerings/RiderTools.tsx:62:15:2292:261:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "caq813", _fgB: 1790697590215, size: 28, "data-fg-caq813": ":0:/src/app/components/offerings/RiderTools.tsx:63:17:2509:23:e:tool.icon" }) }), 9513 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "caq814", _fgB: 1790697590215, className: "text-xl font-bold text-[#0B1B2B] mb-4", "data-fg-caq814": ":0:/src/app/components/offerings/RiderTools.tsx:66:15:2583:71:e:h3:x", children: t.title }), 9514 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "caq816", _fgB: 1790697590215, className: "space-y-3 mb-8 min-h-[80px]", "data-fg-caq816": ":0:/src/app/components/offerings/RiderTools.tsx:68:15:2684:385:e:ul:x", children: t.desc.map((s, r) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "caq818", _fgB: 1790697590215, className: "flex items-start text-slate-600 text-sm leading-relaxed", "data-fg-caq818": ":0:/src/app/components/offerings/RiderTools.tsx:70:19:2794:235:e:li:etx", children: [
9515 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "caq819", _fgB: 1790697590215, className: "w-1.5 h-1.5 rounded-full bg-[#EFBB0F] mt-2 mr-3 flex-shrink-0", "data-fg-caq819": ":0:/src/app/components/offerings/RiderTools.tsx:71:21:2895:82:e:span" }), 9516 s 9517 ] }, r)) }), 9518 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "caq821", _fgB: 1790697590215, href: t.linkUrl, "data-fg-caq821": ":0:node_modules/wouter:77:15:3085:356:e:Link:e:::::C4yE", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "caq822", _fgB: 1790697590215, className: "inline-flex items-center text-[#0056B3] font-bold text-sm hover:text-[#004494] transition-colors cursor-pointer group/link", "data-fg-caq822": ":0:/src/app/components/offerings/RiderTools.tsx:78:17:3128:291:e:div:xte", children: [ 9519 t.linkText, 9520 " ", 9521 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "caq824", _fgB: 1790697590215, size: 16, className: "ml-2 group-hover/link:translate-x-1 transition-transform", "data-fg-caq824": ":0:node_modules/lucide-react:79:35:3303:93:e:ArrowRight::::::s5N" }) 9522 ] }) }) 9523 ] 9524 }, 9525 e 9526 )) }) 9527 ] }) }); 9528} 9529function rf() { 9530 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "dzxw0", _fgB: 1790697590207, _fgD: !0, className: "py-24 bg-[#0B1B2B] relative overflow-hidden font-['DM_Sans']", "data-fg-dzxw0": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:7:5:172:4331:e:section:ete:1", children: [ 9531 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw1", _fgB: 1790697590207, className: "absolute inset-0 z-0 opacity-10", "data-fg-dzxw1": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:8:7:261:185:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw2", _fgB: 1790697590207, className: "absolute inset-0 bg-[radial-gradient(#ffffff_1px,transparent_1px)] [background-size:32px_32px]", "data-fg-dzxw2": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:9:9:319:114:e:div" }) }), 9532 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw3", _fgB: 1790697590207, className: "max-w-7xl mx-auto px-6 relative z-10 grid md:grid-cols-2 gap-16 items-center", "data-fg-dzxw3": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:12:7:454:4034:e:div:xtetxte", children: [
9533 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw5", _fgB: 1790697590207, className: "md:w-[55%]", "data-fg-dzxw5": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:14:9:592:1917:e:div:etetetete", children: [ 9534 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dzxw6", _fgB: 1790697590207, className: "text-[#EFBB0F] font-bold tracking-widest uppercase text-xs mb-3 block", "data-fg-dzxw6": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:15:11:631:106:e:span:t", children: "FIXED ROUTE" }), 9535 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "dzxw8", _fgB: 1790697590207, className: "text-4xl md:text-5xl font-bold text-white mb-6 font-['DM_Serif_Display']", "data-fg-dzxw8": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:16:11:748:150:e:h2:t", children: "Built for Scheduled Service Too." }), 9536 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dzxw10", _fgB: 1790697590207, className: "text-lg text-slate-400 mb-8 leading-relaxed max-w-xl", "data-fg-dzxw10": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:19:11:909:298:e:p:t", children: "Our dispatching platform includes a dedicated toolset for fixed route operations. Build route networks, monitor schedule adherence in real time, and give riders live bus tracking through Where's My Bus." }),
9537 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "dzxw12", _fgB: 1790697590207, className: "space-y-4 mb-10", "data-fg-dzxw12": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:23:11:1219:949:e:ul:x", children: [ 9538 "Route network builder for stops, timetables, and service patterns", 9539 "Real-time schedule adherence with automatic early/late flagging at every timepoint", 9540 "Where's My Bus rider tools powered by the same AVL data your dispatchers use" 9541 ].map((t, e) => { 9542 const s = t.split(" "), r = s.slice(0, 3).join(" "), n = s.slice(3).join(" "); 9543 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "dzxw14", _fgB: 1790697590207, className: "flex items-start text-slate-300", "data-fg-dzxw14": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:34:17:1792:327:e:li:ete", children: [ 9544 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw15", _fgB: 1790697590207, className: "w-1.5 h-1.5 rounded-full bg-[#0056B3] mt-2.5 mr-3 flex-shrink-0", "data-fg-dzxw15": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:35:19:1867:83:e:div" }),
9545 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dzxw16", _fgB: 1790697590207, "data-fg-dzxw16": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:36:19:1969:128:e:span:etx", children: [ 9546 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dzxw17", _fgB: 1790697590207, className: "text-white font-semibold", "data-fg-dzxw17": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:37:21:1996:64:e:strong:x", children: r }), 9547 " ", 9548 n 9549 ] }) 9550 ] }, e); 9551 }) }), 9552 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "dzxw20", _fgB: 1790697590207, href: "/fixed-route", "data-fg-dzxw20": ":0:node_modules/wouter:44:11:2180:314:e:Link:e:::::C4yE", children: /* @__PURE__ */ c(a, { _fgT: "button", _fgS: "dzxw21", _fgB: 1790697590207, className: "px-8 py-3.5 bg-[#0056B3] text-white font-bold rounded-full shadow-lg hover:bg-[#004494] transition-all hover:scale-105 inline-flex items-center gap-2", "data-fg-dzxw21": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:45:13:2219:257:e:button:te", children: [ 9553 "Explore Fixed Route Tools ",
9554 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dzxw23", _fgB: 1790697590207, size: 18, "data-fg-dzxw23": ":0:node_modules/lucide-react:46:41:2430:24:e:ArrowRight::::::s5N" }) 9555 ] }) }) 9556 ] }), 9557 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw25", _fgB: 1790697590207, className: "relative", "data-fg-dzxw25": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:52:9:2557:1918:e:div:ete", children: [ 9558 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw26", _fgB: 1790697590207, className: "absolute -inset-4 bg-gradient-to-tr from-[#0056B3] to-[#EFBB0F] rounded-2xl opacity-20 blur-xl", "data-fg-dzxw26": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:53:11:2594:114:e:div" }), 9559 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw27", _fgB: 1790697590207, className: "relative bg-[#1E293B] border border-white/10 rounded-2xl p-2 shadow-2xl overflow-hidden group hover:scale-[1.02] transition-transform duration-500", "data-fg-dzxw27": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:54:11:2719:1741:e:div:etxte", children: [
9560 /* @__PURE__ */ i( 9561 a, 9562 { 9563 _fgT: "img", 9564 _fgS: "dzxw28", 9565 _fgB: 1790697590207, 9566 src: "https://images.unsplash.com/photo-1758578484467-52d57a339904?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxidXMlMjByb3V0ZSUyMG1hcCUyMHRyYW5zaXQlMjBzY2hlZHVsZSUyMHNjcmVlbnxlbnwxfHx8fDE3NzE0MzM5NTh8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 9567 alt: "Fixed Route Map", 9568 className: "w-full h-auto rounded-xl shadow-inner brightness-90 group-hover:brightness-100 transition-all duration-500", 9569 "data-fg-dzxw28": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:55:14:2897:508:e:img" 9570 } 9571 ), 9572 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw30", _fgB: 1790697590207, className: "absolute bottom-6 left-6 right-6 bg-white/95 backdrop-blur-sm rounded-xl p-4 shadow-lg border border-slate-200 transform translate-y-2 opacity-90 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-500 delay-100", "data-fg-dzxw30": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:62:14:3472:971:e:div:etete", children: [
9573 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw31", _fgB: 1790697590207, className: "flex items-center justify-between mb-2", "data-fg-dzxw31": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:63:16:3739:303:e:div:ete", children: [ 9574 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dzxw32", _fgB: 1790697590207, className: "font-bold text-[#0B1B2B] text-sm", "data-fg-dzxw32": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:64:18:3813:82:e:span:t", children: "Route 12 - Downtown Loop" }), 9575 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dzxw34", _fgB: 1790697590207, className: "bg-green-100 text-green-700 text-[10px] font-bold px-2 py-0.5 rounded-full", "data-fg-dzxw34": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:65:18:3913:107:e:span:t", children: "ON TIME" }) 9576 ] }), 9577 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw36", _fgB: 1790697590207, className: "h-1.5 w-full bg-slate-100 rounded-full overflow-hidden", "data-fg-dzxw36": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:67:16:4058:172:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dzxw37", _fgB: 1790697590207, className: "h-full w-[70%] bg-green-500 rounded-full", "data-fg-dzxw37": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:68:18:4148:60:e:div" }) }),
9578 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dzxw38", _fgB: 1790697590207, className: "flex justify-between mt-1 text-[10px] text-slate-500", "data-fg-dzxw38": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:70:16:4246:177:e:div:ete", children: [ 9579 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dzxw39", _fgB: 1790697590207, "data-fg-dzxw39": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:71:18:4334:19:e:span:t", children: "Stop 4" }), 9580 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dzxw41", _fgB: 1790697590207, "data-fg-dzxw41": ":0:/src/app/components/offerings/FixedRouteCallout.tsx:72:18:4371:30:e:span:t", children: "Next: Stop 5 (2m)" }) 9581 ] }) 9582 ] }) 9583 ] }) 9584 ] }) 9585 ] }) 9586 ] }); 9587} 9588const ri = globalThis.__GLOBALS__.getAssetURL("faa3239c6239668bb14413059149123a9f79bd28.png"); 9589function nf() { 9590 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "2ki0", _fgB: 1790697590210, _fgD: !0, className: "py-24 bg-[#F8FAFC] relative overflow-hidden font-['DM_Sans']", "data-fg-2ki0": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:8:5:261:3813:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki1", _fgB: 1790697590210, className: "max-w-7xl mx-auto px-6 relative z-10 grid md:grid-cols-2 gap-16 items-center", "data-fg-2ki1": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:9:7:350:3709:e:div:xtetxte", children: [ 9591 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki3", _fgB: 1790697590210, className: "relative order-2 md:order-1", "data-fg-2ki3": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:11:9:496:1585:e:div:ete", children: [
9592 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "2ki4", _fgB: 1790697590210, className: "absolute -inset-4 bg-gradient-to-tr from-[#CBD5E1] to-[#E2E8F0] rounded-2xl opacity-50 blur-xl", "data-fg-2ki4": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:12:11:552:114:e:div" }), 9593 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki5", _fgB: 1790697590210, className: "relative bg-white border border-slate-200 rounded-2xl p-2 shadow-xl overflow-hidden group hover:shadow-2xl transition-all duration-300", "data-fg-2ki5": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:13:11:677:1389:e:div:etxte", children: [ 9594 /* @__PURE__ */ i( 9595 a, 9596 { 9597 _fgT: "img", 9598 _fgS: "2ki6", 9599 _fgB: 1790697590210, 9600 src: ri, 9601 alt: "Fleet Maintenance", 9602 className: "w-full h-auto rounded-xl shadow-inner group-hover:scale-105 transition-transform duration-500", 9603 "data-fg-2ki6": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:14:14:843:213:e:img" 9604 } 9605 ),
9606 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki8", _fgB: 1790697590210, className: "absolute top-6 right-6 bg-white/95 backdrop-blur-sm rounded-xl p-4 shadow-lg border border-slate-200 transform translate-x-2 opacity-90 group-hover:translate-x-0 group-hover:opacity-100 transition-all duration-500 delay-100 max-w-[200px]", "data-fg-2ki8": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:21:14:1123:926:e:div:ete", children: [ 9607 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki9", _fgB: 1790697590210, className: "flex items-center gap-3 mb-2", "data-fg-2ki9": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:22:16:1394:475:e:div:ete", children: [ 9608 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "2ki10", _fgB: 1790697590210, className: "w-8 h-8 rounded-full bg-amber-100 text-amber-600 flex items-center justify-center", "data-fg-2ki10": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:23:18:1458:163:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: zd, _fgS: "2ki11", _fgB: 1790697590210, size: 14, "data-fg-2ki11": ":0:node_modules/lucide-react:24:20:1577:20:e:Wrench::::::dbj" }) }),
9609 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki12", _fgB: 1790697590210, "data-fg-2ki12": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:26:18:1639:208:e:div:ete", children: [ 9610 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "2ki13", _fgB: 1790697590210, className: "font-bold text-[#0B1B2B] text-xs block", "data-fg-2ki13": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:27:20:1664:75:e:span:t", children: "Service Due" }), 9611 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "2ki15", _fgB: 1790697590210, className: "text-[10px] text-slate-500", "data-fg-2ki15": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:28:20:1759:64:e:span:t", children: "Vehicle #402" }) 9612 ] }) 9613 ] }), 9614 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "2ki17", _fgB: 1790697590210, className: "text-[10px] text-slate-600 font-medium", "data-fg-2ki17": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:31:16:1885:144:e:div:t", children: "Oil change & brake inspection overdue by 2 days." }) 9615 ] }) 9616 ] }) 9617 ] }), 9618 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "2ki20", _fgB: 1790697590210, className: "md:w-[90%] order-1 md:order-2 md:pl-10", "data-fg-2ki20": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:39:9:2127:1919:e:div:etetetete", children: [
9619 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "2ki21", _fgB: 1790697590210, className: "text-[#0056B3] font-bold tracking-widest uppercase text-xs mb-3 block", "data-fg-2ki21": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:40:11:2194:111:e:span:t", children: "FLEET MANAGEMENT" }), 9620 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "2ki23", _fgB: 1790697590210, className: "text-4xl md:text-5xl font-bold text-[#0B1B2B] mb-6 font-['DM_Serif_Display']", "data-fg-2ki23": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:41:11:2316:152:e:h2:t", children: "Keep Every Vehicle Road-Ready." }), 9621 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "2ki25", _fgB: 1790697590210, className: "text-lg text-slate-600 mb-8 leading-relaxed", "data-fg-2ki25": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:44:11:2479:244:e:p:t", children: "Ensure your fleet is safe, compliant, and always available. Track maintenance schedules, repairs, and inventory in the same system you use to dispatch trips." }),
9622 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "2ki27", _fgB: 1790697590210, className: "space-y-4 mb-10", "data-fg-2ki27": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:48:11:2735:952:e:ul:x", children: [ 9623 "Scheduled renewals and inspections tracked by date with automatic reminders", 9624 "Preventive maintenance by mileage or calendar with full repair ticket management", 9625 "Parts inventory with vendor tracking and warranty period monitoring" 9626 ].map((t, e) => { 9627 const s = t.split(" "), r = s.slice(0, 3).join(" "), n = s.slice(3).join(" "); 9628 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "2ki29", _fgB: 1790697590210, className: "flex items-start text-slate-600", "data-fg-2ki29": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:59:17:3307:331:e:li:ete", children: [ 9629 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "2ki30", _fgB: 1790697590210, className: "w-1.5 h-1.5 rounded-full bg-[#EFBB0F] mt-2.5 mr-3 flex-shrink-0", "data-fg-2ki30": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:60:19:3382:83:e:div" }),
9630 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "2ki31", _fgB: 1790697590210, "data-fg-2ki31": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:61:19:3484:132:e:span:etx", children: [ 9631 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "2ki32", _fgB: 1790697590210, className: "text-slate-900 font-semibold", "data-fg-2ki32": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:62:21:3511:68:e:strong:x", children: r }), 9632 " ", 9633 n 9634 ] }) 9635 ] }, e); 9636 }) }), 9637 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "2ki35", _fgB: 1790697590210, href: "/taxi-dispatch", "data-fg-2ki35": ":0:node_modules/wouter:69:11:3699:332:e:Link:e:::::C4yE", children: /* @__PURE__ */ c(a, { _fgT: "button", _fgS: "2ki36", _fgB: 1790697590210, className: "text-[#0056B3] font-bold text-sm hover:text-[#004494] transition-colors inline-flex items-center group", "data-fg-2ki36": ":0:/src/app/components/offerings/FleetManagementCallout.tsx:70:13:3740:273:e:button:te", children: [ 9638 "Explore Fleet Management ",
9639 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "2ki38", _fgB: 1790697590210, size: 16, className: "ml-2 group-hover:translate-x-1 transition-transform", "data-fg-2ki38": ":0:node_modules/lucide-react:71:40:3903:88:e:ArrowRight::::::s5N" }) 9640 ] }) }) 9641 ] }) 9642 ] }) }); 9643} 9644const of = globalThis.__GLOBALS__.getAssetURL("d0e02d3ff436228c65a89df8c7f7e125917c0994.png"), Lf = globalThis.__GLOBALS__.getAssetURL("34e37c0454410ffe0ce2ac4667e2b2779ce8dccb.png"), cf = [ 9645 { label: "How it Works?", href: "https://www.youtube.com/watch?v=zUV2L-xK0hs", newTab: !0 }, 9646 { label: "Run Default Simulation", href: "https://simdispatch.itcurves.us/SimulationScheduler", newTab: !0 }, 9647 { label: "Run My Simulation", href: "https://simdispatch.itcurves.us/MySimulation", newTab: !0 } 9648]; 9649function ni() { 9650 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "c3d80", _fgB: 1790697590184, _fgD: !0, className: "py-24 bg-white relative overflow-hidden font-['DM_Sans']", "data-fg-c3d80": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:16:5:710:5057:e:section:xtete:1", children: [ 9651 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c3d82", _fgB: 1790697590184, className: "absolute inset-0 pointer-events-none", "data-fg-c3d82": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:18:7:834:844:e:div:xtetxtetxtetxtete", children: [
9652 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d84", _fgB: 1790697590184, className: "absolute -top-32 -left-32 w-[600px] h-[600px] bg-[#EFBB0F]/20 rounded-full blur-3xl", "data-fg-c3d84": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:20:9:933:103:e:div" }), 9653 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d86", _fgB: 1790697590184, className: "absolute -bottom-32 -right-32 w-[550px] h-[550px] bg-[#0056B3]/12 rounded-full blur-3xl", "data-fg-c3d86": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:22:9:1085:107:e:div" }), 9654 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d88", _fgB: 1790697590184, className: "absolute inset-0 bg-gradient-to-br from-[#EFBB0F]/8 via-transparent to-[#0056B3]/6", "data-fg-c3d88": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:24:9:1269:102:e:div" }), 9655 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d810", _fgB: 1790697590184, className: "absolute top-0 inset-x-0 h-24 bg-gradient-to-b from-white to-transparent", "data-fg-c3d810": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:26:9:1469:92:e:div" }),
9656 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d811", _fgB: 1790697590184, className: "absolute bottom-0 inset-x-0 h-24 bg-gradient-to-t from-white to-transparent", "data-fg-c3d811": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:27:9:1570:95:e:div" }) 9657 ] }), 9658 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d812", _fgB: 1790697590184, className: "max-w-7xl mx-auto px-6 relative z-10", "data-fg-c3d812": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:30:7:1686:4066:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c3d813", _fgB: 1790697590184, className: "flex flex-col lg:flex-row items-center gap-10 lg:gap-16", "data-fg-c3d813": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:31:9:1749:3990:e:div:xtetxtetxte", children: [ 9659 /* @__PURE__ */ c( 9660 a, 9661 { 9662 _fgT: m.div, 9663 _fgS: "c3d815", 9664 _fgB: 1790697590184, 9665 className: "flex-shrink-0 flex flex-col items-center gap-3", 9666 initial: { opacity: 0, y: 30 }, 9667 whileInView: { opacity: 1, y: 0 }, 9668 viewport: { once: !0 }, 9669 transition: { duration: 0.6, ease: [0.22, 1, 0.36, 1] }, 9670 "data-fg-c3d815": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:34:11:1877:624:e:motion.div:ete", 9671 children: [
9672 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c3d816", _fgB: 1790697590184, className: "text-xs font-bold tracking-widest uppercase text-[#0B1B2B]/50", "data-fg-c3d816": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:41:13:2182:124:e:span:t", children: "Rider App" }), 9673 /* @__PURE__ */ i( 9674 a, 9675 { 9676 _fgT: "img", 9677 _fgS: "c3d818", 9678 _fgB: 1790697590184, 9679 src: of, 9680 alt: "Rider App", 9681 className: "w-[160px] sm:w-[180px] h-auto block drop-shadow-xl", 9682 "data-fg-c3d818": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:44:13:2319:158:e:img" 9683 } 9684 ) 9685 ] 9686 } 9687 ), 9688 /* @__PURE__ */ c( 9689 a, 9690 { 9691 _fgT: m.div, 9692 _fgS: "c3d820", 9693 _fgB: 1790697590184, 9694 className: "flex-shrink-0 flex flex-col items-center gap-3 lg:mt-10", 9695 initial: { opacity: 0, y: 40 }, 9696 whileInView: { opacity: 1, y: 0 }, 9697 viewport: { once: !0 }, 9698 transition: { duration: 0.6, delay: 0.1, ease: [0.22, 1, 0.36, 1] }, 9699 "data-fg-c3d820": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:52:11:2557:648:e:motion.div:ete", 9700 children: [
9701 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c3d821", _fgB: 1790697590184, className: "text-xs font-bold tracking-widest uppercase text-[#0B1B2B]/50", "data-fg-c3d821": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:59:13:2883:125:e:span:t", children: "Driver App" }), 9702 /* @__PURE__ */ i( 9703 a, 9704 { 9705 _fgT: "img", 9706 _fgS: "c3d823", 9707 _fgB: 1790697590184, 9708 src: Lf, 9709 alt: "Driver App", 9710 className: "w-[160px] sm:w-[180px] h-auto block drop-shadow-xl", 9711 "data-fg-c3d823": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:62:13:3021:160:e:img" 9712 } 9713 ) 9714 ] 9715 } 9716 ), 9717 /* @__PURE__ */ c( 9718 a, 9719 { 9720 _fgT: m.div, 9721 _fgS: "c3d825", 9722 _fgB: 1790697590184, 9723 className: "flex-1 min-w-0", 9724 initial: { opacity: 0, x: 30 }, 9725 whileInView: { opacity: 1, x: 0 }, 9726 viewport: { once: !0 }, 9727 transition: { duration: 0.65, delay: 0.15, ease: [0.22, 1, 0.36, 1] }, 9728 "data-fg-c3d825": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:70:11:3254:2469:e:motion.div:xtetxtetxtetxte", 9729 children: [
9730 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c3d827", _fgB: 1790697590184, className: "text-[#0056B3] font-bold tracking-widest uppercase text-xs mb-3 block", "data-fg-c3d827": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:78:13:3567:135:e:span:t", children: "Microtransit" }), 9731 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "c3d830", _fgB: 1790697590184, className: "text-3xl md:text-4xl font-bold text-[#0B1B2B] mb-6 font-['DM_Serif_Display'] leading-tight", "data-fg-c3d830": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:83:13:3744:185:e:h2:t", children: "Transforming Urban Mobility with Microtransit" }), 9732 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c3d833", _fgB: 1790697590184, className: "text-base text-slate-600 leading-relaxed mb-8", "data-fg-c3d833": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:88:13:3973:887:e:p:t", children: "Microtransit is redefining how communities navigate their urban landscapes by offering flexible, on-demand transportation solutions that bridge the gap between traditional public transit and ridesharing services. By utilizing small, efficient vehicles and smart technology, microtransit systems provide tailored routes that adapt to real-time passenger needs, reducing wait times and enhancing accessibility. This innovative approach not only alleviates congestion and lowers emissions but also connects underserved areas to vital resources, ensuring that everyone has the opportunity to travel seamlessly throughout their city. Join the movement towards smarter, more sustainable urban mobility!" }),
9733 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c3d836", _fgB: 1790697590184, className: "flex flex-wrap gap-3", "data-fg-c3d836": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:100:13:4906:793:e:div:x", children: cf.map(({ label: t, href: e, newTab: s }) => /* @__PURE__ */ c( 9734 a, 9735 { 9736 _fgT: "a", 9737 _fgS: "c3d838", 9738 _fgB: 1790697590184, 9739 href: e, 9740 target: s ? "_blank" : void 0, 9741 rel: s ? "noopener noreferrer" : void 0, 9742 className: "inline-flex items-center gap-2 px-5 py-2.5 rounded-full border-2 border-[#0B1B2B] text-[#0B1B2B] text-sm font-semibold hover:bg-[#0B1B2B] hover:text-white transition-all duration-200 group", 9743 "data-fg-c3d838": ":0:/src/app/components/offerings/MicrotransitCallout.tsx:102:17:5017:645:e:a:xte", 9744 children: [ 9745 t, 9746 /* @__PURE__ */ i( 9747 a, 9748 { 9749 _fgT: D, 9750 _fgS: "c3d840", 9751 _fgB: 1790697590184, 9752 size: 14, 9753 className: "group-hover:translate-x-0.5 transition-transform duration-200", 9754 "data-fg-c3d840": ":0:node_modules/lucide-react:110:19:5485:156:e:ArrowRight::::::s5N" 9755 } 9756 ) 9757 ] 9758 }, 9759 t 9760 )) }) 9761 ] 9762 } 9763 ) 9764 ] }) }) 9765 ] }); 9766} 9767function lf() { 9768 const { openContactModal: t } = Z(); 9769 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "dy60", _fgB: 1790697590213, _fgD: !0, className: "py-24 px-6 bg-gradient-to-br from-[#0056B3] to-[#003366] text-white font-['DM_Sans'] relative overflow-hidden", "data-fg-dy60": ":0:/src/app/components/offerings/OfferingsCTA.tsx:8:5:199:1178:e:section:ete:1", children: [ 9770 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dy61", _fgB: 1790697590213, className: "absolute inset-0 z-0", "data-fg-dy61": ":0:/src/app/components/offerings/OfferingsCTA.tsx:9:7:337:339:e:div:ete", children: [
9771 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dy62", _fgB: 1790697590213, className: "absolute top-0 right-0 w-[600px] h-[600px] bg-white/5 rounded-full blur-[100px] -translate-y-1/2 translate-x-1/2", "data-fg-dy62": ":0:/src/app/components/offerings/OfferingsCTA.tsx:10:9:384:132:e:div" }), 9772 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dy63", _fgB: 1790697590213, className: "absolute bottom-0 left-0 w-[400px] h-[400px] bg-[#EFBB0F]/10 rounded-full blur-[80px] translate-y-1/2 -translate-x-1/2", "data-fg-dy63": ":0:/src/app/components/offerings/OfferingsCTA.tsx:11:9:525:138:e:div" }) 9773 ] }), 9774 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dy64", _fgB: 1790697590213, className: "max-w-4xl mx-auto text-center relative z-10", "data-fg-dy64": ":0:/src/app/components/offerings/OfferingsCTA.tsx:14:7:684:678:e:div:ete", children: [ 9775 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "dy65", _fgB: 1790697590213, className: "text-4xl md:text-5xl font-bold mb-10 font-['DM_Serif_Display'] leading-tight", "data-fg-dy65": ":0:/src/app/components/offerings/OfferingsCTA.tsx:15:9:754:174:e:h2:t", children: "See What's Possible When Technology Gets Out of the Way." }),
9776 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dy67", _fgB: 1790697590213, className: "flex flex-col sm:flex-row items-center justify-center gap-6", "data-fg-dy67": ":0:/src/app/components/offerings/OfferingsCTA.tsx:19:9:946:403:e:div:e", children: /* @__PURE__ */ i( 9777 a, 9778 { 9779 _fgT: "button", 9780 _fgS: "dy68", 9781 _fgB: 1790697590213, 9782 onClick: t, 9783 className: "px-8 py-4 border-2 border-white text-white font-bold rounded-full hover:bg-white hover:text-[#0056B3] transition-all hover:scale-105 min-w-[200px] text-lg cursor-pointer", 9784 "data-fg-dy68": ":0:/src/app/components/offerings/OfferingsCTA.tsx:20:11:1034:300:e:button:t", 9785 children: "Schedule a Demo" 9786 } 9787 ) }) 9788 ] }) 9789 ] }); 9790} 9791function df() { 9792 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "dw9d0", _fgB: 1790697589404, _fgD: !0, className: "relative", "data-fg-dw9d0": ":0:/src/app/pages/OfferingsPage.tsx:13:5:746:283:e:main:etetetetetetxtete:1", children: [ 9793 /* @__PURE__ */ i(a, { _fgT: Kg, _fgS: "dw9d1", _fgB: 1790697589404, "data-fg-dw9d1": ":0:/src/app/pages/OfferingsPage.tsx:14:7:780:17:e:OfferingsHero::::::D5aR" }), 9794 /* @__PURE__ */ i(a, { _fgT: ef, _fgS: "dw9d2", _fgB: 1790697589404, "data-fg-dw9d2": ":0:/src/app/pages/OfferingsPage.tsx:15:7:804:21:e:OfferingsTimeline::::::Cb5N" }), 9795 /* @__PURE__ */ i(a, { _fgT: sf, _fgS: "dw9d3", _fgB: 1790697589404, "data-fg-dw9d3": ":0:/src/app/pages/OfferingsPage.tsx:16:7:832:14:e:RiderTools::::::B6ph" }), 9796 /* @__PURE__ */ i(a, { _fgT: rf, _fgS: "dw9d4", _fgB: 1790697589404, "data-fg-dw9d4": ":0:/src/app/pages/OfferingsPage.tsx:17:7:853:21:e:FixedRouteCallout::::::o2d" }), 9797 /* @__PURE__ */ i(a, { _fgT: ni, _fgS: "dw9d5", _fgB: 1790697589404, "data-fg-dw9d5": ":0:/src/app/pages/OfferingsPage.tsx:18:7:881:23:e:MicrotransitCallout::::::rNL" }), 9798 /* @__PURE__ */ i(a, { _fgT: nf, _fgS: "dw9d6", _fgB: 1790697589404, "data-fg-dw9d6": ":0:/src/app/pages/OfferingsPage.tsx:19:7:911:26:e:FleetManagementCallout::::::C8V5" }), 9799 /* @__PURE__ */ i(a, { _fgT: lf, _fgS: "dw9d8", _fgB: 1790697589404, "data-fg-dw9d8": ":0:/src/app/pages/OfferingsPage.tsx:21:7:984:16:e:OfferingsCTA::::::CTRV" }), 9800 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "dw9d9", _fgB: 1790697589404, "data-fg-dw9d9": ":0:/src/app/pages/OfferingsPage.tsx:22:7:1007:10:e:Footer::::::B1Vv" }) 9801 ] }); 9802} 9803function gf() { 9804 const { openContactModal: t } = Z(); 9805 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "tjy0", _fgB: 1790697590720, _fgD: !0, className: "bg-[#0B1B2B] relative overflow-hidden flex items-center font-['DM_Sans'] pt-28 pb-12", "data-fg-tjy0": ":0:/src/app/components/ai/AIHero.tsx:8:5:294:4247:e:section:xtete:1", children: [ 9806 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy2", _fgB: 1790697590720, className: "absolute inset-0 z-0", "data-fg-tjy2": ":0:/src/app/components/ai/AIHero.tsx:10:7:441:745:e:div:xtetxtete", children: [
9807 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "tjy4", _fgB: 1790697590720, className: "absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.03)_1px,transparent_1px)] bg-[size:64px_64px] [mask-image:radial-gradient(ellipse_at_center,black_40%,transparent_80%)]", "data-fg-tjy4": ":0:/src/app/components/ai/AIHero.tsx:12:9:524:261:e:div" }), 9808 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "tjy6", _fgB: 1790697590720, className: "absolute -top-[20%] -right-[10%] w-[900px] h-[900px] bg-[#2B7AE8] opacity-[0.08] blur-[120px] rounded-full pointer-events-none mix-blend-screen", "data-fg-tjy6": ":0:/src/app/components/ai/AIHero.tsx:15:9:836:163:e:div" }), 9809 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "tjy7", _fgB: 1790697590720, className: "absolute -bottom-[20%] -left-[10%] w-[700px] h-[700px] bg-[#EFBB0F] opacity-[0.05] blur-[100px] rounded-full pointer-events-none mix-blend-screen", "data-fg-tjy7": ":0:/src/app/components/ai/AIHero.tsx:16:9:1008:165:e:div" }) 9810 ] }), 9811 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy8", _fgB: 1790697590720, className: "max-w-[1024px] mx-auto px-6 md:px-12 relative z-10 w-full flex flex-col items-center text-center", "data-fg-tjy8": ":0:/src/app/components/ai/AIHero.tsx:19:7:1194:3332:e:div:etxte", children: [
9812 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy9", _fgB: 1790697590720, className: "max-w-[900px] mb-4 relative z-20", "data-fg-tjy9": ":0:/src/app/components/ai/AIHero.tsx:20:9:1317:1748:e:div:xtetxtetxte", children: [ 9813 /* @__PURE__ */ c( 9814 a, 9815 { 9816 _fgT: m.div, 9817 _fgS: "tjy11", 9818 _fgB: 1790697590720, 9819 initial: { opacity: 0, y: 20 }, 9820 animate: { opacity: 1, y: 0 }, 9821 transition: { duration: 0.5 }, 9822 className: "inline-flex items-center gap-2 px-4 py-1.5 border border-white/10 rounded-full bg-white/5 backdrop-blur-sm text-white text-[11px] font-bold tracking-[2.5px] uppercase mb-4", 9823 "data-fg-tjy11": ":0:/src/app/components/ai/AIHero.tsx:22:11:1402:517:e:motion.div:et", 9824 children: [ 9825 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "tjy12", _fgB: 1790697590720, className: "w-2 h-2 rounded-full bg-[#EFBB0F] animate-pulse shadow-[0_0_8px_#EFBB0F]", "data-fg-tjy12": ":0:/src/app/components/ai/AIHero.tsx:28:13:1765:93:e:span" }), 9826 "AGENTIC TRANSIT PLATFORM" 9827 ] 9828 } 9829 ),
9830 /* @__PURE__ */ c( 9831 a, 9832 { 9833 _fgT: m.h1, 9834 _fgS: "tjy15", 9835 _fgB: 1790697590720, 9836 initial: { opacity: 0, y: 20 }, 9837 animate: { opacity: 1, y: 0 }, 9838 transition: { duration: 0.5, delay: 0.1 }, 9839 className: "font-['DM_Serif_Display'] text-[36px] sm:text-[48px] md:text-[64px] lg:text-[72px] leading-[1.05] text-white mb-4", 9840 "data-fg-tjy15": ":0:/src/app/components/ai/AIHero.tsx:33:11:1968:478:e:motion.h1:te", 9841 children: [ 9842 "Your Operations Are Already Telling You Something.", 9843 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "tjy17", _fgB: 1790697590720, className: "text-[#EFBB0F] italic block mt-2", "data-fg-tjy17": ":0:/src/app/components/ai/AIHero.tsx:40:13:2347:76:e:span:t", children: "Are You Listening?" }) 9844 ] 9845 } 9846 ), 9847 /* @__PURE__ */ c( 9848 a, 9849 { 9850 _fgT: m.p, 9851 _fgS: "tjy20", 9852 _fgB: 1790697590720, 9853 initial: { opacity: 0, y: 20 }, 9854 animate: { opacity: 1, y: 0 }, 9855 transition: { duration: 0.5, delay: 0.2 }, 9856 className: "text-lg md:text-xl leading-[1.7] text-[#94A3B8] max-w-[90%] mx-auto", 9857 "data-fg-tjy20": ":0:/src/app/components/ai/AIHero.tsx:44:11:2495:555:e:motion.p:te", 9858 children: [ 9859 "Every booking, missed trip, complaint, and no-show is a signal. Our Agentic Transit Platform puts six specialized AI agents to work on those signals â automating workflows, guiding your team, and improving service in real time. ",
9860 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "tjy22", _fgB: 1790697590720, className: "font-bold", "data-fg-tjy22": ":0:/src/app/components/ai/AIHero.tsx:49:240:2979:60:e:span:t", children: "Six agents. One platform." }) 9861 ] 9862 } 9863 ) 9864 ] }), 9865 /* @__PURE__ */ c( 9866 a, 9867 { 9868 _fgT: m.div, 9869 _fgS: "tjy25", 9870 _fgB: 1790697590720, 9871 initial: { opacity: 0, scale: 0.9 }, 9872 animate: { opacity: 1, scale: 1 }, 9873 transition: { duration: 0.8, delay: 0.3 }, 9874 className: "relative w-full max-w-[800px] h-[220px] sm:h-[280px] md:h-[320px] flex items-center justify-center z-10", 9875 "data-fg-tjy25": ":0:/src/app/components/ai/AIHero.tsx:53:9:3144:1369:e:motion.div:etxte", 9876 children: [ 9877 /* @__PURE__ */ i(a, { _fgT: ff, _fgS: "tjy26", _fgB: 1790697590720, "data-fg-tjy26": ":0:/src/app/components/ai/AIHero.tsx:59:11:3448:16:e:BrainNetwork::::::BXbc" }), 9878 /* @__PURE__ */ i( 9879 a, 9880 { 9881 _fgT: "button", 9882 _fgS: "tjy28", 9883 _fgB: 1790697590720, 9884 onClick: t, 9885 className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-30 group cursor-pointer", 9886 "data-fg-tjy28": ":0:/src/app/components/ai/AIHero.tsx:62:11:3531:960:e:button:e", 9887 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy29", _fgB: 1790697590720, className: "relative", "data-fg-tjy29": ":0:/src/app/components/ai/AIHero.tsx:66:13:3713:758:e:div:ete", children: [
9888 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "tjy30", _fgB: 1790697590720, className: "absolute inset-0 bg-[#2B7AE8] blur-2xl opacity-40 group-hover:opacity-60 transition-opacity duration-500 rounded-full", "data-fg-tjy30": ":0:/src/app/components/ai/AIHero.tsx:67:15:3754:137:e:div" }), 9889 /* @__PURE__ */ c( 9890 a, 9891 { 9892 _fgT: m.div, 9893 _fgS: "tjy31", 9894 _fgB: 1790697590720, 9895 className: "relative flex items-center gap-3 px-8 py-5 bg-[#2B7AE8] text-white rounded-full text-lg font-bold hover:bg-[#3D8EF7] transition-all shadow-[0_0_40px_rgba(43,122,232,0.3)] hover:shadow-[0_0_60px_rgba(43,122,232,0.5)] border border-white/10", 9896 whileHover: { scale: 1.05 }, 9897 whileTap: { scale: 0.95 }, 9898 "data-fg-tjy31": ":0:/src/app/components/ai/AIHero.tsx:68:15:3906:546:e:motion.div:te", 9899 children: [ 9900 "Schedule a Meeting",
9901 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "tjy33", _fgB: 1790697590720, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-tjy33": ":0:node_modules/lucide-react:74:17:4341:83:e:ArrowRight::::::s5N" }) 9902 ] 9903 } 9904 ) 9905 ] }) 9906 } 9907 ) 9908 ] 9909 } 9910 ) 9911 ] }) 9912 ] }); 9913} 9914function ff() { 9915 const t = [ 9916 // Frontal Lobe 9917 { x: 75, y: 30 }, 9918 { x: 85, y: 40 }, 9919 { x: 90, y: 55 }, 9920 { x: 80, y: 65 }, 9921 { x: 70, y: 60 }, 9922 { x: 65, y: 45 }, 9923 { x: 60, y: 35 }, 9924 { x: 55, y: 30 }, 9925 // Parietal Lobe (Top) 9926 { x: 50, y: 20 }, 9927 { x: 40, y: 15 }, 9928 { x: 30, y: 18 }, 9929 { x: 20, y: 25 }, 9930 // Occipital Lobe (Back) 9931 { x: 10, y: 40 }, 9932 { x: 15, y: 55 }, 9933 { x: 25, y: 60 }, 9934 // Temporal Lobe 9935 { x: 40, y: 70 }, 9936 { x: 50, y: 75 }, 9937 { x: 60, y: 70 }, 9938 { x: 30, y: 65 }, 9939 // Cerebellum 9940 { x: 15, y: 75 }, 9941 { x: 25, y: 80 }, 9942 { x: 10, y: 70 }, 9943 // Brainstem area 9944 { x: 35, y: 85 }, 9945 { x: 40, y: 90 }, 9946 // Inner fill 9947 { x: 35, y: 40 }, 9948 { x: 45, y: 50 }, 9949 { x: 55, y: 55 }, 9950 { x: 25, y: 45 }, 9951 { x: 65, y: 65 } 9952 ]; 9953 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy34", _fgB: 1790697590720, _fgD: !0, className: "absolute inset-0 w-full h-full pointer-events-none", "data-fg-tjy34": ":0:/src/app/components/ai/AIHero.tsx:106:5:5442:2875:e:div:etxte:1", children: [ 9954 /* @__PURE__ */ c(a, { _fgT: "svg", _fgS: "tjy35", _fgB: 1790697590720, className: "w-full h-full", viewBox: "0 0 100 100", preserveAspectRatio: "none", "data-fg-tjy35": ":0:/src/app/components/ai/AIHero.tsx:107:7:5517:2002:e:svg:xtxtxtxtxtx", children: [ 9955 t.map((e, s) => t.slice(s + 1).map((r, n) => Math.hypot(e.x - r.x, e.y - r.y) < 20 ? /* @__PURE__ */ i( 9956 a, 9957 { 9958 _fgT: m.line, 9959 _fgS: "tjy38", 9960 _fgB: 1790697590720, 9961 x1: `${e.x}%`, 9962 y1: `${e.y}%`, 9963 x2: `${r.x}%`, 9964 y2: `${r.y}%`, 9965 stroke: "rgba(43,122,232,0.15)", 9966 strokeWidth: "0.5", 9967 initial: { opacity: 0 }, 9968 animate: { opacity: [0.1, 0.3, 0.1] }, 9969 transition: { duration: 3 + Math.random() * 2, repeat: 1 / 0, delay: Math.random() * 2 }, 9970 "data-fg-tjy38": ":0:/src/app/components/ai/AIHero.tsx:114:17:5856:505:e:motion.line" 9971 }, 9972 `${s}-${n}` 9973 ) : null)), 9974 t.filter((e, s) => s % 3 === 0).map((e, s) => /* @__PURE__ */ i( 9975 a, 9976 { 9977 _fgT: m.line, 9978 _fgS: "tjy41", 9979 _fgB: 1790697590720, 9980 x1: `${e.x}%`, 9981 y1: `${e.y}%`, 9982 x2: "50%", 9983 y2: "50%", 9984 stroke: "rgba(43,122,232,0.2)", 9985 strokeWidth: "0.8", 9986 strokeDasharray: "4 4", 9987 initial: { strokeDashoffset: 0 }, 9988 animate: { strokeDashoffset: -20 }, 9989 transition: { duration: 4, repeat: 1 / 0, ease: "linear" }, 9990 "data-fg-tjy41": ":0:/src/app/components/ai/AIHero.tsx:134:11:6582:436:e:motion.line" 9991 }, 9992 `center-${s}` 9993 )), 9994 t.map((e, s) => /* @__PURE__ */ i( 9995 a, 9996 { 9997 _fgT: m.circle, 9998 _fgS: "tjy44", 9999 _fgB: 1790697590720, 10000 cx: `${e.x}%`, 10001 cy: `${e.y}%`, 10002 r: "1", 10003 fill: "#2B7AE8", 10004 initial: { opacity: 0.2, scale: 1 }, 10005 animate: { opacity: [0.2, 0.8, 0.2], scale: [1, 1.5, 1] }, 10006 transition: { duration: 2 + Math.random() * 3, repeat: 1 / 0, delay: Math.random() * 2 }, 10007 "data-fg-tjy44": ":0:/src/app/components/ai/AIHero.tsx:151:11:7105:389:e:motion.circle" 10008 }, 10009 `node-${s}` 10010 )) 10011 ] }), 10012 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "tjy46", _fgB: 1790697590720, className: "absolute inset-0", "data-fg-tjy46": ":0:/src/app/components/ai/AIHero.tsx:165:7:7601:705:e:div:etetetetete", children: [
10013 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy47", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "tjy48", _fgB: 1790697590720, size: 16, "data-fg-tjy48": ":0:node_modules/lucide-react:166:29:7664:24:e:Smartphone::::::DHxb" }), label: "RiderAssist AI", top: "15%", left: "50%", delay: 0, "data-fg-tjy47": ":0:/src/app/components/ai/AIHero.tsx:166:9:7644:102:e:FloatingIcon::::::CYpD" }), 10014 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy49", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "tjy50", _fgB: 1790697590720, size: 16, "data-fg-tjy50": ":0:node_modules/lucide-react:167:29:7775:19:e:Phone::::::DmpI" }), label: "CallAssist AI", top: "30%", left: "82%", delay: 0.3, "data-fg-tjy49": ":0:/src/app/components/ai/AIHero.tsx:167:9:7755:98:e:FloatingIcon::::::CYpD" }), 10015 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy51", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: y1, _fgS: "tjy52", _fgB: 1790697590720, size: 16, "data-fg-tjy52": ":0:node_modules/lucide-react:168:29:7882:23:e:BarChart3::::::C2Ja" }), label: "AnalyticsAI", top: "70%", left: "82%", delay: 0.6, "data-fg-tjy51": ":0:/src/app/components/ai/AIHero.tsx:168:9:7862:100:e:FloatingIcon::::::CYpD" }),
10016 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy53", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: w1, _fgS: "tjy54", _fgB: 1790697590720, size: 16, "data-fg-tjy54": ":0:node_modules/lucide-react:169:29:7991:23:e:CircleDot::::::CPqJ" }), label: "DriverAssist AI", top: "85%", left: "50%", delay: 0.9, "data-fg-tjy53": ":0:/src/app/components/ai/AIHero.tsx:169:9:7971:104:e:FloatingIcon::::::CYpD" }), 10017 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy55", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: T1, _fgS: "tjy56", _fgB: 1790697590720, size: 16, "data-fg-tjy56": ":0:node_modules/lucide-react:170:29:8104:27:e:ClipboardList::::::CPfu" }), label: "SurveyAI", top: "70%", left: "18%", delay: 1.2, "data-fg-tjy55": ":0:/src/app/components/ai/AIHero.tsx:170:9:8084:101:e:FloatingIcon::::::CYpD" }), 10018 /* @__PURE__ */ i(a, { _fgT: Y1, _fgS: "tjy57", _fgB: 1790697590720, icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "tjy58", _fgB: 1790697590720, size: 16, "data-fg-tjy58": ":0:node_modules/lucide-react:171:29:8214:17:e:Zap::::::Cp7" }), label: "SmartDispatch AI", top: "30%", left: "18%", delay: 1.5, "data-fg-tjy57": ":0:/src/app/components/ai/AIHero.tsx:171:9:8194:99:e:FloatingIcon::::::CYpD" }) 10019 ] }) 10020 ] }); 10021} 10022function Y1({ icon: t, label: e, top: s, left: r, delay: n }) { 10023 return /* @__PURE__ */ c( 10024 a, 10025 { 10026 _fgT: m.div, 10027 _fgS: "tjy59", 10028 _fgB: 1790697590720, 10029 _fgD: !0, 10030 className: "absolute flex flex-col items-center gap-1 z-20", 10031 style: { top: s, left: r, transform: "translate(-50%, -50%)" }, 10032 initial: { opacity: 0, scale: 0 }, 10033 animate: { opacity: 1, scale: 1, y: [0, -5, 0] }, 10034 transition: { 10035 opacity: { duration: 0.5, delay: n }, 10036 scale: { duration: 0.5, delay: n }, 10037 y: { duration: 4, repeat: 1 / 0, ease: "easeInOut", delay: n } 10038 }, 10039 "data-fg-tjy59": ":0:/src/app/components/ai/AIHero.tsx:179:5:8405:827:e:motion.div:etx:1", 10040 children: [
10041 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "tjy60", _fgB: 1790697590720, className: "w-8 h-8 rounded-full bg-[#0B1B2B] border border-[#2B7AE8]/30 flex items-center justify-center text-[#2B7AE8] shadow-[0_0_15px_rgba(43,122,232,0.3)]", "data-fg-tjy60": ":0:/src/app/components/ai/AIHero.tsx:190:7:8840:193:e:div:x", children: t }), 10042 e && /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "tjy63", _fgB: 1790697590720, className: "text-white text-[7px] sm:text-[8px] font-semibold whitespace-nowrap tracking-wide opacity-75", "data-fg-tjy63": ":0:/src/app/components/ai/AIHero.tsx:194:9:9060:145:e:span:x", children: e }) 10043 ] 10044 } 10045 ); 10046} 10047const $a = [ 10048 { icon: Fe, label: "RiderAssist AI", desc: "Rider interaction automation across all channels", anchor: "#riderassist", top: "15%", left: "50%", delay: 0 }, 10049 { icon: Y, label: "CallAssist AI", desc: "The intelligent front door for rider support", anchor: "#callassist", top: "34%", left: "83%", delay: 0.3 }, 10050 { icon: y1, label: "AnalyticsAI", desc: "Decision-grade operational and tactical analytics", anchor: "#analyticsai", top: "72%", left: "83%", delay: 0.6 }, 10051 { icon: w1, label: "DriverAssist AI", desc: "Hands-free driver intelligence for every shift", anchor: "#driverassist", top: "88%", left: "50%", delay: 0.9 }, 10052 { icon: T1, label: "SurveyAI", desc: "Automated feedback collection at scale", anchor: "#surveyai", top: "72%", left: "17%", delay: 1.2 }, 10053 { icon: Te, label: "SmartDispatch AI", desc: "Fleet orchestration at operational scale", anchor: "#smartdispatch", top: "34%", left: "17%", delay: 1.5 } 10054], N2 = [ 10055 // Hexagon icon positions (must match ICON_NODES exactly) 10056 { x: 50, y: 15 }, 10057 { x: 83, y: 34 }, 10058 { x: 83, y: 72 }, 10059 { x: 50, y: 88 }, 10060 { x: 17, y: 72 }, 10061 { x: 17, y: 34 }, 10062 // Spread broadly across the area 10063 { x: 8, y: 20 }, 10064 { x: 15, y: 35 }, 10065 { x: 12, y: 55 }, 10066 { x: 20, y: 70 }, 10067 { x: 25, y: 15 }, 10068 { x: 30, y: 30 }, 10069 { x: 28, y: 50 }, 10070 { x: 35, y: 65 }, 10071 { x: 32, y: 85 }, 10072 { x: 40, y: 20 }, 10073 { x: 42, y: 40 }, 10074 { x: 45, y: 55 }, 10075 { x: 48, y: 75 }, 10076 { x: 50, y: 30 }, 10077 { x: 55, y: 15 }, 10078 { x: 52, y: 50 }, 10079 { x: 58, y: 68 }, 10080 { x: 55, y: 85 }, 10081 { x: 60, y: 25 }, 10082 { x: 65, y: 42 }, 10083 { x: 62, y: 60 }, 10084 { x: 68, y: 75 }, 10085 { x: 70, y: 20 }, 10086 { x: 75, y: 38 }, 10087 { x: 72, y: 55 }, 10088 { x: 78, y: 70 }, 10089 { x: 80, y: 30 }, 10090 { x: 85, y: 50 }, 10091 { x: 82, y: 65 }, 10092 { x: 88, y: 40 }, 10093 { x: 90, y: 22 }, 10094 { x: 92, y: 60 }, 10095 { x: 18, y: 45 }, 10096 { x: 38, y: 35 }, 10097 { x: 47, y: 65 }, 10098 { x: 63, y: 35 }, 10099 { x: 73, y: 48 }, 10100 { x: 83, y: 78 }, 10101 { x: 22, y: 25 }, 10102 { x: 87, y: 15 }, 10103 { x: 10, y: 75 }, 10104 { x: 95, y: 50 }, 10105 { x: 43, y: 10 }, 10106 { x: 57, y: 90 }, 10107 { x: 33, y: 45 }, 10108 { x: 67, y: 55 }, 10109 { x: 77, y: 85 }, 10110 { x: 15, y: 15 } 10111], pf = 18; 10112function Mf() { 10113 const [t, e] = j(null), s = (r) => { 10114 const n = document.querySelector(r); 10115 n && n.scrollIntoView({ behavior: "smooth" }); 10116 }; 10117 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "basg0", _fgB: 1790697590777, _fgD: !0, className: "relative bg-[#0B1A2E] overflow-hidden py-20 md:py-28", "data-fg-basg0": ":0:/src/app/components/ai/AIEcosystem.tsx:48:5:2820:10542:e:section:xtetxtetxtetxte:1", children: [ 10118 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "basg2", _fgB: 1790697590777, className: "absolute inset-0 z-0", "data-fg-basg2": ":0:/src/app/components/ai/AIEcosystem.tsx:50:7:2952:700:e:div:etxtete", children: [
10119 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg3", _fgB: 1790697590777, className: "absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.03)_1px,transparent_1px)] bg-[size:64px_64px] [mask-image:radial-gradient(ellipse_at_center,black_40%,transparent_80%)]", "data-fg-basg3": ":0:/src/app/components/ai/AIEcosystem.tsx:51:9:2999:261:e:div" }), 10120 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg5", _fgB: 1790697590777, className: "absolute -top-[20%] -right-[10%] w-[900px] h-[900px] bg-[#2B7AE8] opacity-[0.06] blur-[120px] rounded-full pointer-events-none mix-blend-screen", "data-fg-basg5": ":0:/src/app/components/ai/AIEcosystem.tsx:53:9:3302:163:e:div" }), 10121 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg6", _fgB: 1790697590777, className: "absolute -bottom-[20%] -left-[10%] w-[600px] h-[600px] bg-[#EFBB0F] opacity-[0.03] blur-[100px] rounded-full pointer-events-none mix-blend-screen", "data-fg-basg6": ":0:/src/app/components/ai/AIEcosystem.tsx:54:9:3474:165:e:div" }) 10122 ] }), 10123 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg8", _fgB: 1790697590777, className: "relative z-10 max-w-4xl mx-auto px-6 text-center mb-4 md:mb-8", "data-fg-basg8": ":0:/src/app/components/ai/AIEcosystem.tsx:58:7:3689:1035:e:div:e", children: /* @__PURE__ */ c( 10124 a, 10125 { 10126 _fgT: m.div, 10127 _fgS: "basg9", 10128 _fgB: 1790697590777, 10129 initial: { opacity: 0, y: 20 }, 10130 whileInView: { opacity: 1, y: 0 }, 10131 viewport: { once: !0 }, 10132 transition: { duration: 0.6 }, 10133 "data-fg-basg9": ":0:/src/app/components/ai/AIEcosystem.tsx:59:9:3777:934:e:motion.div:etete", 10134 children: [
10135 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg10", _fgB: 1790697590777, className: "text-[#3B82F6] text-xs font-bold tracking-[3px] uppercase mb-4 block", "data-fg-basg10": ":0:/src/app/components/ai/AIEcosystem.tsx:65:11:3973:141:e:span:t", children: "Integrated Intelligence" }), 10136 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "basg12", _fgB: 1790697590777, className: "font-['DM_Serif_Display'] text-[28px] sm:text-[36px] md:text-[44px] leading-[1.15] text-white mb-4", "data-fg-basg12": ":0:/src/app/components/ai/AIEcosystem.tsx:68:11:4125:265:e:h2:tste", children: [ 10137 "Our AI Ecosystem for Demand-Responsive", 10138 " ", 10139 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg15", _fgB: 1790697590777, className: "text-[#EFBB0F] italic", "data-fg-basg15": ":0:/src/app/components/ai/AIEcosystem.tsx:70:13:4309:65:e:span:t", children: "Transit Operations" }) 10140 ] }), 10141 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "basg17", _fgB: 1790697590777, className: "text-[15px] md:text-[17px] text-[#6B8BAD] max-w-[580px] mx-auto leading-relaxed", "data-fg-basg17": ":0:/src/app/components/ai/AIEcosystem.tsx:72:11:4401:288:e:p:t", children: "Every AI agent feeds into and learns from a single transit brain â your dispatching platform at the center. Hover any agent to learn more. Click to explore it fully." }) 10142 ] 10143 } 10144 ) }), 10145 /* @__PURE__ */ c( 10146 a, 10147 { 10148 _fgT: m.div, 10149 _fgS: "basg20", 10150 _fgB: 1790697590777, 10151 initial: { opacity: 0, scale: 0.9 }, 10152 whileInView: { opacity: 1, scale: 1 }, 10153 viewport: { once: !0 }, 10154 transition: { duration: 0.8, delay: 0.2 }, 10155 className: "relative z-10 max-w-[900px] mx-auto px-6 hidden md:flex items-center justify-center", 10156 style: { height: "380px" }, 10157 "data-fg-basg20": ":0:/src/app/components/ai/AIEcosystem.tsx:79:7:4769:7029:e:motion.div:xtetxte", 10158 children: [
10159 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "basg22", _fgB: 1790697590777, className: "absolute inset-0 w-full h-full pointer-events-none", "data-fg-basg22": ":0:/src/app/components/ai/AIEcosystem.tsx:88:9:5176:5863:e:div:etxte", children: [ 10160 /* @__PURE__ */ c(a, { _fgT: "svg", _fgS: "basg23", _fgB: 1790697590777, className: "w-full h-full", viewBox: "0 0 100 100", preserveAspectRatio: "none", "data-fg-basg23": ":0:/src/app/components/ai/AIEcosystem.tsx:89:11:5255:2441:e:svg:xtxtxtxtxtx", children: [ 10161 N2.map( 10162 (r, n) => N2.slice(n + 1).map((o, L) => Math.hypot(r.x - o.x, r.y - o.y) < pf ? /* @__PURE__ */ i( 10163 a, 10164 { 10165 _fgT: m.line, 10166 _fgS: "basg26", 10167 _fgB: 1790697590777, 10168 x1: `${r.x}%`, 10169 y1: `${r.y}%`, 10170 x2: `${o.x}%`, 10171 y2: `${o.y}%`, 10172 stroke: "rgba(43,122,232,0.15)", 10173 strokeWidth: "0.5", 10174 initial: { opacity: 0 }, 10175 animate: { opacity: [0.1, 0.3, 0.1] }, 10176 transition: { 10177 duration: 3 + n % 3, 10178 repeat: 1 / 0, 10179 delay: (n + L) % 5 * 0.4 10180 }, 10181 "data-fg-basg26": ":0:/src/app/components/ai/AIEcosystem.tsx:96:21:5682:638:e:motion.line" 10182 }, 10183 `net-${n}-${L}` 10184 ) : null) 10185 ), 10186 N2.map((r, n) => /* @__PURE__ */ i( 10187 a, 10188 { 10189 _fgT: m.line, 10190 _fgS: "basg29", 10191 _fgB: 1790697590777, 10192 x1: `${r.x}%`, 10193 y1: `${r.y}%`, 10194 x2: "50%", 10195 y2: "50%", 10196 stroke: "rgba(43,122,232,0.12)", 10197 strokeWidth: "0.5", 10198 strokeDasharray: "4 4", 10199 initial: { strokeDashoffset: 0 }, 10200 animate: { strokeDashoffset: -20 }, 10201 transition: { duration: 3 + n % 3, repeat: 1 / 0, ease: "linear" }, 10202 "data-fg-basg29": ":0:/src/app/components/ai/AIEcosystem.tsx:120:15:6551:495:e:motion.line" 10203 }, 10204 `center-${n}` 10205 )), 10206 N2.map((r, n) => /* @__PURE__ */ i( 10207 a, 10208 { 10209 _fgT: m.circle, 10210 _fgS: "basg32", 10211 _fgB: 1790697590777, 10212 cx: `${r.x}%`, 10213 cy: `${r.y}%`, 10214 r: "1", 10215 fill: "#2B7AE8", 10216 initial: { opacity: 0.2, scale: 1 }, 10217 animate: { opacity: [0.2, 0.8, 0.2], scale: [1, 1.5, 1] }, 10218 transition: { 10219 duration: 2 + n % 4, 10220 repeat: 1 / 0, 10221 delay: n % 6 * 0.4 10222 }, 10223 "data-fg-basg32": ":0:/src/app/components/ai/AIEcosystem.tsx:137:15:7181:482:e:motion.circle" 10224 }, 10225 `node-${n}` 10226 )) 10227 ] }),
10228 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg34", _fgB: 1790697590777, className: "absolute inset-0", "data-fg-basg34": ":0:/src/app/components/ai/AIEcosystem.tsx:155:11:7797:3227:e:div:x", children: $a.map((r, n) => { 10229 const o = r.icon, L = t === n, l = parseFloat(r.top) > 50; 10230 return /* @__PURE__ */ c( 10231 a, 10232 { 10233 _fgT: m.div, 10234 _fgS: "basg36", 10235 _fgB: 1790697590777, 10236 className: "absolute flex flex-col items-center z-20 -translate-x-1/2 -translate-y-1/2 cursor-pointer", 10237 style: { top: r.top, left: r.left }, 10238 initial: { opacity: 0, scale: 0 }, 10239 animate: { opacity: 1, scale: L ? 1.1 : 1, y: [0, -5, 0] }, 10240 transition: { 10241 opacity: { duration: 0.5, delay: r.delay }, 10242 scale: { duration: 0.2, ease: "easeOut" }, 10243 y: { duration: 4, repeat: 1 / 0, ease: "easeInOut", delay: r.delay } 10244 }, 10245 onMouseEnter: () => e(n), 10246 onMouseLeave: () => e(null), 10247 onClick: () => s(r.anchor), 10248 "data-fg-basg36": ":0:/src/app/components/ai/AIEcosystem.tsx:164:17:8178:2796:e:motion.div:xtetxtetxte", 10249 children: [
10250 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "basg38", _fgB: 1790697590777, "data-fg-basg38": ":0:node_modules/motion:180:19:9074:1110:e:AnimatePresence:x:::::DAs4", children: L && /* @__PURE__ */ c( 10251 a, 10252 { 10253 _fgT: m.div, 10254 _fgS: "basg40", 10255 _fgB: 1790697590777, 10256 initial: { opacity: 0, y: l ? 6 : -6 }, 10257 animate: { opacity: 1, y: 0 }, 10258 exit: { opacity: 0, y: l ? 6 : -6 }, 10259 transition: { duration: 0.15, ease: "easeOut" }, 10260 className: `absolute ${l ? "bottom-full mb-3" : "top-full mt-3"} bg-[#111C2D] border border-[rgba(45,107,228,0.4)] rounded-xl px-4 py-3.5 shadow-[0_8px_24px_rgba(0,0,0,0.4)] max-w-[220px] z-50 pointer-events-none`, 10261 "data-fg-basg40": ":0:/src/app/components/ai/AIEcosystem.tsx:182:23:9150:974:e:motion.div:ete", 10262 children: [
10263 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "basg41", _fgB: 1790697590777, className: "flex items-center gap-2 mb-1.5", "data-fg-basg41": ":0:/src/app/components/ai/AIEcosystem.tsx:189:25:9735:257:e:div:ete", children: [ 10264 /* @__PURE__ */ i(a, { _fgT: o, _fgS: "basg42", _fgB: 1790697590777, size: 16, className: "text-[#EFBB0F] shrink-0", "data-fg-basg42": ":0:/src/app/components/ai/AIEcosystem.tsx:190:27:9810:54:e:Icon" }), 10265 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg43", _fgB: 1790697590777, className: "text-white text-[14px] font-bold", "data-fg-basg43": ":0:/src/app/components/ai/AIEcosystem.tsx:191:27:9891:70:e:span:x", children: r.label }) 10266 ] }), 10267 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "basg45", _fgB: 1790697590777, className: "text-[#6B8BAD] text-[12px] leading-[1.5]", "data-fg-basg45": ":0:/src/app/components/ai/AIEcosystem.tsx:193:25:10017:71:e:p:x", children: r.desc }) 10268 ] 10269 } 10270 ) }),
10271 /* @__PURE__ */ i( 10272 a, 10273 { 10274 _fgT: "div", 10275 _fgS: "basg48", 10276 _fgB: 1790697590777, 10277 className: `w-18 h-18 rounded-full bg-[#0B1A2E] border flex items-center justify-center transition-shadow duration-200 ${L ? "border-[#2B7AE8]/70 shadow-[0_0_28px_rgba(43,122,232,0.6)]" : "border-[#2B7AE8]/30 shadow-[0_0_20px_rgba(43,122,232,0.4)]"}`, 10278 "data-fg-basg48": ":0:/src/app/components/ai/AIEcosystem.tsx:199:19:10242:487:e:div:e", 10279 children: /* @__PURE__ */ i(a, { _fgT: o, _fgS: "basg49", _fgB: 1790697590777, size: 30, className: "text-[#2B7AE8]", "data-fg-basg49": ":0:/src/app/components/ai/AIEcosystem.tsx:206:21:10659:45:e:Icon" }) 10280 } 10281 ), 10282 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg51", _fgB: 1790697590777, className: "text-white text-[9px] font-semibold whitespace-nowrap tracking-wide mt-1.5 opacity-80", "data-fg-basg51": ":0:/src/app/components/ai/AIEcosystem.tsx:210:19:10781:163:e:span:x", children: r.label }) 10283 ] 10284 }, 10285 `float-${n}` 10286 ); 10287 }) }) 10288 ] }),
10289 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg54", _fgB: 1790697590777, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-30", "data-fg-basg54": ":0:/src/app/components/ai/AIEcosystem.tsx:220:9:11103:675:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "basg55", _fgB: 1790697590777, className: "relative", "data-fg-basg55": ":0:/src/app/components/ai/AIEcosystem.tsx:221:11:11196:567:e:div:ete", children: [ 10290 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg56", _fgB: 1790697590777, className: "absolute inset-0 bg-[#2B7AE8] blur-2xl opacity-40 rounded-full", "data-fg-basg56": ":0:/src/app/components/ai/AIEcosystem.tsx:222:13:11235:82:e:div" }), 10291 /* @__PURE__ */ i( 10292 a, 10293 { 10294 _fgT: m.div, 10295 _fgS: "basg57", 10296 _fgB: 1790697590777, 10297 initial: { opacity: 0, scale: 0.9 }, 10298 whileInView: { opacity: 1, scale: 1 }, 10299 viewport: { once: !0 }, 10300 className: "relative px-8 py-5 bg-[#2B7AE8] text-white rounded-full text-lg font-bold shadow-[0_0_40px_rgba(43,122,232,0.3)] border border-white/10 whitespace-nowrap select-none", 10301 "data-fg-basg57": ":0:/src/app/components/ai/AIEcosystem.tsx:223:13:11330:416:e:motion.div:t", 10302 children: "Transit System" 10303 } 10304 ) 10305 ] }) }) 10306 ] 10307 } 10308 ), 10309 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "basg60", _fgB: 1790697590777, className: "md:hidden relative z-10 mt-8 px-6 max-w-md mx-auto", "data-fg-basg60": ":0:/src/app/components/ai/AIEcosystem.tsx:236:7:11836:1511:e:div:ete", children: [
10310 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg61", _fgB: 1790697590777, className: "flex justify-center mb-5", "data-fg-basg61": ":0:/src/app/components/ai/AIEcosystem.tsx:237:9:11913:262:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg62", _fgB: 1790697590777, className: "px-8 py-4 bg-[#2B7AE8] text-white rounded-full text-base font-semibold shadow-[0_0_30px_rgba(43,122,232,0.3)] border border-white/10", "data-fg-basg62": ":0:/src/app/components/ai/AIEcosystem.tsx:238:11:11966:194:e:div:t", children: "Transit System" }) }), 10311 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg64", _fgB: 1790697590777, className: "grid grid-cols-2 gap-3", "data-fg-basg64": ":0:/src/app/components/ai/AIEcosystem.tsx:242:9:12184:1150:e:div:x", children: $a.map((r, n) => { 10312 const o = r.icon; 10313 return /* @__PURE__ */ c( 10314 a, 10315 { 10316 _fgT: m.button, 10317 _fgS: "basg66", 10318 _fgB: 1790697590777, 10319 initial: { opacity: 0, y: 15 }, 10320 whileInView: { opacity: 1, y: 0 }, 10321 viewport: { once: !0 }, 10322 transition: { delay: n * 0.06 }, 10323 onClick: () => s(r.anchor), 10324 className: "bg-[#0F2340]/70 border border-[#2B7AE8]/20 rounded-xl p-3.5 flex flex-col items-center gap-2 cursor-pointer hover:border-[#2B7AE8]/50 transition-colors", 10325 "data-fg-basg66": ":0:/src/app/components/ai/AIEcosystem.tsx:246:15:12337:953:e:motion.button:etete", 10326 children: [
10327 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "basg67", _fgB: 1790697590777, className: "w-9 h-9 rounded-full bg-[#0B1A2E] border border-[#2B7AE8]/40 flex items-center justify-center", "data-fg-basg67": ":0:/src/app/components/ai/AIEcosystem.tsx:255:17:12851:198:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: o, _fgS: "basg68", _fgB: 1790697590777, size: 14, className: "text-[#2B7AE8]", "data-fg-basg68": ":0:/src/app/components/ai/AIEcosystem.tsx:256:19:12981:45:e:Icon" }) }), 10328 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg69", _fgB: 1790697590777, className: "text-white text-[10px] font-semibold tracking-wide", "data-fg-basg69": ":0:/src/app/components/ai/AIEcosystem.tsx:258:17:13066:88:e:span:x", children: r.label }), 10329 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "basg71", _fgB: 1790697590777, className: "text-[#6B8BAD] text-[9px] leading-tight text-center", "data-fg-basg71": ":0:/src/app/components/ai/AIEcosystem.tsx:259:17:13171:88:e:span:x", children: r.desc }) 10330 ] 10331 }, 10332 `mobile-${n}` 10333 ); 10334 }) }) 10335 ] }) 10336 ] }); 10337} 10338function uf() { 10339 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cxf0", _fgB: 1790697590757, _fgD: !0, className: "py-24 px-6 max-w-[1280px] mx-auto bg-white font-['DM_Sans']", "data-fg-cxf0": ":0:/src/app/components/ai/AIProblem.tsx:3:5:45:1646:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cxf1", _fgB: 1790697590757, className: "grid grid-cols-1 lg:grid-cols-2 gap-20 items-start", "data-fg-cxf1": ":0:/src/app/components/ai/AIProblem.tsx:4:7:133:1543:e:div:xtetxte", children: [ 10340 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cxf3", _fgB: 1790697590757, className: "lg:sticky lg:top-24", "data-fg-cxf3": ":0:/src/app/components/ai/AIProblem.tsx:6:9:242:434:e:div:ete", children: [
10341 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cxf4", _fgB: 1790697590757, className: "text-[#EFBB0F] text-xs font-bold tracking-[2.5px] uppercase mb-4", "data-fg-cxf4": ":0:/src/app/components/ai/AIProblem.tsx:7:11:290:99:e:div:t", children: "THE PROBLEM" }), 10342 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cxf6", _fgB: 1790697590757, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-[#0B1B2B]", "data-fg-cxf6": ":0:/src/app/components/ai/AIProblem.tsx:8:11:400:261:e:h2:te", children: [ 10343 "Transit operations still run on ", 10344 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cxf8", _fgB: 1790697590757, className: "text-[#EFBB0F] italic", "data-fg-cxf8": ":0:/src/app/components/ai/AIProblem.tsx:9:45:558:87:e:span:t", children: "manual decisions and disconnected tools." }) 10345 ] }) 10346 ] }), 10347 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cxf11", _fgB: 1790697590757, className: "flex flex-col gap-6", "data-fg-cxf11": ":0:/src/app/components/ai/AIProblem.tsx:14:9:708:955:e:div:etete", children: [
10348 /* @__PURE__ */ i( 10349 a, 10350 { 10351 _fgT: g4, 10352 _fgS: "cxf12", 10353 _fgB: 1790697590757, 10354 title: '"Riders call to ask where their ride is."', 10355 desc: `Dispatchers field the same question hundreds of times a day while managing live operations. Every "where's my ride?" call is time pulled away from real exceptions and service decisions.`, 10356 "data-fg-cxf12": ":0:/src/app/components/ai/AIProblem.tsx:15:11:756:297:e:ProblemCard::::::ts6" 10357 } 10358 ), 10359 /* @__PURE__ */ i( 10360 a, 10361 { 10362 _fgT: g4, 10363 _fgS: "cxf13", 10364 _fgB: 1790697590757, 10365 title: '"Our drivers miss steps. Every shift."', 10366 desc: "New and experienced drivers alike skip timestamps, miss notes, and create gaps in the operational record â not from negligence, but because the tools don't support them in the moment.", 10367 "data-fg-cxf13": ":0:/src/app/components/ai/AIProblem.tsx:19:11:1064:290:e:ProblemCard::::::ts6" 10368 } 10369 ),
10370 /* @__PURE__ */ i( 10371 a, 10372 { 10373 _fgT: g4, 10374 _fgS: "cxf14", 10375 _fgB: 1790697590757, 10376 title: `"We have the data. We just can't act on it."`, 10377 desc: "Survey responses pile up. Dashboards require an analyst. Service quality drifts before anyone notices. By the time you see the pattern, it's already affected your riders.", 10378 "data-fg-cxf14": ":0:/src/app/components/ai/AIProblem.tsx:23:11:1365:283:e:ProblemCard::::::ts6" 10379 } 10380 ) 10381 ] }) 10382 ] }) }); 10383} 10384function g4({ title: t, desc: e }) { 10385 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cxf15", _fgB: 1790697590757, _fgD: !0, className: "p-7 pl-8 border-l-[3px] border-[#EFBB0F] bg-[#F7F9FC] rounded-r-xl", "data-fg-cxf15": ":0:/src/app/components/ai/AIProblem.tsx:35:5:1788:242:e:div:ete:1", children: [ 10386 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cxf16", _fgB: 1790697590757, className: "text-lg font-bold text-[#0B1B2B] mb-2", "data-fg-cxf16": ":0:/src/app/components/ai/AIProblem.tsx:36:7:1879:66:e:h3:x", children: t }), 10387 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cxf18", _fgB: 1790697590757, className: "text-[15px] leading-[1.65] text-[#5A6A80]", "data-fg-cxf18": ":0:/src/app/components/ai/AIProblem.tsx:37:7:1952:67:e:p:x", children: e }) 10388 ] }); 10389} 10390const hf = [ 10391 { 10392 num: "01", 10393 id: "riderassist", 10394 eyebrow: "RIDER AI", 10395 title: "Rider Interaction Automation", 10396 description: "Lives in the rider-facing app as an always-on trip companion. Manages booking, trip updates, eligibility, and notifications in real time â reducing call volume and keeping riders informed without staff intervention.", 10397 bullets: [ 10398 { bold: "In-app trip management", text: "â book, modify, cancel, and confirm trips in real time" }, 10399 { bold: "Proactive trip updates", text: "â ETA changes, early/late arrivals, and pickup readiness alerts automatically pushed to riders" }, 10400 { bold: "Smart escalation only when needed", text: ", with full context already captured so staff pick up mid-conversation" } 10401 ], 10402 cta: "Explore RiderAssist AI", 10403 href: "/ai/voice", 10404 icon: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "ce1m0", _fgB: 1790697590735, size: 18, "data-fg-ce1m0": ":0:node_modules/lucide-react:25:11:1207:24:e:Smartphone::::::DHxb" }), 10405 bg: "bg-white" 10406 }, 10407 { 10408 num: "02", 10409 id: "callassist", 10410 eyebrow: "CALL AI", 10411 title: "Intelligent Front Door for Rider Support", 10412 description: "Automates call handling for booking, trip changes, verification, and general inquiries. Transfers to staff only when needed â with full context and a warm handoff summary so riders never have to repeat themselves.", 10413 bullets: [ 10414 { bold: "Voice-first call handling", text: "with natural conversation across languages" }, 10415 { bold: "Trip help and requests", text: "â book, modify, cancel, verify, and check status without hold time" }, 10416 { bold: "Warm handoff to staff", text: "with interaction history, rider intent, and next-step guidance already on screen" } 10417 ], 10418 cta: "Explore CallAssist AI", 10419 href: "/ai/voice", 10420 icon: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "ce1m1", _fgB: 1790697590735, size: 18, "data-fg-ce1m1": ":0:node_modules/lucide-react:42:11:2053:19:e:Phone::::::DmpI" }), 10421 bg: "bg-[#F7F8FA]" 10422 }, 10423 { 10424 num: "03", 10425 id: "analyticsai", 10426 eyebrow: "ANALYTICS AI", 10427 title: "Decision-Grade Operational Intelligence", 10428 description: "Unifies operational data from vehicles, riders, and apps. Identifies patterns, explains drivers of performance, and generates actionable reports for operational and tactical decisions â in minutes, not days.", 10429 bullets: [ 10430 { bold: "Unified intelligence layer", text: "across all operational data sources â vehicles, dispatch, rider app, and call center" }, 10431 { bold: "Before/after and period comparisons", text: "â week-over-week, quarter-over-quarter, and change impact analysis" }, 10432 { bold: "Guided reports with recommendations", text: "for staffing, fleet sizing, and shift structure" } 10433 ], 10434 cta: "Explore AnalyticsAI", 10435 href: "/ai/analytics", 10436 icon: /* @__PURE__ */ i(a, { _fgT: y1, _fgS: "ce1m2", _fgB: 1790697590735, size: 18, "data-fg-ce1m2": ":0:node_modules/lucide-react:59:11:2936:23:e:BarChart3::::::C2Ja" }), 10437 bg: "bg-white" 10438 }, 10439 { 10440 num: "04", 10441 id: "driverassist", 10442 eyebrow: "DRIVER AI", 10443 title: "Hands-Free Driver Intelligence", 10444 description: "Operates on every driver device, reducing admin work and guiding real-time decisions. Provides voice-first support, monitors key events, and coordinates with dispatch â so drivers stay focused on the road, not the screen.", 10445 bullets: [ 10446 { bold: "Voice-first driver support", text: "â questions, guidance, and task completion with eyes on the road" }, 10447 { bold: "Automatic workflow capture", text: "â timestamps, notes, and exceptions logged with minimal taps" }, 10448 { bold: "Field-to-ops escalation", text: "â breakdowns, delays, and no-shows routed to dispatch with full context" } 10449 ], 10450 cta: "Explore DriverAssist AI", 10451 href: "/ai/driver", 10452 icon: /* @__PURE__ */ i(a, { _fgT: w1, _fgS: "ce1m3", _fgB: 1790697590735, size: 18, "data-fg-ce1m3": ":0:node_modules/lucide-react:76:11:3800:23:e:CircleDot::::::CPqJ" }), 10453 bg: "bg-[#F7F8FA]" 10454 }, 10455 { 10456 num: "05", 10457 id: "surveyai", 10458 eyebrow: "SURVEY AI", 10459 title: "Automated Feedback Collection at Scale", 10460 description: "Automates feedback collection across voice and web after key trip events. Uses trip and rider context to ask targeted questions and collect structured feedback â without manual review or spreadsheet wrangling.", 10461 bullets: [
10462 { bold: "Event-triggered outreach", text: "â automatically reaches out after service recoveries, first rides, and exceptions" }, 10463 { bold: "Adaptive questioning", text: "based on trip context and rider history" }, 10464 { bold: "Automated theme extraction and sentiment analysis", text: "across all responses so nothing urgent gets missed" } 10465 ], 10466 cta: "Explore SurveyAI", 10467 href: "/ai/feedback", 10468 icon: /* @__PURE__ */ i(a, { _fgT: T1, _fgS: "ce1m4", _fgB: 1790697590735, size: 18, "data-fg-ce1m4": ":0:node_modules/lucide-react:93:11:4648:27:e:ClipboardList::::::CPfu" }), 10469 bg: "bg-white" 10470 }, 10471 { 10472 num: "06", 10473 id: "smartdispatch", 10474 eyebrow: "DISPATCH AI", 10475 title: "Fleet Orchestration at Operational Scale", 10476 description: "Manages live operations in real time â continuously balancing service quality, capacity, and disruptions. Executes policy-compliant recovery actions with full traceability and explainable operational reasoning.", 10477 bullets: [ 10478 { bold: "Continuous assignment + reassignment", text: "as conditions change â delays, vehicle down, or demand spikes" }, 10479 { bold: "Service recovery automation", text: "â resequencing, rebalancing, and rerouting with policy guardrails" }, 10480 { bold: "Explainable decisioning", text: "â trade-offs, expected impact, and audit-ready logs for every action" } 10481 ], 10482 cta: "Explore SmartDispatch AI", 10483 href: "/ai/dispatch", 10484 icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "ce1m5", _fgB: 1790697590735, size: 18, "data-fg-ce1m5": ":0:node_modules/lucide-react:110:11:5531:17:e:Zap::::::Cp7" }), 10485 bg: "bg-[#F7F8FA]" 10486 } 10487]; 10488function mf() { 10489 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m6", _fgB: 1790697590735, _fgD: !0, className: "font-['DM_Sans']", "data-fg-ce1m6": ":0:/src/app/components/ai/AIProducts.tsx:117:5:5629:2799:e:div:x:1", children: hf.map((t, e) => { 10490 const s = e % 2 === 1; 10491 return /* @__PURE__ */ i( 10492 a, 10493 { 10494 _fgT: "section", 10495 _fgS: "ce1m8", 10496 _fgB: 1790697590735, 10497 id: t.id, 10498 className: `${t.bg} py-16 md:py-24 px-6`, 10499 "data-fg-ce1m8": ":0:/src/app/components/ai/AIProducts.tsx:121:11:5761:2635:e:section:e", 10500 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m9", _fgB: 1790697590735, className: "max-w-[1280px] mx-auto", "data-fg-ce1m9": ":0:/src/app/components/ai/AIProducts.tsx:126:13:5906:2469:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m10", _fgB: 1790697590735, className: "grid grid-cols-1 lg:grid-cols-2 gap-10 xl:gap-[60px] items-center", "data-fg-ce1m10": ":0:/src/app/components/ai/AIProducts.tsx:127:15:5961:2395:e:div:xtetxte", children: [
10501 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m12", _fgB: 1790697590735, className: `relative ${s ? "lg:order-2" : "lg:order-1"}`, "data-fg-ce1m12": ":0:/src/app/components/ai/AIProducts.tsx:129:17:6095:2135:e:div:ete", children: [ 10502 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m13", _fgB: 1790697590735, className: "absolute -top-8 -left-2 text-[80px] sm:text-[100px] md:text-[140px] font-bold leading-none text-[rgba(0,0,0,0.04)] pointer-events-none select-none font-['DM_Sans']", "data-fg-ce1m13": ":0:/src/app/components/ai/AIProducts.tsx:130:19:6182:240:e:span:x", children: t.num }), 10503 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m15", _fgB: 1790697590735, className: "relative", "data-fg-ce1m15": ":0:/src/app/components/ai/AIProducts.tsx:133:19:6441:1766:e:div:etetetetx", children: [ 10504 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m16", _fgB: 1790697590735, className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-[#FEF0E6] mb-5", "data-fg-ce1m16": ":0:/src/app/components/ai/AIProducts.tsx:134:21:6488:291:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m17", _fgB: 1790697590735, className: "text-[#E87722] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-ce1m17": ":0:/src/app/components/ai/AIProducts.tsx:135:23:6602:150:e:span:x", children: t.eyebrow }) }),
10505 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "ce1m19", _fgB: 1790697590735, className: "font-['DM_Serif_Display'] text-[28px] sm:text-[32px] md:text-[36px] leading-[1.15] text-[#0D1B2E] mb-4", "data-fg-ce1m19": ":0:/src/app/components/ai/AIProducts.tsx:139:21:6800:181:e:h3:x", children: t.title }), 10506 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m21", _fgB: 1790697590735, className: "text-[16px] leading-[1.7] text-[#6B7280] mb-8 max-w-[440px]", "data-fg-ce1m21": ":0:/src/app/components/ai/AIProducts.tsx:142:21:7002:142:e:p:x", children: t.description }), 10507 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "ce1m23", _fgB: 1790697590735, className: "flex flex-col gap-4 mb-8", "data-fg-ce1m23": ":0:/src/app/components/ai/AIProducts.tsx:145:21:7165:603:e:ul:x", children: t.bullets.map((r, n) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "ce1m25", _fgB: 1790697590735, className: "flex gap-3 items-start text-[15px] leading-[1.6] text-[#6B7280]", "data-fg-ce1m25": ":0:/src/app/components/ai/AIProducts.tsx:147:25:7290:426:e:li:ete", children: [
10508 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m26", _fgB: 1790697590735, className: "w-1.5 h-1.5 rounded-full bg-[#E87722] mt-2.5 shrink-0", "data-fg-ce1m26": ":0:/src/app/components/ai/AIProducts.tsx:148:27:7406:74:e:span" }), 10509 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "ce1m27", _fgB: 1790697590735, "data-fg-ce1m27": ":0:/src/app/components/ai/AIProducts.tsx:149:27:7507:179:e:span:estx", children: [ 10510 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m28", _fgB: 1790697590735, className: "font-bold text-[#0D1B2E]", "data-fg-ce1m28": ":0:/src/app/components/ai/AIProducts.tsx:150:29:7542:63:e:span:x", children: r.bold }), 10511 " ", 10512 r.text 10513 ] }) 10514 ] }, n)) }), 10515 t.id === "riderassist" && /* @__PURE__ */ c(a, { _fgT: E, _fgS: "ce1m33", _fgB: 1790697590735, href: t.href, className: "inline-flex items-center gap-2 text-[#E87722] font-semibold text-[15px] group hover:gap-3 transition-all", "data-fg-ce1m33": ":0:node_modules/wouter:157:23:7844:315:e:Link:xte:::::C4yE", children: [ 10516 t.cta,
10517 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "ce1m35", _fgB: 1790697590735, size: 16, className: "group-hover:translate-x-1 transition-transform", "data-fg-ce1m35": ":0:node_modules/lucide-react:159:25:8046:83:e:ArrowRight::::::s5N" }) 10518 ] }) 10519 ] }) 10520 ] }), 10521 /* @__PURE__ */ i(a, { _fgT: Sf, _fgS: "ce1m37", _fgB: 1790697590735, isEven: s, index: e, "data-fg-ce1m37": ":0:/src/app/components/ai/AIProducts.tsx:166:17:8284:51:e:ScrollActivatedMockup::::::Bvr" }) 10522 ] }) }) 10523 }, 10524 t.num 10525 ); 10526 }) }); 10527} 10528function xf({ onComplete: t }) { 10529 const [e, s] = j(0), [r, n] = j(!1), [o, L] = j(!1), d = [ 10530 { role: "ai", text: "Hi! Your trip tomorrow at 8 AM from Oak Street is confirmed. Driver: Marcus, Vehicle #42." }, 10531 { role: "rider", text: "Can I move it to 9 AM?" }, 10532 { role: "ai", text: "Done â your trip is rescheduled to 9:00 AM from Oak Street. You'll get a reminder 30 min before pickup." } 10533 ]; 10534 return q(() => { 10535 if (o) return; 10536 if (e < d.length) { 10537 const g = d[e]?.role === "ai" ? 2200 : 1400, f = setTimeout(() => s((p) => p + 1), g); 10538 return () => clearTimeout(f); 10539 } 10540 const l = setTimeout(() => { 10541 n(!0), L(!0), t?.(); 10542 }, 1200); 10543 return () => clearTimeout(l); 10544 }, [e, o]), /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m38", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col gap-3 flex-1", "data-fg-ce1m38": ":0:/src/app/components/ai/AIProducts.tsx:208:5:9748:3273:e:div:xtetxtetxte:1", children: [ 10545 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m40", _fgB: 1790697590735, className: "flex items-center gap-3 mb-2 pb-3 border-b border-white/5", "data-fg-ce1m40": ":0:/src/app/components/ai/AIProducts.tsx:210:7:9820:728:e:div:etete", children: [
10546 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m41", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#E87722]/20 flex items-center justify-center", "data-fg-ce1m41": ":0:/src/app/components/ai/AIProducts.tsx:211:9:9904:164:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "ce1m42", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m42": ":0:node_modules/lucide-react:212:11:10002:51:e:Smartphone::::::DHxb" }) }), 10547 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m43", _fgB: 1790697590735, "data-fg-ce1m43": ":0:/src/app/components/ai/AIProducts.tsx:214:9:10077:200:e:div:ete", children: [ 10548 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m44", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m44": ":0:/src/app/components/ai/AIProducts.tsx:215:11:10093:70:e:div:t", children: "RiderAssist AI" }), 10549 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m46", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m46": ":0:/src/app/components/ai/AIProducts.tsx:216:11:10174:88:e:div:t", children: "Rider Session" }) 10550 ] }),
10551 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m48", _fgB: 1790697590735, className: "ml-auto flex items-center gap-1.5", "data-fg-ce1m48": ":0:/src/app/components/ai/AIProducts.tsx:218:9:10286:249:e:div:ete", children: [ 10552 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m49", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E] animate-pulse", "data-fg-ce1m49": ":0:/src/app/components/ai/AIProducts.tsx:219:11:10348:68:e:span" }), 10553 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m50", _fgB: 1790697590735, className: "text-[#22C55E] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m50": ":0:/src/app/components/ai/AIProducts.tsx:220:11:10427:93:e:span:t", children: "Online" }) 10554 ] }) 10555 ] }), 10556 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m53", _fgB: 1790697590735, className: "flex flex-col gap-2.5 flex-1 overflow-hidden", "data-fg-ce1m53": ":0:/src/app/components/ai/AIProducts.tsx:225:7:10579:2038:e:div:etxtxte", children: [ 10557 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m54", _fgB: 1790697590735, mode: "sync", "data-fg-ce1m54": ":0:node_modules/motion:226:9:10650:1103:e:AnimatePresence:x:::::DAs4", children: d.slice(0, e).map((l, g) => /* @__PURE__ */ c( 10558 a, 10559 { 10560 _fgT: m.div, 10561 _fgS: "ce1m56", 10562 _fgB: 1790697590735, 10563 initial: { opacity: 0, y: 12 }, 10564 animate: { opacity: 1, y: 0 }, 10565 transition: { duration: 0.35 }, 10566 className: `flex gap-2.5 items-start ${l.role === "rider" ? "flex-row-reverse" : ""}`, 10567 "data-fg-ce1m56": ":0:/src/app/components/ai/AIProducts.tsx:228:13:10754:958:e:motion.div:ete", 10568 children: [
10569 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m57", _fgB: 1790697590735, className: `w-6 h-6 rounded-full flex items-center justify-center shrink-0 ${l.role === "ai" ? "bg-[#E87722]/20 text-[#E87722]" : "bg-[#64748B]/30 text-[#94A3B8]"}`, "data-fg-ce1m57": ":0:/src/app/components/ai/AIProducts.tsx:235:15:11057:303:e:div:x", children: l.role === "ai" ? /* @__PURE__ */ i(a, { _fgT: K5, _fgS: "ce1m59", _fgB: 1790697590735, size: 12, "data-fg-ce1m59": ":0:node_modules/lucide-react:238:38:11300:17:e:Bot::::::EI6D" }) : /* @__PURE__ */ i(a, { _fgT: v2, _fgS: "ce1m60", _fgB: 1790697590735, size: 12, "data-fg-ce1m60": ":0:node_modules/lucide-react:238:58:11320:18:e:User::::::wpV" }) }), 10570 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m61", _fgB: 1790697590735, className: `max-w-[80%] px-3.5 py-2.5 text-[13px] leading-[1.5] text-white ${l.role === "ai" ? "bg-[#E87722] rounded-[16px_16px_16px_4px]" : "bg-[#1E2D40] rounded-[16px_16px_4px_16px]"}`, "data-fg-ce1m61": ":0:/src/app/components/ai/AIProducts.tsx:240:15:11375:311:e:div:x", children: l.text }) 10571 ] 10572 }, 10573 g 10574 )) }), 10575 e < d.length && !o && /* @__PURE__ */ i(a, { _fgT: oi, _fgS: "ce1m64", _fgB: 1790697590735, side: d[e].role === "ai" ? "left" : "right", "data-fg-ce1m64": ":0:/src/app/components/ai/AIProducts.tsx:252:11:11821:82:e:TypingIndicator::::::owg" }),
10576 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m66", _fgB: 1790697590735, "data-fg-ce1m66": ":0:node_modules/motion:256:9:11955:649:e:AnimatePresence:x:::::DAs4", children: r && /* @__PURE__ */ c( 10577 a, 10578 { 10579 _fgT: m.div, 10580 _fgS: "ce1m68", 10581 _fgB: 1790697590735, 10582 initial: { opacity: 0, y: 8 }, 10583 animate: { opacity: 1, y: 0 }, 10584 transition: { duration: 0.3 }, 10585 className: "flex gap-2 ml-8 mt-1", 10586 "data-fg-ce1m68": ":0:/src/app/components/ai/AIProducts.tsx:258:13:12013:551:e:motion.div:ete", 10587 children: [ 10588 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m69", _fgB: 1790697590735, className: "px-3.5 py-1.5 rounded-full text-[11px] font-bold bg-[#2D6BE4] text-white", "data-fg-ce1m69": ":0:/src/app/components/ai/AIProducts.tsx:264:15:12235:147:e:span:t", children: "View Trip Details" }), 10589 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m71", _fgB: 1790697590735, className: "px-3.5 py-1.5 rounded-full text-[11px] font-bold bg-[#2D6BE4] text-white", "data-fg-ce1m71": ":0:/src/app/components/ai/AIProducts.tsx:267:15:12397:141:e:span:t", children: "Cancel Ride" }) 10590 ] 10591 } 10592 ) }) 10593 ] }), 10594 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m74", _fgB: 1790697590735, className: "mt-4 flex items-center gap-2 bg-transparent rounded-full border border-white/10 px-4 py-3", "data-fg-ce1m74": ":0:/src/app/components/ai/AIProducts.tsx:276:7:12649:361:e:div:ete", children: [
10595 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m75", _fgB: 1790697590735, className: "text-[#64748B] text-sm flex-1", "data-fg-ce1m75": ":0:/src/app/components/ai/AIProducts.tsx:277:9:12765:72:e:span:t", children: "Type a message..." }), 10596 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m77", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#2D6BE4] flex items-center justify-center", "data-fg-ce1m77": ":0:/src/app/components/ai/AIProducts.tsx:278:9:12846:151:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: ti, _fgS: "ce1m78", _fgB: 1790697590735, size: 14, className: "text-white", "data-fg-ce1m78": ":0:node_modules/lucide-react:279:11:12941:41:e:Send::::::dtm" }) }) 10597 ] }) 10598 ] }); 10599} 10600function _f({ onComplete: t }) { 10601 const [e, s] = j(0), [r, n] = j(0), [o, L] = j(!1), d = [ 10602 { role: "ai", text: "Metro Transit, how can I help you today?" }, 10603 { role: "rider", text: "I need to reschedule my ride for Thursday." }, 10604 { role: "ai", text: "I found your Thursday trip â 10:15 AM from Pine Ridge Community Center. Would you like to move it to a different time?" }, 10605 { role: "rider", text: "Yes, 1 PM please." }, 10606 { role: "ai", text: "Done. Your trip is confirmed for Thursday at 1:00 PM. Anything else I can help with?" } 10607 ]; 10608 return q(() => { 10609 if (o) return; 10610 const g = setInterval(() => n((f) => f + 1), 1e3); 10611 return () => clearInterval(g); 10612 }, [o]), q(() => { 10613 if (!o) { 10614 if (e < d.length) { 10615 const g = d[e]?.role === "ai" ? 2200 : 1400, f = setTimeout(() => s((p) => p + 1), g); 10616 return () => clearTimeout(f); 10617 } 10618 L(!0), t?.(); 10619 } 10620 }, [e, o]), /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m79", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col gap-3 flex-1", "data-fg-ce1m79": ":0:/src/app/components/ai/AIProducts.tsx:323:5:14593:3071:e:div:xtetxtetxte:1", children: [ 10621 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m81", _fgB: 1790697590735, className: "flex items-center gap-3 mb-2 pb-3 border-b border-white/5", "data-fg-ce1m81": ":0:/src/app/components/ai/AIProducts.tsx:325:7:14665:886:e:div:etete", children: [
10622 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m82", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#2D6BE4]/20 flex items-center justify-center", "data-fg-ce1m82": ":0:/src/app/components/ai/AIProducts.tsx:326:9:14749:159:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "ce1m83", _fgB: 1790697590735, size: 14, className: "text-[#2D6BE4]", "data-fg-ce1m83": ":0:node_modules/lucide-react:327:11:14847:46:e:Phone::::::DmpI" }) }), 10623 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m84", _fgB: 1790697590735, "data-fg-ce1m84": ":0:/src/app/components/ai/AIProducts.tsx:329:9:14917:206:e:div:ete", children: [ 10624 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m85", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m85": ":0:/src/app/components/ai/AIProducts.tsx:330:11:14933:69:e:div:t", children: "CallAssist AI" }), 10625 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m87", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m87": ":0:/src/app/components/ai/AIProducts.tsx:331:11:15013:95:e:div:t", children: "Live Call Transcript" }) 10626 ] }),
10627 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m89", _fgB: 1790697590735, className: "ml-auto flex items-center gap-3", "data-fg-ce1m89": ":0:/src/app/components/ai/AIProducts.tsx:333:9:15132:406:e:div:ete", children: [ 10628 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m90", _fgB: 1790697590735, className: "text-white text-xs font-mono", "data-fg-ce1m90": ":0:/src/app/components/ai/AIProducts.tsx:334:11:15192:73:e:span:x", children: ((g) => `${Math.floor(g / 60)}:${String(g % 60).padStart(2, "0")}`)(r) }), 10629 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m92", _fgB: 1790697590735, className: "flex items-center gap-1.5", "data-fg-ce1m92": ":0:/src/app/components/ai/AIProducts.tsx:335:11:15276:247:e:div:ete", children: [ 10630 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m93", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E] animate-pulse", "data-fg-ce1m93": ":0:/src/app/components/ai/AIProducts.tsx:336:13:15332:68:e:span" }), 10631 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m94", _fgB: 1790697590735, className: "text-[#22C55E] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m94": ":0:/src/app/components/ai/AIProducts.tsx:337:13:15413:93:e:span:t", children: "Active" }) 10632 ] }) 10633 ] }) 10634 ] }), 10635 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m97", _fgB: 1790697590735, className: "flex flex-col gap-2.5 flex-1 overflow-hidden", "data-fg-ce1m97": ":0:/src/app/components/ai/AIProducts.tsx:343:7:15582:1348:e:div:etx", children: [
10636 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m98", _fgB: 1790697590735, mode: "sync", "data-fg-ce1m98": ":0:node_modules/motion:344:9:15653:1103:e:AnimatePresence:x:::::DAs4", children: d.slice(0, e).map((g, f) => /* @__PURE__ */ c( 10637 a, 10638 { 10639 _fgT: m.div, 10640 _fgS: "ce1m100", 10641 _fgB: 1790697590735, 10642 initial: { opacity: 0, y: 12 }, 10643 animate: { opacity: 1, y: 0 }, 10644 transition: { duration: 0.35 }, 10645 className: `flex gap-2.5 items-start ${g.role === "rider" ? "flex-row-reverse" : ""}`, 10646 "data-fg-ce1m100": ":0:/src/app/components/ai/AIProducts.tsx:346:13:15757:958:e:motion.div:ete", 10647 children: [ 10648 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m101", _fgB: 1790697590735, className: `w-6 h-6 rounded-full flex items-center justify-center shrink-0 ${g.role === "ai" ? "bg-[#2D6BE4]/20 text-[#2D6BE4]" : "bg-[#E87722]/20 text-[#E87722]"}`, "data-fg-ce1m101": ":0:/src/app/components/ai/AIProducts.tsx:353:15:16060:303:e:div:x", children: g.role === "ai" ? /* @__P
10648URE__ */ i(a, { _fgT: K5, _fgS: "ce1m103", _fgB: 1790697590735, size: 12, "data-fg-ce1m103": ":0:node_modules/lucide-react:356:38:16303:17:e:Bot::::::EI6D" }) : /* @__PURE__ */ i(a, { _fgT: v2, _fgS: "ce1m104", _fgB: 1790697590735, size: 12, "data-fg-ce1m104": ":0:node_modules/lucide-react:356:58:16323:18:e:User::::::wpV" }) }), 10649 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m105", _fgB: 1790697590735, className: `max-w-[80%] px-3.5 py-2.5 text-[13px] leading-[1.5] text-white ${g.role === "ai" ? "bg-[#2D6BE4] rounded-[16px_16px_16px_4px]" : "bg-[#1E2D40] rounded-[16px_16px_4px_16px]"}`, "data-fg-ce1m105": ":0:/src/app/components/ai/AIProducts.tsx:358:15:16378:311:e:div:x", children: g.text }) 10650 ] 10651 }, 10652 f 10653 )) }), 10654 e < d.length && !o && /* @__PURE__ */ i(a, { _fgT: oi, _fgS: "ce1m108", _fgB: 1790697590735, side: d[e].role === "ai" ? "left" : "right", "data-fg-ce1m108": ":0:/src/app/components/ai/AIProducts.tsx:370:11:16824:82:e:TypingIndicator::::::owg" }) 10655 ] }), 10656 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m110", _fgB: 1790697590735, className: "mt-auto bg-[#0D2040] rounded-xl p-3 grid grid-cols-3 gap-3 text-center", "data-fg-ce1m110": ":0:/src/app/components/ai/AIProducts.tsx:375:7:16962:691:e:div:etete", children: [
10657 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m111", _fgB: 1790697590735, "data-fg-ce1m111": ":0:/src/app/components/ai/AIProducts.tsx:376:9:17059:190:e:div:ete", children: [ 10658 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m112", _fgB: 1790697590735, className: "text-[#22C55E] font-bold text-sm", "data-fg-ce1m112": ":0:/src/app/components/ai/AIProducts.tsx:377:11:17075:62:e:div:t", children: "<1s" }), 10659 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m114", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m114": ":0:/src/app/components/ai/AIProducts.tsx:378:11:17148:86:e:div:t", children: "Answer Time" }) 10660 ] }), 10661 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m116", _fgB: 1790697590735, "data-fg-ce1m116": ":0:/src/app/components/ai/AIProducts.tsx:380:9:17258:184:e:div:ete", children: [ 10662 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m117", _fgB: 1790697590735, className: "text-[#22C55E] font-bold text-sm", "data-fg-ce1m117": ":0:/src/app/components/ai/AIProducts.tsx:381:11:17274:57:e:div:t", children: "0" }),
10663 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m119", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m119": ":0:/src/app/components/ai/AIProducts.tsx:382:11:17342:85:e:div:t", children: "Hold Queue" }) 10664 ] }), 10665 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m121", _fgB: 1790697590735, "data-fg-ce1m121": ":0:/src/app/components/ai/AIProducts.tsx:384:9:17451:189:e:div:ete", children: [ 10666 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m122", _fgB: 1790697590735, className: "text-[#22C55E] font-bold text-sm", "data-fg-ce1m122": ":0:/src/app/components/ai/AIProducts.tsx:385:11:17467:60:e:div:t", children: "24/7" }), 10667 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m124", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m124": ":0:/src/app/components/ai/AIProducts.tsx:386:11:17538:87:e:div:t", children: "Availability" }) 10668 ] }) 10669 ] }) 10670 ] }); 10671} 10672function bf({ onComplete: t }) { 10673 const [e, s] = j(0), r = 12; 10674 q(() => { 10675 if (e >= r) { 10676 t?.(); 10677 return; 10678 } 10679 const l = setInterval(() => s((g) => g + 1), 3e3); 10680 return () => clearInterval(l); 10681 }, [e]); 10682 const n = e % 12, o = [ 10683 { value: "1,247", label: "TRIPS TODAY", color: "text-[#2D6BE4]" }, 10684 { value: "91%", label: "ON-TIME RATE", color: "text-[#22C55E]" }, 10685 { value: "0:22", label: "AVG RESPONSE TIME", color: "text-[#E87722]" }, 10686 { value: "78%", label: "AI HANDLED", color: "text-[#2D6BE4]" } 10687 ], L = [22, 45, 78, 95, 68, 52, 60, 55, 48, 72, 88, 82], d = ["6a", "7a", "8a", "9a", "10a", "11a", "12p", "1p", "2p", "3p", "4p", "5p"]; 10688 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m126", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col flex-1 gap-4", "data-fg-ce1m126": ":0:/src/app/components/ai/AIProducts.tsx:423:5:18709:2897:e:div:xtetxtetxtetxte:1", children: [ 10689 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m128", _fgB: 1790697590735, className: "flex items-center gap-3 pb-3 border-b border-white/5", "data-fg-ce1m128": ":0:/src/app/components/ai/AIProducts.tsx:425:7:18781:723:e:div:etete", children: [
10690 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m129", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#2D6BE4]/20 flex items-center justify-center", "data-fg-ce1m129": ":0:/src/app/components/ai/AIProducts.tsx:426:9:18860:163:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: y1, _fgS: "ce1m130", _fgB: 1790697590735, size: 14, className: "text-[#2D6BE4]", "data-fg-ce1m130": ":0:node_modules/lucide-react:427:11:18958:50:e:BarChart3::::::C2Ja" }) }), 10691 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m131", _fgB: 1790697590735, "data-fg-ce1m131": ":0:/src/app/components/ai/AIProducts.tsx:429:9:19032:203:e:div:ete", children: [ 10692 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m132", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m132": ":0:/src/app/components/ai/AIProducts.tsx:430:11:19048:69:e:div:t", children: "Ops Dashboard" }), 10693 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m134", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m134": ":0:/src/app/components/ai/AIProducts.tsx:431:11:19128:92:e:div:t", children: "Today · Real-Time" }) 10694 ] }),
10695 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m136", _fgB: 1790697590735, className: "ml-auto flex items-center gap-1.5", "data-fg-ce1m136": ":0:/src/app/components/ai/AIProducts.tsx:433:9:19244:247:e:div:ete", children: [ 10696 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m137", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E] animate-pulse", "data-fg-ce1m137": ":0:/src/app/components/ai/AIProducts.tsx:434:11:19306:68:e:span" }), 10697 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m138", _fgB: 1790697590735, className: "text-[#22C55E] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m138": ":0:/src/app/components/ai/AIProducts.tsx:435:11:19385:91:e:span:t", children: "Live" }) 10698 ] }) 10699 ] }), 10700 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m141", _fgB: 1790697590735, className: "grid grid-cols-2 gap-3", "data-fg-ce1m141": ":0:/src/app/components/ai/AIProducts.tsx:440:7:19548:361:e:div:x", children: o.map((l) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m143", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-lg p-4", "data-fg-ce1m143": ":0:/src/app/components/ai/AIProducts.tsx:442:11:19631:253:e:div:ete", children: [
10701 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m144", _fgB: 1790697590735, className: `text-[28px] font-bold ${l.color}`, "data-fg-ce1m144": ":0:/src/app/components/ai/AIProducts.tsx:443:13:19703:67:e:div:x", children: l.value }), 10702 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m146", _fgB: 1790697590735, className: "text-[#64748B] text-[11px] uppercase tracking-wider", "data-fg-ce1m146": ":0:/src/app/components/ai/AIProducts.tsx:444:13:19783:84:e:div:x", children: l.label }) 10703 ] }, l.label)) }), 10704 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m149", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-lg border-l-[3px] border-[#2D6BE4] py-3.5 px-4", "data-fg-ce1m149": ":0:/src/app/components/ai/AIProducts.tsx:450:7:19950:513:e:div:ete", children: [ 10705 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m150", _fgB: 1790697590735, className: "flex items-center gap-1.5 mb-1.5", "data-fg-ce1m150": ":0:/src/app/components/ai/AIProducts.tsx:451:9:20044:236:e:div:ete", children: [ 10706 /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "ce1m151", _fgB: 1790697590735, size: 12, className: "text-[#E87722]", "data-fg-ce1m151": ":0:node_modules/lucide-react:452:11:20105:44:e:Zap::::::Cp7" }),
10707 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m152", _fgB: 1790697590735, className: "text-[#E87722] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m152": ":0:/src/app/components/ai/AIProducts.tsx:453:11:20160:105:e:span:t", children: "Recommended Action" }) 10708 ] }), 10709 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m154", _fgB: 1790697590735, className: "text-white text-[13px] leading-[1.5]", "data-fg-ce1m154": ":0:/src/app/components/ai/AIProducts.tsx:455:9:20289:161:e:p:t", children: "Route 7 showing 18% late arrivals this week â recommend adding 1 vehicle to AM shift." }) 10710 ] }), 10711 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m157", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-lg p-4", "data-fg-ce1m157": ":0:/src/app/components/ai/AIProducts.tsx:461:7:20495:1100:e:div:ete", children: [ 10712 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m158", _fgB: 1790697590735, className: "text-[#64748B] text-[11px] mb-3", "data-fg-ce1m158": ":0:/src/app/components/ai/AIProducts.tsx:462:9:20549:89:e:div:t", children: "Hourly Trip Volume â Last 12 Hours" }),
10713 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m160", _fgB: 1790697590735, className: "flex items-end gap-1.5 h-[80px]", "data-fg-ce1m160": ":0:/src/app/components/ai/AIProducts.tsx:463:9:20647:935:e:div:x", children: L.map((l, g) => { 10714 const f = g === n, p = f ? Math.min(l + 12, 100) : l; 10715 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m162", _fgB: 1790697590735, className: "flex-1 flex flex-col items-center gap-1", "data-fg-ce1m162": ":0:/src/app/components/ai/AIProducts.tsx:468:15:20894:644:e:div:ete", children: [ 10716 /* @__PURE__ */ i( 10717 a, 10718 { 10719 _fgT: m.div, 10720 _fgS: "ce1m163", 10721 _fgB: 1790697590735, 10722 className: `w-full rounded-t transition-colors duration-300 ${f ? "bg-[#E87722]" : "bg-[#2D6BE4]"}`, 10723 animate: { height: `${p}%` }, 10724 transition: { duration: 0.6, ease: "easeOut" }, 10725 style: { minHeight: 4 }, 10726 "data-fg-ce1m163": ":0:/src/app/components/ai/AIProducts.tsx:469:17:20984:363:e:motion.div" 10727 } 10728 ),
10729 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m164", _fgB: 1790697590735, className: `text-[8px] transition-colors ${f ? "text-[#E87722]" : "text-[#64748B]"}`, "data-fg-ce1m164": ":0:/src/app/components/ai/AIProducts.tsx:477:17:21364:153:e:span:x", children: d[g] }) 10730 ] }, d[g]); 10731 }) }) 10732 ] }) 10733 ] }); 10734} 10735function vf({ onComplete: t }) { 10736 const [e, s] = j(0); 10737 return q(() => { 10738 if (e >= 4) { 10739 t?.(); 10740 return; 10741 } 10742 const n = setTimeout(() => s((o) => o + 1), [1500, 2e3, 2e3, 2e3][e] || 2e3); 10743 return () => clearTimeout(n); 10744 }, [e]), /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m166", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col flex-1 gap-3", "data-fg-ce1m166": ":0:/src/app/components/ai/AIProducts.tsx:507:5:22187:3558:e:div:xtetxtetxtetxtetxte:1", children: [ 10745 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m168", _fgB: 1790697590735, className: "flex items-center gap-3 pb-3 border-b border-white/5", "data-fg-ce1m168": ":0:/src/app/components/ai/AIProducts.tsx:509:7:22259:735:e:div:etete", children: [
10746 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m169", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#E87722]/20 flex items-center justify-center", "data-fg-ce1m169": ":0:/src/app/components/ai/AIProducts.tsx:510:9:22338:163:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: w1, _fgS: "ce1m170", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m170": ":0:node_modules/lucide-react:511:11:22436:50:e:CircleDot::::::CPqJ" }) }), 10747 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m171", _fgB: 1790697590735, "data-fg-ce1m171": ":0:/src/app/components/ai/AIProducts.tsx:513:9:22510:211:e:div:ete", children: [ 10748 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m172", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m172": ":0:/src/app/components/ai/AIProducts.tsx:514:11:22526:71:e:div:t", children: "DriverAssist AI" }), 10749 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m174", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m174": ":0:/src/app/components/ai/AIProducts.tsx:515:11:22608:98:e:div:t", children: "Route 12 · Active Shift" }) 10750 ] }),
10751 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m176", _fgB: 1790697590735, className: "ml-auto flex items-center gap-1.5", "data-fg-ce1m176": ":0:/src/app/components/ai/AIProducts.tsx:517:9:22730:251:e:div:ete", children: [ 10752 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m177", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E] animate-pulse", "data-fg-ce1m177": ":0:/src/app/components/ai/AIProducts.tsx:518:11:22792:68:e:span" }), 10753 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m178", _fgB: 1790697590735, className: "text-[#22C55E] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m178": ":0:/src/app/components/ai/AIProducts.tsx:519:11:22871:95:e:span:t", children: "On Route" }) 10754 ] }) 10755 ] }), 10756 /* @__PURE__ */ c( 10757 a, 10758 { 10759 _fgT: m.div, 10760 _fgS: "ce1m181", 10761 _fgB: 1790697590735, 10762 initial: { opacity: 0, y: 10 }, 10763 animate: { opacity: e >= 0 ? 1 : 0, y: e >= 0 ? 0 : 10 }, 10764 transition: { duration: 0.4 }, 10765 className: "bg-[#0D2040] rounded-lg border-l-[3px] border-[#2D6BE4] py-3.5 px-4", 10766 "data-fg-ce1m181": ":0:/src/app/components/ai/AIProducts.tsx:524:7:23029:591:e:motion.div:etete", 10767 children: [
10768 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m182", _fgB: 1790697590735, className: "text-[#2D6BE4] text-[10px] font-bold uppercase tracking-wider mb-1", "data-fg-ce1m182": ":0:/src/app/components/ai/AIProducts.tsx:530:9:23298:102:e:div:t", children: "Current Stop" }), 10769 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m184", _fgB: 1790697590735, className: "text-white text-[14px] font-bold", "data-fg-ce1m184": ":0:/src/app/components/ai/AIProducts.tsx:531:9:23409:91:e:div:t", children: "Stop 4 of 11 â Riverside Apartments" }), 10770 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m186", _fgB: 1790697590735, className: "text-[#64748B] text-[12px] mt-0.5", "data-fg-ce1m186": ":0:/src/app/components/ai/AIProducts.tsx:532:9:23509:91:e:div:t", children: "Rider: Janet M. | Pickup confirmed" }) 10771 ] 10772 } 10773 ), 10774 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m189", _fgB: 1790697590735, "data-fg-ce1m189": ":0:node_modules/motion:536:7:23657:729:e:AnimatePresence:x:::::DAs4", children: e >= 1 && /* @__PURE__ */ c( 10775 a, 10776 { 10777 _fgT: m.div, 10778 _fgS: "ce1m191", 10779 _fgB: 1790697590735, 10780 initial: { opacity: 0, y: 10 }, 10781 animate: { opacity: 1, y: 0 }, 10782 transition: { duration: 0.4 }, 10783 className: "bg-[#0D2040] rounded-lg border-l-[3px] border-[#E87722] py-3.5 px-4", 10784 "data-fg-ce1m191": ":0:/src/app/components/ai/AIProducts.tsx:538:11:23710:640:e:motion.div:ete", 10785 children: [
10786 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m192", _fgB: 1790697590735, className: "flex items-center gap-1.5 mb-1", "data-fg-ce1m192": ":0:/src/app/components/ai/AIProducts.tsx:544:13:23968:254:e:div:ete", children: [ 10787 /* @__PURE__ */ i(a, { _fgT: R3, _fgS: "ce1m193", _fgB: 1790697590735, size: 12, className: "text-[#E87722]", "data-fg-ce1m193": ":0:node_modules/lucide-react:545:15:24031:54:e:AlertTriangle::::::Ruk" }), 10788 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m194", _fgB: 1790697590735, className: "text-[#E87722] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m194": ":0:/src/app/components/ai/AIProducts.tsx:546:15:24100:103:e:span:t", children: "No-Show Detected" }) 10789 ] }), 10790 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m196", _fgB: 1790697590735, className: "text-white text-[13px]", "data-fg-ce1m196": ":0:/src/app/components/ai/AIProducts.tsx:548:13:24235:91:e:p:t", children: "No-show at Stop 4 â how would you like to log it?" }) 10791 ] 10792 } 10793 ) }), 10794 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m199", _fgB: 1790697590735, "data-fg-ce1m199": ":0:node_modules/motion:554:7:24423:736:e:AnimatePresence:x:::::DAs4", children: e >= 2 && /* @__PURE__ */ c( 10795 a, 10796 { 10797 _fgT: m.div, 10798 _fgS: "ce1m201", 10799 _fgB: 1790697590735, 10800 initial: { opacity: 0, y: 10 }, 10801 animate: { opacity: 1, y: 0 }, 10802 transition: { duration: 0.4 }, 10803 className: "flex flex-col gap-2", 10804 "data-fg-ce1m201": ":0:/src/app/components/ai/AIProducts.tsx:556:11:24476:647:e:motion.div:etete", 10805 children: [
10806 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m202", _fgB: 1790697590735, className: "bg-[#2D6BE4] text-white text-[13px] font-bold text-center py-3 rounded-lg", "data-fg-ce1m202": ":0:/src/app/components/ai/AIProducts.tsx:562:13:24686:108:e:div:t", children: "Log No-Show" }), 10807 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m204", _fgB: 1790697590735, className: "bg-[#1E2D40] text-white text-[13px] font-bold text-center py-3 rounded-lg border border-[#2D6BE4]/30", "data-fg-ce1m204": ":0:/src/app/components/ai/AIProducts.tsx:563:13:24807:142:e:div:t", children: "Rider Running Late" }), 10808 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m206", _fgB: 1790697590735, className: "bg-[#1E2D40] text-white text-[13px] font-bold text-center py-3 rounded-lg border border-[#2D6BE4]/30", "data-fg-ce1m206": ":0:/src/app/components/ai/AIProducts.tsx:564:13:24962:137:e:div:t", children: "Call Dispatch" }) 10809 ] 10810 } 10811 ) }), 10812 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m209", _fgB: 1790697590735, "data-fg-ce1m209": ":0:node_modules/motion:570:7:25192:542:e:AnimatePresence:x:::::DAs4", children: e >= 3 && /* @__PURE__ */ i( 10813 a, 10814 { 10815 _fgT: m.div, 10816 _fgS: "ce1m211", 10817 _fgB: 1790697590735, 10818 initial: { opacity: 0 }, 10819 animate: { opacity: 1 }, 10820 transition: { duration: 0.4 }, 10821 className: "mt-auto flex flex-col gap-1.5", 10822 "data-fg-ce1m211": ":0:/src/app/components/ai/AIProducts.tsx:572:11:25245:453:e:motion.div:x", 10823 children: ["Stop 5 â Pine Ridge Community Center", "Stop 6 â Valley Medical Clinic", "Stop 7 â Downtown Transit Hub"].map((r, n) => /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m213", _fgB: 1790697590735, className: "text-[#64748B] text-[12px]", "data-fg-ce1m213": ":0:/src/app/components/ai/AIProducts.tsx:579:15:25594:64:e:div:x", children: r }, n)) 10824 } 10825 ) }) 10826 ] }); 10827} 10828function yf({ onComplete: t }) { 10829 const [e, s] = j(0); 10830 q(() => { 10831 if (e >= 3) { 10832 t?.(); 10833 return; 10834 } 10835 const o = setTimeout(() => s((L) => L + 1), [1500, 2500, 2500][e] || 2e3); 10836 return () => clearTimeout(o); 10837 }, [e]); 10838 const r = [ 10839 { label: "Positive", icon: /* @__PURE__ */ i(a, { _fgT: yd, _fgS: "ce1m215", _fgB: 1790697590735, size: 12, "data-fg-ce1m215": ":0:node_modules/lucide-react:606:32:26361:22:e:ThumbsUp::::::ErW" }), pct: 52, color: "text-[#22C55E]", bar: "bg-[#22C55E]" }, 10840 { label: "Neutral", icon: /* @__PURE__ */ i(a, { _fgT: Cl, _fgS: "ce1m216", _fgB: 1790697590735, size: 12, "data-fg-ce1m216": ":0:node_modules/lucide-react:607:31:26472:19:e:Minus::::::fva" }), pct: 18, color: "text-[#94A3B8]", bar: "bg-[#64748B]" }, 10841 { label: "Negative", icon: /* @__PURE__ */ i(a, { _fgT: bd, _fgS: "ce1m217", _fgB: 1790697590735, size: 12, "data-fg-ce1m217": ":0:node_modules/lucide-react:608:32:26581:24:e:ThumbsDown::::::Dkov" }), pct: 30, color: "text-[#EF4444]", bar: "bg-[#EF4444]" } 10842 ]; 10843 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m218", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col flex-1 gap-4", "data-fg-ce1m218": ":0:/src/app/components/ai/AIProducts.tsx:612:5:26685:3982:e:div:xtetxtetxtetxte:1", children: [ 10844 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m220", _fgB: 1790697590735, className: "flex items-center gap-3 pb-3 border-b border-white/5", "data-fg-ce1m220": ":0:/src/app/components/ai/AIProducts.tsx:614:7:26757:497:e:div:ete", children: [
10845 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m221", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#E87722]/20 flex items-center justify-center", "data-fg-ce1m221": ":0:/src/app/components/ai/AIProducts.tsx:615:9:26836:167:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: T1, _fgS: "ce1m222", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m222": ":0:node_modules/lucide-react:616:11:26934:54:e:ClipboardList::::::CPfu" }) }), 10846 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m223", _fgB: 1790697590735, "data-fg-ce1m223": ":0:/src/app/components/ai/AIProducts.tsx:618:9:27012:229:e:div:ete", children: [ 10847 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m224", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m224": ":0:/src/app/components/ai/AIProducts.tsx:619:11:27028:77:e:div:t", children: "Feedback Intelligence" }), 10848 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m226", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m226": ":0:/src/app/components/ai/AIProducts.tsx:620:11:27116:110:e:div:t", children: "Processing · 143 Responses Analyzed" }) 10849 ] }) 10850 ] }), 10851 /* @__PURE__ */ c( 10852 a, 10853 { 10854 _fgT: m.div, 10855 _fgS: "ce1m229", 10856 _fgB: 1790697590735, 10857 initial: { opacity: 0, y: 10 }, 10858 animate: { opacity: e >= 0 ? 1 : 0, y: e >= 0 ? 0 : 10 }, 10859 transition: { duration: 0.5 }, 10860 className: "bg-[#0D2040] rounded-lg p-4", 10861 "data-fg-ce1m229": ":0:/src/app/components/ai/AIProducts.tsx:625:7:27296:1189:e:motion.div:ete", 10862 children: [
10863 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m230", _fgB: 1790697590735, className: "text-white text-[13px] font-semibold mb-3", "data-fg-ce1m230": ":0:/src/app/components/ai/AIProducts.tsx:631:9:27525:84:e:div:t", children: "Sentiment Breakdown" }), 10864 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m232", _fgB: 1790697590735, className: "space-y-2.5", "data-fg-ce1m232": ":0:/src/app/components/ai/AIProducts.tsx:632:9:27618:847:e:div:x", children: r.map((n) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m234", _fgB: 1790697590735, className: "flex items-center gap-3", "data-fg-ce1m234": ":0:/src/app/components/ai/AIProducts.tsx:634:13:27698:738:e:div:etete", children: [ 10865 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m235", _fgB: 1790697590735, className: `flex items-center gap-1.5 w-20 ${n.color}`, "data-fg-ce1m235": ":0:/src/app/components/ai/AIProducts.tsx:635:15:27768:170:e:div:xte", children: [ 10866 n.icon, 10867 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m237", _fgB: 1790697590735, className: "text-[11px]", "data-fg-ce1m237": ":0:/src/app/components/ai/AIProducts.tsx:637:17:27871:46:e:span:x", children: n.label }) 10868 ] }),
10869 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m239", _fgB: 1790697590735, className: "flex-1 h-2.5 bg-white/5 rounded-full overflow-hidden", "data-fg-ce1m239": ":0:/src/app/components/ai/AIProducts.tsx:639:15:27953:369:e:div:e", children: /* @__PURE__ */ i( 10870 a, 10871 { 10872 _fgT: m.div, 10873 _fgS: "ce1m240", 10874 _fgB: 1790697590735, 10875 className: `h-full rounded-full ${n.bar}`, 10876 initial: { width: 0 }, 10877 animate: { width: `${n.pct}%` }, 10878 transition: { duration: 0.8, ease: "easeOut", delay: 0.2 }, 10879 "data-fg-ce1m240": ":0:/src/app/components/ai/AIProducts.tsx:640:17:28040:261:e:motion.div" 10880 } 10881 ) }), 10882 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "ce1m241", _fgB: 1790697590735, className: `text-xs font-bold w-10 text-right ${n.color}`, "data-fg-ce1m241": ":0:/src/app/components/ai/AIProducts.tsx:647:15:28337:80:e:span:xt", children: [ 10883 n.pct, 10884 "%" 10885 ] }) 10886 ] }, n.label)) }) 10887 ] 10888 } 10889 ), 10890 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m245", _fgB: 1790697590735, "data-fg-ce1m245": ":0:node_modules/motion:654:7:28527:1297:e:AnimatePresence:x:::::DAs4", children: e >= 1 && /* @__PURE__ */ c( 10891 a, 10892 { 10893 _fgT: m.div, 10894 _fgS: "ce1m247", 10895 _fgB: 1790697590735, 10896 initial: { opacity: 0, y: 10 }, 10897 animate: { opacity: 1, y: 0 }, 10898 transition: { duration: 0.4 }, 10899 className: "bg-[#0D2040] rounded-lg p-3.5", 10900 "data-fg-ce1m247": ":0:/src/app/components/ai/AIProducts.tsx:656:11:28580:1208:e:motion.div:etete", 10901 children: [
10902 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m248", _fgB: 1790697590735, className: "flex items-center gap-2 mb-2", "data-fg-ce1m248": ":0:/src/app/components/ai/AIProducts.tsx:662:13:28800:245:e:div:ete", children: [ 10903 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m249", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m249": ":0:/src/app/components/ai/AIProducts.tsx:663:15:28861:97:e:span:t", children: "Classified" }), 10904 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ce1m251", _fgB: 1790697590735, size: 12, className: "text-[#22C55E]", "data-fg-ce1m251": ":0:node_modules/lucide-react:664:15:28973:53:e:CheckCircle2::::::CELI" }) 10905 ] }), 10906 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m252", _fgB: 1790697590735, className: "text-white text-[13px] italic leading-[1.5] mb-3", "data-fg-ce1m252": ":0:/src/app/components/ai/AIProducts.tsx:666:13:29058:160:e:p:t", children: '"Early pickup at Stop 3 â driver left before my scheduled time."' }),
10907 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m254", _fgB: 1790697590735, className: "flex gap-1.5 flex-wrap", "data-fg-ce1m254": ":0:/src/app/components/ai/AIProducts.tsx:669:13:29231:533:e:div:xte", children: [ 10908 ["EARLY DEPARTURE", "STOP 3", "ROUTE 12"].map((n) => /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m256", _fgB: 1790697590735, className: "px-2 py-0.5 rounded text-[9px] font-bold uppercase tracking-wider bg-white/5 text-[#2D6BE4] border border-white/5", "data-fg-ce1m256": ":0:/src/app/components/ai/AIProducts.tsx:671:17:29360:190:e:span:x", children: n }, n)), 10909 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m258", _fgB: 1790697590735, className: "px-2 py-0.5 rounded text-[9px] font-bold uppercase tracking-wider bg-[#EF4444]/10 text-[#EF4444]", "data-fg-ce1m258": ":0:/src/app/components/ai/AIProducts.tsx:675:15:29583:162:e:span:t", children: "Negative" }) 10910 ] }) 10911 ] 10912 } 10913 ) }), 10914 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m261", _fgB: 1790697590735, "data-fg-ce1m261": ":0:node_modules/motion:684:7:29861:795:e:AnimatePresence:x:::::DAs4", children: e >= 2 && /* @__PURE__ */ c( 10915 a, 10916 { 10917 _fgT: m.div, 10918 _fgS: "ce1m263", 10919 _fgB: 1790697590735, 10920 initial: { opacity: 0, y: 10 }, 10921 animate: { opacity: 1, y: 0 }, 10922 transition: { duration: 0.4 }, 10923 className: "bg-[#0D2040] rounded-lg border-l-[3px] border-[#E87722] py-3 px-3.5", 10924 "data-fg-ce1m263": ":0:/src/app/components/ai/AIProducts.tsx:686:11:29914:706:e:motion.div:ete", 10925 children: [
10926 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m264", _fgB: 1790697590735, className: "flex items-center gap-1.5 mb-1", "data-fg-ce1m264": ":0:/src/app/components/ai/AIProducts.tsx:692:13:30172:249:e:div:ete", children: [ 10927 /* @__PURE__ */ i(a, { _fgT: E3, _fgS: "ce1m265", _fgB: 1790697590735, size: 12, className: "text-[#E87722]", "data-fg-ce1m265": ":0:node_modules/lucide-react:693:15:30235:51:e:TrendingUp::::::tM8" }), 10928 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m266", _fgB: 1790697590735, className: "text-[#E87722] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m266": ":0:/src/app/components/ai/AIProducts.tsx:694:15:30301:101:e:span:t", children: "Emerging Theme" }) 10929 ] }), 10930 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m268", _fgB: 1790697590735, className: "text-white text-[12px] leading-[1.5]", "data-fg-ce1m268": ":0:/src/app/components/ai/AIProducts.tsx:696:13:30434:162:e:p:t", children: "Early pickup complaints up 22% this week on Route 12 â flagged for ops review." }) 10931 ] 10932 } 10933 ) }) 10934 ] }); 10935} 10936function wf({ onComplete: t }) { 10937 const [e, s] = j(0); 10938 q(() => { 10939 if (e >= 3) { 10940 t?.(); 10941 return; 10942 } 10943 const o = setTimeout(() => s((L) => L + 1), [1500, 2500, 2500][e] || 2e3); 10944 return () => clearTimeout(o); 10945 }, [e]); 10946 const r = [ 10947 { trip: "#3041", vehicle: "Vehicle 9", badge: "+4 min", badgeColor: "text-[#E87722] bg-[#E87722]/10" }, 10948 { trip: "#3044", vehicle: "Vehicle 11", badge: "+2 min", badgeColor: "text-[#E87722] bg-[#E87722]/10" }, 10949 { trip: "#3047", vehicle: "Vehicle 6", badge: "On time", badgeColor: "text-[#22C55E] bg-[#22C55E]/10" } 10950 ]; 10951 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m270", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col flex-1 gap-3", "data-fg-ce1m270": ":0:/src/app/components/ai/AIProducts.tsx:730:5:31611:4105:e:div:xtetxtetxtetxte:1", children: [ 10952 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m272", _fgB: 1790697590735, className: "flex items-center gap-3 pb-3 border-b border-white/5", "data-fg-ce1m272": ":0:/src/app/components/ai/AIProducts.tsx:732:7:31683:720:e:div:etete", children: [
10953 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m273", _fgB: 1790697590735, className: "w-8 h-8 rounded-full bg-[#E87722]/20 flex items-center justify-center", "data-fg-ce1m273": ":0:/src/app/components/ai/AIProducts.tsx:733:9:31762:157:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "ce1m274", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m274": ":0:node_modules/lucide-react:734:11:31860:44:e:Zap::::::Cp7" }) }), 10954 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m275", _fgB: 1790697590735, "data-fg-ce1m275": ":0:/src/app/components/ai/AIProducts.tsx:736:9:31928:204:e:div:ete", children: [ 10955 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m276", _fgB: 1790697590735, className: "text-white text-[13px] font-bold", "data-fg-ce1m276": ":0:/src/app/components/ai/AIProducts.tsx:737:11:31944:72:e:div:t", children: "SmartDispatch AI" }), 10956 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m278", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m278": ":0:/src/app/components/ai/AIProducts.tsx:738:11:32027:90:e:div:t", children: "Live Operations" }) 10957 ] }),
10958 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m280", _fgB: 1790697590735, className: "ml-auto flex items-center gap-1.5", "data-fg-ce1m280": ":0:/src/app/components/ai/AIProducts.tsx:740:9:32141:249:e:div:ete", children: [ 10959 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m281", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E] animate-pulse", "data-fg-ce1m281": ":0:/src/app/components/ai/AIProducts.tsx:741:11:32203:68:e:span" }), 10960 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m282", _fgB: 1790697590735, className: "text-[#22C55E] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m282": ":0:/src/app/components/ai/AIProducts.tsx:742:11:32282:93:e:span:t", children: "Active" }) 10961 ] }) 10962 ] }), 10963 /* @__PURE__ */ c( 10964 a, 10965 { 10966 _fgT: m.div, 10967 _fgS: "ce1m285", 10968 _fgB: 1790697590735, 10969 initial: { opacity: 0, y: 10 }, 10970 animate: { opacity: e >= 0 ? 1 : 0, y: e >= 0 ? 0 : 10 }, 10971 transition: { duration: 0.4 }, 10972 className: "bg-[rgba(232,119,34,0.12)] rounded-lg border-l-[3px] border-[#E87722] py-3 px-4", 10973 "data-fg-ce1m285": ":0:/src/app/components/ai/AIProducts.tsx:747:7:32442:661:e:motion.div:ete", 10974 children: [
10975 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m286", _fgB: 1790697590735, className: "flex items-center gap-1.5 mb-1", "data-fg-ce1m286": ":0:/src/app/components/ai/AIProducts.tsx:753:9:32723:245:e:div:ete", children: [ 10976 /* @__PURE__ */ i(a, { _fgT: R3, _fgS: "ce1m287", _fgB: 1790697590735, size: 12, className: "text-[#E87722]", "data-fg-ce1m287": ":0:node_modules/lucide-react:754:11:32782:54:e:AlertTriangle::::::Ruk" }), 10977 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m288", _fgB: 1790697590735, className: "text-[#E87722] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m288": ":0:/src/app/components/ai/AIProducts.tsx:755:11:32847:106:e:span:t", children: "Disruption Detected" }) 10978 ] }), 10979 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m290", _fgB: 1790697590735, className: "text-white text-[13px]", "data-fg-ce1m290": ":0:/src/app/components/ai/AIProducts.tsx:757:9:32977:106:e:p:t", children: "Vehicle 14 â breakdown on Route 3. Reassigning 3 affected trips." }) 10980 ] 10981 } 10982 ), 10983 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m293", _fgB: 1790697590735, "data-fg-ce1m293": ":0:node_modules/motion:761:7:33142:1389:e:AnimatePresence:x:::::DAs4", children: e >= 1 && /* @__PURE__ */ c( 10984 a, 10985 { 10986 _fgT: m.div, 10987 _fgS: "ce1m295", 10988 _fgB: 1790697590735, 10989 initial: { opacity: 0, y: 10 }, 10990 animate: { opacity: 1, y: 0 }, 10991 transition: { duration: 0.4 }, 10992 className: "bg-[#0D2040] rounded-lg border-l-[3px] border-[#2D6BE4] py-3.5 px-4", 10993 "data-fg-ce1m295": ":0:/src/app/components/ai/AIProducts.tsx:763:11:33195:1300:e:motion.div:etete", 10994 children: [
10995 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m296", _fgB: 1790697590735, className: "text-[#2D6BE4] text-[10px] font-bold uppercase tracking-wider mb-3", "data-fg-ce1m296": ":0:/src/app/components/ai/AIProducts.tsx:769:13:33453:106:e:div:t", children: "Recovery Actions" }), 10996 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m298", _fgB: 1790697590735, className: "flex flex-col gap-2", "data-fg-ce1m298": ":0:/src/app/components/ai/AIProducts.tsx:770:13:33572:679:e:div:x", children: r.map((n, o) => /* @__PURE__ */ c( 10997 a, 10998 { 10999 _fgT: m.div, 11000 _fgS: "ce1m300", 11001 _fgB: 1790697590735, 11002 initial: { opacity: 0, x: -10 }, 11003 animate: { opacity: 1, x: 0 }, 11004 transition: { duration: 0.3, delay: o * 0.15 }, 11005 className: "flex items-center justify-between text-[13px]", 11006 "data-fg-ce1m300": ":0:/src/app/components/ai/AIProducts.tsx:772:17:33673:541:e:motion.div:ete", 11007 children: [ 11008 /* @__P
11008URE__ */ c(a, { _fgT: "span", _fgS: "ce1m301", _fgB: 1790697590735, className: "text-white", "data-fg-ce1m301": ":0:/src/app/components/ai/AIProducts.tsx:779:19:33994:77:e:span:txtx", children: [ 11009 "Trip ", 11010 n.trip, 11011 " â Reassigned to ", 11012 n.vehicle 11013 ] }), 11014 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m306", _fgB: 1790697590735, className: `text-[10px] font-bold px-2 py-0.5 rounded ${n.badgeColor}`, "data-fg-ce1m306": ":0:/src/app/components/ai/AIProducts.tsx:780:19:34090:94:e:span:x", children: n.badge }) 11015 ] 11016 }, 11017 n.trip 11018 )) }), 11019 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m308", _fgB: 1790697590735, className: "border-t border-white/[0.06] mt-3 pt-2.5", "data-fg-ce1m308": ":0:/src/app/components/ai/AIProducts.tsx:784:13:34264:207:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ce1m309", _fgB: 1790697590735, className: "text-[#64748B] text-[11px]", "data-fg-ce1m309": ":0:/src/app/components/ai/AIProducts.tsx:785:15:34337:115:e:p:t", children: "On-time performance impact: -1.2% | All riders notified automatically" }) }) 11020 ] 11021 } 11022 ) }), 11023 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "ce1m312", _fgB: 1790697590735, "data-fg-ce1m312": ":0:node_modules/motion:792:7:34566:1139:e:AnimatePresence:x:::::DAs4", children: e >= 2 && /* @__PURE__ */ c( 11024 a, 11025 { 11026 _fgT: m.div, 11027 _fgS: "ce1m314", 11028 _fgB: 1790697590735, 11029 initial: { opacity: 0, y: 10 }, 11030 animate: { opacity: 1, y: 0 }, 11031 transition: { duration: 0.4 }, 11032 className: "mt-auto grid grid-cols-3 gap-2", 11033 "data-fg-ce1m314": ":0:/src/app/components/ai/AIProducts.tsx:794:11:34619:1050:e:motion.div:etete", 11034 children: [
11035 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m315", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-md py-2 px-3 flex items-center gap-1.5", "data-fg-ce1m315": ":0:/src/app/components/ai/AIProducts.tsx:800:13:34840:260:e:div:ete", children: [ 11036 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m316", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#22C55E]", "data-fg-ce1m316": ":0:/src/app/components/ai/AIProducts.tsx:801:15:34932:54:e:span" }), 11037 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m317", _fgB: 1790697590735, className: "text-[#22C55E] text-[11px] font-bold uppercase", "data-fg-ce1m317": ":0:/src/app/components/ai/AIProducts.tsx:802:15:35001:80:e:span:t", children: "On Route" }) 11038 ] }), 11039 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m319", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-md py-2 px-3 flex items-center gap-1.5", "data-fg-ce1m319": ":0:/src/app/components/ai/AIProducts.tsx:804:13:35113:259:e:div:ete", children: [ 11040 /* @__P
11040URE__ */ i(a, { _fgT: "span", _fgS: "ce1m320", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#E87722]", "data-fg-ce1m320": ":0:/src/app/components/ai/AIProducts.tsx:805:15:35205:54:e:span" }), 11041 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m321", _fgB: 1790697590735, className: "text-[#E87722] text-[11px] font-bold uppercase", "data-fg-ce1m321": ":0:/src/app/components/ai/AIProducts.tsx:806:15:35274:79:e:span:t", children: "Delayed" }) 11042 ] }), 11043 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m323", _fgB: 1790697590735, className: "bg-[#0D2040] rounded-md py-2 px-3 flex items-center gap-1.5", "data-fg-ce1m323": ":0:/src/app/components/ai/AIProducts.tsx:808:13:35385:260:e:div:ete", children: [ 11044 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m324", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#EF4444]", "data-fg-ce1m324": ":0:/src/app/components/ai/AIProducts.tsx:809:15:35477:54:e:span" }), 11045 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m325", _fgB: 1790697590735, className: "text-[#EF4444] text-[11px] font-bold uppercase", "data-fg-ce1m325": ":0:/src/app/components/ai/AIProducts.tsx:810:15:35546:80:e:span:t", children: "Veh Down" }) 11046 ] }) 11047 ] 11048 } 11049 ) }) 11050 ] }); 11051} 11052function oi({ side: t }) { 11053 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m327", _fgB: 1790697590735, _fgD: !0, className: `flex gap-2.5 items-start ${t === "right" ? "flex-row-reverse" : ""}`, "data-fg-ce1m327": ":0:/src/app/components/ai/AIProducts.tsx:825:5:35965:893:e:div:ete:1", children: [ 11054 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m328", _fgB: 1790697590735, className: `w-6 h-6 rounded-full flex items-center justify-center shrink-0 ${t === "left" ? "bg-[#2D6BE4]/20 text-[#2D6BE4]" : "bg-[#E87722]/20 text-[#E87722]"}`, "data-fg-ce1m328": ":0:/src/app/components/ai/AIProducts.tsx:826:7:36062:267:e:div:x", children: t === "left" ? /* @__PURE__ */ i(a, { _fgT: K5, _fgS: "ce1m330", _fgB: 1790697590735, size: 12, "data-fg-ce1m330": ":0:node_modules/lucide-react:829:28:36277:17:e:Bot::::::EI6D" }) : /* @__PURE__ */ i(a, { _fgT: v2, _fgS: "ce1m331", _fgB: 1790697590735, size: 12, "data-fg-ce1m331": ":0:node_modules/lucide-react:829:48:36297:18:e:User::::::wpV" }) }), 11055 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m332", _fgB: 1790697590735, className: "bg-[#1E293B] rounded-2xl rounded-tl-sm px-4 py-3 border border-white/5", "data-fg-ce1m332": ":0:/src/app/components/ai/AIProducts.tsx:831:7:36336:511:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m333", _fgB: 1790697590735, className: "flex gap-1", "data-fg-ce1m333": ":0:/src/app/components/ai/AIProducts.tsx:832:9:36433:401:e:div:etete", children: [
11056 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m334", _fgB: 1790697590735, className: "w-1.5 h-1.5 bg-[#64748B] rounded-full animate-bounce", style: { animationDelay: "0ms" }, "data-fg-ce1m334": ":0:/src/app/components/ai/AIProducts.tsx:833:11:36472:107:e:span" }), 11057 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m335", _fgB: 1790697590735, className: "w-1.5 h-1.5 bg-[#64748B] rounded-full animate-bounce", style: { animationDelay: "150ms" }, "data-fg-ce1m335": ":0:/src/app/components/ai/AIProducts.tsx:834:11:36590:109:e:span" }), 11058 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m336", _fgB: 1790697590735, className: "w-1.5 h-1.5 bg-[#64748B] rounded-full animate-bounce", style: { animationDelay: "300ms" }, "data-fg-ce1m336": ":0:/src/app/components/ai/AIProducts.tsx:835:11:36710:109:e:span" }) 11059 ] }) }) 11060 ] }); 11061} 11062function Tf() { 11063 const t = H(null), [e, s] = j(!1); 11064 return q(() => { 11065 const r = t.current; 11066 if (!r) return; 11067 const n = new IntersectionObserver( 11068 ([o]) => s(o.isIntersecting), 11069 { rootMargin: "-25% 0px -25% 0px", threshold: 0.3 } 11070 ); 11071 return n.observe(r), () => n.disconnect(); 11072 }, []), [t, e]; 11073} 11074function Sf({ isEven: t, index: e }) { 11075 const [s, r] = Tf(), [n, o] = j("waiting"), [L, d] = j(0); 11076 q(() => { 11077 r && n === "waiting" && o("playing"); 11078 }, [r, n]); 11079 const l = Ge(() => { 11080 o("finished"); 11081 }, []), g = Ge(() => { 11082 d((f) => f + 1), o("playing"); 11083 }, []); 11084 return /* @__PURE__ */ c( 11085 a, 11086 { 11087 _fgT: "div", 11088 _fgS: "ce1m337", 11089 _fgB: 1790697590735, 11090 _fgD: !0, 11091 ref: s, 11092 className: `${t ? "lg:order-1" : "lg:order-2"} flex flex-col gap-4`, 11093 "data-fg-ce1m337": ":0:/src/app/components/ai/AIProducts.tsx:885:5:38175:1885:e:div:etxtx:1", 11094 children: [
11095 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m338", _fgB: 1790697590735, className: "bg-[#111C2D] rounded-2xl p-6 md:p-7 relative overflow-hidden border border-[#1E293B] shadow-[0_0_40px_rgba(45,107,228,0.12)] min-h-[400px] flex flex-col", "data-fg-ce1m338": ":0:/src/app/components/ai/AIProducts.tsx:889:7:38288:1162:e:div:ete", children: [ 11096 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m339", _fgB: 1790697590735, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[500px] h-[500px] bg-[radial-gradient(circle,rgba(43,122,232,0.08)_0%,transparent_70%)] pointer-events-none", "data-fg-ce1m339": ":0:/src/app/components/ai/AIProducts.tsx:890:9:38467:189:e:div" }), 11097 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m340", _fgB: 1790697590735, className: "relative z-10 flex-1 flex flex-col", "data-fg-ce1m340": ":0:/src/app/components/ai/AIProducts.tsx:891:9:38665:772:e:div:x", children: n === "playing" || n === "finished" ? /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m342", _fgB: 1790697590735, className: "flex-1 flex flex-col", "data-fg-ce1m342": ":0:/src/app/components/ai/AIProducts.tsx:893:13:38791:554:e:div:xtxtxtxtxtx", children: [ 11098 e === 0 && /* @__PURE__ */ i(a, { _fgT: xf, _fgS: "ce1m344", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m344": ":0:/src/app/components/ai/AIProducts.tsx:894:31:38874:49:e:RiderAssistMockup::::::BB8M" }), 11099 e === 1 && /* @__PURE__ */ i(a, { _fgT: _f, _fgS: "ce1m346", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m346": ":0:/src/app/components/ai/AIProducts.tsx:895:31:38955:48:e:CallAssistMockup::::::BMKQ" }), 11100 e === 2 && /* @__PURE__ */ i(a, { _fgT: bf, _fgS: "ce1m348", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m348": ":0:/src/app/components/ai/AIProducts.tsx:896:31:39035:47:e:AnalyticsMockup::::::ECgr" }), 11101 e === 3 && /* @__PURE__ */ i(a, { _fgT: vf, _fgS: "ce1m350", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m350": ":0:/src/app/components/ai/AIProducts.tsx:897:31:39114:50:e:DriverAssistMockup::::::B6Mm" }), 11102 e === 4 && /* @__PURE__ */ i(a, { _fgT: yf, _fgS: "ce1m352", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m352": ":0:/src/app/components/ai/AIProducts.tsx:898:31:39196:46:e:SurveyAIMockup::::::BrZN" }),
11103 e === 5 && /* @__PURE__ */ i(a, { _fgT: wf, _fgS: "ce1m354", _fgB: 1790697590735, onComplete: l, "data-fg-ce1m354": ":0:/src/app/components/ai/AIProducts.tsx:899:31:39274:51:e:SmartDispatchMockup::::::BgrO" }) 11104 ] }, L) : /* @__PURE__ */ i(a, { _fgT: Bf, _fgS: "ce1m355", _fgB: 1790697590735, index: e, "data-fg-ce1m355": ":0:/src/app/components/ai/AIProducts.tsx:902:13:39374:35:e:MockupPlaceholder::::::Bsgu" }) }) 11105 ] }), 11106 n === "finished" && /* @__PURE__ */ c( 11107 a, 11108 { 11109 _fgT: m.button, 11110 _fgS: "ce1m358", 11111 _fgB: 1790697590735, 11112 initial: { opacity: 0, y: 8 }, 11113 animate: { opacity: 1, y: 0 }, 11114 transition: { duration: 0.3 }, 11115 onClick: g, 11116 className: "flex items-center justify-center gap-2 px-5 py-2.5 rounded-xl bg-[#0B1B2B] border border-[#1E293B] text-[#94A3B8] hover:text-white hover:border-[#2D6BE4]/40 transition-all duration-300 text-[13px] font-bold cursor-pointer mx-auto", 11117 "data-fg-ce1m358": ":0:/src/app/components/ai/AIProducts.tsx:909:9:39527:513:e:motion.button:et", 11118 children: [
11119 /* @__PURE__ */ i(a, { _fgT: ei, _fgS: "ce1m359", _fgB: 1790697590735, size: 14, "data-fg-ce1m359": ":0:node_modules/lucide-react:916:11:39970:23:e:RotateCcw::::::D1GU" }), 11120 "Replay Demo" 11121 ] 11122 } 11123 ) 11124 ] 11125 } 11126 ); 11127} 11128function Bf({ index: t }) { 11129 const s = [ 11130 { icon: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "ce1m361", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m361": ":0:node_modules/lucide-react:926:13:40160:51:e:Smartphone::::::DHxb" }), title: "RiderAssist AI", subtitle: "Rider Session", color: "bg-[#E87722]/20" }, 11131 { icon: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "ce1m362", _fgB: 1790697590735, size: 14, className: "text-[#2D6BE4]", "data-fg-ce1m362": ":0:node_modules/lucide-react:927:13:40305:46:e:Phone::::::DmpI" }), title: "CallAssist AI", subtitle: "Live Call Transcript", color: "bg-[#2D6BE4]/20" }, 11132 { icon: /* @__PURE__ */ i(a, { _fgT: y1, _fgS: "ce1m363", _fgB: 1790697590735, size: 14, className: "text-[#2D6BE4]", "data-fg-ce1m363": ":0:node_modules/lucide-react:928:13:40451:50:e:BarChart3::::::C2Ja" }), title: "Ops Dashboard", subtitle: "Today · Real-Time", color: "bg-[#2D6BE4]/20" }, 11133 { icon: /* @__PURE__ */ i(a, { _fgT: w1, _fgS: "ce1m364", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m364": ":0:node_modules/lucide-react:929:13:40598:50:e:CircleDot::::::CPqJ" }), title: "DriverAssist AI", subtitle: "Route 12 · Active Shift", color: "bg-[#E87722]/20" }, 11134 { icon: /* @__PURE__ */ i(a, { _fgT: T1, _fgS: "ce1m365", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m365": ":0:node_modules/lucide-react:930:13:40753:54:e:ClipboardList::::::CPfu" }), title: "Feedback Intelligence", subtitle: "Processing · 143 Responses Analyzed", color: "bg-[#E87722]/20" }, 11135 { icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "ce1m366", _fgB: 1790697590735, size: 14, className: "text-[#E87722]", "data-fg-ce1m366": ":0:node_modules/lucide-react:931:13:40930:44:e:Zap::::::Cp7" }), title: "SmartDispatch AI", subtitle: "Live Operations", color: "bg-[#E87722]/20" } 11136 ][t]; 11137 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m367", _fgB: 1790697590735, _fgD: !0, className: "flex flex-col gap-3 flex-1", "data-fg-ce1m367": ":0:/src/app/components/ai/AIProducts.tsx:936:5:41111:908:e:div:ete:1", children: [ 11138 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m368", _fgB: 1790697590735, className: "flex items-center gap-3 mb-2 pb-3 border-b border-white/5", "data-fg-ce1m368": ":0:/src/app/components/ai/AIProducts.tsx:937:7:41162:667:e:div:etete", children: [
11139 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m369", _fgB: 1790697590735, className: `w-8 h-8 rounded-full ${s.color} flex items-center justify-center`, "data-fg-ce1m369": ":0:/src/app/components/ai/AIProducts.tsx:938:9:41246:122:e:div:x", children: s.icon }), 11140 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m371", _fgB: 1790697590735, "data-fg-ce1m371": ":0:/src/app/components/ai/AIProducts.tsx:941:9:41377:194:e:div:ete", children: [ 11141 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m372", _fgB: 1790697590735, className: "text-white text-sm font-bold", "data-fg-ce1m372": ":0:/src/app/components/ai/AIProducts.tsx:942:11:41393:63:e:div:x", children: s.title }), 11142 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m374", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] uppercase tracking-wider", "data-fg-ce1m374": ":0:/src/app/components/ai/AIProducts.tsx:943:11:41467:89:e:div:x", children: s.subtitle }) 11143 ] }), 11144 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ce1m376", _fgB: 1790697590735, className: "ml-auto flex items-center gap-1.5", "data-fg-ce1m376": ":0:/src/app/components/ai/AIProducts.tsx:945:9:41580:236:e:div:ete", children: [
11145 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m377", _fgB: 1790697590735, className: "w-2 h-2 rounded-full bg-[#64748B]", "data-fg-ce1m377": ":0:/src/app/components/ai/AIProducts.tsx:946:11:41642:54:e:span" }), 11146 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ce1m378", _fgB: 1790697590735, className: "text-[#64748B] text-[10px] font-bold uppercase tracking-wider", "data-fg-ce1m378": ":0:/src/app/components/ai/AIProducts.tsx:947:11:41707:94:e:span:t", children: "Standby" }) 11147 ] }) 11148 ] }), 11149 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m380", _fgB: 1790697590735, className: "flex-1 flex items-center justify-center", "data-fg-ce1m380": ":0:/src/app/components/ai/AIProducts.tsx:950:7:41836:172:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ce1m381", _fgB: 1790697590735, className: "text-[#64748B]/50 text-xs uppercase tracking-widest", "data-fg-ce1m381": ":0:/src/app/components/ai/AIProducts.tsx:951:9:41902:93:e:div:t", children: "Scroll to activate" }) }) 11150 ] }); 11151} 11152function kf() { 11153 const [t, e] = j(0); 11154 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dbis4", _fgB: 1790697590751, _fgD: !0, className: "py-24 px-6 bg-white font-['DM_Sans']", "data-fg-dbis4": ":0:/src/app/components/ai/AIUseCases.tsx:16:5:681:1919:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis5", _fgB: 1790697590751, className: "max-w-[1280px] mx-auto", "data-fg-dbis5": ":0:/src/app/components/ai/AIUseCases.tsx:17:7:746:1839:e:div:etxtetxte", children: [ 11155 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis6", _fgB: 1790697590751, className: "text-center mb-12", "data-fg-dbis6": ":0:/src/app/components/ai/AIUseCases.tsx:18:9:795:396:e:div:ete", children: [
11156 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis7", _fgB: 1790697590751, className: "text-[#2B7AE8] text-xs font-bold tracking-[2.5px] uppercase mb-3", "data-fg-dbis7": ":0:/src/app/components/ai/AIUseCases.tsx:19:11:841:97:e:div:t", children: "BUILT FOR" }), 11157 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "dbis9", _fgB: 1790697590751, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-[#0B1B2B]", "data-fg-dbis9": ":0:/src/app/components/ai/AIUseCases.tsx:20:11:949:227:e:h2:te", children: [ 11158 "Agencies That Need ", 11159 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis11", _fgB: 1790697590751, className: "text-[#EFBB0F] italic", "data-fg-dbis11": ":0:/src/app/components/ai/AIUseCases.tsx:21:32:1094:66:e:span:t", children: "Results, Not Demos." }) 11160 ] }) 11161 ] }), 11162 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis14", _fgB: 1790697590751, className: "flex flex-wrap justify-center gap-2 mb-12", "data-fg-dbis14": ":0:/src/app/components/ai/AIUseCases.tsx:26:9:1225:917:e:div:x", children: [ 11163 { id: 0, label: "Paratransit", icon: /* @__PURE__ */ i(a, { _fgT: _2, _fgS: "dbis0", _fgB: 1790697590751, size: 16, "data-fg-dbis0": ":0:node_modules/lucide-react:9:42:312:27:e:Accessibility::::::DNxc" }), color: "blue", hex: "#2B7AE8" }, 11164 { id: 1, label: "Fixed Route", icon: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "dbis1", _fgB: 1790697590751, size: 16, "data-fg-dbis1": ":0:node_modules/lucide-react:10:42:415:23:e:Building2::::::DOEu" }), color: "amber", hex: "#EFBB0F" }, 11165 { id: 2, label: "NEMT", icon: /* @__PURE__ */ i(a, { _fgT: S1, _fgS: "dbis2", _fgB: 1790697590751, size: 16, "data-fg-dbis2": ":0:node_modules/lucide-react:11:35:508:17:e:Map::::::ELje" }), color: "green", hex: "#22C55E" }, 11166 { id: 3, label: "Microtransit", icon: /* @__PURE__ */ i(a, { _fgT: I3, _fgS: "dbis3", _fgB: 1790697590751, size: 16, "data-fg-dbis3": ":0:node_modules/lucide-react:12:43:603:20:e:Layers::::::U3Y" }), color: "purple", hex: "#8B5CF6" } 11167 ].map((r) => /* @__PURE__ */ c( 11168 a, 11169 { 11170 _fgT: "button", 11171 _fgS: "dbis16", 11172 _fgB: 1790697590751, 11173 onClick: () => e(r.id), 11174 className: `flex items-center gap-2.5 px-7 py-3.5 rounded-full border transition-all duration-300 font-semibold text-sm ${t === r.id ? "bg-[#0B1B2B] border-[#0B1B2B] text-white shadow-[0_4px_16px_rgba(11,27,43,0.2)]" : "bg-white border-[#D8E0EA] text-[#5A6A80] hover:border-[#8B9BB5] hover:text-[#0B1B2B]"}`, 11175 "data-fg-dbis16": ":0:/src/app/components/ai/AIUseCases.tsx:28:13:1328:785:e:button:xtxtx", 11176 children: [ 11177 r.icon, 11178 r.label, 11179 t === r.id && /* @__PURE__ */ i( 11180 a, 11181 { 11182 _fgT: "span", 11183 _fgS: "dbis20", 11184 _fgB: 1790697590751, 11185 className: "w-2 h-2 rounded-full ml-1", 11186 style: { backgroundColor: r.hex },
11187 "data-fg-dbis20": ":0:/src/app/components/ai/AIUseCases.tsx:40:17:1937:137:e:span" 11188 } 11189 ) 11190 ] 11191 }, 11192 r.id 11193 )) }), 11194 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis22", _fgB: 1790697590751, className: "min-h-[500px]", "data-fg-dbis22": ":0:/src/app/components/ai/AIUseCases.tsx:50:9:2183:389:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: pe, _fgS: "dbis23", _fgB: 1790697590751, mode: "wait", "data-fg-dbis23": ":0:node_modules/motion:51:11:2225:332:e:AnimatePresence:xtxtxtx:::::DAs4", children: [ 11195 t === 0 && /* @__PURE__ */ i(a, { _fgT: Af, _fgS: "dbis25", _fgB: 1790697590751, "data-fg-dbis25": ":0:/src/app/components/ai/AIUseCases.tsx:52:33:2287:38:e:PanelParatransit::::::DqUH" }, "paratransit"), 11196 t === 1 && /* @__PURE__ */ i(a, { _fgT: Nf, _fgS: "dbis27", _fgB: 1790697590751, "data-fg-dbis27": ":0:/src/app/components/ai/AIUseCases.tsx:53:33:2359:36:e:PanelFixedRoute::::::CBtf" }, "fixedroute"), 11197 t === 2 && /* @__PURE__ */ i(a, { _fgT: If, _fgS: "dbis29", _fgB: 1790697590751, "data-fg-dbis29": ":0:/src/app/components/ai/AIUseCases.tsx:54:33:2429:24:e:PanelNEMT::::::BiAC" }, "nemt"), 11198 t === 3 && /* @__PURE__ */ i(a, { _fgT: Pf, _fgS: "dbis31", _fgB: 1790697590751, "data-fg-dbis31": ":0:/src/app/components/ai/AIUseCases.tsx:55:33:2487:40:e:PanelMicrotransit::::::CT8P" }, "microtransit") 11199 ] }) }) 11200 ] }) }); 11201} 11202function Ve({ num: t, label: e, desc: s, colorClass: r }) { 11203 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis32", _fgB: 1790697590751, _fgD: !0, className: "flex items-start gap-4 p-5 bg-[#F7F9FC] rounded-xl border border-[#EEF2F7] hover:border-[#D8E0EA] transition-colors", "data-fg-dbis32": ":0:/src/app/components/ai/AIUseCases.tsx:67:5:2775:473:e:div:ete:1", children: [ 11204 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis33", _fgB: 1790697590751, className: `text-[22px] font-extrabold min-w-[64px] leading-tight ${r}`, "data-fg-dbis33": ":0:/src/app/components/ai/AIUseCases.tsx:68:7:2915:98:e:div:x", children: t }), 11205 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis35", _fgB: 1790697590751, className: "flex flex-col gap-0.5", "data-fg-dbis35": ":0:/src/app/components/ai/AIUseCases.tsx:69:7:3020:217:e:div:ete", children: [
11206 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis36", _fgB: 1790697590751, className: "text-[15px] font-bold text-[#0B1B2B]", "data-fg-dbis36": ":0:/src/app/components/ai/AIUseCases.tsx:70:9:3068:73:e:strong:x", children: e }), 11207 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis38", _fgB: 1790697590751, className: "text-[13px] leading-relaxed text-[#5A6A80]", "data-fg-dbis38": ":0:/src/app/components/ai/AIUseCases.tsx:71:9:3150:74:e:span:x", children: s }) 11208 ] }) 11209 ] }); 11210} 11211function z3({ children: t, glowColor: e, title: s, titleColor: r }) { 11212 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis40", _fgB: 1790697590751, _fgD: !0, className: "bg-[#0B1B2B] rounded-3xl p-9 relative overflow-hidden min-h-[400px] flex flex-col justify-center border border-[#1A2F45]", "data-fg-dbis40": ":0:/src/app/components/ai/AIUseCases.tsx:79:5:3424:675:e:div:xtetxtetc:1", children: [ 11213 /* @__PURE__ */ i( 11214 a, 11215 { 11216 _fgT: "div", 11217 _fgS: "dbis42", 11218 _fgB: 1790697590751, 11219 className: "absolute -top-20 -right-20 w-60 h-60 rounded-full opacity-[0.08] pointer-events-none", 11220 style: { backgroundColor: e }, 11221 "data-fg-dbis42": ":0:/src/app/components/ai/AIUseCases.tsx:81:7:3595:167:e:div" 11222 } 11223 ), 11224 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis44", _fgB: 1790697590751, className: "flex items-center gap-2.5 mb-6 relative z-10", "data-fg-dbis44": ":0:/src/app/components/ai/AIUseCases.tsx:87:7:3797:273:e:div:ete", children: [
11225 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis45", _fgB: 1790697590751, className: "w-2.5 h-2.5 rounded-full", style: { backgroundColor: r }, "data-fg-dbis45": ":0:/src/app/components/ai/AIUseCases.tsx:88:9:3868:84:e:div" }), 11226 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis46", _fgB: 1790697590751, className: "text-[13px] font-semibold text-[#8B9BB5] uppercase tracking-wider", "data-fg-dbis46": ":0:/src/app/components/ai/AIUseCases.tsx:89:9:3961:96:e:div:x", children: s }) 11227 ] }), 11228 t 11229 ] }); 11230} 11231function Af() { 11232 return /* @__PURE__ */ c( 11233 a, 11234 { 11235 _fgT: m.div, 11236 _fgS: "dbis49", 11237 _fgB: 1790697590751, 11238 _fgD: !0, 11239 initial: { opacity: 0, y: 12 }, 11240 animate: { opacity: 1, y: 0 }, 11241 exit: { opacity: 0, y: -12 }, 11242 transition: { duration: 0.4, ease: "easeOut" }, 11243 className: "grid grid-cols-1 lg:grid-cols-2 gap-12 items-center", 11244 "data-fg-dbis49": ":0:/src/app/components/ai/AIUseCases.tsx:101:5:4184:2713:e:motion.div:xtetxte:1", 11245 children: [ 11246 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis51", _fgB: 1790697590751, className: "py-2", "data-fg-dbis51": ":0:/src/app/components/ai/AIUseCases.tsx:109:7:4473:1428:e:div:etetete", children: [
11247 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis52", _fgB: 1790697590751, className: "text-[#2B7AE8] text-[11px] font-bold tracking-[2px] uppercase mb-3 flex items-center gap-2", "data-fg-dbis52": ":0:/src/app/components/ai/AIUseCases.tsx:110:9:4504:213:e:div:et", children: [ 11248 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis53", _fgB: 1790697590751, className: "w-6 h-0.5 bg-[#2B7AE8] rounded-full", "data-fg-dbis53": ":0:/src/app/components/ai/AIUseCases.tsx:111:11:4623:56:e:span" }), 11249 " PARATRANSIT OPERATIONS" 11250 ] }), 11251 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dbis55", _fgB: 1790697590751, className: "font-['DM_Serif_Display'] text-[32px] leading-tight text-[#0B1B2B] mb-7", "data-fg-dbis55": ":0:/src/app/components/ai/AIUseCases.tsx:113:9:4726:171:e:h3:t", children: "Booking Questions. Eligibility Calls. Ride Status at 6 AM." }), 11252 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis57", _fgB: 1790697590751, className: "flex flex-col gap-4 mb-8", "data-fg-dbis57": ":0:/src/app/components/ai/AIUseCases.tsx:117:9:4915:776:e:div:etete", children: [
11253 /* @__PURE__ */ i( 11254 a, 11255 { 11256 _fgT: Ve, 11257 _fgS: "dbis58", 11258 _fgB: 1790697590751, 11259 num: "Zero", 11260 label: "Voicemail dead-ends", 11261 desc: "Riders calling before or after office hours get real answers, not a recording", 11262 colorClass: "text-[#2B7AE8]", 11263 "data-fg-dbis58": ":0:/src/app/components/ai/AIUseCases.tsx:118:11:4968:226:e:ImpactRow::::::DWXC" 11264 } 11265 ), 11266 /* @__PURE__ */ i( 11267 a, 11268 { 11269 _fgT: Ve, 11270 _fgS: "dbis59", 11271 _fgB: 1790697590751, 11272 num: "Auto", 11273 label: "Booking handling", 11274 desc: "Routine trip changes processed by AI without tying up your dispatch staff", 11275 colorClass: "text-[#2B7AE8]", 11276 "data-fg-dbis59": ":0:/src/app/components/ai/AIUseCases.tsx:124:11:5205:219:e:ImpactRow::::::DWXC" 11277 } 11278 ),
11279 /* @__PURE__ */ i( 11280 a, 11281 { 11282 _fgT: Ve, 11283 _fgS: "dbis60", 11284 _fgB: 1790697590751, 11285 num: "Accurate", 11286 label: "Eligibility & policy", 11287 desc: "AI trained on your agency's specific rules so riders get correct information every time", 11288 colorClass: "text-[#2B7AE8]", 11289 "data-fg-dbis60": ":0:/src/app/components/ai/AIUseCases.tsx:130:11:5435:241:e:ImpactRow::::::DWXC" 11290 } 11291 ) 11292 ] }), 11293 /* @__PURE__ */ c(a, { _fgT: "a", _fgS: "dbis61", _fgB: 1790697590751, href: "#", className: "inline-flex items-center gap-2 text-[15px] font-bold text-[#2B7AE8] hover:gap-3 transition-all", "data-fg-dbis61": ":0:/src/app/components/ai/AIUseCases.tsx:138:9:5701:187:e:a:te", children: [ 11294 "Explore Paratransit ", 11295 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dbis63", _fgB: 1790697590751, size: 16, "data-fg-dbis63": ":0:node_modules/lucide-react:139:31:5851:24:e:ArrowRight::::::s5N" }) 11296 ] }) 11297 ] }),
11298 /* @__PURE__ */ i(a, { _fgT: z3, _fgS: "dbis65", _fgB: 1790697590751, glowColor: "#2B7AE8", title: "Live Call Feed", titleColor: "#2B7AE8", "data-fg-dbis65": ":0:/src/app/components/ai/AIUseCases.tsx:144:7:5953:926:e:PanelVisual:e:::::VBy", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis66", _fgB: 1790697590751, className: "flex flex-col gap-2.5 relative z-10", "data-fg-dbis66": ":0:/src/app/components/ai/AIUseCases.tsx:145:9:6039:819:e:div:etetetete", children: [ 11299 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis67", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis68", _fgB: 1790697590751, "data-fg-dbis68": ":0:/src/app/components/ai/AIUseCases.tsx:146:45:6137:64:e:span:et", children: [ 11300 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis69", _fgB: 1790697590751, "data-fg-dbis69": ":0:/src/app/components/ai/AIUseCases.tsx:146:51:6143:36:e:strong:t", children: "Ride status inquiry" }), 11301 " resolved by AI" 11302 ] }), time: "12s ago", color: "bg-[#22C55E]", "data-fg-dbis67": ":0:/src/app/components/ai/AIUseCases.tsx:146:11:6103:138:e:FeedItem::::::Ckgx" }),
11303 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis72", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis73", _fgB: 1790697590751, "data-fg-dbis73": ":0:/src/app/components/ai/AIUseCases.tsx:147:45:6286:71:e:span:et", children: [ 11304 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis74", _fgB: 1790697590751, "data-fg-dbis74": ":0:/src/app/components/ai/AIUseCases.tsx:147:51:6292:34:e:strong:t", children: "Trip cancellation" }), 11305 " processed automatically" 11306 ] }), time: "34s ago", color: "bg-[#22C55E]", "data-fg-dbis72": ":0:/src/app/components/ai/AIUseCases.tsx:147:11:6252:145:e:FeedItem::::::Ckgx" }), 11307 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis77", _fgB: 1790697590751, status: "active", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis78", _fgB: 1790697590751, "data-fg-dbis78": ":0:/src/app/components/ai/AIUseCases.tsx:148:43:6440:62:e:span:et", children: [ 11308 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis79", _fgB: 1790697590751, "data-fg-dbis79": ":0:/src/app/components/ai/AIUseCases.tsx:148:49:6446:37:e:strong:t", children: "Eligibility question" }), 11309 " in progress" 11310 ] }), time: "now", color: "bg-[#2B7AE8]", "data-fg-dbis77": ":0:/src/app/components/ai/AIUseCases.tsx:148:11:6408:130:e:FeedItem::::::Ckgx" }),
11311 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis82", _fgB: 1790697590751, status: "transferred", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis83", _fgB: 1790697590751, "data-fg-dbis83": ":0:/src/app/components/ai/AIUseCases.tsx:149:48:6586:66:e:span:et", children: [ 11312 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis84", _fgB: 1790697590751, "data-fg-dbis84": ":0:/src/app/components/ai/AIUseCases.tsx:149:54:6592:32:e:strong:t", children: "Complaint filed" }), 11313 " transferred to agent" 11314 ] }), time: "1m ago", color: "bg-[#EFBB0F]", "data-fg-dbis82": ":0:/src/app/components/ai/AIUseCases.tsx:149:11:6549:142:e:FeedItem::::::Ckgx" }), 11315 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis87", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis88", _fgB: 1790697590751, "data-fg-dbis88": ":0:/src/app/components/ai/AIUseCases.tsx:150:45:6736:68:e:span:et", children: [ 11316 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis89", _fgB: 1790697590751, "data-fg-dbis89": ":0:/src/app/components/ai/AIUseCases.tsx:150:51:6742:34:e:strong:t", children: "Booking confirmed" }), 11317 " for tomorrow 8:45 AM" 11318 ] }), time: "2m ago", color: "bg-[#22C55E]", "data-fg-dbis87": ":0:/src/app/components/ai/AIUseCases.tsx:150:11:6702:141:e:FeedItem::::::Ckgx" }) 11319 ] }) }) 11320 ] 11321 } 11322 ); 11323} 11324function Nf() { 11325 return /* @__PURE__ */ c( 11326 a, 11327 { 11328 _fgT: m.div, 11329 _fgS: "dbis92", 11330 _fgB: 1790697590751, 11331 _fgD: !0, 11332 initial: { opacity: 0, y: 12 }, 11333 animate: { opacity: 1, y: 0 }, 11334 exit: { opacity: 0, y: -12 }, 11335 transition: { duration: 0.4, ease: "easeOut" }, 11336 className: "grid grid-cols-1 lg:grid-cols-2 gap-12 items-center", 11337 "data-fg-dbis92": ":0:/src/app/components/ai/AIUseCases.tsx:161:5:6981:2574:e:motion.div:ete:1", 11338 children: [
11339 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis93", _fgB: 1790697590751, className: "py-2", "data-fg-dbis93": ":0:/src/app/components/ai/AIUseCases.tsx:168:7:7243:1470:e:div:etetete", children: [ 11340 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis94", _fgB: 1790697590751, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase mb-3 flex items-center gap-2", "data-fg-dbis94": ":0:/src/app/components/ai/AIUseCases.tsx:169:9:7274:213:e:div:et", children: [ 11341 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis95", _fgB: 1790697590751, className: "w-6 h-0.5 bg-[#EFBB0F] rounded-full", "data-fg-dbis95": ":0:/src/app/components/ai/AIUseCases.tsx:170:11:7393:56:e:span" }), 11342 " FIXED ROUTE OPERATIONS" 11343 ] }), 11344 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dbis97", _fgB: 1790697590751, className: "font-['DM_Serif_Display'] text-[32px] leading-tight text-[#0B1B2B] mb-7", "data-fg-dbis97": ":0:/src/app/components/ai/AIUseCases.tsx:172:9:7496:173:e:h3:t", children: "High Volume. Peak Surges. Riders Who Expect Instant Answers." }),
11345 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis99", _fgB: 1790697590751, className: "flex flex-col gap-4 mb-8", "data-fg-dbis99": ":0:/src/app/components/ai/AIUseCases.tsx:176:9:7687:816:e:div:etete", children: [ 11346 /* @__PURE__ */ i( 11347 a, 11348 { 11349 _fgT: Ve, 11350 _fgS: "dbis100", 11351 _fgB: 1790697590751, 11352 num: "24/7", 11353 label: "Voice AI coverage", 11354 desc: "Schedule, route, and fare inquiries answered around the clock without staffing after-hours shifts", 11355 colorClass: "text-[#EFBB0F]", 11356 "data-fg-dbis100": ":0:/src/app/components/ai/AIUseCases.tsx:177:11:7740:244:e:ImpactRow::::::DWXC" 11357 } 11358 ), 11359 /* @__PURE__ */ i( 11360 a, 11361 { 11362 _fgT: Ve, 11363 _fgS: "dbis101", 11364 _fgB: 1790697590751, 11365 num: "3â4x", 11366 label: "Surge capacity", 11367 desc: "Detour and disruption call spikes absorbed instantly without pulling agents from other work", 11368 colorClass: "text-[#EFBB0F]", 11369 "data-fg-dbis101": ":0:/src/app/components/ai/AIUseCases.tsx:183:11:7995:235:e:ImpactRow::::::DWXC" 11370 } 11371 ),
11372 /* @__PURE__ */ i( 11373 a, 11374 { 11375 _fgT: Ve, 11376 _fgS: "dbis102", 11377 _fgB: 1790697590751, 11378 num: "Routeâlevel", 11379 label: "Sentiment tracking", 11380 desc: "See which routes generate the most complaints and what riders are actually saying about them", 11381 colorClass: "text-[#EFBB0F]", 11382 "data-fg-dbis102": ":0:/src/app/components/ai/AIUseCases.tsx:189:11:8241:247:e:ImpactRow::::::DWXC" 11383 } 11384 ) 11385 ] }), 11386 /* @__PURE__ */ c(a, { _fgT: "a", _fgS: "dbis103", _fgB: 1790697590751, href: "#", className: "inline-flex items-center gap-2 text-[15px] font-bold text-[#EFBB0F] hover:gap-3 transition-all", "data-fg-dbis103": ":0:/src/app/components/ai/AIUseCases.tsx:197:9:8513:187:e:a:te", children: [ 11387 "Explore Fixed Route ", 11388 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dbis105", _fgB: 1790697590751, size: 16, "data-fg-dbis105": ":0:node_modules/lucide-react:198:31:8663:24:e:ArrowRight::::::s5N" }) 11389 ] }) 11390 ] }),
11391 /* @__PURE__ */ c(a, { _fgT: z3, _fgS: "dbis106", _fgB: 1790697590751, glowColor: "#EFBB0F", title: "Live Call Dashboard", titleColor: "#EFBB0F", "data-fg-dbis106": ":0:/src/app/components/ai/AIUseCases.tsx:202:7:8721:816:e:PanelVisual:ete:::::VBy", children: [ 11392 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis107", _fgB: 1790697590751, className: "grid grid-cols-2 gap-3 mb-5 relative z-10", "data-fg-dbis107": ":0:/src/app/components/ai/AIUseCases.tsx:203:9:8812:384:e:div:etetete", children: [ 11393 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis108", _fgB: 1790697590751, val: "847", label: "Calls Today", color: "text-[#EFBB0F]", "data-fg-dbis108": ":0:/src/app/components/ai/AIUseCases.tsx:204:11:8882:67:e:MetricCard::::::DX92" }), 11394 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis109", _fgB: 1790697590751, val: "86%", label: "AI Resolved", color: "text-[#22C55E]", "data-fg-dbis109": ":0:/src/app/components/ai/AIUseCases.tsx:205:11:8960:67:e:MetricCard::::::DX92" }), 11395 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis110", _fgB: 1790697590751, val: "1.8s", label: "Avg Answer", color: "text-[#EFBB0F]", "data-fg-dbis110": ":0:/src/app/components/ai/AIUseCases.tsx:206:11:9038:67:e:MetricCard::::::DX92" }),
11396 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis111", _fgB: 1790697590751, val: "12", label: "Live Calls", color: "text-[#2B7AE8]", "data-fg-dbis111": ":0:/src/app/components/ai/AIUseCases.tsx:207:11:9116:65:e:MetricCard::::::DX92" }) 11397 ] }), 11398 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis112", _fgB: 1790697590751, className: "flex flex-col gap-2.5 relative z-10", "data-fg-dbis112": ":0:/src/app/components/ai/AIUseCases.tsx:209:9:9205:311:e:div:etete", children: [ 11399 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis113", _fgB: 1790697590751, label: "Schedules", pct: 72, display: "38%", color: "bg-[#EFBB0F]", "data-fg-dbis113": ":0:/src/app/components/ai/AIUseCases.tsx:210:11:9269:72:e:BarRow::::::Catp" }), 11400 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis114", _fgB: 1790697590751, label: "Detours", pct: 48, display: "24%", color: "bg-[#EFBB0F]", "data-fg-dbis114": ":0:/src/app/components/ai/AIUseCases.tsx:211:11:9352:70:e:BarRow::::::Catp" }), 11401 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis115", _fgB: 1790697590751, label: "Fares", pct: 28, display: "14%", color: "bg-[#22C55E]", "data-fg-dbis115": ":0:/src/app/components/ai/AIUseCases.tsx:212:11:9433:68:e:BarRow::::::Catp" }) 11402 ] }) 11403 ] }) 11404 ] 11405 } 11406 ); 11407} 11408function If() { 11409 return /* @__PURE__ */ c( 11410 a, 11411 { 11412 _fgT: m.div, 11413 _fgS: "dbis116", 11414 _fgB: 1790697590751, 11415 _fgD: !0, 11416 initial: { opacity: 0, y: 12 }, 11417 animate: { opacity: 1, y: 0 }, 11418 exit: { opacity: 0, y: -12 }, 11419 transition: { duration: 0.4, ease: "easeOut" }, 11420 className: "grid grid-cols-1 lg:grid-cols-2 gap-12 items-center", 11421 "data-fg-dbis116": ":0:/src/app/components/ai/AIUseCases.tsx:223:5:9626:2670:e:motion.div:ete:1", 11422 children: [
11423 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis117", _fgB: 1790697590751, className: "py-2", "data-fg-dbis117": ":0:/src/app/components/ai/AIUseCases.tsx:230:7:9888:1425:e:div:etetete", children: [ 11424 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis118", _fgB: 1790697590751, className: "text-[#22C55E] text-[11px] font-bold tracking-[2px] uppercase mb-3 flex items-center gap-2", "data-fg-dbis118": ":0:/src/app/components/ai/AIUseCases.tsx:231:9:9919:206:e:div:et", children: [ 11425 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis119", _fgB: 1790697590751, className: "w-6 h-0.5 bg-[#22C55E] rounded-full", "data-fg-dbis119": ":0:/src/app/components/ai/AIUseCases.tsx:232:11:10038:56:e:span" }), 11426 " NEMT OPERATIONS" 11427 ] }), 11428 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dbis121", _fgB: 1790697590751, className: "font-['DM_Serif_Display'] text-[32px] leading-tight text-[#0B1B2B] mb-7", "data-fg-dbis121": ":0:/src/app/components/ai/AIUseCases.tsx:234:9:10134:170:e:h3:t", children: "Authorization Holds. Late Pickups. Riders Who Can't Wait." }),
11429 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis123", _fgB: 1790697590751, className: "flex flex-col gap-4 mb-8", "data-fg-dbis123": ":0:/src/app/components/ai/AIUseCases.tsx:238:9:10322:788:e:div:etete", children: [ 11430 /* @__PURE__ */ i( 11431 a, 11432 { 11433 _fgT: Ve, 11434 _fgS: "dbis124", 11435 _fgB: 1790697590751, 11436 num: "Zero", 11437 label: "Missed authorizations", 11438 desc: "AI tracks authorization windows and alerts dispatch before a trip is at risk", 11439 colorClass: "text-[#22C55E]", 11440 "data-fg-dbis124": ":0:/src/app/components/ai/AIUseCases.tsx:239:11:10375:227:e:ImpactRow::::::DWXC" 11441 } 11442 ), 11443 /* @__PURE__ */ i( 11444 a, 11445 { 11446 _fgT: Ve, 11447 _fgS: "dbis125", 11448 _fgB: 1790697590751, 11449 num: "Auto", 11450 label: "Trip confirmations", 11451 desc: "Confirmation calls and ride reminders sent automatically so riders are ready at pickup", 11452 colorClass: "text-[#22C55E]", 11453 "data-fg-dbis125": ":0:/src/app/components/ai/AIUseCases.tsx:245:11:10613:234:e:ImpactRow::::::DWXC" 11454 } 11455 ),
11456 /* @__PURE__ */ i( 11457 a, 11458 { 11459 _fgT: Ve, 11460 _fgS: "dbis126", 11461 _fgB: 1790697590751, 11462 num: "Accurate", 11463 label: "Broker compliance", 11464 desc: "Every trip logged with timestamps, notes, and outcomes for broker reporting and audits", 11465 colorClass: "text-[#22C55E]", 11466 "data-fg-dbis126": ":0:/src/app/components/ai/AIUseCases.tsx:251:11:10858:237:e:ImpactRow::::::DWXC" 11467 } 11468 ) 11469 ] }), 11470 /* @__PURE__ */ c(a, { _fgT: "a", _fgS: "dbis127", _fgB: 1790697590751, href: "#", className: "inline-flex items-center gap-2 text-[15px] font-bold text-[#22C55E] hover:gap-3 transition-all", "data-fg-dbis127": ":0:/src/app/components/ai/AIUseCases.tsx:259:9:11120:180:e:a:te", children: [ 11471 "Explore NEMT ", 11472 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dbis129", _fgB: 1790697590751, size: 16, "data-fg-dbis129": ":0:node_modules/lucide-react:260:24:11263:24:e:ArrowRight::::::s5N" }) 11473 ] }) 11474 ] }),
11475 /* @__PURE__ */ i(a, { _fgT: z3, _fgS: "dbis130", _fgB: 1790697590751, glowColor: "#22C55E", title: "Live Trip Feed", titleColor: "#22C55E", "data-fg-dbis130": ":0:/src/app/components/ai/AIUseCases.tsx:264:7:11321:957:e:PanelVisual:e:::::VBy", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis131", _fgB: 1790697590751, className: "flex flex-col gap-2.5 relative z-10", "data-fg-dbis131": ":0:/src/app/components/ai/AIUseCases.tsx:265:9:11407:850:e:div:etetetete", children: [ 11476 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis132", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis133", _fgB: 1790697590751, "data-fg-dbis133": ":0:/src/app/components/ai/AIUseCases.tsx:266:45:11505:68:e:span:et", children: [ 11477 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis134", _fgB: 1790697590751, "data-fg-dbis134": ":0:/src/app/components/ai/AIUseCases.tsx:266:51:11511:40:e:strong:t", children: "Authorization confirmed" }), 11478 " for Trip #4821" 11479 ] }), time: "8s ago", color: "bg-[#22C55E]", "data-fg-dbis132": ":0:/src/app/components/ai/AIUseCases.tsx:266:11:11471:141:e:FeedItem::::::Ckgx" }),
11480 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis137", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis138", _fgB: 1790697590751, "data-fg-dbis138": ":0:/src/app/components/ai/AIUseCases.tsx:267:45:11657:71:e:span:et", children: [ 11481 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis139", _fgB: 1790697590751, "data-fg-dbis139": ":0:/src/app/components/ai/AIUseCases.tsx:267:51:11663:30:e:strong:t", children: "Reminder sent" }), 11482 " to rider â pickup in 30 min" 11483 ] }), time: "1m ago", color: "bg-[#22C55E]", "data-fg-dbis137": ":0:/src/app/components/ai/AIUseCases.tsx:267:11:11623:144:e:FeedItem::::::Ckgx" }), 11484 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis142", _fgB: 1790697590751, status: "active", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis143", _fgB: 1790697590751, "data-fg-dbis143": ":0:/src/app/components/ai/AIUseCases.tsx:268:43:11810:61:e:span:et", children: [ 11485 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis144", _fgB: 1790697590751, "data-fg-dbis144": ":0:/src/app/components/ai/AIUseCases.tsx:268:49:11816:36:e:strong:t", children: "Broker verification" }), 11486 " in progress" 11487 ] }), time: "now", color: "bg-[#2B7AE8]", "data-fg-dbis142": ":0:/src/app/components/ai/AIUseCases.tsx:268:11:11778:129:e:FeedItem::::::Ckgx" }),
11488 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis147", _fgB: 1790697590751, status: "transferred", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis148", _fgB: 1790697590751, "data-fg-dbis148": ":0:/src/app/components/ai/AIUseCases.tsx:269:48:11955:89:e:span:et", children: [ 11489 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis149", _fgB: 1790697590751, "data-fg-dbis149": ":0:/src/app/components/ai/AIUseCases.tsx:269:54:11961:36:e:strong:t", children: "Late pickup flagged" }), 11490 " on Trip #4817 â transferred to dispatch" 11491 ] }), time: "3m ago", color: "bg-[#EFBB0F]", "data-fg-dbis147": ":0:/src/app/components/ai/AIUseCases.tsx:269:11:11918:165:e:FeedItem::::::Ckgx" }), 11492 /* @__PURE__ */ i(a, { _fgT: Qe, _fgS: "dbis152", _fgB: 1790697590751, status: "resolved", text: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dbis153", _fgB: 1790697590751, "data-fg-dbis153": ":0:/src/app/components/ai/AIUseCases.tsx:270:45:12128:75:e:span:et", children: [ 11493 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "dbis154", _fgB: 1790697590751, "data-fg-dbis154": ":0:/src/app/components/ai/AIUseCases.tsx:270:51:12134:31:e:strong:t", children: "Trip completed" }), 11494 " â outcome logged automatically" 11495 ] }), time: "5m ago", color: "bg-[#22C55E]", "data-fg-dbis152": ":0:/src/app/components/ai/AIUseCases.tsx:270:11:12094:148:e:FeedItem::::::Ckgx" }) 11496 ] }) }) 11497 ] 11498 } 11499 ); 11500} 11501function Pf() { 11502 return /* @__PURE__ */ c( 11503 a, 11504 { 11505 _fgT: m.div, 11506 _fgS: "dbis157", 11507 _fgB: 1790697590751, 11508 _fgD: !0, 11509 initial: { opacity: 0, y: 12 }, 11510 animate: { opacity: 1, y: 0 }, 11511 exit: { opacity: 0, y: -12 }, 11512 transition: { duration: 0.4, ease: "easeOut" }, 11513 className: "grid grid-cols-1 lg:grid-cols-2 gap-12 items-center", 11514 "data-fg-dbis157": ":0:/src/app/components/ai/AIUseCases.tsx:281:5:12383:2412:e:motion.div:ete:1", 11515 children: [
11516 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis158", _fgB: 1790697590751, className: "py-2", "data-fg-dbis158": ":0:/src/app/components/ai/AIUseCases.tsx:288:7:12645:1468:e:div:etetete", children: [ 11517 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis159", _fgB: 1790697590751, className: "text-[#8B5CF6] text-[11px] font-bold tracking-[2px] uppercase mb-3 flex items-center gap-2", "data-fg-dbis159": ":0:/src/app/components/ai/AIUseCases.tsx:289:9:12676:214:e:div:et", children: [ 11518 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis160", _fgB: 1790697590751, className: "w-6 h-0.5 bg-[#8B5CF6] rounded-full", "data-fg-dbis160": ":0:/src/app/components/ai/AIUseCases.tsx:290:11:12795:56:e:span" }), 11519 " MICROTRANSIT OPERATIONS" 11520 ] }), 11521 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dbis162", _fgB: 1790697590751, className: "font-['DM_Serif_Display'] text-[32px] leading-tight text-[#0B1B2B] mb-7", "data-fg-dbis162": ":0:/src/app/components/ai/AIUseCases.tsx:292:9:12899:165:e:h3:t", children: "On-Demand. Dynamic Routes. Riders Who Expect It Now." }),
11522 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis164", _fgB: 1790697590751, className: "flex flex-col gap-4 mb-8", "data-fg-dbis164": ":0:/src/app/components/ai/AIUseCases.tsx:296:9:13082:820:e:div:etete", children: [ 11523 /* @__PURE__ */ i( 11524 a, 11525 { 11526 _fgT: Ve, 11527 _fgS: "dbis165", 11528 _fgB: 1790697590751, 11529 num: "Realâtime", 11530 label: "Demand response", 11531 desc: "RiderAssist AI handles booking and trip updates for on-demand trips without dispatcher intervention", 11532 colorClass: "text-[#8B5CF6]", 11533 "data-fg-dbis165": ":0:/src/app/components/ai/AIUseCases.tsx:297:11:13135:249:e:ImpactRow::::::DWXC" 11534 } 11535 ), 11536 /* @__PURE__ */ i( 11537 a, 11538 { 11539 _fgT: Ve, 11540 _fgS: "dbis166", 11541 _fgB: 1790697590751, 11542 num: "Zero", 11543 label: "Dead zones", 11544 desc: "Riders in flex zones and low-coverage areas get the same AI-powered support as any fixed route", 11545 colorClass: "text-[#8B5CF6]", 11546 "data-fg-dbis166": ":0:/src/app/components/ai/AIUseCases.tsx:303:11:13395:234:e:ImpactRow::::::DWXC" 11547 } 11548 ),
11549 /* @__PURE__ */ i( 11550 a, 11551 { 11552 _fgT: Ve, 11553 _fgS: "dbis167", 11554 _fgB: 1790697590751, 11555 num: "Auto", 11556 label: "Zone optimization signals", 11557 desc: "SurveyAI and AnalyticsAI surface demand patterns to inform zone adjustments and fleet sizing", 11558 colorClass: "text-[#8B5CF6]", 11559 "data-fg-dbis167": ":0:/src/app/components/ai/AIUseCases.tsx:309:11:13640:247:e:ImpactRow::::::DWXC" 11560 } 11561 ) 11562 ] }), 11563 /* @__PURE__ */ c(a, { _fgT: "a", _fgS: "dbis168", _fgB: 1790697590751, href: "#", className: "inline-flex items-center gap-2 text-[15px] font-bold text-[#8B5CF6] hover:gap-3 transition-all", "data-fg-dbis168": ":0:/src/app/components/ai/AIUseCases.tsx:317:9:13912:188:e:a:te", children: [ 11564 "Explore Microtransit ", 11565 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dbis170", _fgB: 1790697590751, size: 16, "data-fg-dbis170": ":0:node_modules/lucide-react:318:32:14063:24:e:ArrowRight::::::s5N" }) 11566 ] }) 11567 ] }),
11568 /* @__PURE__ */ c(a, { _fgT: z3, _fgS: "dbis171", _fgB: 1790697590751, glowColor: "#8B5CF6", title: "Demand Overview", titleColor: "#8B5CF6", "data-fg-dbis171": ":0:/src/app/components/ai/AIUseCases.tsx:322:7:14121:656:e:PanelVisual:ete:::::VBy", children: [ 11569 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis172", _fgB: 1790697590751, className: "grid grid-cols-2 gap-3 mb-5 relative z-10", "data-fg-dbis172": ":0:/src/app/components/ai/AIUseCases.tsx:323:9:14208:231:e:div:ete", children: [ 11570 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis173", _fgB: 1790697590751, val: "1,104", label: "Trips Today", color: "text-[#8B5CF6]", "data-fg-dbis173": ":0:/src/app/components/ai/AIUseCases.tsx:324:11:14278:69:e:MetricCard::::::DX92" }), 11571 /* @__PURE__ */ i(a, { _fgT: dt, _fgS: "dbis174", _fgB: 1790697590751, val: "94%", label: "AI Handled", color: "text-[#22C55E]", "data-fg-dbis174": ":0:/src/app/components/ai/AIUseCases.tsx:325:11:14358:66:e:MetricCard::::::DX92" }) 11572 ] }), 11573 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis175", _fgB: 1790697590751, className: "flex flex-col gap-2.5 relative z-10", "data-fg-dbis175": ":0:/src/app/components/ai/AIUseCases.tsx:327:9:14448:308:e:div:etete", children: [
11574 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis176", _fgB: 1790697590751, label: "Zone A", pct: 65, display: "48%", color: "bg-[#8B5CF6]", "data-fg-dbis176": ":0:/src/app/components/ai/AIUseCases.tsx:328:11:14512:69:e:BarRow::::::Catp" }), 11575 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis177", _fgB: 1790697590751, label: "Zone B", pct: 42, display: "31%", color: "bg-[#8B5CF6]", "data-fg-dbis177": ":0:/src/app/components/ai/AIUseCases.tsx:329:11:14592:69:e:BarRow::::::Catp" }), 11576 /* @__PURE__ */ i(a, { _fgT: Mt, _fgS: "dbis178", _fgB: 1790697590751, label: "Zone C", pct: 28, display: "21%", color: "bg-[#22C55E]", "data-fg-dbis178": ":0:/src/app/components/ai/AIUseCases.tsx:330:11:14672:69:e:BarRow::::::Catp" }) 11577 ] }) 11578 ] }) 11579 ] 11580 } 11581 ); 11582} 11583function dt({ val: t, label: e, color: s }) { 11584 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis179", _fgB: 1790697590751, _fgD: !0, className: "bg-[#122338] border border-white/5 rounded-xl p-4 text-center", "data-fg-dbis179": ":0:/src/app/components/ai/AIUseCases.tsx:341:5:14952:271:e:div:ete:1", children: [ 11585 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis180", _fgB: 1790697590751, className: `text-[28px] font-extrabold mb-0.5 leading-none ${s}`, "data-fg-dbis180": ":0:/src/app/components/ai/AIUseCases.tsx:342:7:15038:86:e:div:x", children: t }), 11586 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis182", _fgB: 1790697590751, className: "text-[11px] text-[#8B9BB5] uppercase tracking-wide", "data-fg-dbis182": ":0:/src/app/components/ai/AIUseCases.tsx:343:7:15131:81:e:div:x", children: e }) 11587 ] }); 11588} 11589function Mt({ label: t, pct: e, display: s, color: r }) { 11590 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis184", _fgB: 1790697590751, _fgD: !0, className: "flex items-center gap-3", "data-fg-dbis184": ":0:/src/app/components/ai/AIUseCases.tsx:350:5:15361:397:e:div:etete:1", children: [ 11591 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis185", _fgB: 1790697590751, className: "text-xs text-[#8B9BB5] w-[90px] min-w-[90px]", "data-fg-dbis185": ":0:/src/app/components/ai/AIUseCases.tsx:351:7:15409:77:e:span:x", children: t }), 11592 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis187", _fgB: 1790697590751, className: "flex-1 h-2 bg-white/5 rounded-full overflow-hidden", "data-fg-dbis187": ":0:/src/app/components/ai/AIUseCases.tsx:352:7:15493:169:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis188", _fgB: 1790697590751, className: `h-full rounded-full ${r}`, style: { width: `${e}%` }, "data-fg-dbis188": ":0:/src/app/components/ai/AIUseCases.tsx:353:9:15570:79:e:div" }) }), 11593 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dbis189", _fgB: 1790697590751, className: "text-xs font-bold text-white w-9 text-right", "data-fg-dbis189": ":0:/src/app/components/ai/AIUseCases.tsx:355:7:15669:78:e:span:x", children: s }) 11594 ] }); 11595} 11596function Qe({ status: t, text: e, time: s, color: r }) { 11597 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dbis191", _fgB: 1790697590751, _fgD: !0, className: "flex items-center gap-3 p-3.5 bg-[#122338] border border-white/5 rounded-lg", "data-fg-dbis191": ":0:/src/app/components/ai/AIUseCases.tsx:362:5:15905:342:e:div:etete:1", children: [ 11598 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis192", _fgB: 1790697590751, className: `w-2.5 h-2.5 min-w-[10px] rounded-full ${r}`, "data-fg-dbis192": ":0:/src/app/components/ai/AIUseCases.tsx:363:7:16005:68:e:div" }), 11599 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis193", _fgB: 1790697590751, className: "text-[13px] text-white/70 flex-1 leading-snug", "data-fg-dbis193": ":0:/src/app/components/ai/AIUseCases.tsx:364:7:16080:75:e:div:x", children: e }), 11600 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dbis195", _fgB: 1790697590751, className: "text-[11px] text-[#8B9BB5] whitespace-nowrap", "data-fg-dbis195": ":0:/src/app/components/ai/AIUseCases.tsx:365:7:16162:74:e:div:x", children: s }) 11601 ] }); 11602} 11603function Cf() { 11604 const { openContactModal: t } = Z(); 11605 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cbgq0", _fgB: 1790697590782, _fgD: !0, className: "py-24 px-6 bg-[#0B1B2B] text-center relative overflow-hidden font-['DM_Sans']", "data-fg-cbgq0": ":0:/src/app/components/
11605ai/AICTA.tsx:7:5:193:1180:e:section:ete:1", children: [ 11606 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cbgq1", _fgB: 1790697590782, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[400px] bg-[radial-gradient(ellipse,rgba(43,122,232,0.1)_0%,transparent_70%)] pointer-events-none", "data-fg-cbgq1": ":0:/src/app/components/ai/AICTA.tsx:8:7:299:189:e:div" }), 11607 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cbgq2", _fgB: 1790697590782, className: "max-w-[800px] mx-auto relative z-10", "data-fg-cbgq2": ":0:/src/app/components/ai/AICTA.tsx:10:7:502:856:e:div:etete", children: [ 11608 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cbgq3", _fgB: 1790697590782, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-white mb-6", "data-fg-cbgq3": ":0:/src/app/components/ai/AICTA.tsx:11:9:564:230:e:h2:te", children: [ 11609 "See TransitAI Handle ", 11610 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cbgq5", _fgB: 1790697590782, className: "text-[#EFBB0F] italic", "data-fg-cbgq5": ":0:/src/app/components/ai/AICTA.tsx:12:32:710:70:e:span:t", children: "Your Riders' Questions." }) 11611 ] }),
11612 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cbgq7", _fgB: 1790697590782, className: "text-[17px] text-[#8B9BB5] mb-10 max-w-[600px] mx-auto", "data-fg-cbgq7": ":0:/src/app/components/ai/AICTA.tsx:14:9:803:168:e:p:t", children: "We'll run a demo using your actual routes, schedules, and call categories." }), 11613 /* @__PURE__ */ c(a, { _fgT: "button", _fgS: "cbgq9", _fgB: 1790697590782, onClick: t, className: "inline-flex items-center gap-2.5 px-8 py-3.5 bg-[#2B7AE8] text-white rounded-xl text-[15px] font-semibold hover:bg-[#3D8EF7] transition-colors shadow-lg hover:shadow-blue-500/25 transform hover:-translate-y-1 duration-300 cursor-pointer", "data-fg-cbgq9": ":0:/src/app/components/ai/AICTA.tsx:18:9:989:356:e:button:te", children: [ 11614 "Schedule a Meeting ", 11615 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cbgq11", _fgB: 1790697590782, size: 18, "data-fg-cbgq11": ":0:node_modules/lucide-react:19:30:1303:24:e:ArrowRight::::::s5N" }) 11616 ] }) 11617 ] }) 11618 ] }); 11619} 11620function Ff() { 11621 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "vvw0", _fgB: 1790697589412, _fgD: !0, className: "min-h-screen bg-white relative", "data-fg-vvw0": ":0:/src/app/pages/AISolutionsPage.tsx:11:5:450:219:e:main:etetetetetxtete:1", children: [ 11622 /* @__PURE__ */ i(a, { _fgT: gf, _fgS: "vvw1", _fgB: 1790697589412, "data-fg-vvw1": ":0:/src/app/pages/AISolutionsPage.tsx:12:7:506:10:e:AIHero::::::BE2g" }), 11623 /* @__PURE__ */ i(a, { _fgT: Mf, _fgS: "vvw2", _fgB: 1790697589412, "data-fg-vvw2": ":0:/src/app/pages/AISolutionsPage.tsx:13:7:523:15:e:AIEcosystem::::::TQM" }), 11624 /* @__PURE__ */ i(a, { _fgT: uf, _fgS: "vvw3", _fgB: 1790697589412, "data-fg-vvw3": ":0:/src/app/pages/AISolutionsPage.tsx:14:7:545:13:e:AIProblem::::::DOXE" }), 11625 /* @__PURE__ */ i(a, { _fgT: mf, _fgS: "vvw4", _fgB: 1790697589412, "data-fg-vvw4": ":0:/src/app/pages/AISolutionsPage.tsx:15:7:565:14:e:AIProducts::::::BDkA" }), 11626 /* @__PURE__ */ i(a, { _fgT: kf, _fgS: "vvw5", _fgB: 1790697589412, "data-fg-vvw5": ":0:/src/app/pages/AISolutionsPage.tsx:16:7:586:14:e:AIUseCases::::::Re0" }), 11627 /* @__PURE__ */ i(a, { _fgT: Cf, _fgS: "vvw7", _fgB: 1790697589412, "data-fg-vvw7": ":0:/src/app/pages/AISolutionsPage.tsx:18:7:631:9:e:AICTA::::::DAIA" }), 11628 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "vvw8", _fgB: 1790697589412, "data-fg-vvw8": ":0:/src/app/pages/AISolutionsPage.tsx:19:7:647:10:e:Footer::::::B1Vv" }) 11629 ] }); 11630} 11631function Ef() { 11632 const { openContactModal: t } = Z(); 11633 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "wd00", _fgB: 1790697589901, _fgD: !0, className: "relative min-h-[90vh] flex items-center bg-slate-900 overflow-hidden", "data-fg-wd00": ":0:/src/app/components/drivigo/DrivigoHero.tsx:9:5:239:4602:e:section:xtete:1", children: [ 11634 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "wd02", _fgB: 1790697589901, className: "absolute inset-0 z-0", "data-fg-wd02": ":0:/src/app/components/drivigo/DrivigoHero.tsx:11:7:367:599:e:div:ete", children: [
11635 /* @__PURE__ */ i( 11636 a, 11637 { 11638 _fgT: "img", 11639 _fgS: "wd03", 11640 _fgB: 1790697589901, 11641 src: "https://images.unsplash.com/photo-1696334025376-cb8e411ea7ab?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx0cmFuc2l0JTIwYnVzJTIwdHJpdmVyJTIwdGFibGV0JTIwYXBwJTIwZGFzaGJvYXJkfGVufDF8fHx8MTc3MTAwNjc3OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 11642 alt: "Driver using Drivigo App", 11643 className: "w-full h-full object-cover opacity-30", 11644 "data-fg-wd03": ":0:/src/app/components/drivigo/DrivigoHero.tsx:12:9:414:430:e:img" 11645 } 11646 ), 11647 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd04", _fgB: 1790697589901, className: "absolute inset-0 bg-gradient-to-r from-slate-900 via-slate-900/80 to-transparent", "data-fg-wd04": ":0:/src/app/components/drivigo/DrivigoHero.tsx:17:9:853:100:e:div" }) 11648 ] }), 11649 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "wd05", _fgB: 1790697589901, className: "container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-wd05": ":0:/src/app/components/drivigo/DrivigoHero.tsx:20:7:974:3852:e:div:etxte", children: [
11650 /* @__PURE__ */ c( 11651 a, 11652 { 11653 _fgT: m.div, 11654 _fgS: "wd06", 11655 _fgB: 1790697589901, 11656 initial: { opacity: 0, x: -50 }, 11657 animate: { opacity: 1, x: 0 }, 11658 transition: { duration: 0.8 }, 11659 "data-fg-wd06": ":0:/src/app/components/drivigo/DrivigoHero.tsx:21:9:1077:1594:e:motion.div:etetete", 11660 children: [ 11661 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd07", _fgB: 1790697589901, className: "inline-block px-3 py-1 rounded-full bg-blue-500/20 border border-blue-400/30 text-blue-300 text-sm font-bold tracking-widest uppercase mb-6 backdrop-blur-sm", "data-fg-wd07": ":0:/src/app/components/drivigo/DrivigoHero.tsx:26:11:1234:214:e:div:t", children: "Driver App" }), 11662 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "wd09", _fgB: 1790697589901, className: "text-5xl md:text-7xl font-light text-white mb-6 font-[Space_Grotesk] leading-tight", "data-fg-wd09": ":0:/src/app/components/drivigo/DrivigoHero.tsx:29:11:1459:201:e:h1:tee", children: [ 11663 "Drivego: Transit, ",
11664 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "wd011", _fgB: 1790697589901, "data-fg-wd011": ":0:/src/app/components/drivigo/DrivigoHero.tsx:29:128:1576:6:e:br" }), 11665 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "wd012", _fgB: 1790697589901, className: "font-bold text-[#EFBB0F]", "data-fg-wd012": ":0:/src/app/components/drivigo/DrivigoHero.tsx:29:134:1582:73:e:span:t", children: "From the Driver's Seat." }) 11666 ] }), 11667 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "wd014", _fgB: 1790697589901, className: "text-xl text-slate-300 mb-8 leading-relaxed max-w-2xl", "data-fg-wd014": ":0:/src/app/components/drivigo/DrivigoHero.tsx:30:11:1671:486:e:p:t", children: "The dedicated mobile app that serves as the critical link between your transit drivers and the Dispatch 2.0 platform. Engineered for clarity, efficiency, and safety, Drivigo provides every tool a driver needs to execute their route flawlessly, manage their schedule, and communicate instantly with dispatch. It transforms the cab of every vehicle into a connected, intelligent workstation." }),
11668 /* @__PURE__ */ c( 11669 a, 11670 { 11671 _fgT: "button", 11672 _fgS: "wd016", 11673 _fgB: 1790697589901, 11674 onClick: t, 11675 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-[0_0_20px_rgba(0,86,179,0.5)] hover:shadow-[0_0_30px_rgba(0,86,179,0.7)] cursor-pointer", 11676 "data-fg-wd016": ":0:/src/app/components/drivigo/DrivigoHero.tsx:34:11:2179:470:e:button:te", 11677 children: [ 11678 "Request a Demo", 11679 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "wd018", _fgB: 1790697589901, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-wd018": ":0:node_modules/lucide-react:39:13:2546:83:e:ArrowRight::::::s5N" }) 11680 ] 11681 } 11682 ) 11683 ] 11684 } 11685 ), 11686 /* @__PURE__ */ i( 11687 a, 11688 { 11689 _fgT: m.div, 11690 _fgS: "wd020", 11691 _fgB: 1790697589901, 11692 initial: { opacity: 0, scale: 0.9 }, 11693 animate: { opacity: 1, scale: 1 }, 11694 transition: { delay: 0.3, duration: 0.8 }, 11695 className: "hidden lg:block relative", 11696 "data-fg-wd020": ":0:/src/app/components/drivigo/DrivigoHero.tsx:44:9:2746:2067:e:motion.div:xte", 11697 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "wd022", _fgB: 1790697589901, className: "relative rounded-3xl overflow-hidden border-8 border-slate-800 shadow-2xl bg-slate-800 aspect-[3/4] max-w-md mx-auto rotate-[-2deg] hover:rotate-0 transition-transform duration-700", "data-fg-wd022": ":0:/src/app/components/drivigo/DrivigoHero.tsx:51:11:3045:1746:e:div:etxtetxtete", children: [
11698 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd023", _fgB: 1790697589901, className: "absolute inset-0 bg-gradient-to-br from-slate-700 to-slate-900 flex items-center justify-center", "data-fg-wd023": ":0:/src/app/components/drivigo/DrivigoHero.tsx:52:14:3257:218:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "wd024", _fgB: 1790697589901, className: "text-slate-500 font-mono text-sm", "data-fg-wd024": ":0:/src/app/components/drivigo/DrivigoHero.tsx:53:17:3387:68:e:span:t", children: "UI Preview" }) }), 11699 /* @__PURE__ */ i( 11700 a, 11701 { 11702 _fgT: "img", 11703 _fgS: "wd027", 11704 _fgB: 1790697589901, 11705 src: "https://images.unsplash.com/photo-1696334025376-cb8e411ea7ab?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx0cmFuc2l0JTIwYnVzJTIwdHJpdmVyJTIwdGFibGV0JTIwYXBwJTIwZGFzaGJvYXJkfGVufDF8fHx8MTc3MTAwNjc3OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 11706 alt: "App Screen", 11707 className: "w-full h-full object-cover opacity-80 hover:opacity-100 transition-opacity duration-500", 11708 "data-fg-wd027": ":0:/src/app/components/drivigo/DrivigoHero.tsx:56:14:3556:486:e:img" 11709 } 11710 ),
11711 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "wd029", _fgB: 1790697589901, className: "absolute top-10 left-6 right-6 p-4 bg-white/10 backdrop-blur-md rounded-xl border border-white/20", "data-fg-wd029": ":0:/src/app/components/drivigo/DrivigoHero.tsx:63:14:4109:278:e:div:ete", children: [ 11712 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd030", _fgB: 1790697589901, className: "h-2 w-1/3 bg-white/40 rounded mb-2", "data-fg-wd030": ":0:/src/app/components/drivigo/DrivigoHero.tsx:64:16:4240:58:e:div:_" }), 11713 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd031", _fgB: 1790697589901, className: "h-2 w-1/2 bg-white/20 rounded", "data-fg-wd031": ":0:/src/app/components/drivigo/DrivigoHero.tsx:65:16:4314:53:e:div:_" }) 11714 ] }), 11715 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "wd032", _fgB: 1790697589901, className: "absolute bottom-10 left-6 right-6 p-4 bg-[#0056B3]/90 backdrop-blur-md rounded-xl border border-white/20", "data-fg-wd032": ":0:/src/app/components/drivigo/DrivigoHero.tsx:67:14:4401:373:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "wd033", _fgB: 1790697589901, className: "flex justify-between items-center text-white", "data-fg-wd033": ":0:/src/app/components/drivigo/DrivigoHero.tsx:68:16:4539:215:e:div:ete", children: [
11716 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "wd034", _fgB: 1790697589901, className: "font-bold", "data-fg-wd034": ":0:/src/app/components/drivigo/DrivigoHero.tsx:69:19:4620:44:e:span:t", children: "Next Stop" }), 11717 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "wd036", _fgB: 1790697589901, className: "text-sm opacity-80", "data-fg-wd036": ":0:/src/app/components/drivigo/DrivigoHero.tsx:70:19:4683:49:e:span:t", children: "2 min" }) 11718 ] }) }) 11719 ] }) 11720 } 11721 ) 11722 ] }) 11723 ] }); 11724} 11725const Rf = [ 11726 { 11727 icon: S1, 11728 title: "Real-Time Route Manifest & Turn-by-Turn Navigation", 11729 desc: "Provides the daily assignment including scheduled stops, passenger pickups and drop-offs, and dynamic turn-by-turn navigation to follow the optimal route.", 11730 benefit: "Reduces route confusion, minimizes missed stops, and ensures adherence to published schedules." 11731 }, 11732 { 11733 icon: Y7, 11734 title: "Instant Dispatch Communications", 11735 desc: "Two-way secure messaging and voice capabilities for instant communication with dispatch regarding delays, incidents, or route changes.", 11736 benefit: "Improves safety and incident response, and maintains constant operational awareness." 11737 }, 11738 { 11739 icon: Wc, 11740 title: "Pre- and Post-Trip Vehicle Inspections (DVIR)", 11741 desc: "Digital checklists for quick and comprehensive mandated vehicle inspections directly within the app. Submits reports instantly to maintenance.", 11742 benefit: "Ensures compliance, accelerates fault reporting, and reduces vehicle downtime." 11743 }, 11744 { 11745 icon: It, 11746 title: "Shift Management & Time Logging", 11747 desc: "Drivers securely log in, clock in and out for shifts and breaks, and view historical work hours.", 11748 benefit: "Simplifies payroll documentation and provides drivers with clear visibility into their schedule." 11749 }, 11750 { 11751 icon: Fd, 11752 title: "Real-Time Passenger & Trip Status Updates", 11753 desc: "Drivers mark trips and stops as completed and log no-shows or exceptions, which immediately updates the rider-facing app Transigo.", 11754 benefit: "Provides accurate real-time information to passengers, reducing confusion and support calls." 11755 }, 11756 { 11757 icon: H7, 11758 title: "Alerts and Notifications", 11759 desc: "Receives critical system alerts regarding weather, traffic incidents, or service disruptions directly from Dispatch 2.0.",
11760 benefit: "Enables proactive route adjustments and enhances driver safety." 11761 } 11762]; 11763function Df() { 11764 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bts10", _fgB: 1790697589906, _fgD: !0, className: "py-24 bg-white", "data-fg-bts10": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:52:5:2172:2126:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bts11", _fgB: 1790697589906, className: "max-w-7xl mx-auto px-6", "data-fg-bts11": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:53:7:2215:2068:e:div:ete", children: [ 11765 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bts12", _fgB: 1790697589906, className: "text-center mb-20", "data-fg-bts12": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:55:9:2273:543:e:div:e", children: /* @__PURE__ */ c( 11766 a, 11767 { 11768 _fgT: m.p, 11769 _fgS: "bts13", 11770 _fgB: 1790697589906, 11771 initial: { opacity: 0, y: 20 }, 11772 whileInView: { opacity: 1, y: 0 }, 11773 viewport: { once: !0 }, 11774 className: "text-2xl md:text-3xl text-slate-800 max-w-4xl mx-auto leading-relaxed font-light", 11775 "data-fg-bts13": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:56:11:2319:482:e:motion.p:tet", 11776 children: [ 11777 "Drivigo is designed to be the ",
11778 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bts15", _fgB: 1790697589906, className: "font-semibold text-[#0056B3]", "data-fg-bts15": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:62:43:2618:76:e:span:t", children: "single source of truth" }), 11779 " for your drivers, ensuring seamless, real-time coordination with transit operations." 11780 ] 11781 } 11782 ) }), 11783 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bts18", _fgB: 1790697589906, className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", "data-fg-bts18": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:66:9:2826:1443:e:div:x", children: Rf.map((t, e) => /* @__PURE__ */ c( 11784 a, 11785 { 11786 _fgT: m.div, 11787 _fgS: "bts110", 11788 _fgB: 1790697589906, 11789 initial: { opacity: 0, y: 20 }, 11790 whileInView: { opacity: 1, y: 0 }, 11791 viewport: { once: !0 }, 11792 transition: { delay: e * 0.1 }, 11793 className: "bg-slate-50 rounded-3xl p-8 border border-slate-100 hover:shadow-xl hover:border-blue-100 transition-all duration-300 group", 11794 "data-fg-bts110": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:68:13:2939:1301:e:motion.div:etetete", 11795 children: [
11796 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bts111", _fgB: 1790697589906, className: "w-14 h-14 rounded-2xl bg-white text-[#0056B3] shadow-sm flex items-center justify-center mb-6 group-hover:bg-[#0056B3] group-hover:text-white transition-colors", "data-fg-bts111": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:76:15:3332:241:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bts112", _fgB: 1790697589906, size: 28, "data-fg-bts112": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:77:17:3526:26:e:feature.icon" }) }), 11797 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bts113", _fgB: 1790697589906, className: "text-xl font-bold text-slate-900 mb-4 min-h-[56px] flex items-center", "data-fg-bts113": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:80:15:3603:137:e:h3:x", children: t.title }), 11798 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bts115", _fgB: 1790697589906, className: "text-slate-600 mb-6 leading-relaxed", "data-fg-bts115": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:84:15:3770:101:e:p:x", children: t.desc }),
11799 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bts117", _fgB: 1790697589906, className: "pt-6 border-t border-slate-200", "data-fg-bts117": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:88:15:3901:313:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "bts118", _fgB: 1790697589906, className: "text-sm font-medium text-slate-500", "data-fg-bts118": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:89:17:3966:227:e:p:etx", children: [ 11800 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bts119", _fgB: 1790697589906, className: "text-[#EFBB0F] font-bold uppercase text-xs tracking-wider block mb-1", "data-fg-bts119": ":0:/src/app/components/drivigo/DrivigoFeatures.tsx:90:19:4035:101:e:span:t", children: "Benefit" }), 11801 t.benefit 11802 ] }) }) 11803 ] 11804 }, 11805 e 11806 )) }) 11807 ] }) }); 11808} 11809function zf() { 11810 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "bqm00", _fgB: 1790697589910, _fgD: !0, className: "py-24 bg-slate-900 text-white relative overflow-hidden", "data-fg-bqm00": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:6:5:170:5710:e:section:xtete:1", children: [ 11811 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm02", _fgB: 1790697589910, className: "absolute top-0 right-0 w-[600px] h-[600px] bg-[#0056B3] rounded-full blur-[120px] opacity-20 pointer-events-none translate-x-1/2 -translate-y-1/2", "data-fg-bqm02": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:9:7:294:165:e:div" }), 11812 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm03", _fgB: 1790697589910, className: "max-w-7xl mx-auto px-6 relative z-10", "data-fg-bqm03": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:11:7:473:5392:e:div:xtetxtetxte", children: [
11813 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm05", _fgB: 1790697589910, className: "grid lg:grid-cols-2 gap-16 items-center mb-24", "data-fg-bqm05": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:14:9:586:3794:e:div:ete", children: [ 11814 /* @__PURE__ */ c( 11815 a, 11816 { 11817 _fgT: m.div, 11818 _fgS: "bqm06", 11819 _fgB: 1790697589910, 11820 initial: { opacity: 0, x: -30 }, 11821 whileInView: { opacity: 1, x: 0 }, 11822 viewport: { once: !0 }, 11823 "data-fg-bqm06": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:15:11:660:1353:e:motion.div:etetete", 11824 children: [ 11825 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm07", _fgB: 1790697589910, className: "flex items-center gap-3 text-[#EFBB0F] font-bold tracking-widest uppercase mb-4 text-sm", "data-fg-bqm07": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:20:13:829:208:e:div:ete", children: [ 11826 /* @__PURE__ */ i(a, { _fgT: X7, _fgS: "bqm08", _fgB: 1790697589910, size: 18, "data-fg-bqm08": ":0:node_modules/lucide-react:21:15:949:21:e:Network::::::D3yW" }),
11827 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bqm09", _fgB: 1790697589910, "data-fg-bqm09": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:22:15:985:33:e:span:t", children: "Full Synchronization" }) 11828 ] }), 11829 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bqm011", _fgB: 1790697589910, className: "text-4xl md:text-5xl font-light mb-8 font-[Space_Grotesk]", "data-fg-bqm011": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:24:13:1050:199:e:h2:tete", children: [ 11830 "Seamlessly Connected to ", 11831 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bqm013", _fgB: 1790697589910, "data-fg-bqm013": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:25:39:1163:6:e:br" }), 11832 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bqm014", _fgB: 1790697589910, className: "font-bold", "data-fg-bqm014": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:26:15:1184:47:e:span:t", children: "Dispatch 2.0" }) 11833 ] }), 11834 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm016", _fgB: 1790697589910, className: "text-lg text-slate-300 leading-relaxed mb-6", "data-fg-bqm016": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:28:13:1262:324:e:p:t", children: "Drivigo is a fully integrated extension of the Dispatch 2.0 platform. All data collected by the driver â from time logs and inspection reports to real-time location and trip status â is immediately relayed back to the central system." }),
11835 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "bqm018", _fgB: 1790697589910, className: "text-lg text-slate-300 leading-relaxed", "data-fg-bqm018": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:31:13:1599:390:e:p:tetet", children: [ 11836 "This feeds the ", 11837 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "bqm020", _fgB: 1790697589910, className: "text-white", "data-fg-bqm020": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:32:30:1683:68:e:strong:t", children: "Robust Reporting & Analytics" }), 11838 " dashboards and supports the ", 11839 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "bqm023", _fgB: 1790697589910, className: "text-white", "data-fg-bqm023": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:32:127:1780:73:e:strong:t", children: "Intelligent Dispatch & Scheduling" }), 11840 " algorithms. This seamless data flow is what makes Drivigo a key component in optimizing your entire transit operation." 11841 ] }) 11842 ] 11843 } 11844 ),
11845 /* @__PURE__ */ i( 11846 a, 11847 { 11848 _fgT: m.div, 11849 _fgS: "bqm026", 11850 _fgB: 1790697589910, 11851 initial: { opacity: 0, scale: 0.95 }, 11852 whileInView: { opacity: 1, scale: 1 }, 11853 viewport: { once: !0 }, 11854 className: "bg-white/5 border border-white/10 rounded-3xl p-8 backdrop-blur-sm", 11855 "data-fg-bqm026": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:36:11:2025:2340:e:motion.div:xte", 11856 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm028", _fgB: 1790697589910, className: "space-y-6", "data-fg-bqm028": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:43:13:2337:2004:e:div:etete", children: [ 11857 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm029", _fgB: 1790697589910, className: "flex items-center gap-4 p-4 bg-white/5 rounded-xl border border-white/5", "data-fg-bqm029": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:44:16:2380:701:e:div:etete", children: [ 11858 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm030", _fgB: 1790697589910, className: "w-10 h-10 rounded-full bg-[#EFBB0F] flex items-center justify-center text-slate-900 font-bold", "data-fg-bqm030": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:45:18:2487:177:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Cc, _fgS: "bqm031", _fgB: 1790697589910, size: 20, "data-fg-bqm031": ":0:node_modules/lucide-react:46:20:2618:22:e:CarFront::::::Cllz" }) }),
11859 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm032", _fgB: 1790697589910, className: "flex-1", "data-fg-bqm032": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:48:18:2682:188:e:div:ete", children: [ 11860 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bqm033", _fgB: 1790697589910, className: "font-bold", "data-fg-bqm033": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:49:20:2726:44:e:h4:t", children: "Driver Action" }), 11861 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm035", _fgB: 1790697589910, className: "text-sm text-slate-400", "data-fg-bqm035": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:50:20:2790:56:e:p:t", children: "Completes Stop" }) 11862 ] }), 11863 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm037", _fgB: 1790697589910, className: "h-0.5 w-12 bg-white/20 relative", "data-fg-bqm037": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:52:18:2888:171:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm038", _fgB: 1790697589910, className: "absolute right-0 -top-1 w-2 h-2 bg-[#EFBB0F] rounded-full", "data-fg-bqm038": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:53:21:2958:77:e:div" }) }) 11864 ] }),
11865 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm039", _fgB: 1790697589910, className: "flex items-center gap-4 p-4 bg-[#0056B3]/20 rounded-xl border border-[#0056B3]/30", "data-fg-bqm039": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:57:16:3098:510:e:div:ete", children: [ 11866 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm040", _fgB: 1790697589910, className: "w-10 h-10 rounded-full bg-[#0056B3] flex items-center justify-center text-white", "data-fg-bqm040": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:58:18:3215:164:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "bqm041", _fgB: 1790697589910, size: 20, "data-fg-bqm041": ":0:node_modules/lucide-react:59:20:3332:23:e:Building2::::::DOEu" }) }), 11867 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm042", _fgB: 1790697589910, className: "flex-1", "data-fg-bqm042": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:61:18:3397:189:e:div:ete", children: [ 11868 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bqm043", _fgB: 1790697589910, className: "font-bold", "data-fg-bqm043": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:62:20:3441:43:e:h4:t", children: "Dispatch 2.0" }),
11869 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm045", _fgB: 1790697589910, className: "text-sm text-blue-200", "data-fg-bqm045": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:63:20:3504:58:e:p:t", children: "Instantly Updated" }) 11870 ] }) 11871 ] }), 11872 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm047", _fgB: 1790697589910, className: "flex items-center gap-4 p-4 bg-white/5 rounded-xl border border-white/5", "data-fg-bqm047": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:67:16:3625:697:e:div:etete", children: [ 11873 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm048", _fgB: 1790697589910, className: "w-10 h-10 rounded-full bg-slate-700 flex items-center justify-center text-white", "data-fg-bqm048": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:68:18:3732:160:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: h1, _fgS: "bqm049", _fgB: 1790697589910, size: 20, "data-fg-bqm049": ":0:node_modules/lucide-react:69:20:3849:19:e:Users::::::DV8M" }) }),
11874 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm050", _fgB: 1790697589910, className: "flex-1", "data-fg-bqm050": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:71:18:3910:202:e:div:ete", children: [ 11875 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "bqm051", _fgB: 1790697589910, className: "font-bold", "data-fg-bqm051": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:72:20:3954:51:e:h4:t", children: "Rider App (Transigo)" }), 11876 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm053", _fgB: 1790697589910, className: "text-sm text-slate-400", "data-fg-bqm053": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:73:20:4025:63:e:p:t", children: "See Real-Time Arrival" }) 11877 ] }), 11878 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm055", _fgB: 1790697589910, className: "h-0.5 w-12 bg-white/20 relative", "data-fg-bqm055": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:75:18:4130:170:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqm056", _fgB: 1790697589910, className: "absolute left-0 -top-1 w-2 h-2 bg-slate-500 rounded-full", "data-fg-bqm056": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:76:21:4200:76:e:div" }) }) 11879 ] }) 11880 ] }) 11881 } 11882 ) 11883 ] }),
11884 /* @__PURE__ */ i( 11885 a, 11886 { 11887 _fgT: m.div, 11888 _fgS: "bqm058", 11889 _fgB: 1790697589910, 11890 initial: { opacity: 0, y: 20 }, 11891 whileInView: { opacity: 1, y: 0 }, 11892 viewport: { once: !0 }, 11893 className: "bg-gradient-to-r from-[#0056B3] to-[#004494] rounded-3xl p-10 md:p-14 text-center border border-white/10 shadow-2xl relative overflow-hidden mb-16", 11894 "data-fg-bqm058": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:84:9:4424:842:e:motion.div:e", 11895 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqm059", _fgB: 1790697589910, className: "relative z-10", "data-fg-bqm059": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:90:11:4748:496:e:div:ete", children: [ 11896 /* @__PURE__ */ c(a, { _fgT: "h3", _fgS: "bqm060", _fgB: 1790697589910, className: "text-2xl md:text-3xl font-light font-[Space_Grotesk] leading-relaxed", "data-fg-bqm060": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:91:13:4792:316:e:h3:tetetet", children: [ 11897 '"Riders use ',
11898 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bqm062", _fgB: 1790697589910, className: "font-bold text-white", "data-fg-bqm062": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:91:110:4889:54:e:span:t", children: "Transigo" }), 11899 ". Drivers use ", 11900 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bqm065", _fgB: 1790697589910, className: "font-bold text-white", "data-fg-bqm065": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:91:178:4957:53:e:span:t", children: "Drivego" }), 11901 ". Agencies manage it all through ", 11902 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bqm068", _fgB: 1790697589910, className: "font-bold text-white", "data-fg-bqm068": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:91:264:5043:58:e:span:t", children: "Dispatch 2.0" }), 11903 '."' 11904 ] }), 11905 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm071", _fgB: 1790697589910, className: "mt-6 text-blue-200 uppercase tracking-widest font-bold text-sm", "data-fg-bqm071": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:92:13:5121:106:e:p:t", children: "Two sides of every ride." }) 11906 ] }) 11907 } 11908 ),
11909 /* @__PURE__ */ c( 11910 a, 11911 { 11912 _fgT: m.div, 11913 _fgS: "bqm074", 11914 _fgB: 1790697589910, 11915 initial: { opacity: 0 }, 11916 whileInView: { opacity: 1 }, 11917 viewport: { once: !0 }, 11918 className: "flex items-center justify-center gap-4 text-slate-400 max-w-2xl mx-auto bg-slate-800/50 py-4 px-8 rounded-full border border-slate-700", 11919 "data-fg-bqm074": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:97:9:5307:544:e:motion.div:ete", 11920 children: [ 11921 /* @__PURE__ */ i(a, { _fgT: e0, _fgS: "bqm075", _fgB: 1790697589910, size: 20, className: "text-[#EFBB0F]", "data-fg-bqm075": ":0:node_modules/lucide-react:103:11:5607:47:e:Tablet::::::BzEi" }), 11922 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqm076", _fgB: 1790697589910, className: "text-sm font-medium", "data-fg-bqm076": ":0:/src/app/components/drivigo/DrivigoIntegration.tsx:104:11:5665:164:e:p:t", children: "Drivigo is compatible with a range of ruggedized Android and iOS tablets for reliable in-vehicle use." }) 11923 ] 11924 } 11925 ) 11926 ] }) 11927 ] }); 11928} 11929function jf() { 11930 const { openContactModal: t } = Z(); 11931 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "b2xw0", _fgB: 1790697589913, _fgD: !0, id: "contact", className: "py-24 bg-zinc-50 border-t border-slate-200", "data-fg-b2xw0": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:9:5:238:1170:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b2xw1", _fgB: 1790697589913, className: "max-w-4xl mx-auto px-6 text-center", "data-fg-b2xw1": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:10:7:322:1071:e:div:ete", children: [ 11932 /* @__PURE__ */ c( 11933 a, 11934 { 11935 _fgT: m.h2, 11936 _fgS: "b2xw2", 11937 _fgB: 1790697589913, 11938 initial: { opacity: 0, y: 20 }, 11939 whileInView: { opacity: 1, y: 0 }, 11940 viewport: { once: !0 }, 11941 className: "text-4xl md:text-5xl font-light text-slate-900 mb-8 font-[Space_Grotesk]", 11942 "data-fg-b2xw2": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:11:9:383:380:e:motion.h2:tete", 11943 children: [ 11944 "Ready to put your drivers in the ",
11945 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "b2xw4", _fgB: 1790697589913, "data-fg-b2xw4": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:17:44:665:6:e:br" }), 11946 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b2xw5", _fgB: 1790697589913, className: "font-bold text-[#0056B3]", "data-fg-b2xw5": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:18:11:682:60:e:span:t", children: "fast lane?" }) 11947 ] 11948 } 11949 ), 11950 /* @__PURE__ */ i( 11951 a, 11952 { 11953 _fgT: m.div, 11954 _fgS: "b2xw7", 11955 _fgB: 1790697589913, 11956 initial: { opacity: 0, scale: 0.9 }, 11957 whileInView: { opacity: 1, scale: 1 }, 11958 viewport: { once: !0 }, 11959 "data-fg-b2xw7": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:21:9:773:607:e:motion.div:e", 11960 children: /* @__PURE__ */ c( 11961 a, 11962 { 11963 _fgT: "button", 11964 _fgS: "b2xw8", 11965 _fgB: 1790697589913, 11966 onClick: t, 11967 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-2xl cursor-pointer", 11968 "data-fg-b2xw8": ":0:/src/app/components/drivigo/DrivigoCTA.tsx:26:11:937:421:e:button:te", 11969 children: [ 11970 "Schedule a Meeting",
11971 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "b2xw10", _fgB: 1790697589913, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-b2xw10": ":0:node_modules/lucide-react:31:13:1255:83:e:ArrowRight::::::s5N" }) 11972 ] 11973 } 11974 ) 11975 } 11976 ) 11977 ] }) }); 11978} 11979function Of() { 11980 return /* @__PURE__ */ c(C, { children: [ 11981 /* @__PURE__ */ i(a, { _fgT: Ef, _fgS: "kvg1", _fgB: 1790697589414, "data-fg-kvg1": ":0:/src/app/pages/DrivigoPage.tsx:10:7:399:15:e:DrivigoHero::::::BqCo" }), 11982 /* @__PURE__ */ i(a, { _fgT: Df, _fgS: "kvg2", _fgB: 1790697589414, "data-fg-kvg2": ":0:/src/app/pages/DrivigoPage.tsx:11:7:421:19:e:DrivigoFeatures::::::Msy" }), 11983 /* @__PURE__ */ i(a, { _fgT: zf, _fgS: "kvg3", _fgB: 1790697589414, "data-fg-kvg3": ":0:/src/app/pages/DrivigoPage.tsx:12:7:447:22:e:DrivigoIntegration::::::DrEM" }), 11984 /* @__PURE__ */ i(a, { _fgT: jf, _fgS: "kvg4", _fgB: 1790697589414, "data-fg-kvg4": ":0:/src/app/pages/DrivigoPage.tsx:13:7:476:14:e:DrivigoCTA::::::CsXm" }), 11985 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "kvg5", _fgB: 1790697589414, "data-fg-kvg5": ":0:/src/app/pages/DrivigoPage.tsx:14:7:497:10:e:Footer::::::B1Vv" }) 11986 ] }); 11987} 11988function Vf() { 11989 const { openContactModal: t } = Z(); 11990 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "bmek0", _fgB: 1790697590136, _fgD: !0, className: "relative min-h-[90vh] flex items-center bg-slate-900 overflow-hidden", "data-fg-bmek0": ":0:/src/app/components/transigo/TransigoHero.tsx:9:5:240:4817:e:section:xtete:1", children: [ 11991 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek2", _fgB: 1790697590136, className: "absolute inset-0 z-0", "data-fg-bmek2": ":0:/src/app/components/transigo/TransigoHero.tsx:11:7:368:614:e:div:ete", children: [
11992 /* @__PURE__ */ i( 11993 a, 11994 { 11995 _fgT: "img", 11996 _fgS: "bmek3", 11997 _fgB: 1790697590136, 11998 src: "https://images.unsplash.com/photo-1694696671898-12a142b3868d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjb21tdXRlciUyMHVzaW5nJTIwc21hcnRwaG9uZSUyMHRyYW5zaXQlMjBhcHAlMjBidXMlMjBzdG9wfGVufDF8fHx8MTc3MTAwNjk3MXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 11999 alt: "Commuter using Transigo App", 12000 className: "w-full h-full object-cover opacity-30", 12001 "data-fg-bmek3": ":0:/src/app/components/transigo/TransigoHero.tsx:12:9:415:445:e:img" 12002 } 12003 ), 12004 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek4", _fgB: 1790697590136, className: "absolute inset-0 bg-gradient-to-r from-slate-900 via-slate-900/80 to-transparent", "data-fg-bmek4": ":0:/src/app/components/transigo/TransigoHero.tsx:17:9:869:100:e:div" }) 12005 ] }), 12006 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek5", _fgB: 1790697590136, className: "container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-bmek5": ":0:/src/app/components/transigo/TransigoHero.tsx:20:7:990:4052:e:div:etxte", children: [
12007 /* @__PURE__ */ c( 12008 a, 12009 { 12010 _fgT: m.div, 12011 _fgS: "bmek6", 12012 _fgB: 1790697590136, 12013 initial: { opacity: 0, x: -50 }, 12014 animate: { opacity: 1, x: 0 }, 12015 transition: { duration: 0.8 }, 12016 "data-fg-bmek6": ":0:/src/app/components/transigo/TransigoHero.tsx:21:9:1093:1554:e:motion.div:etetete", 12017 children: [ 12018 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek7", _fgB: 1790697590136, className: "inline-block px-3 py-1 rounded-full bg-blue-500/20 border border-blue-400/30 text-blue-300 text-sm font-bold tracking-widest uppercase mb-6 backdrop-blur-sm", "data-fg-bmek7": ":0:/src/app/components/transigo/TransigoHero.tsx:26:11:1250:213:e:div:t", children: "Rider App" }), 12019 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "bmek9", _fgB: 1790697590136, className: "text-5xl md:text-7xl font-light text-white mb-6 font-[Space_Grotesk] leading-tight", "data-fg-bmek9": ":0:/src/app/components/transigo/TransigoHero.tsx:29:11:1474:231:e:h1:tete", children: [ 12020 "Transigo: The ",
12021 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bmek11", _fgB: 1790697590136, "data-fg-bmek11": ":0:/src/app/components/transigo/TransigoHero.tsx:30:27:1600:6:e:br" }), 12022 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bmek12", _fgB: 1790697590136, className: "font-bold text-[#EFBB0F]", "data-fg-bmek12": ":0:/src/app/components/transigo/TransigoHero.tsx:31:13:1619:70:e:span:t", children: "All-in-One Rider App" }) 12023 ] }), 12024 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bmek14", _fgB: 1790697590136, className: "text-xl text-slate-300 mb-8 leading-relaxed max-w-2xl", "data-fg-bmek14": ":0:/src/app/components/transigo/TransigoHero.tsx:33:11:1716:417:e:p:t", children: "The essential mobile application designed to put your entire transit network into the hands of every rider. As the customer-facing component of Dispatch 2.0, Transigo provides a seamless, intuitive experience for all service types â from Fixed Route bus lines and rail to flexible on-demand paratransit and microtransit." }),
12025 /* @__PURE__ */ c( 12026 a, 12027 { 12028 _fgT: "button", 12029 _fgS: "bmek16", 12030 _fgB: 1790697590136, 12031 onClick: t, 12032 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-[0_0_20px_rgba(0,86,179,0.5)] hover:shadow-[0_0_30px_rgba(0,86,179,0.7)] cursor-pointer", 12033 "data-fg-bmek16": ":0:/src/app/components/transigo/TransigoHero.tsx:37:11:2155:470:e:button:te", 12034 children: [ 12035 "Request a Demo", 12036 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "bmek18", _fgB: 1790697590136, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-bmek18": ":0:node_modules/lucide-react:42:13:2522:83:e:ArrowRight::::::s5N" }) 12037 ] 12038 } 12039 ) 12040 ] 12041 } 12042 ), 12043 /* @__PURE__ */ i( 12044 a, 12045 { 12046 _fgT: m.div, 12047 _fgS: "bmek20", 12048 _fgB: 1790697590136, 12049 initial: { opacity: 0, scale: 0.9 }, 12050 animate: { opacity: 1, scale: 1 }, 12051 transition: { delay: 0.3, duration: 0.8 }, 12052 className: "hidden lg:block relative", 12053 "data-fg-bmek20": ":0:/src/app/components/transigo/TransigoHero.tsx:47:9:2722:2307:e:motion.div:xte", 12054 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek22", _fgB: 1790697590136, className: "relative rounded-[2.5rem] overflow-hidden border-8 border-slate-800 shadow-2xl bg-slate-800 aspect-[9/16] w-[320px] mx-auto rotate-[5deg] hover:rotate-0 transition-transform duration-700", "data-fg-bmek22": ":0:/src/app/components/transigo/TransigoHero.tsx:54:11:3006:2001:e:div:etxtetxtete", children: [
12055 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek23", _fgB: 1790697590136, className: "absolute inset-0 bg-gradient-to-br from-slate-700 to-slate-900 flex items-center justify-center", "data-fg-bmek23": ":0:/src/app/components/transigo/TransigoHero.tsx:55:14:3224:219:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bmek24", _fgB: 1790697590136, className: "text-slate-500 font-mono text-sm", "data-fg-bmek24": ":0:/src/app/components/transigo/TransigoHero.tsx:56:17:3354:69:e:span:t", children: "Transigo UI" }) }), 12056 /* @__PURE__ */ i( 12057 a, 12058 { 12059 _fgT: "img", 12060 _fgS: "bmek27", 12061 _fgB: 1790697590136, 12062 src: "https://images.unsplash.com/photo-1694696671898-12a142b3868d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjb21tdXRlciUyMHVzaW5nJTIwc21hcnRwaG9uZSUyMHRyYW5zaXQlMjBhcHAlMjBidXMlMjBzdG9wfGVufDF8fHx8MTc3MTAwNjk3MXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 12063 alt: "App Screen", 12064 className: "w-full h-full object-cover opacity-80 hover:opacity-100 transition-opacity duration-500", 12065 "data-fg-bmek27": ":0:/src/app/components/transigo/TransigoHero.tsx:59:14:3524:498:e:img" 12066 } 12067 ),
12068 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek29", _fgB: 1790697590136, className: "absolute top-12 left-4 right-4 p-4 bg-white/90 backdrop-blur-md rounded-xl shadow-lg", "data-fg-bmek29": ":0:/src/app/components/transigo/TransigoHero.tsx:66:14:4092:494:e:div:ete", children: [ 12069 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek30", _fgB: 1790697590136, className: "flex justify-between items-center mb-2", "data-fg-bmek30": ":0:/src/app/components/transigo/TransigoHero.tsx:67:16:4210:225:e:div:ete", children: [ 12070 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek31", _fgB: 1790697590136, className: "h-2 w-1/3 bg-slate-300 rounded", "data-fg-bmek31": ":0:/src/app/components/transigo/TransigoHero.tsx:68:18:4284:54:e:div:_" }), 12071 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek32", _fgB: 1790697590136, className: "h-2 w-4 bg-slate-300 rounded-full", "data-fg-bmek32": ":0:/src/app/components/transigo/TransigoHero.tsx:69:18:4356:57:e:div:_" }) 12072 ] }), 12073 /* @__P
12073URE__ */ i(a, { _fgT: "div", _fgS: "bmek33", _fgB: 1790697590136, className: "h-8 w-full bg-slate-100 rounded mb-2 flex items-center px-2 text-xs text-slate-400", "data-fg-bmek33": ":0:/src/app/components/transigo/TransigoHero.tsx:71:16:4451:115:e:div:t", children: "Where to?" }) 12074 ] }), 12075 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bmek35", _fgB: 1790697590136, className: "absolute bottom-8 left-4 right-4 p-4 bg-[#0056B3] backdrop-blur-md rounded-xl shadow-lg text-white", "data-fg-bmek35": ":0:/src/app/components/transigo/TransigoHero.tsx:74:14:4601:389:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bmek36", _fgB: 1790697590136, className: "flex justify-between items-center", "data-fg-bmek36": ":0:/src/app/components/transigo/TransigoHero.tsx:75:16:4733:237:e:div:ete", children: [ 12076 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bmek37", _fgB: 1790697590136, className: "font-bold text-sm", "data-fg-bmek37": ":0:/src/app/components/transigo/TransigoHero.tsx:76:19:4803:58:e:span:t", children: "Bus 42 arriving" }),
12077 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bmek39", _fgB: 1790697590136, className: "text-xs bg-white/20 px-2 py-1 rounded", "data-fg-bmek39": ":0:/src/app/components/transigo/TransigoHero.tsx:77:19:4880:68:e:span:t", children: "2 min" }) 12078 ] }) }) 12079 ] }) 12080 } 12081 ) 12082 ] }) 12083 ] }); 12084} 12085const Hf = [ 12086 { 12087 icon: El, 12088 title: "Real-Time Vehicle Tracking", 12089 desc: "Allows riders to see the exact, live location of their bus, van, or shuttle on a map with predicted arrival times.", 12090 benefit: "Eliminates guesswork and reduces waiting time at stops." 12091 }, 12092 { 12093 icon: I3, 12094 title: "Multi-Service Trip Planning", 12095 desc: "Offers comprehensive trip planning across all service types: fixed route, paratransit, and microtransit.", 12096 benefit: "Provides an integrated, flexible travel solution regardless of service needed." 12097 }, 12098 { 12099 icon: $7, 12100 title: "On-Demand Ride Booking", 12101 desc: "Integrated tools for booking, modifying, and canceling rides for paratransit and microtransit services directly in the app.", 12102 benefit: "Enables quick and convenient access to flexible transportation options." 12103 }, 12104 { 12105 icon: U7, 12106 title: "In-App Payment & Fare Management", 12107 desc: "Securely store payment information and purchase fares, passes, or tickets for any transit service.", 12108 benefit: "Simplifies the boarding process and reduces cash handling." 12109 }, 12110 { 12111 icon: H7, 12112 title: "Service Alerts & Notifications", 12113 desc: "Provides instant alerts for service delays, route changes, or other critical operational updates.", 12114 benefit: "Keeps riders informed so they can make proactive travel adjustments." 12115 }, 12116 { 12117 icon: _2, 12118 title: "Customizable Accessibility", 12119 desc: "Features built-in accessibility options, including screen reader compatibility and high-contrast views.", 12120 benefit: "Ensures a positive experience for all members of the community." 12121 } 12122]; 12123function Zf() { 12124 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dlyl0", _fgB: 1790697590153, _fgD: !0, className: "relative py-24 bg-white", "data-fg-dlyl0": ":0:/src/app/components/transigo/TransigoFeatures.tsx:52:5:1879:2176:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dlyl1", _fgB: 1790697590153, className: "max-w-7xl mx-auto px-6", "data-fg-dlyl1": ":0:/src/app/components/transigo/TransigoFeatures.tsx:53:7:1931:2109:e:div:ete", children: [ 12125 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dlyl2", _fgB: 1790697590153, className: "text-center mb-20", "data-fg-dlyl2": ":0:/src/app/components/transigo/TransigoFeatures.tsx:55:9:1989:584:e:div:e", children: /* @__PURE__ */ c( 12126 a, 12127 { 12128 _fgT: m.p, 12129 _fgS: "dlyl3", 12130 _fgB: 1790697590153, 12131 initial: { opacity: 0, y: 20 }, 12132 whileInView: { opacity: 1, y: 0 }, 12133 viewport: { once: !0 }, 12134 className: "text-2xl md:text-3xl text-slate-800 max-w-4xl mx-auto leading-relaxed font-light", 12135 "data-fg-dlyl3": ":0:/src/app/components/transigo/TransigoFeatures.tsx:56:11:2035:523:e:motion.p:te", 12136 children: [ 12137 "Transigo is a powerful multitool, ensuring riders have everything they need to plan, book, track, and pay for their journey â ",
12138 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dlyl5", _fgB: 1790697590153, className: "font-semibold text-[#0056B3]", "data-fg-dlyl5": ":0:/src/app/components/transigo/TransigoFeatures.tsx:62:139:2430:106:e:span:t", children: "optimizing their experience from point A to point B." }) 12139 ] 12140 } 12141 ) }), 12142 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dlyl7", _fgB: 1790697590153, className: "grid md:grid-cols-2 lg:grid-cols-3 gap-8", "data-fg-dlyl7": ":0:/src/app/components/transigo/TransigoFeatures.tsx:66:9:2583:1443:e:div:x", children: Hf.map((t, e) => /* @__PURE__ */ c( 12143 a, 12144 { 12145 _fgT: m.div, 12146 _fgS: "dlyl9", 12147 _fgB: 1790697590153, 12148 initial: { opacity: 0, y: 20 }, 12149 whileInView: { opacity: 1, y: 0 }, 12150 viewport: { once: !0 }, 12151 transition: { delay: e * 0.1 }, 12152 className: "bg-slate-50 rounded-3xl p-8 border border-slate-100 hover:shadow-xl hover:border-blue-100 transition-all duration-300 group", 12153 "data-fg-dlyl9": ":0:/src/app/components/transigo/TransigoFeatures.tsx:68:13:2696:1301:e:motion.div:etetete", 12154 children: [
12155 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dlyl10", _fgB: 1790697590153, className: "w-14 h-14 rounded-2xl bg-white text-[#0056B3] shadow-sm flex items-center justify-center mb-6 group-hover:bg-[#0056B3] group-hover:text-white transition-colors", "data-fg-dlyl10": ":0:/src/app/components/transigo/TransigoFeatures.tsx:76:15:3089:241:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "dlyl11", _fgB: 1790697590153, size: 28, "data-fg-dlyl11": ":0:/src/app/components/transigo/TransigoFeatures.tsx:77:17:3283:26:e:feature.icon" }) }), 12156 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dlyl12", _fgB: 1790697590153, className: "text-xl font-bold text-slate-900 mb-4 min-h-[56px] flex items-center", "data-fg-dlyl12": ":0:/src/app/components/transigo/TransigoFeatures.tsx:80:15:3360:137:e:h3:x", children: t.title }), 12157 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dlyl14", _fgB: 1790697590153, className: "text-slate-600 mb-6 leading-relaxed", "data-fg-dlyl14": ":0:/src/app/components/transigo/TransigoFeatures.tsx:84:15:3527:101:e:p:x", children: t.desc }),
12158 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dlyl16", _fgB: 1790697590153, className: "pt-6 border-t border-slate-200", "data-fg-dlyl16": ":0:/src/app/components/transigo/TransigoFeatures.tsx:88:15:3658:313:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "dlyl17", _fgB: 1790697590153, className: "text-sm font-medium text-slate-500", "data-fg-dlyl17": ":0:/src/app/components/transigo/TransigoFeatures.tsx:89:17:3723:227:e:p:etx", children: [ 12159 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dlyl18", _fgB: 1790697590153, className: "text-[#EFBB0F] font-bold uppercase text-xs tracking-wider block mb-1", "data-fg-dlyl18": ":0:/src/app/components/transigo/TransigoFeatures.tsx:90:19:3792:101:e:span:t", children: "Benefit" }), 12160 t.benefit 12161 ] }) }) 12162 ] 12163 }, 12164 e 12165 )) }) 12166 ] }) }); 12167} 12168function Wf() { 12169 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "ddre0", _fgB: 1790697590143, _fgD: !0, className: "py-24 bg-slate-50 relative overflow-hidden", "data-fg-ddre0": ":0:/src/app/components/transigo/TransigoIntegration.tsx:6:5:161:5589:e:section:xtete:1", children: [ 12170 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre2", _fgB: 1790697590143, className: "absolute bottom-0 left-0 w-[600px] h-[600px] bg-[#EFBB0F] rounded-full blur-[120px] opacity-10 pointer-events-none -translate-x-1/2 translate-y-1/2", "data-fg-ddre2": ":0:/src/app/components/transigo/TransigoIntegration.tsx:9:7:273:167:e:div" }), 12171 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre3", _fgB: 1790697590143, className: "max-w-7xl mx-auto px-6 relative z-10", "data-fg-ddre3": ":0:/src/app/components/transigo/TransigoIntegration.tsx:11:7:454:5281:e:div:xtetxtetxte", children: [
12172 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre5", _fgB: 1790697590143, className: "grid lg:grid-cols-2 gap-16 items-center mb-24", "data-fg-ddre5": ":0:/src/app/components/transigo/TransigoIntegration.tsx:14:9:567:3765:e:div:ete", children: [ 12173 /* @__PURE__ */ c( 12174 a, 12175 { 12176 _fgT: m.div, 12177 _fgS: "ddre6", 12178 _fgB: 1790697590143, 12179 initial: { opacity: 0, x: -30 }, 12180 whileInView: { opacity: 1, x: 0 }, 12181 viewport: { once: !0 }, 12182 "data-fg-ddre6": ":0:/src/app/components/transigo/TransigoIntegration.tsx:15:11:641:1630:e:motion.div:etetete", 12183 children: [ 12184 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre7", _fgB: 1790697590143, className: "flex items-center gap-3 text-[#0056B3] font-bold tracking-widest uppercase mb-4 text-sm", "data-fg-ddre7": ":0:/src/app/components/transigo/TransigoIntegration.tsx:20:13:810:208:e:div:ete", children: [ 12185 /* @__PURE__ */ i(a, { _fgT: X7, _fgS: "ddre8", _fgB: 1790697590143, size: 18, "data-fg-ddre8": ":0:node_modules/lucide-react:21:15:930:21:e:Network::::::D3yW" }),
12186 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre9", _fgB: 1790697590143, "data-fg-ddre9": ":0:/src/app/components/transigo/TransigoIntegration.tsx:22:15:966:33:e:span:t", children: "Full Synchronization" }) 12187 ] }), 12188 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "ddre11", _fgB: 1790697590143, className: "text-4xl md:text-5xl font-light text-slate-900 mb-8 font-[Space_Grotesk]", "data-fg-ddre11": ":0:/src/app/components/transigo/TransigoIntegration.tsx:24:13:1031:204:e:h2:tete", children: [ 12189 "Connected to the ", 12190 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "ddre13", _fgB: 1790697590143, "data-fg-ddre13": ":0:/src/app/components/transigo/TransigoIntegration.tsx:25:32:1152:6:e:br" }), 12191 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre14", _fgB: 1790697590143, className: "font-bold", "data-fg-ddre14": ":0:/src/app/components/transigo/TransigoIntegration.tsx:26:15:1173:44:e:span:t", children: "Ecosystem" }) 12192 ] }), 12193 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "ddre16", _fgB: 1790697590143, className: "text-lg text-slate-600 leading-relaxed mb-6", "data-fg-ddre16": ":0:/src/app/components/transigo/TransigoIntegration.tsx:28:13:1248:380:e:p:tet", children: [ 12194 "All ride requests, status updates, and vehicle location data are relayed instantly between Transigo and the core ",
12195 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "ddre18", _fgB: 1790697590143, className: "text-slate-800", "data-fg-ddre18": ":0:/src/app/components/transigo/TransigoIntegration.tsx:29:128:1435:56:e:strong:t", children: "Dispatch 2.0" }), 12196 " system, ensuring that Intelligent Dispatch & Scheduling algorithms are always running on the most accurate information." 12197 ] }), 12198 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre21", _fgB: 1790697590143, className: "flex items-center gap-4 mt-8", "data-fg-ddre21": ":0:/src/app/components/transigo/TransigoIntegration.tsx:32:13:1654:593:e:div:etete", children: [ 12199 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre22", _fgB: 1790697590143, className: "flex items-center gap-2 px-4 py-2 bg-slate-200 rounded-lg text-slate-700 font-semibold text-sm", "data-fg-ddre22": ":0:/src/app/components/transigo/TransigoIntegration.tsx:33:15:1715:195:e:div:et", children: [ 12200 /* @__PURE__ */ i(a, { _fgT: cc, _fgS: "ddre23", _fgB: 1790697590143, size: 16, "data-fg-ddre23": ":0:node_modules/lucide-react:34:17:1844:19:e:Apple::::::BDCi" }), 12201 "App Store" 12202 ] }),
12203 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre25", _fgB: 1790697590143, className: "flex items-center gap-2 px-4 py-2 bg-slate-200 rounded-lg text-slate-700 font-semibold text-sm", "data-fg-ddre25": ":0:/src/app/components/transigo/TransigoIntegration.tsx:37:15:1925:197:e:div:et", children: [ 12204 /* @__PURE__ */ i(a, { _fgT: Md, _fgS: "ddre26", _fgB: 1790697590143, size: 16, "data-fg-ddre26": ":0:node_modules/lucide-react:38:17:2054:19:e:Store::::::EKAh" }), 12205 "Google Play" 12206 ] }), 12207 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre28", _fgB: 1790697590143, className: "text-sm text-slate-500 italic ml-2", "data-fg-ddre28": ":0:/src/app/components/transigo/TransigoIntegration.tsx:41:15:2137:91:e:span:t", children: "Transigo is natively available." }) 12208 ] }) 12209 ] 12210 } 12211 ), 12212 /* @__PURE__ */ i( 12213 a, 12214 { 12215 _fgT: m.div, 12216 _fgS: "ddre30", 12217 _fgB: 1790697590143, 12218 initial: { opacity: 0, scale: 0.95 }, 12219 whileInView: { opacity: 1, scale: 1 }, 12220 viewport: { once: !0 }, 12221 className: "bg-white border border-slate-200 rounded-3xl p-8 shadow-xl", 12222 "data-fg-ddre30": ":0:/src/app/components/transigo/TransigoIntegration.tsx:45:11:2283:2034:e:motion.div:xte", 12223 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre32", _fgB: 1790697590143, className: "relative flex flex-col items-center justify-center py-8", "data-fg-ddre32": ":0:/src/app/components/transigo/TransigoIntegration.tsx:52:14:2600:1693:e:div:xtetxtetxtetxtetxte", children: [
12224 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre34", _fgB: 1790697590143, className: "bg-[#0056B3] text-white p-4 rounded-2xl shadow-lg w-48 text-center relative z-10", "data-fg-ddre34": ":0:/src/app/components/transigo/TransigoIntegration.tsx:54:17:2725:316:e:div:etete", children: [ 12225 /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "ddre35", _fgB: 1790697590143, className: "mx-auto mb-2", "data-fg-ddre35": ":0:node_modules/lucide-react:55:19:2842:39:e:Smartphone::::::DHxb" }), 12226 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre36", _fgB: 1790697590143, className: "font-bold", "data-fg-ddre36": ":0:/src/app/components/transigo/TransigoIntegration.tsx:56:19:2900:41:e:div:t", children: "Transigo" }), 12227 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre38", _fgB: 1790697590143, className: "text-xs text-blue-200", "data-fg-ddre38": ":0:/src/app/components/transigo/TransigoIntegration.tsx:57:19:2960:58:e:div:t", children: "Rider Request" }) 12228 ] }), 12229 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre41", _fgB: 1790697590143, className: "h-16 w-0.5 bg-slate-200 my-2 relative overflow-hidden", "data-fg-ddre41": ":0:/src/app/components/transigo/TransigoIntegration.tsx:61:17:3104:195:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre42", _fgB: 1790697590143, className: "absolute top-0 left-0 w-full h-1/2 bg-[#EFBB0F] animate-pulse", "data-fg-ddre42": ":0:/src/app/components/transigo/TransigoIntegration.tsx:62:20:3195:81:e:div" }) }),
12230 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre44", _fgB: 1790697590143, className: "bg-slate-800 text-white p-6 rounded-2xl shadow-lg w-64 text-center relative z-10", "data-fg-ddre44": ":0:/src/app/components/transigo/TransigoIntegration.tsx:66:17:3355:290:e:div:ete", children: [ 12231 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre45", _fgB: 1790697590143, className: "font-bold text-lg mb-1", "data-fg-ddre45": ":0:/src/app/components/transigo/TransigoIntegration.tsx:67:19:3472:58:e:div:t", children: "Dispatch 2.0" }), 12232 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre47", _fgB: 1790697590143, className: "text-xs text-slate-400", "data-fg-ddre47": ":0:/src/app/components/transigo/TransigoIntegration.tsx:68:19:3549:73:e:div:t", children: "Intelligent Scheduling Core" }) 12233 ] }), 12234 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre50", _fgB: 1790697590143, className: "h-16 w-0.5 bg-slate-200 my-2 relative overflow-hidden", "data-fg-ddre50": ":0:/src/app/components/transigo/TransigoIntegration.tsx:72:18:3710:198:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre51", _fgB: 1790697590143, className: "absolute bottom-0 left-0 w-full h-1/2 bg-[#EFBB0F] animate-pulse", "data-fg-ddre51": ":0:/src/app/components/transigo/TransigoIntegration.tsx:73:20:3801:84:e:div" }) }),
12235 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddre53", _fgB: 1790697590143, className: "bg-white border-2 border-[#EFBB0F] text-slate-800 p-4 rounded-2xl shadow-sm w-48 text-center relative z-10", "data-fg-ddre53": ":0:/src/app/components/transigo/TransigoIntegration.tsx:77:17:3963:310:e:div:ete", children: [ 12236 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre54", _fgB: 1790697590143, className: "font-bold text-[#EFBB0F]", "data-fg-ddre54": ":0:/src/app/components/transigo/TransigoIntegration.tsx:78:20:4107:63:e:div:t", children: "Optimized Route" }), 12237 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre56", _fgB: 1790697590143, className: "text-xs text-slate-500", "data-fg-ddre56": ":0:/src/app/components/transigo/TransigoIntegration.tsx:79:20:4190:60:e:div:t", children: "Instant Update" }) 12238 ] }) 12239 ] }) 12240 } 12241 ) 12242 ] }), 12243 /* @__PURE__ */ i( 12244 a, 12245 { 12246 _fgT: m.div, 12247 _fgS: "ddre59", 12248 _fgB: 1790697590143, 12249 initial: { opacity: 0, y: 20 }, 12250 whileInView: { opacity: 1, y: 0 }, 12251 viewport: { once: !0 }, 12252 className: "bg-gradient-to-r from-[#0056B3] to-[#004494] rounded-3xl p-10 md:p-14 text-center border border-white/10 shadow-2xl relative overflow-hidden mb-16", 12253 "data-fg-ddre59": ":0:/src/app/components/transigo/TransigoIntegration.tsx:86:9:4376:786:e:motion.div:e", 12254 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddre60", _fgB: 1790697590143, className: "relative z-10", "data-fg-ddre60": ":0:/src/app/components/transigo/TransigoIntegration.tsx:92:11:4700:440:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "h3", _fgS: "ddre61", _fgB: 1790697590143, className: "text-2xl md:text-3xl font-light font-[Space_Grotesk] leading-relaxed text-white", "data-fg-ddre61": ":0:/src/app/components/transigo/TransigoIntegration.tsx:93:13:4744:379:e:h3:tetete", children: [ 12255 '"Riders use ',
12256 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre63", _fgB: 1790697590143, className: "font-bold", "data-fg-ddre63": ":0:/src/app/components/transigo/TransigoIntegration.tsx:94:27:4867:43:e:span:t", children: "Transigo" }), 12257 ". Drivers use ", 12258 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre66", _fgB: 1790697590143, className: "font-bold", "data-fg-ddre66": ":0:/src/app/components/transigo/TransigoIntegration.tsx:95:27:4939:42:e:span:t", children: "Drivigo" }), 12259 ".", 12260 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddre69", _fgB: 1790697590143, className: "block mt-2 text-xl md:text-2xl text-blue-200 font-normal", "data-fg-ddre69": ":0:/src/app/components/transigo/TransigoIntegration.tsx:96:15:4998:107:e:span:t", children: 'Two sides of every ride."' }) 12261 ] }) }) 12262 } 12263 ), 12264 /* @__PURE__ */ i( 12265 a, 12266 { 12267 _fgT: m.div, 12268 _fgS: "ddre72", 12269 _fgB: 1790697590143, 12270 initial: { opacity: 0 }, 12271 whileInView: { opacity: 1 }, 12272 viewport: { once: !0 }, 12273 className: "text-center max-w-3xl mx-auto", 12274 "data-fg-ddre72": ":0:/src/app/components/transigo/TransigoIntegration.tsx:102:9:5201:520:e:motion.div:e", 12275 children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddre73", _fgB: 1790697590143, className: "text-xl md:text-2xl font-light text-slate-700 leading-relaxed", "data-fg-ddre73": ":0:/src/app/components/transigo/TransigoIntegration.tsx:108:11:5396:303:e:p:t", children: "With Transigo, your transit agency gains the ability to fully customize the rider experience to meet any operational need, creating a flexible, all-in-one app that drives ridership and satisfaction." }) 12276 } 12277 ) 12278 ] }) 12279 ] }); 12280} 12281function $f() { 12282 const { openContactModal: t } = Z(); 12283 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "daci0", _fgB: 1790697590155, _fgD: !0, id: "contact", className: "relative py-24 bg-zinc-50 border-t border-slate-200", "data-fg-daci0": ":0:/src/app/components/transigo/TransigoCTA.tsx:9:5:239:1178:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "daci1", _fgB: 1790697590155, className: "max-w-4xl mx-auto px-6 text-center", "data-fg-daci1": ":0:/src/app/components/transigo/TransigoCTA.tsx:10:7:332:1070:e:div:ete", children: [ 12284 /* @__PURE__ */ c( 12285 a, 12286 { 12287 _fgT: m.h2, 12288 _fgS: "daci2", 12289 _fgB: 1790697590155, 12290 initial: { opacity: 0, y: 20 }, 12291 whileInView: { opacity: 1, y: 0 }, 12292 viewport: { once: !0 }, 12293 className: "text-4xl md:text-5xl font-light text-slate-900 mb-8 font-[Space_Grotesk]", 12294 "data-fg-daci2": ":0:/src/app/components/transigo/TransigoCTA.tsx:11:9:393:382:e:motion.h2:tete", 12295 children: [ 12296 "Give Your Riders the ",
12297 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "daci4", _fgB: 1790697590155, "data-fg-daci4": ":0:/src/app/components/transigo/TransigoCTA.tsx:17:32:663:6:e:br" }), 12298 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "daci5", _fgB: 1790697590155, className: "font-bold text-[#EFBB0F]", "data-fg-daci5": ":0:/src/app/components/transigo/TransigoCTA.tsx:18:11:680:74:e:span:t", children: "Experience They Deserve." }) 12299 ] 12300 } 12301 ), 12302 /* @__PURE__ */ i( 12303 a, 12304 { 12305 _fgT: m.div, 12306 _fgS: "daci7", 12307 _fgB: 1790697590155, 12308 initial: { opacity: 0, scale: 0.9 }, 12309 whileInView: { opacity: 1, scale: 1 }, 12310 viewport: { once: !0 }, 12311 "data-fg-daci7": ":0:/src/app/components/transigo/TransigoCTA.tsx:21:9:785:604:e:motion.div:e", 12312 children: /* @__PURE__ */ c( 12313 a, 12314 { 12315 _fgT: "button", 12316 _fgS: "daci8", 12317 _fgB: 1790697590155, 12318 onClick: t, 12319 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-2xl cursor-pointer", 12320 "data-fg-daci8": ":0:/src/app/components/transigo/TransigoCTA.tsx:26:11:949:418:e:button:te", 12321 children: [ 12322 "Schedule a Demo",
12323 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "daci10", _fgB: 1790697590155, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-daci10": ":0:node_modules/lucide-react:31:13:1264:83:e:ArrowRight::::::s5N" }) 12324 ] 12325 } 12326 ) 12327 } 12328 ) 12329 ] }) }); 12330} 12331function qf() { 12332 return /* @__PURE__ */ c(C, { children: [ 12333 /* @__PURE__ */ i(a, { _fgT: Vf, _fgS: "chnn1", _fgB: 1790697589416, "data-fg-chnn1": ":0:/src/app/pages/TransigoPage.tsx:10:7:412:16:e:TransigoHero::::::DASZ" }), 12334 /* @__PURE__ */ i(a, { _fgT: Zf, _fgS: "chnn2", _fgB: 1790697589416, "data-fg-chnn2": ":0:/src/app/pages/TransigoPage.tsx:11:7:435:20:e:TransigoFeatures::::::BFG9" }), 12335 /* @__PURE__ */ i(a, { _fgT: Wf, _fgS: "chnn3", _fgB: 1790697589416, "data-fg-chnn3": ":0:/src/app/pages/TransigoPage.tsx:12:7:462:23:e:TransigoIntegration::::::ph9" }), 12336 /* @__PURE__ */ i(a, { _fgT: $f, _fgS: "chnn4", _fgB: 1790697589416, "data-fg-chnn4": ":0:/src/app/pages/TransigoPage.tsx:13:7:492:15:e:TransigoCTA::::::Bbbp" }), 12337 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "chnn5", _fgB: 1790697589416, "data-fg-chnn5": ":0:/src/app/pages/TransigoPage.tsx:14:7:514:10:e:Footer::::::B1Vv" }) 12338 ] }); 12339} 12340const Uf = [ 12341 { icon: S1, title: "Route Planning", subtitle: "Visual map-based design", color: "text-[#EFBB0F]", bg: "bg-[#EFBB0F]/10" }, 12342 { icon: P3, title: "Blocking & Scheduling", subtitle: "One-click timetables", color: "text-[#0056B3]", bg: "bg-[#0056B3]/10" }, 12343 { icon: Q5, title: "Runcutting", subtitle: "Split routes into runs", color: "text-emerald-400", bg: "bg-emerald-400/10" }, 12344 { icon: h1, title: "Driver Scheduling", subtitle: "Assign & balance hours", color: "text-purple-400", bg: "bg-purple-400/10" }, 12345 { icon: N3, title: "Live Dashboard", subtitle: "Real-time fleet tracking", color: "text-[#0056B3]", bg: "bg-[#0056B3]/10" }, 12346 { icon: e0, title: "Driver MDT", subtitle: "Tablet-based nav & ID", color: "text-[#EFBB0F]", bg: "bg-[#EFBB0F]/10" }, 12347 { icon: X5, title: "GTFS Integration", subtitle: "Publish to Google Maps", color: "text-emerald-400", bg: "bg-emerald-400/10" }, 12348 { icon: ai, title: "Microtransit Flex", subtitle: "Deviated fixed route", color: "text-purple-400", bg: "bg-purple-400/10" } 12349]; 12350function Gf() { 12351 const { openContactModal: t } = Z(); 12352 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "c9yf0", _fgB: 1790697590629, _fgD: !0, className: "relative min-h-[90vh] flex items-center bg-[#0B1B2B] overflow-hidden", "data-fg-c9yf0": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:21:5:1426:3845:e:section:xtetete:1", children: [ 12353 /* @__PURE__ */ i( 12354 a, 12355 { 12356 _fgT: "div", 12357 _fgS: "c9yf2", 12358 _fgB: 1790697590629, 12359 className: "absolute top-0 right-0 w-[600px] h-[600px] rounded-full opacity-20 blur-[120px]", 12360 style: { background: "radial-gradient(circle, #EFBB0F 0%, transparent 70%)" }, 12361 "data-fg-c9yf2": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:23:7:1554:200:e:div" 12362 } 12363 ), 12364 /* @__PURE__ */ i( 12365 a, 12366 { 12367 _fgT: "div", 12368 _fgS: "c9yf3", 12369 _fgB: 1790697590629, 12370 className: "absolute bottom-0 left-0 w-[500px] h-[500px] rounded-full opacity-15 blur-[120px]", 12371 style: { background: "radial-gradient(circle, #0056B3 0%, transparent 70%)" }, 12372 "data-fg-c9yf3": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:27:7:1761:202:e:div" 12373 } 12374 ), 12375 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf4", _fgB: 1790697590629, className: "container mx-auto px-6 relative z-10 py-28 md:py-32", "data-fg-c9yf4": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:32:7:1971:3285:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c9yf5", _fgB: 1790697590629, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-c9yf5": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:33:9:2049:3194:e:div:xtetxte", children: [
12376 /* @__PURE__ */ c( 12377 a, 12378 { 12379 _fgT: m.div, 12380 _fgS: "c9yf7", 12381 _fgB: 1790697590629, 12382 initial: { opacity: 0, y: 30 }, 12383 animate: { opacity: 1, y: 0 }, 12384 transition: { duration: 0.7 }, 12385 "data-fg-c9yf7": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:35:11:2148:1852:e:motion.div:etetetete", 12386 children: [ 12387 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "c9yf8", _fgB: 1790697590629, href: "/all-in-one-platform", "data-fg-c9yf8": ":0:node_modules/wouter:40:13:2314:300:e:Link:e:::::C4yE", children: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "c9yf9", _fgB: 1790697590629, className: "inline-flex items-center gap-2 text-slate-400 text-sm mb-8 cursor-pointer hover:text-white transition-colors", "data-fg-c9yf9": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:41:15:2363:231:e:span:et", children: [ 12388 /* @__PURE__ */ i(a, { _fgT: O1, _fgS: "c9yf10", _fgB: 1790697590629, size: 14, "data-fg-c9yf10": ":0:node_modules/lucide-react:42:17:2507:23:e:ArrowLeft::::::EIC8" }), 12389 "Back to Platform Overview" 12390 ] }) }),
12391 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf12", _fgB: 1790697590629, className: "inline-block px-4 py-1.5 rounded-full border border-[#EFBB0F]/60 text-[#EFBB0F] text-xs tracking-widest uppercase mb-6", "data-fg-c9yf12": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:47:13:2628:181:e:div:t", children: "FIXED ROUTE" }), 12392 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "c9yf14", _fgB: 1790697590629, className: "text-4xl md:text-5xl lg:text-6xl text-white mb-6 leading-[1.15] font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-c9yf14": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:51:13:2823:308:e:h1:tete", children: [ 12393 "Plan It. Run It.", 12394 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c9yf16", _fgB: 1790697590629, "data-fg-c9yf16": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:53:15:2998:6:e:br" }), 12395 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c9yf17", _fgB: 1790697590629, className: "text-[#EFBB0F] italic font-[Playfair_Display]", "data-fg-c9yf17": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:54:15:3019:94:e:span:t", children: "Track Every Mile of It." }) 12396 ] }),
12397 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c9yf19", _fgB: 1790697590629, className: "text-lg text-slate-300 mb-10 leading-relaxed max-w-xl", "data-fg-c9yf19": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:57:13:3145:345:e:p:t", children: "A complete toolset for scheduled transit service. Build routes graphically, generate blocks and timetables, assign drivers, monitor your fleet live, and publish GTFS feeds. All inside the same platform that runs your demand-response operations." }), 12398 /* @__PURE__ */ c( 12399 a, 12400 { 12401 _fgT: "button", 12402 _fgS: "c9yf21", 12403 _fgB: 1790697590629, 12404 onClick: t, 12405 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 12406 style: { fontWeight: 600 }, 12407 "data-fg-c9yf21": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:61:13:3504:472:e:button:te", 12408 children: [ 12409 "Schedule a Meeting",
12410 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "c9yf23", _fgB: 1790697590629, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-c9yf23": ":0:node_modules/lucide-react:67:15:3871:83:e:ArrowRight::::::s5N" }) 12411 ] 12412 } 12413 ) 12414 ] 12415 } 12416 ), 12417 /* @__PURE__ */ i( 12418 a, 12419 { 12420 _fgT: m.div, 12421 _fgS: "c9yf25", 12422 _fgB: 1790697590629, 12423 initial: { opacity: 0, y: 30 }, 12424 animate: { opacity: 1, y: 0 }, 12425 transition: { duration: 0.7, delay: 0.2 }, 12426 className: "hidden lg:block", 12427 "data-fg-c9yf25": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:72:11:4061:1167:e:motion.div:e", 12428 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf26", _fgB: 1790697590629, className: "grid grid-cols-2 gap-3", "data-fg-c9yf26": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:78:13:4279:925:e:div:x", children: Uf.map((e, s) => /* @__PURE__ */ c( 12429 a, 12430 { 12431 _fgT: m.div, 12432 _fgS: "c9yf28", 12433 _fgB: 1790697590629, 12434 initial: { opacity: 0, scale: 0.95 }, 12435 animate: { opacity: 1, scale: 1 }, 12436 transition: { delay: 0.3 + s * 0.06 }, 12437 className: "bg-[#0F2A3F] border border-slate-700/50 rounded-xl p-4 hover:border-slate-600 transition-all duration-300 group", 12438 "data-fg-c9yf28": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:80:17:4381:786:e:motion.div:etete", 12439 children: [
12440 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf29", _fgB: 1790697590629, className: `w-9 h-9 rounded-lg ${e.bg} ${e.color} flex items-center justify-center mb-3`, "data-fg-c9yf29": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:87:19:4763:186:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: e.icon, _fgS: "c9yf30", _fgB: 1790697590629, size: 18, strokeWidth: 2, "data-fg-c9yf30": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:88:21:4885:39:e:card.icon" }) }), 12441 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf31", _fgB: 1790697590629, className: "text-white text-sm", style: { fontWeight: 600 }, "data-fg-c9yf31": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:90:19:4968:82:e:div:x", children: e.title }), 12442 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c9yf33", _fgB: 1790697590629, className: "text-slate-400 text-xs mt-0.5", "data-fg-c9yf33": ":0:/src/app/components/fixed-route/FixedRouteHero.tsx:91:19:5069:68:e:div:x", children: e.subtitle }) 12443 ] 12444 }, 12445 s 12446 )) }) 12447 } 12448 ) 12449 ] }) }) 12450 ] }); 12451} 12452const Li = globalThis.__GLOBALS__.getAssetURL("8b97f5656b20b72fe7680318eda1bb4253ea3624.png"), ci = globalThis.__GLOBALS__.getAssetURL("09e49eb03334eed195e52f0d0619b6cc67b32faa.png"), t0 = globalThis.__GLOBALS__.getAssetURL("7634769170bbfb0241d21bd2db527d2a4fcbbe86.png"); 12453function a0({ src: t, alt: e, onClose: s }) { 12454 return /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "cvv80", _fgB: 1790697590647, _fgD: !0, "data-fg-cvv80": ":0:node_modules/motion:13:5:698:984:e:AnimatePresence:e:1::::DAs4", children: /* @__PURE__ */ c( 12455 a, 12456 { 12457 _fgT: m.div, 12458 _fgS: "cvv81", 12459 _fgB: 1790697590647, 12460 initial: { opacity: 0 }, 12461 animate: { opacity: 1 }, 12462 exit: { opacity: 0 }, 12463 className: "fixed inset-0 z-[100] flex items-center justify-center bg-black/90 backdrop-blur-sm p-4 md:p-8 cursor-zoom-out", 12464 onClick: s, 12465 "data-fg-cvv81": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:14:7:722:937:e:motion.div:ete", 12466 children: [
12467 /* @__PURE__ */ i( 12468 a, 12469 { 12470 _fgT: "button", 12471 _fgS: "cvv82", 12472 _fgB: 1790697590647, 12473 className: "absolute top-6 right-6 p-2 bg-white/10 hover:bg-white/20 rounded-full text-white transition-colors z-10", 12474 onClick: s, 12475 "data-fg-cvv82": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:21:9:1003:215:e:button:e", 12476 children: /* @__PURE__ */ i(a, { _fgT: D3, _fgS: "cvv83", _fgB: 1790697590647, size: 24, "data-fg-cvv83": ":0:node_modules/lucide-react:25:11:1185:15:e:X::::::TvS" }) 12477 } 12478 ), 12479 /* @__PURE__ */ i( 12480 a, 12481 { 12482 _fgT: m.img, 12483 _fgS: "cvv84", 12484 _fgB: 1790697590647, 12485 initial: { scale: 0.9, opacity: 0 }, 12486 animate: { scale: 1, opacity: 1 }, 12487 exit: { scale: 0.9, opacity: 0 }, 12488 transition: { type: "spring", stiffness: 300, damping: 30 }, 12489 src: t, 12490 alt: e, 12491 className: "max-w-full max-h-full rounded-lg shadow-2xl object-contain cursor-default", 12492 onClick: (r) => r.stopPropagation(), 12493 "data-fg-cvv84": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:27:9:1227:412:e:motion.img" 12494 } 12495 ) 12496 ] 12497 } 12498 ) }); 12499} 12500function Jf({ onOpenFullscreen: t }) { 12501 const e = H(null), s = Nt(e, { once: !0, margin: "-80px" }); 12502 return /* @__PURE__ */ c( 12503 a, 12504 { 12505 _fgT: m.div, 12506 _fgS: "cvv85", 12507 _fgB: 1790697590647, 12508 _fgD: !0, 12509 ref: e, 12510 className: "relative group cursor-pointer rounded-2xl overflow-hidden border border-slate-700/50 bg-[#0B1B2B] shadow-2xl", 12511 initial: { opacity: 0, y: 20 }, 12512 animate: s ? { opacity: 1, y: 0 } : {}, 12513 transition: { duration: 0.6, delay: 0.15 }, 12514 onClick: t, 12515 "data-fg-cvv85": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:50:5:2073:1227:e:motion.div:xtetxtetxte:1", 12516 children: [
12517 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv87", _fgB: 1790697590647, className: "absolute top-4 right-4 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200", "data-fg-cvv87": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:59:7:2440:389:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv88", _fgB: 1790697590647, className: "bg-black/60 backdrop-blur-sm text-white p-2.5 rounded-xl border border-white/10 flex items-center gap-2", "data-fg-cvv88": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:60:9:2560:256:e:div:ete", children: [ 12518 /* @__PURE__ */ i(a, { _fgT: C3, _fgS: "cvv89", _fgB: 1790697590647, size: 16, "data-fg-cvv89": ":0:node_modules/lucide-react:61:11:2692:23:e:Maximize2::::::DtbI" }), 12519 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv810", _fgB: 1790697590647, className: "text-xs", style: { fontWeight: 500 }, "data-fg-cvv810": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:62:11:2726:75:e:span:t", children: "View Full Size" }) 12520 ] }) }),
12521 /* @__PURE__ */ i( 12522 a, 12523 { 12524 _fgT: "img", 12525 _fgS: "cvv813", 12526 _fgB: 1790697590647, 12527 src: Li, 12528 alt: "IT Curves Route Planning â map-based route builder with stations and waypoints", 12529 className: "w-full h-auto object-cover transition-transform duration-500 group-hover:scale-[1.02]", 12530 "data-fg-cvv813": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:67:7:2862:243:e:img" 12531 } 12532 ), 12533 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv815", _fgB: 1790697590647, className: "absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-[#0B1B2B]/60 to-transparent pointer-events-none", "data-fg-cvv815": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:74:7:3160:122:e:div" }) 12534 ] 12535 } 12536 ); 12537} 12538function Kf() { 12539 const [t, e] = j(!1); 12540 return /* @__PURE__ */ c(C, { children: [ 12541 t && /* @__PURE__ */ i( 12542 a, 12543 { 12544 _fgT: a0, 12545 _fgS: "cvv818", 12546 _fgB: 1790697590647, 12547 src: Li, 12548 alt: "IT Curves Route Planning â Full Size", 12549 onClose: () => e(!1), 12550 "data-fg-cvv818": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:85:9:3461:155:e:Lightbox::::::DOX7" 12551 } 12552 ), 12553 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv819", _fgB: 1790697590647, id: "feat-route-planning", className: "bg-white py-24", "data-fg-cvv819": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:91:7:3632:2294:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv820", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv820": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:92:9:3702:2207:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv821", _fgB: 1790697590647, className: "grid lg:grid-cols-[3fr_5fr] gap-12 lg:gap-16 items-center", "data-fg-cvv821": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:93:11:3763:2131:e:div:xtetxte", children: [
12554 /* @__PURE__ */ c( 12555 a, 12556 { 12557 _fgT: m.div, 12558 _fgS: "cvv823", 12559 _fgB: 1790697590647, 12560 initial: { opacity: 0, y: 20 }, 12561 whileInView: { opacity: 1, y: 0 }, 12562 viewport: { once: !0 }, 12563 transition: { duration: 0.5 }, 12564 "data-fg-cvv823": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:95:13:3876:1612:e:motion.div:etetete", 12565 children: [ 12566 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv824", _fgB: 1790697590647, className: "text-[#EFBB0F] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv824": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:101:15:4096:127:e:span:t", children: "ROUTE PLANNING" }), 12567 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv826", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv826": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:102:15:4238:199:e:h2:t", children: "Build Routes Visually, Not in Spreadsheets" }),
12568 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv828", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv828": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:105:15:4452:243:e:p:t", children: "Map stations and waypoints graphically, create reusable route segments, and merge them into full blocks with configurable headways and time windows." }), 12569 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv830", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv830": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:108:15:4710:752:e:ul:x", children: [ 12570 "Establish stations and intermediate waypoints directly on the map", 12571 "Develop templates for route segments that can be reused across multiple routes", 12572 "Set varied headways by time of day so peak and off-peak frequencies are handled automatically", 12573 "Create custom blocks for holidays and weekends with one-click generation" 12574 ].map((s, r) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv832", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv832": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:115:19:5204:218:e:li:ete", children: [
12575 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv833", _fgB: 1790697590647, size: 18, className: "text-[#EFBB0F] mt-0.5 flex-shrink-0", "data-fg-cvv833": ":0:node_modules/lucide-react:116:21:5287:74:e:CheckCircle2::::::CELI" }), 12576 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv834", _fgB: 1790697590647, "data-fg-cvv834": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:117:21:5382:16:e:span:x", children: s }) 12577 ] }, r)) }) 12578 ] 12579 } 12580 ), 12581 /* @__PURE__ */ i( 12582 a, 12583 { 12584 _fgT: m.div, 12585 _fgS: "cvv837", 12586 _fgB: 1790697590647, 12587 initial: { opacity: 0, y: 20 }, 12588 whileInView: { opacity: 1, y: 0 }, 12589 viewport: { once: !0 }, 12590 transition: { duration: 0.5, delay: 0.15 }, 12591 "data-fg-cvv837": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:124:13:5548:329:e:motion.div:e", 12592 children: /* @__PURE__ */ i(a, { _fgT: Jf, _fgS: "cvv838", _fgB: 1790697590647, onOpenFullscreen: () => e(!0), "data-fg-cvv838": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:130:15:5781:70:e:RoutePlanningVisual::::::jEq" }) 12593 } 12594 ) 12595 ] }) }) }) 12596 ] }); 12597} 12598function Yf({ onOpenFullscreen: t }) { 12599 const e = H(null), s = Nt(e, { once: !0, margin: "-80px" }); 12600 return /* @__PURE__ */ c( 12601 a, 12602 { 12603 _fgT: m.div, 12604 _fgS: "cvv839", 12605 _fgB: 1790697590647, 12606 _fgD: !0, 12607 ref: e, 12608 className: "relative group cursor-pointer rounded-2xl overflow-hidden border border-slate-700/50 bg-[#0B1B2B] shadow-2xl", 12609 initial: { opacity: 0, y: 20 }, 12610 animate: s ? { opacity: 1, y: 0 } : {}, 12611 transition: { duration: 0.6, delay: 0.15 }, 12612 onClick: t, 12613 "data-fg-cvv839": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:147:5:6314:1223:e:motion.div:xtetxtetxte:1", 12614 children: [
12615 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv841", _fgB: 1790697590647, className: "absolute top-4 right-4 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200", "data-fg-cvv841": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:156:7:6681:389:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv842", _fgB: 1790697590647, className: "bg-black/60 backdrop-blur-sm text-white p-2.5 rounded-xl border border-white/10 flex items-center gap-2", "data-fg-cvv842": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:157:9:6801:256:e:div:ete", children: [ 12616 /* @__PURE__ */ i(a, { _fgT: C3, _fgS: "cvv843", _fgB: 1790697590647, size: 16, "data-fg-cvv843": ":0:node_modules/lucide-react:158:11:6933:23:e:Maximize2::::::DtbI" }), 12617 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv844", _fgB: 1790697590647, className: "text-xs", style: { fontWeight: 500 }, "data-fg-cvv844": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:159:11:6967:75:e:span:t", children: "View Full Size" }) 12618 ] }) }),
12619 /* @__PURE__ */ i( 12620 a, 12621 { 12622 _fgT: "img", 12623 _fgS: "cvv847", 12624 _fgB: 1790697590647, 12625 src: ci, 12626 alt: "IT Curves Blocking â Gantt-style block manager with route scheduling timeline", 12627 className: "w-full h-auto object-contain transition-transform duration-500 group-hover:scale-[1.02]", 12628 "data-fg-cvv847": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:164:7:7103:239:e:img" 12629 } 12630 ), 12631 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv849", _fgB: 1790697590647, className: "absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-[#0B1B2B]/60 to-transparent pointer-events-none", "data-fg-cvv849": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:171:7:7397:122:e:div" }) 12632 ] 12633 } 12634 ); 12635} 12636function Xf() { 12637 const [t, e] = j(!1); 12638 return /* @__PURE__ */ c(C, { children: [ 12639 t && /* @__PURE__ */ i( 12640 a, 12641 { 12642 _fgT: a0, 12643 _fgS: "cvv852", 12644 _fgB: 1790697590647, 12645 src: ci, 12646 alt: "IT Curves Blocking â Full Size", 12647 onClose: () => e(!1), 12648 "data-fg-cvv852": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:182:9:7693:144:e:Lightbox::::::DOX7" 12649 } 12650 ), 12651 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv853", _fgB: 1790697590647, id: "feat-blocking", className: "bg-[#F8FAFC] py-24", "data-fg-cvv853": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:188:7:7853:2383:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv854", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv854": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:189:9:7921:2298:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv855", _fgB: 1790697590647, className: "grid lg:grid-cols-[5fr_3fr] gap-12 lg:gap-16 items-center", "data-fg-cvv855": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:190:11:7982:2222:e:div:xtetxte", children: [
12652 /* @__PURE__ */ i( 12653 a, 12654 { 12655 _fgT: m.div, 12656 _fgS: "cvv857", 12657 _fgB: 1790697590647, 12658 initial: { opacity: 0, y: 20 }, 12659 whileInView: { opacity: 1, y: 0 }, 12660 viewport: { once: !0 }, 12661 transition: { duration: 0.5 }, 12662 className: "order-2 lg:order-1", 12663 "data-fg-cvv857": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:192:13:8134:356:e:motion.div:e", 12664 children: /* @__PURE__ */ i(a, { _fgT: Yf, _fgS: "cvv858", _fgB: 1790697590647, onOpenFullscreen: () => e(!0), "data-fg-cvv858": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:199:15:8399:65:e:BlockingVisual::::::DFHf" }) 12665 } 12666 ), 12667 /* @__PURE__ */ c( 12668 a, 12669 { 12670 _fgT: m.div, 12671 _fgS: "cvv860", 12672 _fgB: 1790697590647, 12673 initial: { opacity: 0, y: 20 }, 12674 whileInView: { opacity: 1, y: 0 }, 12675 viewport: { once: !0 }, 12676 transition: { duration: 0.5, delay: 0.15 }, 12677 className: "order-1 lg:order-2", 12678 "data-fg-cvv860": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:203:13:8548:1639:e:motion.div:etetete", 12679 children: [
12680 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv861", _fgB: 1790697590647, className: "text-[#0056B3] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv861": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:210:15:8826:121:e:span:t", children: "BLOCKING" }), 12681 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv863", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv863": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:211:15:8962:189:e:h2:t", children: "Generate Timetables in One Click" }), 12682 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv865", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv865": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:214:15:9166:262:e:p:t", children: "Review blocks in a tabular view, see schedule time at each station, and generate or edit blocks with minimal effort. Mark stations as on-request or excluded as needed." }),
12683 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv867", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv867": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:217:15:9443:718:e:ul:x", children: [ 12684 "Tabular block view shows schedule time at every station across all rows", 12685 "One-click block generation from your route segments and headway settings", 12686 "Mark stations as on-request or exclude them from specific blocks", 12687 "Edit blocks with drag-and-drop ease without rebuilding from scratch" 12688 ].map((s, r) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv869", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv869": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:224:19:9903:218:e:li:ete", children: [ 12689 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv870", _fgB: 1790697590647, size: 18, className: "text-[#0056B3] mt-0.5 flex-shrink-0", "data-fg-cvv870": ":0:node_modules/lucide-react:225:21:9986:74:e:CheckCircle2::::::CELI" }),
12690 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv871", _fgB: 1790697590647, "data-fg-cvv871": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:226:21:10081:16:e:span:x", children: s }) 12691 ] }, r)) }) 12692 ] 12693 } 12694 ) 12695 ] }) }) }) 12696 ] }); 12697} 12698function Qf() { 12699 const t = H(null), e = Nt(t, { once: !0, margin: "-80px" }), s = [ 12700 { run: "R-01", route: "Route 42 Block #1+#3", days: "MâF", hours: "7.5h", status: "green" }, 12701 { run: "R-02", route: "Route 15 Block #2+#5", days: "MâF", hours: "8.0h", status: "green" }, 12702 { run: "R-03", route: "Route 7 Block #4", days: "MâSat", hours: "9.2h", status: "orange" }, 12703 { run: "R-04", route: "Route 42 Weekend", days: "SatâSun", hours: "6.0h", status: "green" } 12704 ]; 12705 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv873", _fgB: 1790697590647, _fgD: !0, ref: t, className: "bg-[#0B1B2B] rounded-2xl p-6 md:p-8 border border-slate-700/50", "data-fg-cvv873": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:253:5:10984:2149:e:div:etxtetxte:1", children: [ 12706 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv874", _fgB: 1790697590647, className: "flex items-center gap-2 mb-6", "data-fg-cvv874": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:254:7:11081:351:e:div:etetete", children: [
12707 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv875", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-red-500/80", "data-fg-cvv875": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:255:9:11136:54:e:div" }), 12708 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv876", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-yellow-500/80", "data-fg-cvv876": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:256:9:11199:57:e:div" }), 12709 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv877", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-green-500/80", "data-fg-cvv877": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:257:9:11265:56:e:div" }), 12710 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv878", _fgB: 1790697590647, className: "text-slate-500 text-xs ml-2", "data-fg-cvv878": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:258:9:11330:89:e:span:t", children: "Runcutting â Driver Assignment Table" }) 12711 ] }), 12712 /* @__PURE__ */ i( 12713 a, 12714 { 12715 _fgT: m.div, 12716 _fgS: "cvv881", 12717 _fgB: 1790697590647, 12718 className: "grid grid-cols-[60px_1fr_80px_70px] gap-2 mb-2 px-2", 12719 initial: { opacity: 0 }, 12720 animate: e ? { opacity: 1 } : {}, 12721 transition: { delay: 0.2 }, 12722 "data-fg-cvv881": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:262:7:11467:430:e:motion.div:x", 12723 children: ["Run", "Route / Block", "Days", "Hours"].map((r) => /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv883", _fgB: 1790697590647, className: "text-[10px] text-slate-500 uppercase tracking-wider", style: { fontWeight: 600 }, "data-fg-cvv883": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:269:11:11749:116:e:span:x", children: r }, r)) 12724 } 12725 ), 12726 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv886", _fgB: 1790697590647, className: "space-y-1.5", "data-fg-cvv886": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:274:7:11952:1170:e:div:x", children: s.map((r, n) => /* @__PURE__ */ c( 12727 a, 12728 { 12729 _fgT: m.div, 12730 _fgS: "cvv888", 12731 _fgB: 1790697590647, 12732 className: "grid grid-cols-[60px_1fr_80px_70px] gap-2 items-center bg-slate-800/40 rounded-lg px-2 py-2.5 border border-slate-700/30", 12733 initial: { opacity: 0, x: 30 }, 12734 animate: e ? { opacity: 1, x: 0 } : {}, 12735 transition: { 12736 duration: 0.45, 12737 delay: 0.3 + n * 0.12, 12738 ease: [0.25, 0.46, 0.45, 0.94] 12739 }, 12740 "data-fg-cvv888": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:276:11:12022:1075:e:motion.div:etetete", 12741 children: [
12742 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv889", _fgB: 1790697590647, className: "text-xs text-white", style: { fontWeight: 600 }, "data-fg-cvv889": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:287:13:12482:79:e:span:x", children: r.run }), 12743 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv891", _fgB: 1790697590647, className: "text-xs text-slate-300 truncate", "data-fg-cvv891": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:288:13:12574:66:e:span:x", children: r.route }), 12744 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv893", _fgB: 1790697590647, className: "text-xs text-slate-400", "data-fg-cvv893": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:289:13:12653:56:e:span:x", children: r.days }), 12745 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv895", _fgB: 1790697590647, className: `text-xs px-2 py-0.5 rounded-full text-center ${r.status === "green" ? "bg-emerald-500/15 text-emerald-400 border border-emerald-500/30" : "bg-[#EFBB0F]/15 text-[#EFBB0F] border border-[#EFBB0F]/30"}`, style: { fontWeight: 600 }, "data-fg-cvv895": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:290:13:12722:351:e:span:x", children: r.hours }) 12746 ] 12747 }, 12748 r.run 12749 )) }) 12750 ] }); 12751} 12752function ep() { 12753 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv897", _fgB: 1790697590647, _fgD: !0, id: "feat-runcutting", className: "bg-white py-24", "data-fg-cvv897": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:306:5:13195:2043:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv898", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv898": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:307:7:13259:1964:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv899", _fgB: 1790697590647, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-cvv899": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:308:9:13318:1892:e:div:xtetxte", children: [ 12754 /* @__PURE__ */ c( 12755 a, 12756 { 12757 _fgT: m.div, 12758 _fgS: "cvv8101", 12759 _fgB: 1790697590647, 12760 initial: { opacity: 0, y: 20 }, 12761 whileInView: { opacity: 1, y: 0 }, 12762 viewport: { once: !0 }, 12763 transition: { duration: 0.5 }, 12764 "data-fg-cvv8101": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:310:11:13409:1484:e:motion.div:etetete", 12765 children: [
12766 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8102", _fgB: 1790697590647, className: "text-[#EFBB0F] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv8102": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:316:13:13617:123:e:span:t", children: "RUNCUTTING" }), 12767 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv8104", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv8104": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:317:13:13753:184:e:h2:t", children: "Segment Routes Into Driver Runs" }), 12768 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv8106", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv8106": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:320:13:13950:254:e:p:t", children: "View all trips in a comprehensive table, split them into manageable runs, and see total hours per driver at a glance. Select route availability by day of the week." }),
12769 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv8108", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv8108": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:323:13:14217:652:e:ul:x", children: [ 12770 "View all route trips in one comprehensive table", 12771 "Segment routes into runs with user-friendly drag tools", 12772 "Instantly see which routes have assigned runs and which are unassigned", 12773 "Run summaries show total hours per weekday for labor planning" 12774 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv8110", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv8110": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:330:17:14621:212:e:li:ete", children: [ 12775 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv8111", _fgB: 1790697590647, size: 18, className: "text-[#EFBB0F] mt-0.5 flex-shrink-0", "data-fg-cvv8111": ":0:node_modules/lucide-react:331:19:14702:74:e:CheckCircle2::::::CELI" }), 12776 /* @__P
12776URE__ */ i(a, { _fgT: "span", _fgS: "cvv8112", _fgB: 1790697590647, "data-fg-cvv8112": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:332:19:14795:16:e:span:x", children: t }) 12777 ] }, e)) }) 12778 ] 12779 } 12780 ), 12781 /* @__PURE__ */ i( 12782 a, 12783 { 12784 _fgT: m.div, 12785 _fgS: "cvv8115", 12786 _fgB: 1790697590647, 12787 initial: { opacity: 0, y: 20 }, 12788 whileInView: { opacity: 1, y: 0 }, 12789 viewport: { once: !0 }, 12790 transition: { duration: 0.5, delay: 0.15 }, 12791 "data-fg-cvv8115": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:339:11:14930:265:e:motion.div:e", 12792 children: /* @__PURE__ */ i(a, { _fgT: Qf, _fgS: "cvv8116", _fgB: 1790697590647, "data-fg-cvv8116": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:345:13:15151:20:e:RuncuttingVisual::::::CWux" }) 12793 } 12794 ) 12795 ] }) }) }); 12796} 12797function tp({ onOpenFullscreen: t }) { 12798 const e = H(null), s = Nt(e, { once: !0, margin: "-80px" }); 12799 return /* @__PURE__ */ c( 12800 a, 12801 { 12802 _fgT: m.div, 12803 _fgS: "cvv8117", 12804 _fgB: 1790697590647, 12805 _fgD: !0, 12806 ref: e, 12807 className: "relative group cursor-pointer rounded-2xl overflow-hidden border border-slate-700/50 bg-[#0B1B2B] shadow-2xl", 12808 initial: { opacity: 0, y: 20 }, 12809 animate: s ? { opacity: 1, y: 0 } : {}, 12810 transition: { duration: 0.6, delay: 0.15 }, 12811 onClick: t, 12812 "data-fg-cvv8117": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:362:5:15630:1223:e:motion.div:xtetxtetxte:1", 12813 children: [
12814 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8119", _fgB: 1790697590647, className: "absolute top-4 right-4 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200", "data-fg-cvv8119": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:371:7:15997:389:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8120", _fgB: 1790697590647, className: "bg-black/60 backdrop-blur-sm text-white p-2.5 rounded-xl border border-white/10 flex items-center gap-2", "data-fg-cvv8120": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:372:9:16117:256:e:div:ete", children: [ 12815 /* @__PURE__ */ i(a, { _fgT: C3, _fgS: "cvv8121", _fgB: 1790697590647, size: 16, "data-fg-cvv8121": ":0:node_modules/lucide-react:373:11:16249:23:e:Maximize2::::::DtbI" }), 12816 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8122", _fgB: 1790697590647, className: "text-xs", style: { fontWeight: 500 }, "data-fg-cvv8122": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:374:11:16283:75:e:span:t", children: "View Full Size" }) 12817 ] }) }),
12818 /* @__PURE__ */ i( 12819 a, 12820 { 12821 _fgT: "img", 12822 _fgS: "cvv8125", 12823 _fgB: 1790697590647, 12824 src: t0, 12825 alt: "IT Curves Live Dashboard â real-time fleet map with multi-route tracking", 12826 className: "w-full h-auto object-contain transition-transform duration-500 group-hover:scale-[1.02]", 12827 "data-fg-cvv8125": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:379:7:16419:239:e:img" 12828 } 12829 ), 12830 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8127", _fgB: 1790697590647, className: "absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-[#0B1B2B]/60 to-transparent pointer-events-none", "data-fg-cvv8127": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:386:7:16713:122:e:div" }) 12831 ] 12832 } 12833 ); 12834} 12835function ap() { 12836 const [t, e] = j(!1); 12837 return /* @__PURE__ */ c(C, { children: [ 12838 t && /* @__PURE__ */ i( 12839 a, 12840 { 12841 _fgT: a0, 12842 _fgS: "cvv8130", 12843 _fgB: 1790697590647, 12844 src: t0, 12845 alt: "IT Curves Live Dashboard â Full Size", 12846 onClose: () => e(!1), 12847 "data-fg-cvv8130": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:397:9:17014:155:e:Lightbox::::::DOX7" 12848 } 12849 ), 12850 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv8131", _fgB: 1790697590647, id: "feat-live-dashboard", className: "bg-[#F8FAFC] py-24", "data-fg-cvv8131": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:403:7:17185:2341:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8132", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv8132": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:404:9:17259:2250:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8133", _fgB: 1790697590647, className: "grid lg:grid-cols-[5fr_3fr] gap-12 lg:gap-16 items-center", "data-fg-cvv8133": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:405:11:17320:2174:e:div:xtetxte", children: [
12851 /* @__PURE__ */ i( 12852 a, 12853 { 12854 _fgT: m.div, 12855 _fgS: "cvv8135", 12856 _fgB: 1790697590647, 12857 initial: { opacity: 0, y: 20 }, 12858 whileInView: { opacity: 1, y: 0 }, 12859 viewport: { once: !0 }, 12860 transition: { duration: 0.5 }, 12861 className: "order-2 lg:order-1", 12862 "data-fg-cvv8135": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:407:13:17461:361:e:motion.div:e", 12863 children: /* @__PURE__ */ i(a, { _fgT: tp, _fgS: "cvv8136", _fgB: 1790697590647, onOpenFullscreen: () => e(!0), "data-fg-cvv8136": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:414:15:17726:70:e:LiveDashboardVisual::::::DNrq" }) 12864 } 12865 ), 12866 /* @__PURE__ */ c( 12867 a, 12868 { 12869 _fgT: m.div, 12870 _fgS: "cvv8138", 12871 _fgB: 1790697590647, 12872 initial: { opacity: 0, y: 20 }, 12873 whileInView: { opacity: 1, y: 0 }, 12874 viewport: { once: !0 }, 12875 transition: { duration: 0.5, delay: 0.15 }, 12876 className: "order-1 lg:order-2", 12877 "data-fg-cvv8138": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:418:13:17869:1608:e:motion.div:etetete", 12878 children: [
12879 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8139", _fgB: 1790697590647, className: "text-[#0056B3] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv8139": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:425:15:18147:127:e:span:t", children: "LIVE DASHBOARD" }), 12880 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv8141", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv8141": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:426:15:18289:193:e:h2:t", children: "See Your Entire Network in Real Time" }), 12881 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv8143", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv8143": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:429:15:18497:251:e:p:t", children: "Track every vehicle, monitor passenger loads, check dwell times, and communicate with drivers. Schedule microtransit deviations directly from the dashboard." }),
12882 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv8145", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv8145": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:432:15:18763:688:e:ul:x", children: [ 12883 "Real-time vehicle tracking with location, speed, and schedule adherence", 12884 "Live passenger count per vehicle from automatic passenger counters", 12885 "Dwell time monitoring and arrival times at every stop", 12886 "Direct driver communication from the dispatcher screen" 12887 ].map((s, r) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv8147", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv8147": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:439:19:19193:218:e:li:ete", children: [ 12888 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv8148", _fgB: 1790697590647, size: 18, className: "text-[#0056B3] mt-0.5 flex-shrink-0", "data-fg-cvv8148": ":0:node_modules/lucide-react:440:21:19276:74:e:CheckCircle2::::::CELI" }),
12889 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8149", _fgB: 1790697590647, "data-fg-cvv8149": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:441:21:19371:16:e:span:x", children: s }) 12890 ] }, r)) }) 12891 ] 12892 } 12893 ) 12894 ] }) }) }) 12895 ] }); 12896} 12897function sp() { 12898 const t = H(null), e = Nt(t, { once: !0, margin: "-80px" }), s = [ 12899 { name: "Depot", time: "6:00 AM", boarding: "+2 / â0", status: "completed", statusLabel: "Departed" }, 12900 { name: "MLK & 5th", time: "6:12 AM", boarding: "+5 / â1", status: "completed", statusLabel: "Departed" }, 12901 { name: "City Hall", time: "â", boarding: "+3 / â2", status: "current", statusLabel: "Arriving" }, 12902 { name: "University", time: "â", boarding: "â", status: "upcoming", statusLabel: "Scheduled" } 12903 ]; 12904 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8151", _fgB: 1790697590647, _fgD: !0, ref: t, className: "bg-[#0B1B2B] rounded-2xl p-6 md:p-8 border border-slate-700/50 max-w-sm mx-auto lg:mx-0 lg:ml-auto", "data-fg-cvv8151": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:468:5:20308:4257:e:
12904div:xte:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8153", _fgB: 1790697590647, className: "bg-[#0F2A3F] rounded-xl border border-slate-600/50 overflow-hidden", "data-fg-cvv8153": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:470:7:20468:4086:e:div:xtetxte", children: [ 12905 /* @__PURE__ */ c( 12906 a, 12907 { 12908 _fgT: m.div, 12909 _fgS: "cvv8155", 12910 _fgB: 1790697590647, 12911 className: "flex items-center justify-between px-4 py-2.5 border-b border-slate-700/50", 12912 initial: { opacity: 0 }, 12913 animate: e ? { opacity: 1 } : {}, 12914 transition: { delay: 0.2 }, 12915 "data-fg-cvv8155": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:472:9:20588:541:e:motion.div:ete", 12916 children: [ 12917 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8156", _fgB: 1790697590647, className: "text-xs text-white", style: { fontWeight: 600 }, "data-fg-cvv8156": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:478:11:20839:96:e:span:t", children: "Route 42 · Downtown Loop" }),
12918 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8158", _fgB: 1790697590647, className: "text-[10px] px-2 py-0.5 rounded-full bg-emerald-400/10 text-emerald-400 border border-emerald-400/30", style: { fontWeight: 600 }, "data-fg-cvv8158": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:479:11:20946:161:e:span:t", children: "On Time" }) 12919 ] 12920 } 12921 ), 12922 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8161", _fgB: 1790697590647, className: "px-4 py-3 space-y-0", "data-fg-cvv8161": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:483:9:21185:3356:e:div:x", children: s.map((r, n) => /* @__PURE__ */ c( 12923 a, 12924 { 12925 _fgT: m.div, 12926 _fgS: "cvv8163", 12927 _fgB: 1790697590647, 12928 className: "flex items-start gap-3 relative", 12929 initial: { opacity: 0, y: 12 }, 12930 animate: e ? { opacity: 1, y: 0 } : {}, 12931 transition: { 12932 duration: 0.4, 12933 delay: 0.4 + n * 0.2, 12934 ease: [0.25, 0.46, 0.45, 0.94] 12935 }, 12936 "data-fg-cvv8163": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:485:13:21271:3241:e:motion.div:xtxtxtetxte", 12937 children: [ 12938 n < s.length - 1 && /* @__PURE__ */ i( 12939 a, 12940 { 12941 _fgT: m.div, 12942 _fgS: "cvv8166", 12943 _fgB: 1790697590647, 12944 className: `absolute left-[7px] top-[18px] w-[2px] ${r.status === "completed" ? "bg-emerald-500/40" : r.status === "current" ? "bg-[#0056B3]/40" : "bg-slate-700/40"}`, 12945 initial: { height: 0 }, 12946 animate: e ? { height: "100%" } : { height: 0 }, 12947 transition: { duration: 0.4, delay: 0.6 + n * 0.2 }, 12948 "data-fg-cvv8166": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:498:17:21737:447:e:motion.div" 12949 } 12950 ),
12951 /* @__PURE__ */ c( 12952 a, 12953 { 12954 _fgT: m.div, 12955 _fgS: "cvv8168", 12956 _fgB: 1790697590647, 12957 className: `relative z-10 w-4 h-4 rounded-full mt-0.5 flex-shrink-0 flex items-center justify-center ${r.status === "completed" ? "bg-emerald-500" : r.status === "current" ? "bg-[#0056B3]" : "bg-slate-600"}`, 12958 initial: { scale: 0 }, 12959 animate: e ? { scale: 1 } : { scale: 0 }, 12960 transition: { type: "spring", stiffness: 500, damping: 25, delay: 0.35 + n * 0.2 }, 12961 "data-fg-cvv8168": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:509:15:22243:1206:e:motion.div:xtx", 12962 children: [ 12963 r.status === "completed" && /* @__PURE__ */ i(a, { _fgT: "svg", _fgS: "cvv8170", _fgB: 1790697590647, width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", "data-fg-cvv8170": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:520:19:22844:174:e:svg:e", children: /* @__PURE__ */ i("path", { d: "M1.5 4L3.2 5.7L6.5 2.3", stroke: "white", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round", "data-fg-cvv8171": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:520:75:22900:112:e:path" }) }), 12964 r.status === "current" && /* @__PURE__ */ i( 12965 a, 12966 { 12967 _fgT: m.div, 12968 _fgS: "cvv8173", 12969 _fgB: 1790697590647, 12970 className: "absolute inset-[-4px] rounded-full border-2 border-[#0056B3]/30", 12971 animate: e ? { scale: [1, 1.5, 1], opacity: [0.6, 0, 0.6] } : {}, 12972 transition: { repeat: 1 / 0, duration: 2, delay: 1.2 }, 12973 "data-fg-cvv8173": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:523:19:23104:298:e:motion.div" 12974 } 12975 ) 12976 ] 12977 } 12978 ),
12979 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8175", _fgB: 1790697590647, className: `flex-1 pb-4 ${r.status === "upcoming" ? "opacity-40" : ""}`, "data-fg-cvv8175": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:532:15:23495:991:e:div:ete", children: [ 12980 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8176", _fgB: 1790697590647, className: "flex items-center justify-between", "data-fg-cvv8176": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:533:17:23593:556:e:div:ete", children: [ 12981 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8177", _fgB: 1790697590647, className: "text-xs text-white", style: { fontWeight: 600 }, "data-fg-cvv8177": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:534:19:23663:83:e:span:x", children: r.name }), 12982 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8179", _fgB: 1790697590647, className: `text-[10px] px-1.5 py-0.5 rounded ${r.status === "completed" ? "text-emerald-400" : r.status === "current" ? "text-[#0056B3] bg-[#0056B3]/10" : "text-slate-500"}`, style: { fontWeight: 500 }, "data-fg-cvv8179": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:535:19:23765:361:e:span:x", children: r.statusLabel }) 12983 ] }),
12984 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8181", _fgB: 1790697590647, className: "flex items-center gap-3 mt-0.5", "data-fg-cvv8181": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:543:17:24166:299:e:div:xtx", children: [ 12985 r.time !== "â" && /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8183", _fgB: 1790697590647, className: "text-[10px] text-slate-400", "data-fg-cvv8183": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:544:41:24255:63:e:span:x", children: r.time }), 12986 r.boarding !== "â" && /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "cvv8186", _fgB: 1790697590647, className: "text-[10px] text-slate-500", "data-fg-cvv8186": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:545:45:24364:77:e:span:tx", children: [ 12987 "Boarding: ", 12988 r.boarding 12989 ] }) 12990 ] }) 12991 ] }) 12992 ] 12993 }, 12994 n 12995 )) }) 12996 ] }) }); 12997} 12998function ip() { 12999 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv8189", _fgB: 1790697590647, _fgD: !0, id: "feat-driver-mdt", className: "bg-white py-24", "data-fg-cvv8189": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:558:5:24626:2187:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8190", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv8190": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:559:7:24690:2108:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8191", _fgB: 1790697590647, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-cvv8191": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:560:9:24749:2036:e:div:xtetxte", children: [ 13000 /* @__PURE__ */ c( 13001 a, 13002 { 13003 _fgT: m.div, 13004 _fgS: "cvv8193", 13005 _fgB: 1790697590647, 13006 initial: { opacity: 0, y: 20 }, 13007 whileInView: { opacity: 1, y: 0 }, 13008 viewport: { once: !0 }, 13009 transition: { duration: 0.5 }, 13010 "data-fg-cvv8193": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:562:11:24840:1629:e:motion.div:etetete", 13011 children: [
13012 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8194", _fgB: 1790697590647, className: "text-[#EFBB0F] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv8194": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:568:13:25048:123:e:span:t", children: "DRIVER MDT" }), 13013 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv8196", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv8196": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:569:13:25184:199:e:h2:t", children: "Off-the-Shelf Tablets. Purpose-Built Software." }), 13014 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv8198", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv8198": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:572:13:25396:252:e:p:t", children: "Drivers get stop-by-stop navigation, real-time route updates, and automatic rider identification on standard consumer tablets using standard cellular data plans." }),
13015 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv8200", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv8200": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:575:13:25661:784:e:ul:x", children: [ 13016 "Standard consumer tablets running on LTE, 5G, or any cellular data plan", 13017 "Stop-by-stop navigation with real-time route updates pushed from dispatch", 13018 "Automatic rider onboarding via facial recognition, QR codes, or Bluetooth", 13019 "Restricted driver actions to reduce distracted driving while in motion", 13020 "Verbal communication options for hands-free driver safety" 13021 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv8202", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv8202": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:583:17:26197:212:e:li:ete", children: [ 13022 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv8203", _fgB: 1790697590647, size: 18, className: "text-[#EFBB0F] mt-0.5 flex-shrink-0", "data-fg-cvv8203": ":0:node_modules/lucide-react:584:19:26278:74:e:CheckCircle2::::::CELI" }),
13023 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8204", _fgB: 1790697590647, "data-fg-cvv8204": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:585:19:26371:16:e:span:x", children: t }) 13024 ] }, e)) }) 13025 ] 13026 } 13027 ), 13028 /* @__PURE__ */ i( 13029 a, 13030 { 13031 _fgT: m.div, 13032 _fgS: "cvv8207", 13033 _fgB: 1790697590647, 13034 initial: { opacity: 0, y: 20 }, 13035 whileInView: { opacity: 1, y: 0 }, 13036 viewport: { once: !0 }, 13037 transition: { duration: 0.5, delay: 0.15 }, 13038 "data-fg-cvv8207": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:592:11:26506:264:e:motion.div:e", 13039 children: /* @__PURE__ */ i(a, { _fgT: sp, _fgS: "cvv8208", _fgB: 1790697590647, "data-fg-cvv8208": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:598:13:26727:19:e:DriverMDTVisual::::::CvZj" }) 13040 } 13041 ) 13042 ] }) }) }); 13043} 13044function rp() { 13045 const t = H(null), e = Nt(t, { once: !0, margin: "-80px" }), s = [ 13046 { title: "GTFS Static Feed", desc: "Routes, stops, timetables", status: "Published", color: "#3B82F6" }, 13047 { title: "GTFS-RT Live Feed", desc: "Real-time vehicle positions", status: "Active", color: "#EFBB0F" }, 13048 { title: "Google Maps & Transit App", desc: "Live schedules visible to riders", status: "Connected", color: "#22C55E" }, 13049 { title: "NTD Reports & Statistics", desc: "Export ridership & performance data", status: "Ready", color: "#A855F7" } 13050 ]; 13051 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8209", _fgB: 1790697590647, _fgD: !0, ref: t, className: "bg-[#0B1B2B] rounded-2xl p-6 md:p-8 border border-slate-700/50", "data-fg-cvv8209": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:621:5:27633:2983:e:div:ete:1", children: [ 13052 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8210", _fgB: 1790697590647, className: "flex items-center gap-2 mb-6", "data-fg-cvv8210": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:622:7:27730:343:e:div:etetete", children: [
13053 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8211", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-red-500/80", "data-fg-cvv8211": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:623:9:27785:54:e:div" }), 13054 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8212", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-yellow-500/80", "data-fg-cvv8212": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:624:9:27848:57:e:div" }), 13055 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8213", _fgB: 1790697590647, className: "w-3 h-3 rounded-full bg-green-500/80", "data-fg-cvv8213": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:625:9:27914:56:e:div" }), 13056 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8214", _fgB: 1790697590647, className: "text-slate-500 text-xs ml-2", "data-fg-cvv8214": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:626:9:27979:81:e:span:t", children: "GTFS Publisher â Feed Status" }) 13057 ] }), 13058 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8216", _fgB: 1790697590647, className: "space-y-0", "data-fg-cvv8216": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:629:7:28081:2524:e:div:x", children: s.map((r, n) => /* @__PURE__ */ i( 13059 a, 13060 { 13061 _fgT: m.div, 13062 _fgS: "cvv8218", 13063 _fgB: 1790697590647, 13064 initial: { opacity: 0, y: 15 }, 13065 animate: e ? { opacity: 1, y: 0 } : {}, 13066 transition: { 13067 duration: 0.45, 13068 delay: 0.25 + n * 0.18, 13069 ease: [0.25, 0.46, 0.45, 0.94] 13070 }, 13071 "data-fg-cvv8218": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:631:11:28153:2427:e:motion.div:e", 13072 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8219", _fgB: 1790697590647, className: "flex items-start gap-3 relative", "data-fg-cvv8219": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:641:13:28465:2091:e:div:xtxtxtetxte", children: [ 13073 n < s.length - 1 && /* @__PURE__ */ i( 13074 a, 13075 { 13076 _fgT: m.div, 13077 _fgS: "cvv8222", 13078 _fgB: 1790697590647, 13079 className: "absolute left-[13px] top-[28px] w-[2px]", 13080 style: { backgroundColor: r.color + "33" }, 13081 initial: { height: 0 }, 13082 animate: e ? { height: "calc(100% + 4px)" } : { height: 0 }, 13083 transition: { duration: 0.5, delay: 0.5 + n * 0.18 }, 13084 "data-fg-cvv8222": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:644:17:28618:363:e:motion.div" 13085 } 13086 ),
13087 /* @__PURE__ */ i( 13088 a, 13089 { 13090 _fgT: m.div, 13091 _fgS: "cvv8224", 13092 _fgB: 1790697590647, 13093 className: "relative z-10 w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5", 13094 style: { backgroundColor: r.color + "22", border: `2px solid ${r.color}` }, 13095 initial: { scale: 0 }, 13096 animate: e ? { scale: 1 } : { scale: 0 }, 13097 transition: { type: "spring", stiffness: 500, damping: 25, delay: 0.2 + n * 0.18 }, 13098 "data-fg-cvv8224": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:654:15:29048:572:e:motion.div:e", 13099 children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8225", _fgB: 1790697590647, className: "text-[10px] text-white", style: { fontWeight: 700 }, "data-fg-cvv8225": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:661:17:29509:83:e:span:x", children: n + 1 }) 13100 } 13101 ), 13102 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8228", _fgB: 1790697590647, className: "flex-1 bg-slate-800/40 rounded-xl p-3 border border-slate-700/30 mb-3", "data-fg-cvv8228": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:665:15:29666:871:e:div:ete", children: [
13103 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8229", _fgB: 1790697590647, className: "flex items-center justify-between mb-1", "data-fg-cvv8229": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:666:17:29770:666:e:div:ete", children: [ 13104 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8230", _fgB: 1790697590647, className: "text-xs text-white", style: { fontWeight: 600 }, "data-fg-cvv8230": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:667:19:29845:84:e:span:x", children: r.title }), 13105 /* @__PURE__ */ i( 13106 a, 13107 { 13108 _fgT: m.span, 13109 _fgS: "cvv8232", 13110 _fgB: 1790697590647, 13111 className: "text-[10px] px-2 py-0.5 rounded-full border bg-emerald-400/10 text-emerald-400 border-emerald-400/30", 13112 style: { fontWeight: 600 }, 13113 initial: { opacity: 0, scale: 0.8 }, 13114 animate: e ? { opacity: 1, scale: 1 } : {}, 13115 transition: { delay: 0.6 + n * 0.18 }, 13116 "data-fg-cvv8232": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:668:19:29948:465:e:motion.span:x", 13117 children: r.status 13118 } 13119 ) 13120 ] }),
13121 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8234", _fgB: 1790697590647, className: "text-[11px] text-slate-400", "data-fg-cvv8234": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:678:17:30453:63:e:span:x", children: r.desc }) 13122 ] }) 13123 ] }) 13124 }, 13125 n 13126 )) }) 13127 ] }); 13128} 13129function np() { 13130 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cvv8236", _fgB: 1790697590647, _fgD: !0, id: "feat-gtfs", className: "bg-[#F8FAFC] py-24", "data-fg-cvv8236": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:690:5:30672:2174:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cvv8237", _fgB: 1790697590647, className: "container mx-auto px-6 max-w-7xl", "data-fg-cvv8237": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:691:7:30734:2097:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cvv8238", _fgB: 1790697590647, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-cvv8238": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:692:9:30793:2025:e:div:xtetxte", children: [ 13131 /* @__PURE__ */ i( 13132 a, 13133 { 13134 _fgT: m.div, 13135 _fgS: "cvv8240", 13136 _fgB: 1790697590647, 13137 initial: { opacity: 0, y: 20 }, 13138 whileInView: { opacity: 1, y: 0 }, 13139 viewport: { once: !0 }, 13140 transition: { duration: 0.5 }, 13141 className: "order-2 lg:order-1", 13142 "data-fg-cvv8240": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:694:11:30893:289:e:motion.div:e", 13143 children: /* @__PURE__ */ i(a, { _fgT: rp, _fgS: "cvv8241", _fgB: 1790697590647, "data-fg-cvv8241": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:701:13:31144:14:e:GTFSVisual::::::CLeS" }) 13144 } 13145 ), 13146 /* @__PURE__ */ c( 13147 a, 13148 { 13149 _fgT: m.div, 13150 _fgS: "cvv8243", 13151 _fgB: 1790697590647, 13152 initial: { opacity: 0, y: 20 }, 13153 whileInView: { opacity: 1, y: 0 }, 13154 viewport: { once: !0 }, 13155 transition: { duration: 0.5, delay: 0.15 }, 13156 className: "order-1 lg:order-2", 13157 "data-fg-cvv8243": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:705:11:31225:1578:e:motion.div:etetete", 13158 children: [
13159 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8244", _fgB: 1790697590647, className: "text-[#0056B3] text-xs tracking-widest uppercase mb-4 block", style: { fontWeight: 700 }, "data-fg-cvv8244": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:712:13:31489:129:e:span:t", children: "GTFS INTEGRATION" }), 13160 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cvv8246", _fgB: 1790697590647, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-cvv8246": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:713:13:31631:195:e:h2:t", children: "Publish to Google Maps and Every Rider App" }), 13161 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cvv8248", _fgB: 1790697590647, className: "text-lg text-slate-500 mb-8 leading-relaxed", "data-fg-cvv8248": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:716:13:31839:256:e:p:t", children: "Upload GTFS manually or connect for automatic scheduled publishing. Enable real-time vehicle locations through GTFS-RT feeds and export statistics for NTD reporting." }),
13162 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cvv8250", _fgB: 1790697590647, className: "space-y-4", "data-fg-cvv8250": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:719:13:32108:671:e:ul:x", children: [ 13163 "Manual or automatic GTFS uploads on your schedule", 13164 "GTFS-RT live location tracking so riders see real vehicle positions", 13165 "Statistics and NTD report exporting built into the same workflow", 13166 "Powers Google Maps, Transit App, and your own rider tools from one feed" 13167 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cvv8252", _fgB: 1790697590647, className: "flex items-start gap-3 text-slate-600", "data-fg-cvv8252": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:726:17:32531:212:e:li:ete", children: [ 13168 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cvv8253", _fgB: 1790697590647, size: 18, className: "text-[#0056B3] mt-0.5 flex-shrink-0", "data-fg-cvv8253": ":0:node_modules/lucide-react:727:19:32612:74:e:CheckCircle2::::::CELI" }),
13169 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cvv8254", _fgB: 1790697590647, "data-fg-cvv8254": ":0:/src/app/components/fixed-route/FixedRouteFeatures.tsx:728:19:32705:16:e:span:x", children: t }) 13170 ] }, e)) }) 13171 ] 13172 } 13173 ) 13174 ] }) }) }); 13175} 13176function op() { 13177 const { openContactModal: t } = Z(); 13178 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bshz0", _fgB: 1790697590657, _fgD: !0, id: "fixed-route-cta", className: "bg-[#F8FAFC] py-24", "data-fg-bshz0": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:9:5:241:1325:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bshz1", _fgB: 1790697590657, className: "max-w-3xl mx-auto px-6 text-center", "data-fg-bshz1": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:10:7:309:1242:e:div:e", children: /* @__PURE__ */ c( 13179 a, 13180 { 13181 _fgT: m.div, 13182 _fgS: "bshz2", 13183 _fgB: 1790697590657, 13184 initial: { opacity: 0, y: 20 }, 13185 whileInView: { opacity: 1, y: 0 }, 13186 viewport: { once: !0 }, 13187 transition: { duration: 0.5 }, 13188 "data-fg-bshz2": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:11:9:370:1168:e:motion.div:etete", 13189 children: [
13190 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bshz3", _fgB: 1790697590657, className: "text-3xl md:text-4xl text-slate-900 mb-4 leading-tight font-[Space_Grotesk]", style: { fontWeight: 700 }, "data-fg-bshz3": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:17:11:566:269:e:h2:tste", children: [ 13191 "See Fixed Route Tools", 13192 " ", 13193 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bshz6", _fgB: 1790697590657, className: "text-[#EFBB0F] italic font-[Playfair_Display]", "data-fg-bshz6": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:19:13:738:81:e:span:t", children: "In Action." }) 13194 ] }), 13195 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bshz8", _fgB: 1790697590657, className: "text-lg text-slate-500 mb-10 max-w-2xl mx-auto leading-relaxed", "data-fg-bshz8": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:21:11:846:215:e:p:t", children: "We'll walk you through route planning, blocking, live tracking, and GTFS publishing using your actual routes." }), 13196 /* @__PURE__ */ c( 13197 a, 13198 { 13199 _fgT: "button", 13200 _fgS: "bshz10", 13201 _fgB: 1790697590657, 13202 onClick: t, 13203 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/30", 13204 style: { fontWeight: 600 }, 13205 "data-fg-bshz10": ":0:/src/app/components/fixed-route/FixedRouteCTA.tsx:25:11:1073:443:e:button:te", 13206 children: [ 13207 "Schedule a Meeting",
13208 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "bshz12", _fgB: 1790697590657, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-bshz12": ":0:node_modules/lucide-react:31:13:1413:83:e:ArrowRight::::::s5N" }) 13209 ] 13210 } 13211 ) 13212 ] 13213 } 13214 ) }) }); 13215} 13216const f4 = [ 13217 { id: "feat-route-planning", label: "Route Planning", icon: S1, color: "#EFBB0F" }, 13218 { id: "feat-blocking", label: "Blocking", icon: P3, color: "#0056B3" }, 13219 { id: "feat-runcutting", label: "Runcutting", icon: Q5, color: "#EFBB0F" }, 13220 { id: "feat-live-dashboard", label: "Live Dashboard", icon: N3, color: "#0056B3" }, 13221 { id: "feat-driver-mdt", label: "Driver MDT", icon: S1, color: "#EFBB0F" }, 13222 { id: "feat-gtfs", label: "GTFS", icon: X5, color: "#0056B3" } 13223]; 13224function Lp() { 13225 const [t, e] = j(-1), [s, r] = j(!1); 13226 q(() => { 13227 const o = f4.map((l) => document.getElementById(l.id)), L = new IntersectionObserver( 13228 (l) => { 13229 const g = l.filter((f) => f.isIntersecting); 13230 if (g.length > 0) { 13231 let f = -1, p = 1 / 0; 13232 g.forEach((M) => { 13233 const u = o.findIndex((x) => x === M.target), h = M.boundingClientRect.top; 13234 h < p && u !== -1 && (p = h, f = u); 13235 }), f !== -1 && e(f); 13236 } 13237 }, 13238 { threshold: 0.15, rootMargin: "-10% 0px -60% 0px" } 13239 ); 13240 o.forEach((l) => { 13241 l && L.observe(l); 13242 }); 13243 const d = () => { 13244 const l = o[0], g = o[o.length - 1]; 13245 if (!l || !g) return; 13246 const f = l.getBoundingClientRect(), p = g.getBoundingClientRect(), M = f.top < window.innerHeight * 0.7 && p.bottom > window.innerHeight * 0.3; 13247 r(M); 13248 }; 13249 return window.addEventListener("scroll", d, { passive: !0 }), d(), () => { 13250 L.disconnect(), window.removeEventListener("scroll", d); 13251 }; 13252 }, []); 13253 const n = (o) => { 13254 const L = document.getElementById(o); 13255 L && L.scrollIntoView({ behavior: "smooth", block: "center" }); 13256 }; 13257 return /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "bf1p0", _fgB: 1790697590661, _fgD: !0, "data-fg-bf1p0": ":0:node_modules/motion:74:5:2666:3073:e:AnimatePresence:x:1::::DAs4", children: s && /* @__PURE__ */ c( 13258 a, 13259 { 13260 _fgT: m.div, 13261 _fgS: "bf1p2", 13262 _fgB: 1790697590661, 13263 initial: { opacity: 0, x: -20 }, 13264 animate: { opacity: 1, x: 0 }, 13265 exit: { opacity: 0, x: -20 }, 13266 transition: { duration: 0.3 }, 13267 className: "fixed left-5 top-1/2 -translate-y-1/2 z-40 hidden xl:flex flex-col items-center gap-1", 13268 "data-fg-bf1p2": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:76:9:2712:2995:e:motion.div:etxte", 13269 children: [
13270 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bf1p3", _fgB: 1790697590661, className: "bg-white/90 backdrop-blur-lg rounded-2xl shadow-xl border border-slate-200/80 py-3 px-2 flex flex-col items-center gap-0.5", "data-fg-bf1p3": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:83:11:3017:2128:e:div:x", children: f4.map((o, L) => { 13271 const d = L === t; 13272 return /* @__PURE__ */ c( 13273 a, 13274 { 13275 _fgT: "button", 13276 _fgS: "bf1p5", 13277 _fgB: 1790697590661, 13278 onClick: () => n(o.id), 13279 className: "relative group flex items-center gap-0 py-1.5 px-1.5 rounded-xl transition-all duration-300 hover:bg-slate-100", 13280 "aria-label": o.label, 13281 "data-fg-bf1p5": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:87:17:3291:1804:e:button:xtetxte", 13282 children: [ 13283 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bf1p7", _fgB: 1790697590661, className: "relative w-6 h-6 flex items-center justify-center", "data-fg-bf1p7": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:94:19:3660:909:e:div:etx", children: [
13284 /* @__PURE__ */ i( 13285 a, 13286 { 13287 _fgT: m.div, 13288 _fgS: "bf1p8", 13289 _fgB: 1790697590661, 13290 className: "rounded-full", 13291 animate: { 13292 width: d ? 10 : 6, 13293 height: d ? 10 : 6, 13294 backgroundColor: d ? o.color : "#CBD5E1" 13295 }, 13296 transition: { type: "spring", stiffness: 500, damping: 30 }, 13297 "data-fg-bf1p8": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:95:21:3748:402:e:motion.div" 13298 } 13299 ), 13300 d && /* @__PURE__ */ i( 13301 a, 13302 { 13303 _fgT: m.div, 13304 _fgS: "bf1p10", 13305 _fgB: 1790697590661, 13306 layoutId: "active-ring", 13307 className: "absolute inset-0 rounded-full border-2", 13308 style: { borderColor: o.color + "40" }, 13309 transition: { type: "spring", stiffness: 500, damping: 30 }, 13310 "data-fg-bf1p10": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:105:23:4208:313:e:motion.div" 13311 } 13312 ) 13313 ] }),
13314 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bf1p12", _fgB: 1790697590661, className: "absolute left-full ml-3 pointer-events-none opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap", "data-fg-bf1p12": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:115:19:4638:431:e:div:e", children: /* @__PURE__ */ i( 13315 a, 13316 { 13317 _fgT: "div", 13318 _fgS: "bf1p13", 13319 _fgB: 1790697590661, 13320 className: "bg-[#0B1B2B] text-white text-xs px-3 py-1.5 rounded-lg shadow-lg", 13321 style: { fontWeight: 500 }, 13322 "data-fg-bf1p13": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:116:21:4804:240:e:div:x", 13323 children: o.label 13324 } 13325 ) }) 13326 ] 13327 }, 13328 o.id 13329 ); 13330 }) }), 13331 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bf1p16", _fgB: 1790697590661, className: "absolute right-1/2 translate-x-1/2 top-3 bottom-3 w-[2px] bg-slate-200 rounded-full -z-10 pointer-events-none", "data-fg-bf1p16": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:129:11:5189:496:e:div:e", children: /* @__PURE__ */ i( 13332 a, 13333 { 13334 _fgT: m.div, 13335 _fgS: "bf1p17", 13336 _fgB: 1790697590661, 13337 className: "w-full bg-gradient-to-b from-[#EFBB0F] to-[#0056B3] rounded-full origin-top", 13338 animate: { scaleY: t >= 0 ? (t + 1) / f4.length : 0 }, 13339 transition: { type: "spring", stiffness: 300, damping: 30 }, 13340 style: { height: "100%" }, 13341 "data-fg-bf1p17": ":0:/src/app/components/fixed-route/FixedRouteProgressNav.tsx:130:13:5329:339:e:motion.div" 13342 } 13343 ) }) 13344 ] 13345 } 13346 ) }); 13347} 13348function cp() { 13349 return /* @__PURE__ */ c(C, { children: [ 13350 /* @__PURE__ */ i(a, { _fgT: Lp, _fgS: "cl5t1", _fgB: 1790697589417, "data-fg-cl5t1": ":0:/src/app/pages/FixedRoutePage.tsx:17:7:546:25:e:FixedRouteProgressNav::::::iKs" }), 13351 /* @__PURE__ */ i(a, { _fgT: Gf, _fgS: "cl5t2", _fgB: 1790697589417, "data-fg-cl5t2": ":0:/src/app/pages/FixedRoutePage.tsx:18:7:578:18:e:FixedRouteHero::::::DbTE" }), 13352 /* @__PURE__ */ i(a, { _fgT: Kf, _fgS: "cl5t3", _fgB: 1790697589417, "data-fg-cl5t3": ":0:/src/app/pages/FixedRoutePage.tsx:19:7:603:24:e:FeatureRoutePlanning::::::C5u4" }), 13353 /* @__PURE__ */ i(a, { _fgT: Xf, _fgS: "cl5t4", _fgB: 1790697589417, "data-fg-cl5t4": ":0:/src/app/pages/FixedRoutePage.tsx:20:7:634:19:e:FeatureBlocking::::::C8tF" }), 13354 /* @__PURE__ */ i(a, { _fgT: ep, _fgS: "cl5t5", _fgB: 1790697589417, "data-fg-cl5t5": ":0:/src/app/pages/FixedRoutePage.tsx:21:7:660:21:e:FeatureRuncutting::::::BWpd" }), 13355 /* @__PURE__ */ i(a, { _fgT: ap, _fgS: "cl5t6", _fgB: 1790697589417, "data-fg-cl5t6": ":0:/src/app/pages/FixedRoutePage.tsx:22:7:688:24:e:FeatureLiveDashboard::::::CkPQ" }), 13356 /* @__PURE__ */ i(a, { _fgT: ip, _fgS: "cl5t7", _fgB: 1790697589417, "data-fg-cl5t7": ":0:/src/app/pages/FixedRoutePage.tsx:23:7:719:20:e:FeatureDriverMDT::::::BpoT" }), 13357 /* @__PURE__ */ i(a, { _fgT: np, _fgS: "cl5t8", _fgB: 1790697589417, "data-fg-cl5t8": ":0:/src/app/pages/FixedRoutePage.tsx:24:7:746:15:e:FeatureGTFS::::::QNK" }), 13358 /* @__PURE__ */ i(a, { _fgT: op, _fgS: "cl5t9", _fgB: 1790697589417, "data-fg-cl5t9": ":0:/src/app/pages/FixedRoutePage.tsx:25:7:768:17:e:FixedRouteCTA::::::pNK" }), 13359 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "cl5t10", _fgB: 1790697589417, "data-fg-cl5t10": ":0:/src/app/pages/FixedRoutePage.tsx:26:7:792:10:e:Footer::::::B1Vv" }) 13360 ] }); 13361} 13362const lp = "https://images.unsplash.com/photo-1770596842159-8e487821c32b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjaXR5JTIwcHVibGljJTIwdHJhbnNpdCUyMGJ1cyUyMG5pZ2h0JTIwZG93bnRvd258ZW58MXx8fHwxNzcxNTM5MTMzfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", dp = "https://images.unsplash.com/photo-1771408662082-c75d32b98a0d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwdWJsaWMlMjB0cmFuc2l0JTIwYnVzJTIwcm91dGUlMjBjaXR5JTIwZGF5dGltZXxlbnwxfHx8fDE3NzE1MzkxMzh8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral"; 13363function gp() { 13364 const { openContactModal: t } = Z(); 13365 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "byi80", _fgB: 1790697589949, _fgD: !0, className: "relative min-h-[90vh] flex items-center bg-[#0B1B2B] overflow-hidden", "data-fg-byi80": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:16:5:956:3579:e:section:xtetxtetete:1", children: [
13366 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "byi82", _fgB: 1790697589949, className: "absolute inset-0 z-0", "data-fg-byi82": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:18:7:1089:312:e:div:ete", children: [ 13367 /* @__PURE__ */ i( 13368 a, 13369 { 13370 _fgT: Le, 13371 _fgS: "byi83", 13372 _fgB: 1790697589949, 13373 src: lp, 13374 alt: "City transit", 13375 className: "w-full h-full object-cover opacity-30", 13376 "data-fg-byi83": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:19:9:1136:142:e:ImageWithFallback::::::CBW2" 13377 } 13378 ), 13379 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "byi84", _fgB: 1790697589949, className: "absolute inset-0 bg-gradient-to-r from-[#0B1B2B] via-[#0B1B2B]/80 to-[#0B1B2B]/40", "data-fg-byi84": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:24:9:1287:101:e:div" }) 13380 ] }), 13381 /* @__PURE__ */ i( 13382 a, 13383 { 13384 _fgT: "div", 13385 _fgS: "byi86", 13386 _fgB: 1790697589949, 13387 className: "absolute top-20 right-10 w-[500px] h-[500px] rounded-full opacity-15 blur-[120px] pointer-events-none", 13388 style: { 13389 background: "radial-gradient(circle, #EFBB0F 0%, transparent 70%)" 13390 }, 13391 "data-fg-byi86": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:28:7:1436:241:e:div" 13392 } 13393 ), 13394 /* @__PURE__ */ i( 13395 a, 13396 { 13397 _fgT: "div", 13398 _fgS: "byi87", 13399 _fgB: 1790697589949, 13400 className: "absolute bottom-10 left-10 w-[400px] h-[400px] rounded-full opacity-10 blur-[120px] pointer-events-none", 13401 style: { 13402 background: "radial-gradient(circle, #0056B3 0%, transparent 70%)" 13403 }, 13404 "data-fg-byi87": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:34:7:1684:243:e:div" 13405 } 13406 ), 13407 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "byi88", _fgB: 1790697589949, className: "container mx-auto px-6 relative z-10 py-28 md:py-36", "data-fg-byi88": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:41:7:1935:2585:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "byi89", _fgB: 1790697589949, className: "grid lg:grid-cols-2 gap-12 lg:gap-16 items-center", "data-fg-byi89": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:42:9:2013:2494:e:div:xtetxte", children: [
13408 /* @__PURE__ */ c( 13409 a, 13410 { 13411 _fgT: m.div, 13412 _fgS: "byi811", 13413 _fgB: 1790697589949, 13414 initial: { opacity: 0, y: 30 }, 13415 animate: { opacity: 1, y: 0 }, 13416 transition: { duration: 0.7 }, 13417 "data-fg-byi811": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:44:11:2122:1657:e:motion.div:etetete", 13418 children: [ 13419 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "byi812", _fgB: 1790697589949, className: "inline-block px-4 py-1.5 rounded-full border border-[#EFBB0F]/60 text-[#EFBB0F] text-xs tracking-widest uppercase mb-6", "data-fg-byi812": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:49:13:2288:181:e:div:t", children: "FIXED ROUTE" }), 13420 /* @__PURE__ */ c( 13421 a, 13422 { 13423 _fgT: "h1", 13424 _fgS: "byi814", 13425 _fgB: 1790697589949, 13426 className: "text-4xl md:text-5xl lg:text-6xl text-white mb-6 leading-[1.1] font-[Space_Grotesk]", 13427 style: { fontWeight: 700 }, 13428 "data-fg-byi814": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:53:13:2483:280:e:h1:tste", 13429 children: [ 13430 "Fixed Route", 13431 " ",
13432 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "byi817", _fgB: 1790697589949, className: "text-[#EFBB0F]", "data-fg-byi817": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:58:15:2698:47:e:span:t", children: "Transit" }) 13433 ] 13434 } 13435 ), 13436 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "byi819", _fgB: 1790697589949, className: "text-lg text-slate-300 mb-10 leading-relaxed max-w-xl", "data-fg-byi819": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:61:13:2777:446:e:p:t", children: "Transit agencies are under pressure to deliver reliable service, meet growing rider expectations, and prove performance to funding bodies. Our platform gives fixed route operators the tools to run smarter networks, keep riders informed, and stay compliant â without adding headcount." }), 13437 /* @__PURE__ */ c( 13438 a, 13439 { 13440 _fgT: "button", 13441 _fgS: "byi821", 13442 _fgB: 1790697589949, 13443 onClick: t, 13444 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 13445 style: { fontWeight: 600 }, 13446 "data-fg-byi821": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:69:13:3237:518:e:button:te", 13447 children: [ 13448 "Schedule a Meeting",
13449 /* @__PURE__ */ i( 13450 a, 13451 { 13452 _fgT: D, 13453 _fgS: "byi823", 13454 _fgB: 1790697589949, 13455 size: 20, 13456 className: "group-hover:translate-x-1 transition-transform", 13457 "data-fg-byi823": ":0:node_modules/lucide-react:75:15:3604:129:e:ArrowRight::::::s5N" 13458 } 13459 ) 13460 ] 13461 } 13462 ) 13463 ] 13464 } 13465 ), 13466 /* @__PURE__ */ i( 13467 a, 13468 { 13469 _fgT: m.div, 13470 _fgS: "byi825", 13471 _fgB: 1790697589949, 13472 initial: { opacity: 0, scale: 0.95 }, 13473 animate: { opacity: 1, scale: 1 }, 13474 transition: { duration: 0.8, delay: 0.2 }, 13475 className: "hidden lg:block", 13476 "data-fg-byi825": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:83:11:3827:665:e:motion.div:e", 13477 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "byi826", _fgB: 1790697589949, className: "relative rounded-2xl overflow-hidden shadow-2xl border border-white/10", "data-fg-byi826": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:89:13:4055:413:e:div:ete", children: [
13478 /* @__PURE__ */ i( 13479 a, 13480 { 13481 _fgT: Le, 13482 _fgS: "byi827", 13483 _fgB: 1790697589949, 13484 src: dp, 13485 alt: "Public transit bus in service", 13486 className: "w-full h-[420px] object-cover", 13487 "data-fg-byi827": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:90:15:4158:174:e:ImageWithFallback::::::CBW2" 13488 } 13489 ), 13490 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "byi828", _fgB: 1790697589949, className: "absolute inset-0 bg-gradient-to-t from-[#0B1B2B]/60 via-transparent to-transparent", "data-fg-byi828": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHero.tsx:95:15:4347:102:e:div" }) 13491 ] }) 13492 } 13493 ) 13494 ] }) }) 13495 ] }); 13496} 13497const fp = [ 13498 { 13499 icon: It, 13500 title: "Rider Expectations Have Changed", 13501 text: "Riders expect real-time bus locations, accurate arrival predictions, and mobile access. Agencies without these tools lose ridership to other transportation options.", 13502 color: "#EFBB0F" 13503 }, 13504 { 13505 icon: Ad, 13506 title: "Tighter Budgets, Same Demands", 13507 text: "Federal and local funding requires proof of performance. Agencies need to show ridership numbers, on-time stats, and NTD data without burning hours on manual reporting.", 13508 color: "#0056B3" 13509 }, 13510 { 13511 icon: h1, 13512 title: "Doing More With Less", 13513 text: "Dispatcher and driver shortages mean agencies need systems that reduce manual work, automate communication, and flag problems before they become service failures.", 13514 color: "#EFBB0F" 13515 } 13516]; 13517function pp() { 13518 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "buz30", _fgB: 1790697589951, _fgD: !0, className: "py-24 md:py-32 bg-white", "data-fg-buz30": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:27:5:992:2170:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "buz31", _fgB: 1790697589951, className: "container mx-auto px-6", "data-fg-buz31": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:28:7:1044:2103:e:div:xtetxte", children: [ 13519 /* @__PURE__ */ c( 13520 a, 13521 { 13522 _fgT: m.div, 13523 _fgS: "buz33", 13524 _fgB: 1790697589951, 13525 initial: { opacity: 0, y: 20 }, 13526 whileInView: { opacity: 1, y: 0 }, 13527 viewport: { once: !0 }, 13528 transition: { duration: 0.5 }, 13529 className: "text-center mb-16", 13530 "data-fg-buz33": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:30:9:1123:691:e:motion.div:ete", 13531 children: [
13532 /* @__PURE__ */ i( 13533 a, 13534 { 13535 _fgT: "span", 13536 _fgS: "buz34", 13537 _fgB: 1790697589951, 13538 className: "text-[#EFBB0F] text-xs tracking-[0.2em] uppercase block mb-4", 13539 style: { fontWeight: 700 }, 13540 "data-fg-buz34": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:37:11:1359:186:e:span:t", 13541 children: "THE CHALLENGE" 13542 } 13543 ), 13544 /* @__PURE__ */ i( 13545 a, 13546 { 13547 _fgT: "h2", 13548 _fgS: "buz36", 13549 _fgB: 1790697589951, 13550 className: "text-3xl md:text-4xl lg:text-5xl text-[#0B1B2B] font-[Space_Grotesk] max-w-3xl mx-auto", 13551 style: { fontWeight: 700 }, 13552 "data-fg-buz36": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:43:11:1556:236:e:h2:t", 13553 children: "What Fixed Route Operators Are Up Against" 13554 } 13555 ) 13556 ] 13557 } 13558 ), 13559 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "buz39", _fgB: 1790697589951, className: "grid md:grid-cols-3 gap-8 max-w-5xl mx-auto", "data-fg-buz39": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:52:9:1846:1288:e:div:x", children: fp.map((t, e) => /* @__PURE__ */ c( 13560 a, 13561 { 13562 _fgT: m.div, 13563 _fgS: "buz311", 13564 _fgB: 1790697589951, 13565 initial: { opacity: 0, y: 30 }, 13566 whileInView: { opacity: 1, y: 0 }, 13567 viewport: { once: !0 }, 13568 transition: { duration: 0.5, delay: e * 0.15 }, 13569 className: "bg-[#f8f9fb] rounded-2xl p-8 text-center group hover:shadow-lg transition-shadow duration-300 border border-slate-100", 13570 "data-fg-buz311": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:54:13:1956:1149:e:motion.div:xtetete", 13571 children: [
13572 /* @__PURE__ */ i( 13573 a, 13574 { 13575 _fgT: "div", 13576 _fgS: "buz313", 13577 _fgB: 1790697589951, 13578 className: "w-16 h-16 rounded-2xl mx-auto mb-6 flex items-center justify-center", 13579 style: { backgroundColor: t.color + "12" }, 13580 "data-fg-buz313": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:63:15:2395:358:e:div:e", 13581 children: /* @__PURE__ */ i( 13582 a, 13583 { 13584 _fgT: t.icon, 13585 _fgS: "buz314", 13586 _fgB: 1790697589951, 13587 size: 30, 13588 strokeWidth: 1.8, 13589 style: { color: t.color }, 13590 "data-fg-buz314": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:67:17:2591:141:e:card.icon" 13591 } 13592 ) 13593 } 13594 ), 13595 /* @__PURE__ */ i( 13596 a, 13597 { 13598 _fgT: "h3", 13599 _fgS: "buz315", 13600 _fgB: 1790697589951, 13601 className: "text-lg text-[#0B1B2B] mb-3 font-[Space_Grotesk]", 13602 style: { fontWeight: 700 }, 13603 "data-fg-buz315": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:74:15:2769:189:e:h3:x", 13604 children: t.title 13605 } 13606 ),
13607 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "buz317", _fgB: 1790697589951, className: "text-slate-500 leading-relaxed text-[15px]", "data-fg-buz317": ":0:/src/app/components/fixed-route-market/FixedRouteMarketChallenge.tsx:81:15:2974:105:e:p:x", children: t.text }) 13608 ] 13609 }, 13610 t.title 13611 )) }) 13612 ] }) }); 13613} 13614const Mp = "https://images.unsplash.com/photo-1575095504575-d957c11ea5dd?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZXJzb24lMjBjaGVja2luZyUyMHNtYXJ0cGhvbmUlMjBidXMlMjBzdG9wJTIwdHJhbnNpdHxlbnwxfHx8fDE3NzE1MzkxMzN8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", up = "https://images.unsplash.com/photo-1729184648234-7650c1484905?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxmbGVldCUyMGRpc3BhdGNoJTIwY29udHJvbCUyMGNlbnRlciUyMHNjcmVlbnN8ZW58MXx8fHwxNzcxNTM5MTM0fDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", hp = "https://images.unsplash.com/photo-1551288049-bebda4e38f71?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxkYXRhJTIwYW5hbHl0aWNzJTIwZGFzaGJvYXJkJTIwcmVwb3J0JTIwbGFwdG9wfGVufDF8fHx8MTc3MTUzOTEzNHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral"; 13615function mp({ 13616 headline: t, 13617 bullets: e, 13618 image: s, 13619 imageAlt: r, 13620 reverse: n, 13621 index: o 13622}) { 13623 return /* @__PURE__ */ c( 13624 a, 13625 { 13626 _fgT: "div", 13627 _fgS: "bzbv0", 13628 _fgB: 1790697589954, 13629 _fgD: !0, 13630 className: `grid md:grid-cols-2 gap-12 lg:gap-16 items-center ${n ? "md:[&>*:first-child]:order-2" : ""}`, 13631 "data-fg-bzbv0": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:32:5:1364:1629:e:div:xtetxte:1", 13632 children: [
13633 /* @__PURE__ */ c( 13634 a, 13635 { 13636 _fgT: m.div, 13637 _fgS: "bzbv2", 13638 _fgB: 1790697589954, 13639 initial: { opacity: 0, x: n ? 30 : -30 }, 13640 whileInView: { opacity: 1, x: 0 }, 13641 viewport: { once: !0 }, 13642 transition: { duration: 0.6, delay: 0.1 }, 13643 "data-fg-bzbv2": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:38:7:1535:930:e:motion.div:ete", 13644 children: [ 13645 /* @__PURE__ */ i( 13646 a, 13647 { 13648 _fgT: "h3", 13649 _fgS: "bzbv3", 13650 _fgB: 1790697589954, 13651 className: "text-2xl md:text-3xl text-[#0B1B2B] mb-6 font-[Space_Grotesk]", 13652 style: { fontWeight: 700 }, 13653 "data-fg-bzbv3": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:44:9:1747:170:e:h3:x", 13654 children: t 13655 } 13656 ), 13657 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bzbv5", _fgB: 1790697589954, className: "space-y-4", "data-fg-bzbv5": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:51:9:1927:518:e:ul:x", children: e.map((L, d) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bzbv7", _fgB: 1790697589954, className: "flex items-start gap-3", "data-fg-bzbv7": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:53:13:2006:411:e:li:ete", children: [
13658 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bzbv8", _fgB: 1790697589954, className: "mt-1 flex-shrink-0 w-5 h-5 rounded-full bg-[#0056B3]/10 flex items-center justify-center", "data-fg-bzbv8": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:54:15:2068:208:e:span:e", children: /* @__PURE__ */ i(a, { _fgT: Dc, _fgS: "bzbv9", _fgB: 1790697589954, size: 12, className: "text-[#0056B3]", strokeWidth: 3, "data-fg-bzbv9": ":0:node_modules/lucide-react:55:17:2192:62:e:Check::::::Dijm" }) }), 13659 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bzbv10", _fgB: 1790697589954, className: "text-slate-600 leading-relaxed text-[15px]", "data-fg-bzbv10": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:57:15:2291:108:e:span:x", children: L }) 13660 ] }, d)) }) 13661 ] 13662 } 13663 ), 13664 /* @__PURE__ */ i( 13665 a, 13666 { 13667 _fgT: m.div, 13668 _fgS: "bzbv13", 13669 _fgB: 1790697589954, 13670 initial: { opacity: 0, x: n ? -30 : 30 }, 13671 whileInView: { opacity: 1, x: 0 }, 13672 viewport: { once: !0 }, 13673 transition: { duration: 0.6, delay: 0.2 }, 13674 "data-fg-bzbv13": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:66:7:2493:489:e:motion.div:e", 13675 children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bzbv14", _fgB: 1790697589954, className: "rounded-2xl overflow-hidden shadow-xl border border-slate-200/60", "data-fg-bzbv14": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:72:9:2705:257:e:div:e", children: /* @__PURE__ */ i( 13676 a, 13677 { 13678 _fgT: Le, 13679 _fgS: "bzbv15", 13680 _fgB: 1790697589954, 13681 src: s, 13682 alt: r, 13683 className: "w-full h-[320px] md:h-[380px] object-cover", 13684 "data-fg-bzbv15": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:73:11:2798:149:e:ImageWithFallback::::::CBW2" 13685 } 13686 ) }) 13687 } 13688 ) 13689 ] 13690 } 13691 ); 13692} 13693const xp = [ 13694 { 13695 headline: "Give Riders a Reason to Choose the Bus", 13696 bullets: [ 13697 "Where's My Bus rider tools let passengers see live vehicle locations on their phone or at the stop", 13698 "Accurate arrival predictions powered by the same AVL system your dispatchers use", 13699 "No app download required â riders can access everything through a web browser" 13700 ], 13701 image: Mp, 13702 imageAlt: "Person checking phone at a bus stop", 13703 reverse: !1 13704 }, 13705 { 13706 headline: "Run Your Entire Network From One Screen", 13707 bullets: [ 13708 "Route building, scheduling, and dispatch all managed through a single platform", 13709 "Real-time schedule adherence monitoring flags early and late arrivals at every timepoint", 13710 "Hybrid route support for agencies blending fixed stops with flex or deviated service" 13711 ], 13712 image: up, 13713 imageAlt: "Dispatch control center with multiple screens", 13714 reverse: !0 13715 }, 13716 { 13717 headline: "Reporting Thatâs Ready When You Are", 13718 bullets: [ 13719 "NTD-ready exports generated with one click instead of weeks of manual compilation", 13720 "Ridership, on-time performance, and route-level stats tracked automatically", 13721 "Trip-level audit trail available for federal reviews, complaints, and service planning" 13722 ], 13723 image: hp, 13724 imageAlt: "Data analytics dashboard with charts and reports", 13725 reverse: !1 13726 } 13727]; 13728function _p() { 13729 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bzbv16", _fgB: 1790697589954, _fgD: !0, className: "py-24 md:py-32 bg-[#f8f9fb]", "data-fg-bzbv16": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:122:5:4523:1092:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bzbv17", _fgB: 1790697589954, className: "container mx-auto px-6", "data-fg-bzbv17": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:123:7:4579:1021:e:div:xtetxte", children: [ 13730 /* @__PURE__ */ c( 13731 a, 13732 { 13733 _fgT: m.div, 13734 _fgS: "bzbv19", 13735 _fgB: 1790697589954, 13736 initial: { opacity: 0, y: 20 }, 13737 whileInView: { opacity: 1, y: 0 }, 13738 viewport: { once: !0 }, 13739 transition: { duration: 0.5 },
13740 className: "text-center mb-20", 13741 "data-fg-bzbv19": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:125:9:4659:697:e:motion.div:ete", 13742 children: [ 13743 /* @__PURE__ */ i( 13744 a, 13745 { 13746 _fgT: "span", 13747 _fgS: "bzbv20", 13748 _fgB: 1790697589954, 13749 className: "text-[#0056B3] text-xs tracking-[0.2em] uppercase block mb-4", 13750 style: { fontWeight: 700 }, 13751 "data-fg-bzbv20": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:132:11:4895:184:e:span:t", 13752 children: "HOW WE HELP" 13753 } 13754 ), 13755 /* @__PURE__ */ i( 13756 a, 13757 { 13758 _fgT: "h2", 13759 _fgS: "bzbv22", 13760 _fgB: 1790697589954, 13761 className: "text-3xl md:text-4xl lg:text-5xl text-[#0B1B2B] font-[Space_Grotesk] max-w-3xl mx-auto", 13762 style: { fontWeight: 700 }, 13763 "data-fg-bzbv22": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:138:11:5090:244:e:h2:t", 13764 children: "Built for the Realities of Fixed Route Operations" 13765 } 13766 ) 13767 ] 13768 } 13769 ), 13770 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bzbv25", _fgB: 1790697589954, className: "space-y-20 md:space-y-28 max-w-6xl mx-auto", "data-fg-bzbv25": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:147:9:5399:188:e:div:x", children: xp.map((t, e) => /* @__PURE__ */ i(a, { _fgT: mp, _fgS: "bzbv27", _fgB: 1790697589954, ...t, index: e, "data-fg-bzbv27": ":0:/src/app/components/fixed-route-market/FixedRouteMarketHowWeHelp.tsx:149:13:5506:52:e:FeatureRow::::::DhHX" }, t.headline)) }) 13771 ] }) }); 13772} 13773const bp = [ 13774 { 13775 icon: k1, 13776 label: "Municipal Transit Agencies" 13777 }, 13778 { 13779 icon: Pt, 13780 label: "Regional Authorities" 13781 }, 13782 { 13783 icon: Ll, 13784 label: "University Shuttle Systems" 13785 }, 13786 { 13787 icon: W7, 13788 label: "Private Contract Operators" 13789 } 13790]; 13791function vp() { 13792 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bqii0", _fgB: 1790697589956, _fgD: !0, className: "py-24 md:py-32 bg-[#0B1B2B]", "data-fg-bqii0": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:25:5:476:1747:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bqii1", _fgB: 1790697589956, className: "container mx-auto px-6", "data-fg-bqii1": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:26:7:532:1676:e:div:etxte", children: [ 13793 /* @__PURE__ */ c( 13794 a, 13795 { 13796 _fgT: m.div, 13797 _fgS: "bqii2", 13798 _fgB: 1790697589956, 13799 initial: { opacity: 0, y: 20 }, 13800 whileInView: { opacity: 1, y: 0 }, 13801 viewport: { once: !0 }, 13802 transition: { duration: 0.5 }, 13803 className: "text-center mb-16", 13804 "data-fg-bqii2": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:27:9:581:635:e:motion.div:ete", 13805 children: [
13806 /* @__PURE__ */ i( 13807 a, 13808 { 13809 _fgT: "h2", 13810 _fgS: "bqii3", 13811 _fgB: 1790697589956, 13812 className: "text-3xl md:text-4xl lg:text-5xl text-white font-[Space_Grotesk] mb-4", 13813 style: { fontWeight: 700 }, 13814 "data-fg-bqii3": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:34:11:817:194:e:h2:t", 13815 children: "Who We Work With" 13816 } 13817 ), 13818 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bqii5", _fgB: 1790697589956, className: "text-slate-400 text-lg max-w-2xl mx-auto", "data-fg-bqii5": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:40:11:1022:172:e:p:t", children: "Our fixed route platform serves transit agencies and operators of all sizes." }) 13819 ] 13820 } 13821 ), 13822 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqii8", _fgB: 1790697589956, className: "grid grid-cols-2 md:grid-cols-4 gap-8 max-w-4xl mx-auto", "data-fg-bqii8": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:47:9:1257:938:e:div:x", children: bp.map((t, e) => /* @__PURE__ */ c( 13823 a, 13824 { 13825 _fgT: m.div, 13826 _fgS: "bqii10", 13827 _fgB: 1790697589956, 13828 initial: { opacity: 0, y: 20 }, 13829 whileInView: { opacity: 1, y: 0 }, 13830 viewport: { once: !0 }, 13831 transition: { duration: 0.4, delay: e * 0.1 }, 13832 className: "flex flex-col items-center text-center gap-4", 13833 "data-fg-bqii10": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:49:13:1383:783:e:motion.div:ete", 13834 children: [
13835 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bqii11", _fgB: 1790697589956, className: "w-14 h-14 rounded-xl bg-white/5 border border-white/10 flex items-center justify-center", "data-fg-bqii11": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:57:15:1723:209:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bqii12", _fgB: 1790697589956, size: 26, className: "text-white", strokeWidth: 1.5, "data-fg-bqii12": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:58:17:1845:66:e:client.icon" }) }), 13836 /* @__PURE__ */ i( 13837 a, 13838 { 13839 _fgT: "span", 13840 _fgS: "bqii13", 13841 _fgB: 1790697589956, 13842 className: "text-white text-sm md:text-[15px] leading-snug", 13843 style: { fontWeight: 500 }, 13844 "data-fg-bqii13": ":0:/src/app/components/fixed-route-market/FixedRouteMarketClients.tsx:60:15:1947:193:e:span:x", 13845 children: t.label 13846 } 13847 ) 13848 ] 13849 }, 13850 t.label 13851 )) }) 13852 ] }) }); 13853} 13854function yp() { 13855 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cosr0", _fgB: 1790697589957, _fgD: !0, className: "py-24 md:py-32 bg-[#f8f9fb]", "data-fg-cosr0": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:7:5:173:1450:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cosr1", _fgB: 1790697589957, className: "container mx-auto px-6 text-center", "data-fg-cosr1": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:8:7:229:1379:e:div:e", children: /* @__PURE__ */ c( 13856 a, 13857 { 13858 _fgT: m.div, 13859 _fgS: "cosr2", 13860 _fgB: 1790697589957, 13861 initial: { opacity: 0, y: 20 }, 13862 whileInView: { opacity: 1, y: 0 }, 13863 viewport: { once: !0 }, 13864 transition: { duration: 0.5 }, 13865 className: "max-w-2xl mx-auto", 13866 "data-fg-cosr2": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:9:9:290:1305:e:motion.div:etete", 13867 children: [
13868 /* @__PURE__ */ i( 13869 a, 13870 { 13871 _fgT: "h2", 13872 _fgS: "cosr3", 13873 _fgB: 1790697589957, 13874 className: "text-3xl md:text-4xl lg:text-5xl text-[#0B1B2B] font-[Space_Grotesk] mb-5", 13875 style: { fontWeight: 700 }, 13876 "data-fg-cosr3": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:16:11:526:222:e:h2:t", 13877 children: "Want to See Whatâs Under the Hood?" 13878 } 13879 ), 13880 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cosr5", _fgB: 1790697589957, className: "text-slate-500 text-lg leading-relaxed mb-10", "data-fg-cosr5": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:23:11:760:264:e:p:t", children: "Our Fixed Route tools page breaks down every module: route planning, blocking, runcutting, driver scheduling, live dashboard, MDT, and GTFS integration." }), 13881 /* @__PURE__ */ i(a, { _fgT: E, _fgS: "cosr7", _fgB: 1790697589957, href: "/fixed-route", "data-fg-cosr7": ":0:node_modules/wouter:29:11:1036:537:e:Link:e:::::C4yE", children: /* @__PURE__ */ c( 13882 a, 13883 { 13884 _fgT: "span", 13885 _fgS: "cosr8", 13886 _fgB: 1790697589957, 13887 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 13888 style: { fontWeight: 600 }, 13889 "data-fg-cosr8": ":0:/src/app/components/fixed-route-market/FixedRouteMarketExplore.tsx:30:13:1075:480:e:span:te", 13890 children: [ 13891 "Explore Fixed Route Tools",
13892 /* @__PURE__ */ i( 13893 a, 13894 { 13895 _fgT: D, 13896 _fgS: "cosr10", 13897 _fgB: 1790697589957, 13898 size: 20, 13899 className: "group-hover:translate-x-1 transition-transform", 13900 "data-fg-cosr10": ":0:node_modules/lucide-react:35:15:1406:129:e:ArrowRight::::::s5N" 13901 } 13902 ) 13903 ] 13904 } 13905 ) }) 13906 ] 13907 } 13908 ) }) }); 13909} 13910function wp() { 13911 const { openContactModal: t } = Z(); 13912 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bxtm0", _fgB: 1790697589959, _fgD: !0, id: "fr-market-cta", className: "py-24 md:py-32 bg-white", "data-fg-bxtm0": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:9:5:247:1559:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bxtm1", _fgB: 1790697589959, className: "container mx-auto px-6 text-center", "data-fg-bxtm1": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:10:7:318:1473:e:div:e", children: /* @__PURE__ */ c( 13913 a, 13914 { 13915 _fgT: m.div, 13916 _fgS: "bxtm2", 13917 _fgB: 1790697589959, 13918 initial: { opacity: 0, y: 20 }, 13919 whileInView: { opacity: 1, y: 0 }, 13920 viewport: { once: !0 }, 13921 transition: { duration: 0.5 }, 13922 className: "max-w-2xl mx-auto", 13923 "data-fg-bxtm2": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:11:9:379:1399:e:motion.div:etete", 13924 children: [
13925 /* @__PURE__ */ i( 13926 a, 13927 { 13928 _fgT: "h2", 13929 _fgS: "bxtm3", 13930 _fgB: 1790697589959, 13931 className: "text-3xl md:text-4xl lg:text-5xl text-[#0B1B2B] font-[Space_Grotesk] mb-5", 13932 style: { fontWeight: 700 }, 13933 "data-fg-bxtm3": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:18:11:615:228:e:h2:t", 13934 children: "Ready to Modernize Your Fixed Route Operation?" 13935 } 13936 ), 13937 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bxtm5", _fgB: 1790697589959, className: "text-slate-500 text-lg leading-relaxed mb-10", "data-fg-bxtm5": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:25:11:855:182:e:p:t", children: "See how our platform can help your agency run better service with fewer headaches." }), 13938 /* @__PURE__ */ i( 13939 a, 13940 { 13941 _fgT: m.div, 13942 _fgS: "bxtm7", 13943 _fgB: 1790697589959, 13944 initial: { opacity: 0, y: 10 }, 13945 whileInView: { opacity: 1, y: 0 }, 13946 viewport: { once: !0 }, 13947 "data-fg-bxtm7": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:30:11:1049:707:e:motion.div:e", 13948 children: /* @__PURE__ */ c( 13949 a, 13950 { 13951 _fgT: "button", 13952 _fgS: "bxtm8", 13953 _fgB: 1790697589959, 13954 onClick: t, 13955 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 13956 style: { fontWeight: 600 }, 13957 "data-fg-bxtm8": ":0:/src/app/components/fixed-route-market/FixedRouteMarketCTA.tsx:35:13:1214:518:e:button:te", 13958 children: [ 13959 "Schedule a Meeting",
13960 /* @__PURE__ */ i( 13961 a, 13962 { 13963 _fgT: D, 13964 _fgS: "bxtm10", 13965 _fgB: 1790697589959, 13966 size: 20, 13967 className: "group-hover:translate-x-1 transition-transform", 13968 "data-fg-bxtm10": ":0:node_modules/lucide-react:41:15:1581:129:e:ArrowRight::::::s5N" 13969 } 13970 ) 13971 ] 13972 } 13973 ) 13974 } 13975 ) 13976 ] 13977 } 13978 ) }) }); 13979} 13980function Tp() { 13981 return /* @__PURE__ */ c(C, { children: [ 13982 /* @__PURE__ */ i(a, { _fgT: gp, _fgS: "bafr1", _fgB: 1790697589419, "data-fg-bafr1": ":0:/src/app/pages/FixedRouteMarketPage.tsx:12:7:728:24:e:FixedRouteMarketHero::::::CZjf" }), 13983 /* @__PURE__ */ i(a, { _fgT: pp, _fgS: "bafr2", _fgB: 1790697589419, "data-fg-bafr2": ":0:/src/app/pages/FixedRouteMarketPage.tsx:13:7:759:29:e:FixedRouteMarketChallenge::::::B4vD" }), 13984 /* @__PURE__ */ i(a, { _fgT: _p, _fgS: "bafr3", _fgB: 1790697589419, "data-fg-bafr3": ":0:/src/app/pages/FixedRouteMarketPage.tsx:14:7:795:29:e:FixedRouteMarketHowWeHelp::::::Bmkt" }), 13985 /* @__PURE__ */ i(a, { _fgT: vp, _fgS: "bafr4", _fgB: 1790697589419, "data-fg-bafr4": ":0:/src/app/pages/FixedRouteMarketPage.tsx:15:7:831:27:e:FixedRouteMarketClients::::::y3t" }), 13986 /* @__PURE__ */ i(a, { _fgT: yp, _fgS: "bafr5", _fgB: 1790697589419, "data-fg-bafr5": ":0:/src/app/pages/FixedRouteMarketPage.tsx:16:7:865:27:e:FixedRouteMarketExplore::::::CVO1" }), 13987 /* @__PURE__ */ i(a, { _fgT: wp, _fgS: "bafr6", _fgB: 1790697589419, "data-fg-bafr6": ":0:/src/app/pages/FixedRouteMarketPage.tsx:17:7:899:23:e:FixedRouteMarketCTA::::::4RZ" }), 13988 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "bafr7", _fgB: 1790697589419, "data-fg-bafr7": ":0:/src/app/pages/FixedRouteMarketPage.tsx:18:7:929:10:e:Footer::::::B1Vv" }) 13989 ] }); 13990} 13991const Sp = globalThis.__GLOBALS__.getAssetURL("07ee40f8d505573301206f713f5e50e28e386462.png"); 13992function Bp() { 13993 const { openContactModal: t } = Z(); 13994 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "dcwu0", _fgB: 1790697589982, _fgD: !0, className: "relative min-h-[90vh] flex items-center bg-slate-900 overflow-hidden", "data-fg-dcwu0": ":0:/src/app/components/paratransit/ParatransitHero.tsx:10:5:325:3120:e:section:xtete:1", children: [ 13995 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dcwu2", _fgB: 1790697589982, className: "absolute inset-0 z-0 bg-slate-900", "data-fg-dcwu2": ":0:/src/app/components/paratransit/ParatransitHero.tsx:12:7:453:443:e:div:etxte", children: [
13996 /* @__PURE__ */ i( 13997 a, 13998 { 13999 _fgT: "img", 14000 _fgS: "dcwu3", 14001 _fgB: 1790697589982, 14002 src: Sp, 14003 alt: "Paratransit Vehicle", 14004 className: "w-full h-full object-contain object-right opacity-90", 14005 "data-fg-dcwu3": ":0:/src/app/components/paratransit/ParatransitHero.tsx:13:9:513:154:e:img" 14006 } 14007 ), 14008 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu5", _fgB: 1790697589982, className: "absolute inset-0 bg-gradient-to-r from-slate-900 via-slate-900/60 to-transparent", "data-fg-dcwu5": ":0:/src/app/components/paratransit/ParatransitHero.tsx:19:9:783:100:e:div" }) 14009 ] }), 14010 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dcwu6", _fgB: 1790697589982, className: "container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-dcwu6": ":0:/src/app/components/paratransit/ParatransitHero.tsx:22:7:904:2526:e:div:xtetxte", children: [ 14011 /* @__PURE__ */ c( 14012 a, 14013 { 14014 _fgT: m.div, 14015 _fgS: "dcwu8", 14016 _fgB: 1790697589982, 14017 initial: { opacity: 0, x: -50 }, 14018 animate: { opacity: 1, x: 0 }, 14019 transition: { duration: 0.8 }, 14020 "data-fg-dcwu8": ":0:/src/app/components/paratransit/ParatransitHero.tsx:24:9:1041:1392:e:motion.div:etetete", 14021 children: [
14022 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu9", _fgB: 1790697589982, className: "inline-block px-4 py-1.5 rounded-full border border-white/30 text-white text-sm font-bold tracking-widest uppercase mb-6 backdrop-blur-sm", "data-fg-dcwu9": ":0:/src/app/components/paratransit/ParatransitHero.tsx:29:11:1198:196:e:div:t", children: "PARATRANSIT" }), 14023 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "dcwu11", _fgB: 1790697589982, className: "text-5xl md:text-7xl font-bold text-white mb-6 leading-tight font-[Space_Grotesk]", "data-fg-dcwu11": ":0:/src/app/components/paratransit/ParatransitHero.tsx:32:11:1405:190:e:h1:te", children: [ 14024 "Paratransit ", 14025 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dcwu13", _fgB: 1790697589982, className: "text-[#EFBB0F]", "data-fg-dcwu13": ":0:/src/app/components/paratransit/ParatransitHero.tsx:33:25:1528:51:e:span:t", children: "Reimagined." }) 14026 ] }), 14027 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dcwu15", _fgB: 1790697589982, className: "text-lg md:text-xl text-slate-300 mb-8 leading-relaxed max-w-xl text-shadow-sm", "data-fg-dcwu15": ":0:/src/app/components/paratransit/ParatransitHero.tsx:35:11:1606:358:e:p:t", children: "Paratransit agencies juggle ADA compliance, rising trip volumes, rider expectations, and constant pressure to control costs. Our platform helps operators deliver reliable, dignified service while keeping operations lean and audit-ready." }),
14028 /* @__PURE__ */ c( 14029 a, 14030 { 14031 _fgT: "button", 14032 _fgS: "dcwu17", 14033 _fgB: 1790697589982, 14034 onClick: t, 14035 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 14036 "data-fg-dcwu17": ":0:/src/app/components/paratransit/ParatransitHero.tsx:39:11:1986:425:e:button:te", 14037 children: [ 14038 "Request a Demo", 14039 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dcwu19", _fgB: 1790697589982, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-dcwu19": ":0:node_modules/lucide-react:44:13:2308:83:e:ArrowRight::::::s5N" }) 14040 ] 14041 } 14042 ) 14043 ] 14044 } 14045 ), 14046 /* @__PURE__ */ i( 14047 a, 14048 { 14049 _fgT: m.div, 14050 _fgS: "dcwu21", 14051 _fgB: 1790697589982, 14052 initial: { opacity: 0, y: 50 }, 14053 animate: { opacity: 1, y: 0 }, 14054 transition: { delay: 0.3, duration: 0.8 }, 14055 className: "hidden lg:flex justify-end items-end h-full", 14056 "data-fg-dcwu21": ":0:/src/app/components/paratransit/ParatransitHero.tsx:49:9:2482:935:e:motion.div:e", 14057 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dcwu22", _fgB: 1790697589982, className: "bg-white rounded-3xl p-8 shadow-2xl flex items-center gap-8 max-w-md", "data-fg-dcwu22": ":0:/src/app/components/paratransit/ParatransitHero.tsx:55:11:2716:679:e:div:etete", children: [
14058 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dcwu23", _fgB: 1790697589982, className: "flex-1 text-center", "data-fg-dcwu23": ":0:/src/app/components/paratransit/ParatransitHero.tsx:56:13:2815:246:e:div:ete", children: [ 14059 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu24", _fgB: 1790697589982, className: "text-4xl font-bold text-slate-900 mb-1", "data-fg-dcwu24": ":0:/src/app/components/paratransit/ParatransitHero.tsx:57:15:2866:67:e:div:t", children: "3.4M+" }), 14060 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu26", _fgB: 1790697589982, className: "text-xs font-bold text-slate-400 tracking-widest uppercase", "data-fg-dcwu26": ":0:/src/app/components/paratransit/ParatransitHero.tsx:58:15:2948:94:e:div:t", children: "Annual Trips" }) 14061 ] }), 14062 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu28", _fgB: 1790697589982, className: "w-px h-16 bg-slate-200", "data-fg-dcwu28": ":0:/src/app/components/paratransit/ParatransitHero.tsx:60:13:3074:46:e:div:_" }), 14063 /* @__P
14063URE__ */ c(a, { _fgT: "div", _fgS: "dcwu29", _fgB: 1790697589982, className: "flex-1 text-center", "data-fg-dcwu29": ":0:/src/app/components/paratransit/ParatransitHero.tsx:61:13:3133:245:e:div:ete", children: [ 14064 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu30", _fgB: 1790697589982, className: "text-4xl font-bold text-slate-900 mb-1", "data-fg-dcwu30": ":0:/src/app/components/paratransit/ParatransitHero.tsx:62:15:3184:65:e:div:t", children: "98%" }), 14065 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcwu32", _fgB: 1790697589982, className: "text-xs font-bold text-slate-400 tracking-widest uppercase", "data-fg-dcwu32": ":0:/src/app/components/paratransit/ParatransitHero.tsx:63:15:3264:95:e:div:t", children: "On-Time Perf." }) 14066 ] }) 14067 ] }) 14068 } 14069 ) 14070 ] }) 14071 ] }); 14072} 14073const kp = [ 14074 { 14075 icon: _2, 14076 title: "ADA Compliance Is Non-Negotiable", 14077 text: "Every trip has to meet strict eligibility, pickup window, and ride time requirements. One missed rule can mean a federal complaint or funding risk." 14078 }, 14079 { 14080 icon: Y, 14081 title: "Call Centers Are Overwhelmed", 14082 text: "Riders calling to book, confirm, cancel, and ask where their ride is. Agencies without self-service tools burn staff hours on repetitive calls." 14083 }, 14084 { 14085 icon: R3, 14086 title: "Too Many Trips, Not Enough Vehicles", 14087 text: "Trip volumes keep growing but fleets and budgets don't. Operators need to move more people with fewer vehicles without sacrificing on-time performance." 14088 } 14089]; 14090function Ap() { 14091 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bw20", _fgB: 1790697589989, _fgD: !0, className: "bg-white py-24 border-b border-gray-100", "data-fg-bw20": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:24:5:903:1795:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bw21", _fgB: 1790697589989, className: "container mx-auto px-6 max-w-7xl text-center", "data-fg-bw21": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:25:7:971:1712:e:div:etete", children: [ 14092 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bw22", _fgB: 1790697589989, className: "inline-block text-[#EFBB0F] font-bold text-xs tracking-widest uppercase mb-4", "data-fg-bw22": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:27:9:1051:135:e:span:t", children: "THE CHALLENGE" }), 14093 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bw24", _fgB: 1790697589989, className: "text-3xl md:text-4xl font-bold text-slate-900 mb-16 max-w-2xl mx-auto leading-tight", "data-fg-bw24": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:31:9:1204:171:e:h2:t", children: "What Paratransit Operators Deal With Every Day" }), 14094 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bw26", _fgB: 1790697589989, className: "grid md:grid-cols-3 gap-12 text-left", "data-fg-bw26": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:35:9:1385:1276:e:div:x", children: kp.map((t, e) => /* @__PURE__ */ c( 14095 a, 14096 { 14097 _fgT: m.div, 14098 _fgS: "bw28", 14099 _fgB: 1790697589989, 14100 initial: { opacity: 0, y: 20 }, 14101 whileInView: { opacity: 1, y: 0 }, 14102 viewport: { once: !0 }, 14103 transition: { delay: e * 0.1 }, 14104 className: "group", 14105 "data-fg-bw28": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:37:13:1502:1130:e:motion.div:etete", 14106 children: [
14107 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bw29", _fgB: 1790697589989, className: "w-16 h-16 rounded-2xl bg-slate-50 text-slate-900 flex items-center justify-center mb-6 shadow-sm border border-slate-100 group-hover:scale-105 transition-transform duration-300", "data-fg-bw29": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:45:15:1785:498:e:div:xtxtxtx", children: [ 14108 e === 0 && /* @__PURE__ */ i(a, { _fgT: _2, _fgS: "bw212", _fgB: 1790697589989, size: 32, strokeWidth: 1.5, "data-fg-bw212": ":0:node_modules/lucide-react:47:33:2066:45:e:Accessibility::::::DNxc" }), 14109 e === 1 && /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "bw214", _fgB: 1790697589989, size: 32, strokeWidth: 1.5, "data-fg-bw214": ":0:node_modules/lucide-react:48:33:2145:37:e:Phone::::::DmpI" }), 14110 e === 2 && /* @__PURE__ */ i(a, { _fgT: R3, _fgS: "bw216", _fgB: 1790697589989, size: 32, strokeWidth: 1.5, "data-fg-bw216": ":0:node_modules/lucide-react:49:33:2216:45:e:AlertTriangle::::::Ruk" }) 14111 ] }),
14112 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bw217", _fgB: 1790697589989, className: "text-xl font-bold text-slate-900 mb-4 group-hover:text-[#0056B3] transition-colors", "data-fg-bw217": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:52:15:2313:153:e:h3:x", children: t.title }), 14113 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bw219", _fgB: 1790697589989, className: "text-slate-600 leading-relaxed text-[16px]", "data-fg-bw219": ":0:/src/app/components/paratransit/ParatransitChallenges.tsx:56:15:2496:110:e:p:x", children: t.text }) 14114 ] 14115 }, 14116 e 14117 )) }) 14118 ] }) }); 14119} 14120const Np = [ 14121 { 14122 id: "efficiency", 14123 headline: "Move More Riders With Fewer Vehicles", 14124 bullets: [ 14125 "Patented ERSA algorithm builds shared-ride manifests from thousands of daily trip requests", 14126 "Honors all SLA constraints including pickup windows, max ride times, and driver hour limits", 14127 "Same-day will-call trips inserted dynamically into active routes without rebuilding the manifest" 14128 ], 14129 image: "https://images.unsplash.com/photo-1769967210422-39106a789671?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxVU0ElMjBjaXR5JTIwc3RyZWV0JTIwbWFwJTIwR1BTJTIwbmF2aWdhdGlvbnxlbnwxfHx8fDE3NzMxOTUzMDV8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 14130 imageAlt: "Route optimization map", 14131 layout: "text-left" 14132 }, 14133 { 14134 id: "rider-self-service", 14135 headline: "Let Riders Help Themselves", 14136 bullets: [ 14137 "Where's My Ride app, web portal, and IVR phone system let riders book, confirm, and cancel without calling in", 14138 "Real-time vehicle tracking and ETA notifications so riders know exactly when their ride is arriving", 14139 "Contactless boarding with facial recognition, QR codes, or Bluetooth speeds up pickup and logs trips automatically" 14140 ], 14141 image: "https://images.unsplash.com/photo-1729949607063-34590384b26b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx3b21hbiUyMHNtYXJ0cGhvbmUlMjB0cmFuc2l0JTIwYm9va2luZyUyMG1vYmlsZSUyMGFwcCUyMG91dGRvb3JzfGVufDF8fHx8MTc3MzE5NTQ2MXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 14142 imageAlt: "Rider using app", 14143 layout: "image-left" 14144 }, 14145 { 14146 id: "compliance", 14147 headline: "Stay Audit-Ready Without the Busywork", 14148 bullets: [ 14149 "NTD and FTA reports generated with one click instead of weeks of pulling data manually", 14150 "On-time performance, no-shows, trip denials, and cancellations all tracked automatically", 14151 "Funding source billing and Medicaid ID tracking built into the trip record from dispatch through payment" 14152 ], 14153 image: "https://images.unsplash.com/photo-1551288049-bebda4e38f71?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxkYXRhJTIwYW5hbHl0aWNzJTIwZGFzaGJvYXJkJTIwY2hhcnRzJTIwZ3JhcGhzfGVufDF8fHx8MTc3MTM1OTc1OXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 14154 imageAlt: "Compliance dashboard", 14155 layout: "text-left" 14156 } 14157]; 14158function Ip() { 14159 const [t, e] = j(null); 14160 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "kas0", _fgB: 1790697589986, _fgD: !0, className: "bg-slate-50 py-24 overflow-hidden", "data-fg-kas0": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:52:5:2730:4204:e:section:xtete:1", children: [ 14161 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "kas2", _fgB: 1790697589986, "data-fg-kas2": ":0:node_modules/motion:55:7:2830:1211:e:AnimatePresence:x:::::DAs4", children: t && /* @__PURE__ */ i( 14162 a, 14163 { 14164 _fgT: m.div, 14165 _fgS: "kas4", 14166 _fgB: 1790697589986, 14167 initial: { opacity: 0 }, 14168 animate: { opacity: 1 }, 14169 exit: { opacity: 0 }, 14170 className: "fixed inset-0 z-50 flex items-center justify-center bg-slate-900/90 backdrop-blur-sm p-4 md:p-8", 14171 onClick: () => e(null), 14172 "data-fg-kas4": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:57:11:2886:1119:e:motion.div:e", 14173 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "kas5", _fgB: 1790697589986, className: "relative max-w-7xl w-full h-full flex items-center justify-center", "data-fg-kas5": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:64:13:3201:780:e:div:ete", children: [
14174 /* @__PURE__ */ i( 14175 a, 14176 { 14177 _fgT: "button", 14178 _fgS: "kas6", 14179 _fgB: 1790697589986, 14180 className: "absolute top-0 right-0 p-2 text-white/70 hover:text-white transition-colors", 14181 onClick: () => e(null), 14182 "data-fg-kas6": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:65:15:3299:239:e:button:e", 14183 children: /* @__PURE__ */ i(a, { _fgT: D3, _fgS: "kas7", _fgB: 1790697589986, size: 32, "data-fg-kas7": ":0:node_modules/lucide-react:69:17:3499:15:e:X::::::TvS" }) 14184 } 14185 ), 14186 /* @__PURE__ */ i( 14187 a, 14188 { 14189 _fgT: m.img, 14190 _fgS: "kas8", 14191 _fgB: 1790697589986, 14192 initial: { scale: 0.9, opacity: 0 }, 14193 animate: { scale: 1, opacity: 1 }, 14194 exit: { scale: 0.9, opacity: 0 }, 14195 src: t, 14196 alt: "Enlarged view", 14197 className: "max-w-full max-h-full rounded-lg shadow-2xl object-contain", 14198 onClick: (s) => s.stopPropagation(), 14199 "data-fg-kas8": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:72:15:3568:394:e:motion.img" 14200 } 14201 ) 14202 ] }) 14203 } 14204 ) }), 14205 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "kas9", _fgB: 1790697589986, className: "container mx-auto px-6 max-w-7xl", "data-fg-kas9": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:86:7:4049:2870:e:div:xtetxte", children: [
14206 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "kas11", _fgB: 1790697589986, className: "text-center mb-20", "data-fg-kas11": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:89:9:4148:352:e:div:ete", children: [ 14207 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "kas12", _fgB: 1790697589986, className: "inline-block text-[#0056B3] font-bold text-xs tracking-widest uppercase mb-4", "data-fg-kas12": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:90:11:4194:137:e:span:t", children: "HOW WE HELP" }), 14208 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "kas14", _fgB: 1790697589986, className: "text-3xl md:text-5xl font-bold text-slate-900 leading-tight", "data-fg-kas14": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:93:11:4342:143:e:h2:t", children: "Built for the Realities of Paratransit" }) 14209 ] }), 14210 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "kas17", _fgB: 1790697589986, className: "space-y-24 md:space-y-32", "data-fg-kas17": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:99:9:4539:2367:e:div:x", children: Np.map((s, r) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "kas19", _fgB: 1790697589986, className: `flex flex-col lg:flex-row items-center gap-12 lg:gap-20 ${s.layout === "image-left" ? "lg:flex-row-reverse" : ""}`, "data-fg-kas19": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:101:13:4640:2237:e:div:xtetxte", children: [
14211 /* @__PURE__ */ c( 14212 a, 14213 { 14214 _fgT: m.div, 14215 _fgS: "kas21", 14216 _fgB: 1790697589986, 14217 initial: { opacity: 0, y: 20 }, 14218 whileInView: { opacity: 1, y: 0 }, 14219 viewport: { once: !0 }, 14220 transition: { duration: 0.5 }, 14221 className: "w-full lg:w-[35%]", 14222 "data-fg-kas21": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:104:15:4853:862:e:motion.div:ete", 14223 children: [ 14224 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "kas22", _fgB: 1790697589986, className: "text-2xl md:text-3xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-kas22": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:111:17:5132:136:e:h3:x", children: s.headline }), 14225 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "kas24", _fgB: 1790697589986, className: "space-y-4", "data-fg-kas24": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:114:17:5285:402:e:ul:x", children: s.bullets.map((n, o) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "kas26", _fgB: 1790697589986, className: "flex items-start gap-3 text-lg text-slate-600 leading-relaxed", "data-fg-kas26": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:116:21:5386:257:e:li:ete", children: [
14226 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "kas27", _fgB: 1790697589986, className: "mt-2 w-1.5 h-1.5 rounded-full bg-[#EFBB0F] flex-shrink-0", "data-fg-kas27": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:117:23:5497:76:e:div" }), 14227 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "kas28", _fgB: 1790697589986, "data-fg-kas28": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:118:23:5596:21:e:span:x", children: n }) 14228 ] }, o)) }) 14229 ] 14230 } 14231 ), 14232 /* @__PURE__ */ i( 14233 a, 14234 { 14235 _fgT: m.div, 14236 _fgS: "kas31", 14237 _fgB: 1790697589986, 14238 initial: { opacity: 0, scale: 0.95 }, 14239 whileInView: { opacity: 1, scale: 1 }, 14240 viewport: { once: !0 }, 14241 transition: { duration: 0.5, delay: 0.1 }, 14242 className: "w-full lg:w-[65%] relative group cursor-pointer", 14243 onClick: () => e(s.image), 14244 "data-fg-kas31": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:125:15:5767:1090:e:motion.div:e", 14245 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "kas32", _fgB: 1790697589986, className: "relative rounded-2xl overflow-hidden shadow-2xl border border-slate-200/50 bg-white transition-transform duration-300 group-hover:scale-[1.01] group-hover:shadow-[0_20px_50px_rgba(0,0,0,0.1)]", "data-fg-kas32": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:133:17:6158:671:e:div:ete", children: [
14246 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "kas33", _fgB: 1790697589986, className: "absolute top-4 right-4 z-10 opacity-0 group-hover:opacity-100 transition-opacity bg-black/50 text-white p-2 rounded-full backdrop-blur-md", "data-fg-kas33": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:134:19:6386:224:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: C3, _fgS: "kas34", _fgB: 1790697589986, size: 20, "data-fg-kas34": ":0:node_modules/lucide-react:135:21:6562:23:e:Maximize2::::::DtbI" }) }), 14247 /* @__PURE__ */ i( 14248 a, 14249 { 14250 _fgT: "img", 14251 _fgS: "kas35", 14252 _fgB: 1790697589986, 14253 src: s.image, 14254 alt: s.imageAlt, 14255 className: "w-full h-auto object-cover aspect-[16/10]", 14256 "data-fg-kas35": ":0:/src/app/components/paratransit/ParatransitCapabilities.tsx:137:19:6629:177:e:img" 14257 } 14258 ) 14259 ] }) 14260 } 14261 ) 14262 ] }, s.id)) }) 14263 ] }) 14264 ] }); 14265} 14266const Pp = [ 14267 { 14268 icon: k1, 14269 label: "Transit Authorities" 14270 }, 14271 { 14272 icon: _2, 14273 label: "ADA Paratransit Providers" 14274 }, 14275 { 14276 icon: fd, 14277 label: "Medicaid Service Providers" 14278 }, 14279 { 14280 icon: si, 14281 label: "Demand-Response Contractors" 14282 } 14283]; 14284function Cp() { 14285 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "sfc0", _fgB: 1790697589984, _fgD: !0, className: "bg-slate-900 py-24 border-t border-slate-800", "data-fg-sfc0": ":0:/src/app/components/paratransit/ParatransitClients.tsx:25:5:472:1629:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sfc1", _fgB: 1790697589984, className: "container mx-auto px-6 max-w-7xl text-center", "data-fg-sfc1": ":0:/src/app/components/paratransit/ParatransitClients.tsx:26:7:545:1541:e:div:ete", children: [ 14286 /* @__PURE__ */ c( 14287 a, 14288 { 14289 _fgT: m.div, 14290 _fgS: "sfc2", 14291 _fgB: 1790697589984, 14292 initial: { opacity: 0, y: 20 }, 14293 whileInView: { opacity: 1, y: 0 }, 14294 viewport: { once: !0 }, 14295 className: "mb-16", 14296 "data-fg-sfc2": ":0:/src/app/components/paratransit/ParatransitClients.tsx:28:9:625:482:e:motion.div:ete", 14297 children: [
14298 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "sfc3", _fgB: 1790697589984, className: "text-3xl md:text-4xl font-bold text-white mb-6", "data-fg-sfc3": ":0:/src/app/components/paratransit/ParatransitClients.tsx:34:11:808:108:e:h2:t", children: "Who We Work With" }), 14299 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sfc5", _fgB: 1790697589984, className: "text-xl text-slate-400 max-w-2xl mx-auto", "data-fg-sfc5": ":0:/src/app/components/paratransit/ParatransitClients.tsx:37:11:927:158:e:p:t", children: "Our paratransit platform serves agencies and providers across the country." }) 14300 ] 14301 } 14302 ), 14303 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sfc7", _fgB: 1790697589984, className: "grid grid-cols-2 md:grid-cols-4 gap-8 md:gap-12", "data-fg-sfc7": ":0:/src/app/components/paratransit/ParatransitClients.tsx:42:9:1117:955:e:div:x", children: Pp.map((t, e) => /* @__PURE__ */ c( 14304 a, 14305 { 14306 _fgT: m.div, 14307 _fgS: "sfc9", 14308 _fgB: 1790697589984, 14309 initial: { opacity: 0, y: 20 }, 14310 whileInView: { opacity: 1, y: 0 }, 14311 viewport: { once: !0 }, 14312 transition: { delay: e * 0.1 }, 14313 className: "flex flex-col items-center group", 14314 "data-fg-sfc9": ":0:/src/app/components/paratransit/ParatransitClients.tsx:44:13:1244:799:e:motion.div:ete", 14315 children: [
14316 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sfc10", _fgB: 1790697589984, className: "w-16 h-16 rounded-2xl bg-slate-800 text-blue-400 flex items-center justify-center mb-6 border border-slate-700 group-hover:bg-[#0056B3] group-hover:text-white group-hover:border-[#0056B3] transition-all duration-300 shadow-lg", "data-fg-sfc10": ":0:/src/app/components/paratransit/ParatransitClients.tsx:52:15:1554:324:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "sfc11", _fgB: 1790697589984, size: 32, strokeWidth: 1.5, "data-fg-sfc11": ":0:/src/app/components/paratransit/ParatransitClients.tsx:53:17:1814:43:e:client.icon" }) }), 14317 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "sfc12", _fgB: 1790697589984, className: "text-lg font-bold text-white max-w-[160px] leading-tight", "data-fg-sfc12": ":0:/src/app/components/paratransit/ParatransitClients.tsx:55:15:1893:124:e:h3:x", children: t.label }) 14318 ] 14319 }, 14320 e 14321 )) }) 14322 ] }) }); 14323} 14324function Fp() { 14325 const { openContactModal: t } = Z(); 14326 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "ejqm0", _fgB: 1790697589997, _fgD: !0, id: "contact", className: "relative py-24 bg-white border-t border-slate-200", "data-fg-ejqm0": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:9:5:242:1379:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ejqm1", _fgB: 1790697589997, className: "max-w-4xl mx-auto px-6 text-center", "data-fg-ejqm1": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:10:7:333:1273:e:div:ete", children: [ 14327 /* @__PURE__ */ c( 14328 a, 14329 { 14330 _fgT: m.div, 14331 _fgS: "ejqm2", 14332 _fgB: 1790697589997, 14333 initial: { opacity: 0, y: 20 }, 14334 whileInView: { opacity: 1, y: 0 }, 14335 viewport: { once: !0 }, 14336 "data-fg-ejqm2": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:11:9:394:561:e:motion.div:ete", 14337 children: [
14338 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "ejqm3", _fgB: 1790697589997, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 font-[Space_Grotesk]", "data-fg-ejqm3": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:16:11:549:189:e:h2:te", children: [ 14339 "Ready to Run Better ", 14340 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ejqm5", _fgB: 1790697589997, className: "text-[#0056B3]", "data-fg-ejqm5": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:17:33:670:52:e:span:t", children: "Paratransit?" }) 14341 ] }), 14342 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ejqm7", _fgB: 1790697589997, className: "text-xl text-slate-600 mb-10 max-w-2xl mx-auto", "data-fg-ejqm7": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:19:11:749:184:e:p:t", children: "See how our platform helps agencies move more riders, hit on-time targets, and stay compliant." }) 14343 ] 14344 } 14345 ), 14346 /* @__PURE__ */ i( 14347 a, 14348 { 14349 _fgT: m.div, 14350 _fgS: "ejqm9", 14351 _fgB: 1790697589997, 14352 initial: { opacity: 0, scale: 0.9 }, 14353 whileInView: { opacity: 1, scale: 1 }, 14354 viewport: { once: !0 }, 14355 "data-fg-ejqm9": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:24:9:965:628:e:motion.div:e", 14356 children: /* @__PURE__ */ c( 14357 a, 14358 { 14359 _fgT: "button", 14360 _fgS: "ejqm10", 14361 _fgB: 1790697589997, 14362 onClick: t, 14363 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-2xl hover:shadow-blue-900/20 cursor-pointer", 14364 "data-fg-ejqm10": ":0:/src/app/components/paratransit/ParatransitCTA.tsx:29:11:1129:442:e:button:te", 14365 children: [ 14366 "Request a Demo",
14367 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "ejqm12", _fgB: 1790697589997, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-ejqm12": ":0:node_modules/lucide-react:34:13:1468:83:e:ArrowRight::::::s5N" }) 14368 ] 14369 } 14370 ) 14371 } 14372 ) 14373 ] }) }); 14374} 14375function Ep() { 14376 return /* @__PURE__ */ c(C, { children: [ 14377 /* @__PURE__ */ i(a, { _fgT: Bp, _fgS: "dwir1", _fgB: 1790697589421, "data-fg-dwir1": ":0:/src/app/pages/ParatransitPage.tsx:11:7:543:19:e:ParatransitHero::::::BZN5" }), 14378 /* @__PURE__ */ i(a, { _fgT: Ap, _fgS: "dwir2", _fgB: 1790697589421, "data-fg-dwir2": ":0:/src/app/pages/ParatransitPage.tsx:12:7:569:25:e:ParatransitChallenges::::::CWxB" }), 14379 /* @__PURE__ */ i(a, { _fgT: Ip, _fgS: "dwir3", _fgB: 1790697589421, "data-fg-dwir3": ":0:/src/app/pages/ParatransitPage.tsx:13:7:601:27:e:ParatransitCapabilities::::::DkVl" }), 14380 /* @__PURE__ */ i(a, { _fgT: Cp, _fgS: "dwir4", _fgB: 1790697589421, "data-fg-dwir4": ":0:/src/app/pages/ParatransitPage.tsx:14:7:635:22:e:ParatransitClients::::::C6N3" }), 14381 /* @__PURE__ */ i(a, { _fgT: Fp, _fgS: "dwir5", _fgB: 1790697589421, "data-fg-dwir5": ":0:/src/app/pages/ParatransitPage.tsx:15:7:664:18:e:ParatransitCTA::::::BZBb" }), 14382 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "dwir6", _fgB: 1790697589421, "data-fg-dwir6": ":0:/src/app/pages/ParatransitPage.tsx:16:7:689:10:e:Footer::::::B1Vv" }) 14383 ] }); 14384} 14385const Rp = globalThis.__GLOBALS__.getAssetURL("ee012999e56a6528c6c3fb454b8d457d8eba2cde.png"); 14386function Dp() { 14387 const { openContactModal: t } = Z(); 14388 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y0", _fgB: 1790697590174, _fgD: !0, className: "relative bg-slate-900 overflow-hidden", "data-fg-c09y0": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:10:5:350:5631:e:div:xtetxte:1", children: [ 14389 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "c09y2", _fgB: 1790697590174, className: "relative min-h-[85vh] flex items-center pt-20 pb-20 lg:pt-0 lg:pb-0", "data-fg-c09y2": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:12:7:444:4289:e:section:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y3", _fgB: 1790697590174, className: "container mx-auto px-6 pt-16 lg:pt-24 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-c09y3": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:13:9:542:4174:e:div:xtetxte", children: [
14390 /* @__PURE__ */ c( 14391 a, 14392 { 14393 _fgT: m.div, 14394 _fgS: "c09y5", 14395 _fgB: 1790697590174, 14396 initial: { opacity: 0, y: 30 }, 14397 animate: { opacity: 1, y: 0 }, 14398 transition: { duration: 0.8 }, 14399 className: "flex flex-col items-start", 14400 "data-fg-c09y5": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:15:11:698:1642:e:motion.div:etetete", 14401 children: [ 14402 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y6", _fgB: 1790697590174, className: "inline-block px-4 py-1.5 rounded-full border border-amber-500/50 bg-amber-500/10 text-amber-400 text-xs font-bold tracking-widest uppercase mb-8 shadow-[0_0_15px_rgba(239,187,15,0.3)] backdrop-blur-sm", "data-fg-c09y6": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:21:13:914:264:e:div:t", children: "MICROTRANSIT" }), 14403 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "c09y8", _fgB: 1790697590174, className: "text-5xl md:text-7xl font-bold text-white mb-6 leading-tight font-[Space_Grotesk]", "data-fg-c09y8": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:25:13:1204:242:e:h1:tete", children: [ 14404 "Stop Running Three Networks",
14405 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c09y10", _fgB: 1790697590174, "data-fg-c09y10": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:26:42:1344:6:e:br" }), 14406 "When You Only Need ", 14407 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y12", _fgB: 1790697590174, className: "text-[#EFBB0F]", "data-fg-c09y12": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:27:34:1384:44:e:span:t", children: "One." }) 14408 ] }), 14409 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c09y14", _fgB: 1790697590174, className: "text-lg md:text-xl text-slate-300 mb-10 leading-relaxed max-w-xl", "data-fg-c09y14": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:30:13:1472:379:e:p:t", children: "Paratransit. Fixed route. On-demand. Most agencies run them as separate operations with separate fleets and separate budgets. IT Curves ties them together into a single commingled network where every vehicle, every route, and every rider is managed from one platform." }), 14410 /* @__P
14410URE__ */ c( 14411 a, 14412 { 14413 _fgT: "button", 14414 _fgS: "c09y16", 14415 _fgB: 1790697590174, 14416 onClick: t, 14417 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 14418 "data-fg-c09y16": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:34:13:1877:439:e:button:te", 14419 children: [ 14420 "See How It Works", 14421 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "c09y18", _fgB: 1790697590174, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-c09y18": ":0:node_modules/lucide-react:39:15:2211:83:e:ArrowRight::::::s5N" }) 14422 ] 14423 } 14424 ) 14425 ] 14426 } 14427 ), 14428 /* @__PURE__ */ i( 14429 a, 14430 { 14431 _fgT: m.div, 14432 _fgS: "c09y20", 14433 _fgB: 1790697590174, 14434 initial: { opacity: 0, scale: 0.95 }, 14435 animate: { opacity: 1, scale: 1 }, 14436 transition: { delay: 0.2, duration: 0.8 }, 14437 className: "relative h-full min-h-[400px] lg:min-h-[600px] flex items-center justify-center", 14438 "data-fg-c09y20": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:44:11:2387:2314:e:motion.div:e", 14439 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y21", _fgB: 1790697590174, className: "relative w-full h-full rounded-2xl overflow-hidden shadow-2xl border border-slate-700/50 group", "data-fg-c09y21": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:50:13:2679:1998:e:div:etetxte", children: [
14440 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y22", _fgB: 1790697590174, className: "absolute inset-0 bg-gradient-to-t from-slate-900/80 via-transparent to-transparent z-10", "data-fg-c09y22": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:51:15:2806:107:e:div" }), 14441 /* @__PURE__ */ i( 14442 a, 14443 { 14444 _fgT: "img", 14445 _fgS: "c09y23", 14446 _fgB: 1790697590174, 14447 src: Rp, 14448 alt: "Microtransit Commingled Network", 14449 className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105", 14450 "data-fg-c09y23": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:52:15:2928:230:e:img" 14451 } 14452 ), 14453 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y25", _fgB: 1790697590174, className: "absolute bottom-6 left-6 right-6 z-20", "data-fg-c09y25": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:59:15:3242:1416:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y26", _fgB: 1790697590174, className: "bg-slate-900/90 backdrop-blur-md p-4 rounded-xl border border-slate-700 shadow-xl", "data-fg-c09y26": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:60:17:3314:1323:e:div:ete", children: [
14454 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y27", _fgB: 1790697590174, className: "flex items-center gap-4 mb-3", "data-fg-c09y27": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:61:19:3432:255:e:div:ete", children: [ 14455 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y28", _fgB: 1790697590174, className: "w-3 h-3 rounded-full bg-green-500 animate-pulse", "data-fg-c09y28": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:62:21:3499:67:e:div" }), 14456 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y29", _fgB: 1790697590174, className: "text-white font-medium text-sm", "data-fg-c09y29": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:63:21:3587:75:e:span:t", children: "Live Network Status" }) 14457 ] }), 14458 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y31", _fgB: 1790697590174, className: "flex justify-between items-center text-xs text-slate-400 border-t border-slate-700 pt-3", "data-fg-c09y31": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:65:19:3706:908:e:div:etetetete", children: [
14459 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y32", _fgB: 1790697590174, className: "flex flex-col items-center", "data-fg-c09y32": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:66:21:3832:202:e:div:ete", children: [ 14460 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y33", _fgB: 1790697590174, className: "text-white font-bold text-lg", "data-fg-c09y33": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:67:23:3899:57:e:span:t", children: "142" }), 14461 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y35", _fgB: 1790697590174, "data-fg-c09y35": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:68:23:3979:28:e:span:t", children: "Active Vehicles" }) 14462 ] }), 14463 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y37", _fgB: 1790697590174, className: "h-8 w-px bg-slate-700", "data-fg-c09y37": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:70:21:4055:41:e:div" }), 14464 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y38", _fgB: 1790697590174, className: "flex flex-col items-center", "data-fg-c09y38": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:71:21:4117:194:e:div:ete", children: [
14465 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y39", _fgB: 1790697590174, className: "text-white font-bold text-lg", "data-fg-c09y39": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:72:23:4184:57:e:span:t", children: "98%" }), 14466 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y41", _fgB: 1790697590174, "data-fg-c09y41": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:73:23:4264:20:e:span:t", children: "On-Time" }) 14467 ] }), 14468 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y43", _fgB: 1790697590174, className: "h-8 w-px bg-slate-700", "data-fg-c09y43": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:75:21:4332:41:e:div" }), 14469 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y44", _fgB: 1790697590174, className: "flex flex-col items-center", "data-fg-c09y44": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:76:21:4394:195:e:div:ete", children: [ 14470 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y45", _fgB: 1790697590174, className: "text-white font-bold text-lg", "data-fg-c09y45": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:77:23:4461:57:e:span:t", children: "12m" }),
14471 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y47", _fgB: 1790697590174, "data-fg-c09y47": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:78:23:4541:21:e:span:t", children: "Avg Wait" }) 14472 ] }) 14473 ] }) 14474 ] }) }) 14475 ] }) 14476 } 14477 ) 14478 ] }) }), 14479 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y50", _fgB: 1790697590174, className: "w-full bg-slate-800/50 border-t border-slate-800 py-6", "data-fg-c09y50": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:89:7:4774:1196:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y51", _fgB: 1790697590174, className: "container mx-auto px-6", "data-fg-c09y51": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:90:9:4854:1103:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y52", _fgB: 1790697590174, className: "flex flex-col md:flex-row justify-center items-center gap-4 md:gap-12 text-center", "data-fg-c09y52": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:91:11:4905:1037:e:div:etetetete", children: [
14480 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y53", _fgB: 1790697590174, className: "flex items-center gap-3", "data-fg-c09y53": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:92:13:5017:222:e:div:ete", children: [ 14481 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "c09y54", _fgB: 1790697590174, size: 18, className: "text-[#EFBB0F]", "data-fg-c09y54": ":0:node_modules/lucide-react:93:15:5073:53:e:CheckCircle2::::::CELI" }), 14482 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y55", _fgB: 1790697590174, className: "text-white font-medium tracking-wide", "data-fg-c09y55": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:94:15:5141:79:e:span:t", children: "Commingled Fleets" }) 14483 ] }), 14484 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y57", _fgB: 1790697590174, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-c09y57": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:97:13:5265:57:e:div" }), 14485 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y58", _fgB: 1790697590174, className: "flex items-center gap-3", "data-fg-c09y58": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:99:13:5348:234:e:div:ete", children: [
14486 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "c09y59", _fgB: 1790697590174, size: 18, className: "text-[#EFBB0F]", "data-fg-c09y59": ":0:node_modules/lucide-react:100:15:5404:53:e:CheckCircle2::::::CELI" }), 14487 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y60", _fgB: 1790697590174, className: "text-white font-medium tracking-wide", "data-fg-c09y60": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:101:15:5472:91:e:span:t", children: "First-Mile Last-Mile Coverage" }) 14488 ] }), 14489 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c09y62", _fgB: 1790697590174, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-c09y62": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:104:13:5608:57:e:div" }), 14490 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c09y63", _fgB: 1790697590174, className: "flex items-center gap-3", "data-fg-c09y63": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:106:13:5691:234:e:div:ete", children: [ 14491 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "c09y64", _fgB: 1790697590174, size: 18, className: "text-[#EFBB0F]", "data-fg-c09y64": ":0:node_modules/lucide-react:107:15:5747:53:e:CheckCircle2::::::CELI" }),
14492 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c09y65", _fgB: 1790697590174, className: "text-white font-medium tracking-wide", "data-fg-c09y65": ":0:/src/app/components/microtransit/MicrotransitHero.tsx:108:15:5815:91:e:span:t", children: "Full Simulation Before Launch" }) 14493 ] }) 14494 ] }) }) }) 14495 ] }); 14496} 14497function zp() { 14498 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bak90", _fgB: 1790697590176, _fgD: !0, className: "py-24 bg-white", "data-fg-bak90": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:6:5:154:2268:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bak91", _fgB: 1790697590176, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-start", "data-fg-bak91": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:7:7:197:2210:e:div:xtetxte", children: [ 14499 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bak93", _fgB: 1790697590176, className: "lg:w-3/4", "data-fg-bak93": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:9:9:315:825:e:div:e", children: /* @__PURE__ */ c( 14500 a, 14501 { 14502 _fgT: m.div, 14503 _fgS: "bak94", 14504 _fgB: 1790697590176, 14505 initial: { opacity: 0, x: -30 }, 14506 whileInView: { opacity: 1, x: 0 }, 14507 viewport: { once: !0 }, 14508 transition: { duration: 0.6 }, 14509 "data-fg-bak94": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:10:11:352:773:e:motion.div:etete", 14510 children: [
14511 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bak95", _fgB: 1790697590176, className: "inline-block px-4 py-1.5 rounded-full border border-red-500/20 bg-red-50 text-red-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-bak95": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:16:13:561:197:e:div:t", children: "THE PROBLEM" }), 14512 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bak97", _fgB: 1790697590176, className: "text-4xl md:text-5xl font-bold text-slate-900 leading-tight mb-8", "data-fg-bak97": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:20:13:784:237:e:h2:tete", children: [ 14513 "Transit agencies keep adding services.", 14514 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bak99", _fgB: 1790697590176, "data-fg-bak99": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:21:53:918:6:e:br" }), 14515 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bak910", _fgB: 1790697590176, className: "text-[#EFBB0F]", "data-fg-bak910": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:22:15:939:64:e:span:t", children: "But not connecting them." }) 14516 ] }),
14517 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bak912", _fgB: 1790697590176, className: "h-1 w-24 bg-slate-200 rounded-full", "data-fg-bak912": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:25:13:1047:54:e:div" }) 14518 ] 14519 } 14520 ) }), 14521 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bak914", _fgB: 1790697590176, className: "space-y-8", "data-fg-bak914": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:30:9:1178:1216:e:div:etete", children: [ 14522 /* @__PURE__ */ i( 14523 a, 14524 { 14525 _fgT: p4, 14526 _fgS: "bak915", 14527 _fgB: 1790697590176, 14528 icon: /* @__PURE__ */ i(a, { _fgT: Y5, _fgS: "bak916", _fgB: 1790697590176, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-bak916": ":0:node_modules/lucide-react:32:19:1248:50:e:AlertCircle::::::fAY" }), 14529 title: "Siloed Fleets Burn Money", 14530 description: "Your paratransit vans sit idle when they could be serving your fixed route riders. Three separate fleets serving the same community means vehicles, drivers, and dispatchers that can't help each other.", 14531 delay: 0.1, 14532 "data-fg-bak915": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:31:11:1216:392:e:ProblemCard::::::geS" 14533 } 14534 ),
14535 /* @__PURE__ */ i( 14536 a, 14537 { 14538 _fgT: p4, 14539 _fgS: "bak917", 14540 _fgB: 1790697590176, 14541 icon: /* @__PURE__ */ i(a, { _fgT: Pt, _fgS: "bak918", _fgB: 1790697590176, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-bak918": ":0:node_modules/lucide-react:39:19:1662:45:e:MapPin::::::BveZ" }), 14542 title: "Low-Density Areas Get Left Behind", 14543 description: "Fixed routes can't justify frequency in suburban and rural zones. Residents outside the core network end up with no service or service so infrequent it's unusable.", 14544 delay: 0.2, 14545 "data-fg-bak917": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:38:11:1630:359:e:ProblemCard::::::geS" 14546 } 14547 ), 14548 /* @__PURE__ */ i( 14549 a, 14550 { 14551 _fgT: p4, 14552 _fgS: "bak919", 14553 _fgB: 1790697590176, 14554 icon: /* @__PURE__ */ i(a, { _fgT: It, _fgS: "bak920", _fgB: 1790697590176, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-bak920": ":0:node_modules/lucide-react:46:19:2043:44:e:Clock::::::EGEm" }), 14555 title: "Pilots Launch Without a Plan", 14556 description: "Agencies start microtransit without knowing how many vehicles they need, what zones to cover, or what cost per trip to expect. When the pilot underperforms, the program gets cut.", 14557 delay: 0.3, 14558 "data-fg-bak919": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:45:11:2011:368:e:ProblemCard::::::geS" 14559 } 14560 ) 14561 ] }) 14562 ] }) }); 14563} 14564function p4({ icon: t, title: e, description: s, delay: r }) { 14565 return /* @__PURE__ */ c( 14566 a, 14567 { 14568 _fgT: m.div, 14569 _fgS: "bak921", 14570 _fgB: 1790697590176, 14571 _fgD: !0, 14572 initial: { opacity: 0, y: 20 }, 14573 whileInView: { opacity: 1, y: 0 }, 14574 viewport: { once: !0 }, 14575 transition: { delay: r, duration: 0.5 }, 14576 className: "bg-slate-50 border-l-4 border-[#EFBB0F] p-8 rounded-r-xl shadow-sm hover:shadow-md transition-shadow group", 14577 "data-fg-bak921": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:59:5:2584:717:e:motion.div:ete:1", 14578 children: [
14579 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bak922", _fgB: 1790697590176, className: "flex items-start gap-4 mb-3", "data-fg-bak922": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:66:7:2888:296:e:div:ete", children: [ 14580 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bak923", _fgB: 1790697590176, className: "p-2 bg-white rounded-lg shadow-sm text-slate-900 group-hover:scale-110 transition-transform duration-300", "data-fg-bak923": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:67:9:2942:154:e:div:x", children: t }), 14581 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bak925", _fgB: 1790697590176, className: "text-xl font-bold text-slate-900 pt-1", "data-fg-bak925": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:70:9:3105:66:e:h3:x", children: e }) 14582 ] }), 14583 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bak927", _fgB: 1790697590176, className: "text-slate-600 leading-relaxed pl-[3.25rem]", "data-fg-bak927": ":0:/src/app/components/microtransit/MicrotransitProblem.tsx:72:7:3191:92:e:p:x", children: s }) 14584 ] 14585 } 14586 ); 14587} 14588const jp = globalThis.__GLOBALS__.getAssetURL("242f9b5555d2ad77539572a8cb909155eddb2d2f.png"), Op = globalThis.__GLOBALS__.getAssetURL("ca842a5873918bd417c1686b839d2ad214e20c26.png"), Vp = globalThis.__GLOBALS__.getAssetURL("32d7bc9b1579eb7e8f41130d7bf2892668ccd7a3.png"); 14589function Hp() { 14590 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "c1k20", _fgB: 1790697590179, _fgD: !0, className: "py-24 bg-white relative", "data-fg-c1k20": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:9:5:423:4335:e:section:ete:1", children: [ 14591 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c1k21", _fgB: 1790697590179, className: "container mx-auto px-6 mb-24 text-center", "data-fg-c1k21": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:10:7:475:716:e:div:etete", children: [
14592 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c1k22", _fgB: 1790697590179, className: "inline-block px-4 py-1.5 rounded-full border border-blue-100 bg-blue-50 text-blue-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-c1k22": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:11:9:542:200:e:div:t", children: "THE IT CURVES APPROACH" }), 14593 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "c1k24", _fgB: 1790697590179, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-c1k24": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:15:9:760:171:e:h2:tet", children: [ 14594 "Commingled Microtransit.", 14595 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c1k26", _fgB: 1790697590179, "data-fg-c1k26": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:16:35:876:6:e:br" }), 14596 "One Network. Every Mode." 14597 ] }), 14598 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c1k28", _fgB: 1790697590179, className: "text-lg md:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed", "data-fg-c1k28": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:20:9:949:229:e:p:t", children: "Instead of bolting on another standalone service, we integrate microtransit directly into your existing transit operation." }) 14599 ] }), 14600 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c1k210", _fgB: 1790697590179, className: "space-y-0", "data-fg-c1k210": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:25:7:1199:3544:e:div:xtetxtetxtetxte", children: [
14601 /* @__PURE__ */ i( 14602 a, 14603 { 14604 _fgT: I2, 14605 _fgS: "c1k212", 14606 _fgB: 1790697590179, 14607 label: "COMMINGLING", 14608 title: "One Fleet. Every Service Type.", 14609 points: [ 14610 "Paratransit, fixed route, and on-demand trips dispatched through one system so vehicles are never sitting idle when another service needs capacity", 14611 "Dynamic routing picks the best available vehicle for each trip regardless of what service type that vehicle was originally assigned to", 14612 "Rider eligibility is enforced automatically so each passenger gets the right service level even when sharing a vehicle" 14613 ], 14614 image: "https://images.unsplash.com/photo-1601247173792-b282c350cabc?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtaXhlZCUyMHRyYW5zaXQlMjBmbGVldCUyMGJ1c2VzJTIwdmFucyUyMHB1YmxpYyUyMHRyYW5zcG9ydGF0aW9ufGVufDF8fHx8MTc3MzE5NDkzMnww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 14615 bgColor: "bg-slate-50", 14616 isImageRight: !0, 14617 icon: /* @__PURE__ */ i(a, { _fgT: I3, _fgS: "c1k213", _fgB: 1790697590179, className: "w-5 h-5 text-white", "data-fg-c1k213": ":0:node_modules/lucide-react:38:17:2290:41:e:Layers::::::U3Y" }), 14618 "data-fg-c1k212": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:27:9:1308:1035:e:ApproachRow::::::BQUO" 14619 } 14620 ),
14621 /* @__PURE__ */ i( 14622 a, 14623 { 14624 _fgT: I2, 14625 _fgS: "c1k215", 14626 _fgB: 1790697590179, 14627 label: "COVERAGE", 14628 title: "Reach Every Corner of Your Service Area", 14629 points: [ 14630 "On-demand microtransit fills the gaps between fixed route corridors, connecting riders in low-density neighborhoods to the broader network", 14631 "Flexible stops at key locations like medical centers, grocery stores, and transit hubs so vehicles serve real community needs", 14632 "Riders book through the Where's My Ride app, web portal, or IVR phone system and the platform finds the best connection across all available modes" 14633 ], 14634 image: jp, 14635 bgColor: "bg-white", 14636 isImageRight: !1, 14637 icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "c1k216", _fgB: 1790697590179, className: "w-5 h-5 text-white", "data-fg-c1k216": ":0:node_modules/lucide-react:53:17:3112:38:e:Zap::::::Cp7" }), 14638 "data-fg-c1k215": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:42:9:2418:744:e:ApproachRow::::::BQUO" 14639 } 14640 ),
14641 /* @__PURE__ */ i( 14642 a, 14643 { 14644 _fgT: I2, 14645 _fgS: "c1k218", 14646 _fgB: 1790697590179, 14647 label: "SIMULATION", 14648 title: "Test It Before You Fund It", 14649 points: [ 14650 "Run a full day's operation as a simulation before committing vehicles or drivers to a new zone", 14651 "Adjust vehicle counts, shift lengths, zone boundaries, and service windows then rerun to compare results side by side", 14652 "Dashboard shows load factor, idle time, cost per trip, and service quality per vehicle so you can present real numbers to your board or funding body" 14653 ], 14654 image: Op, 14655 bgColor: "bg-slate-50", 14656 isImageRight: !0, 14657 icon: /* @__PURE__ */ i(a, { _fgT: F3, _fgS: "c1k219", _fgB: 1790697590179, className: "w-5 h-5 text-white", "data-fg-c1k219": ":0:node_modules/lucide-react:68:17:3881:46:e:ShieldCheck::::::CqaD" }), 14658 "data-fg-c1k218": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:57:9:3244:695:e:ApproachRow::::::BQUO" 14659 } 14660 ),
14661 /* @__PURE__ */ i( 14662 a, 14663 { 14664 _fgT: I2, 14665 _fgS: "c1k221", 14666 _fgB: 1790697590179, 14667 label: "AUTOMATION", 14668 title: "From Request to Drop-Off. No Manual Steps.", 14669 points: [ 14670 "Ride requests flow straight from the rider into routing and vehicle assignment with no dispatcher intervention needed", 14671 "Contactless rider identification through facial recognition, QR code, or Bluetooth handles boarding and logs trip data automatically", 14672 "Dispatch and driver tablets stay in sync in real time so there's no paperwork, no radio calls, and no billing discrepancies" 14673 ], 14674 image: Vp, 14675 bgColor: "bg-white", 14676 isImageRight: !1, 14677 icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "c1k222", _fgB: 1790697590179, className: "w-5 h-5 text-white", "data-fg-c1k222": ":0:node_modules/lucide-react:83:17:4680:38:e:Zap::::::Cp7" }), 14678 "data-fg-c1k221": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:72:9:4016:714:e:ApproachRow::::::BQUO" 14679 } 14680 ) 14681 ] }) 14682 ] }); 14683} 14684function I2({ label: t, title: e, points: s, image: r, bgColor: n, isImageRight: o, icon: L }) { 14685 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c1k223", _fgB: 1790697590179, _fgD: !0, className: `py-20 ${n}`, "data-fg-c1k223": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:102:5:5057:2253:e:div:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c1k224", _fgB: 1790697590179, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-center", "data-fg-c1k224": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:103:7:5100:2199:e:div:xtetxte", children: [ 14686 /* @__PURE__ */ c( 14687 a, 14688 { 14689 _fgT: m.div, 14690 _fgS: "c1k226", 14691 _fgB: 1790697590179, 14692 initial: { opacity: 0, x: o ? -30 : 30 }, 14693 whileInView: { opacity: 1, x: 0 }, 14694 viewport: { once: !0, margin: "-100px" }, 14695 transition: { duration: 0.6 }, 14696 className: `${o ? "lg:order-1" : "lg:order-2"}`, 14697 "data-fg-c1k226": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:105:9:5218:1335:e:motion.div:etete", 14698 children: [
14699 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c1k227", _fgB: 1790697590179, className: "flex items-center gap-3 mb-6", "data-fg-c1k227": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:112:11:5524:342:e:div:ete", children: [ 14700 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c1k228", _fgB: 1790697590179, className: "flex items-center justify-center w-8 h-8 rounded-full bg-[#EFBB0F] shadow-md", "data-fg-c1k228": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:113:13:5583:134:e:div:x", children: L }), 14701 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c1k230", _fgB: 1790697590179, className: "text-[#EFBB0F] font-bold tracking-widest text-sm uppercase", "data-fg-c1k230": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:116:13:5730:119:e:span:x", children: t }) 14702 ] }), 14703 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "c1k232", _fgB: 1790697590179, className: "text-3xl md:text-4xl font-bold text-slate-900 mb-8 leading-tight", "data-fg-c1k232": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:121:11:5888:117:e:h3:x", children: e }),
14704 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "c1k234", _fgB: 1790697590179, className: "space-y-6", "data-fg-c1k234": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:125:11:6027:504:e:ul:x", children: s.map((d, l) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "c1k236", _fgB: 1790697590179, className: "flex items-start gap-4 group", "data-fg-c1k236": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:127:15:6112:387:e:li:ete", children: [ 14705 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c1k237", _fgB: 1790697590179, className: "mt-1.5 min-w-[20px] text-[#EFBB0F]", "data-fg-c1k237": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:128:17:6186:175:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: G, _fgS: "c1k238", _fgB: 1790697590179, size: 20, className: "group-hover:scale-110 transition-transform", "data-fg-c1k238": ":0:node_modules/lucide-react:129:19:6257:81:e:CheckCircle2::::::CELI" }) }), 14706 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c1k239", _fgB: 1790697590179, className: "text-slate-600 leading-relaxed text-lg", "data-fg-c1k239": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:131:17:6378:101:e:p:x", children: d }) 14707 ] }, l)) }) 14708 ] 14709 } 14710 ), 14711 /* @__PURE__ */ c( 14712 a, 14713 { 14714 _fgT: m.div, 14715 _fgS: "c1k242", 14716 _fgB: 1790697590179, 14717 initial: { opacity: 0, scale: 0.95 }, 14718 whileInView: { opacity: 1, scale: 1 }, 14719 viewport: { once: !0, margin: "-100px" }, 14720 transition: { duration: 0.6, delay: 0.2 }, 14721 className: `relative h-[400px] md:h-[500px] rounded-2xl overflow-hidden shadow-2xl ${o ? "lg:order-2" : "lg:order-1"}`, 14722 "data-fg-c1k242": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:140:9:6585:701:e:motion.div:ete", 14723 children: [
14724 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c1k243", _fgB: 1790697590179, className: "absolute inset-0 bg-gradient-to-tr from-slate-900/40 to-transparent z-10 mix-blend-multiply", "data-fg-c1k243": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:147:11:6963:111:e:div" }), 14725 /* @__PURE__ */ i( 14726 a, 14727 { 14728 _fgT: "img", 14729 _fgS: "c1k244", 14730 _fgB: 1790697590179, 14731 src: r, 14732 alt: e, 14733 className: "w-full h-full object-cover transform hover:scale-105 transition-transform duration-700", 14734 "data-fg-c1k244": ":0:/src/app/components/microtransit/MicrotransitApproach.tsx:148:11:7085:179:e:img" 14735 } 14736 ) 14737 ] 14738 } 14739 ) 14740 ] }) }); 14741} 14742function Zp() { 14743 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "d2wv0", _fgB: 1790697590181, _fgD: !0, className: "py-24 bg-slate-900 text-white", "data-fg-d2wv0": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:6:5:160:1834:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2wv1", _fgB: 1790697590181, className: "container mx-auto px-6", "data-fg-d2wv1": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:7:7:218:1761:e:div:ete", children: [ 14744 /* @__PURE__ */ i( 14745 a, 14746 { 14747 _fgT: m.div, 14748 _fgS: "d2wv2", 14749 _fgB: 1790697590181, 14750 initial: { opacity: 0, y: 20 }, 14751 whileInView: { opacity: 1, y: 0 }, 14752 viewport: { once: !0 }, 14753 transition: { duration: 0.6 }, 14754 className: "text-center mb-16", 14755 "data-fg-d2wv2": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:8:9:267:478:e:motion.div:e", 14756 children: /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "d2wv3", _fgB: 1790697590181, className: "text-3xl md:text-5xl font-bold mb-6 font-[Space_Grotesk]", "data-fg-d2wv3": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:15:11:504:219:e:h2:tete", children: [ 14757 "Built For Agencies That Want to",
14758 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "d2wv5", _fgB: 1790697590181, "data-fg-d2wv5": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:16:44:621:6:e:br" }), 14759 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d2wv6", _fgB: 1790697590181, className: "text-[#EFBB0F]", "data-fg-d2wv6": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:17:13:640:67:e:span:t", children: "Do More With What They Have" }) 14760 ] }) 14761 } 14762 ), 14763 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2wv8", _fgB: 1790697590181, className: "grid md:grid-cols-2 gap-8 max-w-4xl mx-auto", "data-fg-d2wv8": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:21:9:755:1211:e:div:etetete", children: [ 14764 /* @__PURE__ */ i( 14765 a, 14766 { 14767 _fgT: P2, 14768 _fgS: "d2wv9", 14769 _fgB: 1790697590181, 14770 icon: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "d2wv10", _fgB: 1790697590181, className: "w-6 h-6 text-slate-900", "data-fg-d2wv10": ":0:node_modules/lucide-react:23:19:858:48:e:Building2::::::DOEu" }), 14771 title: "Transit Agencies Adding Flex Zones", 14772 description: "Adding on-demand service to complement existing fixed routes.", 14773 delay: 0.1, 14774 "data-fg-d2wv9": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:22:11:827:260:e:WhoForItem::::::rlN" 14775 } 14776 ),
14777 /* @__PURE__ */ i( 14778 a, 14779 { 14780 _fgT: P2, 14781 _fgS: "d2wv11", 14782 _fgB: 1790697590181, 14783 icon: /* @__PURE__ */ i(a, { _fgT: fl, _fgS: "d2wv12", _fgB: 1790697590181, className: "w-6 h-6 text-slate-900", "data-fg-d2wv12": ":0:node_modules/lucide-react:30:19:1140:43:e:Home::::::DVHp" }), 14784 title: "Rural and Suburban Operators", 14785 description: "Serving low-density areas where fixed routes aren't cost effective.", 14786 delay: 0.2, 14787 "data-fg-d2wv11": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:29:11:1109:255:e:WhoForItem::::::rlN" 14788 } 14789 ), 14790 /* @__PURE__ */ i( 14791 a, 14792 { 14793 _fgT: P2, 14794 _fgS: "d2wv13", 14795 _fgB: 1790697590181, 14796 icon: /* @__PURE__ */ i(a, { _fgT: ql, _fgS: "d2wv14", _fgB: 1790697590181, className: "w-6 h-6 text-slate-900", "data-fg-d2wv14": ":0:node_modules/lucide-react:37:19:1417:48:e:RefreshCw::::::FaX" }), 14797 title: "Agencies Replacing Low-Ridership Routes", 14798 description: "Converting underperforming fixed routes into on-demand zones.", 14799 delay: 0.3, 14800 "data-fg-d2wv13": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:36:11:1386:265:e:WhoForItem::::::rlN" 14801 } 14802 ),
14803 /* @__PURE__ */ i( 14804 a, 14805 { 14806 _fgT: P2, 14807 _fgS: "d2wv15", 14808 _fgB: 1790697590181, 14809 icon: /* @__PURE__ */ i(a, { _fgT: bl, _fgS: "d2wv16", _fgB: 1790697590181, className: "w-6 h-6 text-slate-900", "data-fg-d2wv16": ":0:node_modules/lucide-react:44:19:1704:44:e:Link2::::::zi4" }), 14810 title: "First-Mile Last-Mile Programs", 14811 description: "Connecting neighborhoods to transit hubs, rail stations, or bus rapid transit corridors.", 14812 delay: 0.4, 14813 "data-fg-d2wv15": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:43:11:1673:278:e:WhoForItem::::::rlN" 14814 } 14815 ) 14816 ] }) 14817 ] }) }); 14818} 14819function P2({ icon: t, title: e, description: s, delay: r }) { 14820 return /* @__PURE__ */ c( 14821 a, 14822 { 14823 _fgT: m.div, 14824 _fgS: "d2wv17", 14825 _fgB: 1790697590181, 14826 _fgD: !0, 14827 initial: { opacity: 0, scale: 0.95 }, 14828 whileInView: { opacity: 1, scale: 1 }, 14829 viewport: { once: !0 }, 14830 transition: { delay: r, duration: 0.5 }, 14831 className: "bg-slate-800/50 border border-slate-700 p-8 rounded-2xl hover:bg-slate-800 transition-colors group flex items-start gap-6", 14832 "data-fg-d2wv17": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:57:5:2155:671:e:motion.div:ete:1", 14833 children: [
14834 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2wv18", _fgB: 1790697590181, className: "p-3 bg-white rounded-xl shadow-lg group-hover:scale-110 transition-transform duration-300", "data-fg-d2wv18": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:64:7:2485:135:e:div:x", children: t }), 14835 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2wv20", _fgB: 1790697590181, "data-fg-d2wv20": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:67:7:2627:181:e:div:ete", children: [ 14836 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "d2wv21", _fgB: 1790697590181, className: "text-xl font-bold text-white mb-2", "data-fg-d2wv21": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:68:9:2641:62:e:h3:x", children: e }), 14837 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "d2wv23", _fgB: 1790697590181, className: "text-slate-400 leading-relaxed", "data-fg-d2wv23": ":0:/src/app/components/microtransit/MicrotransitWhoFor.tsx:69:9:2712:83:e:p:x", children: s }) 14838 ] }) 14839 ] 14840 } 14841 ); 14842} 14843function Wp() { 14844 const { openContactModal: t } = Z(); 14845 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cglg0", _fgB: 1790697590182, _fgD: !0, className: "py-24 bg-white", "data-fg-cglg0": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:9:5:243:1179:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cglg1", _fgB: 1790697590182, className: "container mx-auto px-6 max-w-4xl text-center", "data-fg-cglg1": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:10:7:286:1121:e:div:e", children: /* @__PURE__ */ c( 14846 a, 14847 { 14848 _fgT: m.div, 14849 _fgS: "cglg2", 14850 _fgB: 1790697590182, 14851 initial: { opacity: 0, y: 30 }, 14852 whileInView: { opacity: 1, y: 0 }, 14853 viewport: { once: !0 }, 14854 transition: { duration: 0.8 }, 14855 "data-fg-cglg2": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:11:9:357:1037:e:motion.div:etete", 14856 children: [
14857 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cglg3", _fgB: 1790697590182, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-cglg3": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:17:11:553:158:e:h2:tet", children: [ 14858 "See What Commingled", 14859 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cglg5", _fgB: 1790697590182, "data-fg-cglg5": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:18:32:666:6:e:br" }), 14860 "Microtransit Looks Like" 14861 ] }), 14862 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cglg7", _fgB: 1790697590182, className: "text-xl md:text-2xl text-slate-600 mb-12 max-w-2xl mx-auto leading-relaxed", "data-fg-cglg7": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:21:11:733:190:e:p:t", children: "We'll walk you through a simulation using your actual service area data." }), 14863 /* @__PURE__ */ c( 14864 a, 14865 { 14866 _fgT: "button", 14867 _fgS: "cglg9", 14868 _fgB: 1790697590182, 14869 onClick: t, 14870 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-xl hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-blue-900/50 cursor-pointer", 14871 "data-fg-cglg9": ":0:/src/app/components/microtransit/MicrotransitCTA.tsx:25:11:945:427:e:button:te", 14872 children: [ 14873 "Schedule a Demo",
14874 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cglg11", _fgB: 1790697590182, size: 24, className: "group-hover:translate-x-1 transition-transform", "data-fg-cglg11": ":0:node_modules/lucide-react:30:13:1269:83:e:ArrowRight::::::s5N" }) 14875 ] 14876 } 14877 ) 14878 ] 14879 } 14880 ) }) }); 14881} 14882function $p() { 14883 return /* @__PURE__ */ c(C, { children: [ 14884 /* @__PURE__ */ i(a, { _fgT: Dp, _fgS: "bos91", _fgB: 1790697589422, "data-fg-bos91": ":0:/src/app/pages/MicrotransitPage.tsx:12:7:614:20:e:MicrotransitHero::::::47" }), 14885 /* @__PURE__ */ i(a, { _fgT: zp, _fgS: "bos92", _fgB: 1790697589422, "data-fg-bos92": ":0:/src/app/pages/MicrotransitPage.tsx:13:7:641:23:e:MicrotransitProblem::::::CLh9" }), 14886 /* @__PURE__ */ i(a, { _fgT: ni, _fgS: "bos93", _fgB: 1790697589422, "data-fg-bos93": ":0:/src/app/pages/MicrotransitPage.tsx:14:7:671:23:e:MicrotransitCallout::::::rNL" }), 14887 /* @__PURE__ */ i(a, { _fgT: Hp, _fgS: "bos94", _fgB: 1790697589422, "data-fg-bos94": ":0:/src/app/pages/MicrotransitPage.tsx:15:7:701:24:e:MicrotransitApproach::::::DK0j" }), 14888 /* @__PURE__ */ i(a, { _fgT: Zp, _fgS: "bos95", _fgB: 1790697589422, "data-fg-bos95": ":0:/src/app/pages/MicrotransitPage.tsx:16:7:732:22:e:MicrotransitWhoFor::::::DYq3" }), 14889 /* @__PURE__ */ i(a, { _fgT: Wp, _fgS: "bos96", _fgB: 1790697589422, "data-fg-bos96": ":0:/src/app/pages/MicrotransitPage.tsx:17:7:761:19:e:MicrotransitCTA::::::BRax" }), 14890 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "bos97", _fgB: 1790697589422, "data-fg-bos97": ":0:/src/app/pages/MicrotransitPage.tsx:18:7:787:10:e:Footer::::::B1Vv" }) 14891 ] }); 14892} 14893function qp() { 14894 const { openContactModal: t } = Z(); 14895 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i0", _fgB: 1790697590836, _fgD: !0, className: "relative bg-slate-900 overflow-hidden", "data-fg-ct6i0": ":0:/src/app/components/nemt/NEMTHero.tsx:9:5:250:5257:e:div:xtetxte:1", children: [ 14896 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "ct6i2", _fgB: 1790697590836, className: "relative min-h-[85vh] flex items-center pt-20 pb-20 lg:pt-0 lg:pb-0", "data-fg-ct6i2": ":0:/src/app/components/nemt/NEMTHero.tsx:11:7:344:3913:e:section:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i3", _fgB: 1790697590836, className: "container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-ct6i3": ":0:/src/app/components/nemt/NEMTHero.tsx:12:9:442:3798:e:div:xtetxte", children: [
14897 /* @__PURE__ */ c( 14898 a, 14899 { 14900 _fgT: m.div, 14901 _fgS: "ct6i5", 14902 _fgB: 1790697590836, 14903 initial: { opacity: 0, y: 30 }, 14904 animate: { opacity: 1, y: 0 }, 14905 transition: { duration: 0.8 }, 14906 className: "flex flex-col items-start", 14907 "data-fg-ct6i5": ":0:/src/app/components/nemt/NEMTHero.tsx:14:11:583:1608:e:motion.div:etetete", 14908 children: [ 14909 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i6", _fgB: 1790697590836, className: "inline-block px-4 py-1.5 rounded-full border border-amber-500/50 bg-amber-500/10 text-amber-400 text-xs font-bold tracking-widest uppercase mb-8 shadow-[0_0_15px_rgba(239,187,15,0.3)] backdrop-blur-sm", "data-fg-ct6i6": ":0:/src/app/components/nemt/NEMTHero.tsx:20:13:799:256:e:div:t", children: "NEMT" }), 14910 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "ct6i8", _fgB: 1790697590836, className: "text-5xl md:text-7xl font-bold text-white mb-6 leading-tight font-[Space_Grotesk]", "data-fg-ct6i8": ":0:/src/app/components/nemt/NEMTHero.tsx:24:13:1081:252:e:h1:tete", children: [ 14911 "Non-Emergency Medical Transportation",
14912 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "ct6i10", _fgB: 1790697590836, "data-fg-ct6i10": ":0:/src/app/components/nemt/NEMTHero.tsx:25:51:1230:6:e:br" }), 14913 "That Actually ", 14914 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct6i12", _fgB: 1790697590836, className: "text-[#EFBB0F]", "data-fg-ct6i12": ":0:/src/app/components/nemt/NEMTHero.tsx:26:29:1265:50:e:span:t", children: "Gets Paid." }) 14915 ] }), 14916 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ct6i14", _fgB: 1790697590836, className: "text-lg md:text-xl text-slate-300 mb-10 leading-relaxed max-w-xl", "data-fg-ct6i14": ":0:/src/app/components/nemt/NEMTHero.tsx:29:13:1359:345:e:p:t", children: "NEMT providers lose revenue every month to denied claims, unverifiable trips, and billing errors. Our platform captures the data Medicaid requires at every step of the trip so your claims hold up and your cash flow stays predictable." }), 14917 /* @__PURE__ */ c( 14918 a, 14919 { 14920 _fgT: "button", 14921 _fgS: "ct6i16", 14922 _fgB: 1790697590836, 14923 onClick: t, 14924 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 14925 "data-fg-ct6i16": ":0:/src/app/components/nemt/NEMTHero.tsx:33:13:1730:437:e:button:te", 14926 children: [ 14927 "Request a Demo",
14928 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "ct6i18", _fgB: 1790697590836, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-ct6i18": ":0:node_modules/lucide-react:38:15:2062:83:e:ArrowRight::::::s5N" }) 14929 ] 14930 } 14931 ) 14932 ] 14933 } 14934 ), 14935 /* @__PURE__ */ i( 14936 a, 14937 { 14938 _fgT: m.div, 14939 _fgS: "ct6i20", 14940 _fgB: 1790697590836, 14941 initial: { opacity: 0, scale: 0.95 }, 14942 animate: { opacity: 1, scale: 1 }, 14943 transition: { delay: 0.2, duration: 0.8 }, 14944 className: "relative h-full min-h-[400px] lg:min-h-[600px] flex items-center justify-center", 14945 "data-fg-ct6i20": ":0:/src/app/components/nemt/NEMTHero.tsx:43:11:2238:1987:e:motion.div:e", 14946 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i21", _fgB: 1790697590836, className: "relative w-full h-full rounded-2xl overflow-hidden shadow-2xl border border-slate-700/50 group", "data-fg-ct6i21": ":0:/src/app/components/nemt/NEMTHero.tsx:49:13:2530:1671:e:div:etetxte", children: [
14947 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i22", _fgB: 1790697590836, className: "absolute inset-0 bg-gradient-to-t from-slate-900/80 via-transparent to-transparent z-10", "data-fg-ct6i22": ":0:/src/app/components/nemt/NEMTHero.tsx:50:15:2657:107:e:div" }), 14948 /* @__PURE__ */ i( 14949 a, 14950 { 14951 _fgT: "img", 14952 _fgS: "ct6i23", 14953 _fgB: 1790697590836, 14954 src: "https://images.unsplash.com/photo-1732194439331-08ec61c4df4f?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx3aGVlbGNoYWlyJTIwYWNjZXNzaWJsZSUyMHZhbiUyMG1lZGljYWwlMjB0cmFuc3BvcnRhdGlvbiUyMGRyaXZlciUyMGFzc2lzdGluZyUyMHBhdGllbnR8ZW58MXx8fHwxNzcxMzYxNzk1fDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 14955 alt: "NEMT Driver Assisting Patient", 14956 className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105", 14957 "data-fg-ct6i23": ":0:/src/app/components/nemt/NEMTHero.tsx:51:15:2779:555:e:img" 14958 } 14959 ),
14960 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i25", _fgB: 1790697590836, className: "absolute bottom-6 left-6 right-6 z-20", "data-fg-ct6i25": ":0:/src/app/components/nemt/NEMTHero.tsx:58:15:3425:757:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i26", _fgB: 1790697590836, className: "bg-slate-900/90 backdrop-blur-md p-4 rounded-xl border border-slate-700 shadow-xl flex items-center justify-between", "data-fg-ct6i26": ":0:/src/app/components/nemt/NEMTHero.tsx:59:17:3497:664:e:div:ete", children: [ 14961 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i27", _fgB: 1790697590836, "data-fg-ct6i27": ":0:/src/app/components/nemt/NEMTHero.tsx:60:19:3649:419:e:div:ete", children: [ 14962 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i28", _fgB: 1790697590836, className: "flex items-center gap-2 mb-1", "data-fg-ct6i28": ":0:/src/app/components/nemt/NEMTHero.tsx:61:21:3675:277:e:div:ete", children: [ 14963 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i29", _fgB: 1790697590836, className: "w-2 h-2 rounded-full bg-green-500 animate-pulse", "data-fg-ct6i29": ":0:/src/app/components/nemt/NEMTHero.tsx:62:23:3744:67:e:div" }),
14964 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct6i30", _fgB: 1790697590836, className: "text-white font-bold text-sm uppercase tracking-wide", "data-fg-ct6i30": ":0:/src/app/components/nemt/NEMTHero.tsx:63:23:3834:91:e:span:t", children: "Trip Verified" }) 14965 ] }), 14966 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i32", _fgB: 1790697590836, className: "text-slate-400 text-xs", "data-fg-ct6i32": ":0:/src/app/components/nemt/NEMTHero.tsx:65:21:3973:70:e:div:t", children: "Medicaid ID: #XA-9284-11" }) 14967 ] }), 14968 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ct6i34", _fgB: 1790697590836, className: "text-green-500 w-8 h-8", "data-fg-ct6i34": ":0:node_modules/lucide-react:67:19:4087:51:e:CheckCircle2::::::CELI" }) 14969 ] }) }) 14970 ] }) 14971 } 14972 ) 14973 ] }) }), 14974 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i36", _fgB: 1790697590836, className: "w-full bg-slate-800/50 border-t border-slate-800 py-6", "data-fg-ct6i36": ":0:/src/app/components/nemt/NEMTHero.tsx:76:7:4298:1198:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i37", _fgB: 1790697590836, className: "container mx-auto px-6", "data-fg-ct6i37": ":0:/src/app/components/nemt/NEMTHero.tsx:77:9:4378:1105:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i38", _fgB: 1790697590836, className: "flex flex-col md:flex-row justify-center items-center gap-4 md:gap-12 text-center", "data-fg-ct6i38": ":0:/src/app/components/nemt/NEMTHero.tsx:78:11:4429:1039:e:div:etetetete", children: [
14975 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i39", _fgB: 1790697590836, className: "flex items-center gap-3", "data-fg-ct6i39": ":0:/src/app/components/nemt/NEMTHero.tsx:79:13:4541:227:e:div:ete", children: [ 14976 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ct6i40", _fgB: 1790697590836, size: 18, className: "text-[#EFBB0F]", "data-fg-ct6i40": ":0:node_modules/lucide-react:80:15:4597:53:e:CheckCircle2::::::CELI" }), 14977 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct6i41", _fgB: 1790697590836, className: "text-white font-medium tracking-wide", "data-fg-ct6i41": ":0:/src/app/components/nemt/NEMTHero.tsx:81:15:4665:84:e:span:t", children: "GPS-Verified Trip Logs" }) 14978 ] }), 14979 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i43", _fgB: 1790697590836, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-ct6i43": ":0:/src/app/components/nemt/NEMTHero.tsx:84:13:4794:57:e:div" }), 14980 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i44", _fgB: 1790697590836, className: "flex items-center gap-3", "data-fg-ct6i44": ":0:/src/app/components/nemt/NEMTHero.tsx:86:13:4877:231:e:div:ete", children: [
14981 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ct6i45", _fgB: 1790697590836, size: 18, className: "text-[#EFBB0F]", "data-fg-ct6i45": ":0:node_modules/lucide-react:87:15:4933:53:e:CheckCircle2::::::CELI" }), 14982 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct6i46", _fgB: 1790697590836, className: "text-white font-medium tracking-wide", "data-fg-ct6i46": ":0:/src/app/components/nemt/NEMTHero.tsx:88:15:5001:88:e:span:t", children: "Automated Medicaid Billing" }) 14983 ] }), 14984 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct6i48", _fgB: 1790697590836, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-ct6i48": ":0:/src/app/components/nemt/NEMTHero.tsx:91:13:5134:57:e:div" }), 14985 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct6i49", _fgB: 1790697590836, className: "flex items-center gap-3", "data-fg-ct6i49": ":0:/src/app/components/nemt/NEMTHero.tsx:93:13:5217:234:e:div:ete", children: [ 14986 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ct6i50", _fgB: 1790697590836, size: 18, className: "text-[#EFBB0F]", "data-fg-ct6i50": ":0:node_modules/lucide-react:94:15:5273:53:e:CheckCircle2::::::CELI" }),
14987 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct6i51", _fgB: 1790697590836, className: "text-white font-medium tracking-wide", "data-fg-ct6i51": ":0:/src/app/components/nemt/NEMTHero.tsx:95:15:5341:91:e:span:t", children: "Cross-Provider Trip Brokering" }) 14988 ] }) 14989 ] }) }) }) 14990 ] }); 14991} 14992function Up() { 14993 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cwvf0", _fgB: 1790697590822, _fgD: !0, className: "py-24 bg-white", "data-fg-cwvf0": ":0:/src/app/components/nemt/NEMTChallenge.tsx:6:5:153:2291:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cwvf1", _fgB: 1790697590822, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-start", "data-fg-cwvf1": ":0:/src/app/components/nemt/NEMTChallenge.tsx:7:7:196:2233:e:div:xtetxte", children: [ 14994 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cwvf3", _fgB: 1790697590822, className: "lg:w-3/4", "data-fg-cwvf3": ":0:/src/app/components/nemt/NEMTChallenge.tsx:9:9:314:811:e:div:e", children: /* @__PURE__ */ c( 14995 a, 14996 { 14997 _fgT: m.div, 14998 _fgS: "cwvf4", 14999 _fgB: 1790697590822, 15000 initial: { opacity: 0, x: -30 }, 15001 whileInView: { opacity: 1, x: 0 }, 15002 viewport: { once: !0 }, 15003 transition: { duration: 0.6 }, 15004 "data-fg-cwvf4": ":0:/src/app/components/nemt/NEMTChallenge.tsx:10:11:351:759:e:motion.div:etete", 15005 children: [
15006 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cwvf5", _fgB: 1790697590822, className: "inline-block px-4 py-1.5 rounded-full border border-red-500/20 bg-red-50 text-red-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-cwvf5": ":0:/src/app/components/nemt/NEMTChallenge.tsx:16:13:560:199:e:div:t", children: "THE CHALLENGE" }), 15007 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cwvf7", _fgB: 1790697590822, className: "text-4xl md:text-5xl font-bold text-slate-900 leading-tight mb-8", "data-fg-cwvf7": ":0:/src/app/components/nemt/NEMTChallenge.tsx:20:13:785:221:e:h2:tete", children: [ 15008 "Medicaid doesn't pay", 15009 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cwvf9", _fgB: 1790697590822, "data-fg-cwvf9": ":0:/src/app/components/nemt/NEMTChallenge.tsx:21:35:901:6:e:br" }), 15010 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cwvf10", _fgB: 1790697590822, className: "text-[#EFBB0F]", "data-fg-cwvf10": ":0:/src/app/components/nemt/NEMTChallenge.tsx:22:15:922:66:e:span:t", children: "for trips you can't prove." }) 15011 ] }),
15012 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cwvf12", _fgB: 1790697590822, className: "h-1 w-24 bg-slate-200 rounded-full", "data-fg-cwvf12": ":0:/src/app/components/nemt/NEMTChallenge.tsx:25:13:1032:54:e:div" }) 15013 ] 15014 } 15015 ) }), 15016 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cwvf14", _fgB: 1790697590822, className: "space-y-8", "data-fg-cwvf14": ":0:/src/app/components/nemt/NEMTChallenge.tsx:30:9:1163:1253:e:div:etete", children: [ 15017 /* @__PURE__ */ i( 15018 a, 15019 { 15020 _fgT: M4, 15021 _fgS: "cwvf15", 15022 _fgB: 1790697590822, 15023 icon: /* @__PURE__ */ i(a, { _fgT: sl, _fgS: "cwvf16", _fgB: 1790697590822, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-cwvf16": ":0:node_modules/lucide-react:32:19:1233:44:e:FileX::::::CuYs" }), 15024 title: "Denied Claims Kill Your Margins", 15025 description: "State Medicaid programs require precise pickup and drop-off times, verified rider identity, mileage logs, and driver signatures. Missing even one data point can mean a denied claim on a trip you already completed.", 15026 delay: 0.1, 15027 "data-fg-cwvf15": ":0:/src/app/components/nemt/NEMTChallenge.tsx:31:11:1201:406:e:ProblemCard::::::CIum" 15028 } 15029 ),
15030 /* @__PURE__ */ i( 15031 a, 15032 { 15033 _fgT: M4, 15034 _fgS: "cwvf17", 15035 _fgB: 1790697590822, 15036 icon: /* @__PURE__ */ i(a, { _fgT: Y5, _fgS: "cwvf18", _fgB: 1790697590822, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-cwvf18": ":0:node_modules/lucide-react:39:19:1661:50:e:AlertCircle::::::fAY" }), 15037 title: "Manual Processes Create Gaps", 15038 description: "Paper manifests, hand-written times, and after-the-fact data entry introduce errors at every step. By the time a claim is submitted, the data rarely matches what actually happened.", 15039 delay: 0.2, 15040 "data-fg-cwvf17": ":0:/src/app/components/nemt/NEMTChallenge.tsx:38:11:1629:376:e:ProblemCard::::::CIum" 15041 } 15042 ), 15043 /* @__PURE__ */ i( 15044 a, 15045 { 15046 _fgT: M4, 15047 _fgS: "cwvf19", 15048 _fgB: 1790697590822, 15049 icon: /* @__PURE__ */ i(a, { _fgT: ad, _fgS: "cwvf20", _fgB: 1790697590822, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-cwvf20": ":0:node_modules/lucide-react:46:19:2059:50:e:ShieldAlert::::::DzUv" }), 15050 title: "Fraud Scrutiny Is Increasing", 15051 description: "States are auditing NEMT providers more aggressively. Providers without automated trip verification and GPS-backed records are exposed to clawbacks, penalties, and contract loss.", 15052 delay: 0.3, 15053 "data-fg-cwvf19": ":0:/src/app/components/nemt/NEMTChallenge.tsx:45:11:2027:374:e:ProblemCard::::::CIum" 15054 } 15055 ) 15056 ] }) 15057 ] }) }); 15058} 15059function M4({ icon: t, title: e, description: s, delay: r }) { 15060 return /* @__PURE__ */ c( 15061 a, 15062 { 15063 _fgT: m.div, 15064 _fgS: "cwvf21", 15065 _fgB: 1790697590822, 15066 _fgD: !0, 15067 initial: { opacity: 0, y: 20 }, 15068 whileInView: { opacity: 1, y: 0 }, 15069 viewport: { once: !0 }, 15070 transition: { delay: r, duration: 0.5 }, 15071 className: "bg-slate-50 border-l-4 border-[#EFBB0F] p-8 rounded-r-xl shadow-sm hover:shadow-md transition-shadow group", 15072 "data-fg-cwvf21": ":0:/src/app/components/nemt/NEMTChallenge.tsx:59:5:2606:717:e:motion.div:ete:1", 15073 children: [
15074 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cwvf22", _fgB: 1790697590822, className: "flex items-start gap-4 mb-3", "data-fg-cwvf22": ":0:/src/app/components/nemt/NEMTChallenge.tsx:66:7:2910:296:e:div:ete", children: [ 15075 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cwvf23", _fgB: 1790697590822, className: "p-2 bg-white rounded-lg shadow-sm text-slate-900 group-hover:scale-110 transition-transform duration-300", "data-fg-cwvf23": ":0:/src/app/components/nemt/NEMTChallenge.tsx:67:9:2964:154:e:div:x", children: t }), 15076 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cwvf25", _fgB: 1790697590822, className: "text-xl font-bold text-slate-900 pt-1", "data-fg-cwvf25": ":0:/src/app/components/nemt/NEMTChallenge.tsx:70:9:3127:66:e:h3:x", children: e }) 15077 ] }), 15078 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cwvf27", _fgB: 1790697590822, className: "text-slate-600 leading-relaxed pl-[3.25rem]", "data-fg-cwvf27": ":0:/src/app/components/nemt/NEMTChallenge.tsx:72:7:3213:92:e:p:x", children: s }) 15079 ] 15080 } 15081 ); 15082} 15083const li = globalThis.__GLOBALS__.getAssetURL("83dd1d4de7647d79182a7021d696ae5e95daf730.png"), Gp = globalThis.__GLOBALS__.getAssetURL("d6a1733fc415e2266a48882283b693e5ca8528ce.png"), Jp = globalThis.__GLOBALS__.getAssetURL("e830beeaed508fe29c7ac39aa477629dc557e936.png"); 15084function Kp() { 15085 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "ct3j0", _fgB: 1790697590826, _fgD: !0, className: "py-24 bg-white relative", "data-fg-ct3j0": ":0:/src/app/components/nemt/NEMTHelp.tsx:9:5:434:4488:e:section:ete:1", children: [ 15086 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct3j1", _fgB: 1790697590826, className: "container mx-auto px-6 mb-24 text-center", "data-fg-ct3j1": ":0:/src/app/components/nemt/NEMTHelp.tsx:10:7:486:694:e:div:etete", children: [
15087 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct3j2", _fgB: 1790697590826, className: "inline-block px-4 py-1.5 rounded-full border border-blue-100 bg-blue-50 text-blue-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-ct3j2": ":0:/src/app/components/nemt/NEMTHelp.tsx:11:9:553:189:e:div:t", children: "HOW WE HELP" }), 15088 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "ct3j4", _fgB: 1790697590826, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-ct3j4": ":0:/src/app/components/nemt/NEMTHelp.tsx:15:9:760:168:e:h2:tet", children: [ 15089 "Every Trip Documented.", 15090 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "ct3j6", _fgB: 1790697590826, "data-fg-ct3j6": ":0:/src/app/components/nemt/NEMTHelp.tsx:16:33:874:6:e:br" }), 15091 "Every Claim Defensible." 15092 ] }), 15093 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ct3j8", _fgB: 1790697590826, className: "text-lg md:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed", "data-fg-ct3j8": ":0:/src/app/components/nemt/NEMTHelp.tsx:20:9:946:221:e:p:t", children: "Our platform captures Medicaid-required data automatically from the moment a trip is booked through final billing." }) 15094 ] }), 15095 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct3j10", _fgB: 1790697590826, className: "space-y-0", "data-fg-ct3j10": ":0:/src/app/components/nemt/NEMTHelp.tsx:25:7:1188:3719:e:div:xtetxtetxtetxte", children: [
15096 /* @__PURE__ */ i( 15097 a, 15098 { 15099 _fgT: C2, 15100 _fgS: "ct3j12", 15101 _fgB: 1790697590826, 15102 label: "TRIP VERIFICATION", 15103 title: "Capture Every Data Point Without Extra Work", 15104 points: [ 15105 "GPS-stamped pickup and drop-off times recorded automatically as the driver completes each stop", 15106 "Rider identity confirmed at the door through facial recognition, QR code, or Bluetooth on our in-vehicle IVO tablet", 15107 "Digital signature capture on the driver's device for states that require signed proof of service", 15108 "Mileage logged from actual GPS tracks not estimated or entered manually after the fact" 15109 ], 15110 image: li, 15111 bgColor: "bg-slate-50", 15112 isImageRight: !0, 15113 icon: /* @__PURE__ */ i(a, { _fgT: F3, _fgS: "ct3j13", _fgB: 1790697590826, className: "w-5 h-5 text-white", "data-fg-ct3j13": ":0:node_modules/lucide-react:39:17:2016:46:e:ShieldCheck::::::CqaD" }), 15114 "data-fg-ct3j12": ":0:/src/app/components/nemt/NEMTHelp.tsx:27:9:1303:771:e:HelpRow::::::ClFE" 15115 } 15116 ),
15117 /* @__PURE__ */ i( 15118 a, 15119 { 15120 _fgT: C2, 15121 _fgS: "ct3j15", 15122 _fgB: 1790697590826, 15123 label: "BILLING", 15124 title: "From Trip Record to Clean Claim", 15125 points: [ 15126 "Each trip record carries the rider's Medicaid ID, funding source, and authorization data from booking through billing", 15127 "Automated rate calculation based on your contract terms including base fare, mileage, wait time, and vehicle type", 15128 "Batch invoicing across multiple funding sources with each claim formatted to that state's submission requirements", 15129 "Denied or short-paid claims flagged for review before resubmission so nothing falls through the cracks" 15130 ], 15131 image: Jp, 15132 bgColor: "bg-white", 15133 isImageRight: !1, 15134 icon: /* @__PURE__ */ i(a, { _fgT: Mc, _fgS: "ct3j16", _fgB: 1790697590826, className: "w-5 h-5 text-white", "data-fg-ct3j16": ":0:node_modules/lucide-react:55:17:2882:43:e:Banknote::::::CQ6q" }), 15135 "data-fg-ct3j15": ":0:/src/app/components/nemt/NEMTHelp.tsx:43:9:2148:789:e:HelpRow::::::ClFE" 15136 } 15137 ),
15138 /* @__PURE__ */ i( 15139 a, 15140 { 15141 _fgT: C2, 15142 _fgS: "ct3j18", 15143 _fgB: 1790697590826, 15144 label: "DISPATCH & ROUTING", 15145 title: "Get the Right Vehicle to the Right Appointment on Time", 15146 points: [ 15147 "Automated scheduling from broker trip files imported directly into the system with field mapping and duplicate detection", 15148 "ERSA algorithm builds shared-ride routes that group trips headed in the same direction while keeping each rider on time for their appointment", 15149 "Same-day and will-call trips inserted into active routes without rebuilding the entire manifest", 15150 "Dispatchers see every vehicle on a live map with real-time status and alerts for late pickups" 15151 ], 15152 image: Gp, 15153 bgColor: "bg-slate-50", 15154 isImageRight: !0, 15155 icon: /* @__PURE__ */ i(a, { _fgT: S1, _fgS: "ct3j19", _fgB: 1790697590826, className: "w-5 h-5 text-white", "data-fg-ct3j19": ":0:node_modules/lucide-react:71:17:3802:38:e:Map::::::ELje" }), 15156 "data-fg-ct3j18": ":0:/src/app/components/nemt/NEMTHelp.tsx:59:9:3027:825:e:HelpRow::::::ClFE" 15157 } 15158 ),
15159 /* @__PURE__ */ i( 15160 a, 15161 { 15162 _fgT: C2, 15163 _fgS: "ct3j21", 15164 _fgB: 1790697590826, 15165 label: "RIDER EXPERIENCE", 15166 title: "Keep Riders Informed and Reduce No-Shows", 15167 points: [ 15168 "Automated call-out messages notify riders when their vehicle is arriving so they're ready at the door", 15169 "Where's My Ride app and IVR phone access let riders check trip status, confirm appointments, and cancel without calling dispatch", 15170 "Real-time ETA notifications reduce missed pickups and wasted vehicle time at the curb" 15171 ], 15172 image: "https://images.unsplash.com/photo-1677236097903-4b7565f26602?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxlbGRlcmx5JTIwcGVyc29uJTIwbG9va2luZyUyMGF0JTIwc21hcnRwaG9uZSUyMG1lZGljYWwlMjBhcHB8ZW58MXx8fHwxNzcxMzYxNzk1fDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 15173 bgColor: "bg-white", 15174 isImageRight: !1, 15175 icon: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "ct3j22", _fgB: 1790697590826, className: "w-5 h-5 text-white", "data-fg-ct3j22": ":0:node_modules/lucide-react:86:17:4837:45:e:Smartphone::::::DHxb" }), 15176 "data-fg-ct3j21": ":0:/src/app/components/nemt/NEMTHelp.tsx:75:9:3935:959:e:HelpRow::::::ClFE" 15177 } 15178 ) 15179 ] }) 15180 ] }); 15181} 15182function C2({ label: t, title: e, points: s, image: r, bgColor: n, isImageRight: o, icon: L }) { 15183 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct3j23", _fgB: 1790697590826, _fgD: !0, className: `py-20 ${n}`, "data-fg-ct3j23": ":0:/src/app/components/nemt/NEMTHelp.tsx:105:5:5209:2253:e:div:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct3j24", _fgB: 1790697590826, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-center", "data-fg-ct3j24": ":0:/src/app/components/nemt/NEMTHelp.tsx:106:7:5252:2199:e:div:xtetxte", children: [ 15184 /* @__PURE__ */ c( 15185 a, 15186 { 15187 _fgT: m.div, 15188 _fgS: "ct3j26", 15189 _fgB: 1790697590826, 15190 initial: { opacity: 0, x: o ? -30 : 30 }, 15191 whileInView: { opacity: 1, x: 0 }, 15192 viewport: { once: !0, margin: "-100px" }, 15193 transition: { duration: 0.6 }, 15194 className: `${o ? "lg:order-1" : "lg:order-2"}`, 15195 "data-fg-ct3j26": ":0:/src/app/components/nemt/NEMTHelp.tsx:108:9:5370:1335:e:motion.div:etete", 15196 children: [
15197 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ct3j27", _fgB: 1790697590826, className: "flex items-center gap-3 mb-6", "data-fg-ct3j27": ":0:/src/app/components/nemt/NEMTHelp.tsx:115:11:5676:342:e:div:ete", children: [ 15198 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct3j28", _fgB: 1790697590826, className: "flex items-center justify-center w-8 h-8 rounded-full bg-[#EFBB0F] shadow-md", "data-fg-ct3j28": ":0:/src/app/components/nemt/NEMTHelp.tsx:116:13:5735:134:e:div:x", children: L }), 15199 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ct3j30", _fgB: 1790697590826, className: "text-[#EFBB0F] font-bold tracking-widest text-sm uppercase", "data-fg-ct3j30": ":0:/src/app/components/nemt/NEMTHelp.tsx:119:13:5882:119:e:span:x", children: t }) 15200 ] }), 15201 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "ct3j32", _fgB: 1790697590826, className: "text-3xl md:text-4xl font-bold text-slate-900 mb-8 leading-tight", "data-fg-ct3j32": ":0:/src/app/components/nemt/NEMTHelp.tsx:124:11:6040:117:e:h3:x", children: e }),
15202 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "ct3j34", _fgB: 1790697590826, className: "space-y-6", "data-fg-ct3j34": ":0:/src/app/components/nemt/NEMTHelp.tsx:128:11:6179:504:e:ul:x", children: s.map((d, l) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "ct3j36", _fgB: 1790697590826, className: "flex items-start gap-4 group", "data-fg-ct3j36": ":0:/src/app/components/nemt/NEMTHelp.tsx:130:15:6264:387:e:li:ete", children: [ 15203 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct3j37", _fgB: 1790697590826, className: "mt-1.5 min-w-[20px] text-[#EFBB0F]", "data-fg-ct3j37": ":0:/src/app/components/nemt/NEMTHelp.tsx:131:17:6338:175:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: G, _fgS: "ct3j38", _fgB: 1790697590826, size: 20, className: "group-hover:scale-110 transition-transform", "data-fg-ct3j38": ":0:node_modules/lucide-react:132:19:6409:81:e:CheckCircle2::::::CELI" }) }), 15204 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ct3j39", _fgB: 1790697590826, className: "text-slate-600 leading-relaxed text-lg", "data-fg-ct3j39": ":0:/src/app/components/nemt/NEMTHelp.tsx:134:17:6530:101:e:p:x", children: d }) 15205 ] }, l)) }) 15206 ] 15207 } 15208 ), 15209 /* @__PURE__ */ c( 15210 a, 15211 { 15212 _fgT: m.div, 15213 _fgS: "ct3j42", 15214 _fgB: 1790697590826, 15215 initial: { opacity: 0, scale: 0.95 }, 15216 whileInView: { opacity: 1, scale: 1 }, 15217 viewport: { once: !0, margin: "-100px" }, 15218 transition: { duration: 0.6, delay: 0.2 }, 15219 className: `relative h-[400px] md:h-[500px] rounded-2xl overflow-hidden shadow-2xl ${o ? "lg:order-2" : "lg:order-1"}`, 15220 "data-fg-ct3j42": ":0:/src/app/components/nemt/NEMTHelp.tsx:143:9:6737:701:e:motion.div:ete", 15221 children: [
15222 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ct3j43", _fgB: 1790697590826, className: "absolute inset-0 bg-gradient-to-tr from-slate-900/40 to-transparent z-10 mix-blend-multiply", "data-fg-ct3j43": ":0:/src/app/components/nemt/NEMTHelp.tsx:150:11:7115:111:e:div" }), 15223 /* @__PURE__ */ i( 15224 a, 15225 { 15226 _fgT: "img", 15227 _fgS: "ct3j44", 15228 _fgB: 1790697590826, 15229 src: r, 15230 alt: e, 15231 className: "w-full h-full object-cover transform hover:scale-105 transition-transform duration-700", 15232 "data-fg-ct3j44": ":0:/src/app/components/nemt/NEMTHelp.tsx:151:11:7237:179:e:img" 15233 } 15234 ) 15235 ] 15236 } 15237 ) 15238 ] }) }); 15239} 15240function Yp() { 15241 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dijl0", _fgB: 1790697590830, _fgD: !0, className: "py-24 bg-slate-900 text-white", "data-fg-dijl0": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:6:5:158:1899:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dijl1", _fgB: 1790697590830, className: "container mx-auto px-6", "data-fg-dijl1": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:7:7:216:1826:e:div:ete", children: [ 15242 /* @__PURE__ */ i( 15243 a, 15244 { 15245 _fgT: m.div, 15246 _fgS: "dijl2", 15247 _fgB: 1790697590830, 15248 initial: { opacity: 0, y: 20 }, 15249 whileInView: { opacity: 1, y: 0 }, 15250 viewport: { once: !0 }, 15251 transition: { duration: 0.6 }, 15252 className: "text-center mb-16", 15253 "data-fg-dijl2": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:8:9:265:474:e:motion.div:e", 15254 children: /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "dijl3", _fgB: 1790697590830, className: "text-3xl md:text-5xl font-bold mb-6 font-[Space_Grotesk]", "data-fg-dijl3": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:15:11:502:215:e:h2:tete", children: [ 15255 "Built for NEMT Providers Who Can't",
15256 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "dijl5", _fgB: 1790697590830, "data-fg-dijl5": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:16:47:622:6:e:br" }), 15257 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dijl6", _fgB: 1790697590830, className: "text-[#EFBB0F]", "data-fg-dijl6": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:17:13:641:60:e:span:t", children: "Afford Denied Claims" }) 15258 ] }) 15259 } 15260 ), 15261 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dijl8", _fgB: 1790697590830, className: "grid md:grid-cols-2 gap-8 max-w-4xl mx-auto", "data-fg-dijl8": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:21:9:749:1280:e:div:etetete", children: [ 15262 /* @__PURE__ */ i( 15263 a, 15264 { 15265 _fgT: F2, 15266 _fgS: "dijl9", 15267 _fgB: 1790697590830, 15268 icon: /* @__PURE__ */ i(a, { _fgT: dd, _fgS: "dijl10", _fgB: 1790697590830, className: "w-6 h-6 text-slate-900", "data-fg-dijl10": ":0:node_modules/lucide-react:23:19:852:49:e:PlusSquare::::::CSQ3" }), 15269 title: "Medicaid Transportation Providers", 15270 description: "Running trips under state Medicaid contracts with strict documentation requirements.", 15271 delay: 0.1, 15272 "data-fg-dijl9": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:22:11:821:283:e:WhoForItem::::::Buxh" 15273 } 15274 ),
15275 /* @__PURE__ */ i( 15276 a, 15277 { 15278 _fgT: F2, 15279 _fgS: "dijl11", 15280 _fgB: 1790697590830, 15281 icon: /* @__PURE__ */ i(a, { _fgT: si, _fgS: "dijl12", _fgB: 1790697590830, className: "w-6 h-6 text-slate-900", "data-fg-dijl12": ":0:node_modules/lucide-react:30:19:1157:44:e:Truck::::::Dl9l" }), 15282 title: "Multi-Vehicle NEMT Fleets", 15283 description: "Managing 10 to 500+ vehicles across multiple counties or service areas.", 15284 delay: 0.2, 15285 "data-fg-dijl11": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:29:11:1126:257:e:WhoForItem::::::Buxh" 15286 } 15287 ), 15288 /* @__PURE__ */ i( 15289 a, 15290 { 15291 _fgT: F2, 15292 _fgS: "dijl13", 15293 _fgB: 1790697590830, 15294 icon: /* @__PURE__ */ i(a, { _fgT: J7, _fgS: "dijl14", _fgB: 1790697590830, className: "w-6 h-6 text-slate-900", "data-fg-dijl14": ":0:node_modules/lucide-react:37:19:1436:48:e:Handshake::::::B5t" }), 15295 title: "Broker Subcontractors", 15296 description: "Receiving trip assignments from transportation brokers and needing clean data for reimbursement.", 15297 delay: 0.3, 15298 "data-fg-dijl13": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:36:11:1405:282:e:WhoForItem::::::Buxh" 15299 } 15300 ),
15301 /* @__PURE__ */ i( 15302 a, 15303 { 15304 _fgT: F2, 15305 _fgS: "dijl15", 15306 _fgB: 1790697590830, 15307 icon: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "dijl16", _fgB: 1790697590830, className: "w-6 h-6 text-slate-900", "data-fg-dijl16": ":0:node_modules/lucide-react:44:19:1740:48:e:Building2::::::DOEu" }), 15308 title: "Health System Transportation Programs", 15309 description: "Hospitals and health networks operating their own patient transportation to reduce missed appointments.", 15310 delay: 0.4, 15311 "data-fg-dijl15": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:43:11:1709:305:e:WhoForItem::::::Buxh" 15312 } 15313 ) 15314 ] }) 15315 ] }) }); 15316} 15317function F2({ icon: t, title: e, description: s, delay: r }) { 15318 return /* @__PURE__ */ c( 15319 a, 15320 { 15321 _fgT: m.div, 15322 _fgS: "dijl17", 15323 _fgB: 1790697590830, 15324 _fgD: !0, 15325 initial: { opacity: 0, scale: 0.95 }, 15326 whileInView: { opacity: 1, scale: 1 }, 15327 viewport: { once: !0 }, 15328 transition: { delay: r, duration: 0.5 }, 15329 className: "bg-slate-800/50 border border-slate-700 p-8 rounded-2xl hover:bg-slate-800 transition-colors group flex items-start gap-6", 15330 "data-fg-dijl17": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:57:5:2218:671:e:motion.div:ete:1", 15331 children: [
15332 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dijl18", _fgB: 1790697590830, className: "p-3 bg-white rounded-xl shadow-lg group-hover:scale-110 transition-transform duration-300", "data-fg-dijl18": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:64:7:2548:135:e:div:x", children: t }), 15333 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dijl20", _fgB: 1790697590830, "data-fg-dijl20": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:67:7:2690:181:e:div:ete", children: [ 15334 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dijl21", _fgB: 1790697590830, className: "text-xl font-bold text-white mb-2", "data-fg-dijl21": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:68:9:2704:62:e:h3:x", children: e }), 15335 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dijl23", _fgB: 1790697590830, className: "text-slate-400 leading-relaxed", "data-fg-dijl23": ":0:/src/app/components/nemt/NEMTWhoFor.tsx:69:9:2775:83:e:p:x", children: s }) 15336 ] }) 15337 ] 15338 } 15339 ); 15340} 15341function Xp() { 15342 const { openContactModal: t } = Z(); 15343 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "uce0", _fgB: 1790697590832, _fgD: !0, className: "py-24 bg-white", "data-fg-uce0": ":0:/src/app/components/nemt/NEMTCTA.tsx:9:5:235:1185:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "uce1", _fgB: 1790697590832, className: "container mx-auto px-6 max-w-4xl text-center", "data-fg-uce1": ":0:/src/app/components/nemt/NEMTCTA.tsx:10:7:278:1127:e:div:e", children: /* @__PURE__ */ c( 15344 a, 15345 { 15346 _fgT: m.div, 15347 _fgS: "uce2", 15348 _fgB: 1790697590832, 15349 initial: { opacity: 0, y: 30 }, 15350 whileInView: { opacity: 1, y: 0 }, 15351 viewport: { once: !0 }, 15352 transition: { duration: 0.8 }, 15353 "data-fg-uce2": ":0:/src/app/components/nemt/NEMTCTA.tsx:11:9:349:1043:e:motion.div:etete", 15354 children: [
15355 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "uce3", _fgB: 1790697590832, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-uce3": ":0:/src/app/components/nemt/NEMTCTA.tsx:17:11:545:146:e:h2:tet", children: [ 15356 "Stop Losing Revenue", 15357 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "uce5", _fgB: 1790697590832, "data-fg-uce5": ":0:/src/app/components/nemt/NEMTCTA.tsx:18:32:658:6:e:br" }), 15358 "to Bad Data" 15359 ] }), 15360 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "uce7", _fgB: 1790697590832, className: "text-xl md:text-2xl text-slate-600 mb-12 max-w-2xl mx-auto leading-relaxed", "data-fg-uce7": ":0:/src/app/components/nemt/NEMTCTA.tsx:21:11:713:209:e:p:t", children: "We'll show you how our platform captures every data point Medicaid requires, automatically." }), 15361 /* @__PURE__ */ c( 15362 a, 15363 { 15364 _fgT: "button", 15365 _fgS: "uce9", 15366 _fgB: 1790697590832, 15367 onClick: t, 15368 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-xl hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-blue-900/50 cursor-pointer", 15369 "data-fg-uce9": ":0:/src/app/components/nemt/NEMTCTA.tsx:25:11:944:426:e:button:te", 15370 children: [ 15371 "Request a Demo",
15372 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "uce11", _fgB: 1790697590832, size: 24, className: "group-hover:translate-x-1 transition-transform", "data-fg-uce11": ":0:node_modules/lucide-react:30:13:1267:83:e:ArrowRight::::::s5N" }) 15373 ] 15374 } 15375 ) 15376 ] 15377 } 15378 ) }) }); 15379} 15380function Qp() { 15381 return /* @__PURE__ */ c(C, { children: [ 15382 /* @__PURE__ */ i(a, { _fgT: qp, _fgS: "dmvy1", _fgB: 1790697589423, "data-fg-dmvy1": ":0:/src/app/pages/NEMTPage.tsx:11:7:396:12:e:NEMTHero::::::DaWW" }), 15383 /* @__PURE__ */ i(a, { _fgT: Up, _fgS: "dmvy2", _fgB: 1790697589423, "data-fg-dmvy2": ":0:/src/app/pages/NEMTPage.tsx:12:7:415:17:e:NEMTChallenge::::::BWpS" }), 15384 /* @__PURE__ */ i(a, { _fgT: Kp, _fgS: "dmvy3", _fgB: 1790697589423, "data-fg-dmvy3": ":0:/src/app/pages/NEMTPage.tsx:13:7:439:12:e:NEMTHelp::::::X5w" }), 15385 /* @__PURE__ */ i(a, { _fgT: Yp, _fgS: "dmvy4", _fgB: 1790697589423, "data-fg-dmvy4": ":0:/src/app/pages/NEMTPage.tsx:14:7:458:14:e:NEMTWhoFor::::::CcpM" }), 15386 /* @__PURE__ */ i(a, { _fgT: Xp, _fgS: "dmvy5", _fgB: 1790697589423, "data-fg-dmvy5": ":0:/src/app/pages/NEMTPage.tsx:15:7:479:11:e:NEMTCTA::::::8EC" }), 15387 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "dmvy6", _fgB: 1790697589423, "data-fg-dmvy6": ":0:/src/app/pages/NEMTPage.tsx:16:7:497:10:e:Footer::::::B1Vv" }) 15388 ] }); 15389} 15390function eM() { 15391 const { openContactModal: t } = Z(); 15392 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx0", _fgB: 1790697590793, _fgD: !0, className: "relative bg-slate-900 overflow-hidden", "data-fg-cagx0": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:9:5:256:4434:e:div:xtetxte:1", children: [ 15393 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cagx2", _fgB: 1790697590793, className: "relative min-h-[85vh] flex items-center pt-20 pb-20 lg:pt-0 lg:pb-0", "data-fg-cagx2": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:11:7:350:3095:e:section:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx3", _fgB: 1790697590793, className: "container mx-auto px-6 relative z-10 grid lg:grid-cols-2 gap-12 items-center", "data-fg-cagx3": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:12:9:448:2980:e:div:xtetxte", children: [
15394 /* @__PURE__ */ c( 15395 a, 15396 { 15397 _fgT: m.div, 15398 _fgS: "cagx5", 15399 _fgB: 1790697590793, 15400 initial: { opacity: 0, y: 30 }, 15401 animate: { opacity: 1, y: 0 }, 15402 transition: { duration: 0.8 }, 15403 className: "flex flex-col items-start", 15404 "data-fg-cagx5": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:14:11:589:1683:e:motion.div:etetete", 15405 children: [ 15406 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx6", _fgB: 1790697590793, className: "inline-block px-4 py-1.5 rounded-full border border-amber-500/50 bg-amber-500/10 text-amber-400 text-xs font-bold tracking-widest uppercase mb-8 shadow-[0_0_15px_rgba(239,187,15,0.3)] backdrop-blur-sm", "data-fg-cagx6": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:20:13:805:272:e:div:t", children: "PRIVATE TNC'S & TAXI" }), 15407 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "cagx8", _fgB: 1790697590793, className: "text-5xl md:text-7xl font-bold text-white mb-6 leading-tight font-[Space_Grotesk]", "data-fg-cagx8": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:24:13:1103:232:e:h1:tete", children: [ 15408 "Run Multiple Fleets.",
15409 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cagx10", _fgB: 1790697590793, "data-fg-cagx10": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:25:35:1236:6:e:br" }), 15410 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cagx11", _fgB: 1790697590793, className: "text-[#EFBB0F]", "data-fg-cagx11": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:26:15:1257:60:e:span:t", children: "One Dispatch Center." }) 15411 ] }), 15412 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cagx13", _fgB: 1790697590793, className: "text-lg md:text-xl text-slate-300 mb-10 leading-relaxed max-w-xl", "data-fg-cagx13": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:29:13:1361:424:e:p:t", children: "Private TNCs (Transportation Network Companies) and taxi dispatch operations manage trips across companies they don't always own, with drivers they don't always control, for accounts that demand accuracy. Our platform lets you dispatch, settle, and bill across every fleet and every company from a single system." }),
15413 /* @__PURE__ */ c( 15414 a, 15415 { 15416 _fgT: "button", 15417 _fgS: "cagx15", 15418 _fgB: 1790697590793, 15419 onClick: t, 15420 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-lg hover:shadow-blue-900/50 cursor-pointer", 15421 "data-fg-cagx15": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:33:13:1811:437:e:button:te", 15422 children: [ 15423 "Request a Demo", 15424 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cagx17", _fgB: 1790697590793, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-cagx17": ":0:node_modules/lucide-react:38:15:2143:83:e:ArrowRight::::::s5N" }) 15425 ] 15426 } 15427 ) 15428 ] 15429 } 15430 ), 15431 /* @__PURE__ */ i( 15432 a, 15433 { 15434 _fgT: m.div, 15435 _fgS: "cagx19", 15436 _fgB: 1790697590793, 15437 initial: { opacity: 0, scale: 0.95 }, 15438 animate: { opacity: 1, scale: 1 }, 15439 transition: { delay: 0.2, duration: 0.8 }, 15440 className: "relative h-full min-h-[400px] lg:min-h-[600px] flex items-center justify-center", 15441 "data-fg-cagx19": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:43:11:2319:1094:e:motion.div:e", 15442 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx20", _fgB: 1790697590793, className: "relative w-full h-full rounded-2xl overflow-hidden shadow-2xl border border-slate-700/50 group", "data-fg-cagx20": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:49:13:2611:778:e:div:ete", children: [
15443 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx21", _fgB: 1790697590793, className: "absolute inset-0 bg-gradient-to-t from-slate-900/80 via-transparent to-transparent z-10", "data-fg-cagx21": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:50:15:2738:107:e:div" }), 15444 /* @__PURE__ */ i( 15445 a, 15446 { 15447 _fgT: "img", 15448 _fgS: "cagx22", 15449 _fgB: 1790697590793, 15450 src: "https://images.unsplash.com/photo-1762216453994-e0f457d840d5?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx5ZWxsb3clMjB0YXhpJTIwY2FiJTIwdXJiYW4lMjBjaXR5JTIwc3RyZWV0JTIwYnVzeXxlbnwxfHx8fDE3NzEzNjI2NTl8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 15451 alt: "Yellow Taxi Cab Urban City Street", 15452 className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105", 15453 "data-fg-cagx22": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:51:15:2860:510:e:img" 15454 } 15455 ) 15456 ] }) 15457 } 15458 ) 15459 ] }) }), 15460 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx24", _fgB: 1790697590793, className: "w-full bg-slate-800/50 border-t border-slate-800 py-6", "data-fg-cagx24": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:62:7:3486:1193:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx25", _fgB: 1790697590793, className: "container mx-auto px-6", "data-fg-cagx25": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:63:9:3566:1100:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx26", _fgB: 1790697590793, className: "flex flex-col md:flex-row justify-center items-center gap-4 md:gap-12 text-center", "data-fg-cagx26": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:64:11:3617:1034:e:div:etetetete", children: [
15461 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx27", _fgB: 1790697590793, className: "flex items-center gap-3", "data-fg-cagx27": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:65:13:3729:227:e:div:ete", children: [ 15462 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cagx28", _fgB: 1790697590793, size: 18, className: "text-[#EFBB0F]", "data-fg-cagx28": ":0:node_modules/lucide-react:66:15:3785:53:e:CheckCircle2::::::CELI" }), 15463 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cagx29", _fgB: 1790697590793, className: "text-white font-medium tracking-wide", "data-fg-cagx29": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:67:15:3853:84:e:span:t", children: "Multi-Company Dispatch" }) 15464 ] }), 15465 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx31", _fgB: 1790697590793, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-cagx31": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:70:13:3982:57:e:div" }), 15466 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx32", _fgB: 1790697590793, className: "flex items-center gap-3", "data-fg-cagx32": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:72:13:4065:232:e:div:ete", children: [
15467 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cagx33", _fgB: 1790697590793, size: 18, className: "text-[#EFBB0F]", "data-fg-cagx33": ":0:node_modules/lucide-react:73:15:4121:53:e:CheckCircle2::::::CELI" }), 15468 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cagx34", _fgB: 1790697590793, className: "text-white font-medium tracking-wide", "data-fg-cagx34": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:74:15:4189:89:e:span:t", children: "Driver Lease and Settlement" }) 15469 ] }), 15470 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cagx36", _fgB: 1790697590793, className: "hidden md:block w-px h-6 bg-slate-700", "data-fg-cagx36": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:77:13:4323:57:e:div" }), 15471 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cagx37", _fgB: 1790697590793, className: "flex items-center gap-3", "data-fg-cagx37": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:79:13:4406:228:e:div:ete", children: [ 15472 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cagx38", _fgB: 1790697590793, size: 18, className: "text-[#EFBB0F]", "data-fg-cagx38": ":0:node_modules/lucide-react:80:15:4462:53:e:CheckCircle2::::::CELI" }),
15473 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cagx39", _fgB: 1790697590793, className: "text-white font-medium tracking-wide", "data-fg-cagx39": ":0:/src/app/components/taxi-broker/TaxiBrokerHero.tsx:81:15:4530:85:e:span:t", children: "Centralized Call Center" }) 15474 ] }) 15475 ] }) }) }) 15476 ] }); 15477} 15478function tM() { 15479 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "ceei0", _fgB: 1790697590809, _fgD: !0, className: "py-24 bg-white", "data-fg-ceei0": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:6:5:153:2297:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ceei1", _fgB: 1790697590809, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-start", "data-fg-ceei1": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:7:7:196:2239:e:div:xtetxte", children: [ 15480 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ceei3", _fgB: 1790697590809, className: "lg:w-3/4", "data-fg-ceei3": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:9:9:314:818:e:div:e", children: /* @__PURE__ */ c( 15481 a, 15482 { 15483 _fgT: m.div, 15484 _fgS: "ceei4", 15485 _fgB: 1790697590809, 15486 initial: { opacity: 0, x: -30 }, 15487 whileInView: { opacity: 1, x: 0 }, 15488 viewport: { once: !0 }, 15489 transition: { duration: 0.6 }, 15490 "data-fg-ceei4": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:10:11:351:766:e:motion.div:etete", 15491 children: [
15492 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ceei5", _fgB: 1790697590809, className: "inline-block px-4 py-1.5 rounded-full border border-red-500/20 bg-red-50 text-red-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-ceei5": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:16:13:560:199:e:div:t", children: "THE CHALLENGE" }), 15493 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "ceei7", _fgB: 1790697590809, className: "text-4xl md:text-5xl font-bold text-slate-900 leading-tight mb-8", "data-fg-ceei7": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:20:13:785:228:e:h2:tete", children: [ 15494 "More companies, more drivers,", 15495 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "ceei9", _fgB: 1790697590809, "data-fg-ceei9": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:21:44:910:6:e:br" }), 15496 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ceei10", _fgB: 1790697590809, className: "text-[#EFBB0F]", "data-fg-ceei10": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:22:15:931:64:e:span:t", children: "more ways to lose money." }) 15497 ] }),
15498 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ceei12", _fgB: 1790697590809, className: "h-1 w-24 bg-slate-200 rounded-full", "data-fg-ceei12": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:25:13:1039:54:e:div" }) 15499 ] 15500 } 15501 ) }), 15502 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ceei14", _fgB: 1790697590809, className: "space-y-8", "data-fg-ceei14": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:30:9:1170:1252:e:div:etete", children: [ 15503 /* @__PURE__ */ i( 15504 a, 15505 { 15506 _fgT: u4, 15507 _fgS: "ceei15", 15508 _fgB: 1790697590809, 15509 icon: /* @__PURE__ */ i(a, { _fgT: Kl, _fgS: "ceei16", _fgB: 1790697590809, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-ceei16": ":0:node_modules/lucide-react:32:19:1240:44:e:Scale::::::B8sC" }), 15510 title: "Every Company Has Its Own Rules", 15511 description: "Different dispatch policies, different rate structures, different branding. Running multiple companies means your call center, dispatch, and billing all have to switch contexts constantly.", 15512 delay: 0.1, 15513 "data-fg-ceei15": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:31:11:1208:381:e:ProblemCard::::::CYGl" 15514 } 15515 ),
15516 /* @__PURE__ */ i( 15517 a, 15518 { 15519 _fgT: u4, 15520 _fgS: "ceei17", 15521 _fgB: 1790697590809, 15522 icon: /* @__PURE__ */ i(a, { _fgT: h1, _fgS: "ceei18", _fgB: 1790697590809, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-ceei18": ":0:node_modules/lucide-react:39:19:1643:44:e:Users::::::DV8M" }), 15523 title: "Driver Settlements Are a Mess", 15524 description: "Lease calculations, credit card reconciliation, voucher tracking, cash handling, special charges, and deposits. One mistake per driver per day adds up to thousands in lost revenue per month.", 15525 delay: 0.2, 15526 "data-fg-ceei17": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:38:11:1611:381:e:ProblemCard::::::CYGl" 15527 } 15528 ), 15529 /* @__PURE__ */ i( 15530 a, 15531 { 15532 _fgT: u4, 15533 _fgS: "ceei19", 15534 _fgB: 1790697590809, 15535 icon: /* @__PURE__ */ i(a, { _fgT: tl, _fgS: "ceei20", _fgB: 1790697590809, className: "w-6 h-6 text-[#EFBB0F]", "data-fg-ceei20": ":0:node_modules/lucide-react:46:19:2046:50:e:FileWarning::::::BMYQ" }), 15536 title: "Account Billing Gets Complicated Fast", 15537 description: "Corporate accounts, hotel contracts, government vouchers, and Medicaid trips all have different rates, different terms, and different reporting requirements. Manual tracking doesn't scale.", 15538 delay: 0.3, 15539 "data-fg-ceei19": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:45:11:2014:393:e:ProblemCard::::::CYGl" 15540 } 15541 ) 15542 ] }) 15543 ] }) }); 15544} 15545function u4({ icon: t, title: e, description: s, delay: r }) { 15546 return /* @__PURE__ */ c( 15547 a, 15548 { 15549 _fgT: m.div, 15550 _fgS: "ceei21", 15551 _fgB: 1790697590809, 15552 _fgD: !0, 15553 initial: { opacity: 0, y: 20 }, 15554 whileInView: { opacity: 1, y: 0 }, 15555 viewport: { once: !0 }, 15556 transition: { delay: r, duration: 0.5 }, 15557 className: "bg-slate-50 border-l-4 border-[#EFBB0F] p-8 rounded-r-xl shadow-sm hover:shadow-md transition-shadow group", 15558 "data-fg-ceei21": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:59:5:2612:717:e:motion.div:ete:1", 15559 children: [
15560 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ceei22", _fgB: 1790697590809, className: "flex items-start gap-4 mb-3", "data-fg-ceei22": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:66:7:2916:296:e:div:ete", children: [ 15561 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ceei23", _fgB: 1790697590809, className: "p-2 bg-white rounded-lg shadow-sm text-slate-900 group-hover:scale-110 transition-transform duration-300", "data-fg-ceei23": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:67:9:2970:154:e:div:x", children: t }), 15562 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "ceei25", _fgB: 1790697590809, className: "text-xl font-bold text-slate-900 pt-1", "data-fg-ceei25": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:70:9:3133:66:e:h3:x", children: e }) 15563 ] }), 15564 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ceei27", _fgB: 1790697590809, className: "text-slate-600 leading-relaxed pl-[3.25rem]", "data-fg-ceei27": ":0:/src/app/components/taxi-broker/TaxiBrokerChallenge.tsx:72:7:3219:92:e:p:x", children: s }) 15565 ] 15566 } 15567 ); 15568} 15569const aM = globalThis.__GLOBALS__.getAssetURL("101a0188f57513631c229bd7482fde50c37b2580.png"), sM = globalThis.__GLOBALS__.getAssetURL("6b14aaef27dcdd5316b89a7e02b901162b6f3bb4.png"), iM = globalThis.__GLOBALS__.getAssetURL("48a59ea45704bf68f457ac3e3be44bb5d6be448c.png"); 15570function rM() { 15571 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cady0", _fgB: 1790697590798, _fgD: !0, className: "py-24 bg-white relative", "data-fg-cady0": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:9:5:425:4562:e:section:ete:1", children: [ 15572 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cady1", _fgB: 1790697590798, className: "container mx-auto px-6 mb-24 text-center", "data-fg-cady1": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:10:7:477:671:e:div:etete", children: [
15573 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cady2", _fgB: 1790697590798, className: "inline-block px-4 py-1.5 rounded-full border border-blue-100 bg-blue-50 text-blue-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-cady2": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:11:9:544:189:e:div:t", children: "HOW WE HELP" }), 15574 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cady4", _fgB: 1790697590798, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-cady4": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:15:9:751:150:e:h2:tet", children: [ 15575 "One System for Every", 15576 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cady6", _fgB: 1790697590798, "data-fg-cady6": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:16:31:863:6:e:br" }), 15577 "Company You Manage" 15578 ] }), 15579 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cady8", _fgB: 1790697590798, className: "text-lg md:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed", "data-fg-cady8": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:19:9:919:216:e:p:t", children: "Our platform was built from day one for multi-company taxi dispatch operations. Not bolted on after the fact." }) 15580 ] }), 15581 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cady10", _fgB: 1790697590798, className: "space-y-0", "data-fg-cady10": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:24:7:1156:3816:e:div:xtetxtetxtetxte", children: [
15582 /* @__PURE__ */ i( 15583 a, 15584 { 15585 _fgT: E2, 15586 _fgS: "cady12", 15587 _fgB: 1790697590798, 15588 label: "MULTI-COMPANY DISPATCH", 15589 title: "Dispatch Across Fleets Without Switching Systems", 15590 points: [ 15591 "One call center handles calls for every company with branded screens that auto-switch based on the number the customer dialed", 15592 "Each company keeps its own dispatch policies including zone rules, stand rank, bidding, and direct dispatch preferences", 15593 "Trips can be brokered between affiliated companies so if one fleet is at capacity, another can pick up the work automatically" 15594 ], 15595 image: "https://images.unsplash.com/photo-1766066014237-00645c74e9c6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjYWxsJTIwY2VudGVyJTIwYWdlbnQlMjB3aXRoJTIwaGVhZHNldCUyMG11bHRpcGxlJTIwc2NyZWVuc3xlbnwxfHx8fDE3NzEzNjI2NTl8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 15596 bgColor: "bg-slate-50", 15597 isImageRight: !0, 15598 icon: /* @__PURE__ */ i(a, { _fgT: P3, _fgS: "cady13", _fgB: 1790697590798, className: "w-5 h-5 text-white", "data-fg-cady13": ":0:node_modules/lucide-react:37:17:2248:45:e:LayoutGrid::::::DG20" }), 15599 "data-fg-cady12": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:26:9:1276:1029:e:HelpRow::::::BFPh" 15600 } 15601 ),
15602 /* @__PURE__ */ i( 15603 a, 15604 { 15605 _fgT: E2, 15606 _fgS: "cady15", 15607 _fgB: 1790697590798, 15608 label: "DRIVER MANAGEMENT", 15609 title: "Leases, Shifts, and Settlements Done Right", 15610 points: [ 15611 "Flexible lease structures including daily, weekly, team driver, commission-based, and premium rates by day of week", 15612 "Cashier reconciles every trip against credit card receipts, vouchers, and cash before driver settlement", 15613 "Special charges, deposits, and installment payments all tracked and applied to driver balances automatically", 15614 "1099 reporting configurable by credit card income, voucher income, or total driver income" 15615 ], 15616 image: sM, 15617 bgColor: "bg-white", 15618 isImageRight: !1, 15619 icon: /* @__PURE__ */ i(a, { _fgT: h1, _fgS: "cady16", _fgB: 1790697590798, className: "w-5 h-5 text-white", "data-fg-cady16": ":0:node_modules/lucide-react:53:17:3114:40:e:Users::::::DV8M" }), 15620 "data-fg-cady15": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:41:9:2389:777:e:HelpRow::::::BFPh" 15621 } 15622 ),
15623 /* @__PURE__ */ i( 15624 a, 15625 { 15626 _fgT: E2, 15627 _fgS: "cady18", 15628 _fgB: 1790697590798, 15629 label: "CALL CENTER & TELEPHONY", 15630 title: "One Phone System. Every Company Brand.", 15631 points: [ 15632 "Integrated telephony recognizes which company the customer called and switches the agent's screen to that company's branding and data", 15633 "Caller ID pulls up the customer's last trips so agents can rebook in seconds without asking for an address", 15634 "IVR self-booking lets repeat customers select their pickup address and book a trip without ever speaking to an agent", 15635 "All calls recorded for training, quality control, and dispute resolution" 15636 ], 15637 image: aM, 15638 bgColor: "bg-slate-50", 15639 isImageRight: !0, 15640 icon: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cady19", _fgB: 1790697590798, className: "w-5 h-5 text-white", "data-fg-cady19": ":0:node_modules/lucide-react:69:17:4003:40:e:Phone::::::DmpI" }), 15641 "data-fg-cady18": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:57:9:3261:794:e:HelpRow::::::BFPh" 15642 } 15643 ),
15644 /* @__PURE__ */ i( 15645 a, 15646 { 15647 _fgT: E2, 15648 _fgS: "cady21", 15649 _fgB: 1790697590798, 15650 label: "BILLING & ACCOUNTS", 15651 title: "Bill Every Account on Its Own Terms", 15652 points: [ 15653 "Custom rate structures per account including fixed pickup rates, mileage rates, hourly rates, and cancellation fees", 15654 "Batch invoicing across multiple funding sources with each invoice formatted to that account's contractual terms", 15655 "Post receipts against invoices with support for partial payments, overpayments applied forward, and aging reports", 15656 "Government and Medicaid accounts handled with case worker tracking, eligibility rules, and driver qualification restrictions" 15657 ], 15658 image: iM, 15659 bgColor: "bg-white", 15660 isImageRight: !1, 15661 icon: /* @__PURE__ */ i(a, { _fgT: Wl, _fgS: "cady22", _fgB: 1790697590798, className: "w-5 h-5 text-white", "data-fg-cady22": ":0:node_modules/lucide-react:85:17:4905:42:e:Receipt::::::C6sA" }), 15662 "data-fg-cady21": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:73:9:4140:819:e:HelpRow::::::BFPh" 15663 } 15664 ) 15665 ] }) 15666 ] }); 15667} 15668function E2({ label: t, title: e, points: s, image: r, bgColor: n, isImageRight: o, icon: L }) { 15669 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cady23", _fgB: 1790697590798, _fgD: !0, className: `py-20 ${n}`, "data-fg-cady23": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:104:5:5274:2253:e:div:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cady24", _fgB: 1790697590798, className: "container mx-auto px-6 grid lg:grid-cols-2 gap-16 items-center", "data-fg-cady24": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:105:7:5317:2199:e:div:xtetxte", children: [ 15670 /* @__PURE__ */ c( 15671 a, 15672 { 15673 _fgT: m.div, 15674 _fgS: "cady26", 15675 _fgB: 1790697590798, 15676 initial: { opacity: 0, x: o ? -30 : 30 }, 15677 whileInView: { opacity: 1, x: 0 }, 15678 viewport: { once: !0, margin: "-100px" }, 15679 transition: { duration: 0.6 }, 15680 className: `${o ? "lg:order-1" : "lg:order-2"}`, 15681 "data-fg-cady26": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:107:9:5435:1335:e:motion.div:etete", 15682 children: [
15683 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cady27", _fgB: 1790697590798, className: "flex items-center gap-3 mb-6", "data-fg-cady27": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:114:11:5741:342:e:div:ete", children: [ 15684 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cady28", _fgB: 1790697590798, className: "flex items-center justify-center w-8 h-8 rounded-full bg-[#EFBB0F] shadow-md", "data-fg-cady28": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:115:13:5800:134:e:div:x", children: L }), 15685 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cady30", _fgB: 1790697590798, className: "text-[#EFBB0F] font-bold tracking-widest text-sm uppercase", "data-fg-cady30": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:118:13:5947:119:e:span:x", children: t }) 15686 ] }), 15687 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cady32", _fgB: 1790697590798, className: "text-3xl md:text-4xl font-bold text-slate-900 mb-8 leading-tight", "data-fg-cady32": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:123:11:6105:117:e:h3:x", children: e }),
15688 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cady34", _fgB: 1790697590798, className: "space-y-6", "data-fg-cady34": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:127:11:6244:504:e:ul:x", children: s.map((d, l) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cady36", _fgB: 1790697590798, className: "flex items-start gap-4 group", "data-fg-cady36": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:129:15:6329:387:e:li:ete", children: [ 15689 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cady37", _fgB: 1790697590798, className: "mt-1.5 min-w-[20px] text-[#EFBB0F]", "data-fg-cady37": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:130:17:6403:175:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: G, _fgS: "cady38", _fgB: 1790697590798, size: 20, className: "group-hover:scale-110 transition-transform", "data-fg-cady38": ":0:node_modules/lucide-react:131:19:6474:81:e:CheckCircle2::::::CELI" }) }), 15690 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cady39", _fgB: 1790697590798, className: "text-slate-600 leading-relaxed text-lg", "data-fg-cady39": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:133:17:6595:101:e:p:x", children: d }) 15691 ] }, l)) }) 15692 ] 15693 } 15694 ), 15695 /* @__PURE__ */ c( 15696 a, 15697 { 15698 _fgT: m.div, 15699 _fgS: "cady42", 15700 _fgB: 1790697590798, 15701 initial: { opacity: 0, scale: 0.95 }, 15702 whileInView: { opacity: 1, scale: 1 }, 15703 viewport: { once: !0, margin: "-100px" }, 15704 transition: { duration: 0.6, delay: 0.2 }, 15705 className: `relative h-[400px] md:h-[500px] rounded-2xl overflow-hidden shadow-2xl ${o ? "lg:order-2" : "lg:order-1"}`, 15706 "data-fg-cady42": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:142:9:6802:701:e:motion.div:ete", 15707 children: [
15708 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cady43", _fgB: 1790697590798, className: "absolute inset-0 bg-gradient-to-tr from-slate-900/40 to-transparent z-10 mix-blend-multiply", "data-fg-cady43": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:149:11:7180:111:e:div" }), 15709 /* @__PURE__ */ i( 15710 a, 15711 { 15712 _fgT: "img", 15713 _fgS: "cady44", 15714 _fgB: 1790697590798, 15715 src: r, 15716 alt: e, 15717 className: "w-full h-full object-cover transform hover:scale-105 transition-transform duration-700", 15718 "data-fg-cady44": ":0:/src/app/components/taxi-broker/TaxiBrokerHelp.tsx:150:11:7302:179:e:img" 15719 } 15720 ) 15721 ] 15722 } 15723 ) 15724 ] }) }); 15725} 15726function nM() { 15727 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bt5a0", _fgB: 1790697590796, _fgD: !0, className: "py-24 bg-slate-50", "data-fg-bt5a0": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:6:5:153:2527:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bt5a1", _fgB: 1790697590796, className: "container mx-auto px-6", "data-fg-bt5a1": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:7:7:199:2466:e:div:ete", children: [ 15728 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bt5a2", _fgB: 1790697590796, className: "text-center mb-16", "data-fg-bt5a2": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:8:9:248:889:e:div:e", children: /* @__PURE__ */ c( 15729 a, 15730 { 15731 _fgT: m.div, 15732 _fgS: "bt5a3", 15733 _fgB: 1790697590796, 15734 initial: { opacity: 0, y: 20 }, 15735 whileInView: { opacity: 1, y: 0 }, 15736 viewport: { once: !0 }, 15737 transition: { duration: 0.6 }, 15738 "data-fg-bt5a3": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:9:11:294:828:e:motion.div:etete", 15739 children: [
15740 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bt5a4", _fgB: 1790697590796, className: "inline-block px-4 py-1.5 rounded-full border border-blue-100 bg-blue-50 text-blue-600 text-xs font-bold tracking-widest uppercase mb-6", "data-fg-bt5a4": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:15:13:502:202:e:div:t", children: "IN-VEHICLE TOOLS" }), 15741 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bt5a6", _fgB: 1790697590796, className: "text-3xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-bt5a6": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:19:13:730:158:e:h2:tet", children: [ 15742 "From the Driver's Seat", 15743 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bt5a8", _fgB: 1790697590796, "data-fg-bt5a8": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:20:37:848:6:e:br" }), 15744 "to the Back Seat" 15745 ] }), 15746 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bt5a10", _fgB: 1790697590796, className: "text-lg md:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed", "data-fg-bt5a10": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:23:13:914:184:e:p:t", children: "Our in-vehicle equipment completes the loop from dispatch to payment." }) 15747 ] 15748 } 15749 ) }), 15750 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bt5a12", _fgB: 1790697590796, className: "grid md:grid-cols-3 gap-8 max-w-6xl mx-auto", "data-fg-bt5a12": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:29:9:1147:1505:e:div:xtetxtetxte", children: [
15751 /* @__PURE__ */ i( 15752 a, 15753 { 15754 _fgT: h4, 15755 _fgS: "bt5a14", 15756 _fgB: 1790697590796, 15757 icon: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "bt5a15", _fgB: 1790697590796, className: "w-8 h-8 text-[#EFBB0F]", "data-fg-bt5a15": ":0:node_modules/lucide-react:32:19:1285:49:e:Smartphone::::::DHxb" }), 15758 title: "Driver App", 15759 points: [ 15760 "Trip list, navigation, and dispatch all on the driver's phone or tablet", 15761 "Direct dispatch or bidding depending on company policy", 15762 "Digital signature capture for account and voucher trips" 15763 ], 15764 delay: 0.1, 15765 "data-fg-bt5a14": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:31:11:1256:417:e:ToolCard::::::CDDA" 15766 } 15767 ), 15768 /* @__PURE__ */ i( 15769 a, 15770 { 15771 _fgT: h4, 15772 _fgS: "bt5a17", 15773 _fgB: 1790697590796, 15774 icon: /* @__PURE__ */ i(a, { _fgT: rl, _fgS: "bt5a18", _fgB: 1790697590796, className: "w-8 h-8 text-[#EFBB0F]", "data-fg-bt5a18": ":0:node_modules/lucide-react:44:19:1765:44:e:Gauge::::::Bcv3" }), 15775 title: "Soft Taximeter", 15776 points: [ 15777 "Regulator-approved fare calculation on the driver's device", 15778 "Multiple rate structures per corporate account", 15779 "Fare, distance, time, surcharge, and tip all displayed and recorded" 15780 ], 15781 delay: 0.2, 15782 "data-fg-bt5a17": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:43:11:1736:407:e:ToolCard::::::CDDA" 15783 } 15784 ),
15785 /* @__PURE__ */ i( 15786 a, 15787 { 15788 _fgT: h4, 15789 _fgS: "bt5a20", 15790 _fgB: 1790697590796, 15791 icon: /* @__PURE__ */ i(a, { _fgT: U7, _fgS: "bt5a21", _fgB: 1790697590796, className: "w-8 h-8 text-[#EFBB0F]", "data-fg-bt5a21": ":0:node_modules/lucide-react:56:19:2239:49:e:CreditCard::::::BwVT" }), 15792 title: "Backseat Passenger Interface", 15793 points: [ 15794 "Tap-to-pay, EMV chip, swipe, and app payments all accepted", 15795 "Riders view route, ETA, and fare on the backseat screen", 15796 "Digital receipt by email or text and optional driver rating" 15797 ], 15798 delay: 0.3, 15799 "data-fg-bt5a20": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:55:11:2210:427:e:ToolCard::::::CDDA" 15800 } 15801 ) 15802 ] }) 15803 ] }) }); 15804} 15805function h4({ icon: t, title: e, points: s, delay: r }) { 15806 return /* @__PURE__ */ c( 15807 a, 15808 { 15809 _fgT: m.div, 15810 _fgS: "bt5a22", 15811 _fgB: 1790697590796, 15812 _fgD: !0, 15813 initial: { opacity: 0, y: 30 }, 15814 whileInView: { opacity: 1, y: 0 }, 15815 viewport: { once: !0 }, 15816 transition: { delay: r, duration: 0.5 }, 15817 className: "bg-white p-8 rounded-2xl shadow-lg border border-slate-100 hover:shadow-xl transition-shadow group flex flex-col h-full", 15818 "data-fg-bt5a22": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:73:5:2831:945:e:motion.div:etete:1", 15819 children: [
15820 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bt5a23", _fgB: 1790697590796, className: "mb-6 p-4 bg-slate-50 rounded-xl w-fit group-hover:scale-110 transition-transform duration-300", "data-fg-bt5a23": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:80:7:3149:139:e:div:x", children: t }), 15821 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bt5a25", _fgB: 1790697590796, className: "text-2xl font-bold text-slate-900 mb-6", "data-fg-bt5a25": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:84:7:3302:67:e:h3:x", children: e }), 15822 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bt5a27", _fgB: 1790697590796, className: "space-y-4 flex-grow", "data-fg-bt5a27": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:86:7:3383:375:e:ul:x", children: s.map((n, o) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bt5a29", _fgB: 1790697590796, className: "flex items-start gap-3", "data-fg-bt5a29": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:88:11:3470:264:e:li:ete", children: [ 15823 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bt5a30", _fgB: 1790697590796, className: "w-1.5 h-1.5 rounded-full bg-[#EFBB0F] mt-2.5 flex-shrink-0", "data-fg-bt5a30": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:89:13:3534:78:e:div" }),
15824 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bt5a31", _fgB: 1790697590796, className: "text-slate-600 leading-relaxed text-sm", "data-fg-bt5a31": ":0:/src/app/components/taxi-broker/TaxiBrokerTools.tsx:90:13:3625:93:e:p:x", children: n }) 15825 ] }, o)) }) 15826 ] 15827 } 15828 ); 15829} 15830function oM() { 15831 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "mt80", _fgB: 1790697590801, _fgD: !0, className: "py-24 bg-slate-900 text-white", "data-fg-mt80": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:6:5:160:1883:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "mt81", _fgB: 1790697590801, className: "container mx-auto px-6", "data-fg-mt81": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:7:7:218:1810:e:div:ete", children: [ 15832 /* @__PURE__ */ i( 15833 a, 15834 { 15835 _fgT: m.div, 15836 _fgS: "mt82", 15837 _fgB: 1790697590801, 15838 initial: { opacity: 0, y: 20 }, 15839 whileInView: { opacity: 1, y: 0 }, 15840 viewport: { once: !0 }, 15841 transition: { duration: 0.6 }, 15842 className: "text-center mb-16", 15843 "data-fg-mt82": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:8:9:267:466:e:motion.div:e", 15844 children: /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "mt83", _fgB: 1790697590801, className: "text-3xl md:text-5xl font-bold mb-6 font-[Space_Grotesk]", "data-fg-mt83": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:15:11:504:207:e:h2:tete", children: [ 15845 "Built for Operators Running",
15846 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "mt85", _fgB: 1790697590801, "data-fg-mt85": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:16:40:617:6:e:br" }), 15847 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "mt86", _fgB: 1790697590801, className: "text-[#EFBB0F]", "data-fg-mt86": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:17:13:636:59:e:span:t", children: "More Than One Fleet" }) 15848 ] }) 15849 } 15850 ), 15851 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "mt88", _fgB: 1790697590801, className: "grid md:grid-cols-2 gap-8 max-w-4xl mx-auto", "data-fg-mt88": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:21:9:743:1272:e:div:etetete", children: [ 15852 /* @__PURE__ */ i( 15853 a, 15854 { 15855 _fgT: R2, 15856 _fgS: "mt89", 15857 _fgB: 1790697590801, 15858 icon: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "mt810", _fgB: 1790697590801, className: "w-6 h-6 text-slate-900", "data-fg-mt810": ":0:node_modules/lucide-react:23:19:846:48:e:Building2::::::DOEu" }), 15859 title: "Multi-Company Taxi Operators", 15860 description: "Managing dispatch, billing, and driver settlements across two or more cab companies.", 15861 delay: 0.1, 15862 "data-fg-mt89": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:22:11:815:277:e:WhoForItem::::::DeTE" 15863 } 15864 ),
15865 /* @__PURE__ */ i( 15866 a, 15867 { 15868 _fgT: R2, 15869 _fgS: "mt811", 15870 _fgB: 1790697590801, 15871 icon: /* @__PURE__ */ i(a, { _fgT: J7, _fgS: "mt812", _fgB: 1790697590801, className: "w-6 h-6 text-slate-900", "data-fg-mt812": ":0:node_modules/lucide-react:30:19:1145:48:e:Handshake::::::B5t" }), 15872 title: "Trip Brokers", 15873 description: "Receiving trip requests and distributing them across a network of affiliated transportation providers.", 15874 delay: 0.2, 15875 "data-fg-mt811": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:29:11:1114:279:e:WhoForItem::::::DeTE" 15876 } 15877 ), 15878 /* @__PURE__ */ i( 15879 a, 15880 { 15881 _fgT: R2, 15882 _fgS: "mt813", 15883 _fgB: 1790697590801, 15884 icon: /* @__PURE__ */ i(a, { _fgT: q7, _fgS: "mt814", _fgB: 1790697590801, className: "w-6 h-6 text-slate-900", "data-fg-mt814": ":0:node_modules/lucide-react:37:19:1446:42:e:Car::::::EJEg" }), 15885 title: "Limousine and Black Car Operators", 15886 description: "Running scheduled and on-demand luxury transportation with account-based billing.", 15887 delay: 0.3, 15888 "data-fg-mt813": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:36:11:1415:273:e:WhoForItem::::::DeTE" 15889 } 15890 ),
15891 /* @__PURE__ */ i( 15892 a, 15893 { 15894 _fgT: R2, 15895 _fgS: "mt815", 15896 _fgB: 1790697590801, 15897 icon: /* @__PURE__ */ i(a, { _fgT: Sc, _fgS: "mt816", _fgB: 1790697590801, className: "w-6 h-6 text-slate-900", "data-fg-mt816": ":0:node_modules/lucide-react:44:19:1741:47:e:Building::::::XOs" }), 15898 title: "Hotel and Corporate Account Managers", 15899 description: "Providing dedicated taxi service for hotels, corporate campuses, and government contracts.", 15900 delay: 0.4, 15901 "data-fg-mt815": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:43:11:1710:290:e:WhoForItem::::::DeTE" 15902 } 15903 ) 15904 ] }) 15905 ] }) }); 15906} 15907function R2({ icon: t, title: e, description: s, delay: r }) { 15908 return /* @__PURE__ */ c( 15909 a, 15910 { 15911 _fgT: m.div, 15912 _fgS: "mt817", 15913 _fgB: 1790697590801, 15914 _fgD: !0, 15915 initial: { opacity: 0, scale: 0.95 }, 15916 whileInView: { opacity: 1, scale: 1 }, 15917 viewport: { once: !0 }, 15918 transition: { delay: r, duration: 0.5 }, 15919 className: "bg-slate-800/50 border border-slate-700 p-8 rounded-2xl hover:bg-slate-800 transition-colors group flex items-start gap-6", 15920 "data-fg-mt817": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:57:5:2204:671:e:motion.div:ete:1", 15921 children: [
15922 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "mt818", _fgB: 1790697590801, className: "p-3 bg-white rounded-xl shadow-lg group-hover:scale-110 transition-transform duration-300", "data-fg-mt818": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:64:7:2534:135:e:div:x", children: t }), 15923 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "mt820", _fgB: 1790697590801, "data-fg-mt820": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:67:7:2676:181:e:div:ete", children: [ 15924 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "mt821", _fgB: 1790697590801, className: "text-xl font-bold text-white mb-2", "data-fg-mt821": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:68:9:2690:62:e:h3:x", children: e }), 15925 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "mt823", _fgB: 1790697590801, className: "text-slate-400 leading-relaxed", "data-fg-mt823": ":0:/src/app/components/taxi-broker/TaxiBrokerWhoFor.tsx:69:9:2761:83:e:p:x", children: s }) 15926 ] }) 15927 ] 15928 } 15929 ); 15930} 15931function LM() { 15932 const { openContactModal: t } = Z(); 15933 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dcn0", _fgB: 1790697590802, _fgD: !0, className: "py-24 bg-white", "data-fg-dcn0": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:9:5:241:1293:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dcn1", _fgB: 1790697590802, className: "container mx-auto px-6 max-w-4xl text-center", "data-fg-dcn1": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:10:7:284:1235:e:div:e", children: /* @__PURE__ */ c( 15934 a, 15935 { 15936 _fgT: m.div, 15937 _fgS: "dcn2", 15938 _fgB: 1790697590802, 15939 initial: { opacity: 0, y: 30 }, 15940 whileInView: { opacity: 1, y: 0 }, 15941 viewport: { once: !0 }, 15942 transition: { duration: 0.8 }, 15943 "data-fg-dcn2": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:11:9:355:1151:e:motion.div:etete", 15944 children: [
15945 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "dcn3", _fgB: 1790697590802, className: "text-4xl md:text-5xl font-bold text-slate-900 mb-6 leading-tight", "data-fg-dcn3": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:17:11:551:224:e:h2:tete", children: [ 15946 "Managing Multiple Fleets Shouldn't", 15947 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "dcn5", _fgB: 1790697590802, "data-fg-dcn5": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:18:47:679:6:e:br" }), 15948 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dcn6", _fgB: 1790697590802, className: "text-[#EFBB0F]", "data-fg-dcn6": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:19:13:698:61:e:span:t", children: "Mean Multiple Systems" }) 15949 ] }), 15950 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dcn8", _fgB: 1790697590802, className: "text-xl md:text-2xl text-slate-600 mb-12 max-w-2xl mx-auto leading-relaxed", "data-fg-dcn8": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:22:11:797:239:e:p:t", children: "See how one platform handles dispatch, billing, driver settlements, and call center operations for every company you run." }),
15951 /* @__PURE__ */ c( 15952 a, 15953 { 15954 _fgT: "button", 15955 _fgS: "dcn10", 15956 _fgB: 1790697590802, 15957 onClick: t, 15958 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-10 py-5 rounded-full font-bold text-xl hover:bg-[#004494] transition-all duration-300 shadow-xl hover:shadow-blue-900/50 cursor-pointer", 15959 "data-fg-dcn10": ":0:/src/app/components/taxi-broker/TaxiBrokerCTA.tsx:26:11:1058:426:e:button:te", 15960 children: [ 15961 "Request a Demo", 15962 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "dcn12", _fgB: 1790697590802, size: 24, className: "group-hover:translate-x-1 transition-transform", "data-fg-dcn12": ":0:node_modules/lucide-react:31:13:1381:83:e:ArrowRight::::::s5N" }) 15963 ] 15964 } 15965 ) 15966 ] 15967 } 15968 ) }) }); 15969} 15970function cM() { 15971 return /* @__PURE__ */ c(C, { children: [ 15972 /* @__PURE__ */ i(a, { _fgT: eM, _fgS: "dy8b1", _fgB: 1790697589425, "data-fg-dy8b1": ":0:/src/app/pages/TaxiBrokerPage.tsx:12:7:574:18:e:TaxiBrokerHero::::::Bm5E" }), 15973 /* @__PURE__ */ i(a, { _fgT: tM, _fgS: "dy8b2", _fgB: 1790697589425, "data-fg-dy8b2": ":0:/src/app/pages/TaxiBrokerPage.tsx:13:7:599:23:e:TaxiBrokerChallenge::::::CfOW" }), 15974 /* @__PURE__ */ i(a, { _fgT: rM, _fgS: "dy8b3", _fgB: 1790697589425, "data-fg-dy8b3": ":0:/src/app/pages/TaxiBrokerPage.tsx:14:7:629:18:e:TaxiBrokerHelp::::::BcN0" }), 15975 /* @__PURE__ */ i(a, { _fgT: nM, _fgS: "dy8b4", _fgB: 1790697589425, "data-fg-dy8b4": ":0:/src/app/pages/TaxiBrokerPage.tsx:15:7:654:19:e:TaxiBrokerTools::::::CH9E" }), 15976 /* @__PURE__ */ i(a, { _fgT: oM, _fgS: "dy8b5", _fgB: 1790697589425, "data-fg-dy8b5": ":0:/src/app/pages/TaxiBrokerPage.tsx:16:7:680:20:e:TaxiBrokerWhoFor::::::CL2S" }), 15977 /* @__PURE__ */ i(a, { _fgT: LM, _fgS: "dy8b6", _fgB: 1790697589425, "data-fg-dy8b6": ":0:/src/app/pages/TaxiBrokerPage.tsx:17:7:707:17:e:TaxiBrokerCTA::::::d36" }), 15978 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "dy8b7", _fgB: 1790697589425, "data-fg-dy8b7": ":0:/src/app/pages/TaxiBrokerPage.tsx:18:7:731:10:e:Footer::::::B1Vv" }) 15979 ] }); 15980} 15981const lM = globalThis.__GLOBALS__.getAssetURL("c9fb2e457402b1744196d8c464ee4f45e88635ae.png"); 15982function dM() { 15983 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "d2ve0", _fgB: 1790697590157, _fgD: !0, className: "relative min-h-[90vh] bg-slate-900 overflow-hidden flex flex-col justify-center py-20", "data-fg-d2ve0": ":0:/src/app/components/about/AboutHero.tsx:7:5:246:2739:e:section:xtete:1", children: [ 15984 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2ve2", _fgB: 1790697590157, className: "absolute inset-0 z-0 flex flex-col md:flex-row", "data-fg-d2ve2": ":0:/src/app/components/about/AboutHero.tsx:10:7:412:1961:e:div:xtetxtetxte", children: [
15985 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2ve4", _fgB: 1790697590157, className: "relative w-full md:w-1/2 h-1/2 md:h-full overflow-hidden", "data-fg-d2ve4": ":0:/src/app/components/about/AboutHero.tsx:12:9:528:870:e:div:etete", children: [ 15986 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve5", _fgB: 1790697590157, className: "absolute inset-0 bg-slate-900/60 z-10", "data-fg-d2ve5": ":0:/src/app/components/about/AboutHero.tsx:13:12:614:57:e:div" }), 15987 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve6", _fgB: 1790697590157, className: "absolute inset-0 grayscale contrast-125", "data-fg-d2ve6": ":0:/src/app/components/about/AboutHero.tsx:14:12:683:526:e:div:e", children: /* @__PURE__ */ i( 15988 a, 15989 { 15990 _fgT: Le, 15991 _fgS: "d2ve7", 15992 _fgB: 1790697590157, 15993 src: "https://images.unsplash.com/photo-1722702012229-10548fd57f4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx2aW50YWdlJTIwb2ZmaWNlJTIwY29tcHV0ZXIlMjAyMDAwc3xlbnwxfHx8fDE3NzEwMTgxNjJ8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 15994 alt: "Vintage transit bus 1990s", 15995 className: "w-full h-full object-cover", 15996 "data-fg-d2ve7": ":0:/src/app/components/about/AboutHero.tsx:15:14:754:437:e:ImageWithFallback::::::CLus" 15997 } 15998 ) }),
15999 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve8", _fgB: 1790697590157, className: "absolute bottom-6 left-6 z-20", "data-fg-d2ve8": ":0:/src/app/components/about/AboutHero.tsx:21:12:1221:162:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d2ve9", _fgB: 1790697590157, className: "text-white/50 text-6xl font-bold font-[Space_Grotesk]", "data-fg-d2ve9": ":0:/src/app/components/about/AboutHero.tsx:22:14:1282:83:e:span:t", children: "2000" }) }) 16000 ] }), 16001 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "d2ve12", _fgB: 1790697590157, className: "relative w-full md:w-1/2 h-1/2 md:h-full overflow-hidden", "data-fg-d2ve12": ":0:/src/app/components/about/AboutHero.tsx:27:9:1456:541:e:div:etete", children: [ 16002 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve13", _fgB: 1790697590157, className: "absolute inset-0 bg-blue-900/60 z-10 mix-blend-multiply", "data-fg-d2ve13": ":0:/src/app/components/about/AboutHero.tsx:28:12:1542:75:e:div" }), 16003 /* @__PURE__ */ i( 16004 a, 16005 { 16006 _fgT: Le, 16007 _fgS: "d2ve14", 16008 _fgB: 1790697590157, 16009 src: lM, 16010 alt: "Modern high tech transit control center", 16011 className: "w-full h-full object-cover", 16012 "data-fg-d2ve14": ":0:/src/app/components/about/AboutHero.tsx:29:12:1629:177:e:ImageWithFallback::::::CLus" 16013 } 16014 ),
16015 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve15", _fgB: 1790697590157, className: "absolute bottom-6 right-6 z-20", "data-fg-d2ve15": ":0:/src/app/components/about/AboutHero.tsx:34:12:1818:164:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d2ve16", _fgB: 1790697590157, className: "text-white/50 text-6xl font-bold font-[Space_Grotesk]", "data-fg-d2ve16": ":0:/src/app/components/about/AboutHero.tsx:35:14:1880:84:e:span:t", children: "Today" }) }) 16016 ] }), 16017 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve19", _fgB: 1790697590157, className: "absolute inset-0 hidden md:block pointer-events-none z-10", "data-fg-d2ve19": ":0:/src/app/components/about/AboutHero.tsx:40:9:2047:313:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "svg", _fgS: "d2ve20", _fgB: 1790697590157, className: "h-full w-full", preserveAspectRatio: "none", "data-fg-d2ve20": ":0:/src/app/components/about/AboutHero.tsx:41:12:2134:211:e:svg:e", children: /* @__PURE__ */ i("line", { x1: "50%", y1: "0", x2: "50%", y2: "100%", stroke: "white", strokeWidth: "2", strokeDasharray: "10,10", className: "opacity-30", "data-fg-d2ve21": ":0:/src/app/components/about/AboutHero.tsx:42:14:2206:121:e:line" }) }) }) 16018 ] }), 16019 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d2ve22", _fgB: 1790697590157, className: "container mx-auto px-6 relative z-20 flex items-center justify-center text-center", "data-fg-d2ve22": ":0:/src/app/components/about/AboutHero.tsx:47:7:2381:589:e:div:e", children: /* @__PURE__ */ i( 16020 a, 16021 { 16022 _fgT: m.div, 16023 _fgS: "d2ve23", 16024 _fgB: 1790697590157, 16025 initial: { opacity: 0, y: 30 }, 16026 animate: { opacity: 1, y: 0 }, 16027 transition: { duration: 0.8 }, 16028 className: "max-w-4xl mx-auto", 16029 "data-fg-d2ve23": ":0:/src/app/components/about/AboutHero.tsx:48:9:2489:468:e:motion.div:e", 16030 children: /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "d2ve24", _fgB: 1790697590157, className: "text-5xl md:text-8xl font-light text-white font-[Space_Grotesk] leading-tight relative z-30", "data-fg-d2ve24": ":0:/src/app/components/about/AboutHero.tsx:54:11:2686:249:e:h1:tete", children: [ 16031 "25 Years of Moving ",
16032 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "d2ve26", _fgB: 1790697590157, "data-fg-d2ve26": ":0:/src/app/components/about/AboutHero.tsx:55:32:2826:6:e:br" }), 16033 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "d2ve27", _fgB: 1790697590157, className: "text-[#EFBB0F] italic font-serif", "data-fg-d2ve27": ":0:/src/app/components/about/AboutHero.tsx:56:13:2845:74:e:span:t", children: "Transit Forward." }) 16034 ] }) 16035 } 16036 ) }) 16037 ] }); 16038} 16039const gM = [ 16040 { 16041 year: "2000", 16042 title: "Founded", 16043 desc: "IT Curves is established with a mission to bring intelligent software to public transit operations.", 16044 image: "https://images.unsplash.com/photo-1722702012229-10548fd57f4c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHx2aW50YWdlJTIwb2ZmaWNlJTIwY29tcHV0ZXIlMjAyMDAwc3xlbnwxfHx8fDE3NzEwMTgxNjJ8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16045 }, 16046 { 16047 year: "2008", 16048 title: "Early Growth", 16049 desc: "IT Curves expands its footprint, securing key partnerships and developing its first comprehensive dispatch solutions.", 16050 image: "https://images.unsplash.com/photo-1758691736493-aa6d22c0f8a6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxidXNpbmVzcyUyMG1lZXRpbmclMjBncm93dGglMjBjaGFydHxlbnwxfHx8fDE3NzEwMTgxNjN8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16051 }, 16052 { 16053 year: "2016", 16054 title: "Cloud Deployment & Paratransit", 16055 desc: "IT Curves moves to a fully cloud-based, web-accessible platform. Same year, the company enters the paratransit market with demand-response scheduling and dispatch tools.", 16056 image: "https://images.unsplash.com/photo-1744868562210-fffb7fa882d9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjbG91ZCUyMHNlcnZlciUyMHRlY2hub2xvZ3l8ZW58MXx8fHwxNzcwOTkwMjYyfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16057 }, 16058 { 16059 year: "2020â2022", 16060 title: "Fixed Route Expansion", 16061 desc: "IT Curves expands into the fixed route transit space, building comprehensive route management, scheduling, and real-time tracking tools.", 16062 image: "https://images.unsplash.com/photo-1753064342379-01177adb9f3c?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjaXR5JTIwYnVzJTIwZml4ZWQlMjByb3V0ZXxlbnwxfHx8fDE3NzEwMTgxNjN8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16063 }, 16064 { 16065 year: "2024", 16066 title: "Microtransit Launch", 16067 desc: "IT Curves launches microtransit capabilities with Annapolis Go Time, proving white-label, zone-based on-demand transit at scale.", 16068 image: "https://images.unsplash.com/photo-1758640266061-c9ad88491fec?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxtaWNyb3RyYW5zaXQlMjB2YW4lMjBhcHB8ZW58MXx8fHwxNzcxMDE4MTYzfDA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16069 }, 16070 { 16071 year: "2025", 16072 title: "AI Dev Labs Acquisition", 16073 desc: "IT Curves acquires AI Dev Labs, repositioning as leading innovators in AI and the transit sector. New capabilities include AI Call Agent, AI Chatbot, and Custom AI Workflows.", 16074 image: "https://images.unsplash.com/photo-1655393001768-d946c97d6fd1?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxhcnRpZmljaWFsJTIwaW50ZWxsaWdlbmNlJTIwZnV0dXJlJTIwdGVjaHxlbnwxfHx8fDE3NzA5NjE3MDN8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral" 16075 } 16076]; 16077function fM() { 16078 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cnsq0", _fgB: 1790697590164, _fgD: !0, className: "py-24 bg-white overflow-hidden", "data-fg-cnsq0": ":0:/src/app/components/about/OurStory.tsx:45:5:3170:3985:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnsq1", _fgB: 1790697590164, className: "container mx-auto px-6", "data-fg-cnsq1": ":0:/src/app/components/about/OurStory.tsx:46:7:3229:3911:e:div:ete", children: [ 16079 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnsq2", _fgB: 1790697590164, className: "text-center mb-20 max-w-3xl mx-auto", "data-fg-cnsq2": ":0:/src/app/components/about/OurStory.tsx:48:9:3287:692:e:div:etete", children: [
16080 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnsq3", _fgB: 1790697590164, className: "text-[#0056B3] font-bold tracking-wider uppercase text-sm mb-2 block", "data-fg-cnsq3": ":0:/src/app/components/about/OurStory.tsx:49:11:3351:103:e:span:t", children: "Our Story" }), 16081 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cnsq5", _fgB: 1790697590164, className: "text-4xl md:text-5xl font-light text-slate-900 mb-6 font-[Space_Grotesk]", "data-fg-cnsq5": ":0:/src/app/components/about/OurStory.tsx:50:11:3465:226:e:h2:tete", children: [ 16082 "From Transit Challenge to ", 16083 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cnsq7", _fgB: 1790697590164, "data-fg-cnsq7": ":0:/src/app/components/about/OurStory.tsx:51:39:3593:6:e:br" }), 16084 " ", 16085 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnsq8", _fgB: 1790697590164, className: "text-[#EFBB0F] font-serif italic", "data-fg-cnsq8": ":0:/src/app/components/about/OurStory.tsx:51:46:3600:75:e:span:t", children: "Transit Solution." }) 16086 ] }), 16087 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnsq10", _fgB: 1790697590164, className: "text-slate-600 text-lg", "data-fg-cnsq10": ":0:/src/app/components/about/OurStory.tsx:53:11:3702:262:e:p:t", children: "We didn't start IT Curves to build software; we started it because, as transit veterans and stakeholders, we saw firsthand that the software of the day wasn't good enough for the people it served." }) 16088 ] }), 16089 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnsq12", _fgB: 1790697590164, className: "relative max-w-6xl mx-auto", "data-fg-cnsq12": ":0:/src/app/components/about/OurStory.tsx:58:9:3989:3137:e:div:xtete", children: [
16090 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq14", _fgB: 1790697590164, className: "absolute left-[20px] md:left-1/2 top-0 bottom-0 w-px bg-slate-200 -translate-x-1/2", "data-fg-cnsq14": ":0:/src/app/components/about/OurStory.tsx:60:11:4075:102:e:div" }), 16091 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq15", _fgB: 1790697590164, className: "space-y-24", "data-fg-cnsq15": ":0:/src/app/components/about/OurStory.tsx:62:11:4189:2921:e:div:x", children: gM.map((t, e) => /* @__PURE__ */ c( 16092 a, 16093 { 16094 _fgT: m.div, 16095 _fgS: "cnsq17", 16096 _fgB: 1790697590164, 16097 initial: { opacity: 0, y: 30 }, 16098 whileInView: { opacity: 1, y: 0 }, 16099 transition: { delay: e * 0.1 }, 16100 viewport: { once: !0 }, 16101 className: `flex flex-col md:flex-row gap-8 md:gap-16 items-center relative ${e % 2 === 0 ? "md:text-right" : "md:flex-row-reverse md:text-left"}`, 16102 "data-fg-cnsq17": ":0:/src/app/components/about/OurStory.tsx:64:15:4273:2804:e:motion.div:xtetxtetxte", 16103 children: [
16104 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq19", _fgB: 1790697590164, className: "flex-1 pl-12 md:pl-0 w-full relative z-10", "data-fg-cnsq19": ":0:/src/app/components/about/OurStory.tsx:77:17:5009:1064:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnsq20", _fgB: 1790697590164, className: `p-8 rounded-2xl bg-white border border-slate-100 shadow-lg hover:shadow-xl transition-shadow relative 16105 ${e % 2 === 0 ? "md:mr-[-20px]" : "md:ml-[-20px]"} 16106 `, "data-fg-cnsq20": ":0:/src/app/components/about/OurStory.tsx:78:19:5087:963:e:div:xtetetete", children: [ 16107 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq22", _fgB: 1790697590164, className: `hidden md:block absolute top-1/2 -translate-y-1/2 w-4 h-4 bg-white border-t border-r border-slate-100 transform rotate-45 16108 ${e % 2 === 0 ? "-right-2 border-b-0 border-l-0" : "-left-2 border-t-0 border-r-0 border-b border-l"} 16109 `, "data-fg-cnsq22": ":0:/src/app/components/about/OurStory.tsx:82:22:5409:295:e:div:_" }),
16110 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnsq23", _fgB: 1790697590164, className: "text-[#0056B3] font-bold text-2xl block mb-2", "data-fg-cnsq23": ":0:/src/app/components/about/OurStory.tsx:86:21:5726:81:e:span:x", children: t.year }), 16111 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cnsq25", _fgB: 1790697590164, className: "text-xl font-bold text-slate-900 mb-3", "data-fg-cnsq25": ":0:/src/app/components/about/OurStory.tsx:87:21:5828:71:e:h3:x", children: t.title }), 16112 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnsq27", _fgB: 1790697590164, className: "text-slate-600 leading-relaxed", "data-fg-cnsq27": ":0:/src/app/components/about/OurStory.tsx:88:21:5920:105:e:p:x", children: t.desc }) 16113 ] }) }), 16114 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq30", _fgB: 1790697590164, className: "absolute left-[20px] md:left-1/2 -translate-x-1/2 w-6 h-6 rounded-full bg-[#EFBB0F] border-4 border-white shadow-md z-20", "data-fg-cnsq30": ":0:/src/app/components/about/OurStory.tsx:95:17:6127:140:e:div" }),
16115 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq32", _fgB: 1790697590164, className: "flex-1 hidden md:block w-full pl-12 md:pl-0", "data-fg-cnsq32": ":0:/src/app/components/about/OurStory.tsx:98:17:6336:713:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnsq33", _fgB: 1790697590164, className: `relative h-64 w-full rounded-2xl overflow-hidden shadow-md group 16116 ${e % 2 === 0 ? "origin-left" : "origin-right"} 16117 `, "data-fg-cnsq33": ":0:/src/app/components/about/OurStory.tsx:99:19:6416:610:e:div:ete", children: [ 16118 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnsq34", _fgB: 1790697590164, className: "absolute inset-0 bg-[#0056B3]/20 mix-blend-multiply z-10 group-hover:bg-transparent transition-colors duration-500", "data-fg-cnsq34": ":0:/src/app/components/about/OurStory.tsx:102:21:6609:134:e:div" }), 16119 /* @__PURE__ */ i( 16120 a, 16121 { 16122 _fgT: Le, 16123 _fgS: "cnsq35", 16124 _fgB: 1790697590164, 16125 src: t.image, 16126 alt: t.title, 16127 className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-110", 16128 "data-fg-cnsq35": ":0:/src/app/components/about/OurStory.tsx:103:21:6764:237:e:ImageWithFallback::::::CLus" 16129 } 16130 ) 16131 ] }) }) 16132 ] 16133 }, 16134 e 16135 )) }) 16136 ] }) 16137 ] }) }); 16138} 16139const pM = globalThis.__GLOBALS__.getAssetURL("20dce1afceecea7e25677c5918b50e8530d96c4b.png"), MM = globalThis.__GLOBALS__.getAssetURL("7626e9128909e4875fce02c04fc69fc354637613.png"), uM = globalThis.__GLOBALS__.getAssetURL("5d02bedbc15274b1e61c2c0ed1139be6527ff5d5.png"), hM = [ 16140 { 16141 name: "Matthew Mohebbi", 16142 role: "Founder and CEO", 16143 bio: "Visionary leader with over 20 years of experience in transit technology and operations, dedicated to modernizing public transportation.", 16144 image: MM, 16145 style: { objectPosition: "35% center" }, 16146 linkedin: "https://www.linkedin.com/in/matthewmohebbi" 16147 }, 16148 { 16149 name: "Jason Wells", 16150 role: "Head of AI Division", 16151 bio: "Spearheading our AI initiatives to optimize routing algorithms and improve rider experiences through predictive analytics.", 16152 image: pM, 16153 linkedin: "https://www.linkedin.com/in/jasonrwells/" 16154 }, 16155 { 16156 name: "Imran Younus", 16157 role: "Vice President and CTO", 16158 bio: "Overseeing our technical strategy and ensuring the reliability, security, and scalability of our mission-critical platforms.", 16159 image: uM, 16160 linkedin: "https://www.linkedin.com/in/muhammad-imran-siddiqui-b28b654/" 16161 } 16162]; 16163function mM() { 16164 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "eu80", _fgB: 1790697590172, _fgD: !0, className: "py-24 bg-slate-50", "data-fg-eu80": ":0:/src/app/components/about/Leadership.tsx:35:5:1408:3176:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eu81", _fgB: 1790697590172, className: "container mx-auto px-6", "data-fg-eu81": ":0:/src/app/components/about/Leadership.tsx:36:7:1454:3115:e:div:etete", children: [ 16165 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eu82", _fgB: 1790697590172, className: "text-center mb-16", "data-fg-eu82": ":0:/src/app/components/about/Leadership.tsx:38:9:1512:538:e:div:etete", children: [
16166 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "eu83", _fgB: 1790697590172, className: "text-[#EFBB0F] font-bold tracking-wider uppercase text-sm mb-2 block", "data-fg-eu83": ":0:/src/app/components/about/Leadership.tsx:39:11:1558:104:e:span:t", children: "Leadership" }), 16167 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "eu85", _fgB: 1790697590172, className: "text-4xl md:text-5xl font-light text-slate-900 mb-6 font-[Space_Grotesk]", "data-fg-eu85": ":0:/src/app/components/about/Leadership.tsx:40:11:1673:208:e:h2:tete", children: [ 16168 "Transit Experts Leading ", 16169 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "eu87", _fgB: 1790697590172, "data-fg-eu87": ":0:/src/app/components/about/Leadership.tsx:41:37:1799:6:e:br" }), 16170 " ", 16171 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "eu88", _fgB: 1790697590172, className: "text-[#0056B3]", "data-fg-eu88": ":0:/src/app/components/about/Leadership.tsx:41:44:1806:59:e:span:t", children: "Transit Innovation." }) 16172 ] }), 16173 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "eu810", _fgB: 1790697590172, className: "text-slate-600 text-lg max-w-2xl mx-auto", "data-fg-eu810": ":0:/src/app/components/about/Leadership.tsx:43:11:1892:143:e:p:t", children: "Driving the future of mobility with experience and vision." }) 16174 ] }), 16175 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eu812", _fgB: 1790697590172, className: "grid md:grid-cols-3 gap-8 mb-16 max-w-6xl mx-auto", "data-fg-eu812": ":0:/src/app/components/about/Leadership.tsx:48:9:2060:2065:e:div:x", children: hM.map((t, e) => /* @__PURE__ */ c( 16176 a, 16177 { 16178 _fgT: m.div, 16179 _fgS: "eu814", 16180 _fgB: 1790697590172, 16181 initial: { opacity: 0, y: 20 }, 16182 whileInView: { opacity: 1, y: 0 }, 16183 transition: { delay: e * 0.1 }, 16184 viewport: { once: !0 }, 16185 className: "group relative bg-white rounded-2xl overflow-hidden shadow-sm hover:shadow-xl transition-all", 16186 "data-fg-eu814": ":0:/src/app/components/about/Leadership.tsx:50:13:2177:1919:e:motion.div:ete", 16187 children: [
16188 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eu815", _fgB: 1790697590172, className: "aspect-[4/5] overflow-hidden relative", "data-fg-eu815": ":0:/src/app/components/about/Leadership.tsx:58:15:2539:1081:e:div:etetxte", children: [ 16189 /* @__PURE__ */ i( 16190 a, 16191 { 16192 _fgT: Le, 16193 _fgS: "eu816", 16194 _fgB: 1790697590172, 16195 src: t.image, 16196 alt: t.name, 16197 className: "w-full h-full object-cover transition-transform duration-700 group-hover:scale-105", 16198 style: t.style, 16199 "data-fg-eu816": ":0:/src/app/components/about/Leadership.tsx:59:17:2611:264:e:ImageWithFallback::::::CLus" 16200 } 16201 ), 16202 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eu817", _fgB: 1790697590172, className: "absolute inset-0 bg-gradient-to-t from-slate-900/90 via-slate-900/20 to-transparent opacity-60 group-hover:opacity-80 transition-opacity", "data-fg-eu817": ":0:/src/app/components/about/Leadership.tsx:65:17:2892:156:e:div" }),
16203 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eu819", _fgB: 1790697590172, className: "absolute top-4 right-4 translate-y-[-10px] opacity-0 group-hover:translate-y-0 group-hover:opacity-100 transition-all duration-300", "data-fg-eu819": ":0:/src/app/components/about/Leadership.tsx:68:17:3118:481:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "a", _fgS: "eu820", _fgB: 1790697590172, href: t.linkedin, target: "_blank", rel: "noopener noreferrer", className: "w-8 h-8 bg-white/20 backdrop-blur-md rounded-full flex items-center justify-center text-white hover:bg-white hover:text-[#0077b5] cursor-pointer", "data-fg-eu820": ":0:/src/app/components/about/Leadership.tsx:69:19:3285:291:e:a:e", children: /* @__PURE__ */ i(a, { _fgT: K7, _fgS: "eu821", _fgB: 1790697590172, size: 16, "data-fg-eu821": ":0:node_modules/lucide-react:70:21:3531:22:e:Linkedin::::::BytQ" }) }) }) 16204 ] }), 16205 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eu822", _fgB: 1790697590172, className: "p-6 relative", "data-fg-eu822": ":0:/src/app/components/about/Leadership.tsx:75:15:3636:434:e:div:etete", children: [
16206 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "eu823", _fgB: 1790697590172, className: "font-bold text-lg text-slate-900", "data-fg-eu823": ":0:/src/app/components/about/Leadership.tsx:76:18:3684:67:e:h3:x", children: t.name }), 16207 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eu825", _fgB: 1790697590172, className: "text-[#0056B3] text-xs font-bold uppercase tracking-wide mb-3", "data-fg-eu825": ":0:/src/app/components/about/Leadership.tsx:77:18:3769:98:e:div:x", children: t.role }), 16208 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "eu827", _fgB: 1790697590172, className: "text-slate-500 text-sm leading-relaxed line-clamp-4 group-hover:line-clamp-none transition-all", "data-fg-eu827": ":0:/src/app/components/about/Leadership.tsx:78:18:3885:164:e:p:x", children: t.bio }) 16209 ] }) 16210 ] 16211 }, 16212 e 16213 )) }), 16214 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eu829", _fgB: 1790697590172, className: "max-w-3xl mx-auto text-center", "data-fg-eu829": ":0:/src/app/components/about/Leadership.tsx:86:9:4135:420:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "eu830", _fgB: 1790697590172, className: "text-xl text-slate-700 font-light leading-relaxed", "data-fg-eu830": ":0:/src/app/components/about/Leadership.tsx:87:13:4195:345:e:p:t", children: "Our team combines decades of transit industry experience with cutting-edge technology expertise. We donât just build software â weâve ridden the routes, visited the dispatch centers, and sat with the drivers. We build what transit actually needs." }) }) 16215 ] }) }); 16216} 16217function xM() { 16218 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bio0", _fgB: 1790697590168, _fgD: !0, className: "py-20 bg-slate-900 text-white border-t border-slate-800", "data-fg-bio0": ":0:/src/app/components/about/CommunityAndMetrics.tsx:3:5:50:1530:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bio1", _fgB: 1790697590168, className: "container mx-auto px-6 text-center", "data-fg-bio1": ":0:/src/app/components/about/CommunityAndMetrics.tsx:4:7:134:1431:e:div:ete", children: [ 16219 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bio2", _fgB: 1790697590168, className: "text-3xl md:text-4xl font-light mb-12 font-[Space_Grotesk]", "data-fg-bio2": ":0:/src/app/components/about/CommunityAndMetrics.tsx:5:9:195:173:e:h2:te", children: [ 16220 "Weâre Only Successful if ",
16221 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bio4", _fgB: 1790697590168, className: "text-[#EFBB0F]", "data-fg-bio4": ":0:/src/app/components/about/CommunityAndMetrics.tsx:6:36:306:48:e:span:t", children: "You Are." }) 16222 ] }), 16223 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bio6", _fgB: 1790697590168, className: "grid md:grid-cols-3 gap-8 max-w-5xl mx-auto", "data-fg-bio6": ":0:/src/app/components/about/CommunityAndMetrics.tsx:9:9:386:1166:e:div:etete", children: [ 16224 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bio7", _fgB: 1790697590168, className: "p-6 border border-slate-700 rounded-2xl bg-slate-800/50", "data-fg-bio7": ":0:/src/app/components/about/CommunityAndMetrics.tsx:10:12:459:335:e:div:etete", children: [ 16225 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bio8", _fgB: 1790697590168, className: "text-4xl font-bold text-[#EFBB0F] mb-2", "data-fg-bio8": ":0:/src/app/components/about/CommunityAndMetrics.tsx:11:14:546:65:e:div:t", children: "20+" }), 16226 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bio10", _fgB: 1790697590168, className: "font-bold text-lg mb-2", "data-fg-bio10": ":0:/src/app/components/about/CommunityAndMetrics.tsx:12:14:625:71:e:h3:t", children: "Years in Transit Technology" }),
16227 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bio12", _fgB: 1790697590168, className: "text-slate-400 text-sm", "data-fg-bio12": ":0:/src/app/components/about/CommunityAndMetrics.tsx:13:14:710:66:e:p:t", children: "Deep industry expertise." }) 16228 ] }), 16229 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bio14", _fgB: 1790697590168, className: "p-6 border border-slate-700 rounded-2xl bg-slate-800/50", "data-fg-bio14": ":0:/src/app/components/about/CommunityAndMetrics.tsx:16:12:818:337:e:div:etete", children: [ 16230 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bio15", _fgB: 1790697590168, className: "text-4xl font-bold text-[#EFBB0F] mb-2", "data-fg-bio15": ":0:/src/app/components/about/CommunityAndMetrics.tsx:17:14:905:67:e:div:t", children: "3.4M+" }), 16231 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bio17", _fgB: 1790697590168, className: "font-bold text-lg mb-2", "data-fg-bio17": ":0:/src/app/components/about/CommunityAndMetrics.tsx:18:14:986:64:e:h3:t", children: "Annual Trips Powered" }), 16232 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bio19", _fgB: 1790697590168, className: "text-slate-400 text-sm", "data-fg-bio19": ":0:/src/app/components/about/CommunityAndMetrics.tsx:19:14:1064:73:e:p:t", children: "Reliable scale and performance." }) 16233 ] }),
16234 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bio21", _fgB: 1790697590168, className: "p-6 border border-slate-700 rounded-2xl bg-slate-800/50", "data-fg-bio21": ":0:/src/app/components/about/CommunityAndMetrics.tsx:22:12:1179:358:e:div:etete", children: [ 16235 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bio22", _fgB: 1790697590168, className: "text-4xl font-bold text-[#EFBB0F] mb-2", "data-fg-bio22": ":0:/src/app/components/about/CommunityAndMetrics.tsx:23:14:1266:64:e:div:t", children: "5+" }), 16236 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bio24", _fgB: 1790697590168, className: "font-bold text-lg mb-2", "data-fg-bio24": ":0:/src/app/components/about/CommunityAndMetrics.tsx:24:14:1344:68:e:h3:t", children: "Transit Verticals Served" }), 16237 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bio26", _fgB: 1790697590168, className: "text-slate-400 text-sm", "data-fg-bio26": ":0:/src/app/components/about/CommunityAndMetrics.tsx:25:14:1426:93:e:p:t", children: "Paratransit, Fixed Route, Microtransit, NEMT, Taxi." }) 16238 ] }) 16239 ] }) 16240 ] }) }); 16241} 16242const _M = { 16243 hidden: { opacity: 0 }, 16244 visible: { 16245 opacity: 1, 16246 transition: { 16247 staggerChildren: 0.05, 16248 delayChildren: 0.1 16249 } 16250 } 16251}, bM = { 16252 hidden: { opacity: 0, y: 20, filter: "blur(8px)" }, 16253 visible: { 16254 opacity: 1, 16255 y: 0, 16256 filter: "blur(0px)", 16257 transition: { 16258 duration: 0.6, 16259 ease: "easeOut" 16260 } 16261 } 16262}; 16263function vM() { 16264 const { openContactModal: t } = Z(), e = "Ready to Move Forward Together?".split(" "); 16265 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "deji0", _fgB: 1790697590170, _fgD: !0, id: "contact", className: "py-32 px-6 bg-white text-center relative z-20", "data-fg-deji0": ":0:/src/app/components/about/AboutCTA.tsx:34:5:678:1690:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "deji1", _fgB: 1790697590170, className: "max-w-4xl mx-auto relative z-10", "data-fg-deji1": ":0:/src/app/components/about/AboutCTA.tsx:35:7:765:1588:e:div:ete", children: [ 16266 /* @__PURE__ */ i( 16267 a, 16268 { 16269 _fgT: m.h2, 16270 _fgS: "deji2", 16271 _fgB: 1790697590170, 16272 className: "text-4xl md:text-6xl font-bold text-black mb-8 tracking-tight font-space-grotesk flex flex-wrap justify-center gap-x-3", 16273 variants: _M, 16274 initial: "hidden", 16275 whileInView: "visible", 16276 viewport: { once: !0, amount: 0.8, margin: "0px 0px -100px 0px" }, 16277 "data-fg-deji2": ":0:/src/app/components/about/AboutCTA.tsx:36:9:823:516:e:motion.h2:x", 16278 children: e.map((s, r) => /* @__PURE__ */ i(a, { _fgT: m.span, _fgS: "deji4", _fgB: 1790697590170, variants: bM, "data-fg-deji4": ":0:/src/app/components/about/AboutCTA.tsx:44:13:1211:93:e:motion.span:x", children: s }, r)) 16279 } 16280 ), 16281 /* @__PURE__ */ c( 16282 a, 16283 { 16284 _fgT: m.div, 16285 _fgS: "deji6", 16286 _fgB: 1790697590170, 16287 initial: { opacity: 0, y: 20 }, 16288 whileInView: { opacity: 1, y: 0 }, 16289 viewport: { once: !0, amount: 1 }, 16290 exit: { opacity: 0, y: -20 }, 16291 transition: { delay: 0.6, duration: 0.5 }, 16292 className: "flex flex-col md:flex-row gap-4 justify-center items-center", 16293 "data-fg-deji6": ":0:/src/app/components/about/AboutCTA.tsx:50:9:1349:991:e:motion.div:ete", 16294 children: [
16295 /* @__PURE__ */ i( 16296 a, 16297 { 16298 _fgT: E, 16299 _fgS: "deji7", 16300 _fgB: 1790697590170, 16301 href: "/contact", 16302 className: "uppercase bg-[#0056B3] text-white font-bold tracking-widest rounded-full px-10 py-5 hover:bg-[#004494] hover:text-white transition-colors duration-300 shadow-xl cursor-pointer inline-block", 16303 "data-fg-deji7": ":0:node_modules/wouter:58:11:1690:299:e:Link:t:::::C4yE", 16304 children: "Contact Us" 16305 } 16306 ), 16307 /* @__PURE__ */ i( 16308 a, 16309 { 16310 _fgT: "button", 16311 _fgS: "deji9", 16312 _fgB: 1790697590170, 16313 onClick: t, 16314 className: "uppercase bg-white text-[#0056B3] border border-[#0056B3] font-bold tracking-widest rounded-full px-10 py-5 hover:bg-slate-50 transition-colors duration-300 shadow-md cursor-pointer", 16315 "data-fg-deji9": ":0:/src/app/components/about/AboutCTA.tsx:64:11:2000:318:e:button:t", 16316 children: "Schedule a Meeting" 16317 } 16318 ) 16319 ] 16320 } 16321 ) 16322 ] }) }); 16323} 16324function yM() { 16325 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "cbev0", _fgB: 1790697589426, _fgD: !0, className: "min-h-screen bg-white", "data-fg-cbev0": ":0:/src/app/pages/AboutPage.tsx:10:5:419:173:e:main:etetetetete:1", children: [ 16326 /* @__PURE__ */ i(a, { _fgT: dM, _fgS: "cbev1", _fgB: 1790697589426, "data-fg-cbev1": ":0:/src/app/pages/AboutPage.tsx:11:7:466:13:e:AboutHero::::::DbRX" }), 16327 /* @__PURE__ */ i(a, { _fgT: fM, _fgS: "cbev2", _fgB: 1790697589426, "data-fg-cbev2": ":0:/src/app/pages/AboutPage.tsx:12:7:486:12:e:OurStory::::::BMGz" }), 16328 /* @__PURE__ */ i(a, { _fgT: mM, _fgS: "cbev3", _fgB: 1790697589426, "data-fg-cbev3": ":0:/src/app/pages/AboutPage.tsx:13:7:505:14:e:Leadership::::::DH35" }), 16329 /* @__PURE__ */ i(a, { _fgT: xM, _fgS: "cbev4", _fgB: 1790697589426, "data-fg-cbev4": ":0:/src/app/pages/AboutPage.tsx:14:7:526:18:e:SuccessMetrics::::::DOBy" }), 16330 /* @__PURE__ */ i(a, { _fgT: vM, _fgS: "cbev5", _fgB: 1790697589426, "data-fg-cbev5": ":0:/src/app/pages/AboutPage.tsx:15:7:551:12:e:AboutCTA::::::CYqT" }), 16331 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "cbev6", _fgB: 1790697589426, "data-fg-cbev6": ":0:/src/app/pages/AboutPage.tsx:16:7:570:10:e:Footer::::::B1Vv" }) 16332 ] }); 16333} 16334function wM() { 16335 const { openContactModal: t } = Z(); 16336 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "c95y0", _fgB: 1790697590075, _fgD: !0, className: "relative min-h-[85vh] flex items-center bg-slate-900 overflow-hidden", "data-fg-c95y0": ":0:/src/app/components/ivr/IVRHero.tsx:9:5:235:2553:e:section:xtete:1", children: [ 16337 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c95y2", _fgB: 1790697590075, className: "absolute inset-0 z-0", "data-fg-c95y2": ":0:/src/app/components/ivr/IVRHero.tsx:11:7:363:612:e:div:ete", children: [
16338 /* @__PURE__ */ i( 16339 a, 16340 { 16341 _fgT: "img", 16342 _fgS: "c95y3", 16343 _fgB: 1790697590075, 16344 src: "https://images.unsplash.com/photo-1768963094717-fce4aa93b411?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxwZXJzb24lMjB0YWxraW5nJTIwb24lMjBwaG9uZSUyMHRyYW5zaXQlMjBidXMlMjBzdG9wfGVufDF8fHx8MTc3MTAwODQ1NHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 16345 alt: "Passenger using phone for transit", 16346 className: "w-full h-full object-cover opacity-30", 16347 "data-fg-c95y3": ":0:/src/app/components/ivr/IVRHero.tsx:12:9:410:443:e:img" 16348 } 16349 ), 16350 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c95y4", _fgB: 1790697590075, className: "absolute inset-0 bg-gradient-to-r from-slate-900 via-slate-900/90 to-transparent", "data-fg-c95y4": ":0:/src/app/components/ivr/IVRHero.tsx:17:9:862:100:e:div" }) 16351 ] }), 16352 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c95y5", _fgB: 1790697590075, className: "container mx-auto px-6 relative z-10", "data-fg-c95y5": ":0:/src/app/components/ivr/IVRHero.tsx:20:7:983:1790:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c95y6", _fgB: 1790697590075, className: "max-w-4xl", "data-fg-c95y6": ":0:/src/app/components/ivr/IVRHero.tsx:21:9:1046:1714:e:div:e", children: /* @__PURE__ */ c( 16353 a, 16354 { 16355 _fgT: m.div, 16356 _fgS: "c95y7", 16357 _fgB: 1790697590075, 16358 initial: { opacity: 0, x: -50 }, 16359 animate: { opacity: 1, x: 0 }, 16360 transition: { duration: 0.8 }, 16361 "data-fg-c95y7": ":0:/src/app/components/ivr/IVRHero.tsx:22:11:1084:1661:e:motion.div:etetete", 16362 children: [
16363 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c95y8", _fgB: 1790697590075, className: "inline-block px-3 py-1 rounded-full bg-blue-500/20 border border-blue-400/30 text-blue-300 text-sm font-bold tracking-widest uppercase mb-6 backdrop-blur-sm", "data-fg-c95y8": ":0:/src/app/components/ivr/IVRHero.tsx:27:13:1251:223:e:div:t", children: "Telephony Suite" }), 16364 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "c95y10", _fgB: 1790697590075, className: "text-4xl md:text-6xl font-light text-white mb-6 font-[Space_Grotesk] leading-tight", "data-fg-c95y10": ":0:/src/app/components/ivr/IVRHero.tsx:30:13:1487:267:e:h1:tete", children: [ 16365 "Interactive Voice Response (IVR) System: ", 16366 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c95y12", _fgB: 1790697590075, "data-fg-c95y12": ":0:/src/app/components/ivr/IVRHero.tsx:31:56:1642:6:e:br" }), 16367 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c95y13", _fgB: 1790697590075, className: "font-bold text-[#EFBB0F]", "data-fg-c95y13": ":0:/src/app/components/ivr/IVRHero.tsx:32:15:1663:73:e:span:t", children: "The Telephony Component" }) 16368 ] }),
16369 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c95y15", _fgB: 1790697590075, className: "text-xl text-slate-300 mb-8 leading-relaxed max-w-2xl", "data-fg-c95y15": ":0:/src/app/components/ivr/IVRHero.tsx:34:13:1767:437:e:p:t", children: "A complete, integrated telephony suite providing a robust, reliable, and accessible communication channel for your transit riders. Seamlessly integrated into our core platform, the IVR system empowers passengers to manage trips, receive real-time updates, and interact with your service 24/7 without requiring direct staff intervention." }), 16370 /* @__PURE__ */ c( 16371 a, 16372 { 16373 _fgT: "button", 16374 _fgS: "c95y17", 16375 _fgB: 1790697590075, 16376 onClick: t, 16377 className: "group inline-flex items-center gap-3 bg-[#0056B3] text-white px-8 py-4 rounded-full font-bold text-lg hover:bg-[#004494] transition-all duration-300 shadow-[0_0_20px_rgba(0,86,179,0.5)] hover:shadow-[0_0_30px_rgba(0,86,179,0.7)] cursor-pointer", 16378 "data-fg-c95y17": ":0:/src/app/components/ivr/IVRHero.tsx:38:13:2230:491:e:button:te", 16379 children: [ 16380 "Schedule a Consultation",
16381 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "c95y19", _fgB: 1790697590075, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-c95y19": ":0:node_modules/lucide-react:43:15:2616:83:e:ArrowRight::::::s5N" }) 16382 ] 16383 } 16384 ) 16385 ] 16386 } 16387 ) }) }) 16388 ] }); 16389} 16390function TM() { 16391 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bdgi0", _fgB: 1790697590079, _fgD: !0, className: "py-20 bg-white", "data-fg-bdgi0": ":0:/src/app/components/ivr/IVRIntro.tsx:5:5:84:730:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bdgi1", _fgB: 1790697590079, className: "max-w-4xl mx-auto px-6 text-center", "data-fg-bdgi1": ":0:/src/app/components/ivr/IVRIntro.tsx:6:7:127:672:e:div:e", children: /* @__PURE__ */ i( 16392 a, 16393 { 16394 _fgT: m.p, 16395 _fgS: "bdgi2", 16396 _fgB: 1790697590079, 16397 initial: { opacity: 0, y: 20 }, 16398 whileInView: { opacity: 1, y: 0 }, 16399 viewport: { once: !0 }, 16400 transition: { duration: 0.8 }, 16401 className: "text-xl md:text-2xl font-light leading-relaxed text-slate-600", 16402 "data-fg-bdgi2": ":0:/src/app/components/ivr/IVRIntro.tsx:7:9:188:598:e:motion.p:t", 16403 children: '"This system is not merely an answering machine; it is an extension of your digital transit management tools, ensuring that passengers without smartphone access, or those who prefer the simplicity of a phone call, receive the same high-quality service and up-to-the-minute information as app users."' 16404 } 16405 ) }) }); 16406} 16407const SM = [ 16408 { 16409 icon: $7, 16410 title: "Automated Trip Management", 16411 desc: "Allows riders to book, cancel, or reschedule existing rides using voice commands or keypad input.", 16412 benefit: "Reduces the need to speak to an agent, simplifying common requests and providing instant service." 16413 }, 16414 { 16415 icon: It, 16416 title: "Real-Time Trip Status & ETA", 16417 desc: "Provides up-to-the-minute status updates on their scheduled ride, including the calculated Estimated Time of Arrival.", 16418 benefit: "Eliminates anxiety about vehicle location and arrival time, improving the overall waiting experience." 16419 }, 16420 { 16421 icon: Q7, 16422 title: "Will Call Activation", 16423 desc: "Allows riders with an open-ended return trip (e.g., from a medical facility) to instantly activate their pickup by calling the system.", 16424 benefit: "Provides control and flexibility, eliminating the need for riders to wait for a return vehicle until they are ready." 16425 }, 16426 { 16427 icon: mc, 16428 title: "Outbound Notifications", 16429 desc: "Automatically calls or texts riders with critical alerts regarding trip confirmations, service delays, or vehicle arrival warnings.", 16430 benefit: "Ensures riders are proactively informed, reducing no-shows and preventing missed pickups." 16431 }, 16432 { 16433 icon: F3, 16434 title: "Eligibility & Account Verification", 16435 desc: "Quickly verifies a riderâs eligibility status, account balance, and subsidy information upon entry into the system.", 16436 benefit: "Expedites service by ensuring the rider is routed appropriately and has access to all eligible features." 16437 } 16438]; 16439function BM() { 16440 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "dfyu0", _fgB: 1790697590078, _fgD: !0, className: "py-24 bg-slate-50", "data-fg-dfyu0": ":0:/src/app/components/ivr/IVRCapabilities.tsx:45:5:1821:1815:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dfyu1", _fgB: 1790697590078, className: "max-w-7xl mx-auto px-6", "data-fg-dfyu1": ":0:/src/app/components/ivr/IVRCapabilities.tsx:46:7:1867:1754:e:div:ete", children: [ 16441 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dfyu2", _fgB: 1790697590078, className: "text-center mb-16", "data-fg-dfyu2": ":0:/src/app/components/ivr/IVRCapabilities.tsx:47:9:1916:363:e:div:e", children: /* @__PURE__ */ i( 16442 a, 16443 { 16444 _fgT: m.h2, 16445 _fgS: "dfyu3", 16446 _fgB: 1790697590078, 16447 initial: { opacity: 0, y: 20 }, 16448 whileInView: { opacity: 1, y: 0 }, 16449 viewport: { once: !0 }, 16450 className: "text-3xl md:text-5xl font-light text-slate-900 mb-6 font-[Space_Grotesk]",
16451 "data-fg-dfyu3": ":0:/src/app/components/ivr/IVRCapabilities.tsx:48:11:1962:302:e:motion.h2:t", 16452 children: "Core Capabilities" 16453 } 16454 ) }), 16455 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dfyu5", _fgB: 1790697590078, className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", "data-fg-dfyu5": ":0:/src/app/components/ivr/IVRCapabilities.tsx:58:9:2289:1319:e:div:x", children: SM.map((t, e) => /* @__PURE__ */ c( 16456 a, 16457 { 16458 _fgT: m.div, 16459 _fgS: "dfyu7", 16460 _fgB: 1790697590078, 16461 initial: { opacity: 0, y: 20 }, 16462 whileInView: { opacity: 1, y: 0 }, 16463 viewport: { once: !0 }, 16464 transition: { delay: e * 0.1 }, 16465 className: "bg-white p-8 rounded-3xl border border-slate-100 shadow-sm hover:shadow-xl transition-all duration-300 group", 16466 "data-fg-dfyu7": ":0:/src/app/components/ivr/IVRCapabilities.tsx:60:13:2414:1165:e:motion.div:etetete", 16467 children: [ 16468 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dfyu8", _fgB: 1790697590078, className: "w-14 h-14 rounded-2xl bg-blue-50 text-[#0056B3] flex items-center justify-center mb-6 group-hover:bg-[#0056B3] group-hover:text-white transition-colors", "data-fg-dfyu8": ":0:/src/app/components/ivr/IVRCapabilities.tsx:68:15:2792:233:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "dfyu9", _fgB: 1790697590078, size: 28, "data-fg-dfyu9": ":0:/src/app/components/ivr/IVRCapabilities.tsx:69:17:2978:26:e:feature.icon" }) }),
16469 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dfyu10", _fgB: 1790697590078, className: "text-xl font-bold text-slate-900 mb-3", "data-fg-dfyu10": ":0:/src/app/components/ivr/IVRCapabilities.tsx:71:15:3040:74:e:h3:x", children: t.title }), 16470 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dfyu12", _fgB: 1790697590078, className: "text-slate-600 mb-6 leading-relaxed", "data-fg-dfyu12": ":0:/src/app/components/ivr/IVRCapabilities.tsx:72:15:3129:101:e:p:x", children: t.desc }), 16471 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dfyu14", _fgB: 1790697590078, className: "pt-6 border-t border-slate-100", "data-fg-dfyu14": ":0:/src/app/components/ivr/IVRCapabilities.tsx:75:15:3245:308:e:div:ete", children: [ 16472 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dfyu15", _fgB: 1790697590078, className: "block text-xs font-bold uppercase tracking-wider text-[#EFBB0F] mb-2", "data-fg-dfyu15": ":0:/src/app/components/ivr/IVRCapabilities.tsx:76:17:3310:101:e:span:t", children: "Benefit" }), 16473 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "dfyu17", _fgB: 1790697590078, className: "text-sm text-slate-500 italic", "data-fg-dfyu17": ":0:/src/app/components/ivr/IVRCapabilities.tsx:77:17:3428:104:e:p:txt", children: [ 16474 '"', 16475 t.benefit, 16476 '"' 16477 ] }) 16478 ] }) 16479 ] 16480 }, 16481 e 16482 )) }) 16483 ] }) }); 16484} 16485const kM = globalThis.__GLOBALS__.getAssetURL("556b66442bdd07a3411dea30d154b77af0cae742.png"); 16486function AM() { 16487 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "efpi0", _fgB: 1790697590080, _fgD: !0, className: "py-24 bg-white overflow-hidden", "data-fg-efpi0": ":0:/src/app/components/ivr/IVRIntegration.tsx:6:5:171:2002:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "efpi1", _fgB: 1790697590080, className: "max-w-7xl mx-auto px-6", "data-fg-efpi1": ":0:/src/app/components/ivr/IVRIntegration.tsx:7:7:230:1928:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "efpi2", _fgB: 1790697590080, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-efpi2": ":0:/src/app/components/ivr/IVRIntegration.tsx:8:9:279:1866:e:div:ete", children: [ 16488 /* @__PURE__ */ c( 16489 a, 16490 { 16491 _fgT: m.div, 16492 _fgS: "efpi3", 16493 _fgB: 1790697590080, 16494 initial: { opacity: 0, x: -50 }, 16495 whileInView: { opacity: 1, x: 0 }, 16496 viewport: { once: !0 }, 16497 transition: { duration: 0.8 }, 16498 "data-fg-efpi3": ":0:/src/app/components/ivr/IVRIntegration.tsx:9:11:347:949:e:motion.div:ete", 16499 children: [
16500 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "efpi4", _fgB: 1790697590080, className: "text-3xl md:text-5xl font-light text-slate-900 mb-8 font-[Space_Grotesk]", "data-fg-efpi4": ":0:/src/app/components/ivr/IVRIntegration.tsx:15:13:556:222:e:h2:tete", children: [ 16501 "Seamless Platform ", 16502 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "efpi6", _fgB: 1790697590080, "data-fg-efpi6": ":0:/src/app/components/ivr/IVRIntegration.tsx:16:33:678:6:e:br" }), 16503 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "efpi7", _fgB: 1790697590080, className: "font-bold text-[#0056B3]", "data-fg-efpi7": ":0:/src/app/components/ivr/IVRIntegration.tsx:17:15:699:61:e:span:t", children: "Integration" }) 16504 ] }), 16505 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "efpi9", _fgB: 1790697590080, className: "prose prose-lg text-slate-600", "data-fg-efpi9": ":0:/src/app/components/ivr/IVRIntegration.tsx:19:13:791:481:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "efpi10", _fgB: 1790697590080, className: "leading-relaxed", "data-fg-efpi10": ":0:/src/app/components/ivr/IVRIntegration.tsx:20:15:853:400:e:p:t", children: "The IVR system is designed for complete, real-time data flow with the core transit software. Every trip status update (dispatched, en route, arrived) is instantly available via the IVR, the rider-facing mobile app, and the dispatch center. This seamless integration ensures accuracy and consistency across all communication channels." }) }) 16506 ] 16507 } 16508 ), 16509 /* @__PURE__ */ c( 16510 a, 16511 { 16512 _fgT: m.div, 16513 _fgS: "efpi12", 16514 _fgB: 1790697590080, 16515 initial: { opacity: 0, x: 50 }, 16516 whileInView: { opacity: 1, x: 0 }, 16517 viewport: { once: !0 }, 16518 transition: { duration: 0.8 }, 16519 className: "relative", 16520 "data-fg-efpi12": ":0:/src/app/components/ivr/IVRIntegration.tsx:26:11:1308:822:e:motion.div:etxtete", 16521 children: [
16522 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "efpi13", _fgB: 1790697590080, className: "relative rounded-[2rem] overflow-hidden shadow-2xl aspect-video", "data-fg-efpi13": ":0:/src/app/components/ivr/IVRIntegration.tsx:33:13:1549:277:e:div:e", children: /* @__PURE__ */ i( 16523 a, 16524 { 16525 _fgT: "img", 16526 _fgS: "efpi14", 16527 _fgB: 1790697590080, 16528 src: kM, 16529 alt: "Seamless Platform Integration", 16530 className: "w-full h-full object-contain", 16531 "data-fg-efpi14": ":0:/src/app/components/ivr/IVRIntegration.tsx:34:15:1645:162:e:img" 16532 } 16533 ) }), 16534 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "efpi16", _fgB: 1790697590080, className: "absolute -bottom-10 -left-10 w-40 h-40 bg-[#EFBB0F]/10 rounded-full blur-3xl -z-10", "data-fg-efpi16": ":0:/src/app/components/ivr/IVRIntegration.tsx:42:13:1891:102:e:div" }), 16535 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "efpi17", _fgB: 1790697590080, className: "absolute -top-10 -right-10 w-40 h-40 bg-[#0056B3]/10 rounded-full blur-3xl -z-10", "data-fg-efpi17": ":0:/src/app/components/ivr/IVRIntegration.tsx:43:13:2006:100:e:div" }) 16536 ] 16537 } 16538 ) 16539 ] }) }) }); 16540} 16541function NM() { 16542 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "1us0", _fgB: 1790697590082, _fgD: !0, className: "py-24 bg-slate-900 text-white relative overflow-hidden", "data-fg-1us0": ":0:/src/app/components/ivr/IVRAccessibility.tsx:7:5:214:2934:e:section:ete:1", children: [ 16543 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "1us1", _fgB: 1790697590082, className: "absolute inset-0 z-0", "data-fg-1us1": ":0:/src/app/components/ivr/IVRAccessibility.tsx:8:7:297:240:e:div:ete", children: [
16544 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us2", _fgB: 1790697590082, className: "absolute top-0 right-0 w-1/2 h-full bg-[#0056B3]/20 blur-[100px]", "data-fg-1us2": ":0:/src/app/components/ivr/IVRAccessibility.tsx:9:10:345:84:e:div" }), 16545 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us3", _fgB: 1790697590082, className: "absolute bottom-0 left-0 w-1/2 h-full bg-[#EFBB0F]/5 blur-[100px]", "data-fg-1us3": ":0:/src/app/components/ivr/IVRAccessibility.tsx:10:10:439:85:e:div" }) 16546 ] }), 16547 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us4", _fgB: 1790697590082, className: "max-w-7xl mx-auto px-6 relative z-10", "data-fg-1us4": ":0:/src/app/components/ivr/IVRAccessibility.tsx:13:7:545:2588:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "1us5", _fgB: 1790697590082, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-1us5": ":0:/src/app/components/ivr/IVRAccessibility.tsx:14:9:608:2512:e:div:ete", children: [ 16548 /* @__PURE__ */ i( 16549 a, 16550 { 16551 _fgT: m.div, 16552 _fgS: "1us6", 16553 _fgB: 1790697590082, 16554 initial: { opacity: 0, scale: 0.95 }, 16555 whileInView: { opacity: 1, scale: 1 }, 16556 viewport: { once: !0 }, 16557 transition: { duration: 0.8 }, 16558 className: "order-2 lg:order-1", 16559 "data-fg-1us6": ":0:/src/app/components/ivr/IVRAccessibility.tsx:15:11:676:1385:e:motion.div:e", 16560 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "1us7", _fgB: 1790697590082, className: "relative rounded-[2rem] overflow-hidden shadow-2xl border border-white/10 aspect-[4/3]", "data-fg-1us7": ":0:/src/app/components/ivr/IVRAccessibility.tsx:22:14:938:1099:e:div:etete", children: [
16561 /* @__PURE__ */ i( 16562 a, 16563 { 16564 _fgT: Le, 16565 _fgS: "1us8", 16566 _fgB: 1790697590082, 16567 src: "https://images.unsplash.com/photo-1758691030826-86a149b6278b?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzZW5pb3IlMjBjaXRpemVuJTIwdXNpbmclMjBwaG9uZSUyMGhhcHB5fGVufDF8fHx8MTc3MTAwODQ1NHww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 16568 alt: "Senior citizen using accessible phone service", 16569 className: "w-full h-full object-cover", 16570 "data-fg-1us8": ":0:/src/app/components/ivr/IVRAccessibility.tsx:23:15:1057:464:e:ImageWithFallback::::::EBG" 16571 } 16572 ), 16573 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us9", _fgB: 1790697590082, className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent", "data-fg-1us9": ":0:/src/app/components/ivr/IVRAccessibility.tsx:28:15:1536:82:e:div" }), 16574 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us10", _fgB: 1790697590082, className: "absolute bottom-6 left-6 right-6", "data-fg-1us10": ":0:/src/app/components/ivr/IVRAccessibility.tsx:29:15:1633:385:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "1us11", _fgB: 1790697590082, className: "inline-flex items-center gap-2 bg-white/20 backdrop-blur-md px-4 py-2 rounded-lg text-sm font-medium border border-white/20", "data-fg-1us11": ":0:/src/app/components/ivr/IVRAccessibility.tsx:30:17:1700:297:e:div:ete", children: [
16575 /* @__PURE__ */ i(a, { _fgT: b2, _fgS: "1us12", _fgB: 1790697590082, size: 16, className: "text-[#EFBB0F]", "data-fg-1us12": ":0:node_modules/lucide-react:31:19:1860:52:e:CheckCircle::::::C4Wc" }), 16576 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "1us13", _fgB: 1790697590082, "data-fg-1us13": ":0:/src/app/components/ivr/IVRAccessibility.tsx:32:19:1931:43:e:span:t", children: "Accessible to All Demographics" }) 16577 ] }) }) 16578 ] }) 16579 } 16580 ), 16581 /* @__PURE__ */ c( 16582 a, 16583 { 16584 _fgT: m.div, 16585 _fgS: "1us15", 16586 _fgB: 1790697590082, 16587 initial: { opacity: 0, x: 50 }, 16588 whileInView: { opacity: 1, x: 0 }, 16589 viewport: { once: !0 }, 16590 transition: { duration: 0.8 }, 16591 className: "order-1 lg:order-2", 16592 "data-fg-1us15": ":0:/src/app/components/ivr/IVRAccessibility.tsx:38:11:2073:1032:e:motion.div:ete", 16593 children: [ 16594 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "1us16", _fgB: 1790697590082, className: "text-3xl md:text-5xl font-light mb-8 font-[Space_Grotesk]", "data-fg-1us16": ":0:/src/app/components/ivr/IVRAccessibility.tsx:45:13:2324:200:e:h2:tete", children: [ 16595 "Accessibility & ",
16596 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "1us18", _fgB: 1790697590082, "data-fg-1us18": ":0:/src/app/components/ivr/IVRAccessibility.tsx:46:31:2429:6:e:br" }), 16597 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "1us19", _fgB: 1790697590082, className: "font-bold text-[#EFBB0F]", "data-fg-1us19": ":0:/src/app/components/ivr/IVRAccessibility.tsx:47:15:2450:56:e:span:t", children: "Equity" }) 16598 ] }), 16599 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "1us21", _fgB: 1790697590082, className: "prose prose-lg text-slate-300", "data-fg-1us21": ":0:/src/app/components/ivr/IVRAccessibility.tsx:49:13:2537:544:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "1us22", _fgB: 1790697590082, className: "leading-relaxed", "data-fg-1us22": ":0:/src/app/components/ivr/IVRAccessibility.tsx:50:15:2599:463:e:p:t", children: "By offering full functionality via IVR, we guarantee service equity for all rider demographics, including older populations and individuals without reliable internet or smartphone access. The automated self-service features for booking, canceling, and tracking trips significantly offload repetitive tasks from your customer service representatives, allowing them to focus on complex rider needs." }) }) 16600 ] 16601 } 16602 ) 16603 ] }) }) 16604 ] }); 16605} 16606function IM() { 16607 const { openContactModal: t } = Z(); 16608 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cgdy0", _fgB: 1790697590083, _fgD: !0, className: "py-24 bg-white relative overflow-hidden", "data-fg-cgdy0": ":0:/src/app/components/ivr/IVRCTA.tsx:9:5:241:1567:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cgdy1", _fgB: 1790697590083, className: "max-w-5xl mx-auto px-6 text-center relative z-10", "data-fg-cgdy1": ":0:/src/app/components/ivr/IVRCTA.tsx:10:7:309:1484:e:div:e", children: /* @__PURE__ */ c( 16609 a, 16610 { 16611 _fgT: m.div, 16612 _fgS: "cgdy2", 16613 _fgB: 1790697590083, 16614 initial: { opacity: 0, scale: 0.9 }, 16615 whileInView: { opacity: 1, scale: 1 }, 16616 viewport: { once: !0 }, 16617 transition: { duration: 0.5 }, 16618 className: "bg-[#0056B3] rounded-[3rem] p-12 md:p-20 shadow-2xl relative overflow-hidden", 16619 "data-fg-cgdy2": ":0:/src/app/components/ivr/IVRCTA.tsx:11:9:384:1396:e:motion.div:xtete", 16620 children: [
16621 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cgdy4", _fgB: 1790697590083, className: "absolute inset-0 opacity-10 pattern-grid-lg", "data-fg-cgdy4": ":0:/src/app/components/ivr/IVRCTA.tsx:19:11:725:63:e:div" }), 16622 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cgdy5", _fgB: 1790697590083, className: "relative z-10 flex flex-col items-center", "data-fg-cgdy5": ":0:/src/app/components/ivr/IVRCTA.tsx:21:11:810:948:e:div:etete", children: [ 16623 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cgdy6", _fgB: 1790697590083, className: "w-16 h-16 bg-white/10 rounded-full flex items-center justify-center mb-8 backdrop-blur-sm border border-white/20", "data-fg-cgdy6": ":0:/src/app/components/ivr/IVRCTA.tsx:22:13:881:206:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cgdy7", _fgB: 1790697590083, className: "text-white", size: 32, "data-fg-cgdy7": ":0:node_modules/lucide-react:23:15:1026:42:e:Phone::::::DmpI" }) }), 16624 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cgdy8", _fgB: 1790697590083, className: "text-3xl md:text-5xl font-bold text-white mb-8 font-[Space_Grotesk] tracking-tight", "data-fg-cgdy8": ":0:/src/app/components/ivr/IVRCTA.tsx:26:13:1113:182:e:h2:t", children: "Deploy a Full-Featured IVR System for Your Agency." }),
16625 /* @__PURE__ */ c( 16626 a, 16627 { 16628 _fgT: "button", 16629 _fgS: "cgdy10", 16630 _fgB: 1790697590083, 16631 onClick: t, 16632 className: "group inline-flex items-center gap-3 bg-white text-[#0056B3] px-10 py-5 rounded-full font-bold text-lg hover:bg-blue-50 transition-all duration-300 shadow-xl cursor-pointer", 16633 "data-fg-cgdy10": ":0:/src/app/components/ivr/IVRCTA.tsx:30:13:1321:420:e:button:te", 16634 children: [ 16635 "Schedule a Consultation", 16636 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cgdy12", _fgB: 1790697590083, size: 20, className: "group-hover:translate-x-1 transition-transform", "data-fg-cgdy12": ":0:node_modules/lucide-react:35:15:1636:83:e:ArrowRight::::::s5N" }) 16637 ] 16638 } 16639 ) 16640 ] }) 16641 ] 16642 } 16643 ) }) }); 16644} 16645function PM() { 16646 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "knz0", _fgB: 1790697589427, _fgD: !0, className: "min-h-screen bg-white", "data-fg-knz0": ":0:/src/app/pages/IVRPage.tsx:11:5:478:201:e:main:etetetetetete:1", children: [ 16647 /* @__PURE__ */ i(a, { _fgT: wM, _fgS: "knz1", _fgB: 1790697589427, "data-fg-knz1": ":0:/src/app/pages/IVRPage.tsx:12:7:525:11:e:IVRHero::::::ZvL" }), 16648 /* @__PURE__ */ i(a, { _fgT: TM, _fgS: "knz2", _fgB: 1790697589427, "data-fg-knz2": ":0:/src/app/pages/IVRPage.tsx:13:7:543:12:e:IVRIntro::::::3Y7" }), 16649 /* @__PURE__ */ i(a, { _fgT: BM, _fgS: "knz3", _fgB: 1790697589427, "data-fg-knz3": ":0:/src/app/pages/IVRPage.tsx:14:7:562:19:e:IVRCapabilities::::::CwHn" }), 16650 /* @__PURE__ */ i(a, { _fgT: AM, _fgS: "knz4", _fgB: 1790697589427, "data-fg-knz4": ":0:/src/app/pages/IVRPage.tsx:15:7:588:18:e:IVRIntegration::::::cmD" }), 16651 /* @__PURE__ */ i(a, { _fgT: NM, _fgS: "knz5", _fgB: 1790697589427, "data-fg-knz5": ":0:/src/app/pages/IVRPage.tsx:16:7:613:20:e:IVRAccessibility::::::EBa3" }), 16652 /* @__PURE__ */ i(a, { _fgT: IM, _fgS: "knz6", _fgB: 1790697589427, "data-fg-knz6": ":0:/src/app/pages/IVRPage.tsx:17:7:640:10:e:IVRCTA::::::D7DZ" }), 16653 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "knz7", _fgB: 1790697589427, "data-fg-knz7": ":0:/src/app/pages/IVRPage.tsx:18:7:657:10:e:Footer::::::B1Vv" }) 16654 ] }); 16655} 16656const CM = Symbol.for("@supabase/supabase-js.traceContextExtractor"); 16657function FM() { 16658 return globalThis[CM]; 16659} 16660function j3(t, e) { 16661 var s = {}; 16662 for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && e.indexOf(r) < 0 && (s[r] = t[r]); 16663 if (t != null && typeof Object.getOwnPropertySymbols == "function") 16664 for (var n = 0, r = Object.getOwnPropertySymbols(t); n < r.length; n++) 16665 e.indexOf(r[n]) < 0 && Object.prototype.propertyIsEnumerable.call(t, r[n]) && (s[r[n]] = t[r[n]]); 16666 return s; 16667} 16668function EM(t, e, s, r) { 16669 function n(o) { 16670 return o instanceof s ? o : new s(function(L) { 16671 L(o); 16672 }); 16673 } 16674 return new (s || (s = Promise))(function(o, L) { 16675 function d(f) { 16676 try { 16677 g(r.next(f)); 16678 } catch (p) { 16679 L(p); 16680 } 16681 } 16682 function l(f) { 16683 try { 16684 g(r.throw(f)); 16685 } catch (p) { 16686 L(p); 16687 } 16688 } 16689 function g(f) { 16690 f.done ? o(f.value) : n(f.value).then(d, l); 16691 } 16692 g((r = r.apply(t, e || [])).next()); 16693 }); 16694} 16695const RM = (t) => t ? (...e) => t(...e) : (...e) => fetch(...e); 16696class s0 extends Error { 16697 constructor(e, s = "FunctionsError", r) { 16698 super(e), this.name = s, this.context = r; 16699 } 16700 toJSON() { 16701 return { 16702 name: this.name, 16703 message: this.message, 16704 context: this.context 16705 }; 16706 } 16707} 16708class DM extends s0 { 16709 constructor(e) { 16710 super("Failed to send a request to the Edge Function", "FunctionsFetchError", e); 16711 } 16712} 16713class qa extends s0 { 16714 constructor(e) { 16715 super("Relay Error invoking the Edge Function", "FunctionsRelayError", e); 16716 } 16717} 16718class Ua extends s0 { 16719 constructor(e) { 16720 super("Edge Function returned a non-2xx status code", "FunctionsHttpError", e); 16721 } 16722} 16723var K4; 16724(function(t) { 16725 t.Any = "any", t.ApNortheast1 = "ap-northeast-1", t.ApNortheast2 = "ap-northeast-2", t.ApSouth1 = "ap-south-1", t.ApSoutheast1 = "ap-southeast-1", t.ApSoutheast2 = "ap-southeast-2", t.CaCentral1 = "ca-central-1", t.EuCentral1 = "eu-central-1", t.EuWest1 = "eu-west-1", t.EuWest2 = "eu-west-2", t.EuWest3 = "eu-west-3", t.SaEast1 = "sa-east-1", t.UsEast1 = "us-east-1", t.UsWest1 = "us-west-1", t.UsWest2 = "us-west-2"; 16726})(K4 || (K4 = {})); 16727class zM { 16728 /** 16729 * Creates a new Functions client bound to an Edge Functions URL. 16730 * 16731 * @example Using supabase-js (recommended) 16732 * ```ts 16733 * import { createClient } from '@supabase/supabase-js' 16734 * 16735 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 16736 * const { data, error } = await supabase.functions.invoke('hello-world') 16737 * ``` 16738 * 16739 * @category Edge Functions 16740 * 16741 * @example Standalone import for bundle-sensitive environments 16742 * ```ts 16743 * import { FunctionsClient, FunctionRegion } from '@supabase/functions-js' 16744 * 16745 * const functions = new FunctionsClient('https://xyzcompany.supabase.co/functions/v1', { 16746 * headers: { apikey: 'your-publishable-key' }, 16747 * region: FunctionRegion.UsEast1, 16748 * }) 16749 * ``` 16750 */ 16751 constructor(e, { headers: s = {}, customFetch: r, region: n = K4.Any } = {}) { 16752 this.url = e, this.headers = s, this.region = n, this.fetch = RM(r); 16753 } 16754 /** 16755 * Updates the authorization header 16756 * @param token - the new jwt token sent in the authorisation header 16757 * 16758 * @category Edge Functions 16759 * 16760 * @example Setting the authorization header 16761 * ```ts 16762 * functions.setAuth(session.access_token) 16763 * ``` 16764 */ 16765 setAuth(e) { 16766 this.headers.Authorization = `Bearer ${e}`; 16767 } 16768 /** 16769 * Invokes a function 16770 * @param functionName - The name of the Function to invoke. 16771 * @param options - Options for invoking the Function. 16772 * @example 16773 * ```ts 16774 * const { data, error } = await functions.invoke('hello-world', { 16775 * body: { name: 'Ada' }, 16776 * }) 16777 * ``` 16778 * 16779 * @category Edge Functions 16780 * 16781 * @remarks 16782 * - The API key is sent in the `apikey` header. The `Authorization` header is reserved 16783 * for the signed-in user's JWT (or a custom auth token) â when there is no session, a 16784 * new-format API key (`sb_publishable_â¦` / `sb_secret_â¦`) is not sent as a Bearer token. 16785 * - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec. 16786 * - When you pass in a body to your function, we automatically attach the C
16786ontent-Type header for `Blob`, `ArrayBuffer`, `File`, `FormData` and `String`. If it doesn't match any of these types we assume the payload is `json`, serialize it and attach the `Content-Type` header as `application/json`. You can override this behavior by passing in a `Content-Type` header of your own. 16787 * - Responses are automatically parsed as `json`, `blob` and `form-data` depending on the `Content-Type` header sent by your function. Responses are parsed as `text` by default. 16788 * 16789 * @example Basic invocation 16790 * ```js 16791 * const { data, error } = await supabase.functions.invoke('hello', { 16792 * body: { foo: 'bar' } 16793 * }) 16794 * ``` 16795 * 16796 * @exampleDescription Error handling 16797 * A `FunctionsHttpError` error is returned if your function throws an error, `FunctionsRelayError` if the Supabase Relay has an error processing your function and `FunctionsFetchError` if there is a network error in calling your function. Log the full error object so fields like `name`, `context`, and any structured body aren't hidden. 16798 * 16799 * @example Error handling 16800 * ```js 16801 * import { FunctionsHttpError, FunctionsRelayError, FunctionsFetchError } from "@supabase/supabase-js"; 16802 * 16803 * const { data, error } = await supabase.functions.invoke('hello', { 16804 * headers: { 16805 * "my-custom-header": 'my-custom-header-value' 16806 * }, 16807 * body: { foo: 'bar' } 16808 * }) 16809 * 16810 * if (error instanceof FunctionsHttpError) { 16811 * const errorMessage = await error.context.json() 16812 * console.error('Function returned an error', errorMessage) 16813 * } else if (error instanceof FunctionsRelayError) { 16814 * console.error('Relay error:', error) 16815 * } else if (error instanceof FunctionsFetchError) { 16816 * console.error('Fetch error:', error) 16817 * } 16818 * ``` 16819 * 16820 * @exampleDescription Passing custom headers 16821 * You can pass custom headers to your function. Note: supabase-js automatically passes the `Authorization` header with the signed in user's JWT. 16822 * 16823 * @example Passing custom headers 16824 * ```js 16825 * const { data, error } = await supabase.functions.invoke('hello', { 16826 * headers: { 16827 * "my-custom-header": 'my-custom-header-value' 16828 * }, 16829 * body: { foo: 'bar' } 16830 * }) 16831 * ``` 16832 * 16833 * @exampleDescription Calling with DELETE HTTP verb 16834 * You can also set the HTTP verb to `DELETE` when calling your Edge Function. 16835 * 16836 * @example Calling with DELETE HTTP verb 16837 * ```js 16838 * const { data, error } = await supabase.functions.invoke('hello', { 16839 * headers: { 16840 * "my-custom-header": 'my-custom-header-value' 16841 * }, 16842 * body: { foo: 'bar' }, 16843 * method: 'DELETE' 16844 * }) 16845 * ``` 16846 * 16847 * @exampleDescription Invoking a Function in the UsEast1 region 16848 * Here are the available regions: 16849 * - `FunctionRegion.Any` 16850 * - `FunctionRegion.ApNortheast1` 16851 * - `FunctionRegion.ApNortheast2` 16852 * - `FunctionRegion.ApSouth1` 16853 * - `FunctionRegion.ApSoutheast1` 16854 * - `FunctionRegion.ApSoutheast2` 16855 * - `FunctionRegion.CaCentral1` 16856 * - `FunctionRegion.EuCentral1` 16857 * - `FunctionRegion.EuWest1` 16858 * - `FunctionRegion.EuWest2` 16859 * - `FunctionRegion.EuWest3` 16860 * - `FunctionRegion.SaEast1` 16861 * - `FunctionRegion.UsEast1` 16862 * - `FunctionRegion.UsWest1` 16863 * - `FunctionRegion.UsWest2` 16864 * 16865 * @example Invoking a Function in the UsEast1 region 16866 * ```js 16867 * import { createClient, FunctionRegion } from '@supabase/supabase-js' 16868 * 16869 * const { data, error } = await supabase.functions.invoke('hello', { 16870 * body: { foo: 'bar' }, 16871 * region: FunctionRegion.UsEast1 16872 * }) 16873 * ``` 16874 * 16875 * @exampleDescription Calling with GET HTTP verb 16876 * You can also set the HTTP verb to `GET` when calling your Edge Function. 16877 * 16878 * @example Calling with GET HTTP verb 16879 * ```js 16880 * const { data, error } = await supabase.functions.invoke('hello', { 16881 * headers: { 16882 * "my-custom-header": 'my-custom-header-value' 16883 * }, 16884 * method: 'GET' 16885 * }) 16886 * ``` 16887 * 16888 * @example Standalone client invoke 16889 * ```ts 16890 * const { data, error } = await functions.invoke('hello-world', { 16891 * body: { name: 'Ada' }, 16892 * }) 16893 * ``` 16894 */ 16895 invoke(e) { 16896 return EM(this, arguments, void 0, function* (s, r = {}) { 16897 var n, o; 16898 let L, d, l;
16899 try { 16900 const { headers: g, method: f, body: p, signal: M, timeout: u } = r; 16901 let h = {}, { region: x } = r; 16902 x || (x = this.region); 16903 const _ = new URL(`${this.url}/${s}`); 16904 x && x !== "any" && (h["x-region"] = x, _.searchParams.set("forceFunctionRegion", x)); 16905 let v; 16906 const y = !!g && Object.keys(g).some((w) => w.toLowerCase() === "content-type"); 16907 p && !y ? typeof Blob < "u" && p instanceof Blob || p instanceof ArrayBuffer ? (h["Content-Type"] = "application/octet-stream", v = p) : typeof p == "string" ? (h["Content-Type"] = "text/plain", v = p) : typeof FormData < "u" && p instanceof FormData ? v = p : (h["Content-Type"] = "application/json", v = JSON.stringify(p)) : p && typeof p != "string" && !(typeof Blob < "u" && p instanceof Blob) && !(p instanceof ArrayBuffer) && !(typeof FormData < "u" && p instanceof FormData) ? v = JSON.stringify(p) : v = p; 16908 let b = M; 16909 u && (d = new AbortController(), L = setTimeout(() => d.abort(), u), M ? (b = d.signal, l = () => d.abort(), M.addEventListener("abort", l)) : b = d.signal); 16910 const S = yield this.fetch(_.toString(), { 16911 method: f || "POST", 16912 // headers priority is (high to low): 16913 // 1. invoke-level headers 16914 // 2. client-level headers 16915 // 3. default Content-Type header 16916 headers: Object.assign(Object.assign(Object.assign({}, h), this.headers), g), 16917 body: v, 16918 signal: b 16919 }).catch((w) => { 16920 throw new DM(w); 16921 }), k = S.headers.get("x-relay-error"); 16922 if (k && k === "true") 16923 throw new qa(S); 16924 if (!S.ok) 16925 throw new Ua(S); 16926 let A = ((n = S.headers.get("Content-Type")) !== null && n !== void 0 ? n : "text/plain").split(";")[0].trim().toLowerCase(), I; 16927 return A === "application/json" ? I = yield S.json() : A === "application/octet-stream" || A === "application/pdf" ? I = yield S.blob() : A === "text/event-stream" ? I = S : A === "multipart/form-data" ? I = yield S.formData() : I = yield S.text(), { data: I, error: null, response: S }; 16928 } catch (g) { 16929 return { 16930 data: null, 16931 error: g, 16932 response: g instanceof Ua || g instanceof qa ? g.context : void 0 16933 }; 16934 } finally { 16935 L && clearTimeout(L), l && ((o = r.signal) === null || o === void 0 || o.removeEventListener("abort", l)); 16936 } 16937 }); 16938 } 16939} 16940var ut = class extends Error { 16941 /** 16942 * @example 16943 * ```ts 16944 * import PostgrestError from '@supabase/postgrest-js' 16945 * 16946 * throw new PostgrestError({ 16947 * message: 'Row level security prevented the request', 16948 * details: 'RLS denied the insert', 16949 * hint: 'Check your policies', 16950 * code: 'PGRST301', 16951 * }) 16952 * ``` 16953 */ 16954 constructor(t) { 16955 super(t.message), this.name = "PostgrestError", this.details = t.details, this.hint = t.hint, this.code = t.code; 16956 } 16957 toJSON() { 16958 return { 16959 name: this.name, 16960 message: this.message, 16961 details: this.details, 16962 hint: this.hint, 16963 code: this.code 16964 }; 16965 } 16966}; 16967const di = 3, Ga = (t) => Math.min(1e3 * 2 ** t, 3e4), jM = [520, 503], gi = [ 16968 "GET", 16969 "HEAD", 16970 "OPTIONS" 16971]; 16972function r2(t) { 16973 "@babel/helpers - typeof"; 16974 return r2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { 16975 return typeof e; 16976 } : function(e) { 16977 return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; 16978 }, r2(t); 16979} 16980function OM(t, e) { 16981 if (r2(t) != "object" || !t) return t; 16982 var s = t[Symbol.toPrimitive]; 16983 if (s !== void 0) { 16984 var r = s.call(t, e); 16985 if (r2(r) != "object") return r; 16986 throw new TypeError("@@toPrimitive must return a primitive value."); 16987 } 16988 return (e === "string" ? String : Number)(t); 16989} 16990function VM(t) { 16991 var e = OM(t, "string"); 16992 return r2(e) == "symbol" ? e : e + ""; 16993} 16994function HM(t, e, s) { 16995 return (e = VM(e)) in t ? Object.defineProperty(t, e, { 16996 value: s, 16997 enumerable: !0, 16998 configurable: !0, 16999 writable: !0 17000 }) : t[e] = s, t; 17001} 17002function Ja(t, e) { 17003 var s = Object.keys(t); 17004 if (Object.getOwnPropertySymbols) { 17005 var r = Object.getOwnPropertySymbols(t); 17006 e && (r = r.filter(function(n) { 17007 return Object.getOwnPropertyDescriptor(t, n).enumerable; 17008 })), s.push.apply(s, r); 17009 } 17010 return s; 17011} 17012function V1(t) { 17013 for (var e = 1; e < arguments.length; e++) { 17014 var s = arguments[e] != null ? arguments[e] : {};
17015 e % 2 ? Ja(Object(s), !0).forEach(function(r) { 17016 HM(t, r, s[r]); 17017 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(s)) : Ja(Object(s)).forEach(function(r) { 17018 Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(s, r)); 17019 }); 17020 } 17021 return t; 17022} 17023function Ka(t, e) { 17024 return new Promise((s) => { 17025 if (e?.aborted) { 17026 s(); 17027 return; 17028 } 17029 const r = setTimeout(() => { 17030 e?.removeEventListener("abort", n), s(); 17031 }, t); 17032 function n() { 17033 clearTimeout(r), s(); 17034 } 17035 e?.addEventListener("abort", n); 17036 }); 17037} 17038function ZM(t, e, s, r) { 17039 return !(!r || s >= di || !gi.includes(t) || !jM.includes(e)); 17040} 17041async function fi(t, e, s, r) { 17042 let n = 0; 17043 for (; ; ) { 17044 const d = V1({}, s.headers); 17045 n > 0 && (d["X-Retry-Count"] = String(n)); 17046 let l; 17047 try { 17048 l = await t(e, { 17049 method: s.method, 17050 headers: d, 17051 body: s.body, 17052 signal: s.signal 17053 }); 17054 } catch (g) { 17055 if (g?.name === "AbortError" || g?.code === "ABORT_ERR" || !gi.includes(s.method)) throw g; 17056 if (r && n < di) { 17057 const f = Ga(n); 17058 n++, await Ka(f, s.signal); 17059 continue; 17060 } 17061 throw g; 17062 } 17063 if (ZM(s.method, l.status, n, r)) { 17064 var o, L; 17065 const g = (o = (L = l.headers) === null || L === void 0 ? void 0 : L.get("Retry-After")) !== null && o !== void 0 ? o : null, f = g !== null ? Math.max(0, parseInt(g, 10) || 0) * 1e3 : Ga(n); 17066 await l.text(), n++, await Ka(f, s.signal); 17067 continue; 17068 } 17069 return l; 17070 } 17071} 17072var WM = class { 17073 /** 17074 * Creates a builder configured for a specific PostgREST request. 17075 * 17076 * @example Using supabase-js (recommended) 17077 * ```ts 17078 * import { createClient } from '@supabase/supabase-js' 17079 * 17080 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 17081 * const { data, error } = await supabase.from('users').select('*') 17082 * ``` 17083 * 17084 * @category Database 17085 * 17086 * @example Standalone import for bundle-sensitive environments 17087 * ```ts 17088 * import { PostgrestQueryBuilder } from '@supabase/postgrest-js' 17089 * 17090 * const builder = new PostgrestQueryBuilder( 17091 * new URL('https://xyzcompany.supabase.co/rest/v1/users'), 17092 * { headers: new Headers({ apikey: 'your-publishable-key' }) } 17093 * ) 17094 * ``` 17095 */ 17096 constructor(t) { 17097 var e, s, r, n, o; 17098 this.shouldThrowOnError = !1, this.retryEnabled = !0, this.method = t.method, this.url = t.url, this.headers = new Headers(t.headers), this.schema = t.schema, this.body = t.body, this.shouldThrowOnError = (e = t.shouldThrowOnError) !== null && e !== void 0 ? e : !1, this.signal = t.signal, this.isMaybeSingle = (s = t.isMaybeSingle) !== null && s !== void 0 ? s : !1, this.shouldStripNulls = (r = t.shouldStripNulls) !== null && r !== void 0 ? r : !1, this.urlLengthLimit = (n = t.urlLengthLimit) !== null && n !== void 0 ? n : 8e3, this.retryEnabled = (o = t.retry) !== null && o !== void 0 ? o : !0, t.fetch ? this.fetch = t.fetch : this.fetch = fetch; 17099 } 17100 /** 17101 * If there's an error with the query, throwOnError will reject the promise by 17102 * throwing the error instead of returning it as part of a successful response. 17103 * 17104 * {@link https://github.com/supabase/supabase-js/issues/92} 17105 * 17106 * @category Database 17107 * @subcategory Using modifiers 17108 */ 17109 throwOnError() { 17110 return this.shouldThrowOnError = !0, this; 17111 } 17112 /** 17113 * Strip null values from the response data. Properties with `null` values 17114 * will be omitted from the returned JSON objects. 17115 * 17116 * Requires PostgREST 11.2.0+. 17117 * 17118 * {@link https://docs.postgrest.org/en/stable/references/api/resource_representation.html#stripped-nulls} 17119 * 17120 * @category Database 17121 * @subcategory Using modifiers 17122 * 17123 * @example With `select()` 17124 * ```ts 17125 * const { data, error } = await supabase 17126 * .from('characters') 17127 * .select() 17128 * .stripNulls() 17129 * ``` 17130 * 17131 * @exampleSql With `select()` 17132 * ```sql 17133 * create table 17134 * characters (id int8 primary key, name text, bio text); 17135 * 17136 * insert into 17137 * characters (id, name, bio) 17138 * values 17139 * (1, 'Luke', null), 17140 * (2, 'Leia', 'Princess of Alderaan'); 17141 * ``` 17142 * 17143 * @exampleResponse With `select()` 17144 * ```json 17145 * { 17146 * "data": [ 17147 * { 17148 * "id": 1, 17149 * "name": "Luke" 17150 * }, 17151 * { 17152 * "id": 2, 17153 * "name": "Leia", 17154 * "bio": "Princess of Alderaan" 17155 * } 17156 * ], 17157 * "status": 200, 17158 * "statusText": "OK" 17159 * } 17160 * ``` 17161 */ 17162 stripNulls() { 17163 if (this.headers.get("Accept") === "text/csv") throw new Error("stripNulls() cannot be used with csv()"); 17164 return this.shouldStripNulls = !0, this; 17165 } 17166 /** 17167 * Set an HTTP header on this single PostgREST request, overriding any header 17168 * with the same name set on the client. 17169 * 17170 * This is an advanced escape hatch for one-off needs (passing a custom 17171 * `Authorization` for a single query, attaching a tracing header, etc.). 17172 * Most callers do not need it: configure client-wide headers via the 17173 * `headers` option when constructing the client, and authentication via 17174 * Supabase Auth. 17175 * 17176 * @param name - HTTP header name 17177 * @param value - HTTP header value 17178 * 17179 * @category Database 17180 * @subcategory Using modifiers 17181 */ 17182 setHeader(t, e) { 17183 return this.headers = new Headers(this.headers), this.headers.set(t, e), this; 17184 } 17185 /** 17186 * @category Database 17187 * @subcategory Using modifiers 17188 * 17189 * Configure retry behavior for this request. 17190 * 17191 * By default, retries are enabled for idempotent requests (GET, HEAD, OPTIONS) 17192 * that fail with network errors or specific HTTP status codes (503, 520). 17193 * Retries use exponential backoff (1s, 2s, 4s) with a maximum of 3 attempts. 17194 * 17195 * @param enabled - Whether to enable retries for this request 17196 * 17197 * @example 17198 * ```ts 17199 * // Disable retries for a specific query 17200 * const { data, error } = await supabase 17201 * .from('users') 17202 * .select() 17203 * .retry(false) 17204 * ``` 17205 */ 17206 retry(t) { 17207 return this.retryEnabled = t, this; 17208 } 17209 then(t, e) { 17210 var s = this; 17211 if (this.schema === void 0 || (["GET", "HEAD"].includes(this.method) ? this.headers.set("Accept-Profile", this.schema) : this.headers.set("Content-Profile", this.schema)), this.method !== "GET" && this.method !== "HEAD" && this.headers.set("Content-Type", "application/json"), this.shouldStripNulls) { 17212 const L = this.headers.get("Accept"); 17213 L === "application/vnd.pgrst.object+json" ? this.headers.set("Accept", "application/vnd.pgrst.object+json;nulls=stripped") : (!L || L === "application/json") && this.headers.set("Accept", "application/vnd.pgrst.array+json;nulls=stripped"); 17214 } 17215 const r = this.fetch; 17216 let o = (async () => { 17217 const L = {};
17218 s.headers.forEach((l, g) => { 17219 L[g] = l; 17220 }); 17221 const d = await fi(r, s.url.toString(), { 17222 method: s.method, 17223 headers: L, 17224 body: JSON.stringify(s.body, (l, g) => typeof g == "bigint" ? g.toString() : g), 17225 signal: s.signal 17226 }, s.retryEnabled); 17227 return await s.processResponse(d); 17228 })(); 17229 return this.shouldThrowOnError || (o = o.catch((L) => { 17230 var d; 17231 let l = "", g = "", f = ""; 17232 const p = L?.cause; 17233 if (p) { 17234 var M, u, h, x; 17235 const y = (M = p?.message) !== null && M !== void 0 ? M : "", b = (u = p?.code) !== null && u !== void 0 ? u : ""; 17236 l = `${(h = L?.name) !== null && h !== void 0 ? h : "FetchError"}: ${L?.message}`, l += ` 17237 17238Caused by: ${(x = p?.name) !== null && x !== void 0 ? x : "Error"}: ${y}`, b && (l += ` (${b})`), p?.stack && (l += ` 17239${p.stack}`); 17240 } else { 17241 var _; 17242 l = (_ = L?.stack) !== null && _ !== void 0 ? _ : ""; 17243 } 17244 const v = this.url.toString().length; 17245 return L?.name === "AbortError" || L?.code === "ABORT_ERR" ? (f = "", g = "Request was aborted (timeout or manual cancellation)", v > this.urlLengthLimit && (g += `. Note: Your request URL is ${v} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)) : (p?.name === "HeadersOverflowError" || p?.code === "UND_ERR_HEADERS_OVERFLOW") && (f = "", g = "HTTP headers exceeded server limits (typically 16KB)", v > this.urlLengthLimit && (g += `. Your request URL is ${v} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)), { 17246 success: !1, 17247 error: { 17248 message: `${(d = L?.name) !== null && d !== void 0 ? d : "FetchError"}: ${L?.message}`, 17249 details: l, 17250 hint: g, 17251 code: f 17252 }, 17253 data: null, 17254 count: null, 17255 status: 0, 17256 statusText: "" 17257 }; 17258 })), o.then(t, e); 17259 } 17260 /** 17261 * Process a fetch response and return the standardized postgrest response. 17262 */ 17263 async processResponse(t) { 17264 var e = this; 17265 let s = null, r = null, n = null, o = t.status, L = t.statusText; 17266 if (t.ok) { 17267 var d, l; 17268 if (e.method !== "HEAD") { 17269 var g; 17270 const u = await t.text(); 17271 if (u !== "") if (e.headers.get("Accept") === "text/csv") r = u; 17272 else if (e.headers.get("Accept") && (!((g = e.headers.get("Accept")) === null || g === void 0) && g.includes("application/vnd.pgrst.plan+text"))) r = u; 17273 else try { 17274 r = JSON.parse(u); 17275 } catch { 17276 if (s = { message: u }, r = null, e.shouldThrowOnError) throw new ut({ 17277 message: u, 17278 details: "", 17279 hint: "", 17280 code: "" 17281 }); 17282 } 17283 } 17284 const p = (d = e.headers.get("Prefer")) === null || d === void 0 ? void 0 : d.match(/count=(exact|planned|estimated)/), M = (l = t.headers.get("content-range")) === null || l === void 0 ? void 0 : l.split("/"); 17285 if (p && M && M.length > 1 && (n = parseInt(M[1])), e.isMaybeSingle && Array.isArray(r)) if (r.length > 1) { 17286 if (s = { 17287 code: "PGRST116", 17288 details: `Results contain ${r.length} rows, application/vnd.pgrst.object+json requires 1 row`, 17289 hint: null, 17290 message: "JSON object requested, multiple (or no) rows returned" 17291 }, r = null, n = null, o = 406, L = "Not Acceptable", e.shouldThrowOnError) { 17292 var f; 17293 throw new ut(V1(V1({}, s), {}, { hint: (f = s.hint) !== null && f !== void 0 ? f : "" })); 17294 } 17295 } else r.length === 1 ? r = r[0] : r = null; 17296 } else { 17297 const p = await t.text(); 17298 try { 17299 s = JSON.parse(p), Array.isArray(s) && t.status === 404 && (r = [], s = null, o = 200, L = "OK"); 17300 } catch { 17301 t.status === 404 && p === "" ? (o = 204, L = "No Content") : s = { message: p }; 17302 } 17303 if (s && e.shouldThrowOnError) throw new ut(s); 17304 } 17305 return { 17306 success: s === null, 17307 error: s, 17308 data: r, 17309 count: n, 17310 status: o, 17311 statusText: L 17312 }; 17313 } 17314 /** 17315 * Override the type of the returned `data`. 17316 * 17317 * @typeParam NewResult - The new result type to override with 17318 * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead 17319 * 17320 * @category Database 17321 * @subcategory Using modifiers 17322 */ 17323 returns() { 17324 return this; 17325 } 17326 /** 17327 * Override the type of the returned `data` field in the response. 17328 * 17329 * @typeParam NewResult - The new type to cast the response data to 17330 * @typeParam Options - Optional type configuration (defaults to { merge: true }) 17331 * @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true) 17332 * @example 17333 * ```typescript 17334 * // Merge with existing types (default behavior) 17335 * const query = supabase 17336 * .from('users') 17337 * .select() 17338 * .overrideTypes<{ custom_field: string }>() 17339 * 17340 * // Replace existing types completely 17341 * const replaceQuery = supabase 17342 * .from('users') 17343 * .select() 17344 * .overrideTypes<{ id: number; name: string }, { merge: false }>() 17345 * ``` 17346 * @returns A PostgrestBuilder instance with the new type 17347 * 17348 * @category Database 17349 * @subcategory Using modifiers 17350 * 17351 * @example Complete Override type of successful response 17352 * ```ts 17353 * const { data } = await supabase 17354 * .from('countries') 17355 * .select() 17356 * .overrideTypes<Array<MyType>, { merge: false }>() 17357 * ``` 17358 * 17359 * @exampleResponse Complete Override type of successful response 17360 * ```ts 17361 * let x: typeof data // MyType[] 17362 * ``` 17363 * 17364 * @example Complete Override type of object response 17365 * ```ts 17366 * const { data } = await supabase 17367 * .from('countries') 17368 * .select() 17369 * .maybeSingle() 17370 * .overrideTypes<MyType, { merge: false }>() 17371 * ``` 17372 * 17373 * @exampleResponse Complete Override type of object response 17374 * ```ts 17375 * let x: typeof data // MyType | null 17376 * ``` 17377 * 17378 * @example Partial Override type of successful response 17379 * ```ts 17380 * const { data } = await supabase 17381 * .from('countries') 17382 * .select() 17383 * .overrideTypes<Array<{ status: "A" | "B" }>>() 17384 * ``` 17385 * 17386 * @exampleResponse Partial Override type of successful response 17387 * ```ts 17388 * let x: typeof data // Array<CountryRowProperties & { status: "A" | "B" }> 17389 * ``` 17390 * 17391 * @example Partial Override type of object response 17392 * ```ts 17393 * const { data } = await supabase 17394 * .from('countries') 17395 * .select() 17396 * .maybeSingle() 17397 * .overrideTypes<{ status: "A" | "B" }>() 17398 * ``` 17399 * 17400 * @exampleResponse Partial Override type of object response 17401 * ```ts 17402 * let x: typeof data // CountryRowProperties & { status: "A" | "B" } | null 17403 * ``` 17404 * 17405 * @example Merge vs replace existing types 17406 * ```typescript 17407 * // Merge with existing types (default behavior) 17408 * const query = supabase 17409 * .from('users') 17410 * .select() 17411 * .overrideTypes<{ custom_field: string }>() 17412 * 17413 * // Replace existing types completely 17414 * const replaceQuery = supabase 17415 * .from('users') 17416 * .select() 17417 * .overrideTypes<{ id: number; name: string }, { merge: false }>() 17418 * ``` 17419 */ 17420 overrideTypes() { 17421 return this; 17422 } 17423}, $M = class extends WM { 17424 throwOnError() { 17425 return super.throwOnError(); 17426 } 17427 /** 17428 * Perform a SELECT on the query result. 17429 *
17430 * By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not 17431 * return modified rows. By calling this method, modified rows are returned in 17432 * `data`. 17433 * 17434 * @param columns - The columns to retrieve, separated by commas 17435 * 17436 * @category Database 17437 * @subcategory Using modifiers 17438 * 17439 * @example With `upsert()` 17440 * ```ts 17441 * const { data, error } = await supabase 17442 * .from('characters') 17443 * .upsert({ id: 1, name: 'Han Solo' }) 17444 * .select() 17445 * ``` 17446 * 17447 * @exampleSql With `upsert()` 17448 * ```sql 17449 * create table 17450 * characters (id int8 primary key, name text); 17451 * 17452 * insert into 17453 * characters (id, name) 17454 * values 17455 * (1, 'Han'); 17456 * ``` 17457 * 17458 * @exampleResponse With `upsert()` 17459 * ```json 17460 * { 17461 * "data": [ 17462 * { 17463 * "id": 1, 17464 * "name": "Han Solo" 17465 * } 17466 * ], 17467 * "status": 201, 17468 * "statusText": "" 17469 * } 17470 * ``` 17471 */ 17472 select(t) { 17473 let e = !1; 17474 const s = (t ?? "*").split("").map((r) => /\s/.test(r) && !e ? "" : (r === '"' && (e = !e), r)).join(""); 17475 return this.url.searchParams.set("select", s), this.headers.append("Prefer", "return=representation"), this; 17476 } 17477 /** 17478 * Order the query result by `column`. 17479 * 17480 * You can call this method multiple times to order by multiple columns. 17481 * 17482 * You can order referenced tables, but it only affects the ordering of the 17483 * parent table if you use `!inner` in the query. 17484 * 17485 * @param column - The column to order by 17486 * @param options - Named parameters 17487 * @param options.ascending - If `true`, the result will be in ascending order 17488 * @param options.nullsFirst - If `true`, `null`s appear first. If `false`, 17489 * `null`s appear last. 17490 * @param options.referencedTable - Set this to order a referenced table by 17491 * its columns 17492 * @param options.foreignTable - Deprecated, use `options.referencedTable` 17493 * instead 17494 * 17495 * @category Database 17496 * @subcategory Using modifiers 17497 * 17498 * @example With `select()` 17499 * ```ts 17500 * const { data, error } = await supabase 17501 * .from('characters') 17502 * .select('id, name') 17503 * .order('id', { ascending: false }) 17504 * ``` 17505 * 17506 * @exampleSql With `select()` 17507 * ```sql 17508 * create table 17509 * characters (id int8 primary key, name text); 17510 * 17511 * insert into 17512 * characters (id, name) 17513 * values 17514 * (1, 'Luke'), 17515 * (2, 'Leia'), 17516 * (3, 'Han'); 17517 * ``` 17518 * 17519 * @exampleResponse With `select()` 17520 * ```json 17521 * { 17522 * "data": [ 17523 * { 17524 * "id": 3, 17525 * "name": "Han" 17526 * }, 17527 * { 17528 * "id": 2, 17529 * "name": "Leia" 17530 * }, 17531 * { 17532 * "id": 1, 17533 * "name": "Luke" 17534 * } 17535 * ], 17536 * "status": 200, 17537 * "statusText": "OK" 17538 * } 17539 * ``` 17540 * 17541 * @exampleDescription On a referenced table 17542 * Ordering with `referencedTable` doesn't affect the ordering of the 17543 * parent table. 17544 * 17545 * @example On a referenced table 17546 * ```ts 17547 * const { data, error } = await supabase 17548 * .from('orchestral_sections') 17549 * .select(` 17550 * name, 17551 * instruments ( 17552 * name 17553 * ) 17554 * `) 17555 * .order('name', { referencedTable: 'instruments', ascending: false }) 17556 * 17557 * ``` 17558 * 17559 * @exampleSql On a referenced table 17560 * ```sql 17561 * create table 17562 * orchestral_sections (id int8 primary key, name text); 17563 * create table 17564 * instruments ( 17565 * id int8 primary key, 17566 * section_id int8 not null references orchestral_sections, 17567 * name text 17568 * ); 17569 * 17570 * insert into 17571 * orchestral_sections (id, name) 17572 * values 17573 * (1, 'strings'), 17574 * (2, 'woodwinds'); 17575 * insert into 17576 * instruments (id, section_id, name) 17577 * values 17578 * (1, 1, 'harp'),
17579 * (2, 1, 'violin'); 17580 * ``` 17581 * 17582 * @exampleResponse On a referenced table 17583 * ```json 17584 * { 17585 * "data": [ 17586 * { 17587 * "name": "strings", 17588 * "instruments": [ 17589 * { 17590 * "name": "violin" 17591 * }, 17592 * { 17593 * "name": "harp" 17594 * } 17595 * ] 17596 * }, 17597 * { 17598 * "name": "woodwinds", 17599 * "instruments": [] 17600 * } 17601 * ], 17602 * "status": 200, 17603 * "statusText": "OK" 17604 * } 17605 * ``` 17606 * 17607 * @exampleDescription Order parent table by a referenced table 17608 * Ordering with `referenced_table(col)` affects the ordering of the 17609 * parent table. 17610 * 17611 * @example Order parent table by a referenced table 17612 * ```ts 17613 * const { data, error } = await supabase 17614 * .from('instruments') 17615 * .select(` 17616 * name, 17617 * section:orchestral_sections ( 17618 * name 17619 * ) 17620 * `) 17621 * .order('section(name)', { ascending: true }) 17622 * 17623 * ``` 17624 * 17625 * @exampleSql Order parent table by a referenced table 17626 * ```sql 17627 * create table 17628 * orchestral_sections (id int8 primary key, name text); 17629 * create table 17630 * instruments ( 17631 * id int8 primary key, 17632 * section_id int8 not null references orchestral_sections, 17633 * name text 17634 * ); 17635 * 17636 * insert into 17637 * orchestral_sections (id, name) 17638 * values 17639 * (1, 'strings'), 17640 * (2, 'woodwinds'); 17641 * insert into 17642 * instruments (id, section_id, name) 17643 * values 17644 * (1, 2, 'flute'), 17645 * (2, 1, 'violin'); 17646 * ``` 17647 * 17648 * @exampleResponse Order parent table by a referenced table 17649 * ```json 17650 * { 17651 * "data": [ 17652 * { 17653 * "name": "violin", 17654 * "orchestral_sections": {"name": "strings"} 17655 * }, 17656 * { 17657 * "name": "flute", 17658 * "orchestral_sections": {"name": "woodwinds"} 17659 * } 17660 * ], 17661 * "status": 200, 17662 * "statusText": "OK" 17663 * } 17664 * ``` 17665 */ 17666 order(t, { ascending: e = !0, nullsFirst: s, foreignTable: r, referencedTable: n = r } = {}) { 17667 const o = n ? `${n}.order` : "order", L = this.url.searchParams.get(o); 17668 return this.url.searchParams.set(o, `${L ? `${L},` : ""}${t}.${e ? "asc" : "desc"}${s === void 0 ? "" : s ? ".nullsfirst" : ".nullslast"}`), this; 17669 } 17670 /** 17671 * Limit the query result by `rows`. 17672 * 17673 * @param rows - The maximum number of rows to return 17674 * @param options - Named parameters 17675 * @param options.referencedTable - Set this to limit rows of referenced 17676 * tables instead of the parent table 17677 * @param options.foreignTable - Deprecated, use `options.referencedTable` 17678 * instead 17679 * 17680 * @category Database 17681 * @subcategory Using modifiers 17682 * 17683 * @example With `select()` 17684 * ```ts 17685 * const { data, error } = await supabase 17686 * .from('characters') 17687 * .select('name') 17688 * .limit(1) 17689 * ``` 17690 * 17691 * @exampleSql With `select()` 17692 * ```sql 17693 * create table 17694 * characters (id int8 primary key, name text); 17695 * 17696 * insert into 17697 * characters (id, name) 17698 * values 17699 * (1, 'Luke'), 17700 * (2, 'Leia'), 17701 * (3, 'Han'); 17702 * ``` 17703 * 17704 * @exampleResponse With `select()` 17705 * ```json 17706 * { 17707 * "data": [ 17708 * { 17709 * "name": "Luke" 17710 * } 17711 * ], 17712 * "status": 200, 17713 * "statusText": "OK" 17714 * } 17715 * ``` 17716 * 17717 * @example On a referenced table 17718 * ```ts 17719 * const { data, error } = await supabase 17720 * .from('orchestral_sections') 17721 * .select(` 17722 * name, 17723 * instruments ( 17724 * name 17725 * ) 17726 * `) 17727 * .limit(1, { referencedTable: 'instruments' }) 17728 * ``` 17729 * 17730 * @exampleSql On a referenced table 17731 * ```sql 17732 * create table 17733 * orchestral_sections (id int8 primary key, name text); 17734 * create table 17735 * instruments ( 17736 * id int8 primary key, 17737 * section_id int8 not null references orchestral_sections, 17738 * name text 17739 * ); 17740 * 17741 * insert into 17742 * orchestral_sections (id, name) 17743 * values 17744 * (1, 'strings'); 17745 * insert into 17746 * instruments (id, section_id, name) 17747 * values 17748 * (1, 1, 'harp'),
17749 * (2, 1, 'violin'); 17750 * ``` 17751 * 17752 * @exampleResponse On a referenced table 17753 * ```json 17754 * { 17755 * "data": [ 17756 * { 17757 * "name": "strings", 17758 * "instruments": [ 17759 * { 17760 * "name": "violin" 17761 * } 17762 * ] 17763 * } 17764 * ], 17765 * "status": 200, 17766 * "statusText": "OK" 17767 * } 17768 * ``` 17769 */ 17770 limit(t, { foreignTable: e, referencedTable: s = e } = {}) { 17771 const r = typeof s > "u" ? "limit" : `${s}.limit`; 17772 return this.url.searchParams.set(r, `${t}`), this; 17773 } 17774 /** 17775 * Limit the query result by starting at an offset `from` and ending at the offset `to`. 17776 * Only records within this range are returned. 17777 * This respects the query order and if there is no order clause the range could behave unexpectedly. 17778 * The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third 17779 * and fourth rows of the query. 17780 * 17781 * @param from - The starting index from which to limit the result 17782 * @param to - The last index to which to limit the result 17783 * @param options - Named parameters 17784 * @param options.referencedTable - Set this to limit rows of referenced 17785 * tables instead of the parent table 17786 * @param options.foreignTable - Deprecated, use `options.referencedTable` 17787 * instead 17788 * 17789 * @category Database 17790 * @subcategory Using modifiers 17791 * 17792 * @example With `select()` 17793 * ```ts 17794 * const { data, error } = await supabase 17795 * .from('characters') 17796 * .select('name') 17797 * .range(0, 1) 17798 * ``` 17799 * 17800 * @exampleSql With `select()` 17801 * ```sql 17802 * create table 17803 * characters (id int8 primary key, name text); 17804 * 17805 * insert into 17806 * characters (id, name) 17807 * values 17808 * (1, 'Luke'), 17809 * (2, 'Leia'), 17810 * (3, 'Han'); 17811 * ``` 17812 * 17813 * @exampleResponse With `select()` 17814 * ```json 17815 * { 17816 * "data": [ 17817 * { 17818 * "name": "Luke" 17819 * }, 17820 * { 17821 * "name": "Leia" 17822 * } 17823 * ], 17824 * "status": 200, 17825 * "statusText": "OK" 17826 * } 17827 * ``` 17828 */ 17829 range(t, e, { foreignTable: s, referencedTable: r = s } = {}) { 17830 const n = typeof r > "u" ? "offset" : `${r}.offset`, o = typeof r > "u" ? "limit" : `${r}.limit`; 17831 return this.url.searchParams.set(n, `${t}`), this.url.searchParams.set(o, `${e - t + 1}`), this; 17832 } 17833 /** 17834 * Set the AbortSignal for the fetch request. 17835 * 17836 * @param signal - The AbortSignal to use for the fetch request 17837 * 17838 * @category Database 17839 * @subcategory Using modifiers 17840 * 17841 * @remarks 17842 * You can use this to set a timeout for the request. 17843 * 17844 * @exampleDescription Aborting requests in-flight 17845 * You can use an [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) to abort requests. 17846 * Note that `status` and `statusText` don't mean anything for aborted requests as the request wasn't fulfilled. 17847 * 17848 * @example Aborting requests in-flight 17849 * ```ts 17850 * const ac = new AbortController() 17851 * 17852 * const { data, error } = await supabase 17853 * .from('very_big_table') 17854 * .select() 17855 * .abortSignal(ac.signal) 17856 * 17857 * // Abort the request after 100 ms 17858 * setTimeout(() => ac.abort(), 100) 17859 * ``` 17860 * 17861 * @exampleResponse Aborting requests in-flight 17862 * ```json 17863 * { 17864 * "error": { 17865 * "message": "AbortError: The user aborted a request.", 17866 * "details": "", 17867 * "hint": "The request was aborted locally via the provided AbortSignal.", 17868 * "code": "" 17869 * }, 17870 * "status": 0, 17871 * "statusText": "" 17872 * } 17873 * 17874 * ``` 17875 * 17876 * @example Set a timeout 17877 * ```ts 17878 * const { data, error } = await supabase 17879 * .from('very_big_table') 17880 * .select() 17881 * .abortSignal(AbortSignal.timeout(1000 /* ms *\/)) 17882 * ``` 17883 * 17884 * @exampleResponse Set a timeout 17885 * ```json 17886 * { 17887 * "error": { 17888 * "message": "FetchError: The user aborted a request.", 17889 * "details": "", 17890 * "hint": "", 17891 * "code": "" 17892 * }, 17893 * "status": 0, 17894 * "statusText": "" 17895 * } 17896 * 17897 * ``` 17898 */ 17899 abortSignal(t) { 17900 return this.signal = t, this; 17901 } 17902 /** 17903 * Return `data` as a single object instead of an array of objects. 17904 * 17905 * Query result must be one row (e.g. using `.limit(1)`), otherwise this 17906 * returns an error. 17907 * 17908 * @category Database 17909 * @subcategory Using modifiers 17910 * 17911 * @example With `select()` 17912 * ```ts 17913 * const { data, error } = await supabase 17914 * .from('characters') 17915 * .select('name') 17916 * .limit(1) 17917 * .single() 17918 * ``` 17919 * 17920 * @exampleSql With `select()` 17921 * ```sql 17922 * create table 17923 * characters (id int8 primary key, name text); 17924 * 17925 * insert into 17926 * characters (id, name) 17927 * values 17928 * (1, 'Luke'), 17929 * (2, 'Leia'), 17930 * (3, 'Han'); 17931 * ``` 17932 * 17933 * @exampleResponse With `select()` 17934 * ```json 17935 * { 17936 * "data": { 17937 * "name": "Luke" 17938 * }, 17939 * "status": 200, 17940 * "statusText": "OK" 17941 * } 17942 * ``` 17943 */ 17944 single() { 17945 return this.headers.set("Accept", "application/vnd.pgrst.object+json"), this; 17946 } 17947 /** 17948 * Return `data` as a single object instead of an array of objects. 17949 * 17950 * Query result must be zero or one row (e.g. using `.limit(1)`), otherwise 17951 * this returns an error. 17952 * 17953 * @category Database 17954 * @subcategory Using modifiers 17955 * 17956 * @example With `select()` 17957 * ```ts 17958 * const { data, error } = await supabase 17959 * .from('characters') 17960 * .select() 17961 * .eq('name', 'Katniss') 17962 * .maybeSingle() 17963 * ``` 17964 * 17965 * @exampleSql With `select()` 17966 * ```sql 17967 * create table 17968 * characters (id int8 primary key, name text); 17969 * 17970 * insert into 17971 * characters (id, name) 17972 * values 17973 * (1, 'Luke'), 17974 * (2, 'Leia'), 17975 * (3, 'Han'); 17976 * ``` 17977 * 17978 * @exampleResponse With `select()` 17979 * ```json 17980 * { 17981 * "status": 200, 17982 * "statusText": "OK" 17983 * } 17984 * ``` 17985 */ 17986 maybeSingle() { 17987 return this.isMaybeSingle = !0, this; 17988 } 17989 /** 17990 * Return `data` as a string in CSV format. 17991 * 17992 * @category Database 17993 * @subcategory Using modifiers 17994 * 17995 * @exampleDescription Return data as CSV 17996 * By default, the data is returned in JSON format, but can also be returned as Comma Separated Values. 17997 * 17998 * @example Return data as CSV 17999 * ```ts 18000 * const { data, error } = await supabase 18001 * .from('characters') 18002 * .select() 18003 * .csv() 18004 * ``` 18005 * 18006 * @exampleSql Return data as CSV 18007 * ```sql 18008 * create table 18009 * characters (id int8 primary key, name text); 18010 * 18011 * insert into 18012 * characters (id, name) 18013 * values 18014 * (1, 'Luke'), 18015 * (2, 'Leia'), 18016 * (3, 'Han'); 18017 * ``` 18018 * 18019 * @exampleResponse Return data as CSV 18020 * ```json 18021 * { 18022 * "data": "id,name\n1,Luke\n2,Leia\n3,Han", 18023 * "status": 200, 18024 * "statusText": "OK" 18025 * } 18026 * ``` 18027 */ 18028 csv() { 18029 return this.headers.set("Accept", "text/csv"), this; 18030 } 18031 /** 18032 * Return `data` as an object in [GeoJSON](https://geojson.org) format. 18033 * 18034 * @category Database 18035 * @subcategory Using modifiers 18036 */ 18037 geojson() { 18038 return this.headers.set("Accept", "application/geo+json"), this; 18039 } 18040 /** 18041 * Return `data` as the EXPLAIN plan for the query. 18042 * 18043 * You need to enable the 18044 * [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain) 18045 * setting before using this method. 18046 *
18047 * @param options - Named parameters 18048 * 18049 * @param options.analyze - If `true`, the query will be executed and the 18050 * actual run time will be returned 18051 * 18052 * @param options.verbose - If `true`, the query identifier will be returned 18053 * and `data` will include the output columns of the query 18054 * 18055 * @param options.settings - If `true`, include information on configuration 18056 * parameters that affect query planning 18057 * 18058 * @param options.buffers - If `true`, include information on buffer usage 18059 * 18060 * @param options.wal - If `true`, include information on WAL record generation 18061 * 18062 * @param options.format - The format of the output, can be `"text"` (default) 18063 * or `"json"` 18064 * 18065 * @category Database 18066 * @subcategory Using modifiers 18067 * 18068 * @exampleDescription Get the execution plan 18069 * By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter. 18070 * 18071 * @example Get the execution plan 18072 * ```ts 18073 * const { data, error } = await supabase 18074 * .from('characters') 18075 * .select() 18076 * .explain() 18077 * ``` 18078 * 18079 * @exampleSql Get the execution plan 18080 * ```sql 18081 * create table 18082 * characters (id int8 primary key, name text); 18083 * 18084 * insert into 18085 * characters (id, name) 18086 * values 18087 * (1, 'Luke'), 18088 * (2, 'Leia'), 18089 * (3, 'Han'); 18090 * ``` 18091 * 18092 * @exampleResponse Get the execution plan 18093 * ```js 18094 * Aggregate (cost=33.34..33.36 rows=1 width=112) 18095 * -> Limit (cost=0.00..18.33 rows=1000 width=40) 18096 * -> Seq Scan on characters (cost=0.00..22.00 rows=1200 width=40) 18097 * ``` 18098 * 18099 * @exampleDescription Get the execution plan with analyze and verbose 18100 * By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter. 18101 * 18102 * @example Get the execution plan with analyze and verbose 18103 * ```ts 18104 * const { data, error } = await supabase 18105 * .from('characters') 18106 * .select() 18107 * .explain({analyze:true,verbose:true}) 18108 * ``` 18109 * 18110 * @exampleSql Get the execution plan with analyze and verbose 18111 * ```sql 18112 * create table 18113 * characters (id int8 primary key, name text); 18114 * 18115 * insert into 18116 * characters (id, name) 18117 * values 18118 * (1, 'Luke'), 18119 * (2, 'Leia'), 18120 * (3, 'Han'); 18121 * ``` 18122 * 18123 * @exampleResponse Get the execution plan with analyze and verbose 18124 * ```js 18125 * Aggregate (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1) 18126 * Output: NULL::bigint, count(ROW(characters.id, characters.name)), COALESCE(json_agg(ROW(characters.id, characters.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text) 18127 * -> Limit (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1) 18128 * Output: characters.id, characters.name 18129 * -> Seq Scan on public.characters (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1) 18130 * Output: characters.id, characters.name 18131 * Query Identifier: -4730654291623321173 18132 * Planning Time: 0.407 ms 18133 * Execution Time: 0.119 ms 18134 * ``` 18135 */ 18136 explain({ analyze: t = !1, verbose: e = !1, settings: s = !1, buffers: r = !1, wal: n = !1, format: o = "text" } = {}) { 18137 var L; 18138 const d = [ 18139 t ? "analyze" : null, 18140 e ? "verbose" : null, 18141 s ? "settings" : null, 18142 r ? "buffers" : null, 18143 n ? "wal" : null 18144 ].filter(Boolean).join("|"), l = (L = this.headers.get("Accept")) !== null && L !== void 0 ? L : "application/json"; 18145 return this.headers.set("Accept", `application/vnd.pgrst.plan+${o}; for="${l}"; options=${d};`), o === "json" ? this : this; 18146 } 18147 /** 18148 * Dry-run this request: execute the query but discard the changes. 18149 * 18150 * Server-side, PostgREST runs the query inside a transaction and rolls it back 18151 * instead of committing. The response still contains the data that *would* have 18152 * been returned â `RETURNING` clauses execute and RLS, triggers, and constraints 18153 * are all evaluated â but no row is actually inserted, updated, or deleted. 18154 * 18155 * This affects only the single request it is chained to. The JS caller has no 18156 * handle on the transaction: supabase-js does not group multiple queries into 18157 * one transaction. For multi-statement transactional logic, use a database 18158 * function (`supabase.rpc(...)`). 18159 * 18160 * Sets the `Prefer: tx=rollback` header. See PostgREST's docs on transaction 18161 * preferences for the underlying mechanism. 18162 * 18163 * @category Database 18164 * @subcategory Using modifiers 18165 * 18166 * @example Validate an insert without persisting 18167 * ```ts 18168 * const { data, error } = await supabase 18169 * .from('countries') 18170 * .insert({ name: 'France' }) 18171 * .select() 18172 * .rollback() 18173 * // `data` shows what would have been inserted; nothing is saved. 18174 * ``` 18175 */ 18176 rollback() { 18177 return this.headers.append("Prefer", "tx=rollback"), this; 18178 } 18179 /** 18180 * Override the type of the returned `data`. 18181 * 18182 * @typeParam NewResult - The new result type to override with 18183 * @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead 18184 * 18185 * @category Database 18186 * @subcategory Using modifiers 18187 * 18188 * @remarks 18189 * - Deprecated: use overrideTypes method instead 18190 * 18191 * @example Override type of successful response 18192 * ```ts 18193 * const { data } = await supabase 18194 * .from('countries') 18195 * .select() 18196 * .returns<Array<MyType>>() 18197 * ``` 18198 * 18199 * @exampleResponse Override type of successful response 18200 * ```js 18201 * let x: typeof data // MyType[] 18202 * ``` 18203 * 18204 * @example Override type of object response 18205 * ```ts 18206 * const { data } = await supabase 18207 * .from('countries') 18208 * .select() 18209 * .maybeSingle() 18210 * .returns<MyType>() 18211 * ``` 18212 * 18213 * @exampleResponse Override type of object response 18214 * ```js 18215 * let x: typeof data // MyType | null 18216 * ``` 18217 */ 18218 returns() { 18219 return this; 18220 } 18221 /** 18222 * Set the maximum number of rows that can be affected by the query.
18223 * Only available in PostgREST v13+ and only works with PATCH and DELETE methods. 18224 * 18225 * @param rows - The maximum number of rows that can be affected 18226 * 18227 * @category Database 18228 * @subcategory Using modifiers 18229 */ 18230 maxAffected(t) { 18231 return this.headers.append("Prefer", "handling=strict"), this.headers.append("Prefer", `max-affected=${t}`), this; 18232 } 18233}; 18234const Ya = /* @__PURE__ */ new RegExp("[,()]"); 18235var st = class extends $M { 18236 throwOnError() { 18237 return super.throwOnError(); 18238 } 18239 /** 18240 * Match only rows where `column` is equal to `value`. 18241 * 18242 * To check if the value of `column` is NULL, you should use `.is()` instead. 18243 * 18244 * @param column - The column to filter on 18245 * @param value - The value to filter with 18246 * 18247 * @category Database 18248 * @subcategory Using filters 18249 * 18250 * @example With `select()` 18251 * ```ts 18252 * const { data, error } = await supabase 18253 * .from('characters') 18254 * .select() 18255 * .eq('name', 'Leia') 18256 * ``` 18257 * 18258 * @exampleSql With `select()` 18259 * ```sql 18260 * create table 18261 * characters (id int8 primary key, name text); 18262 * 18263 * insert into 18264 * characters (id, name) 18265 * values 18266 * (1, 'Luke'), 18267 * (2, 'Leia'), 18268 * (3, 'Han'); 18269 * ``` 18270 * 18271 * @exampleResponse With `select()` 18272 * ```json 18273 * { 18274 * "data": [ 18275 * { 18276 * "id": 2, 18277 * "name": "Leia" 18278 * } 18279 * ], 18280 * "status": 200, 18281 * "statusText": "OK" 18282 * } 18283 * ``` 18284 */ 18285 eq(t, e) { 18286 return this.url.searchParams.append(t, `eq.${e}`), this; 18287 } 18288 /** 18289 * Match only rows where `column` is not equal to `value`. 18290 * 18291 * This filter does not include rows where `column` is `NULL`. To match null 18292 * values, use `.is(column, null)` instead. 18293 * 18294 * @param column - The column to filter on 18295 * @param value - The value to filter with 18296 * 18297 * @category Database 18298 * @subcategory Using filters 18299 * 18300 * @example With `select()` 18301 * ```ts 18302 * const { data, error } = await supabase 18303 * .from('characters') 18304 * .select() 18305 * .neq('name', 'Leia') 18306 * ``` 18307 * 18308 * @exampleSql With `select()` 18309 * ```sql 18310 * create table 18311 * characters (id int8 primary key, name text); 18312 * 18313 * insert into 18314 * characters (id, name) 18315 * values 18316 * (1, 'Luke'), 18317 * (2, 'Leia'), 18318 * (3, 'Han'); 18319 * ``` 18320 * 18321 * @exampleResponse With `select()` 18322 * ```json 18323 * { 18324 * "data": [ 18325 * { 18326 * "id": 1, 18327 * "name": "Luke" 18328 * }, 18329 * { 18330 * "id": 3, 18331 * "name": "Han" 18332 * } 18333 * ], 18334 * "status": 200, 18335 * "statusText": "OK" 18336 * } 18337 * ``` 18338 */ 18339 neq(t, e) { 18340 return this.url.searchParams.append(t, `neq.${e}`), this; 18341 } 18342 gt(t, e) { 18343 return this.url.searchParams.append(t, `gt.${e}`), this; 18344 } 18345 gte(t, e) { 18346 return this.url.searchParams.append(t, `gte.${e}`), this; 18347 } 18348 lt(t, e) { 18349 return this.url.searchParams.append(t, `lt.${e}`), this; 18350 } 18351 lte(t, e) { 18352 return this.url.searchParams.append(t, `lte.${e}`), this; 18353 } 18354 like(t, e) { 18355 return this.url.searchParams.append(t, `like.${e}`), this; 18356 } 18357 likeAllOf(t, e) { 18358 return this.url.searchParams.append(t, `like(all).{${e.join(",")}}`), this; 18359 } 18360 likeAnyOf(t, e) { 18361 return this.url.searchParams.append(t, `like(any).{${e.join(",")}}`), this; 18362 } 18363 ilike(t, e) { 18364 return this.url.searchParams.append(t, `ilike.${e}`), this; 18365 } 18366 ilikeAllOf(t, e) { 18367 return this.url.searchParams.append(t, `ilike(all).{${e.join(",")}}`), this; 18368 } 18369 ilikeAnyOf(t, e) { 18370 return this.url.searchParams.append(t, `ilike(any).{${e.join(",")}}`), this; 18371 } 18372 regexMatch(t, e) { 18373 return this.url.searchParams.append(t, `match.${e}`), this; 18374 } 18375 regexIMatch(t, e) { 18376 return this.url.searchParams.append(t, `imatch.${e}`), this; 18377 } 18378 is(t, e) { 18379 return this.url.searchParams.append(t, `is.${e}`), this; 18380 } 18381 /** 18382 * Match only rows where `column` IS DISTINCT FROM `value`. 18383 * 18384 * Unlike `.neq()`, this treats `NULL` as a comparable value. Two `NULL` values 18385 * are considered equal (not distinct), and comparing `NULL` with any non-NULL 18386 * value returns true (distinct). 18387 * 18388 * @param column - The column to filter on 18389 * @param value - The value to filter with 18390 */ 18391 isDistinct(t, e) { 18392 return this.url.searchParams.append(t, `isdistinct.${e}`), this; 18393 } 18394 /** 18395 * Match only rows where `column` is included in the `values` array. 18396 * 18397 * @param column - The column to filter on 18398 * @param values - The values array to filter with 18399 * 18400 * @category Database 18401 * @subcategory Using filters 18402 * 18403 * @example With `select()` 18404 * ```ts 18405 * const { data, error } = await supabase 18406 * .from('characters') 18407 * .select() 18408 * .in('name', ['Leia', 'Han']) 18409 * ``` 18410 * 18411 * @exampleSql With `select()` 18412 * ```sql 18413 * create table 18414 * characters (id int8 primary key, name text); 18415 * 18416 * insert into 18417 * characters (id, name) 18418 * values 18419 * (1, 'Luke'), 18420 * (2, 'Leia'), 18421 * (3, 'Han'); 18422 * ``` 18423 * 18424 * @exampleResponse With `select()` 18425 * ```json 18426 * { 18427 * "data": [ 18428 * { 18429 * "id": 2, 18430 * "name": "Leia" 18431 * }, 18432 * { 18433 * "id": 3, 18434 * "name": "Han" 18435 * } 18436 * ], 18437 * "status": 200, 18438 * "statusText": "OK" 18439 * } 18440 * ``` 18441 */ 18442 in(t, e) { 18443 const s = Array.from(new Set(e)).map((r) => typeof r == "string" && Ya.test(r) ? `"${r}"` : `${r}`).join(","); 18444 return this.url.searchParams.append(t, `in.(${s})`), this; 18445 } 18446 /** 18447 * Match only rows where `column` is NOT included in the `values` array. 18448 * 18449 * @param column - The column to filter on 18450 * @param values - The values array to filter with 18451 */ 18452 notIn(t, e) { 18453 const s = Array.from(new Set(e)).map((r) => typeof r == "string" && Ya.test(r) ? `"${r}"` : `${r}`).join(","); 18454 return this.url.searchParams.append(t, `not.in.(${s})`), this; 18455 } 18456 contains(t, e) { 18457 return typeof e == "string" ? this.url.searchParams.append(t, `cs.${e}`) : Array.isArray(e) ? this.url.searchParams.append(t, `cs.{${e.join(",")}}`) : this.url.searchParams.append(t, `cs.${JSON.stringify(e)}`), this; 18458 } 18459 containedBy(t, e) { 18460 return typeof e == "string" ? this.url.searchParams.append(t, `cd.${e}`) : Array.isArray(e) ? this.url.searchParams.append(t, `cd.{${e.join(",")}}`) : this.url.searchParams.append(t, `cd.${JSON.stringify(e)}`), this; 18461 } 18462 rangeGt(t, e) { 18463 return this.url.searchParams.append(t, `sr.${e}`), this; 18464 } 18465 rangeGte(t, e) { 18466 return this.url.searchParams.append(t, `nxl.${e}`), this; 18467 } 18468 rangeLt(t, e) { 18469 return this.url.searchParams.append(t, `sl.${e}`), this; 18470 } 18471 rangeLte(t, e) { 18472 return this.url.searchParams.append(t, `nxr.${e}`), this; 18473 } 18474 rangeAdjacent(t, e) { 18475 return this.url.searchParams.append(t, `adj.${e}`), this; 18476 } 18477 overlaps(t, e) { 18478 return typeof e == "string" ? this.url.searchParams.append(t, `ov.${e}`) : this.url.searchParams.append(t, `ov.{${e.join(",")}}`), this; 18479 } 18480 textSearch(t, e, { config: s, type: r } = {}) { 18481 let n = ""; 18482 r === "plain" ? n = "pl" : r === "phrase" ? n = "ph" : r === "websearch" && (n = "w"); 18483 const o = s === void 0 ? "" : `(${s})`; 18484 return this.url.searchParams.append(t, `${n}fts${o}.${e}`), this; 18485 } 18486 match(t) { 18487 return Object.entries(t).filter(([e, s]) =>
18487 s !== void 0).forEach(([e, s]) => { 18488 this.url.searchParams.append(e, `eq.${s}`); 18489 }), this; 18490 } 18491 /** 18492 * Match only rows which doesn't satisfy the filter. 18493 * 18494 * Unlike most filters, `opearator` and `value` are used as-is and need to 18495 * follow [PostgREST 18496 * syntax](https://postgrest.org/en/stable/api.html#operators). You also need 18497 * to make sure they are properly sanitized. 18498 * 18499 * @param column - The column to filter on 18500 * @param operator - The operator to be negated to filter with, following 18501 * PostgREST syntax 18502 * @param value - The value to filter with, following PostgREST syntax 18503 * 18504 * @category Database 18505 * @subcategory Using filters 18506 * 18507 * @remarks 18508 * not() expects you to use the raw PostgREST syntax for the filter values. 18509 * 18510 * ```ts 18511 * .not('id', 'in', '(5,6,7)') // Use `()` for `in` filter 18512 * .not('arraycol', 'cs', '{"a","b"}') // Use `cs` for `contains()`, `{}` for array values 18513 * ``` 18514 * 18515 * @example With `select()` 18516 * ```ts 18517 * const { data, error } = await supabase 18518 * .from('countries') 18519 * .select() 18520 * .not('name', 'is', null) 18521 * ``` 18522 * 18523 * @exampleSql With `select()` 18524 * ```sql 18525 * create table 18526 * countries (id int8 primary key, name text); 18527 * 18528 * insert into 18529 * countries (id, name) 18530 * values 18531 * (1, 'null'), 18532 * (2, null); 18533 * ``` 18534 * 18535 * @exampleResponse With `select()` 18536 * ```json 18537 * { 18538 * "data": [ 18539 * { 18540 * "id": 1, 18541 * "name": "null" 18542 * } 18543 * ], 18544 * "status": 200, 18545 * "statusText": "OK" 18546 * } 18547 * 18548 * ``` 18549 */ 18550 not(t, e, s) { 18551 return this.url.searchParams.append(t, `not.${e}.${s}`), this; 18552 } 18553 /** 18554 * Match only rows which satisfy at least one of the filters. 18555 * 18556 * Unlike most filters, `filters` is used as-is and needs to follow [PostgREST 18557 * syntax](https://postgrest.org/en/stable/api.html#operators). You also need 18558 * to make sure it's properly sanitized. 18559 * 18560 * It's currently not possible to do an `.or()` filter across multiple tables. 18561 * 18562 * @param filters - The filters to use, following PostgREST syntax 18563 * @param options - Named parameters 18564 * @param options.referencedTable - Set this to filter on referenced tables 18565 * instead of the parent table 18566 * @param options.foreignTable - Deprecated, use `referencedTable` instead 18567 * 18568 * @category Database 18569 * @subcategory Using filters 18570 * 18571 * @remarks 18572 * or() expects you to use the raw PostgREST syntax for the filter names and values. 18573 * 18574 * ```ts 18575 * .or('id.in.(5,6,7), arraycol.cs.{"a","b"}') // Use `()` for `in` filter, `{}` for array values and `cs` for `contains()`. 18576 * .or('id.in.(5,6,7), arraycol.cd.{"a","b"}') // Use `cd` for `containedBy()` 18577 * ``` 18578 * 18579 * @example With `select()` 18580 * ```ts 18581 * const { data, error } = await supabase 18582 * .from('characters') 18583 * .select('name') 18584 * .or('id.eq.2,name.eq.Han') 18585 * ``` 18586 * 18587 * @exampleSql With `select()` 18588 * ```sql 18589 * create table 18590 * characters (id int8 primary key, name text); 18591 * 18592 * insert into 18593 * characters (id, name) 18594 * values 18595 * (1, 'Luke'), 18596 * (2, 'Leia'), 18597 * (3, 'Han'); 18598 * ``` 18599 * 18600 * @exampleResponse With `select()` 18601 * ```json 18602 * { 18603 * "data": [ 18604 * { 18605 * "name": "Leia" 18606 * }, 18607 * { 18608 * "name": "Han" 18609 * } 18610 * ], 18611 * "status": 200, 18612 * "statusText": "OK" 18613 * } 18614 * ``` 18615 * 18616 * @example Use `or` with `and` 18617 * ```ts 18618 * const { data, error } = await supabase 18619 * .from('characters') 18620 * .select('name') 18621 * .or('id.gt.3,and(id.eq.1,name.eq.Luke)') 18622 * ``` 18623 * 18624 * @exampleSql Use `or` with `and` 18625 * ```sql 18626 * create table 18627 * characters (id int8 primary key, name text); 18628 * 18629 * insert into 18630 * characters (id, name) 18631 * values 18632 * (1, 'Luke'), 18633 * (2, 'Leia'), 18634 * (3, 'Han'); 18635 * ``` 18636 * 18637 * @exampleResponse Use `or` with `and` 18638 * ```json 18639 * { 18640 * "data": [ 18641 * { 18642 * "name": "Luke" 18643 * } 18644 * ], 18645 * "status": 200, 18646 * "statusText": "OK" 18647 * } 18648 * ``` 18649 * 18650 * @example Use `or` on referenced tables 18651 * ```ts 18652 * const { data, error } = await supabase 18653 * .from('orchestral_sections') 18654 * .select(` 18655 * name, 18656 * instruments!inner ( 18657 * name 18658 * ) 18659 * `) 18660 * .or('section_id.eq.1,name.eq.guzheng', { referencedTable: 'instruments' }) 18661 * ``` 18662 * 18663 * @exampleSql Use `or` on referenced tables 18664 * ```sql 18665 * create table 18666 * orchestral_sections (id int8 primary key, name text); 18667 * create table 18668 * instruments ( 18669 * id int8 primary key, 18670 * section_id int8 not null references orchestral_sections, 18671 * name text 18672 * ); 18673 * 18674 * insert into 18675 * orchestral_sections (id, name) 18676 * values 18677 * (1, 'strings'), 18678 * (2, 'woodwinds'); 18679 * insert into 18680 * instruments (id, section_id, name) 18681 * values 18682 * (1, 2, 'flute'), 18683 * (2, 1, 'violin'); 18684 * ``` 18685 * 18686 * @exampleResponse Use `or` on referenced tables 18687 * ```json 18688 * { 18689 * "data": [ 18690 * { 18691 * "name": "strings", 18692 * "instruments": [ 18693 * { 18694 * "name": "violin" 18695 * } 18696 * ] 18697 * } 18698 * ], 18699 * "status": 200, 18700 * "statusText": "OK" 18701 * } 18702 * ``` 18703 */ 18704 or(t, { foreignTable: e, referencedTable: s = e } = {}) { 18705 const r = s ? `${s}.or` : "or"; 18706 return this.url.searchParams.append(r, `(${t})`), this; 18707 } 18708 filter(t, e, s) { 18709 return this.url.searchParams.append(t, `${e}.${s}`), this; 18710 } 18711}, qM = class { 18712 /** 18713 * Creates a query builder scoped to a Postgres table or view. 18714 * 18715 * @category Database 18716 * 18717 * @param url - The URL for the query
18718 * @param options - Named parameters 18719 * @param options.headers - Custom headers 18720 * @param options.schema - Postgres schema to use 18721 * @param options.fetch - Custom fetch implementation 18722 * @param options.urlLengthLimit - Maximum URL length before warning 18723 * @param options.retry - Enable automatic retries for transient errors (default: true) 18724 * 18725 * @example Using supabase-js (recommended) 18726 * ```ts 18727 * import { createClient } from '@supabase/supabase-js' 18728 * 18729 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 18730 * const { data, error } = await supabase.from('users').select('*') 18731 * ``` 18732 * 18733 * @example Standalone import for bundle-sensitive environments 18734 * ```ts 18735 * import { PostgrestQueryBuilder } from '@supabase/postgrest-js' 18736 * 18737 * const query = new PostgrestQueryBuilder( 18738 * new URL('https://xyzcompany.supabase.co/rest/v1/users'), 18739 * { headers: { apikey: 'your-publishable-key' }, retry: true } 18740 * ) 18741 * ``` 18742 */ 18743 constructor(t, { headers: e = {}, schema: s, fetch: r, urlLengthLimit: n = 8e3, retry: o }) { 18744 this.url = t, this.headers = new Headers(e), this.schema = s, this.fetch = r, this.urlLengthLimit = n, this.retry = o; 18745 } 18746 /** 18747 * Clone URL and headers to prevent shared state between operations. 18748 */ 18749 cloneRequestState() { 18750 return { 18751 url: new URL(this.url.toString()), 18752 headers: new Headers(this.headers) 18753 }; 18754 } 18755 /** 18756 * Perform a SELECT query on the table or view. 18757 * 18758 * @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName` 18759 * 18760 * @param options - Named parameters 18761 * 18762 * @param options.head - When set to `true`, `data` will not be returned. 18763 * Useful if you only need the count. 18764 * 18765 * @param options.count - Count algorithm to use to count rows in the table or view. 18766 * 18767 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 18768 * hood. 18769 * 18770 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 18771 * statistics under the hood. 18772 * 18773 * `"estimated"`: Uses exact count for low numbers and planned count for high 18774 * numbers. 18775 * 18776 * @remarks 18777 * When using `count` with `.range()` or `.limit()`, the returned `count` is the total number of rows 18778 * that match your filters, not the number of rows in the current page. Use this to build pagination UI. 18779 18780 * - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data. 18781 * - `select()` can be combined with [Filters](/docs/reference/javascript/using-filters) 18782 * - `select()` can be combined with [Modifiers](/docs/reference/javascript/using-modifiers) 18783 * - `apikey` is a reserved keyword if you're using the [Supabase Platform](/docs/guides/platform) and [should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). * 18784 * @category Database 18785 * 18786 * @example Getting your data 18787 * ```js 18788 * const { data, error } = await supabase 18789 * .from('characters') 18790 * .select() 18791 * ``` 18792 * 18793 * @exampleSql Getting your data 18794 * ```sql 18795 * create table 18796 * characters (id int8 primary key, name text); 18797 * 18798 * insert into 18799 * characters (id, name) 18800 * values 18801 * (1, 'Harry'), 18802 * (2, 'Frodo'), 18803 * (3, 'Katniss'); 18804 * ``` 18805 * 18806 * @exampleResponse Getting your data 18807 * ```json 18808 * { 18809 * "data": [ 18810 * { 18811 * "id": 1, 18812 * "name": "Harry" 18813 * }, 18814 * { 18815 * "id": 2, 18816 * "name": "Frodo" 18817 * }, 18818 * { 18819 * "id": 3, 18820 * "name": "Katniss" 18821 * } 18822 * ], 18823 * "status": 200, 18824 * "statusText": "OK" 18825 * } 18826 * ``` 18827 * 18828 * @exampleDescription Handling errors 18829 * The most useful field on a Postgres error is usually `hint` â when the database knows the fix, it puts the literal SQL there. For example, a permission-denied error (`code: '42501'`) arrives with a `hint` like `"Grant the required privileges to the current role with: GRANT SELECT ON public.characters TO anon;"`. Log the full `error` object so the hint isn't hidden behind `error.message`. 18830 * 18831 * @example Handling errors 18832 * ```js 18833 * const { data, error } = await supabase.from('characters').select() 18834 * if (error) { 18835 * // Logs the full error: message, code, details, and hint. 18836 * console.error(error) 18837 * return 18838 * } 18839 * ``` 18840 * 18841 * @exampleResponse Handling errors 18842 * ```json 18843 * { 18844 * "error": { 18845 * "code": "42501", 18846 * "details": null, 18847 * "hint": "Grant the required privileges to the current role with: GRANT SELECT ON public.characters TO anon;", 18848 * "message": "permission denied for table characters" 18849 * }, 18850 * "status": 401, 18851 * "statusText": "" 18852 * } 18853 * ``` 18854 * 18855 * @example Selecting specific columns 18856 * ```js 18857 * const { data, error } = await supabase 18858 * .from('characters') 18859 * .select('name') 18860 * ``` 18861 * 18862 * @exampleSql Selecting specific columns 18863 * ```sql 18864 * create table 18865 * characters (id int8 primary key, name text); 18866 * 18867 * insert into 18868 * characters (id, name) 18869 * values 18870 * (1, 'Frodo'), 18871 * (2, 'Harry'), 18872 * (3, 'Katniss'); 18873 * ``` 18874 * 18875 * @exampleResponse Selecting specific columns 18876 * ```json 18877 * { 18878 * "data": [ 18879 * { 18880 * "name": "Frodo" 18881 * }, 18882 * { 18883 * "name": "Harry" 18884 * }, 18885 * { 18886 * "name": "Katniss" 18887 * } 18888 * ], 18889 * "status": 200, 18890 * "statusText": "OK" 18891 * } 18892 * ``` 18893 * 18894 * @exampleDescription Query referenced tables 18895 * If your database has foreign key relationships, you can query related tables too. 18896 * 18897 * @example Query referenced tables 18898 * ```js 18899 * const { data, error } = await supabase 18900 * .from('orchestral_sections') 18901 * .select(` 18902 * name, 18903 * instruments ( 18904 * name 18905 * ) 18906 * `) 18907 * ``` 18908 * 18909 * @exampleSql Query referenced tables 18910 * ```sql 18911 * create table 18912 * orchestral_sections (id int8 primary key, name text); 18913 * create table 18914 * instruments ( 18915 * id int8 primary key, 18916 * section_id int8 not null references orchestral_sections, 18917 * name text 18918 * ); 18919 * 18920 * insert into 18921 * orchestral_sections (id, name) 18922 * values 18923 * (1, 'strings'), 18924 * (2, 'woodwinds'); 18925 * insert into 18926 * instruments (id, section_id, name) 18927 * values 18928 * (1, 2, 'flute'), 18929 * (2, 1, 'violin'); 18930 * ``` 18931 * 18932 * @exampleResponse Query referenced tables 18933 * ```json 18934 * { 18935 * "data": [ 18936 * { 18937 * "name": "strings", 18938 * "instruments": [ 18939 * { 18940 * "name": "violin" 18941 * } 18942 * ] 18943 * }, 18944 * { 18945 * "name": "woodwinds", 18946 * "instruments": [ 18947 * { 18948 * "name": "flute" 18949 * } 18950 * ] 18951 * } 18952 * ], 18953 * "status": 200, 18954 * "statusText": "OK" 18955 * } 18956 * ``` 18957 * 18958 * @exampleDescription Query referenced tables with spaces in their names 18959 * If your table name contains spaces, you must use double quotes in the `select` statement to reference the table. 18960 * 18961 * @example Query referenced tables with spaces in their names 18962 * ```js 18963 * const { data, error } = await supabase 18964 * .from('orchestral sections') 18965 * .select(` 18966 * name, 18967 * "musical instruments" ( 18968 * name 18969 * ) 18970 * `) 18971 * ``` 18972 * 18973 * @exampleSql Query referenced tables with spaces in their names 18974 * ```sql 18975 * create table 18976 * "orchestral sections" (id int8 primary key, name text); 18977 * create table 18978 * "musical instruments" ( 18979 * id int8 primary key, 18980 * section_id int8 not null references "orchestral sections", 18981 * name text 18982 * ); 18983 * 18984 * insert into 18985 * "orchestral sections" (id, name) 18986 * values 18987 * (1, 'strings'), 18988 * (2, 'woodwinds'); 18989 * insert into 18990 * "musical instruments" (id, section_id, name) 18991 * values 18992 * (1, 2, 'flute'), 18993 * (2, 1, 'violin'); 18994 * ``` 18995 * 18996 * @exampleResponse Query referenced tables with spaces in their names 18997 * ```json 18998 * { 18999 * "data": [ 19000 * { 19001 * "name": "strings", 19002 * "musical instruments": [ 19003 * { 19004 * "name": "violin" 19005 * } 19006 * ] 19007 * }, 19008 * { 19009 * "name": "woodwinds", 19010 * "musical instruments": [ 19011 * { 19012 * "name": "flute" 19013 * } 19014 * ] 19015 * } 19016 * ], 19017 * "status": 200, 19018 * "statusText": "OK" 19019 * } 19020 * ``` 19021 * 19022 * @exampleDescription Query referenced tables through a join table 19023 * If you're in a situation where your tables are **NOT** directly 19024 * related, but instead are joined by a _join table_, you can still use 19025 * the `select()` method to query the related data. The join table needs 19026 * to have the foreign keys as part of its composite primary key. 19027 * 19028 * @example Query referenced tables through a join table 19029 * ```ts 19030 * const { data, error } = await supabase 19031 * .from('users') 19032 * .select(` 19033 * name, 19034 * teams ( 19035 * name 19036 * ) 19037 * `) 19038 * 19039 * ``` 19040 * 19041 * @exampleSql Query referenced tables through a join table 19042 * ```sql 19043 * create table 19044 * users ( 19045 * id int8 primary key, 19046 * name text 19047 * ); 19048 * create table 19049 * teams ( 19050 * id int8 primary key, 19051 * name text 19052 * ); 19053 * -- join table 19054 * create table 19055 * users_teams ( 19056 * user_id int8 not null references users, 19057 * team_id int8 not null references teams, 19058 * -- both foreign keys must be part of a composite primary key 19059 * primary key (user_id, team_id) 19060 * ); 19061 * 19062 * insert into 19063 * users (id, name) 19064 * values 19065 * (1, 'Kiran'), 19066 * (2, 'Evan'); 19067 * insert into 19068 * teams (id, name) 19069 * values 19070 * (1, 'Green'), 19071 * (2, 'Blue'); 19072 * insert into 19073 * users_teams (user_id, team_id) 19074 * values 19075 * (1, 1), 19076 * (1, 2), 19077 * (2, 2); 19078 * ``` 19079 * 19080 * @exampleResponse Query referenced tables through a join table 19081 * ```json 19082 * { 19083 * "data": [ 19084 * { 19085 * "name": "Kiran",
19086 * "teams": [ 19087 * { 19088 * "name": "Green" 19089 * }, 19090 * { 19091 * "name": "Blue" 19092 * } 19093 * ] 19094 * }, 19095 * { 19096 * "name": "Evan", 19097 * "teams": [ 19098 * { 19099 * "name": "Blue" 19100 * } 19101 * ] 19102 * } 19103 * ], 19104 * "status": 200, 19105 * "statusText": "OK" 19106 * } 19107 * 19108 * ``` 19109 * 19110 * @exampleDescription Query the same referenced table multiple times 19111 * If you need to query the same referenced table twice, use the name of the 19112 * joined column to identify which join to use. You can also give each 19113 * column an alias. 19114 * 19115 * @example Query the same referenced table multiple times 19116 * ```ts 19117 * const { data, error } = await supabase 19118 * .from('messages') 19119 * .select(` 19120 * content, 19121 * from:sender_id(name), 19122 * to:receiver_id(name) 19123 * `) 19124 * 19125 * // To infer types, use the name of the table (in this case `users`) and 19126 * // the name of the foreign key constraint. 19127 * const { data, error } = await supabase 19128 * .from('messages') 19129 * .select(` 19130 * content, 19131 * from:users!messages_sender_id_fkey(name), 19132 * to:users!messages_receiver_id_fkey(name) 19133 * `) 19134 * ``` 19135 * 19136 * @exampleSql Query the same referenced table multiple times 19137 * ```sql 19138 * create table 19139 * users (id int8 primary key, name text); 19140 * 19141 * create table 19142 * messages ( 19143 * sender_id int8 not null references users, 19144 * receiver_id int8 not null references users, 19145 * content text 19146 * ); 19147 * 19148 * insert into 19149 * users (id, name) 19150 * values 19151 * (1, 'Kiran'), 19152 * (2, 'Evan'); 19153 * 19154 * insert into 19155 * messages (sender_id, receiver_id, content) 19156 * values 19157 * (1, 2, 'ð'); 19158 * ``` 19159 * ``` 19160 * 19161 * @exampleResponse Query the same referenced table multiple times 19162 * ```json 19163 * { 19164 * "data": [ 19165 * { 19166 * "content": "ð", 19167 * "from": { 19168 * "name": "Kiran" 19169 * }, 19170 * "to": { 19171 * "name": "Evan" 19172 * } 19173 * } 19174 * ], 19175 * "status": 200, 19176 * "statusText": "OK" 19177 * } 19178 * ``` 19179 * 19180 * @exampleDescription Query nested foreign tables through a join table 19181 * You can use the result of a joined table to gather data in 19182 * another foreign table. With multiple references to the same foreign 19183 * table you must specify the column on which to conduct the join. 19184 * 19185 * @example Query nested foreign tables through a join table 19186 * ```ts 19187 * const { data, error } = await supabase 19188 * .from('games') 19189 * .select(` 19190 * game_id:id, 19191 * away_team:teams!games_away_team_fkey ( 19192 * users ( 19193 * id, 19194 * name 19195 * ) 19196 * ) 19197 * `) 19198 * 19199 * ``` 19200 * 19201 * @exampleSql Query nested foreign tables through a join table 19202 * ```sql 19203 * ```sql 19204 * create table 19205 * users ( 19206 * id int8 primary key, 19207 * name text 19208 * ); 19209 * create table 19210 * teams ( 19211 * id int8 primary key, 19212 * name text 19213 * ); 19214 * -- join table 19215 * create table 19216 * users_teams ( 19217 * user_id int8 not null references users, 19218 * team_id int8 not null references teams, 19219 * 19220 * primary key (user_id, team_id) 19221 * ); 19222 * create table 19223 * games ( 19224 * id int8 primary key, 19225 * home_team int8 not null references teams, 19226 * away_team int8 not null references teams, 19227 * name text 19228 * ); 19229 * 19230 * insert into users (id, name) 19231 * values 19232 * (1, 'Kiran'), 19233 * (2, 'Evan'); 19234 * insert into 19235 * teams (id, name) 19236 * values 19237 * (1, 'Green'), 19238 * (2, 'Blue'); 19239 * insert into 19240 * users_teams (user_id, team_id) 19241 * values 19242 * (1, 1), 19243 * (1, 2), 19244 * (2, 2); 19245 * insert into 19246 * games (id, home_team, away_team, name) 19247 * values 19248 * (1, 1, 2, 'Green vs Blue'), 19249 * (2, 2, 1, 'Blue vs Green'); 19250 * ``` 19251 * 19252 * @exampleResponse Query nested foreign tables through a join table 19253 * ```json 19254 * { 19255 * "data": [ 19256 * { 19257 * "game_id": 1, 19258 * "away_team": { 19259 * "users": [ 19260 * { 19261 * "id": 1, 19262 * "name": "Kiran" 19263 * }, 19264 * { 19265 * "id": 2, 19266 * "name": "Evan" 19267 * } 19268 * ] 19269 * } 19270 * }, 19271 * { 19272 * "game_id": 2, 19273 * "away_team": { 19274 * "users": [ 19275 * { 19276 * "id": 1, 19277 * "name": "Kiran" 19278 * } 19279 * ] 19280 * } 19281 * } 19282 * ], 19283 * "status": 200, 19284 * "statusText": "OK" 19285 * } 19286 * 19287 * ``` 19288 * 19289 * @exampleDescription Filtering through referenced tables 19290 * If the filter on a referenced table's column is not satisfied, the referenced 19291 * table returns `[]` or `null` but the parent table is not filtered out. 19292 * If you want to filter out the parent table rows, use the `!inner` hint 19293 * 19294 * @example Filtering through referenced tables 19295 * ```ts 19296 * const { data, error } = await supabase 19297 * .from('instruments') 19298 * .select('name, orchestral_sections(*)') 19299 * .eq('orchestral_sections.name', 'percussion') 19300 * ``` 19301 * 19302 * @exampleSql Filtering through referenced tables 19303 * ```sql 19304 * create table 19305 * orchestral_sections (id int8 primary key, name text); 19306 * create table 19307 * instruments ( 19308 * id int8 primary key, 19309 * section_id int8 not null references orchestral_sections, 19310 * name text 19311 * ); 19312 * 19313 * insert into 19314 * orchestral_sections (id, name) 19315 * values 19316 * (1, 'strings'), 19317 * (2, 'woodwinds'); 19318 * insert into 19319 * instruments (id, section_id, name) 19320 * values 19321 * (1, 2, 'flute'), 19322 * (2, 1, 'violin'); 19323 * ``` 19324 * 19325 * @exampleResponse Filtering through referenced tables 19326 * ```json 19327 * { 19328 * "data": [ 19329 * { 19330 * "name": "flute", 19331 * "orchestral_sections": null 19332 * }, 19333 * { 19334 * "name": "violin", 19335 * "orchestral_sections": null 19336 * } 19337 * ], 19338 * "status": 200, 19339 * "statusText": "OK" 19340 * } 19341 * ``` 19342 * 19343 * @exampleDescription Querying referenced table with count 19344 * You can get the number of rows in a related table by using the 19345 * **count** property. 19346 * 19347 * @example Querying referenced table with count 19348 * ```ts 19349 * const { data, error } = await supabase 19350 * .from('orchestral_sections') 19351 * .select(`*, instruments(count)`) 19352 * ``` 19353 * 19354 * @exampleSql Querying referenced table with count 19355 * ```sql 19356 * create table orchestral_sections ( 19357 * "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, 19358 * "name" text 19359 * ); 19360 * 19361 * create table characters ( 19362 * "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, 19363 * "name" text, 19364 * "section_id" "uuid" references public.orchestral_sections on delete cascade 19365 * ); 19366 * 19367 * with section as ( 19368 * insert into orchestral_sections (name) 19369 * values ('strings') returning id 19370 * ) 19371 * insert into instruments (name, section_id) values 19372 * ('violin', (select id from section)), 19373 * ('viola', (select id from section)), 19374 * ('cello', (select id from section)), 19375 * ('double bass', (select id from section)); 19376 * ``` 19377 * 19378 * @exampleResponse Querying referenced table with count 19379 * ```json 19380 * [ 19381 * { 19382 * "id": "693694e7-d993-4360-a6d7-6294e325d9b6", 19383 * "name": "strings", 19384 * "instruments": [ 19385 * { 19386 * "count": 4 19387 * } 19388 * ] 19389 * } 19390 * ] 19391 * ``` 19392 * 19393 * @exampleDescription Querying with count option 19394 * You can get the number of rows by using the 19395 * [count](/docs/reference/javascript/select#parameters) option. 19396 * 19397 * @example Querying with count option 19398 * ```ts 19399 * const { count, error } = await supabase 19400 * .from('characters') 19401 * .select('*', { count: 'exact', head: true }) 19402 * ``` 19403 * 19404 * @exampleSql Querying with count option 19405 * ```sql 19406 * create table 19407 * characters (id int8 primary key, name text); 19408 * 19409 * insert into 19410 * characters (id, name) 19411 * values 19412 * (1, 'Luke'), 19413 * (2, 'Leia'), 19414 * (3, 'Han'); 19415 * ``` 19416 * 19417 * @exampleResponse Querying with count option 19418 * ```json 19419 * { 19420 * "count": 3, 19421 * "status": 200, 19422 * "statusText": "OK" 19423 * } 19424 * ``` 19425 * 19426 * @exampleDescription Querying JSON data 19427 * You can select and filter data inside of
19428 * [JSON](/docs/guides/database/json) columns. Postgres offers some 19429 * [operators](/docs/guides/database/json#query-the-jsonb-data) for 19430 * querying JSON data. 19431 * 19432 * @example Querying JSON data 19433 * ```ts 19434 * const { data, error } = await supabase 19435 * .from('users') 19436 * .select(` 19437 * id, name, 19438 * address->city 19439 * `) 19440 * ``` 19441 * 19442 * @exampleSql Querying JSON data 19443 * ```sql 19444 * create table 19445 * users ( 19446 * id int8 primary key, 19447 * name text, 19448 * address jsonb 19449 * ); 19450 * 19451 * insert into 19452 * users (id, name, address) 19453 * values 19454 * (1, 'Frodo', '{"city":"Hobbiton"}'); 19455 * ``` 19456 * 19457 * @exampleResponse Querying JSON data 19458 * ```json 19459 * { 19460 * "data": [ 19461 * { 19462 * "id": 1, 19463 * "name": "Frodo", 19464 * "city": "Hobbiton" 19465 * } 19466 * ], 19467 * "status": 200, 19468 * "statusText": "OK" 19469 * } 19470 * ``` 19471 * 19472 * @exampleDescription Querying referenced table with inner join 19473 * If you don't want to return the referenced table contents, you can leave the parenthesis empty. 19474 * Like `.select('name, orchestral_sections!inner()')`. 19475 * 19476 * @example Querying referenced table with inner join 19477 * ```ts 19478 * const { data, error } = await supabase 19479 * .from('instruments') 19480 * .select('name, orchestral_sections!inner(name)') 19481 * .eq('orchestral_sections.name', 'woodwinds') 19482 * .limit(1) 19483 * ``` 19484 * 19485 * @exampleSql Querying referenced table with inner join 19486 * ```sql 19487 * create table orchestral_sections ( 19488 * "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, 19489 * "name" text 19490 * ); 19491 * 19492 * create table instruments ( 19493 * "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, 19494 * "name" text, 19495 * "section_id" "uuid" references public.orchestral_sections on delete cascade 19496 * ); 19497 * 19498 * with section as ( 19499 * insert into orchestral_sections (name) 19500 * values ('woodwinds') returning id 19501 * ) 19502 * insert into instruments (name, section_id) values 19503 * ('flute', (select id from section)), 19504 * ('clarinet', (select id from section)), 19505 * ('bassoon', (select id from section)), 19506 * ('piccolo', (select id from section)); 19507 * ``` 19508 * 19509 * @exampleResponse Querying referenced table with inner join 19510 * ```json 19511 * { 19512 * "data": [ 19513 * { 19514 * "name": "flute", 19515 * "orchestral_sections": {"name": "woodwinds"} 19516 * } 19517 * ], 19518 * "status": 200, 19519 * "statusText": "OK" 19520 * } 19521 * ``` 19522 * 19523 * @exampleDescription Switching schemas per query 19524 * In addition to setting the schema during initialization, you can also switch schemas on a per-query basis. 19525 * Make sure you've set up your [database privileges and API settings](/docs/guides/api/using-custom-schemas). 19526 * 19527 * @example Switching schemas per query 19528 * ```ts 19529 * const { data, error } = await supabase 19530 * .schema('myschema') 19531 * .from('mytable') 19532 * .select() 19533 * ``` 19534 * 19535 * @exampleSql Switching schemas per query 19536 * ```sql 19537 * create schema myschema; 19538 * 19539 * create table myschema.mytable ( 19540 * id uuid primary key default gen_random_uuid(), 19541 * data text 19542 * ); 19543 * 19544 * insert into myschema.mytable (data) values ('mydata'); 19545 * ``` 19546 * 19547 * @exampleResponse Switching schemas per query 19548 * ```json 19549 * { 19550 * "data": [ 19551 * { 19552 * "id": "4162e008-27b0-4c0f-82dc-ccaeee9a624d", 19553 * "data": "mydata" 19554 * } 19555 * ], 19556 * "status": 200, 19557 * "statusText": "OK" 19558 * } 19559 * ``` 19560 */ 19561 select(t, e) { 19562 const { head: s = !1, count: r } = e ?? {}, n = s ? "HEAD" : "GET"; 19563 let o = !1; 19564 const L = (t ?? "*").split("").map((g) => /\s/.test(g) && !o ? "" : (g === '"' && (o = !o), g)).join(""), { url: d, headers: l } = this.cloneRequestState(); 19565 return d.searchParams.set("select", L), r && l.append("Prefer", `count=${r}`), new st({ 19566 method: n, 19567 url: d, 19568 headers: l, 19569 schema: this.schema, 19570 fetch: this.fetch, 19571 urlLengthLimit: this.urlLengthLimit, 19572 retry: this.retry 19573 }); 19574 } 19575 /** 19576 * Perform an INSERT into the table or view. 19577 * 19578 * By default, inserted rows are not returned. To return it, chain the call
19579 * with `.select()`. 19580 * 19581 * @param values - The values to insert. Pass an object to insert a single row 19582 * or an array to insert multiple rows. 19583 * 19584 * @param options - Named parameters 19585 * 19586 * @param options.count - Count algorithm to use to count inserted rows. 19587 * 19588 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 19589 * hood. 19590 * 19591 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 19592 * statistics under the hood. 19593 * 19594 * `"estimated"`: Uses exact count for low numbers and planned count for high 19595 * numbers. 19596 * 19597 * @param options.defaultToNull - Make missing fields default to `null`. 19598 * Otherwise, use the default value for the column. Only applies for bulk 19599 * inserts. 19600 * 19601 * @category Database 19602 * 19603 * @example Create a record 19604 * ```ts 19605 * const { error } = await supabase 19606 * .from('countries') 19607 * .insert({ id: 1, name: 'Mordor' }) 19608 * ``` 19609 * 19610 * @exampleSql Create a record 19611 * ```sql 19612 * create table 19613 * countries (id int8 primary key, name text); 19614 * ``` 19615 * 19616 * @exampleResponse Create a record 19617 * ```json 19618 * { 19619 * "status": 201, 19620 * "statusText": "" 19621 * } 19622 * ``` 19623 * 19624 * @exampleDescription Handling errors 19625 * `error.hint` from Postgres often contains the actionable fix (e.g. `"Grant the required privileges to the current role with: GRANT INSERT ON public.countries TO anon;"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`. 19626 * 19627 * @example Handling errors 19628 * ```js 19629 * const { error } = await supabase.from('countries').insert({ id: 1, name: 'Mordor' }) 19630 * if (error) console.error(error) 19631 * ``` 19632 * 19633 * @example Create a record and return it 19634 * ```ts 19635 * const { data, error } = await supabase 19636 * .from('countries') 19637 * .insert({ id: 1, name: 'Mordor' }) 19638 * .select() 19639 * ``` 19640 * 19641 * @exampleSql Create a record and return it 19642 * ```sql 19643 * create table 19644 * countries (id int8 primary key, name text); 19645 * ``` 19646 * 19647 * @exampleResponse Create a record and return it 19648 * ```json 19649 * { 19650 * "data": [ 19651 * { 19652 * "id": 1, 19653 * "name": "Mordor" 19654 * } 19655 * ], 19656 * "status": 201, 19657 * "statusText": "" 19658 * } 19659 * ``` 19660 * 19661 * @exampleDescription Bulk create 19662 * A bulk create operation is handled in a single transaction. 19663 * If any of the inserts fail, none of the rows are inserted. 19664 * 19665 * @example Bulk create 19666 * ```ts 19667 * const { error } = await supabase 19668 * .from('countries') 19669 * .insert([ 19670 * { id: 1, name: 'Mordor' }, 19671 * { id: 1, name: 'The Shire' }, 19672 * ]) 19673 * ``` 19674 * 19675 * @exampleSql Bulk create 19676 * ```sql 19677 * create table 19678 * countries (id int8 primary key, name text); 19679 * ``` 19680 * 19681 * @exampleResponse Bulk create 19682 * ```json 19683 * { 19684 * "error": { 19685 * "code": "23505", 19686 * "details": "Key (id)=(1) already exists.", 19687 * "hint": null, 19688 * "message": "duplicate key value violates unique constraint \"countries_pkey\"" 19689 * }, 19690 * "status": 409, 19691 * "statusText": "" 19692 * } 19693 * ``` 19694 */ 19695 insert(t, { count: e, defaultToNull: s = !0 } = {}) { 19696 var r; 19697 const n = "POST", { url: o, headers: L } = this.cloneRequestState(); 19698 if (e && L.append("Prefer", `count=${e}`), s || L.append("Prefer", "missing=default"), Array.isArray(t)) { 19699 const d = t.reduce((l, g) => l.concat(Object.keys(g)), []); 19700 if (d.length > 0) { 19701 const l = [...new Set(d)].map((g) => `"${g}"`); 19702 o.searchParams.set("columns", l.join(",")); 19703 } 19704 } 19705 return new st({ 19706 method: n, 19707 url: o, 19708 headers: L, 19709 schema: this.schema, 19710 body: t, 19711 fetch: (r = this.fetch) !== null && r !== void 0 ? r : fetch, 19712 urlLengthLimit: this.urlLengthLimit, 19713 retry: this.retry 19714 }); 19715 } 19716 /** 19717 * Perform an UPSERT on the table or view. Depending on the column(s) passed 19718 * to `onConflict`, `.upsert()` allows you to perform the equivalent of 19719 * `.insert()` if a row with the corresponding `onConflict` columns doesn't 19720 * exist, or if it does exist, perform an alternative action depending on 19721 * `ignoreDuplicates`. 19722 * 19723 * By default, upserted rows are not returned. To return it, chain the call
19724 * with `.select()`. 19725 * 19726 * @param values - The values to upsert with. Pass an object to upsert a 19727 * single row or an array to upsert multiple rows. 19728 * 19729 * @param options - Named parameters 19730 * 19731 * @param options.onConflict - Comma-separated UNIQUE column(s) to specify how 19732 * duplicate rows are determined. Two rows are duplicates if all the 19733 * `onConflict` columns are equal. 19734 * 19735 * @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If 19736 * `false`, duplicate rows are merged with existing rows. 19737 * 19738 * @param options.count - Count algorithm to use to count upserted rows. 19739 * 19740 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 19741 * hood. 19742 * 19743 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 19744 * statistics under the hood. 19745 * 19746 * `"estimated"`: Uses exact count for low numbers and planned count for high 19747 * numbers. 19748 * 19749 * @param options.defaultToNull - Make missing fields default to `null`. 19750 * Otherwise, use the default value for the column. This only applies when 19751 * inserting new rows, not when merging with existing rows under 19752 * `ignoreDuplicates: false`. This also only applies when doing bulk upserts. 19753 * 19754 * @example Upsert a single row using a unique key 19755 * ```ts 19756 * // Upserting a single row, overwriting based on the 'username' unique column 19757 * const { data, error } = await supabase 19758 * .from('users') 19759 * .upsert({ username: 'supabot' }, { onConflict: 'username' }) 19760 * 19761 * // Example response: 19762 * // { 19763 * // data: [ 19764 * // { id: 4, message: 'bar', username: 'supabot' } 19765 * // ], 19766 * // error: null 19767 * // } 19768 * ``` 19769 * 19770 * @example Upsert with conflict resolution and exact row counting 19771 * ```ts 19772 * // Upserting and returning exact count 19773 * const { data, error, count } = await supabase 19774 * .from('users') 19775 * .upsert( 19776 * { 19777 * id: 3, 19778 * message: 'foo', 19779 * username: 'supabot' 19780 * }, 19781 * { 19782 * onConflict: 'username', 19783 * count: 'exact' 19784 * } 19785 * ) 19786 * 19787 * // Example response: 19788 * // { 19789 * // data: [ 19790 * // { 19791 * // id: 42, 19792 * // handle: "saoirse", 19793 * // display_name: "Saoirse" 19794 * // } 19795 * // ], 19796 * // count: 1, 19797 * // error: null 19798 * // } 19799 * ``` 19800 * 19801 * @category Database 19802 * 19803 * @remarks 19804 * - Primary keys must be included in `values` to use upsert. 19805 * 19806 * @example Upsert your data 19807 * ```ts 19808 * const { data, error } = await supabase 19809 * .from('instruments') 19810 * .upsert({ id: 1, name: 'piano' }) 19811 * .select() 19812 * ``` 19813 * 19814 * @exampleSql Upsert your data 19815 * ```sql 19816 * create table 19817 * instruments (id int8 primary key, name text); 19818 * 19819 * insert into 19820 * instruments (id, name) 19821 * values 19822 * (1, 'harpsichord'); 19823 * ``` 19824 * 19825 * @exampleResponse Upsert your data 19826 * ```json 19827 * { 19828 * "data": [ 19829 * { 19830 * "id": 1, 19831 * "name": "piano" 19832 * } 19833 * ], 19834 * "status": 201, 19835 * "statusText": "" 19836 * } 19837 * ``` 19838 * 19839 * @exampleDescription Handling errors 19840 * `error.hint` from Postgres often contains the actionable fix (e.g. `"Grant the required privileges to the current role with: GRANT INSERT, UPDATE ON public.instruments TO anon;"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`. 19841 * 19842 * @example Handling errors 19843 * ```js 19844 * const { data, error } = await supabase.from('instruments').upsert({ id: 1, name: 'piano' }).select() 19845 * if (error) console.error(error) 19846 * ``` 19847 * 19848 * @example Bulk Upsert your data 19849 * ```ts 19850 * const { data, error } = await supabase 19851 * .from('instruments') 19852 * .upsert([ 19853 * { id: 1, name: 'piano' }, 19854 * { id: 2, name: 'harp' }, 19855 * ]) 19856 * .select() 19857 * ``` 19858 * 19859 * @exampleSql Bulk Upsert your data 19860 * ```sql 19861 * create table 19862 * instruments (id int8 primary key, name text); 19863 * 19864 * insert into 19865 * instruments (id, name) 19866 * values 19867 * (1, 'harpsichord'); 19868 * ``` 19869 * 19870 * @exampleResponse Bulk Upsert your data 19871 * ```json 19872 * { 19873 * "data": [ 19874 * { 19875 * "id": 1, 19876 * "name": "piano" 19877 * }, 19878 * { 19879 * "id": 2, 19880 * "name": "harp" 19881 * } 19882 * ], 19883 * "status": 201, 19884 * "statusText": "" 19885 * } 19886 * ``` 19887 * 19888 * @exampleDescription Upserting into tables with constraints 19889 * In the following query, `upsert()` implicitly uses the `id` 19890 * (primary key) column to determine conflicts. If there is no existing 19891 * row with the same `id`, `upsert()` inserts a new row, which 19892 * will fail in this case as there is already a row with `handle` `"saoirse"`. 19893 * Using the `onConflict` option, you can instruct `upsert()` to use 19894 * another column with a unique constraint to determine conflicts. 19895 * 19896 * @example Upserting into tables with constraints 19897 * ```ts 19898 * const { data, error } = await supabase 19899 * .from('users') 19900 * .upsert({ id: 42, handle: 'saoirse', display_name: 'Saoirse' }) 19901 * .select() 19902 * ``` 19903 * 19904 * @exampleSql Upserting into tables with constraints 19905 * ```sql 19906 * create table 19907 * users ( 19908 * id int8 generated by default as identity primary key, 19909 * handle text not null unique, 19910 * display_name text 19911 * ); 19912 * 19913 * insert into 19914 * users (id, handle, display_name) 19915 * values 19916 * (1, 'saoirse', null); 19917 * ``` 19918 * 19919 * @exampleResponse Upserting into tables with constraints 19920 * ```json 19921 * { 19922 * "error": { 19923 * "code": "23505", 19924 * "details": "Key (handle)=(saoirse) already exists.", 19925 * "hint": null, 19926 * "message": "duplicate key value violates unique constraint \"users_handle_key\"" 19927 * }, 19928 * "status": 409, 19929 * "statusText": "" 19930 * } 19931 * ``` 19932 */ 19933 upsert(t, { onConflict: e, ignoreDuplicates: s = !1, count: r, defaultToNull: n = !0 } = {}) { 19934 var o; 19935 const L = "POST", { url: d, headers: l } = this.cloneRequestState(); 19936 if (l.append("Prefer", `resolution=${s ? "ignore" : "merge"}-duplicates`), e !== void 0 && d.searchParams.set("on_conflict", e), r && l.append("Prefer", `count=${r}`), n || l.append("Prefer", "missing=default"), Array.isArray(t)) { 19937 const g = t.reduce((f, p) => f.concat(Object.keys(p)), []); 19938 if (g.length > 0) { 19939 const f = [...new Set(g)].map((p) => `"${p}"`); 19940 d.searchParams.set("columns", f.join(",")); 19941 } 19942 } 19943 return new st({ 19944 method: L, 19945 url: d, 19946 headers: l, 19947 schema: this.schema, 19948 body: t, 19949 fetch: (o = this.fetch) !== null && o !== void 0 ? o : fetch, 19950 urlLengthLimit: this.urlLengthLimit, 19951 retry: this.retry 19952 }); 19953 } 19954 /** 19955 * Perform an UPDATE on the table or view. 19956 * 19957 * By default, updated rows are not returned. To return it, chain the call
19958 * with `.select()` after filters. 19959 * 19960 * @param values - The values to update with 19961 * 19962 * @param options - Named parameters 19963 * 19964 * @param options.count - Count algorithm to use to count updated rows. 19965 * 19966 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 19967 * hood. 19968 * 19969 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 19970 * statistics under the hood. 19971 * 19972 * `"estimated"`: Uses exact count for low numbers and planned count for high 19973 * numbers. 19974 * 19975 * @category Database 19976 * 19977 * @remarks 19978 * - `update()` should always be combined with [Filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to update. 19979 * 19980 * @example Updating your data 19981 * ```ts 19982 * const { error } = await supabase 19983 * .from('instruments') 19984 * .update({ name: 'piano' }) 19985 * .eq('id', 1) 19986 * ``` 19987 * 19988 * @exampleSql Updating your data 19989 * ```sql 19990 * create table 19991 * instruments (id int8 primary key, name text); 19992 * 19993 * insert into 19994 * instruments (id, name) 19995 * values 19996 * (1, 'harpsichord'); 19997 * ``` 19998 * 19999 * @exampleResponse Updating your data 20000 * ```json 20001 * { 20002 * "status": 204, 20003 * "statusText": "" 20004 * } 20005 * ``` 20006 * 20007 * @exampleDescription Handling errors 20008 * `error.hint` from Postgres often contains the actionable fix (e.g. `"Grant the required privileges to the current role with: GRANT UPDATE ON public.instruments TO anon;"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`. 20009 * 20010 * @example Handling errors 20011 * ```js 20012 * const { error } = await supabase.from('instruments').update({ name: 'piano' }).eq('id', 1) 20013 * if (error) console.error(error) 20014 * ``` 20015 * 20016 * @example Update a record and return it 20017 * ```ts 20018 * const { data, error } = await supabase 20019 * .from('instruments') 20020 * .update({ name: 'piano' }) 20021 * .eq('id', 1) 20022 * .select() 20023 * ``` 20024 * 20025 * @exampleSql Update a record and return it 20026 * ```sql 20027 * create table 20028 * instruments (id int8 primary key, name text); 20029 * 20030 * insert into 20031 * instruments (id, name) 20032 * values 20033 * (1, 'harpsichord'); 20034 * ``` 20035 * 20036 * @exampleResponse Update a record and return it 20037 * ```json 20038 * { 20039 * "data": [ 20040 * { 20041 * "id": 1, 20042 * "name": "piano" 20043 * } 20044 * ], 20045 * "status": 200, 20046 * "statusText": "OK" 20047 * } 20048 * ``` 20049 * 20050 * @exampleDescription Updating JSON data 20051 * Postgres offers some 20052 * [operators](/docs/guides/database/json#query-the-jsonb-data) for 20053 * working with JSON data. Currently, it is only possible to update the entire JSON document. 20054 * 20055 * @example Updating JSON data 20056 * ```ts 20057 * const { data, error } = await supabase 20058 * .from('users') 20059 * .update({ 20060 * address: { 20061 * street: 'Melrose Place', 20062 * postcode: 90210 20063 * } 20064 * }) 20065 * .eq('address->postcode', 90210) 20066 * .select() 20067 * ``` 20068 * 20069 * @exampleSql Updating JSON data 20070 * ```sql 20071 * create table 20072 * users ( 20073 * id int8 primary key, 20074 * name text, 20075 * address jsonb 20076 * ); 20077 * 20078 * insert into 20079 * users (id, name, address) 20080 * values 20081 * (1, 'Michael', '{ "postcode": 90210 }'); 20082 * ``` 20083 * 20084 * @exampleResponse Updating JSON data 20085 * ```json 20086 * { 20087 * "data": [ 20088 * { 20089 * "id": 1, 20090 * "name": "Michael", 20091 * "address": { 20092 * "street": "Melrose Place", 20093 * "postcode": 90210 20094 * } 20095 * } 20096 * ], 20097 * "status": 200, 20098 * "statusText": "OK" 20099 * } 20100 * ``` 20101 */ 20102 update(t, { count: e } = {}) { 20103 var s; 20104 const r = "PATCH", { url: n, headers: o } = this.cloneRequestState(); 20105 return e && o.append("Prefer", `count=${e}`), new st({ 20106 method: r, 20107 url: n, 20108 headers: o, 20109 schema: this.schema, 20110 body: t, 20111 fetch: (s = this.fetch) !== null && s !== void 0 ? s : fetch, 20112 urlLengthLimit: this.urlLengthLimit, 20113 retry: this.retry 20114 }); 20115 } 20116 /** 20117 * Perform a DELETE on the table or view. 20118 * 20119 * By default, deleted rows are not returned. To return it, chain the call
20120 * with `.select()` after filters. 20121 * 20122 * @param options - Named parameters 20123 * 20124 * @param options.count - Count algorithm to use to count deleted rows. 20125 * 20126 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 20127 * hood. 20128 * 20129 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 20130 * statistics under the hood. 20131 * 20132 * `"estimated"`: Uses exact count for low numbers and planned count for high 20133 * numbers. 20134 * 20135 * @category Database 20136 * 20137 * @remarks 20138 * - `delete()` should always be combined with [filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to delete. 20139 * - If you use `delete()` with filters and you have 20140 * [RLS](/docs/learn/auth-deep-dive/auth-row-level-security) enabled, only 20141 * rows visible through `SELECT` policies are deleted. Note that by default 20142 * no rows are visible, so you need at least one `SELECT`/`ALL` policy that 20143 * makes the rows visible. 20144 * - When using `delete().in()`, specify an array of values to target multiple rows with a single query. This is particularly useful for batch deleting entries that share common criteria, such as deleting users by their IDs. Ensure that the array you provide accurately represents all records you intend to delete to avoid unintended data removal. 20145 * 20146 * @example Delete a single record 20147 * ```ts 20148 * const response = await supabase 20149 * .from('countries') 20150 * .delete() 20151 * .eq('id', 1) 20152 * ``` 20153 * 20154 * @exampleSql Delete a single record 20155 * ```sql 20156 * create table 20157 * countries (id int8 primary key, name text); 20158 * 20159 * insert into 20160 * countries (id, name) 20161 * values 20162 * (1, 'Mordor'); 20163 * ``` 20164 * 20165 * @exampleResponse Delete a single record 20166 * ```json 20167 * { 20168 * "status": 204, 20169 * "statusText": "" 20170 * } 20171 * ``` 20172 * 20173 * @exampleDescription Handling errors 20174 * `error.hint` from Postgres often contains the actionable fix (e.g. `"Grant the required privileges to the current role with: GRANT DELETE ON public.countries TO anon;"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`. 20175 * 20176 * @example Handling errors 20177 * ```js 20178 * const { error } = await supabase.from('countries').delete().eq('id', 1) 20179 * if (error) console.error(error) 20180 * ``` 20181 * 20182 * @example Delete a record and return it 20183 * ```ts 20184 * const { data, error } = await supabase 20185 * .from('countries') 20186 * .delete() 20187 * .eq('id', 1) 20188 * .select() 20189 * ``` 20190 * 20191 * @exampleSql Delete a record and return it 20192 * ```sql 20193 * create table 20194 * countries (id int8 primary key, name text); 20195 * 20196 * insert into 20197 * countries (id, name) 20198 * values 20199 * (1, 'Mordor'); 20200 * ``` 20201 * 20202 * @exampleResponse Delete a record and return it 20203 * ```json 20204 * { 20205 * "data": [ 20206 * { 20207 * "id": 1, 20208 * "name": "Mordor" 20209 * } 20210 * ], 20211 * "status": 200, 20212 * "statusText": "OK" 20213 * } 20214 * ``` 20215 * 20216 * @example Delete multiple records 20217 * ```ts 20218 * const response = await supabase 20219 * .from('countries') 20220 * .delete() 20221 * .in('id', [1, 2, 3]) 20222 * ``` 20223 * 20224 * @exampleSql Delete multiple records 20225 * ```sql 20226 * create table 20227 * countries (id int8 primary key, name text); 20228 * 20229 * insert into 20230 * countries (id, name) 20231 * values 20232 * (1, 'Rohan'), (2, 'The Shire'), (3, 'Mordor'); 20233 * ``` 20234 * 20235 * @exampleResponse Delete multiple records 20236 * ```json 20237 * { 20238 * "status": 204, 20239 * "statusText": "" 20240 * } 20241 * ``` 20242 */ 20243 delete({ count: t } = {}) { 20244 var e; 20245 const s = "DELETE", { url: r, headers: n } = this.cloneRequestState(); 20246 return t && n.append("Prefer", `count=${t}`), new st({ 20247 method: s, 20248 url: r, 20249 headers: n, 20250 schema: this.schema, 20251 fetch: (e = this.fetch) !== null && e !== void 0 ? e : fetch, 20252 urlLengthLimit: this.urlLengthLimit, 20253 retry: this.retry 20254 }); 20255 } 20256}; 20257function UM(t, e) { 20258 try { 20259 const L = JSON.parse(t); 20260 if (L && typeof L == "object" && !Array.isArray(L)) { 20261 var s, r, n, o; 20262 return new ut({ 20263 message: String((s = L.message) !== null && s !== void 0 ? s : t), 20264 details: (r = L.details) !== null && r !== void 0 ? r : "", 20265 hint: (n = L.hint) !== null && n !== void 0 ? n : "", 20266 code: (o = L.code) !== null && o !== void 0 ? o : "" 20267 }); 20268 } 20269 } catch { 20270 } 20271 return new ut({ 20272 message: t || e, 20273 details: "", 20274 hint: "", 20275 code: "" 20276 }); 20277} 20278function Xa(t, e, s) { 20279 var r; 20280 const n = t; 20281 return { 20282 success: !1, 20283 error: new ut({ 20284 message: `${(r = n?.name) !== null && r !== void 0 ? r : "FetchError"}: ${n?.message}`, 20285 details: "", 20286 hint: "", 20287 code: "" 20288 }), 20289 data: null, 20290 count: null, 20291 status: e, 20292 statusText: s 20293 }; 20294} 20295var GM = class pi { 20296 /** 20297 * Creates a PostgREST client. 20298 *
20299 * @param url - URL of the PostgREST endpoint 20300 * @param options - Named parameters 20301 * @param options.headers - Custom headers 20302 * @param options.schema - Postgres schema to switch to 20303 * @param options.fetch - Custom fetch 20304 * @param options.timeout - Optional timeout in milliseconds for all requests. When set, requests will automatically abort after this duration to prevent indefinite hangs. 20305 * @param options.urlLengthLimit - Maximum URL length in characters before warnings/errors are triggered. Defaults to 8000. 20306 * @param options.retry - Enable or disable automatic retries for transient errors. 20307 * When enabled, idempotent requests (GET, HEAD, OPTIONS) that fail with network 20308 * errors or HTTP 503/520 responses will be automatically retried up to 3 times 20309 * with exponential backoff (1s, 2s, 4s). Defaults to `true`. 20310 * @example Using supabase-js (recommended) 20311 * ```ts 20312 * import { createClient } from '@supabase/supabase-js' 20313 * 20314 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 20315 * const { data, error } = await supabase.from('profiles').select('*') 20316 * ``` 20317 * 20318 * @category Database 20319 * 20320 * @remarks 20321 * - A `timeout` option (in milliseconds) can be set to automatically abort requests that take too long. 20322 * - A `urlLengthLimit` option (default: 8000) can be set to control when URL length warnings are included in error messages for aborted requests. 20323 * 20324 * @example Standalone import for bundle-sensitive environments 20325 * ```ts 20326 * import { PostgrestClient } from '@supabase/postgrest-js' 20327 * 20328 * const postgrest = new PostgrestClient('https://xyzcompany.supabase.co/rest/v1', { 20329 * headers: { apikey: 'your-publishable-key' }, 20330 * schema: 'public', 20331 * timeout: 30000, // 30 second timeout 20332 * }) 20333 * ``` 20334 */ 20335 constructor(e, { headers: s = {}, schema: r, fetch: n, timeout: o, urlLengthLimit: L = 8e3, retry: d } = {}) { 20336 this.url = e, this.headers = new Headers(s), this.schemaName = r, this.urlLengthLimit = L; 20337 const l = n ?? globalThis.fetch; 20338 o !== void 0 && o > 0 ? this.fetch = (g, f) => { 20339 const p = new AbortController(), M = setTimeout(() => p.abort(), o), u = f?.signal; 20340 if (u) { 20341 if (u.aborted) 20342 return clearTimeout(M), l(g, f); 20343 const h = () => { 20344 clearTimeout(M), p.abort(); 20345 }; 20346 return u.addEventListener("abort", h, { once: !0 }), l(g, V1(V1({}, f), {}, { signal: p.signal })).finally(() => { 20347 clearTimeout(M), u.removeEventListener("abort", h); 20348 }); 20349 } 20350 return l(g, V1(V1({}, f), {}, { signal: p.signal })).finally(() => clearTimeout(M)); 20351 } : this.fetch = l, this.retry = d; 20352 } 20353 from(e) { 20354 if (!e || typeof e != "string" || e.trim() === "") throw new Error("Invalid relation name: relation must be a non-empty string."); 20355 return new qM(new URL(`${this.url}/${e}`), { 20356 headers: new Headers(this.headers), 20357 schema: this.schemaName, 20358 fetch: this.fetch, 20359 urlLengthLimit: this.urlLengthLimit, 20360 retry: this.retry 20361 }); 20362 } 20363 /** 20364 * Select a schema to query or perform an function (rpc) call. 20365 * 20366 * The schema needs to be on the list of exposed schemas inside Supabase. 20367 * 20368 * @param schema - The schema to query 20369 * 20370 * @category Database 20371 */ 20372 schema(e) { 20373 return new pi(this.url, { 20374 headers: this.headers, 20375 schema: e, 20376 fetch: this.fetch, 20377 urlLengthLimit: this.urlLengthLimit, 20378 retry: this.retry 20379 }); 20380 } 20381 /** 20382 * Fetch the OpenAPI description PostgREST publishes for this client's schema. 20383 * 20384 * The document lists only the tables, views and functions the caller's role 20385 * holds privileges on; PostgREST applies that filtering server-side. The 20386 * schema is the one this client was created with, so call `.schema()` first 20387 * to describe a different one. Transient failures are retried according to 20388 * the client's `retry` option, like any other idempotent request. 20389 * 20390 * @example 20391 * ```ts 20392 * const { data, error } = await supabase.getOpenApiSpec() 20393 * ``` 20394 * 20395 * @example Describe a schema other than the client default 20396 * ```ts 20397 * const { data, error } = await supabase.schema('billing').getOpenApiSpec() 20398 * ``` 20399 * 20400 * @category Database 20401 */ 20402 async getOpenApiSpec() { 20403 var e = this, s; 20404 const r = new Headers(e.headers); 20405 r.set("Accept", "application/openapi+json"), e.schemaName && r.set("Accept-Profile", e.schemaName); 20406 const n = {}; 20407 r.forEach((g, f) => { 20408 n[f] = g; 20409 }); 20410 const o = (s = e.fetch) !== null && s !== void 0 ? s : globalThis.fetch; 20411 let L; 20412 try { 20413 var d; 20414 L = await fi(o, `${e.url}/`, { 20415 method: "GET", 20416 headers: n 20417 }, (d = e.retry) !== null && d !== void 0 ? d : !0); 20418 } catch (g) { 20419 return Xa(g, 0, ""); 20420 } 20421 let l; 20422 try { 20423 l = await L.text(); 20424 } catch (g) { 20425 return Xa(g, L.status, L.statusText); 20426 } 20427 if (L.ok) try { 20428 return { 20429 success: !0, 20430 error: null, 20431 data: JSON.parse(l), 20432 count: null, 20433 status: L.status, 20434 statusText: L.statusText 20435 }; 20436 } catch { 20437 } 20438 return { 20439 success: !1, 20440 error: UM(l, L.statusText), 20441 data: null, 20442 count: null, 20443 status: L.status, 20444 statusText: L.statusText 20445 }; 20446 } 20447 /** 20448 * Perform a function call. 20449 * 20450 * @param fn - The function name to call 20451 * @param args - The arguments to pass to the function call
20452 * @param options - Named parameters 20453 * @param options.head - When set to `true`, `data` will not be returned. 20454 * Useful if you only need the count. 20455 * @param options.get - When set to `true`, the function will be called with 20456 * read-only access mode. 20457 * @param options.count - Count algorithm to use to count rows returned by the 20458 * function. Only applicable for [set-returning 20459 * functions](https://www.postgresql.org/docs/current/functions-srf.html). 20460 * 20461 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 20462 * hood. 20463 * 20464 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 20465 * statistics under the hood. 20466 * 20467 * `"estimated"`: Uses exact count for low numbers and planned count for high 20468 * numbers. 20469 * 20470 * @example 20471 * ```ts 20472 * // For cross-schema functions where type inference fails, use overrideTypes: 20473 * const { data } = await supabase 20474 * .schema('schema_b') 20475 * .rpc('function_a', {}) 20476 * .overrideTypes<{ id: string; user_id: string }[]>() 20477 * ``` 20478 * 20479 * @category Database 20480 * 20481 * @example Call a Postgres function without arguments 20482 * ```ts 20483 * const { data, error } = await supabase.rpc('hello_world') 20484 * ``` 20485 * 20486 * @exampleSql Call a Postgres function without arguments 20487 * ```sql 20488 * create function hello_world() returns text as $$ 20489 * select 'Hello world'; 20490 * $$ language sql; 20491 * ``` 20492 * 20493 * @exampleResponse Call a Postgres function without arguments 20494 * ```json 20495 * { 20496 * "data": "Hello world", 20497 * "status": 200, 20498 * "statusText": "OK" 20499 * } 20500 * ``` 20501 * 20502 * @example Call a Postgres function with arguments 20503 * ```ts 20504 * const { data, error } = await supabase.rpc('echo', { say: 'ð' }) 20505 * ``` 20506 * 20507 * @exampleSql Call a Postgres function with arguments 20508 * ```sql 20509 * create function echo(say text) returns text as $$ 20510 * select say; 20511 * $$ language sql; 20512 * ``` 20513 * 20514 * @exampleResponse Call a Postgres function with arguments 20515 * ```json 20516 * { 20517 * "data": "ð", 20518 * "status": 200, 20519 * "statusText": "OK" 20520 * } 20521 * 20522 * ``` 20523 * 20524 * @exampleDescription Bulk processing 20525 * You can process large payloads by passing in an array as an argument. 20526 * 20527 * @example Bulk processing 20528 * ```ts 20529 * const { data, error } = await supabase.rpc('add_one_each', { arr: [1, 2, 3] }) 20530 * ``` 20531 * 20532 * @exampleSql Bulk processing 20533 * ```sql 20534 * create function add_one_each(arr int[]) returns int[] as $$ 20535 * select array_agg(n + 1) from unnest(arr) as n; 20536 * $$ language sql; 20537 * ``` 20538 * 20539 * @exampleResponse Bulk processing 20540 * ```json 20541 * { 20542 * "data": [ 20543 * 2, 20544 * 3, 20545 * 4 20546 * ], 20547 * "status": 200, 20548 * "statusText": "OK" 20549 * } 20550 * ``` 20551 * 20552 * @exampleDescription Call a Postgres function with filters
20553 * Postgres functions that return tables can also be combined with [Filters](/docs/reference/javascript/using-filters) and [Modifiers](/docs/reference/javascript/using-modifiers). 20554 * 20555 * @example Call a Postgres function with filters 20556 * ```ts 20557 * const { data, error } = await supabase 20558 * .rpc('list_stored_countries') 20559 * .eq('id', 1) 20560 * .single() 20561 * ``` 20562 * 20563 * @exampleSql Call a Postgres function with filters 20564 * ```sql 20565 * create table 20566 * countries (id int8 primary key, name text); 20567 * 20568 * insert into 20569 * countries (id, name) 20570 * values 20571 * (1, 'Rohan'), 20572 * (2, 'The Shire'); 20573 * 20574 * create function list_stored_countries() returns setof countries as $$ 20575 * select * from countries; 20576 * $$ language sql; 20577 * ``` 20578 * 20579 * @exampleResponse Call a Postgres function with filters 20580 * ```json 20581 * { 20582 * "data": { 20583 * "id": 1, 20584 * "name": "Rohan" 20585 * }, 20586 * "status": 200, 20587 * "statusText": "OK" 20588 * } 20589 * ``` 20590 * 20591 * @example Call a read-only Postgres function 20592 * ```ts 20593 * const { data, error } = await supabase.rpc('hello_world', undefined, { get: true }) 20594 * ``` 20595 * 20596 * @exampleSql Call a read-only Postgres function 20597 * ```sql 20598 * create function hello_world() returns text as $$ 20599 * select 'Hello world'; 20600 * $$ language sql; 20601 * ``` 20602 * 20603 * @exampleResponse Call a read-only Postgres function 20604 * ```json 20605 * { 20606 * "data": "Hello world", 20607 * "status": 200, 20608 * "statusText": "OK" 20609 * } 20610 * ``` 20611 */ 20612 rpc(e, s = {}, { head: r = !1, get: n = !1, count: o } = {}) { 20613 var L; 20614 let d; 20615 const l = new URL(`${this.url}/rpc/${e}`); 20616 let g; 20617 const f = (u) => u !== null && typeof u == "object" && (!Array.isArray(u) || u.some(f)), p = r && Object.values(s).some(f); 20618 p ? (d = "POST", g = s) : r || n ? (d = r ? "HEAD" : "GET", Object.entries(s).filter(([u, h]) => h !== void 0).map(([u, h]) => [u, Array.isArray(h) ? `{${h.join(",")}}` : `${h}`]).forEach(([u, h]) => { 20619 l.searchParams.append(u, h); 20620 })) : (d = "POST", g = s); 20621 const M = new Headers(this.headers); 20622 return p ? M.set("Prefer", o ? `count=${o},return=minimal` : "return=minimal") : o && M.set("Prefer", `count=${o}`), new st({ 20623 method: d, 20624 url: l, 20625 headers: M, 20626 schema: this.schemaName, 20627 body: g, 20628 fetch: (L = this.fetch) !== null && L !== void 0 ? L : fetch, 20629 urlLengthLimit: this.urlLengthLimit, 20630 retry: this.retry 20631 }); 20632 } 20633}; 20634class JM { 20635 /** 20636 * Static-only utility â prevent instantiation. 20637 */ 20638 constructor() { 20639 } 20640 static detectEnvironment() { 20641 var e; 20642 if (typeof WebSocket < "u") 20643 return { type: "native", wsConstructor: WebSocket }; 20644 const s = globalThis; 20645 if (typeof globalThis < "u" && typeof s.WebSocket < "u") 20646 return { type: "native", wsConstructor: s.WebSocket }; 20647 const r = typeof global < "u" ? global : void 0; 20648 if (r && typeof r.WebSocket < "u") 20649 return { type: "native", wsConstructor: r.WebSocket }; 20650 if (typeof globalThis < "u" && typeof s.WebSocketPair < "u" && typeof globalThis.WebSocket > "u") 20651 return { 20652 type: "cloudflare", 20653 error: "Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.", 20654 workaround: "Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime." 20655 }; 20656 if (typeof globalThis < "u" && s.EdgeRuntime || typeof navigator < "u" && (!((e = navigator.userAgent) === null || e === void 0) && e.includes("Vercel-Edge"))) 20657 return { 20658 type: "unsupported", 20659 error: "Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.", 20660 workaround: "Use serverless functions or a different deployment target for WebSocket functionality." 20661 }; 20662 const n = globalThis.process; 20663 if (n) { 20664 const o = n.versions; 20665 if (o && o.node) 20666 return { 20667 type: "unsupported", 20668 error: "Node.js detected but native WebSocket not found.", 20669 workaround: "Ensure you are running Node.js 22+ or provide a WebSocket implementation via the transport option." 20670 }; 20671 } 20672 return { 20673 type: "unsupported", 20674 error: "Unknown JavaScript runtime without WebSocket support.", 20675 workaround: "Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation." 20676 }; 20677 } 20678 /** 20679 * Returns the best available WebSocket constructor for the current runtime. 20680 * 20681 * @category Realtime 20682 * 20683 * @example Example with error handling 20684 * ```ts 20685 * try { 20686 * const WS = WebSocketFactory.getWebSocketConstructor() 20687 * const socket = new WS('wss://example.com/socket') 20688 * } catch (error) { 20689 * console.error('WebSocket not available in this environment.', error) 20690 * } 20691 * ``` 20692 */ 20693 static getWebSocketConstructor() { 20694 const e = this.detectEnvironment(); 20695 if (e.wsConstructor) 20696 return e.wsConstructor; 20697 let s = e.error || "WebSocket not supported in this environment."; 20698 throw e.workaround && (s += ` 20699 20700Suggested solution: ${e.workaround}`), new Error(s); 20701 } 20702 /** 20703 * Detects whether the runtime can establish WebSocket connections. 20704 * 20705 * @category Realtime 20706 * 20707 * @example Example in a Node.js script 20708 * ```ts 20709 * if (!WebSocketFactory.isWebSocketSupported()) { 20710 * console.error('WebSockets are required for this script.') 20711 * process.exitCode = 1 20712 * } 20713 * ``` 20714 */ 20715 static isWebSocketSupported() { 20716 try { 20717 return this.detectEnvironment().type === "native"; 20718 } catch { 20719 return !1; 20720 } 20721 } 20722} 20723const KM = "2.117.2", YM = `realtime-js/${KM}`, XM = "1.0.0", Mi = "2.0.0", QM = Mi, eu = 1e4, tu = 15e3, au = 1e4, su = 100, x1 = { 20724 closed: "closed", 20725 errored: "errored", 20726 joined: "joined", 20727 joining: "joining", 20728 leaving: "leaving" 20729}, ui = { 20730 close: "phx_close", 20731 error: "phx_error", 20732 join: "phx_join", 20733 leave: "phx_leave", 20734 access_token: "access_token" 20735}, Y4 = { 20736 connecting: "connecting", 20737 closing: "closing", 20738 closed: "closed" 20739}; 20740class iu { 20741 constructor(e) { 20742 this.HEADER_LENGTH = 1, this.USER_BROADCAST_PUSH_META_LENGTH = 6, this.KINDS = { userBroadcastPush: 3, userBroadcast: 4 }, this.BINARY_ENCODING = 0, this.JSON_ENCODING = 1, this.BROADCAST_EVENT = "broadcast", this.allowedMetadataKeys = [], this.allowedMetadataKeys = e ?? []; 20743 } 20744 encode(e, s) { 20745 if (e.event === this.BROADCAST_EVENT && !(e.payload instanceof ArrayBuffer) && typeof e.payload.event == "string") 20746 return s(this._binaryEncodeUserBroadcastPush(e));
20747 let r = [e.join_ref, e.ref, e.topic, e.event, e.payload]; 20748 return s(JSON.stringify(r)); 20749 } 20750 _binaryEncodeUserBroadcastPush(e) { 20751 var s; 20752 return this._isArrayBuffer((s = e.payload) === null || s === void 0 ? void 0 : s.payload) ? this._encodeBinaryUserBroadcastPush(e) : this._encodeJsonUserBroadcastPush(e); 20753 } 20754 _encodeBinaryUserBroadcastPush(e) { 20755 var s, r; 20756 const n = (r = (s = e.payload) === null || s === void 0 ? void 0 : s.payload) !== null && r !== void 0 ? r : new ArrayBuffer(0); 20757 return this._encodeUserBroadcastPush(e, this.BINARY_ENCODING, n); 20758 } 20759 _encodeJsonUserBroadcastPush(e) { 20760 var s, r; 20761 const n = (r = (s = e.payload) === null || s === void 0 ? void 0 : s.payload) !== null && r !== void 0 ? r : {}, L = new TextEncoder().encode(JSON.stringify(n)).buffer; 20762 return this._encodeUserBroadcastPush(e, this.JSON_ENCODING, L); 20763 } 20764 _encodeUserBroadcastPush(e, s, r) { 20765 var n, o; 20766 const L = new TextEncoder(), d = L.encode(e.topic), l = L.encode((n = e.ref) !== null && n !== void 0 ? n : ""), g = L.encode((o = e.join_ref) !== null && o !== void 0 ? o : ""), f = L.encode(e.payload.event), p = this.allowedMetadataKeys ? this._pick(e.payload, this.allowedMetadataKeys) : {}, M = L.encode(Object.keys(p).length === 0 ? "" : JSON.stringify(p)); 20767 if (g.length > 255) 20768 throw new Error(`joinRef length ${g.length} exceeds maximum of 255`); 20769 if (l.length > 255) 20770 throw new Error(`ref length ${l.length} exceeds maximum of 255`); 20771 if (d.length > 255) 20772 throw new Error(`topic length ${d.length} exceeds maximum of 255`); 20773 if (f.length > 255) 20774 throw new Error(`userEvent length ${f.length} exceeds maximum of 255`); 20775 if (M.length > 255) 20776 throw new Error(`metadata length ${M.length} exceeds maximum of 255`); 20777 const u = this.USER_BROADCAST_PUSH_META_LENGTH + g.length + l.length + d.length + f.length + M.length, h = new ArrayBuffer(this.HEADER_LENGTH + u), x = new DataView(h), _ = new Uint8Array(h); 20778 let v = 0; 20779 x.setUint8(v++, this.KINDS.userBroadcastPush), x.setUint8(v++, g.length), x.setUint8(v++, l.length), x.setUint8(v++, d.length), x.setUint8(v++, f.length), x.setUint8(v++, M.length), x.setUint8(v++, s), _.set(g, v), v += g.length, _.set(l, v), v += l.length, _.set(d, v), v += d.length, _.set(f, v), v += f.length, _.set(M, v), v += M.length; 20780 var y = new Uint8Array(h.byteLength + r.byteLength); 20781 return y.set(new Uint8Array(h), 0), y.set(new Uint8Array(r), h.byteLength), y.buffer; 20782 } 20783 decode(e, s) { 20784 if (this._isArrayBuffer(e)) { 20785 let r = this._binaryDecode(e); 20786 return s(r); 20787 } 20788 if (typeof e == "string") { 20789 const r = JSON.parse(e), [n, o, L, d, l] = r; 20790 return s({ join_ref: n, ref: o, topic: L, event: d, payload: l }); 20791 } 20792 return s({}); 20793 } 20794 _binaryDecode(e) { 20795 const s = new DataView(e), r = s.getUint8(0), n = new TextDecoder(); 20796 switch (r) { 20797 case this.KINDS.userBroadcast: 20798 return this._decodeUserBroadcast(e, s, n); 20799 } 20800 } 20801 _decodeUserBroadcast(e, s, r) { 20802 const n = s.getUint8(1), o = s.getUint8(2), L = s.getUint8(3), d = s.getUint8(4); 20803 let l = this.HEADER_LENGTH + 4; 20804 const g = r.decode(e.slice(l, l + n)); 20805 l = l + n; 20806 const f = r.decode(e.slice(l, l + o)); 20807 l = l + o; 20808 const p = r.decode(e.slice(l, l + L)); 20809 l = l + L; 20810 const M = e.slice(l, e.byteLength), u = d === this.JSON_ENCODING ? JSON.parse(r.decode(M)) : M, h = { 20811 type: this.BROADCAST_EVENT, 20812 event: f, 20813 payload: u 20814 }; 20815 return L > 0 && (h.meta = JSON.parse(p)), { join_ref: null, ref: null, topic: g, event: this.BROADCAST_EVENT, payload: h }; 20816 } 20817 _isArrayBuffer(e) { 20818 var s; 20819 return e instanceof ArrayBuffer || ((s = e?.constructor) === null || s === void 0 ? void 0 : s.name) === "ArrayBuffer"; 20820 } 20821 _pick(e, s) { 20822 return !e || typeof e != "object" ? {} : Object.fromEntries(Object.entries(e).filter(([r]) => s.includes(r))); 20823 } 20824} 20825var K; 20826(function(t) { 20827 t.abstime = "abstime", t.bool = "bool", t.date = "date", t.daterange = "daterange", t.float4 = "float4", t.float8 = "float8", t.int2 = "int2", t.int4 = "int4", t.int4range = "int4range", t.int8 = "
20827int8", t.int8range = "int8range", t.json = "json", t.jsonb = "jsonb", t.money = "money", t.numeric = "numeric", t.oid = "oid", t.reltime = "reltime", t.text = "text", t.time = "time", t.timestamp = "timestamp", t.timestamptz = "timestamptz", t.timetz = "timetz", t.tsrange = "tsrange", t.tstzrange = "tstzrange"; 20828})(K || (K = {})); 20829const Qa = (t, e, s = {}) => { 20830 var r; 20831 const n = (r = s.skipTypes) !== null && r !== void 0 ? r : []; 20832 return e ? Object.keys(e).reduce((o, L) => (o[L] = ru(L, t, e, n), o), {}) : {}; 20833}, ru = (t, e, s, r) => { 20834 const n = e.find((d) => d.name === t), o = n?.type, L = s[t]; 20835 return o && !r.includes(o) ? hi(o, L) : X4(L); 20836}, hi = (t, e) => { 20837 if (t.charAt(0) === "_") { 20838 const s = t.slice(1, t.length); 20839 return cu(e, s); 20840 } 20841 switch (t) { 20842 case K.bool: 20843 return nu(e); 20844 case K.float4: 20845 case K.float8: 20846 case K.int2: 20847 case K.int4: 20848 case K.int8: 20849 case K.numeric: 20850 case K.oid: 20851 return ou(e); 20852 case K.json: 20853 case K.jsonb: 20854 return Lu(e); 20855 case K.timestamp: 20856 return lu(e); 20857 // Format to be consistent with PostgREST 20858 case K.abstime: 20859 // To allow users to cast it based on Timezone 20860 case K.date: 20861 // To allow users to cast it based on Timezone 20862 case K.daterange: 20863 case K.int4range: 20864 case K.int8range: 20865 case K.money: 20866 case K.reltime: 20867 // To allow users to cast it based on Timezone 20868 case K.text: 20869 case K.time: 20870 // To allow users to cast it based on Timezone 20871 case K.timestamptz: 20872 // To allow users to cast it based on Timezone 20873 case K.timetz: 20874 // To allow users to cast it based on Timezone 20875 case K.tsrange: 20876 case K.tstzrange: 20877 return X4(e); 20878 default: 20879 return X4(e); 20880 } 20881}, X4 = (t) => t, nu = (t) => { 20882 switch (t) { 20883 case "t": 20884 return !0; 20885 case "f": 20886 return !1; 20887 default: 20888 return t; 20889 } 20890}, ou = (t) => { 20891 if (typeof t == "string") { 20892 const e = parseFloat(t); 20893 if (!Number.isNaN(e)) 20894 return e; 20895 } 20896 return t; 20897}, Lu = (t) => { 20898 if (typeof t == "string") 20899 try { 20900 return JSON.parse(t); 20901 } catch { 20902 return t; 20903 } 20904 return t; 20905}, cu = (t, e) => { 20906 if (typeof t != "string") 20907 return t; 20908 const s = t.length - 1, r = t[s]; 20909 if (t[0] === "{" && r === "}") { 20910 let o; 20911 const L = t.slice(1, s); 20912 try { 20913 o = JSON.parse("[" + L + "]"); 20914 } catch { 20915 o = L ? L.split(",") : []; 20916 } 20917 return o.map((d) => hi(e, d)); 20918 } 20919 return t; 20920}, lu = (t) => typeof t == "string" ? t.replace(" ", "T") : t, mi = (t) => { 20921 const e = new URL(t); 20922 return e.protocol = e.protocol.replace(/^ws/i, "http"), e.pathname = e.pathname.replace(/\/+$/, "").replace(/\/socket\/websocket$/i, "").replace(/\/socket$/i, "").replace(/\/websocket$/i, ""), e.pathname === "" || e.pathname === "/" ? e.pathname = "/api/broadcast" : e.pathname = e.pathname + "/api/broadcast", e.href; 20923}; 20924var ht = (t) => typeof t == "function" ? ( 20925 /** @type {() => T} */ 20926 t 20927) : function() { 20928 return t; 20929}, du = typeof self < "u" ? self : null, it = typeof window < "u" ? window : null, Ye = du || it || globalThis, gu = "2.0.0", fu = 1e4, pu = 1e3, Mu = 100, Xe = ( 20930 /** @type {const} */ 20931 { connecting: 0, open: 1, closing: 2, closed: 3 } 20932), Be = ( 20933 /** @type {const} */ 20934 { 20935 closed: "closed", 20936 errored: "errored", 20937 joined: "joined", 20938 joining: "joining", 20939 leaving: "leaving" 20940 } 20941), l1 = ( 20942 /** @type {const} */ 20943 { 20944 close: "phx_close", 20945 error: "phx_error", 20946 join: "phx_join", 20947 reply: "phx_reply", 20948 leave: "phx_leave" 20949 } 20950), Q4 = ( 20951 /** @type {const} */ 20952 { 20953 longpoll: "longpoll", 20954 websocket: "websocket" 20955 } 20956), uu = ( 20957 /** @type {const} */ 20958 { 20959 complete: 4 20960 } 20961), e5 = "base64url.bearer.phx.", D2 = class { 20962 /** 20963 * Initializes the Push 20964 * @param {Channel} channel - The Channel 20965 * @param {ChannelEvent} event - The event, for example `"phx_join"` 20966 * @param {() => Record<string, unknown>} payload - The payload, for example `{user_id: 123}` 20967 * @param {number} timeout - The push timeout in milliseconds 20968 */ 20969 constructor(t, e, s, r) { 20970 this.channel = t, this.event = e, this.payload = s || function() { 20971 return {}; 20972 }, this.receivedResp = null, this.timeout = r, this.timeoutTimer = null, this.recHo
vendor: 10,493 bytes, lines 20972-21286
20972oks = [], this.sent = !1, this.ref = void 0; 20973 } 20974 /** 20975 * 20976 * @param {number} timeout 20977 */ 20978 resend(t) { 20979 this.timeout = t, this.reset(), this.send(); 20980 } 20981 /** 20982 * 20983 */ 20984 send() { 20985 this.hasReceived("timeout") || (this.startTimeout(), this.sent = !0, this.channel.socket.push({ 20986 topic: this.channel.topic, 20987 event: this.event, 20988 payload: this.payload(), 20989 ref: this.ref, 20990 join_ref: this.channel.joinRef() 20991 })); 20992 } 20993 /** 20994 * 20995 * @param {string} status 20996 * @param {(response: any) => void} callback 20997 */ 20998 receive(t, e) { 20999 return this.hasReceived(t) && e(this.receivedResp.response), this.recHooks.push({ status: t, callback: e }), this; 21000 } 21001 reset() { 21002 this.cancelRefEvent(), this.ref = null, this.refEvent = null, this.receivedResp = null, this.sent = !1; 21003 } 21004 destroy() { 21005 this.cancelRefEvent(), this.cancelTimeout(); 21006 } 21007 /** 21008 * @private 21009 */ 21010 matchReceive({ status: t, response: e, _ref: s }) { 21011 this.recHooks.filter((r) => r.status === t).forEach((r) => r.callback(e)); 21012 } 21013 /** 21014 * @private 21015 */ 21016 cancelRefEvent() { 21017 this.refEvent && this.channel.off(this.refEvent); 21018 } 21019 cancelTimeout() { 21020 clearTimeout(this.timeoutTimer), this.timeoutTimer = null; 21021 } 21022 startTimeout() { 21023 this.timeoutTimer && this.cancelTimeout(), this.ref = this.channel.socket.makeRef(), this.refEvent = this.channel.replyEventName(this.ref), this.channel.on(this.refEvent, (t) => { 21024 this.cancelRefEvent(), this.cancelTimeout(), this.receivedResp = t, this.matchReceive(t); 21025 }), this.timeoutTimer = setTimeout(() => { 21026 this.trigger("timeout", {}); 21027 }, this.timeout); 21028 } 21029 /** 21030 * @private 21031 */ 21032 hasReceived(t) { 21033 return this.receivedResp && this.receivedResp.status === t; 21034 } 21035 trigger(t, e) { 21036 this.channel.trigger(this.refEvent, { status: t, response: e }); 21037 } 21038}, xi = class { 21039 /** 21040 * @param {() => void} callback 21041 * @param {(tries: number) => number} timerCalc 21042 */ 21043 constructor(t, e) { 21044 this.callback = t, this.timerCalc = e, this.timer = void 0, this.tries = 0; 21045 } 21046 reset() { 21047 this.tries = 0, clearTimeout(this.timer); 21048 } 21049 /** 21050 * Cancels any previous scheduleTimeout and schedules callback 21051 */ 21052 scheduleTimeout() { 21053 clearTimeout(this.timer), this.timer = setTimeout(() => { 21054 this.tries = this.tries + 1, this.callback(); 21055 }, this.timerCalc(this.tries + 1)); 21056 } 21057}, hu = class { 21058 /** 21059 * @param {string} topic 21060 * @param {Params | (() => Params)} params 21061 * @param {Socket} socket 21062 */ 21063 constructor(t, e, s) { 21064 this.state = Be.closed, this.topic = t, this.params = ht(e || {}), this.socket = s, this.bindings = [], this.bindingRef = 0, this.timeout = this.socket.timeout, this.joinedOnce = !1, this.joinPush = new D2(this, l1.join, this.params, this.timeout), this.pushBuffer = [], this.stateChangeRefs = [], this.rejoinTimer = new xi(() => { 21065 this.socket.isConnected() && this.rejoin(); 21066 }, this.socket.rejoinAfterMs), this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset())), this.stateChangeRefs.push( 21067 this.socket.onOpen(() => { 21068 this.rejoinTimer.reset(), this.isErrored() && this.rejoin(); 21069 }) 21070 ), this.joinPush.receive("ok", () => { 21071 this.state = Be.joined, this.rejoinTimer.reset(), this.pushBuffer.forEach((r) => r.send()), this.pushBuffer = []; 21072 }), this.joinPush.receive("error", (r) => { 21073 this.state = Be.errored, this.socket.hasLogger() && this.socket.log("channel", `error ${this.topic}`, r), this.socket.isConnected() && this.rejoinTimer.scheduleTimeout(); 21074 }), this.onClose(() => { 21075 this.rejoinTimer.reset(), this.socket.hasLogger() && this.socket.log("channel", `close ${this.topic}`), this.state = Be.closed, this.socket.remove(this); 21076 }), this.onError((r) => { 21077 this.socket.hasLogger() && this.socket.log("channel", `error ${this.topic}`, r), this.isJoining() && this.joinPush.reset(), this.state = Be.errored, this.socket.isConnected() && this.rejoinTimer.scheduleTimeout(); 21078 }), this.joinPush.receive("timeout", () => { 21079 this.socket.hasLogger() && this.socket.log("channel", `timeout ${this.topic}`, this.joinPush.timeout), new D2(this, l1.leave, ht({}), this.timeout).send(), this.state = Be.errored, this.joinPush.reset(), this.socket.isConnected() && this.rejoinTimer.scheduleTimeout(); 21080 }), this.on(l1.reply, (r, n) => { 21081 this.trigger(this.replyEventName(n), r); 21082 }); 21083 } 21084 /** 21085 * Join the channel 21086 * @param {number} timeout 21087 * @returns {Push} 21088 */ 21089 join(t = this.timeout) { 21090 if (this.joinedOnce) 21091 throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance"); 21092 return this.timeout = t, this.joinedOnce = !0, this.rejoin(), this.joinPush; 21093 } 21094 /** 21095 * Teardown the channel. 21096 * 21097 * Destroys and stops related timers. 21098 */ 21099 teardown() { 21100 this.pushBuffer.forEach((t) => t.destroy()), this.pushBuffer = [], this.rejoinTimer.reset(), this.joinPush.destroy(), this.state = Be.closed, this.bindings = []; 21101 } 21102 /** 21103 * Hook into channel close 21104 * @param {ChannelBindingCallback} callback 21105 */ 21106 onClose(t) { 21107 this.on(l1.close, t); 21108 } 21109 /** 21110 * Hook into channel errors 21111 * @param {ChannelOnErrorCallback} callback 21112 * @return {number} 21113 */ 21114 onError(t) { 21115 return this.on(l1.error, (e) => t(e)); 21116 } 21117 /** 21118 * Subscribes on channel events 21119 * 21120 * Subscription returns a ref counter, which can be used later to 21121 * unsubscribe the exact event listener 21122 * 21123 * @example 21124 * const ref1 = channel.on("event", do_stuff) 21125 * const ref2 = channel.on("event", do_other_stuff) 21126 * channel.off("event", ref1) 21127 * // Since unsubscription, do_stuff won't fire, 21128 * // while do_other_stuff will keep firing on the "event" 21129 * 21130 * @param {string} event 21131 * @param {ChannelBindingCallback} callback 21132 * @returns {number} ref 21133 */ 21134 on(t, e) { 21135 let s = this.bindingRef++; 21136 return this.bindings.push({ event: t, ref: s, callback: e }), s; 21137 } 21138 /** 21139 * Unsubscribes off of channel events 21140 * 21141 * Use the ref returned from a channel.on() to unsubscribe one 21142 * handler, or pass nothing for the ref to unsubscribe all 21143 * handlers for the given event. 21144 * 21145 * @example 21146 * // Unsubscribe the do_stuff handler 21147 * const ref1 = channel.on("event", do_stuff) 21148 * channel.off("event", ref1) 21149 * 21150 * // Unsubscribe all handlers from event 21151 * channel.off("event") 21152 * 21153 * @param {string} event 21154 * @param {number} [ref] 21155 */ 21156 off(t, e) { 21157 this.bindings = this.bindings.filter((s) => !(s.event === t && (typeof e > "u" || e === s.ref))); 21158 } 21159 /** 21160 * @private 21161 */ 21162 canPush() { 21163 return this.socket.isConnected() && this.isJoined(); 21164 } 21165 /** 21166 * Sends a message `event` to phoenix with the payload `payload`. 21167 * Phoenix receives this in the `handle_in(event, payload, socket)` 21168 * function. if phoenix replies or it times out (default 10000ms), 21169 * then optionally the reply can be received. 21170 * 21171 * @example 21172 * channel.push("event") 21173 * .receive("ok", payload => console.log("phoenix replied:", payload)) 21174 * .receive("error", err => console.log("phoenix errored", err)) 21175 * .receive("timeout", () => console.log("timed out pushing")) 21176 * @param {string} event 21177 * @param {Object} payload 21178 * @param {number} [timeout] 21179 * @returns {Push} 21180 */ 21181 push(t, e, s = this.timeout) { 21182 if (e = e || {}, !this.joinedOnce) 21183 throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`); 21184 let r = new D2(this, t, function() { 21185 return e; 21186 }, s); 21187 return this.canPush() ? r.send() : (r.startTimeout(), this.pushBuffer.push(r)), r; 21188 } 21189 /** Leaves the channel 21190 * 21191 * Unsubscribes from server events, and 21192 * instructs channel to terminate on server 21193 * 21194 * Triggers onClose() hooks 21195 * 21196 * To receive leave acknowledgements, use the `receive` 21197 * hook to bind to the server ack, ie: 21198 * 21199 * @example 21200 * channel.leave().receive("ok", () => alert("left!") ) 21201 * 21202 * @param {number} timeout 21203 * @returns {Push} 21204 */ 21205 leave(t = this.timeout) { 21206 this.rejoinTimer.reset(), this.joinPush.cancelTimeout(), this.state = Be.leaving; 21207 let e = () => { 21208 this.socket.hasLogger() && this.socket.log("channel", `leave ${this.topic}`), this.trigger(l1.close, "leave"); 21209 }, s = new D2(this, l1.leave, ht({}), t); 21210 return s.receive("ok", () => e()).receive("timeout", () => e()), s.send(), this.canPush() || s.trigger("ok", {}), s; 21211 } 21212 /** 21213 * Overridable message hook 21214 * 21215 * Receives all events for specialized message handling 21216 * before dispatching to the channel callbacks. 21217 * 21218 * Must return the payload, modified or unmodified 21219 * @type{ChannelOnMessage} 21220 */ 21221 onMessage(t, e, s) { 21222 return e; 21223 } 21224 /** 21225 * Overridable filter hook 21226 * 21227 * If this function returns `true`, `binding`'s callback will be called. 21228 * 21229 * @type{ChannelFilterBindings} 21230 */ 21231 filterBindings(t, e, s) { 21232 return !0; 21233 } 21234 isMember(t, e, s, r) { 21235 return this.topic !== t ? !1 : r && r !== this.joinRef() ? (this.socket.hasLogger() && this.socket.log("channel", "dropping outdated message", { topic: t, event: e, payload: s, joinRef: r }), !1) : !0; 21236 } 21237 joinRef() { 21238 return this.joinPush.ref; 21239 } 21240 /** 21241 * @private 21242 */ 21243 rejoin(t = this.timeout) { 21244 this.isLeaving() || (this.socket.leaveOpenTopic(this.topic), this.state = Be.joining, this.joinPush.resend(t)); 21245 } 21246 /** 21247 * @param {string} event 21248 * @param {unknown} [payload] 21249 * @param {?string} [ref] 21250 * @param {?string} [joinRef] 21251 */ 21252 trigger(t, e, s, r) { 21253 let n = this.onMessage(t, e, s, r); 21254 if (e && !n) 21255 throw new Error("channel onMessage callbacks must return the payload, modified or unmodified"); 21256 let o = this.bindings.filter((L) => L.event === t && this.filterBindings(L, e, s)); 21257 for (let L = 0; L < o.length; L++) 21258 o[L].callback(n, s, r || this.joinRef()); 21259 } 21260 /** 21261 * @param {string} ref 21262 */ 21263 replyEventName(t) { 21264 return `chan_reply_${t}`; 21265 } 21266 isClosed() { 21267 return this.state === Be.closed; 21268 } 21269 isErrored() { 21270 return this.state === Be.errored; 21271 } 21272 isJoined() { 21273 return this.state === Be.joined; 21274 } 21275 isJoining() { 21276 return this.state === Be.joining; 21277 } 21278 isLeaving() { 21279 return this.state === Be.leaving; 21280 } 21281}, l3 = class { 21282 static request(t, e, s, r, n, o, L) { 21283 if (Ye.XDomainRequest) { 21284 let d = new Ye.XDomainRequest(); 21285 return this.xdomainRequest(d, t, e, r, n, o, L); 21286 }
21286 else if (Ye.XMLHttpRequest) { 21287 let d = new Ye.XMLHttpRequest(); 21288 return this.xhrRequest(d, t, e, s, r, n, o, L); 21289 } else { 21290 if (Ye.fetch && Ye.AbortController) 21291 return this.fetchRequest(t, e, s, r, n, o, L); 21292 throw new Error("No suitable XMLHttpRequest implementation found"); 21293 } 21294 } 21295 static fetchRequest(t, e, s, r, n, o, L) { 21296 let d = { 21297 method: t, 21298 headers: s, 21299 body: r 21300 }, l = null; 21301 return n && (l = new AbortController(), setTimeout(() => l.abort(), n), d.signal = l.signal), Ye.fetch(e, d).then((g) => g.text()).then((g) => this.parseJSON(g)).then((g) => L && L(g)).catch((g) => { 21302 g.name === "AbortError" && o ? o() : L && L(null); 21303 }), l; 21304 } 21305 static xdomainRequest(t, e, s, r, n, o, L) { 21306 return t.timeout = n, t.open(e, s), t.onload = () => { 21307 let d = this.parseJSON(t.responseText); 21308 L && L(d); 21309 }, o && (t.ontimeout = o), t.onprogress = () => { 21310 }, t.send(r), t; 21311 } 21312 static xhrRequest(t, e, s, r, n, o, L, d) { 21313 t.open(e, s, !0), t.timeout = o; 21314 for (let [l, g] of Object.entries(r)) 21315 t.setRequestHeader(l, g); 21316 return t.onerror = () => d && d(null), t.onreadystatechange = () => { 21317 if (t.readyState === uu.complete && d) { 21318 let l = this.parseJSON(t.responseText); 21319 d(l); 21320 } 21321 }, L && (t.ontimeout = L), t.send(n), t; 21322 } 21323 static parseJSON(t) { 21324 if (!t || t === "") 21325 return null; 21326 try { 21327 return JSON.parse(t); 21328 } catch { 21329 return console && console.log("failed to parse JSON response", t), null; 21330 } 21331 } 21332 static serialize(t, e) { 21333 let s = []; 21334 for (var r in t) { 21335 if (!Object.prototype.hasOwnProperty.call(t, r)) 21336 continue; 21337 let n = e ? `${e}[${r}]` : r, o = t[r]; 21338 typeof o == "object" ? s.push(this.serialize(o, n)) : s.push(encodeURIComponent(n) + "=" + encodeURIComponent(o)); 21339 } 21340 return s.join("&"); 21341 } 21342 static appendParams(t, e) { 21343 if (Object.keys(e).length === 0) 21344 return t; 21345 let s = t.match(/\?/) ? "&" : "?"; 21346 return `${t}${s}${this.serialize(e)}`; 21347 } 21348}, mu = (t) => { 21349 let e = "", s = new Uint8Array(t), r = s.byteLength; 21350 for (let n = 0; n < r; n++) 21351 e += String.fromCharCode(s[n]); 21352 return btoa(e); 21353}, X1 = class { 21354 constructor(t, e) { 21355 e && e.length === 2 && e[1].startsWith(e5) && (this.authToken = atob(e[1].slice(e5.length))), this.endPoint = null, this.token = null, this.skipHeartbeat = !0, this.reqs = /* @__PURE__ */ new Set(), this.awaitingBatchAck = !1, this.currentBatch = null, this.currentBatchTimer = null, this.batchBuffer = [], this.onopen = function() { 21356 }, this.onerror = function() { 21357 }, this.onmessage = function() { 21358 }, this.onclose = function() { 21359 }, this.pollEndpoint = this.normalizeEndpoint(t), this.readyState = Xe.connecting, setTimeout(() => this.poll(), 0); 21360 } 21361 normalizeEndpoint(t) { 21362 return t.replace("ws://", "http://").replace("wss://", "https://").replace(new RegExp("(.*)/" + Q4.websocket), "$1/" + Q4.longpoll); 21363 } 21364 endpointURL() { 21365 return l3.appendParams(this.pollEndpoint, { token: this.token }); 21366 } 21367 closeAndRetry(t, e, s) { 21368 this.close(t, e, s), this.readyState = Xe.connecting; 21369 } 21370 ontimeout() { 21371 this.onerror("timeout"), this.closeAndRetry(1005, "timeout", !1); 21372 } 21373 isActive() { 21374 return this.readyState === Xe.open || this.readyState === Xe.connecting; 21375 } 21376 poll() { 21377 const t = { Accept: "application/json" }; 21378 this.authToken && (t["X-Phoenix-AuthToken"] = this.authToken), this.ajax("GET", t, null, () => this.ontimeout(), (e) => { 21379 if (e) { 21380 var { status: s, token: r, messages: n } = e; 21381 if (s === 410 && this.token !== null) { 21382 this.onerror(410), this.closeAndRetry(3410, "session_gone", !1); 21383 return; 21384 } 21385 this.token = r; 21386 } else 21387 s = 0; 21388 switch (s) { 21389 case 200: 21390 n.forEach((o) => { 21391 setTimeout(() => this.onmessage({ data: o }), 0); 21392 }), this.poll(); 21393 break; 21394 case 204: 21395 this.poll(); 21396 break; 21397 case 410: 21398 this.readyState = Xe.open, this.onopen({}), this.poll(); 21399 break; 21400 case 403:
21401 this.onerror(403), this.close(1008, "forbidden", !1); 21402 break; 21403 case 0: 21404 case 500: 21405 this.onerror(500), this.closeAndRetry(1011, "internal server error", 500); 21406 break; 21407 default: 21408 throw new Error(`unhandled poll status ${s}`); 21409 } 21410 }); 21411 } 21412 // we collect all pushes within the current event loop by 21413 // setTimeout 0, which optimizes back-to-back procedural 21414 // pushes against an empty buffer 21415 send(t) { 21416 typeof t != "string" && (t = mu(t)), this.currentBatch ? this.currentBatch.push(t) : this.awaitingBatchAck ? this.batchBuffer.push(t) : (this.currentBatch = [t], this.currentBatchTimer = setTimeout(() => { 21417 this.batchSend(this.currentBatch), this.currentBatch = null; 21418 }, 0)); 21419 } 21420 batchSend(t, e = 0) { 21421 this.awaitingBatchAck = !0; 21422 const s = e + Mu, r = t.slice(e, s); 21423 this.ajax("POST", { "Content-Type": "application/x-ndjson" }, r.join(` 21424`), () => this.onerror("timeout"), (n) => { 21425 !n || n.status !== 200 ? (this.awaitingBatchAck = !1, this.onerror(n && n.status), this.closeAndRetry(1011, "internal server error", !1)) : s < t.length ? this.batchSend(t, s) : this.batchBuffer.length > 0 ? (this.batchSend(this.batchBuffer), this.batchBuffer = []) : this.awaitingBatchAck = !1; 21426 }); 21427 } 21428 close(t, e, s) { 21429 for (let n of this.reqs) 21430 n.abort(); 21431 this.readyState = Xe.closed; 21432 let r = Object.assign({ code: 1e3, reason: void 0, wasClean: !0 }, { code: t, reason: e, wasClean: s }); 21433 this.batchBuffer = [], clearTimeout(this.currentBatchTimer), this.currentBatchTimer = null, typeof CloseEvent < "u" ? this.onclose(new CloseEvent("close", r)) : this.onclose(r); 21434 } 21435 ajax(t, e, s, r, n) { 21436 let o, L = () => { 21437 this.reqs.delete(o), r(); 21438 }; 21439 o = l3.request(t, this.endpointURL(), e, s, this.timeout, L, (d) => { 21440 this.reqs.delete(o), this.isActive() && n(d); 21441 }), this.reqs.add(o); 21442 } 21443}, xu = class Ht { 21444 /** 21445 * Initializes the Presence 21446 * @param {Channel} channel - The Channel 21447 * @param {PresenceOptions} [opts] - The options, for example `{events: {state: "state", diff: "diff"}}` 21448 */ 21449 constructor(e, s = {}) { 21450 let r = s.events || /** @type {PresenceEvents} */ 21451 { state: "presence_state", diff: "presence_diff" }; 21452 this.state = /* @__PURE__ */ Object.create(null), this.pendingDiffs = [], this.channel = e, this.joinRef = null, this.caller = { 21453 onJoin: function() { 21454 }, 21455 onLeave: function() { 21456 }, 21457 onSync: function() { 21458 } 21459 }, this.channel.on(r.state, (n) => { 21460 let { onJoin: o, onLeave: L, onSync: d } = this.caller; 21461 this.joinRef = this.channel.joinRef(), this.state = Ht.syncState(this.state, n, o, L), this.pendingDiffs.forEach((l) => { 21462 this.state = Ht.syncDiff(this.state, l, o, L); 21463 }), this.pendingDiffs = [], d(); 21464 }), this.channel.on(r.diff, (n) => { 21465 let { onJoin: o, onLeave: L, onSync: d } = this.caller; 21466 this.inPendingSyncState() ? this.pendingDiffs.push(n) : (this.state = Ht.syncDiff(this.state, n, o, L), d()); 21467 }); 21468 } 21469 /** 21470 * @param {PresenceOnJoin} callback 21471 */ 21472 onJoin(e) { 21473 this.caller.onJoin = e; 21474 } 21475 /** 21476 * @param {PresenceOnLeave} callback 21477 */ 21478 onLeave(e) { 21479 this.caller.onLeave = e; 21480 } 21481 /** 21482 * @param {PresenceOnSync} callback 21483 */ 21484 onSync(e) { 21485 this.caller.onSync = e; 21486 } 21487 /** 21488 * Returns the array of presences, with selected metadata. 21489 * 21490 * @template [T=PresenceState] 21491 * @param {((key: string, obj: PresenceState) => T)} [by] 21492 * 21493 * @returns {T[]} 21494 */ 21495 list(e) { 21496 return Ht.list(this.state, e); 21497 } 21498 inPendingSyncState() { 21499 return !this.joinRef || this.joinRef !== this.channel.joinRef(); 21500 } 21501 // lower-level public static API 21502 /** 21503 * Used to sync the list of presences on the server 21504 * with the client's state. An optional `onJoin` and `onLeave` callback can 21505 * be provided to react to changes in the client's local presences across 21506 * disconnects and reconnects with the server. 21507 * 21508 * @param {Record<string, PresenceState>} currentState 21509 * @param {Record<string, PresenceState>} newState 21510 * @param {PresenceOnJoin} onJoin 21511 * @param {PresenceOnLeave} onLeave 21512 * 21513 * @returns {Record<string, PresenceState>} 21514 */ 21515 static syncState(e, s, r, n) { 21516 let o = this.toNullProtoObj(this.clone(e)); 21517 s = this.toNullProtoObj(s); 21518 let L = /* @__PURE__ */ Object.create(null), d = /* @__PURE__ */ Object.create(null); 21519 return this.map(o, (l, g) => { 21520 s[l] || (d[l] = g); 21521 }), this.map(s, (l, g) => { 21522 let f = o[l]; 21523 if (f) { 21524 let p = g.metas.map((x) => x.phx_ref), M = f.metas.map((x) => x.phx_ref), u = g.metas.filter((x) => M.indexOf(x.phx_ref) < 0), h = f.metas.filter((x) => p.indexOf(x.phx_ref) < 0); 21525 u.length > 0 && (L[l] = g, L[l].metas = u), h.length > 0 && (d[l] = this.clone(f), d[l].metas = h); 21526 } else 21527 L[l] = g; 21528 }), this.syncDiff(o, { joins: L, leaves: d }, r, n); 21529 } 21530 /** 21531 * 21532 * Used to sync a diff of presence join and leave 21533 * events from the server, as they happen. Like `syncState`, `syncDiff` 21534 * accepts optional `onJoin` and `onLeave` callbacks to react to a user 21535 * joining or leaving from a device. 21536 * 21537 * @param {Record<string, PresenceState>} state 21538 * @param {PresenceDiff} diff 21539 * @param {PresenceOnJoin} onJoin 21540 * @param {PresenceOnLeave} onLeave 21541 * 21542 * @returns {Record<string, PresenceState>} 21543 */ 21544 static syncDiff(e, s, r, n) { 21545 e = this.toNullProtoObj(e); 21546 let { joins: o, leaves: L } = this.clone(s); 21547 return r || (r = function() { 21548 }), n || (n = function() { 21549 }), this.map(o, (d, l) => { 21550 let g = e[d]; 21551 if (e[d] = this.clone(l), g) { 21552 let f = e[d].metas.map((M) => M.phx_ref), p = g.metas.filter((M) => f.indexOf(M.phx_ref) < 0); 21553 e[d].metas.unshift(...p); 21554 } 21555 r(d, g, l); 21556 }), this.map(L, (d, l) => { 21557 let g = e[d]; 21558 if (!g) 21559 return; 21560 let f = l.metas.map((p) => p.phx_ref); 21561 g.metas = g.metas.filter((p) => f.indexOf(p.phx_ref) < 0), n(d, g, l), g.metas.length === 0 && delete e[d]; 21562 }), e; 21563 } 21564 /** 21565 * Returns the array of presences, with selected metadata. 21566 * 21567 * @template [T=PresenceState] 21568 * @param {Record<string, PresenceState>} presences 21569 * @param {((key: string, obj: PresenceState) => T)} [chooser] 21570 * 21571 * @returns {T[]} 21572 */ 21573 static list(e, s) { 21574 return s || (s = function(r, n) { 21575 return n; 21576 }), this.map(e, (r, n) => s(r, n)); 21577 } 21578 // private 21579 /** 21580 * @template T 21581 * @param {Record<string, PresenceState>} obj 21582 * @param {(key: string, obj: PresenceState) => T} func 21583 */ 21584 static map(e, s) { 21585 return Object.getOwnPropertyNames(e).map((r) => s(r, e[r])); 21586 } 21587 // Presence keys are chosen on the server and may collide with 21588 // Object.prototype properties ("__proto__", "constructor", ...), so any 21589 // object indexed by presence key must not have a prototype chain 21590 // 21591 // TODO: replace the null-prototype objects with Maps in Phoenix 2.0 21592 // (breaking change for the lower-level static API) 21593 static toNullProtoObj(e) { 21594 if (Object.getPrototypeOf(e) === null) 21595 return e; 21596 let s = /* @__PURE__ */ Object.create(null); 21597 return Object.getOwnPropertyNames(e).forEach((r) => { 21598 s[r] = e[r]; 21599 }), s; 21600 } 21601 /** 21602 * @template T 21603 * @param {T} obj 21604 * @returns {T} 21605 */ 21606 static clone(e) { 21607 return JSON.parse(JSON.stringify(e)); 21608 } 21609}, z2 = { 21610 HEADER_LENGTH: 1, 21611 META_LENGTH: 4, 21612 KINDS: { push: 0, reply: 1, broadcast: 2 }, 21613 /** 21614 * @template T 21615 * @param {Message<Record<string, any>>} msg 21616 * @param {(msg: ArrayBuffer | string) => T} callback 21617 * @returns {T} 21618 */ 21619 encode(t, e) { 21620 if (t.payload.constructor === ArrayBuffer) 21621 return e(this.binaryEncode(t)); 21622 { 21623 let s = [t.join_ref, t.ref, t.topic, t.event, t.payload]; 21624 return e(JSON.stringify(s)); 21625 } 21626 }, 21627 /** 21628 * @template T 21629 * @param {ArrayBuffer | string} rawPayload 21630 * @param {(msg: Message<unknown>) => T} callback 21631 * @returns {T} 21632 */ 21633 decode(t, e) { 21634 if (t.constructor === ArrayBuffer) 21635 return e(this.binaryDecode(t)); 21636 { 21637 let [s, r, n, o, L] = JSON.parse(t); 21638 return e({ join_ref: s, ref: r, topic: n, event: o, payload: L }); 21639 } 21640 }, 21641 /** @private */ 21642 binaryEncode(t) { 21643 let { join_ref: e, ref: s, event: r, topic: n, payload: o } = t, L = new TextEncoder(), d = L.encode(e), l = L.encode(s), g = L.encode(n), f = L.encode(r); 21644 this.assertFieldSize(d.byteLength, "join_ref"), this.assertFieldSize(l.byteLength, "ref"), this.assertFieldSize(g.byteLength, "topic"), this.assertFieldSize(f.byteLength, "event"); 21645 let p = this.META_LENGTH + d.byteLength + l.byteLength + g.byteLength + f.byteLength, M = new ArrayBuffer(this.HEADER_LENGTH + p), u = new Uint8Array(M), h = new DataView(M), x = 0; 21646 h.setUint8(x++, this.KINDS.push), h.setUint8(x++, d.byteLength), h.setUint8(x++, l.byteLength), h.setUint8(x++, g.byteLength), h.setUint8(x++, f.byteLength), u.set(d, x), x += d.byteLength, u.set(l, x), x += l.byteLength, u.set(g, x), x += g.byteLength, u.set(f, x), x += f.byteLength; 21647 var _ = new Uint8Array(M.byteLength + o.byteLength); 21648 return _.set(u, 0), _.set(new Uint8Array(o), M.byteLength), _.buffer; 21649 }, 21650 assertFieldSize(t, e) { 21651 if (t > 255) 21652 throw new Error(`unable to convert ${e} to binary: must be less than or equal to 255 bytes, but is ${t} bytes`); 21653 }, 21654 /** 21655 * @private 21656 */ 21657 binaryDecode(t) { 21658 let e = new DataView(t), s = e.getUint8(0), r = new TextDecoder(); 21659 switch (s) { 21660 case this.KINDS.push: 21661 return this.decodePush(t, e, r); 21662 case this.KINDS.reply: 21663 return this.decodeReply(t, e, r); 21664 case this.KINDS.broadcast: 21665 return this.decodeBroadcast(t, e, r); 21666 } 21667 }, 21668 /** @private */ 21669 decodePush(t, e, s) { 21670 let r = e.getUint8(1), n = e.getUint8(2), o = e.getUint8(3), L = this.HEADER_LENGTH + this.META_LENGTH - 1, d = s.decode(t.slice(L, L + r)); 21671 L = L + r; 21672 let l = s.decode(t.slice(L, L + n)); 21673 L = L + n; 21674 let g = s.decode(t.slice(L, L + o)); 21675 L = L + o; 21676 let f = t.slice(L, t.byteLength); 21677 return { join_ref: d, ref: null, topic: l, event: g, payload: f }; 21678 }, 21679 /** @private */ 21680 decodeReply(t, e, s) { 21681 let r = e.getUint8(1), n = e.getUint8(2), o = e.getUint8(3), L = e.getUint8(4), d = this.HEADER_LENGTH + this.META_LENGTH, l = s.decode(t.slice(d, d + r)); 21682 d = d + r; 21683 let g = s.decode(t.slice(d, d + n)); 21684 d = d + n; 21685 let f = s.decode(t.slice(d, d + o)); 21686 d = d + o; 21687 let p = s.decode(t.slice(d, d + L)); 21688 d = d + L; 21689 let M = t.slice(d, t.byteLength), u = { status: p, response: M }; 21690 return { join_ref: l, ref: g, topic: f, event: l1.reply, payload: u }; 21691 }, 21692 /** @private */ 21693 decodeBroadcast(t, e, s) { 21694 let r = e.getUint8(1), n = e.getUint8(2), o = this.HEADER_LENGTH + 2, L = s.decode(t.slice(o, o + r)); 21695 o = o + r; 21696 let d = s.decode(t.slice(o, o + n)); 21697 o = o + n; 21698 let l = t.slice(o, t.byteLength); 21699 return { join_ref: null, ref: null, topic: L, event: d, payload: l }; 21700 } 21701}, _u = class { 21702 /** Initializes the Socket * 21703 * 21704 * For IE8 support use an ES5-shim (https://github.com/es-shims/es5-shim) 21705 * 21706 * @constructor 21707 * @param {string} endPoint - The string WebSocket endpoint, ie, `"ws://example.com/socket"`, 21708 * `"wss://example.com"` 21709 * `"/socket"` (inherited host & protocol) 21710 * @param {SocketOptions} [opts] - Optional configuration 21711 */ 21712 constructor(t, e = {}) { 21713 this.stateChangeCallbacks = { open: [], close: [], error: [], message: [] }, this.channels = [], this.sendBuffer = [], this.ref = 0, this.fallbackRef = null, this.timeout = e.timeout || fu, this.transport = e.transport || Ye.WebSocket || X1, this.conn = void 0, this.primaryPassedHealthCheck = !1, this.longPollFallbackMs = e.longPollFallbackMs, this.fallbackTimer = null; 21714 let s = null; 21715 try { 21716 s = Ye && Ye.sessionStorage; 21717 } catch { 21718 } 21719 this.sessionStore = e.sessionStorage || s, this.establishedConnections = 0, this.defaultEncoder = z2.encode.bind(z2), this.defaultDecoder = z2.decode.bind(z2), this.closeWasClean = !0, this.disconnecting = !1, this.binaryType = e.binaryType || "arraybuffer", this.connectClock = 1, this.pageHidden = !1, this.encode = void 0, this.decode = void 0, this.transport !== X1 ? (this.encode = e.encode || this.defaultEncoder, this.decode = e.decode || this.defaultDecoder) : (this.encode = this.defaultEncoder, this.decode = this.defaultDecoder); 21720 let r = null; 21721 it && it.addEventListener && (it.addEventListener("pagehide", (n) => { 21722 this.conn && (this.disconnect(), r = this.connectClock); 21723 }), it.addEventListener("pageshow", (n) => { 21724 r === this.connectClock && (r = null, this.connect()); 21725 }), it.addEventListener("visibilitychange", () => { 21726 document.visibilityState === "hidden" ? this.pageHidden = !0 : (this.pageHidden = !1, !this.isConnected() && !this.closeWasClean && this.teardown(() => this.connect())); 21727 })), this.heartbeatIntervalMs = e.heartbeatIntervalMs || 3e4, this.autoSendHeartbeat = e.autoSendHeartbeat ?? !0, this.heartbeatCallback = e.heartbeatCallback ?? (() => { 21728 }
21728), this.rejoinAfterMs = (n) => e.rejoinAfterMs ? e.rejoinAfterMs(n) : [1e3, 2e3, 5e3][n - 1] || 1e4, this.reconnectAfterMs = (n) => e.reconnectAfterMs ? e.reconnectAfterMs(n) : [10, 50, 100, 150, 200, 250, 500, 1e3, 2e3][n - 1] || 5e3, this.logger = e.logger || null, !this.logger && e.debug && (this.logger = (n, o, L) => { 21729 console.log(`${n}: ${o}`, L); 21730 }), this.longpollerTimeout = e.longpollerTimeout || 2e4, this.params = ht(e.params || {}), this.endPoint = `${t}/${Q4.websocket}`, this.vsn = e.vsn || gu, this.heartbeatTimeoutTimer = null, this.heartbeatTimer = null, this.heartbeatSentAt = null, this.pendingHeartbeatRef = null, this.reconnectTimer = new xi(() => { 21731 if (this.pageHidden) { 21732 this.log("Not reconnecting as page is hidden!"), this.teardown(); 21733 return; 21734 } 21735 this.teardown(async () => { 21736 e.beforeReconnect && await e.beforeReconnect(), this.connect(); 21737 }); 21738 }, this.reconnectAfterMs), this.authToken = e.authToken && ht(e.authToken); 21739 } 21740 /** 21741 * Returns the LongPoll transport reference 21742 */ 21743 getLongPollTransport() { 21744 return X1; 21745 } 21746 /** 21747 * Disconnects and replaces the active transport 21748 * 21749 * @param {SocketTransport} newTransport - The new transport class to instantiate 21750 * 21751 */ 21752 replaceTransport(t) { 21753 this.connectClock++, this.closeWasClean = !0, clearTimeout(this.fallbackTimer), this.reconnectTimer.reset(), this.conn && (this.conn.close(), this.conn = null), this.transport = t; 21754 } 21755 /** 21756 * Returns the socket protocol 21757 * 21758 * @returns {"wss" | "ws"} 21759 */ 21760 protocol() { 21761 return location.protocol.match(/^https/) ? "wss" : "ws"; 21762 } 21763 /** 21764 * The fully qualified socket url 21765 * 21766 * @returns {string} 21767 */ 21768 endPointURL() { 21769 let t = l3.appendParams( 21770 l3.appendParams(this.endPoint, this.params()), 21771 { vsn: this.vsn } 21772 ); 21773 return t.charAt(0) !== "/" ? t : t.charAt(1) === "/" ? `${this.protocol()}:${t}` : `${this.protocol()}://${location.host}${t}`; 21774 } 21775 /** 21776 * Disconnects the socket 21777 * 21778 * See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes for valid status codes. 21779 * 21780 * @param {() => void} [callback] - Optional callback which is called after socket is disconnected. 21781 * @param {number} [code] - A status code for disconnection (Optional). 21782 * @param {string} [reason] - A textual description of the reason to disconnect. (Optional) 21783 */ 21784 disconnect(t, e, s) { 21785 this.connectClock++, this.disconnecting = !0, this.closeWasClean = !0, clearTimeout(this.fallbackTimer), this.reconnectTimer.reset(), this.teardown(() => { 21786 this.disconnecting = !1, t && t(); 21787 }, e, s); 21788 } 21789 /** 21790 * @param {Params} [params] - [DEPRECATED] The params to send when connecting, for example `{user_id: userToken}` 21791 * 21792 * Passing params to connect is deprecated; pass them in the Socket constructor instead: 21793 * `new Socket("/socket", {params: {user_id: userToken}})`. 21794 */ 21795 connect(t) { 21796 t && (console && console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"), this.params = ht(t)), !(this.conn && !this.disconnecting) && (this.longPollFallbackMs && this.transport !== X1 ? this.connectWithF
21796allback(X1, this.longPollFallbackMs) : this.transportConnect()); 21797 } 21798 /** 21799 * Logs the message. Override `this.logger` for specialized logging. noops by default 21800 * @param {string} kind 21801 * @param {string} msg 21802 * @param {Object} data 21803 */ 21804 log(t, e, s) { 21805 this.logger && this.logger(t, e, s); 21806 } 21807 /** 21808 * Returns true if a logger has been set on this socket. 21809 */ 21810 hasLogger() { 21811 return this.logger !== null; 21812 } 21813 /** 21814 * Registers callbacks for connection open events 21815 * 21816 * @example socket.onOpen(function(){ console.info("the socket was opened") }) 21817 * 21818 * @param {SocketOnOpen} callback 21819 */ 21820 onOpen(t) { 21821 let e = this.makeRef(); 21822 return this.stateChangeCallbacks.open.push([e, t]), e; 21823 } 21824 /** 21825 * Registers callbacks for connection close events 21826 * @param {SocketOnClose} callback 21827 * @returns {string} 21828 */ 21829 onClose(t) { 21830 let e = this.makeRef(); 21831 return this.stateChangeCallbacks.close.push([e, t]), e; 21832 } 21833 /** 21834 * Registers callbacks for connection error events 21835 * 21836 * @example socket.onError(function(error){ alert("An error occurred") }) 21837 * 21838 * @param {SocketOnError} callback 21839 * @returns {string} 21840 */ 21841 onError(t) { 21842 let e = this.makeRef(); 21843 return this.stateChangeCallbacks.error.push([e, t]), e; 21844 } 21845 /** 21846 * Registers callbacks for connection message events 21847 * @param {SocketOnMessage} callback 21848 * @returns {string} 21849 */ 21850 onMessage(t) { 21851 let e = this.makeRef(); 21852 return this.stateChangeCallbacks.message.push([e, t]), e; 21853 } 21854 /** 21855 * Sets a callback that receives lifecycle events for internal heartbeat messages. 21856 * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected). 21857 * @param {HeartbeatCallback} callback 21858 */ 21859 onHeartbeat(t) { 21860 this.heartbeatCallback = t; 21861 } 21862 /** 21863 * Pings the server and invokes the callback with the RTT in milliseconds 21864 * @param {(timeDelta: number) => void} callback 21865 * 21866 * Returns true if the ping was pushed or false if unable to be pushed. 21867 */ 21868 ping(t) { 21869 if (!this.isConnected()) 21870 return !1; 21871 let e = this.makeRef(), s = Date.now(); 21872 this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref: e }); 21873 let r = this.onMessage((n) => { 21874 n.ref === e && (this.off([r]), t(Date.now() - s)); 21875 }); 21876 return !0; 21877 } 21878 /** 21879 * @private 21880 * 21881 * @param {Function} 21882 */ 21883 transportName(t) { 21884 switch (t) { 21885 case X1: 21886 return "LongPoll"; 21887 default: 21888 return t.name; 21889 } 21890 } 21891 /** 21892 * @private 21893 */ 21894 transportConnect() { 21895 this.connectClock++, this.closeWasClean = !1; 21896 let t; 21897 this.authToken && (t = ["phoenix", `${e5}${btoa(this.authToken()).replace(/=/g, "")}`]), this.conn = new this.transport(this.endPointURL(), t), this.conn.binaryType = this.binaryType, this.conn.timeout = this.longpollerTimeout, this.conn.onopen = () => this.onConnOpen(), this.conn.onerror = (e) => this.onConnError(e), this.conn.onmessage = (e) => this.onConnMessage(e), this.conn.onclose = (e) => this.onConnClose(e); 21898 } 21899 getSession(t) { 21900 return this.sessionStore && this.sessionStore.getItem(t); 21901 } 21902 storeSession(t, e) { 21903 this.sessionStore && this.sessionStore.setItem(t, e); 21904 }
21905 connectWithFallback(t, e = 2500) { 21906 clearTimeout(this.fallbackTimer); 21907 let s = !1, r = !0, n, o, L = this.transportName(t), d = (l) => { 21908 this.log("transport", `falling back to ${L}...`, l), this.off([n, o]), r = !1, this.replaceTransport(t), this.transportConnect(); 21909 }; 21910 if (this.getSession(`phx:fallback:${L}`)) 21911 return d("memorized"); 21912 this.fallbackTimer = setTimeout(d, e), o = this.onError((l) => { 21913 this.log("transport", "error", l), r && !s && (clearTimeout(this.fallbackTimer), d(l)); 21914 }), this.fallbackRef && this.off([this.fallbackRef]), this.fallbackRef = this.onOpen(() => { 21915 if (s = !0, !r) { 21916 let l = this.transportName(t); 21917 return this.primaryPassedHealthCheck || this.storeSession(`phx:fallback:${l}`, "true"), this.log("transport", `established ${l} fallback`); 21918 } 21919 clearTimeout(this.fallbackTimer), this.fallbackTimer = setTimeout(d, e), this.ping((l) => { 21920 this.log("transport", "connected to primary after", l), this.primaryPassedHealthCheck = !0, clearTimeout(this.fallbackTimer); 21921 }); 21922 }), this.transportConnect(); 21923 } 21924 clearHeartbeats() { 21925 clearTimeout(this.heartbeatTimer), clearTimeout(this.heartbeatTimeoutTimer); 21926 } 21927 onConnOpen() { 21928 this.hasLogger() && this.log("transport", `connected to ${this.endPointURL()}`), this.closeWasClean = !1, this.disconnecting = !1, this.establishedConnections++, this.flushSendBuffer(), this.reconnectTimer.reset(), this.autoSendHeartbeat && this.resetHeartbeat(), this.triggerStateCallbacks("open"); 21929 } 21930 /** 21931 * @private 21932 */ 21933 heartbeatTimeout() { 21934 if (this.pendingHeartbeatRef) { 21935 this.pendingHeartbeatRef = null, this.heartbeatSentAt = null, this.hasLogger() && this.log("transport", "heartbeat timeout. Attempting to re-establish connection");
21936 try { 21937 this.heartbeatCallback("timeout"); 21938 } catch (t) { 21939 this.log("error", "error in heartbeat callback", t); 21940 } 21941 this.triggerChanError(new Error("heartbeat timeout")), this.closeWasClean = !1, this.teardown(() => this.reconnectTimer.scheduleTimeout(), pu, "heartbeat timeout"); 21942 } 21943 } 21944 resetHeartbeat() { 21945 this.conn && this.conn.skipHeartbeat || (this.pendingHeartbeatRef = null, this.clearHeartbeats(), this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs)); 21946 } 21947 teardown(t, e, s) { 21948 if (!this.conn) 21949 return t && t(); 21950 const r = this.conn; 21951 this.waitForBufferDone(r, () => { 21952 e ? r.close(e, s || "") : r.close(), this.waitForSocketClosed(r, () => { 21953 this.conn === r && (this.conn.onopen = function() { 21954 }, this.conn.onerror = function() { 21955 }, this.conn.onmessage = function() { 21956 }, this.conn.onclose = function() { 21957 }, this.conn = null), t && t(); 21958 }); 21959 }); 21960 } 21961 waitForBufferDone(t, e, s = 1) { 21962 if (s === 5 || !t.bufferedAmount) { 21963 e(); 21964 return; 21965 } 21966 setTimeout(() => { 21967 this.waitForBufferDone(t, e, s + 1); 21968 }, 150 * s); 21969 } 21970 waitForSocketClosed(t, e, s = 1) { 21971 if (s === 5 || t.readyState === Xe.closed) { 21972 e(); 21973 return; 21974 } 21975 setTimeout(() => { 21976 this.waitForSocketClosed(t, e, s + 1); 21977 }, 150 * s); 21978 } 21979 /** 21980 * @param {CloseEvent} event 21981 */ 21982 onConnClose(t) { 21983 this.conn && (this.conn.onclose = () => { 21984 }), this.hasLogger() && this.log("transport", "close", t), this.triggerChanError(t), this.clearHeartbeats(), this.closeWasClean || this.reconnectTimer.scheduleTimeout(), this.triggerStateCallbacks("close", t); 21985 } 21986 /** 21987 * @private 21988 * @param {Event} error 21989 */ 21990 onConnError(t) { 21991 this.hasLogger() && this.log("transport", "error", t); 21992 let e = this.transport, s = this.establishedConnections; 21993 this.triggerStateCallbacks("error", t, e, s), (e === this.transport || s > 0) && this.triggerChanError(t); 21994 } 21995 /** 21996 * @private 21997 * @param {unknown} [reason] underlying close/error event forwarded to channel error listeners 21998 */ 21999 triggerChanError(t) { 22000 this.channels.forEach((e) => { 22001 e.isErrored() || e.isLeaving() || e.isClosed() || e.trigger(l1.error, t); 22002 }); 22003 } 22004 /** 22005 * @returns {string} 22006 */ 22007 connectionState() { 22008 switch (this.conn && this.conn.readyState) { 22009 case Xe.connecting: 22010 return "connecting"; 22011 case Xe.open: 22012 return "open"; 22013 case Xe.closing: 22014 return "closing"; 22015 default: 22016 return "closed"; 22017 } 22018 } 22019 /** 22020 * @returns {boolean} 22021 */ 22022 isConnected() { 22023 return this.connectionState() === "open"; 22024 } 22025 /** 22026 * 22027 * @param {Channel} channel 22028 */ 22029 remove(t) { 22030 this.off(t.stateChangeRefs), this.channels = this.channels.filter((e) => e !== t); 22031 } 22032 /** 22033 * Removes `onOpen`, `onClose`, `onError,` and `onMessage` registrations. 22034 * 22035 * @param {string[]} refs - list of refs returned by calls to 22036 * `onOpen`, `onClose`, `onError,` and `onMessage` 22037 */ 22038 off(t) { 22039 for (let e in this.stateChangeCallbacks)
22040 this.stateChangeCallbacks[e] = this.stateChangeCallbacks[e].filter(([s]) => t.indexOf(s) === -1); 22041 } 22042 /** 22043 * Initiates a new channel for the given topic 22044 * 22045 * @param {string} topic 22046 * @param {Params | (() => Params)} [chanParams]- Parameters for the channel 22047 * @returns {Channel} 22048 */ 22049 channel(t, e = {}) { 22050 let s = new hu(t, e, this); 22051 return this.channels.push(s), s; 22052 } 22053 /** 22054 * @param {Message<Record<string, any>>} data 22055 */ 22056 push(t) { 22057 if (this.hasLogger()) { 22058 let { topic: e, event: s, payload: r, ref: n, join_ref: o } = t; 22059 this.log("push", `${e} ${s} (${o}, ${n})`, r); 22060 } 22061 this.isConnected() ? this.encode(t, (e) => this.conn.send(e)) : this.sendBuffer.push(() => this.encode(t, (e) => this.conn.send(e))); 22062 } 22063 /** 22064 * Return the next message ref, accounting for overflows 22065 * @returns {string} 22066 */ 22067 makeRef() { 22068 let t = this.ref + 1; 22069 return t === this.ref ? this.ref = 0 : this.ref = t, this.ref.toString(); 22070 } 22071 sendHeartbeat() { 22072 if (!this.isConnected()) { 22073 try { 22074 this.heartbeatCallback("disconnected"); 22075 } catch (t) { 22076 this.log("error", "error in heartbeat callback", t); 22077 } 22078 return; 22079 } 22080 if (this.pendingHeartbeatRef) { 22081 this.heartbeatTimeout(); 22082 return; 22083 } 22084 this.pendingHeartbeatRef = this.makeRef(), this.heartbeatSentAt = Date.now(), this.push({ topic: "phoenix", event: "heartbeat", payload: {}, ref: this.pendingHeartbeatRef }); 22085 try { 22086 this.heartbeatCallback("sent"); 22087 } catch (t) { 22088 this.log("error", "error in heartbeat callback", t); 22089 } 22090 this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs); 22091 } 22092 flushSendBuffer() { 22093 this.isConnected() && this.sendBuffer.length > 0 && (this.sendBuffer.forEach((t) => t()), this.sendBuffer = []); 22094 } 22095 /** 22096 * @param {MessageEvent<any>} rawMessage 22097 */ 22098 onConnMessage(t) { 22099 this.decode(t.data, (e) => { 22100 let { topic: s, event: r, payload: n, ref: o, join_ref: L } = e; 22101 if (o && o === this.pendingHeartbeatRef) { 22102 const d = this.heartbeatSentAt ? Date.now() - this.heartbeatSentAt : void 0; 22103 this.clearHeartbeats(); 22104 try { 22105 this.heartbeatCallback(n.status === "ok" ? "ok" : "error", d); 22106 } catch (l) { 22107 this.log("error", "error in heartbeat callback", l); 22108 } 22109 this.pendingHeartbeatRef = null, this.heartbeatSentAt = null, this.autoSendHeartbeat && (this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs)); 22110 } 22111 this.hasLogger() && this.log("receive", `${n.status || ""} ${s} ${r} ${o && "(" + o + ")" || ""}`.trim(), n); 22112 for (let d = 0; d < this.channels.length; d++) { 22113 const l = this.channels[d]; 22114 l.isMember(s, r, n, L) && l.trigger(r, n, o, L); 22115 } 22116 this.triggerStateCallbacks("message", e); 22117 }); 22118 } 22119 /** 22120 * @private 22121 * @template {keyof SocketStateChangeCallbacks} K 22122 * @param {K} event 22123 * @param {...Parameters<SocketStateChangeCallbacks[K][number][1]>} args 22124 * @returns {void} 22125 */ 22126 triggerStateCallbacks(t, ...e) { 22127 try { 22128 this.stateChangeCallbacks[t].forEach(([s, r]) => { 22129 try { 22130 r(...e); 22131 } catch (n) { 22132 this.log("error", `error in ${t} callback`, n); 22133 } 22134 }); 22135 } catch (s) { 22136 this.log("error", `error triggering ${t} callbacks`, s); 22137 } 22138 } 22139 leaveOpenTopic(t) { 22140 let e = this.channels.find((s) => s.topic === t && (s.isJoined() || s.isJoining())); 22141 e && (this.hasLogger() && this.log("transport", `leaving duplicate topic "${t}"`), e.leave()); 22142 } 22143}; 22144class Yt { 22145 constructor(e, s) { 22146 const r = vu(s); 22147 this.presence = new xu(e.getChannel(), r), this.presence.onJoin((n, o, L) => { 22148 const d = Yt.onJoinPayload(n, o, L); 22149 e.getChannel().trigger("presence", d); 22150 }), this.presence.onLeave((n, o, L) => { 22151 const d = Yt.onLeavePayload(n, o, L); 22152 e.getChannel().trigger("presence", d); 22153 }), this.presence.onSync(() => { 22154 e.getChannel().trigger("presence", { event: "sync" }); 22155 }); 22156 } 22157 get state() { 22158 return Yt.transformState(this.presence.state); 22159 } 22160 /** 22161 * @private 22162 * Remove 'metas' key 22163 * Change 'phx_ref' to 'presence_ref' 22164 * Remove 'phx_ref' and 'phx_ref_prev' 22165 * 22166 * @example Transform state 22167 * // returns { 22168 * abc123: [ 22169 * { presence_ref: '2', user_id: 1 }, 22170 * { presence_ref: '3', user_id: 2 } 22171 * ] 22172 * } 22173 * RealtimePresence.transformState({ 22174 * abc123: { 22175 * metas: [ 22176 * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 }, 22177 * { phx_ref: '3', user_id: 2 } 22178 * ] 22179 * } 22180 * }) 22181 * 22182 */ 22183 static transformState(e) { 22184 return e = bu(e), Object.getOwnPropertyNames(e).reduce((s, r) => { 22185 const n = e[r]; 22186 return s[r] = a3(n), s; 22187 }, {}); 22188 } 22189 static onJoinPayload(e, s, r) { 22190 const n = e6(s), o = a3(r); 22191 return { 22192 event: "join", 22193 key: e, 22194 currentPresences: n, 22195 newPresences: o 22196 }; 22197 } 22198 static onLeavePayload(e, s, r) { 22199 const n = e6(s), o = a3(r); 22200 return { 22201 event: "leave", 22202 key: e, 22203 currentPresences: n, 22204 leftPresences: o 22205 }; 22206 } 22207} 22208function a3(t) { 22209 return t.metas.map((e) => { 22210 const s = Object.getOwnPropertyDescriptors(e), r = Object.defineProperties({}, s); 22211 return r.presence_ref = r.phx_ref, delete r.phx_ref, delete r.phx_ref_prev, r; 22212 }); 22213} 22214function bu(t) { 22215 return JSON.parse(JSON.stringify(t)); 22216} 22217function vu(t) { 22218 return t?.events && { events: t.events }; 22219} 22220function e6(t) { 22221 return t?.metas ? a3(t) : []; 22222} 22223var t6; 22224(function(t) { 22225 t.SYNC = "sync", t.JOIN = "join", t.LEAVE = "leave"; 22226})(t6 || (t6 = {})); 22227class yu { 22228 get state() { 22229 return this.presenceAdapter.state; 22230 } 22231 /** 22232 * Creates a Presence helper that keeps the local presence state in sync with the server. 22233 * 22234 * @param channel - The realtime channel to bind to. 22235 * @param opts - Optional custom event names, e.g. `{ events: { state: 'state', diff: 'diff' } }`. 22236 * 22237 * @category Realtime 22238 * 22239 * @example Example for a presence channel 22240 * ```ts 22241 * const presence = new RealtimePresence(channel) 22242 * 22243 * channel.on('presence', ({ event, key }) => { 22244 * console.log(`Presence ${event} on ${key}`) 22245 * }) 22246 * ``` 22247 */ 22248 constructor(e, s) { 22249 this.channel = e, this.presenceAdapter = new Yt(this.channel.channelAdapter, s); 22250 } 22251} 22252function wu(t) { 22253 if (t instanceof Error) 22254 return t; 22255 if (typeof t == "string") 22256 return new Error(t); 22257 if (t && typeof t == "object") { 22258 const e = t; 22259 if (typeof e.code == "number") { 22260 const s = typeof e.reason == "string" && e.reason ? ` (${e.reason})` : ""; 22261 return new Error(`socket closed: ${e.code}${s}`, { cause: t }); 22262 } 22263 return new Error("channel error: transport failure", { cause: t }); 22264 } 22265 return new Error("channel error: connection lost"); 22266} 22267class Tu { 22268 constructor(e, s, r) { 22269 const n = Su(r); 22270 this.channel = e.getSocket().channel(s, n), this.socket = e; 22271 } 22272 get state() { 22273 return this.channel.state; 22274 } 22275 set state(e) { 22276 this.channel.state = e; 22277 } 22278 get joinedOnce() { 22279 return this.channel.joinedOnce; 22280 } 22281 get joinPush() { 22282 return this.channel.joinPush; 22283 } 22284 get rejoinTimer() { 22285 return this.channel.rejoinTimer; 22286 } 22287 on(e, s) { 22288 return this.channel.on(e, s); 22289 } 22290 off(e, s) { 22291 this.channel.off(e, s); 22292 } 22293 subscribe(e) { 22294 return this.channel.join(e); 22295 } 22296 unsubscribe(e) { 22297 return this.channel.leave(e); 22298 } 22299 teardown() { 22300 this.channel.teardown(); 22301 } 22302 onClose(e) { 22303 this.channel.onClose(e); 22304 } 22305 onError(e) { 22306 return this.channel.onError(e); 22307 } 22308 push(e, s, r) { 22309 let n; 22310 try { 22311 n = this.channel.push(e, s, r); 22312 } catch { 22313 throw new Error(`tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`); 22314 } 22315 if (this.channel.pushBuffer.length > su) { 22316 const o = this.channel.pushBuffer.shift(); 22317 o.cancelTimeout(), this.socket.log("channel", `discarded push due to buffer overflow: ${o.event}`, o.payload()); 22318 } 22319 return n; 22320 } 22321 updateJoinPayload(e) { 22322 const s = this.channel.joinPush.payload(); 22323 this.channel.joinPush.payload = () => Object.assign(Object.assign({}, s), e); 22324 } 22325 canPush() { 22326 return this.socket.isConnected() && this.state === x1.joined; 22327 } 22328 isJoined() { 22329 return this.state === x1.joined; 22330 } 22331 isJoining() { 22332 return this.state === x1.joining; 22333 } 22334 isClosed() { 22335 return this.state === x1.closed; 22336 } 22337 isLeaving() { 22338 return this.state === x1.leaving; 22339 } 22340 updateFilterBindings(e) { 22341 this.channel.filterBindings = e; 22342 } 22343 updatePayloadTransform(e) { 22344 this.channel.onMessage = e; 22345 } 22346 /** 22347 * @internal 22348 */ 22349 getChannel() { 22350 return this.channel; 22351 } 22352} 22353function Su(t) { 22354 return { 22355 config: Object.assign({ 22356 broadcast: { ack: !1, self: !1 },
22357 presence: { key: "", enabled: !1 }, 22358 private: !1 22359 }, t.config) 22360 }; 22361} 22362const Bu = /[,()"\\]/, ku = (t) => Bu.test(t) || t !== t.trim(), Au = (t) => `"${t.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`, a6 = (t) => { 22363 const e = t === null ? "null" : String(t); 22364 return ku(e) ? Au(e) : e; 22365}, Nu = (t) => t === null ? "null" : String(t), Iu = (t, e) => { 22366 if (t === "in") { 22367 const s = Array.isArray(e) ? e : [e]; 22368 if (s.length === 0) 22369 throw new Error("Realtime `in` filter requires at least one value."); 22370 return `in.(${Array.from(new Set(s)).map((n) => a6(n)).join(",")})`; 22371 } 22372 return t === "is" ? `is.${Nu(e)}` : `${t}.${a6(e)}`; 22373}; 22374class Pu { 22375 constructor() { 22376 this.filters = []; 22377 } 22378 add(e, s, r, n = !1) { 22379 const o = n ? "not." : ""; 22380 return this.filters.push(`${e}=${o}${Iu(s, r)}`), this; 22381 } 22382 /** Match rows where `column` equals `value` (`column=eq.value`). */ 22383 eq(e, s) { 22384 return this.add(e, "eq", s); 22385 } 22386 /** Match rows where `column` does not equal `value` (`column=neq.value`). */ 22387 neq(e, s) { 22388 return this.add(e, "neq", s); 22389 } 22390 /** Match rows where `column` is greater than `value` (`column=gt.value`). */ 22391 gt(e, s) { 22392 return this.add(e, "gt", s); 22393 } 22394 /** Match rows where `column` is greater than or equal to `value` (`column=gte.value`). */ 22395 gte(e, s) { 22396 return this.add(e, "gte", s); 22397 } 22398 /** Match rows where `column` is less than `value` (`column=lt.value`). */ 22399 lt(e, s) { 22400 return this.add(e, "lt", s); 22401 } 22402 /** Match rows where `column` is less than or equal to `value` (`column=lte.value`). */ 22403 lte(e, s) { 22404 return this.add(e, "lte", s); 22405 } 22406 /** 22407 * Match rows where `column` is one of `values` (`column=in.(a,b,c)`). 22408 * Requires at least one value; duplicates are removed. An element containing a 22409 * reserved character is double-quoted (`in.("a,b",c)`), so commas inside an 22410 * element are preserved. `null` is intentionally not accepted (`IN (null)` 22411 * never matches in SQL) â use `is`/`not('col','is',null)` for null checks. 22412 */ 22413 in(e, s) { 22414 return this.add(e, "in", s); 22415 } 22416 /** Match rows where `column` matches the case-sensitive `pattern` (`column=like.pattern`). */ 22417 like(e, s) { 22418 return this.add(e, "like", s); 22419 } 22420 /** Match rows where `column` matches the case-insensitive `pattern` (`column=ilike.pattern`). */ 22421 ilike(e, s) { 22422 return this.add(e, "ilike", s); 22423 } 22424 /** Match rows where `column` matches the POSIX regex `pattern` (`column=match.pattern`). */ 22425 match(e, s) { 22426 return this.add(e, "match", s); 22427 } 22428 /** Match rows where `column` matches the case-insensitive POSIX regex `pattern` (`column=imatch.pattern`). */ 22429 imatch(e, s) { 22430 return this.add(e, "imatch", s); 22431 } 22432 /** 22433 * Match rows where `column` `IS` the given value (`column=is.null`). 22434 * Accepts `null`, a boolean, or the keywords `'null' | 'true' | 'false' | 'unknown'`. 22435 */ 22436 is(e, s) { 22437 return this.add(e, "is", s); 22438 } 22439 /** Match rows where `column` is distinct from `value` (`column=isdistinct.value`). NULL-safe inequality. */ 22440 isDistinct(e, s) { 22441 return this.add(e, "isdistinct", s); 22442 } 22443 not(e, s, r) { 22444 return this.add(e, s, r, !0); 22445 } 22446 /** 22447 * Serialize all conditions into the comma-separated (AND) filter string. 22448 * 22449 * Conditions are joined by commas, which the server applies as `AND`. A scalar 22450 * value (or single `in` element) that contains a reserved character â `,`, 22451 * `(`, `)`, `"`, `\` â or surrounding whitespace is double-quoted and escaped 22452 * the way PostgREST does, so commas inside a value are preserved rather than 22453 * read as a condition boundary. 22454 */ 22455 build() { 22456 return this.filters.join(","); 22457 } 22458 /** Alias for {@link build}; lets the builder be used wherever a string is expected. */ 22459 toString() { 22460 return this.build(); 22461 } 22462} 22463var s6; 22464(function(t) { 22465 t.ALL = "*", t.INSERT = "INSERT", t.UPDATE = "UPDATE", t.DELETE = "DELETE"; 22466})(s6 || (s6 = {})); 22467var E1; 22468(function(t) { 22469 t.BROADCAST = "broadcast", t.PRESENCE = "presence", t.POSTGRES_CHANGES = "postgres_changes", t.SYSTEM = "system"; 22470})(E1 || (E1 = {})); 22471var d1; 22472(function(t) { 22473 t.SUBSCRIBED = "SUBSCRIBED", t.TIMED_OUT = "TIMED_OUT", t.CLOSED = "CLOSED", t.CHANNEL_ERROR = "CHANNEL_ERROR"; 22474})(d1 || (d1 = {})); 22475class g1 { 22476 get state() { 22477 return this.channelAdapter.state; 22478 } 22479 set state(e) { 22480 this.channelAdapter.state = e; 22481 } 22482 get joinedOnce() { 22483 return this.channelAdapter.joinedOnce; 22484 } 22485 get timeout() { 22486 return this.socket.timeout; 22487 } 22488 get joinPush() { 22489 return this.channelAdapter.joinPush; 22490 } 22491 get rejoinTimer() { 22492 return this.channelAdapter.rejoinTimer; 22493 } 22494 /** 22495 * Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes. 22496 * 22497 * The topic determines which realtime stream you are subscribing to. Config options let you 22498 * enable acknowledgement for broadcasts, presence tracking, or private channels. 22499 * 22500 * @category Realtime 22501 * 22502 * @example Using supabase-js (recommended) 22503 * ```ts 22504 * import { createClient } from '@supabase/supabase-js' 22505 * 22506 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 22507 * const channel = supabase.channel('room1') 22508 * channel 22509 * .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload)) 22510 * .subscribe() 22511 * ``` 22512 * 22513 * @example Standalone import for bundle-sensitive environments 22514 * ```ts 22515 * import RealtimeClient from '@supabase/realtime-js' 22516 * 22517 * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', { 22518 * params: { apikey: 'your-publishable-key' }, 22519 * }) 22520 * const channel = new RealtimeChannel('realtime:public:messages', { config: {} }, client) 22521 * ``` 22522 */ 22523 constructor(e, s = { config: {} }, r) { 22524 var n, o; 22525 if (this.topic = e, this.params = s, this.socket = r, this.bindings = {}, this.subTopic = e.replace(/^realtime:/i, ""), this.params.config = Object.assign({ 22526 broadcast: { ack: !1, self: !1 },
22527 presence: { key: "", enabled: !1 }, 22528 private: !1 22529 }, s.config), this.channelAdapter = new Tu(this.socket.socketAdapter, e, this.params), this.presence = new yu(this), this._onClose(() => { 22530 this.socket._remove(this); 22531 }), this._updateFilterTransform(), this.broadcastEndpointURL = mi(this.socket.socketAdapter.endPointURL()), this.private = this.params.config.private || !1, !this.private && (!((o = (n = this.params.config) === null || n === void 0 ? void 0 : n.broadcast) === null || o === void 0) && o.replay)) 22532 throw new Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`); 22533 } 22534 /** 22535 * Subscribe registers your client with the server. 22536 * 22537 * The optional `callback` receives a `status` and, on failure, an `err` argument. 22538 * Log the full `err` so its `cause`, `name`, and any structured fields aren't hidden 22539 * behind `err.message`. 22540 * 22541 * @category Realtime 22542 * 22543 * @example Handling errors 22544 * ```js 22545 * supabase.channel('room1').subscribe((status, err) => { 22546 * if (status === 'CHANNEL_ERROR' || status === 'TIMED_OUT') { 22547 * // Log the full error: its `cause` often holds the underlying reason. 22548 * console.error(status, err) 22549 * } 22550 * }) 22551 * ``` 22552 */ 22553 subscribe(e, s = this.timeout) { 22554 var r, n, o, L; 22555 if (this.socket.isConnected() || this.socket.connect(), this.channelAdapter.isClosed()) { 22556 const { config: { broadcast: d, presence: l, private: g, postgres_changes_options: f } } = this.params, p = (n = (r = this.bindings.postgres_changes) === null || r === void 0 ? void 0 : r.map((_) => _.filter)) !== null && n !== void 0 ? n : [], M = !!this.bindings[E1.PRESENCE] && this.bindings[E1.PRESENCE].length > 0 || ((o = this.params.config.presence) === null || o === void 0 ? void 0 : o.enabled) === !0, u = {}, h = Object.assign({ broadcast: d, presence: Object.assign(Object.assign({}, l), { enabled: M }), postgres_changes: p, private: g }, f ? { postgres_changes_options: f } : {}); 22557 this.socket.accessTokenValue && (u.access_token = this.socket.accessTokenValue), this._onError((_) => { 22558 e?.(d1.CHANNEL_ERROR, wu(_)); 22559 }), this._onClose(() => e?.(d1.CLOSED)), this.updateJoinPayload(Object.assign({ config: h }, u)), this._updateFilterMessage(); 22560 const x = f?.wait && p.length > 0 ? Math.max(s, ((L = f.timeout) !== null && L !== void 0 ? L : tu) + au) : s; 22561 this.channelAdapter.subscribe(x).receive("ok", async ({ postgres_changes: _ }) => { 22562 if (this.socket._isManualToken() || this.socket.setAuth(), _ === void 0) { 22563 e?.(d1.SUBSCRIBED); 22564 return; 22565 } 22566 this._updatePostgresBindings(_, e); 22567 }).receive("error", (_) => { 22568 this.state = x1.errored; 22569 const v = Object.values(_).join(", ") || "error"; 22570 e?.(d1.CHANNEL_ERROR, new Error(v, { cause: _ })); 22571 }).receive("timeout", () => { 22572 e?.(d1.TIMED_OUT); 22573 }); 22574 } 22575 return this; 22576 } 22577 _updatePostgresBindings(e, s) { 22578 var r; 22579 const n = this.bindings.postgres_changes, o = (r = n?.length) !== null && r !== void 0 ? r : 0, L = []; 22580 for (let d = 0; d < o; d++) { 22581 const l = n[d], { filter: { event: g, schema: f, table: p, filter: M } } = l, u = e && e[d]; 22582 if (u && u.event === g && g1.isFilterValueEqual(u.schema, f) && g1.isFilterValueEqual(u.table, p) && g1.isFilterValueEqual(u.filter, M)) 22583 L.push(Object.assign(Object.assign({}, l), { id: u.id })); 22584 else { 22585 this.unsubscribe(), this.state = x1.errored, s?.(d1.CHANNEL_ERROR, new Error("mismatch between server and client bindings for postgres changes")); 22586 return; 22587 } 22588 } 22589 this.bindings.postgres_changes = L, this.state != x1.errored && s && s(d1.SUBSCRIBED); 22590 } 22591 /** 22592 * Returns the current presence state for this channel. 22593 * 22594 * The shape is a map keyed by presence key (for example a user id) where each entry contains the 22595 * tracked metadata for that user. 22596 * 22597 * @category Realtime 22598 */ 22599 presenceState() { 22600 return this.presence.state; 22601 } 22602 /** 22603 * Sends the supplied payload to the presence tracker so other subscribers can see that this 22604 * client is online. Use `untrack` to stop broadcasting presence for the same key. 22605 * 22606 * Tracking makes this client visible to other subscribers immediately, regardless of this 22607 * channel's `config.presence.enabled` setting or whether it has a `presence` listener â that 22608 * flag only affects whether *this* client receives presence updates from others (and, on 22609 * RLS-protected channels, whether it's authorized to do so). 22610 * 22611 * @category Realtime 22612 */ 22613 async track(e, s = {}) { 22614 return await this.send({ 22615 type: "presence", 22616 event: "track", 22617 payload: e 22618 }, s); 22619 } 22620 /** 22621 * Removes the current presence state for this client. 22622 * 22623 * @category Realtime 22624 */ 22625 async untrack(e = {}) { 22626 return await this.send({ 22627 type: "presence", 22628 event: "untrack" 22629 }, e); 22630 } 22631 /** 22632 * Listen to realtime events on this channel. 22633 * @category Realtime 22634 * 22635 * @remarks 22636 * - By default, Broadcast and Presence are enabled for all projects. 22637 * - By default, listening to database changes is disabled for new projects due to database performance and security concerns. You can turn it on by managing Realtime's [replication](/docs/guides/api#realtime-api-overview). 22638 * - You can receive the "previous" data for updates and deletes by setting the table's `REPLICA IDENTITY` to `FULL` (e.g., `ALTER TABLE your_table REPLICA IDENTITY FULL;`). 22639 * - Row level security is not applied to delete statements. When RLS is enabled and replica identity is set to full, only the primary key is sent to clients. 22640 * 22641 * @example Listen to broadcast messages 22642 * ```js 22643 * const channel = supabase.channel("room1") 22644 * 22645 * channel.on("broadcast", { event: "cursor-pos" }, (payload) => { 22646 * console.log("Cursor position received!", payload); 22647 * }).subscribe((status) => { 22648 * if (status === "SUBSCRIBED") { 22649 * channel.send({ 22650 * type: "broadcast", 22651 * event: "cursor-pos", 22652 * payload: { x: Math.random(), y: Math.random() }, 22653 * }); 22654 * } 22655 * }); 22656 * ``` 22657 * 22658 * @example Listen to presence sync 22659 * ```js 22660 * const channel = supabase.channel('room1') 22661 * channel 22662 * .on('presence', { event: 'sync' }, () => { 22663 * console.log('Synced presence state: ', channel.presenceState()) 22664 * }) 22665 * .subscribe(async (status) => { 22666 * if (status === 'SUBSCRIBED') { 22667 * await channel.track({ online_at: new Date().toISOString() }) 22668 * } 22669 * }) 22670 * ``` 22671 * 22672 * @example Listen to presence join 22673 * ```js 22674 * const channel = supabase.channel('room1') 22675 * channel 22676 * .on('presence', { event: 'join' }, ({ newPresences }) => { 22677 * console.log('Newly joined presences: ', newPresences) 22678 * }) 22679 * .subscribe(async (status) => { 22680 * if (status === 'SUBSCRIBED') { 22681 * await channel.track({ online_at: new Date().toISOString() }) 22682 * } 22683 * }) 22684 * ``` 22685 * 22686 * @example Listen to presence leave 22687 * ```js 22688 * const channel = supabase.channel('room1') 22689 * channel 22690 * .on('presence', { event: 'leave' }, ({ leftPresences }) => { 22691 * console.log('Newly left presences: ', leftPresences) 22692 * }) 22693 * .subscribe(async (status) => { 22694 * if (status === 'SUBSCRIBED') { 22695 * await channel.track({ online_at: new Date().toISOString() }) 22696 * await channel.untrack() 22697 * } 22698 * }) 22699 * ``` 22700 * 22701 * Registering the same `postgres_changes` filter more than once on a channel is a no-op: the 22702 * duplicate is ignored and an error is logged, since the server only ever creates one 22703 * subscription per distinct filter. 22704 * 22705 * @example Listen to all database changes 22706 * ```js 22707 * supabase 22708 * .channel('room1') 22709 * .on('postgres_changes', { event: '*', schema: '*' }, payload => { 22710 * console.log('Change received!', payload) 22711 * }) 22712 * .subscribe() 22713 * ``` 22714 * 22715 * @example Listen to a specific table 22716 * ```js 22717 * supabase 22718 * .channel('room1') 22719 * .on('postgres_changes', { event: '*', schema: 'public', table: 'countries' }, payload => { 22720 * console.log('Change received!', payload) 22721 * }) 22722 * .subscribe() 22723 * ``` 22724 * 22725 * @example Listen to inserts 22726 * ```js 22727 * supabase 22728 * .channel('room1') 22729 * .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, payload => { 22730 * console.log('Change received!', payload) 22731 * }) 22732 * .subscribe() 22733 * ``` 22734 * 22735 * @exampleDescription Listen to updates 22736 * By default, Supabase will send only the updated record. If you want to re
22736ceive the previous values as well you can 22737 * enable full replication for the table you are listening to: 22738 * 22739 * ```sql 22740 * alter table "your_table" replica identity full; 22741 * ``` 22742 * 22743 * @example Listen to updates 22744 * ```js 22745 * supabase 22746 * .channel('room1') 22747 * .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries' }, payload => { 22748 * console.log('Change received!', payload) 22749 * }) 22750 * .subscribe() 22751 * ``` 22752 * 22753 * @exampleDescription Listen to deletes 22754 * By default, Supabase does not send deleted records. If you want to receive the deleted record you can 22755 * enable full replication for the table you are listening to: 22756 * 22757 * ```sql 22758 * alter table "your_table" replica identity full; 22759 * ``` 22760 * 22761 * @example Listen to deletes 22762 * ```js 22763 * supabase 22764 * .channel('room1') 22765 * .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, payload => { 22766 * console.log('Change received!', payload) 22767 * }) 22768 * .subscribe() 22769 * ``` 22770 * 22771 * @exampleDescription Listen to multiple events 22772 * You can chain listeners if you want to listen to multiple events for each table. 22773 * 22774 * @example Listen to multiple events 22775 * ```js 22776 * supabase 22777 * .channel('room1') 22778 * .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, handleRecordInserted) 22779 * .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, handleRecordDeleted) 22780 * .subscribe() 22781 * ``` 22782 * 22783 * @exampleDescription Listen to row level changes 22784 * You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. 22785 * 22786 * @example Listen to row level changes 22787 * ```js 22788 * supabase 22789 * .channel('room1') 22790 * .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries', filter: 'id=eq.200' }, handleRecordUpdated) 22791 * .subscribe() 22792 * ``` 22793 */ 22794 on(e, s, r) { 22795 const n = this.channelAdapter.isJoined() || this.channelAdapter.isJoining(), o = e === E1.PRESENCE || e === E1.PO
22795STGRES_CHANGES; 22796 if (n && o) 22797 throw this.socket.log("channel", `cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`), new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`); 22798 return this._on(e, s, r); 22799 } 22800 /** 22801 * Sends a broadcast message explicitly via REST API. 22802 * 22803 * This method always uses the REST API endpoint regardless of WebSocket connection state. 22804 * Useful when you want to guarantee REST delivery or when gradually migrating from implicit REST fallback. 22805 * 22806 * Payloads that are `ArrayBuffer` or `ArrayBufferView` (e.g. `Uint8Array`) are sent as 22807 * `application/octet-stream`; all other payloads are JSON-encoded. 22808 * 22809 * @param event The name of the broadcast event 22810 * @param payload Payload to be sent (required) 22811 * @param opts Options including timeout 22812 * @returns Promise resolving to object with success status, and error details if failed 22813 * 22814 * @category Realtime 22815 */ 22816 async httpSend(e, s, r = {}) { 22817 var n; 22818 if (s == null) 22819 return Promise.reject(new Error("Payload is required for httpSend()")); 22820 const o = s instanceof ArrayBuffer || ArrayBuffer.isView(s), L = { 22821 apikey: this.socket.apiKey ? this.socket.apiKey : "", 22822 "Content-Type": o ? "application/octet-stream" : "application/json" 22823 }; 22824 this.socket.accessTokenValue && (L.Authorization = `Bearer ${this.socket.accessTokenValue}`); 22825 const d = new URL(this.broadcastEndpointURL); 22826 d.pathname += `/${encodeURIComponent(this.subTopic)}/events/${encodeURIComponent(e)}`, this.private && d.searchParams.set("private", "true"); 22827 const l = { 22828 method: "POST", 22829 headers: L, 22830 body: o ? s : JSON.stringify(s) 22831 }, g = await this._fetchWithTimeout(d.toString(), l, (n = r.timeout) !== null && n !== void 0 ? n : this.timeout); 22832 if (g.status === 202) 22833 return { success: !0 }; 22834 if (g.status === 404) 22835 return Promise.reject(new Error("httpSend() requires Realtime server v2.97.0 or newer; the endpoint returned 404. Update your Supabase CLI to a recent version, or upgrade the Realtime server in your self-hosted setup. See https://github.com/supabase/supabase-js/blob/master/packages/core/realtime-js/migrations/httpsend-server-version.md")); 22836 let f = g.statusText; 22837 try { 22838 const p = await g.json(); 22839 f = p.error || p.message || f; 22840 } catch { 22841 } 22842 return Promise.reject(new Error(f)); 22843 } 22844 /** 22845 * Sends a message into the channel. 22846 * 22847 * @param args Arguments to send to channel 22848 * @param args.type The type of event to send 22849 * @param args.event The name of the event being sent 22850 * @param args.payload Payload to be sent 22851 * @param opts Options to be used during the send process 22852 * 22853 * @category Realtime 22854 * 22855 * @remarks 22856 * - When using REST you don't need to subscribe to the channel 22857 * - REST calls are only available from 2.37.0 onwards 22858 * - If you create a channel only to send a REST broadcast, remove it from 22859 * the client when the send completes 22860 * 22861 * @example Send a message via websocket 22862 * ```js 22863 * const channel = supabase.channel('room1') 22864 * 22865 * channel.subscribe((status) => { 22866 * if (status === 'SUBSCRIBED') { 22867 * channel.send({ 22868 * type: 'broadcast', 22869 * event: 'cursor-pos', 22870 * payload: { x: Math.random(), y: Math.random() }, 22871 * }) 22872 * } 22873 * }) 22874 * ``` 22875 * 22876 * @exampleResponse Send a message via websocket 22877 * ```js 22878 * ok | timed out | error 22879 * ``` 22880 * 22881 * @example Send a message via REST 22882 * ```js 22883 * const channel = supabase.channel('room1') 22884 * 22885 * try { 22886 * await channel.httpSend('cursor-pos', { x: Math.random(), y: Math.random() }) 22887 * } finally { 22888 * await supabase.removeChannel(channel) 22889 * } 22890 * ``` 22891 */ 22892 async send(e, s = {}) { 22893 var r, n; 22894 if (!this.channelAdapter.canPush() && e.type === "broadcast") { 22895 const o = "Realtime send() is automatically falling back to REST API. This behavior will be deprecated
22895in the future. Please use httpSend() explicitly for REST delivery."; 22896 this.socket.hasLogger() ? this.socket.log("channel", o) : console.warn(o); 22897 const { event: L, payload: d } = e, l = { 22898 apikey: this.socket.apiKey ? this.socket.apiKey : "", 22899 "Content-Type": "application/json" 22900 }; 22901 this.socket.accessTokenValue && (l.Authorization = `Bearer ${this.socket.accessTokenValue}`); 22902 const g = { 22903 method: "POST", 22904 headers: l, 22905 body: JSON.stringify({ 22906 messages: [ 22907 { 22908 topic: this.subTopic, 22909 event: L, 22910 payload: d, 22911 private: this.private 22912 } 22913 ] 22914 }) 22915 }; 22916 try { 22917 const f = await this._fetchWithTimeout(this.broadcastEndpointURL, g, (r = s.timeout) !== null && r !== void 0 ? r : this.timeout); 22918 return await ((n = f.body) === null || n === void 0 ? void 0 : n.cancel()), f.ok ? "ok" : "error"; 22919 } catch (f) { 22920 return f instanceof Error && f.name === "AbortError" ? "timed out" : "error"; 22921 } 22922 } else 22923 return new Promise((o) => { 22924 var L, d, l; 22925 const g = this.channelAdapter.push(e.type, e, s.timeout || this.timeout); 22926 e.type === "broadcast" && !(!((l = (d = (L = this.params) === null || L === void 0 ? void 0 : L.config) === null || d === void 0 ? void 0 : d.broadcast) === null || l === void 0) && l.ack) && o("ok"), g.receive("ok", () => o("ok")), g.receive("error", () => o("error")), g.receive("timeout", () => o("timed out")); 22927 }); 22928 } 22929 /** 22930 * Updates the payload that will be sent the next time the channel joins (reconnects). 22931 * Useful for rotating access tokens or updating config without re-creating the channel. 22932 * 22933 * @category Realtime 22934 */ 22935 updateJoinPayload(e) { 22936 this.channelAdapter.updateJoinPayload(e); 22937 } 22938 /** 22939 * Leaves the channel. 22940 * 22941 * Unsubscribes from server events, and instructs channel to terminate on server. 22942 * Triggers onClose() hooks. 22943 * 22944 * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie: 22945 * channel.unsubscribe().receive("ok", () => alert("left!") ) 22946 * 22947 * @category Realtime 22948 */ 22949 async unsubscribe(e = this.timeout) { 22950 return new Promise((s) => { 22951 this.channelAdapter.unsubscribe(e).receive("ok", () => s("ok")).receive("timeout", () => s("timed out")).receive("error", () => s("error")); 22952 }); 22953 } 22954 /** 22955 * Destroys and stops related timers. 22956 * 22957 * @category Realtime 22958 */ 22959 teardown() { 22960 this.channelAdapter.teardown(); 22961 } 22962 /** @internal */ 22963 async _fetchWithTimeout(e, s, r) { 22964 const n = new AbortController(), o = setTimeout(() => n.abort(), r), L = await this.socket.fetch(e, Object.assign(Object.assign({}, s), { signal: n.signal })); 22965 return clearTimeout(o), L; 22966 } 22967 /** @internal */ 22968 _on(e, s, r) { 22969 var n; 22970 const o = e.toLocaleLowerCase(), L = s?.filter; 22971 if ((L instanceof Pu || typeof L == "object" && L !== null && typeof L.build == "function") && (s = Object.assign(Object.assign({}, s), { filter: L.build() })), o === E1.POSTGRES_CHANGES && ((n = this.bindings[o]) === null || n === void 0 ? void 0 : n.find((f) => g1.isSamePostgresFilter(f.filter, s)))) 22972 return this.socket.log("error", `duplicate \`postgres_changes\` binding for ${this.topic} ignored`, s), this; 22973 const d = this.channelAdapter.on(e, r), l = { 22974 type: o, 22975 filter: s, 22976 callback: r, 22977 ref: d 22978 }; 22979 return this.bindings[o] ? this.bindings[o].push(l) : this.bindings[o] = [l], this._updateFilterMessage(), this; 22980 } 22981 /** 22982 * Registers a callback that will be executed when the channel closes. 22983 * 22984 * @internal 22985 */ 22986 _onClose(e) { 22987 this.channelAdapter.onClose(e); 22988 } 22989 /** 22990 * Registers a callback that will be executed when the channel encounteres an error. 22991 * 22992 * @internal 22993 */ 22994 _onError(e) { 22995 this.channelAdapter.onError(e); 22996 } 22997 /** @internal */ 22998 _updateFilterMessage() { 22999 this.channelAdapter.updateFilterBindings((e, s, r) => { 23000 var n, o, L, d, l, g, f; 23001 const p = e.event.toLocaleLowerCase(); 23002 if (this._notThisChannelEvent(p, r)) 23003 return !1; 23004 const M = (n = this.bindings[p]) === null || n === void 0 ? void 0 : n.find((u) => u.ref === e.ref); 23005 if (!M) 23006 return !0; 23007 if (["broadcast", "presence", "postgres_changes"].includes(p)) 23008 if ("id" in M) { 23009 const u = M.id, h = (o = M.filter) === null || o === void 0 ? void 0 : o.event; 23010 return u && ((L = s.ids) === null || L === void 0 ? void 0 : L.includes(u)) && (h === "*" || h?.toLocaleLowerCase() === ((d = s.data) === null || d === void 0 ? void 0 : d.type.toLocaleLowerCase())); 23011 } else { 23012 const u = (g = (l = M?.filter) === null || l === void 0 ? void 0 : l.event) === null || g === void 0 ? void 0 : g.toLocaleLowerCase(); 23013 return u === "*" || u === ((f = s?.event) === null || f === void 0 ? void 0 : f.toLocaleLowerCase()); 23014 } 23015 else 23016 return M.type.toLocaleLowerCase() === p; 23017 }); 23018 } 23019 /** @internal */ 23020 _notThisChannelEvent(e, s) { 23021 const { close: r, error: n, leave: o, join: L } = ui; 23022 return s && [r, n, o, L].includes(e) && s !== this.joinPush.ref; 23023 } 23024 /** @internal */ 23025 _updateFilterTransform() { 23026 this.channelAdapter.updatePayloadTransform((e, s, r) => { 23027 if (typeof s == "object" && "ids" in s) { 23028 const n = s.data, { schema: o, table: L, commit_timestamp: d, type: l, errors: g } = n; 23029 return Object.assign(Object.assign({}, { 23030 schema: o, 23031 table: L, 23032 commit_timestamp: d, 23033 eventType: l, 23034 new: {}, 23035 old: {}, 23036 errors: g 23037 }), this._getPayloadRecords(n)); 23038 } 23039 return s; 23040 }); 23041 } 23042 copyBindings(e) { 23043 if (this.joinedOnce) 23044 throw new Error("cannot copy bindings into joined channel"); 23045 for (const s in e.bindings) 23046 for (const r of e.bindings[s])
23047 this._on(r.type, r.filter, r.callback); 23048 } 23049 /** 23050 * Compares two optional filter values for equality. 23051 * Treats undefined, null, and empty string as equivalent empty values. 23052 * @internal 23053 */ 23054 static isFilterValueEqual(e, s) { 23055 return (e ?? void 0) === (s ?? void 0); 23056 } 23057 /** 23058 * Two `postgres_changes` filters are the same when the server would collapse them into a single 23059 * subscription. 23060 * @internal 23061 */ 23062 static isSamePostgresFilter(e, s) { 23063 var r, n, o, L; 23064 const d = (n = (r = e?.select) === null || r === void 0 ? void 0 : r.join()) !== null && n !== void 0 ? n : void 0, l = (L = (o = s?.select) === null || o === void 0 ? void 0 : o.join()) !== null && L !== void 0 ? L : void 0; 23065 return e?.event === s?.event && g1.isFilterValueEqual(e?.schema, s?.schema) && g1.isFilterValueEqual(e?.table, s?.table) && g1.isFilterValueEqual(e?.filter, s?.filter) && d === l; 23066 } 23067 /** @internal */ 23068 _getPayloadRecords(e) { 23069 const s = { 23070 new: {}, 23071 old: {} 23072 }; 23073 return (e.type === "INSERT" || e.type === "UPDATE") && (s.new = Qa(e.columns, e.record)), (e.type === "UPDATE" || e.type === "DELETE") && (s.old = Qa(e.columns, e.old_record)), s; 23074 } 23075} 23076class Cu { 23077 constructor(e, s) { 23078 this.socket = new _u(e, s); 23079 } 23080 get timeout() { 23081 return this.socket.timeout; 23082 } 23083 get endPoint() { 23084 return this.socket.endPoint; 23085 } 23086 get transport() { 23087 return this.socket.transport; 23088 } 23089 get heartbeatIntervalMs() { 23090 return this.socket.heartbeatIntervalMs; 23091 } 23092 get heartbeatCallback() { 23093 return this.socket.heartbeatCallback; 23094 } 23095 set heartbeatCallback(e) { 23096 this.socket.heartbeatCallback = e; 23097 } 23098 get heartbeatTimer() { 23099 return this.socket.heartbeatTimer; 23100 } 23101 get pendingHeartbeatRef() { 23102 return this.socket.pendingHeartbeatRef; 23103 } 23104 get reconnectTimer() { 23105 return this.socket.reconnectTimer; 23106 } 23107 get vsn() { 23108 return this.socket.vsn; 23109 } 23110 get encode() { 23111 return this.socket.encode; 23112 } 23113 get decode() { 23114 return this.socket.decode; 23115 } 23116 get reconnectAfterMs() { 23117 return this.socket.reconnectAfterMs; 23118 } 23119 get sendBuffer() { 23120 return this.socket.sendBuffer; 23121 } 23122 get stateChangeCallbacks() { 23123 return this.socket.stateChangeCallbacks; 23124 } 23125 connect() { 23126 this.socket.connect(); 23127 } 23128 disconnect(e, s, r, n = 1e4) { 23129 return new Promise((o) => { 23130 setTimeout(() => o("timeout"), n), this.socket.disconnect(() => { 23131 e(), o("ok"); 23132 }, s, r); 23133 }); 23134 } 23135 push(e) { 23136 this.socket.push(e); 23137 } 23138 log(e, s, r) { 23139 this.socket.log(e, s, r); 23140 } 23141 hasLogger() { 23142 return this.socket.hasLogger(); 23143 } 23144 makeRef() { 23145 return this.socket.makeRef(); 23146 } 23147 onOpen(e) { 23148 this.socket.onOpen(e); 23149 } 23150 onClose(e) { 23151 this.socket.onClose(e); 23152 } 23153 onError(e) { 23154 this.socket.onError(e); 23155 } 23156 onMessage(e) { 23157 this.socket.onMessage(e); 23158 } 23159 isConnected() { 23160 return this.socket.isConnected(); 23161 } 23162 isConnecting() { 23163 return this.socket.connectionState() == Y4.connecting; 23164 } 23165 isDisconnecting() { 23166 return this.socket.connectionState() == Y4.closing; 23167 } 23168 connectionState() { 23169 return this.socket.connectionState(); 23170 } 23171 endPointURL() { 23172 return this.socket.endPointURL(); 23173 } 23174 sendHeartbeat() { 23175 this.socket.sendHeartbeat(); 23176 } 23177 /** 23178 * @internal 23179 */ 23180 getSocket() { 23181 return this.socket; 23182 } 23183} 23184const i6 = { 23185 HEARTBEAT_INTERVAL: 25e3 23186}, Fu = [1e3, 2e3, 5e3, 1e4], Eu = 1e4; 23187function Ru() { 23188 const t = /* @__PURE__ */ new Map(); 23189 return { 23190 get length() { 23191 return t.size; 23192 }, 23193 clear() { 23194 t.clear(); 23195 }, 23196 getItem(e) { 23197 return t.has(e) ? t.get(e) : null; 23198 }, 23199 key(e) { 23200 var s; 23201 return (s = Array.from(t.keys())[e]) !== null && s !== void 0 ? s : null; 23202 }, 23203 removeItem(e) { 23204 t.delete(e); 23205 }, 23206 setItem(e, s) { 23207 t.set(e, String(s)); 23208 } 23209 }; 23210} 23211function Du() { 23212 try { 23213 if (typeof globalThis < "u" && globalThis.sessionStorage) 23214 return globalThis.sessionStorage; 23215 } catch { 23216 } 23217 return Ru(); 23218} 23219const zu = ` 23220 addEventListener("message", (e) => { 23221 if (e.data.event === "start") { 23222 setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval); 23223 } 23224 });`; 23225class ju { 23226 get endPoint() { 23227 return this.socketAdapter.endPoint; 23228 } 23229 get timeout() { 23230 return this.socketAdapter.timeout; 23231 } 23232 get transport() { 23233 return this.socketAdapter.transport; 23234 } 23235 get heartbeatCallback() { 23236 return this.socketAdapter.heartbeatCallback; 23237 } 23238 get heartbeatIntervalMs() { 23239 return this.socketAdapter.heartbeatIntervalMs; 23240 } 23241 get heartbeatTimer() { 23242 return this.worker ? this._workerHeartbeatTimer : this.socketAdapter.heartbeatTimer; 23243 } 23244 get pendingHeartbeatRef() { 23245 return this.worker ? this._pendingWorkerHeartbeatRef : this.socketAdapter.pendingHeartbeatRef; 23246 } 23247 get reconnectTimer() { 23248 return this.socketAdapter.reconnectTimer; 23249 } 23250 get vsn() { 23251 return this.socketAdapter.vsn; 23252 } 23253 get encode() { 23254 return this.socketAdapter.encode; 23255 } 23256 get decode() { 23257 return this.socketAdapter.decode; 23258 } 23259 get reconnectAfterMs() { 23260 return this.socketAdapter.reconnectAfterMs; 23261 } 23262 get sendBuffer() { 23263 return this.socketAdapter.sendBuffer; 23264 } 23265 get stateChangeCallbacks() { 23266 return this.socketAdapter.stateChangeCallbacks; 23267 } 23268 /** 23269 * Initializes the Socket. 23270 * 23271 * @param endPoint The string WebSocket endpoint, ie, "ws://example.com/socket", "wss://example.com", "/socket" (inherited host & protocol) 23272 * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation 23273 * @param options.timeout The default timeout in milliseconds to trigger push timeouts. 23274 * @param options.params The optional params to pass when connecting. 23275 * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future. 23276 * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message. 23277 * @param options.heartbeatCallback The optional function to handle heartbeat status and latency. 23278 * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) } 23279 * @param options.logLevel Sets the log level for Realtime 23280 * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload)) 23281 * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode. 23282 * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off. 23283 * @param options.worker Use Web Worker to set a side flow. Defaults to false. 23284 * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive. 23285 * @param options.vsn The protocol version to use when connecting. Supported versions are "1.0.0" and "2.0.0". Defaults to "2.0.0". 23286 * 23287 * @category Realtime 23288 * 23289 * @example Using supabase-js (recommended) 23290 * ```ts 23291 * import { createClient } from '@supabase/supabase-js' 23292 * 23293 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 23294 * const channel = supabase.channel('room1') 23295 * channel 23296 * .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload)) 23297 * .subscribe() 23298 * ``` 23299 * 23300 * @example Standalone import for bundle-sensitive environments 23301 * ```ts 23302 * import RealtimeClient from '@supabase/realtime-js' 23303 * 23304 * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', { 23305 * params: { apikey: 'your-publishable-key' }, 23306 * }) 23307 * client.connect() 23308 * ``` 23309 */ 23310 constructor(e, s) { 23311 var r; 23312 if (this.channels = new Array(), this.accessTokenValue = null, this.accessToken = null, this.apiKey = null, this.httpEndpoint = "", this.headers = {}, this.params = {}, this.ref = 0, this.serializer = new iu(), this._manuallySetToken = !1, this._authPromise = null, this._authGeneration = 0, this._workerHeartbeatTimer = void 0, this._pendingWorkerHeartbeatRef = null, this._pendingDisconnectTimer = null, this._disconnectOnEmptyChannelsAfterMs
23312= 0, this._resolveFetch = (o) => o ? (...L) => o(...L) : (...L) => fetch(...L), !(!((r = s?.params) === null || r === void 0) && r.apikey)) 23313 throw new Error("API key is required to connect to Realtime"); 23314 this.apiKey = s.params.apikey; 23315 const n = this._initializeOptions(s); 23316 this.socketAdapter = new Cu(e, n), this.httpEndpoint = mi(e), this.fetch = this._resolveFetch(s?.fetch); 23317 } 23318 /** 23319 * Connects the socket, unless already connected. 23320 * 23321 * @category Realtime 23322 */ 23323 connect() { 23324 if (!(this.isConnecting() || this.isDisconnecting() || this.isConnected())) { 23325 this.accessToken && !this._authPromise && this._setAuthSafely("connect"), this._setupConnectionHandlers(); 23326 try { 23327 this.socketAdapter.connect(); 23328 } catch (e) { 23329 const s = e.message; 23330 throw new Error(`WebSocket not available: ${s}`); 23331 } 23332 this._handleNodeJsRaceCondition(); 23333 } 23334 } 23335 /** 23336 * Returns the URL of the websocket. 23337 * @returns string The URL of the websocket. 23338 * 23339 * @category Realtime 23340 */ 23341 endpointURL() { 23342 return this.socketAdapter.endPointURL(); 23343 } 23344 /** 23345 * Disconnects the socket. 23346 * 23347 * @param code A numeric status code to send on disconnect. 23348 * @param reason A custom reason for the disconnect. 23349 * 23350 * @category Realtime 23351 */ 23352 async disconnect(e, s) { 23353 return this._cancelPendingDisconnect(), this.isDisconnecting() ? "ok" : await this.socketAdapter.disconnect(() => { 23354 clearInterval(this._workerHeartbeatTimer), this._terminateWorker(); 23355 }, e, s); 23356 } 23357 /** 23358 * Returns all created channels 23359 * 23360 * @category Realtime 23361 */ 23362 getChannels() { 23363 return this.channels; 23364 } 23365 /** 23366 * Unsubscribes, removes and tears down a single channel 23367 * @param channel A RealtimeChannel instance 23368 * 23369 * @category Realtime 23370 */ 23371 async removeChannel(e) { 23372 const s = await e.unsubscribe(); 23373 return s === "ok" && e.teardown(), s; 23374 } 23375 /** 23376 * Unsubscribes, removes and tears down all channels 23377 * 23378 * @category Realtime 23379 */ 23380 async removeAllChannels() { 23381 const e = this.channels.map(async (r) => { 23382 const n = await r.unsubscribe(); 23383 return r.teardown(), n; 23384 }), s = await Promise.all(e); 23385 return await this.disconnect(), s; 23386 } 23387 /** 23388 * Logs the message. 23389 * 23390 * For customized logging, `this.logger` can be overridden in Client constructor. 23391 * 23392 * @category Realtime 23393 */ 23394 log(e, s, r) { 23395 this.socketAdapter.log(e, s, r); 23396 } 23397 /** 23398 * Returns true if a custom `logger` has been configured on this client. 23399 * 23400 * @category Realtime 23401 */ 23402 hasLogger() { 23403 return this.socketAdapter.hasLogger(); 23404 } 23405 /** 23406 * Returns the current state of the socket. 23407 * 23408 * @category Realtime 23409 */ 23410 connectionState() { 23411 return this.socketAdapter.connectionState() || Y4.closed; 23412 } 23413 /** 23414 * Returns `true` is the connection is open. 23415 * 23416 * @category Realtime 23417 */ 23418 isConnected() { 23419 return this.socketAdapter.isConnected(); 23420 } 23421 /** 23422 * Returns `true` if the connection is currently connecting. 23423 * 23424 * @category Realtime 23425 */ 23426 isConnecting() { 23427 return this.socketAdapter.isConnecting(); 23428 } 23429 /** 23430 * Returns `true` if the connection is currently disconnecting. 23431 * 23432 * @category Realtime 23433 */ 23434 isDisconnecting() { 23435 return this.socketAdapter.isDisconnecting(); 23436 } 23437 /** 23438 * Creates (or reuses) a {@link RealtimeChannel} for the provided topic. 23439 * 23440 * Topics are automatically prefixed with `realtime:` to match the Realtime service. 23441 * If a channel with the same topic already exists it will be returned instead of creating 23442 * a duplicate connection. 23443 * 23444 * @category Realtime 23445 */ 23446 channel(e, s = { config: {} }) { 23447 const r = `realtime:${e}`, n = this.getChannels().find((o) => o.topic === r); 23448 if (n) 23449 return n; 23450 { 23451 const o = new g1(`realtime:${e}`, s, this); 23452 return this._cancelPendingDisconnect(), this.channels.push(o), o; 23453 } 23454 } 23455 /** 23456 * Push out a message if the socket is connected. 23457 * 23458 * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.
23459 * 23460 * @category Realtime 23461 */ 23462 push(e) { 23463 this.socketAdapter.push(e); 23464 } 23465 /** 23466 * Sets the JWT access token used for channel subscription authorization and Realtime RLS. 23467 * 23468 * If param is null it will use the `accessToken` callback function or the token set on the client. 23469 * 23470 * On callback used, it will set the value of the token internal to the client. 23471 * 23472 * When a token is explicitly provided AND no `accessToken` callback is configured, 23473 * it will be preserved across channel operations (including removeChannel and 23474 * resubscribe) and the client stays in manual-token mode. 23475 * 23476 * When an `accessToken` callback IS configured, the callback is the source of truth: 23477 * the client remains in callback mode and continues to refresh from it on heartbeat, 23478 * even after a bootstrap/override `setAuth(token)` call. 23479 * 23480 * The callback is called on connect and on every heartbeat (`heartbeatIntervalMs`, 23481 * default 25000ms). Its token must stay valid past the next call, or the server closes 23482 * the channel at expiry with no automatic resubscribe. 23483 * 23484 * @param token A JWT string to override the token set on the client. 23485 * 23486 * @example Setting the authorization header 23487 * // Use a manual token (preserved across resubscribes when no accessToken callback is set) 23488 * client.realtime.setAuth('my-custom-jwt') 23489 * 23490 * // Switch back to using the accessToken callback 23491 * client.realtime.setAuth() 23492 * 23493 * @category Realtime 23494 */ 23495 async setAuth(e = null) { 23496 const s = ++this._authGeneration, r = this._performAuth(e, s); 23497 s === this._authGeneration && (this._authPromise = r); 23498 try { 23499 await r; 23500 } finally { 23501 this._authPromise === r && (this._authPromise = null); 23502 } 23503 } 23504 /** 23505 * Returns true if the current access token was explicitly set via setAuth(token), 23506 * false if it was obtained via the accessToken callback. 23507 * @internal 23508 */ 23509 _isManualToken() { 23510 return this._manuallySetToken; 23511 } 23512 /** 23513 * Sends a heartbeat message if the socket is connected. 23514 * 23515 * @category Realtime 23516 */ 23517 async sendHeartbeat() { 23518 this.socketAdapter.sendHeartbeat(); 23519 } 23520 /** 23521 * Sets a callback that receives lifecycle events for internal heartbeat messages. 23522 * Useful for instrumenting connection health (e.g. sent/ok/timeout). 23523 * 23524 * @category Realtime 23525 */ 23526 onHeartbeat(e) { 23527 this.socketAdapter.heartbeatCallback = this._wrapHeartbeatCallback(e); 23528 } 23529 /** 23530 * Return the next message ref, accounting for overflows 23531 * 23532 * @internal 23533 */ 23534 _makeRef() { 23535 return this.socketAdapter.makeRef(); 23536 } 23537 /** 23538 * Removes a channel from RealtimeClient 23539 * 23540 * @param channel An open subscription. 23541 * 23542 * @internal 23543 */ 23544 _remove(e) { 23545 this.channels = this.channels.filter((s) => s.topic !== e.topic), this.channels.length === 0 && (this.log("transport", "no channels remaining, scheduling disconnect"), this._schedulePendingDisconnect()); 23546 } 23547 /** @internal */ 23548 _schedulePendingDisconnect() { 23549 if (this._cancelPendingDisconnect(), this._disconnectOnEmptyChannelsAfterMs === 0) { 23550 this.log("transport", "disconnecting immediately - no channels"), this.disconnect(); 23551 return; 23552 } 23553 this._pendingDisconnectTimer = setTimeout(() => { 23554 this._pendingDisconnectTimer = null, this.channels.length === 0 && (this.log("transport", "deferred disconnect fired - no channels, disconnecting"), this.disconnect()); 23555 }, this._disconnectOnEmptyChannelsAfterMs), this.log("transport", `deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`); 23556 } 23557 /** @internal */ 23558 _cancelPendingDisconnect() { 23559 this._pendingDisconnectTimer !== null && (this.log("transport", "pending disconnect cancelled - channel activity detected"), clearTimeout(this._pendingDisconnectTimer), this._pendingDisconnectTimer = null); 23560 } 23561 /** 23562 * Perform the actual auth operation 23563 * @internal 23564 */ 23565 async _performAuth(e, s) { 23566 let r, n = !1; 23567 if (e) 23568 r = e, n = !0; 23569 else if (this.accessToken) 23570 try { 23571 r = await this.accessToken(); 23572 } catch (o) { 23573 this.log("error", "Error fetching access token from callback", o), r = this.accessTokenValue; 23574 } 23575 else 23576 r = this.accessTokenValue; 23577 s === this._authGeneration && (this.accessToken ? this._manuallySetToken = !1 : n && (this._manuallySetToken = !0), this.accessTokenValue != r && (this.accessTokenValue = r, this.channels.forEac
23577h((o) => { 23578 const L = { 23579 access_token: r, 23580 version: YM 23581 }; 23582 o.updateJoinPayload(L), o.joinedOnce && o.channelAdapter.isJoined() && o.channelAdapter.push(ui.access_token, { 23583 access_token: r 23584 }); 23585 }))); 23586 } 23587 /** 23588 * Wait for any in-flight auth operations to complete 23589 * @internal 23590 */ 23591 async _waitForAuthIfNeeded() { 23592 this._authPromise && await this._authPromise; 23593 } 23594 /** 23595 * Safely call setAuth with standardized error handling 23596 * @internal 23597 */ 23598 _setAuthSafely(e = "general") { 23599 this._isManualToken() || this.setAuth().catch((s) => { 23600 this.log("error", `Error setting auth in ${e}`, s); 23601 }); 23602 } 23603 /** @internal */ 23604 _setupConnectionHandlers() { 23605 this.socketAdapter.onOpen(() => { 23606 (this._authPromise || (this.accessToken && !this.accessTokenValue ? this.setAuth() : Promise.resolve())).catch((s) => { 23607 this.log("error", "error waiting for auth on connect", s); 23608 }), this.worker && !this.workerRef && this._startWorkerHeartbeat(); 23609 }), this.socketAdapter.onClose(() => { 23610 this.worker && this.workerRef && this._terminateWorker(); 23611 }), this.socketAdapter.onMessage((e) => { 23612 e.ref && e.ref === this._pendingWorkerHeartbeatRef && (this._pendingWorkerHeartbeatRef = null); 23613 }); 23614 } 23615 /** @internal */ 23616 _handleNodeJsRaceCondition() { 23617 this.socketAdapter.isConnected() && this.socketAdapter.getSocket().onConnOpen(); 23618 } 23619 /** @internal */ 23620 _wrapHeartbeatCallback(e) { 23621 return (s, r) => { 23622 s !== "disconnected" && (s == "sent" && this._setAuthSafely(), e && e(s, r)); 23623 }; 23624 } 23625 /** @internal */ 23626 _startWorkerHeartbeat() { 23627 this.workerUrl ? this.log("worker", `starting worker for from ${this.workerUrl}`) : this.log("worker", "starting default worker"); 23628 const e = this._workerObjectUrl(this.workerUrl); 23629 this.workerRef = new Worker(e), this.workerRef.onerror = (s) => { 23630 this.log("worker", "worker error", s.message), this._terminateWorker(), this.disconnect(); 23631 }, this.workerRef.onmessage = (s) => { 23632 s.data.event === "keepAlive" && this.sendHeartbeat(); 23633 }, this.workerRef.postMessage({ 23634 event: "start", 23635 interval: this.heartbeatIntervalMs 23636 }); 23637 } 23638 /** 23639 * Terminate the Web Worker and clear the reference 23640 * @internal 23641 */ 23642 _terminateWorker() { 23643 this.workerRef && (this.log("worker", "terminating worker"), this.workerRef.terminate(), this.workerRef = void 0); 23644 } 23645 /** @internal */ 23646 _workerObjectUrl(e) { 23647 let s; 23648 if (e) 23649 s = e; 23650 else { 23651 const r = new Blob([zu], { type: "application/javascript" }); 23652 s = URL.createObjectURL(r); 23653 } 23654 return s; 23655 } 23656 /** 23657 * Initialize socket options with defaults 23658 * @internal 23659 */ 23660 _initializeOptions(e) { 23661 var s, r, n, o, L, d, l, g, f, p, M, u; 23662 this.worker = (s = e?.worker) !== null && s !== void 0 ? s : !1, this.accessToken = (r = e?.accessToken) !== null && r !== void 0 ? r : null; 23663 const h = {}; 23664 h.timeout = (n = e?.timeout) !== null && n !== void 0 ? n : eu, h.heartbeatIntervalMs = (o = e?.heartbeatIntervalMs) !== null && o !== void 0 ? o : i6.HEARTBEAT_INTERVAL, this._disconnectOnEmptyChannelsAfterMs = (L = e?.disconnectOnEmptyChannelsAfterMs) !== null && L !== void 0 ? L : 2 * ((d = e?.heartbeatIntervalMs) !== null && d !== void 0 ? d : i6.HEARTBEAT_INTERVAL), h.transport = (l = e?.transport) !== null && l !== void 0 ? l : JM.getWebSocketConstructor(), h.params = e?.params, h.logger = e?.logger, h.heartbeatCallback = this._wrapHeartbeatCallback(e?.heartbeatCallback), h.sessionStorage = (g = e?.sessionStorage) !== null && g !== void 0 ? g : Du(), h.reconnectAfterMs = (f = e?.reconnectAfterMs) !== null && f !== void 0 ? f : ((y) => Fu[y - 1] || Eu); 23665 let x, _; 23666 const v = (p = e?.vsn) !== null && p !== void 0 ? p : QM; 23667 switch (v) { 23668 case XM: 23669 x = (y, b) => b(JSON.stringify(y)), _ = (y, b) => b(JSON.parse(y)); 23670 break; 23671 case Mi: 23672 x = this.serializer.encode.bind(this.serializer), _ = this.serializer.decode.bind(this.serializer); 23673 break; 23674 default: 23675 throw new Error(`Unsupported serializer version: ${h.vsn}`); 23676 } 23677 if (h.vsn = v, h.encode = (M = e?.encode) !== null && M !== void 0 ? M : x, h.decode = (u = e?.decode) !== null && u !== void 0 ? u : _, h.beforeReconnect = this._reconnectAuth.bind(this), (e?.logLevel || e?.log_level) && (this.logLevel = e.logLevel || e.log_level, h.params = Object.assign(Object.assign({}, h.params), { log_level: this.logLevel })), this.worker) { 23678 if (typeof window < "u" && !window.Worker) 23679 throw new Error("Web Worker is not supported"); 23680 this.workerUrl = e?.workerUrl, h.autoSendHeartbeat = !this.worker; 23681 } 23682 return h; 23683 } 23684 /** @internal */ 23685 async _reconnectAuth() { 23686 await this._waitForAuthIfNeeded(), this.isConnected() || this.connect(); 23687 } 23688}
23689var n2 = class extends Error { 23690 constructor(t, e) { 23691 super(t), this.name = "IcebergError", this.status = e.status, this.icebergType = e.icebergType, this.icebergCode = e.icebergCode, this.details = e.details, this.isCommitStateUnknown = e.icebergType === "CommitStateUnknownException" || [500, 502, 504].includes(e.status) && e.icebergType?.includes("CommitState") === !0; 23692 } 23693 /** 23694 * Returns true if the error is a 404 Not Found error. 23695 */ 23696 isNotFound() { 23697 return this.status === 404; 23698 } 23699 /** 23700 * Returns true if the error is a 409 Conflict error. 23701 */ 23702 isConflict() { 23703 return this.status === 409; 23704 } 23705 /** 23706 * Returns true if the error is a 419 Authentication Timeout error. 23707 */ 23708 isAuthenticationTimeout() { 23709 return this.status === 419; 23710 } 23711}; 23712function Ou(t, e, s) { 23713 const r = new URL(e, t); 23714 if (s) 23715 for (const [n, o] of Object.entries(s)) 23716 o !== void 0 && r.searchParams.set(n, o); 23717 return r.toString(); 23718} 23719async function Vu(t) { 23720 return !t || t.type === "none" ? {} : t.type === "bearer" ? { Authorization: `Bearer ${t.token}` } : t.type === "header" ? { [t.name]: t.value } : t.type === "custom" ? await t.getHeaders() : {}; 23721} 23722function Hu(t) { 23723 const e = t.fetchImpl ?? globalThis.fetch; 23724 return { 23725 async request({ 23726 method: s, 23727 path: r, 23728 query: n, 23729 body: o, 23730 headers: L 23731 }) { 23732 const d = Ou(t.baseUrl, r, n), l = await Vu(t.auth), g = await e(d, { 23733 method: s, 23734 headers: { 23735 ...o ? { "Content-Type": "application/json" } : {}, 23736 ...l, 23737 ...L 23738 }, 23739 body: o ? JSON.stringify(o) : void 0 23740 }), f = await g.text(), p = (g.headers.get("content-type") || "").includes("application/json"), M = p && f ? JSON.parse(f) : f; 23741 if (!g.ok) { 23742 const u = p ? M : void 0, h = u?.error; 23743 throw new n2( 23744 h?.message ?? `Request failed with status ${g.status}`, 23745 { 23746 status: g.status, 23747 icebergType: h?.type, 23748 icebergCode: h?.code, 23749 details: u 23750 } 23751 ); 23752 } 23753 return { status: g.status, headers: g.headers, data: M }; 23754 } 23755 }; 23756} 23757function j2(t) { 23758 return t.join("�"); 23759} 23760var Zu = class { 23761 constructor(t, e = "") { 23762 this.client = t, this.prefix = e; 23763 } 23764 async listNamespaces(t) { 23765 const e = t ? { parent: j2(t.namespace) } : void 0; 23766 return (await this.client.request({ 23767 method: "GET", 23768 path: `${this.prefix}/namespaces`, 23769 query: e 23770 })).data.namespaces.map((r) => ({ namespace: r })); 23771 } 23772 async createNamespace(t, e) { 23773 const s = { 23774 namespace: t.namespace, 23775 properties: e?.properties 23776 }; 23777 return (await this.client.request({ 23778 method: "POST", 23779 path: `${this.prefix}/namespaces`, 23780 body: s 23781 })).data; 23782 } 23783 async dropNamespace(t) { 23784 await this.client.request({ 23785 method: "DELETE", 23786 path: `${this.prefix}/namespaces/${j2(t.namespace)}` 23787 }); 23788 } 23789 async loadNamespaceMetadata(t) { 23790 return { 23791 properties: (await this.client.request({ 23792 method: "GET", 23793 path: `${this.prefix}/namespaces/${j2(t.namespace)}` 23794 })).data.properties 23795 }; 23796 } 23797 async namespaceExists(t) { 23798 try { 23799 return await this.client.request({ 23800 method: "HEAD", 23801 path: `${this.prefix}/namespaces/${j2(t.namespace)}` 23802 }), !0; 23803 } catch (e) { 23804 if (e instanceof n2 && e.status === 404) 23805 return !1; 23806 throw e; 23807 } 23808 } 23809 async createNamespaceIfNotExists(t, e) { 23810 try { 23811 return await this.createNamespace(t, e); 23812 } catch (s) { 23813 if (s instanceof n2 && s.status === 409) 23814 return; 23815 throw s; 23816 } 23817 } 23818}; 23819function Q1(t) { 23820 return t.join("�"); 23821} 23822var Wu = class { 23823 constructor(t, e = "", s) { 23824 this.client = t, this.prefix = e, this.accessDelegation = s; 23825 } 23826 async listTables(t) { 23827 return (await this.client.request({ 23828 method: "GET", 23829 path: `${this.prefix}/namespaces/${Q1(t.namespace)}/tables` 23830 })).data.identifiers; 23831 } 23832 async createTable(t, e) { 23833 const s = {}; 23834 return this.accessDelegation && (s["X-Iceberg-Access-Delegation"] = this.accessDelegation), (await this.client.request({ 23835 method: "POST", 23836 path: `${this.prefix}/namespaces/${Q1(t.namespace)}/tables`, 23837 body: e, 23838 headers: s 23839 })).data.metadata; 23840 } 23841 async updateTable(t, e) { 23842 const s = await this.client.request({ 23843 method: "POST", 23844 path: `${this.prefix}/namespaces/${Q1(t.namespace)}
23844/tables/${t.name}`, 23845 body: e 23846 }); 23847 return { 23848 "metadata-location": s.data["metadata-location"], 23849 metadata: s.data.metadata 23850 }; 23851 } 23852 async dropTable(t, e) { 23853 await this.client.request({ 23854 method: "DELETE", 23855 path: `${this.prefix}/namespaces/${Q1(t.namespace)}/tables/${t.name}`, 23856 query: { purgeRequested: String(e?.purge ?? !1) } 23857 }); 23858 } 23859 async loadTable(t) { 23860 const e = {}; 23861 return this.accessDelegation && (e["X-Iceberg-Access-Delegation"] = this.accessDelegation), (await this.client.request({ 23862 method: "GET", 23863 path: `${this.prefix}/namespaces/${Q1(t.namespace)}/tables/${t.name}`, 23864 headers: e 23865 })).data.metadata; 23866 } 23867 async tableExists(t) { 23868 const e = {}; 23869 this.accessDelegation && (e["X-Iceberg-Access-Delegation"] = this.accessDelegation); 23870 try { 23871 return await this.client.request({ 23872 method: "HEAD", 23873 path: `${this.prefix}/namespaces/${Q1(t.namespace)}/tables/${t.name}`, 23874 headers: e 23875 }), !0; 23876 } catch (s) { 23877 if (s instanceof n2 && s.status === 404) 23878 return !1; 23879 throw s; 23880 } 23881 } 23882 async createTableIfNotExists(t, e) { 23883 try { 23884 return await this.createTable(t, e); 23885 } catch (s) { 23886 if (s instanceof n2 && s.status === 409) 23887 return await this.loadTable({ namespace: t.namespace, name: e.name }); 23888 throw s; 23889 } 23890 } 23891}, $u = class { 23892 /** 23893 * Creates a new Iceberg REST Catalog client. 23894 * 23895 * @param options - Configuration options for the catalog client 23896 */ 23897 constructor(t) { 23898 let e = "v1"; 23899 t.catalogName && (e += `/${t.catalogName}`); 23900 const s = t.baseUrl.endsWith("/") ? t.baseUrl : `${t.baseUrl}/`; 23901 this.client = Hu({ 23902 baseUrl: s, 23903 auth: t.auth, 23904 fetchImpl: t.fetch 23905 }), this.accessDelegation = t.accessDelegation?.join(","), this.namespaceOps = new Zu(this.client, e), this.tableOps = new Wu(this.client, e, this.accessDelegation); 23906 } 23907 /** 23908 * Lists all namespaces in the catalog. 23909 * 23910 * @param parent - Optional parent namespace to list children under 23911 * @returns Array of namespace identifiers 23912 * 23913 * @example 23914 * ```typescript 23915 * // List all top-level namespaces 23916 * const namespaces = await catalog.listNamespaces(); 23917 * 23918 * // List namespaces under a parent 23919 * const children = await catalog.listNamespaces({ namespace: ['analytics'] }); 23920 * ``` 23921 */ 23922 async listNamespaces(t) { 23923 return this.namespaceOps.listNamespaces(t); 23924 } 23925 /** 23926 * Creates a new namespace in the catalog. 23927 * 23928 * @param id - Namespace identifier to create 23929 * @param metadata - Optional metadata properties for the namespace 23930 * @returns Response containing the created namespace and its properties 23931 * 23932 * @example 23933 * ```typescript 23934 * const response = await catalog.createNamespace( 23935 * { namespace: ['analytics'] }, 23936 * { properties: { owner: 'data-team' } } 23937 * ); 23938 * console.log(response.namespace); // ['analytics'] 23939 * console.log(response.properties); // { owner: 'data-team', ... } 23940 * ``` 23941 */ 23942 async createNamespace(t, e) { 23943 return this.namespaceOps.createNamespace(t, e); 23944 } 23945 /** 23946 * Drops a namespace from the catalog. 23947 * 23948 * The namespace must be empty (contain no tables) before it can be dropped. 23949 * 23950 * @param id - Namespace identifier to drop 23951 * 23952 * @example 23953 * ```typescript 23954 * await catalog.dropNamespace({ namespace: ['analytics'] }); 23955 * ``` 23956 */ 23957 async dropNamespace(t) { 23958 await this.namespaceOps.dropNamespace(t); 23959 } 23960 /** 23961 * Loads metadata for a namespace. 23962 * 23963 * @param id - Namespace identifier to load 23964 * @returns Namespace metadata including properties 23965 * 23966 * @example 23967 * ```typescript 23968 * const metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] }); 23969 * console.log(metadata.properties); 23970 * ``` 23971 */ 23972 async loadNamespaceMetadata(t) { 23973 return this.namespaceOps.loadNamespaceMetadata(t); 23974 } 23975 /** 23976 * Lists all tables in a namespace. 23977 * 23978 * @param namespace - Namespace identifier to list tables from 23979 * @returns Array of table identifiers 23980 * 23981 * @example 23982 * ```typescript 23983 * const tables = await catalog.listTables({ namespace: ['analytics'] }); 23984 * console.log(tables); // [{ namespace: ['analytics'], name: 'events' }, ...] 23985 * ``` 23986 */ 23987 async listTables(t) { 23988 return this.tableOps.listTables(t); 23989 } 23990 /** 23991 * Creates a new table in the catalog. 23992 * 23993 * @param namespace - Namespace to create the table in 23994 * @param request - Table creation request including name, schema, partition spec, etc. 23995 * @returns Table metadata for the created table 23996 * 23997 * @example 23998 * ```typescript 23999 * const metadata = await catalog.createTable( 24000 * { namespace: ['analytics'] }, 24001 * { 24002 * name: 'events', 24003 * schema: { 24004 * type: 'struct', 24005 * fields: [ 24006 * { id: 1, name: 'id', type: 'long', required: true }, 24007 * { id: 2, name: 'timestamp', type: 'timestamp', required: true } 24008 * ], 24009 * 'schema-id': 0 24010 * }, 24011 * 'partition-spec': { 24012 * 'spec-id': 0, 24013 * fields: [ 24014 * { source_id: 2, field_id: 1000, name: 'ts_day', transform: 'day' } 24015 * ] 24016 * } 24017 * } 24018 * ); 24019 * ``` 24020 */ 24021 async createTable(t, e) {
24022 return this.tableOps.createTable(t, e); 24023 } 24024 /** 24025 * Updates an existing table's metadata. 24026 * 24027 * Can update the schema, partition spec, or properties of a table. 24028 * 24029 * @param id - Table identifier to update 24030 * @param request - Update request with fields to modify 24031 * @returns Response containing the metadata location and updated table metadata 24032 * 24033 * @example 24034 * ```typescript 24035 * const response = await catalog.updateTable( 24036 * { namespace: ['analytics'], name: 'events' }, 24037 * { 24038 * properties: { 'read.split.target-size': '134217728' } 24039 * } 24040 * ); 24041 * console.log(response['metadata-location']); // s3://... 24042 * console.log(response.metadata); // TableMetadata object 24043 * ``` 24044 */ 24045 async updateTable(t, e) { 24046 return this.tableOps.updateTable(t, e); 24047 } 24048 /** 24049 * Drops a table from the catalog. 24050 * 24051 * @param id - Table identifier to drop 24052 * 24053 * @example 24054 * ```typescript 24055 * await catalog.dropTable({ namespace: ['analytics'], name: 'events' }); 24056 * ``` 24057 */ 24058 async dropTable(t, e) { 24059 await this.tableOps.dropTable(t, e); 24060 } 24061 /** 24062 * Loads metadata for a table. 24063 * 24064 * @param id - Table identifier to load 24065 * @returns Table metadata including schema, partition spec, location, etc. 24066 * 24067 * @example 24068 * ```typescript 24069 * const metadata = await catalog.loadTable({ namespace: ['analytics'], name: 'events' }); 24070 * console.log(metadata.schema); 24071 * console.log(metadata.location); 24072 * ``` 24073 */ 24074 async loadTable(t) { 24075 return this.tableOps.loadTable(t); 24076 } 24077 /** 24078 * Checks if a namespace exists in the catalog. 24079 * 24080 * @param id - Namespace identifier to check 24081 * @returns True if the namespace exists, false otherwise 24082 * 24083 * @example 24084 * ```typescript 24085 * const exists = await catalog.namespaceExists({ namespace: ['analytics'] }); 24086 * console.log(exists); // true or false 24087 * ``` 24088 */ 24089 async namespaceExists(t) { 24090 return this.namespaceOps.namespaceExists(t); 24091 } 24092 /** 24093 * Checks if a table exists in the catalog. 24094 * 24095 * @param id - Table identifier to check 24096 * @returns True if the table exists, false otherwise 24097 * 24098 * @example 24099 * ```typescript 24100 * const exists = await catalog.tableExists({ namespace: ['analytics'], name: 'events' }); 24101 * console.log(exists); // true or false 24102 * ``` 24103 */ 24104 async tableExists(t) { 24105 return this.tableOps.tableExists(t); 24106 } 24107 /** 24108 * Creates a namespace if it does not exist. 24109 * 24110 * If the namespace already exists, returns void. If created, returns the response. 24111 * 24112 * @param id - Namespace identifier to create 24113 * @param metadata - Optional metadata properties for the namespace 24114 * @returns Response containing the created namespace and its properties, or void if it already exists 24115 * 24116 * @example 24117 * ```typescript 24118 * const response = await catalog.createNamespaceIfNotExists( 24119 * { namespace: ['analytics'] }, 24120 * { properties: { owner: 'data-team' } } 24121 * ); 24122 * if (response) { 24123 * console.log('Created:', response.namespace); 24124 * } else { 24125 * console.log('Already exists'); 24126 * } 24127 * ``` 24128 */ 24129 async createNamespaceIfNotExists(t, e) { 24130 return this.namespaceOps.createNamespaceIfNotExists(t, e); 24131 } 24132 /** 24133 * Creates a table if it does not exist. 24134 * 24135 * If the table already exists, returns its metadata instead. 24136 * 24137 * @param namespace - Namespace to create the table in 24138 * @param request - Table creation request including name, schema, partition spec, etc. 24139 * @returns Table metadata for the created or existing table 24140 * 24141 * @example 24142 * ```typescript 24143 * const metadata = await catalog.createTableIfNotExists( 24144 * { namespace: ['analytics'] }, 24145 * { 24146 * name: 'events', 24147 * schema: { 24148 * type: 'struct', 24149 * fields: [ 24150 * { id: 1, name: 'id', type: 'long', required: true }, 24151 * { id: 2, name: 'timestamp', type: 'timestamp', required: true } 24152 * ], 24153 * 'schema-id': 0 24154 * } 24155 * } 24156 * ); 24157 * ``` 24158 */ 24159 async createTableIfNotExists(t, e) { 24160 return this.tableOps.createTableIfNotExists(t, e); 24161 } 24162}; 24163function o2(t) { 24164 "@babel/helpers - typeof"; 24165 return o2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { 24166 return typeof e; 24167 }
24167 : function(e) { 24168 return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; 24169 }, o2(t); 24170} 24171function qu(t, e) { 24172 if (o2(t) != "object" || !t) return t; 24173 var s = t[Symbol.toPrimitive]; 24174 if (s !== void 0) { 24175 var r = s.call(t, e); 24176 if (o2(r) != "object") return r; 24177 throw new TypeError("@@toPrimitive must return a primitive value."); 24178 } 24179 return (e === "string" ? String : Number)(t); 24180} 24181function Uu(t) { 24182 var e = qu(t, "string"); 24183 return o2(e) == "symbol" ? e : e + ""; 24184} 24185function Gu(t, e, s) { 24186 return (e = Uu(e)) in t ? Object.defineProperty(t, e, { 24187 value: s, 24188 enumerable: !0, 24189 configurable: !0, 24190 writable: !0 24191 }) : t[e] = s, t; 24192} 24193function r6(t, e) { 24194 var s = Object.keys(t); 24195 if (Object.getOwnPropertySymbols) { 24196 var r = Object.getOwnPropertySymbols(t); 24197 e && (r = r.filter(function(n) { 24198 return Object.getOwnPropertyDescriptor(t, n).enumerable; 24199 })), s.push.apply(s, r); 24200 } 24201 return s; 24202} 24203function F(t) { 24204 for (var e = 1; e < arguments.length; e++) { 24205 var s = arguments[e] != null ? arguments[e] : {}; 24206 e % 2 ? r6(Object(s), !0).forEach(function(r) { 24207 Gu(t, r, s[r]); 24208 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(s)) : r6(Object(s)).forEach(function(r) { 24209 Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(s, r)); 24210 }); 24211 } 24212 return t; 24213} 24214var O3 = class extends Error { 24215 constructor(t, e = "storage", s, r) { 24216 super(t), this.__isStorageError = !0, this.namespace = e, this.name = e === "vectors" ? "StorageVectorsError" : "StorageError", this.status = s, this.statusCode = r; 24217 } 24218 toJSON() { 24219 return { 24220 name: this.name, 24221 message: this.message, 24222 status: this.status, 24223 statusCode: this.statusCode 24224 }; 24225 } 24226}; 24227function V3(t) { 24228 return typeof t == "object" && t !== null && "__isStorageError" in t; 24229} 24230var t5 = class extends O3 { 24231 constructor(t, e, s, r = "storage", n) { 24232 super(t, r, e, s), this.name = r === "vectors" ? "StorageVectorsApiError" : "StorageApiError", this.status = e, this.statusCode = s, this.code = n; 24233 } 24234 toJSON() { 24235 return F(F({}, super.toJSON()), {}, { code: this.code }); 24236 } 24237}, _i = class extends O3 { 24238 constructor(t, e, s = "storage") { 24239 super(t, s), this.name = s === "vectors" ? "StorageVectorsUnknownError" : "StorageUnknownError", this.originalError = e; 24240 } 24241}; 24242function d3(t, e, s) { 24243 const r = F({}, t), n = e.toLowerCase(); 24244 for (const o of Object.keys(r)) o.toLowerCase() === n && delete r[o]; 24245 return r[n] = s, r; 24246} 24247function Ju(t) { 24248 const e = {}; 24249 for (const [s, r] of Object.entries(t)) e[s.toLowerCase()] = r; 24250 return e; 24251} 24252const Ku = (t) => t ? (...e) => t(...e) : (...e) => fetch(...e), Yu = (t) => { 24253 if (typeof t != "object" || t === null) return !1; 24254 const e = Object.getPrototypeOf(t); 24255 return (e === null || e === Object.prototype || Object.getPrototypeOf(e) === null) && !(Symbol.toStringTag in t) && !(Symbol.iterator in t); 24256}, a5 = (t) => { 24257 if (Array.isArray(t)) return t.map((s) => a5(s)); 24258 if (typeof t == "function" || t !== Object(t)) return t; 24259 const e = {}; 24260 return Object.entries(t).forEach(([s, r]) => { 24261 const n = s.replace(/([-_][a-z])/gi, (o) => o.toUpperCase().replace(/[-_]/g, "")); 24262 e[n] = a5(r); 24263 }), e; 24264}, Xu = (t) => !t || typeof t != "string" || t.length === 0 || t.length > 100 || t.trim() !== t || t.includes("/") || t.includes("\\") ? !1 : /^[\w!.\*'() &$@=;:+,?-]+$/.test(t), s5 = (t) => t.split("/").map(encodeURIComponent).join("/"), n6 = (t) => { 24265 if (typeof t == "object" && t !== null) { 24266 const e = t; 24267 if (typeof e.msg == "string") return e.msg; 24268 if (typeof e.message == "string") return e.message; 24269 if (typeof e.error_description == "string") return e.error_description; 24270 if (typeof e.error == "string") return e.error; 24271 if (typeof e.error == "object" && e.error !== null) { 24272 const s = e.error; 24273 if (typeof s.message == "string") return s.message; 24274 } 24275 } 24276 return JSON.stringify(t); 24277}, Qu = async (t, e, s, r) => { 24278 if (t !== null && typeof t == "object" && "json" in t && typeof t.json == "function") { 24279 const n = t; 24280 let o = parseInt(String(n.status), 10); 24281 Number.isFinite(o) || (o = 500), n.json().then((L) => { 24282 const d = L?.statusCode || L?.code || o + ""; 24283 e(new t5(n6(L), o, d, r, L?.code)); 24284 }).catch(() => { 24285 const L = o + ""; 24286 e(new t5(n.statusText || `HTTP ${o} error`, o, L, r)); 24287 }); 24288 } else e(new _i(n6(t), t, r)); 24289}, eh = (t, e, s, r) => { 24290 const n = { 24291 method: t, 24292 headers: e?.headers || {} 24293 }; 24294 if (t === "GET" || t === "HEAD" || !r) return F(F({}, n), s); 24295 if (Yu(r)) { 24296 var o; 24297 const L = e?.headers || {}; 24298 let d; 24299 for (const [l, g] of Object.entries(L)) l.toLowerCase() === "content-type" && (d = g); 24300 n.headers = d3(L, "Content-Type", (o = d) !== null && o !== void 0 ? o : "application/json"), n.body = JSON.stringify(r); 24301 } else n.body = r; 24302 return e?.duplex && (n.duplex = e.duplex), F(F({}, n), s); 24303}; 24304async function Dt(t, e, s, r, n, o, L) { 24305 return new Promise((d, l) => { 24306 t(s, eh(e, r, n, o)).then((g) => { 24307 if (!g.ok) throw g; 24308 if (r?.noResolveJson) return g; 24309 if (L === "vectors") { 24310 const f = g.headers.get("content-type"); 24311 if (g.headers.get("content-length") === "0" || g.status === 204) return {}; 24312 if (!f || !f.includes("application/json")) return {}; 24313 } 24314 return g.json(); 24315 }).then((g) => d(g)).catch((g) => Qu(g, l, r, L)); 24316 }); 24317} 24318function bi(t = "storage") { 24319 return { 24320 get: async (e, s, r, n) => Dt(e, "GET", s, r, n, void 0, t), 24321 post: async (e, s, r, n, o) => Dt(e, "POST", s, n, o, r, t), 24322 put: async (e, s, r, n, o) => Dt(e, "PUT", s, n, o, r, t), 24323 head: async (e, s, r, n) => Dt(e, "HEAD", s, F(F({}, r), {}, { noResolveJson: !0 }), n, void 0, t), 24324 remove: async (e, s, r, n, o) => Dt(e, "DELETE", s, n, o, r, t) 24325 }; 24326} 24327const th = bi("storage"), { get: mt, post: We, put: g3, head: ah, remove: xt } = th, Ce = bi("vectors"); 24328var Ct = class { 24329 /** 24330 * Creates a new BaseApiClient instance 24331 * @param url - Base URL for API requests 24332 * @param headers - Default headers for API requests 24333 * @param fetch - Optional custom fetch implementation 24334 * @param namespace - Error namespace ('storage' or 'vectors') 24335 */ 24336 constructor(t, e = {}, s, r = "storage") { 24337 this.shouldThrowOnError = !1, this.url = t, this.headers = Ju(e), this.fetch = Ku(s), this.namespace = r; 24338 } 24339 /** 24340 * Enable throwing errors instead of returning them. 24341 * When enabled, errors are thrown instead of returned in { data, error } format. 24342 * 24343 * @returns this - For method chaining 24344 */ 24345 throwOnError() { 24346 return this.shouldThrowOnError = !0, this; 24347 } 24348 /** 24349 * Set an HTTP header for the request. 24350 * Creates a shallow copy of headers to avoid mutating shared state. 24351 * 24352 * @param name - Header name 24353 * @param value - Header value 24354 * @returns this - For method chaining 24355 */ 24356 setHeader(t, e) { 24357 return this.headers = d3(this.headers, t, e), this; 24358 } 24359 /** 24360 * Handles API operation with standardized error handling 24361 * Eliminates repetitive try-catch blocks across all API methods 24362 * 24363 * This wrapper: 24364 * 1. Executes the operation 24365 * 2. Returns { data, error: null } on success 24366 * 3. Returns { data: null, error } on failure (if shouldThrowOnError is false) 24367 * 4. Throws error on failure (if shouldThrowOnError is true) 24368 * 24369 * @typeParam T - The expected data type from the operation 24370 * @param operation - Async function that performs the API call 24371 * @returns Promise with { data, error } tuple 24372 * 24373 * @example Handling an operation 24374 * ```typescript 24375 * async listBuckets() { 24376 * return this.handleOperation(async () => { 24377 * return await get(this.fetch, `${this.url}/bucket`, { 24378 * headers: this.headers, 24379 * }) 24380 * }) 24381 * } 24382 * ``` 24383 */ 24384 async handleOperation(t) { 24385 var e = this; 24386 try { 24387 return { 24388 data: await t(), 24389 error: null 24390 }; 24391 } catch (s) { 24392 if (e.shouldThrowOnError) throw s; 24393 if (V3(s)) return { 24394 data: null, 24395 error: s 24396 }; 24397 throw s; 24398 } 24399 } 24400}; 24401let vi; 24402vi = Symbol.toStringTag; 24403var sh = class { 24404 constructor(t, e) { 24405 this.downloadFn = t, this.shouldThrowOnError = e, this[vi] = "StreamDownloadBuilder", this.promise = null; 24406 } 24407 then(t, e) { 24408 return this.getPromise().then(t, e); 24409 }
24410 catch(t) { 24411 return this.getPromise().catch(t); 24412 } 24413 finally(t) { 24414 return this.getPromise().finally(t); 24415 } 24416 getPromise() { 24417 return this.promise || (this.promise = this.execute()), this.promise; 24418 } 24419 async execute() { 24420 var t = this; 24421 try { 24422 return { 24423 data: (await t.downloadFn()).body, 24424 error: null 24425 }; 24426 } catch (e) { 24427 if (t.shouldThrowOnError) throw e; 24428 if (V3(e)) return { 24429 data: null, 24430 error: e 24431 }; 24432 throw e; 24433 } 24434 } 24435}; 24436let yi; 24437yi = Symbol.toStringTag; 24438var ih = class { 24439 constructor(t, e) { 24440 this.downloadFn = t, this.shouldThrowOnError = e, this[yi] = "BlobDownloadBuilder", this.promise = null; 24441 } 24442 asStream() { 24443 return new sh(this.downloadFn, this.shouldThrowOnError); 24444 } 24445 then(t, e) { 24446 return this.getPromise().then(t, e); 24447 } 24448 catch(t) { 24449 return this.getPromise().catch(t); 24450 } 24451 finally(t) { 24452 return this.getPromise().finally(t); 24453 } 24454 getPromise() { 24455 return this.promise || (this.promise = this.execute()), this.promise; 24456 } 24457 async execute() { 24458 var t = this; 24459 try { 24460 return { 24461 data: await (await t.downloadFn()).blob(), 24462 error: null 24463 }; 24464 } catch (e) { 24465 if (t.shouldThrowOnError) throw e; 24466 if (V3(e)) return { 24467 data: null, 24468 error: e 24469 }; 24470 throw e; 24471 } 24472 } 24473}; 24474const m4 = { 24475 limit: 100, 24476 offset: 0, 24477 sortBy: { 24478 column: "name", 24479 order: "asc" 24480 } 24481}, o6 = { 24482 cacheControl: "3600", 24483 contentType: "text/plain;charset=UTF-8", 24484 upsert: !1 24485}; 24486var rh = class extends Ct { 24487 constructor(t, e = {}, s, r) { 24488 super(t, e, r, "storage"), this.bucketId = s; 24489 } 24490 /** 24491 * Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one. 24492 * 24493 * @param method HTTP method. 24494 * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload. 24495 * @param fileBody The body of the file to be stored in the bucket. 24496 */ 24497 async uploadOrUpdate(t, e, s, r) { 24498 var n = this; 24499 return n.handleOperation(async () => { 24500 let o; 24501 const L = F(F({}, o6), r); 24502 let d = F(F({}, n.headers), t === "POST" && { "x-upsert": String(L.upsert) }); 24503 const l = L.metadata; 24504 if (typeof Blob < "u" && s instanceof Blob ? (o = new FormData(), o.append("cacheControl", L.cacheControl), l && o.append("metadata", n.encodeMetadata(l)), o.append("", s)) : typeof FormData < "u" && s instanceof FormData ? (o = s, o.has("cacheControl") || o.append("cacheControl", L.cacheControl), l && !o.has("metadata") && o.append("metadata", n.encodeMetadata(l))) : (o = s, d["cache-control"] = `max-age=${L.cacheControl}`, d["content-type"] = L.contentType, l && (d["x-metadata"] = n.toBase64(n.encodeMetadata(l))), (typeof ReadableStream < "u" && o instanceof ReadableStream || o && typeof o == "object" && "pipe" in o && typeof o.pipe == "function") && !L.duplex && (L.duplex = "half")), r?.headers) for (const [M, u] of Object.entries(r.headers)) d = d3(d, M, u); 24505 const g = n._removeEmptyFolders(e), f = n._getFinalPath(g), p = await (t == "PUT" ? g3 : We)(n.fetch, `${n.url}/object/${f}`, o, F({ headers: d }, L?.duplex ? { duplex: L.duplex } : {})); 24506 return { 24507 path: g, 24508 id: p.Id, 24509 fullPath: p.Key 24510 }; 24511 }); 24512 } 24513 /** 24514 * Uploads a file to an existing bucket. 24515 * 24516 * @category Storage 24517 * @subcategory File Buckets 24518 * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload. 24519 * @param fileBody The body of the file to be stored in the bucket. 24520 * @param fileOptions Optional file upload options including cacheControl, contentType, upsert, and metadata. 24521 * @returns Promise with response containing file path, id, and fullPath or error 24522 * 24523 * @example Upload file 24524 * ```js 24525 * const avatarFile = event.target.files[0] 24526 * const { data, error } = await supabase 24527 * .storage 24528 * .from('avatars') 24529 * .upload('public/avatar1.png', avatarFile, { 24530 * cacheControl: '3600', 24531 * upsert: false 24532 * }) 24533 * ``` 24534 * 24535 * Response: 24536 * ```json 24537 * { 24538 * "data": { 24539 * "path": "public/avatar1.png", 24540 * "fullPath": "avatars/public/avatar1.png" 24541 * }, 24542 * "error": null 24543 * } 24544 * ``` 24545 * 24546 * @example Upload file using `ArrayBuffer` from base64 file data 24547 * ```js 24548 * import { decode } from 'base64-arraybuffer' 24549 * 24550 * const { data, error } = await supabase 24551 * .storage 24552 * .from('avatars') 24553 * .upload('public/avatar1.png', decode('base64FileData'), { 24554 * contentType: 'image/png' 24555 * }) 24556 * ``` 24557 * 24558 * @example Handling errors 24559 * ```js 24560 * const { data, error } = await supabase 24561 * .storage 24562 * .from('avatars') 24563 * .upload('public/avatar1.png', avatarFile) 24564 * 24565 * if (error) { 24566 * // Log the full error so fields like `statusCode` and `error` (the 24567 * // Storage error name, e.g. "Duplicate") aren't hidden behind `error.message`. 24568 * console.error(error) 24569 * return 24570 * } 24571 * ``` 24572 * 24573 * @remarks 24574 * - RLS policy permissions required: 24575 * - `buckets` table permissions: none 24576 * - `objects` table permissions: only `insert` when you are uploading new files and `select`, `insert` and `update` when you are upserting files 24577 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24578 * - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Upload file using `ArrayBuffer` from base64 file data instead, see example below.
24579 */ 24580 async upload(t, e, s) { 24581 return this.uploadOrUpdate("POST", t, e, s); 24582 } 24583 /** 24584 * Upload a file with a token generated from `createSignedUploadUrl`. 24585 * 24586 * @category Storage 24587 * @subcategory File Buckets 24588 * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload. 24589 * @param token The token generated from `createSignedUploadUrl` 24590 * @param fileBody The body of the file to be stored in the bucket. 24591 * @param fileOptions HTTP headers (cacheControl, contentType, etc.). 24592 * **Note:** The `upsert` option has no effect here. To enable upsert behavior, 24593 * pass `{ upsert: true }` when calling `createSignedUploadUrl()` instead. 24594 * @returns Promise with response containing file path and fullPath or error 24595 * 24596 * @example Upload to a signed URL 24597 * ```js 24598 * const { data, error } = await supabase 24599 * .storage 24600 * .from('avatars') 24601 * .uploadToSignedUrl('folder/cat.jpg', 'token-from-createSignedUploadUrl', file) 24602 * ``` 24603 * 24604 * Response: 24605 * ```json 24606 * { 24607 * "data": { 24608 * "path": "folder/cat.jpg", 24609 * "fullPath": "avatars/folder/cat.jpg" 24610 * }, 24611 * "error": null 24612 * } 24613 * ``` 24614 * 24615 * @remarks 24616 * - RLS policy permissions required: 24617 * - `buckets` table permissions: none 24618 * - `objects` table permissions: none 24619 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24620 */ 24621 async uploadToSignedUrl(t, e, s, r) { 24622 var n = this; 24623 const o = n._removeEmptyFolders(t), L = n._getFinalPath(o), d = new URL(n.url + `/object/upload/sign/${L}`); 24624 return d.searchParams.set("token", e), n.handleOperation(async () => { 24625 let l; 24626 const g = F(F({}, o6), r); 24627 let f = F(F({}, n.headers), { "x-upsert": String(g.upsert) }); 24628 const p = g.metadata; 24629 if (typeof Blob < "u" && s instanceof Blob ? (l = new FormData(), l.append("cacheControl", g.cacheControl), p && l.append("metadata", n.encodeMetadata(p)), l.append("", s)) : typeof FormData < "u" && s instanceof FormData ? (l = s, l.has("cacheControl") || l.append("cacheControl", g.cacheControl), p && !l.has("metadata") && l.append("metadata", n.encodeMetadata(p))) : (l = s, f["cache-control"] = `max-age=${g.cac
24629heControl}`, f["content-type"] = g.contentType, p && (f["x-metadata"] = n.toBase64(n.encodeMetadata(p))), (typeof ReadableStream < "u" && l instanceof ReadableStream || l && typeof l == "object" && "pipe" in l && typeof l.pipe == "function") && !g.duplex && (g.duplex = "half")), r?.headers) for (const [M, u] of Object.entries(r.headers)) f = d3(f, M, u); 24630 return { 24631 path: o, 24632 fullPath: (await g3(n.fetch, d.toString(), l, F({ headers: f }, g?.duplex ? { duplex: g.duplex } : {}))).Key 24633 }; 24634 }); 24635 } 24636 /** 24637 * Creates a signed upload URL. 24638 * Signed upload URLs can be used to upload files to the bucket without further authentication. 24639 * They are valid for 2 hours. 24640 * 24641 * @category Storage 24642 * @subcategory File Buckets 24643 * @param path The file path, including the current file name. For example `folder/image.png`. 24644 * @param options.upsert If set to true, allows the file to be overwritten if it already exists. 24645 * @returns Promise with response containing signed upload URL, token, and path or error 24646 * 24647 * @example Create Signed Upload URL 24648 * ```js 24649 * const { data, error } = await supabase 24650 * .storage 24651 * .from('avatars') 24652 * .createSignedUploadUrl('folder/cat.jpg') 24653 * ``` 24654 * 24655 * Response: 24656 * ```json 24657 * { 24658 * "data": { 24659 * "signedUrl": "https://example.supabase.co/storage/v1/object/upload/sign/avatars/folder/cat.jpg?token=<TOKEN>", 24660 * "path": "folder/cat.jpg", 24661 * "token": "<TOKEN>" 24662 * }, 24663 * "error": null 24664 * } 24665 * ``` 24666 * 24667 * @remarks 24668 * - RLS policy permissions required: 24669 * - `buckets` table permissions: none 24670 * - `objects` table permissions: `insert` 24671 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24672 */ 24673 async createSignedUploadUrl(t, e) { 24674 var s = this; 24675 return s.handleOperation(async () => { 24676 let r = s._getFinalPath(t); 24677 const n = F({}, s.headers); 24678 e?.upsert && (n["x-upsert"] = "true"); 24679 const o = await We(s.fetch, `${s.url}/object/upload/sign/${r}`, {}, { headers: n }), L = new URL(s.url + o.url), d = L.searchParams.get("token"); 24680 if (!d) throw new O3("No token returned by API"); 24681 return { 24682 signedUrl: L.toString(), 24683 path: t, 24684 token: d 24685 }; 24686 }); 24687 } 24688 /** 24689 * Replaces an existing file at the specified path with a new one. 24690 * 24691 * @category Storage 24692 * @subcategory File Buckets 24693 * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update. 24694 * @param fileBody The body of the file to be stored in the bucket. 24695 * @param fileOptions Optional file upload options including cacheControl, contentType, and metadata. 24696 * **Note:** The `upsert` option has no effect here. `update()` always replaces the 24697 * file at the given path, so the `x-upsert` header is not sent. To control upsert 24698 * behavior, use `upload()` instead. 24699 * @returns Promise with response containing file path, id, and fullPath or error 24700 * 24701 * @example Update file 24702 * ```js 24703 * const avatarFile = event.target.files[0] 24704 * const { data, error } = await supabase 24705 * .storage 24706 * .from('avatars') 24707 * .update('public/avatar1.png', avatarFile, { 24708 * cacheControl: '3600' 24709 * }) 24710 * ``` 24711 * 24712 * Response: 24713 * ```json 24714 * { 24715 * "data": { 24716 * "path": "public/avatar1.png", 24717 * "fullPath": "avatars/public/avatar1.png" 24718 * }, 24719 * "error": null 24720 * } 24721 * ``` 24722 * 24723 * @example Update file using `ArrayBuffer` from base64 file data 24724 * ```js 24725 * import {decode} from 'base64-arraybuffer' 24726 * 24727 * const { data, error } = await supabase 24728 * .storage 24729 * .from('avatars') 24730 * .update('public/avatar1.png', decode('base64FileData'), { 24731 * contentType: 'image/png' 24732 * }) 24733 * ``` 24734 * 24735 * @remarks 24736 * - RLS policy permissions required: 24737 * - `buckets` table permissions: none 24738 * - `objects` table permissions: `update` and `select` 24739 * - `update()` always replaces the file at the given path regardless of the `upsert` option. 24740 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24741 * - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Update file using `ArrayBuffer` from base64 file data instead, see example below.
24742 */ 24743 async update(t, e, s) { 24744 return this.uploadOrUpdate("PUT", t, e, s); 24745 } 24746 /** 24747 * Moves an existing file to a new path in the same bucket. 24748 * 24749 * @category Storage 24750 * @subcategory File Buckets 24751 * @param fromPath The original file path, including the current file name. For example `folder/image.png`. 24752 * @param toPath The new file path, including the new file name. For example `folder/image-new.png`. 24753 * @param options The destination options. 24754 * @param options.sourceVersionId The version id of the source object to move. 24755 * @returns Promise with response containing success message or error 24756 * 24757 * @example Move file 24758 * ```js 24759 * const { data, error } = await supabase 24760 * .storage 24761 * .from('avatars') 24762 * .move('public/avatar1.png', 'private/avatar2.png') 24763 * ``` 24764 * 24765 * Response: 24766 * ```json 24767 * { 24768 * "data": { 24769 * "message": "Successfully moved" 24770 * }, 24771 * "error": null 24772 * } 24773 * ``` 24774 * 24775 * @remarks 24776 * - RLS policy permissions required: 24777 * - `buckets` table permissions: none 24778 * - `objects` table permissions: `update` and `select` 24779 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24780 */ 24781 async move(t, e, s) { 24782 var r = this; 24783 return r.handleOperation(async () => await We(r.fetch, `${r.url}/object/move`, { 24784 bucketId: r.bucketId, 24785 sourceKey: t, 24786 destinationKey: e, 24787 destinationBucket: s?.destinationBucket, 24788 sourceVersionId: s?.sourceVersionId 24789 }, { headers: r.headers })); 24790 } 24791 /** 24792 * Copies an existing file to a new path in the same bucket. 24793 * 24794 * @category Storage 24795 * @subcategory File Buckets 24796 * @param fromPath The original file path, including the current file name. For example `folder/image.png`. 24797 * @param toPath The new file path, including the new file name. For example `folder/image-copy.png`. 24798 * @param options The destination options. 24799 * @param options.sourceVersionId The version id of the source object to copy. 24800 * @returns Promise with response containing copied file path or error 24801 * 24802 * @example Copy file 24803 * ```js 24804 * const { data, error } = await supabase 24805 * .storage 24806 * .from('avatars') 24807 * .copy('public/avatar1.png', 'private/avatar2.png') 24808 * ``` 24809 * 24810 * Response: 24811 * ```json 24812 * { 24813 * "data": { 24814 * "path": "avatars/private/avatar2.png" 24815 * }, 24816 * "error": null 24817 * } 24818 * ``` 24819 * 24820 * @remarks 24821 * - RLS policy permissions required: 24822 * - `buckets` table permissions: none 24823 * - `objects` table permissions: `insert` and `select` 24824 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24825 */ 24826 async copy(t, e, s) { 24827 var r = this; 24828 return r.handleOperation(async () => ({ path: (await We(r.fetch, `${r.url}/object/copy`, { 24829 bucketId: r.bucketId, 24830 sourceKey: t, 24831 destinationKey: e, 24832 destinationBucket: s?.destinationBucket, 24833 sourceVersionId: s?.sourceVersionId 24834 }, { headers: r.headers })).Key })); 24835 } 24836 /** 24837 * Creates a signed URL. Use a signed URL to share a file for a fixed amount of time. 24838 * 24839 * @category Storage 24840 * @subcategory File Buckets 24841 * @param path The file path, including the current file name. For example `folder/image.png`. 24842 * @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute. 24843 * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename. 24844 * @param options.transform Transform the asset before serving it to the client. 24845 * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache. 24846 * @param options.versionId Create a signed URL for a specific object version rather than the current one. 24847 * @returns Promise with response containing signed URL or error 24848 * 24849 * @example Create Signed URL 24850 * ```js 24851 * const { data, error } = await supabase 24852 * .storage 24853 * .from('avatars') 24854 * .createSignedUrl('folder/avatar1.png', 60) 24855 * ``` 24856 * 24857 * Response: 24858 * ```json 24859 * { 24860 * "data": { 24861 * "signedUrl": "https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>" 24862 * }, 24863 * "error": null 24864 * } 24865 * ``` 24866 * 24867 * @example Create a signed URL for an asset with transformations 24868 * ```js 24869 * const { data } = await supabase 24870 * .storage 24871 * .from('avatars') 24872 * .createSignedUrl('folder/avatar1.png', 60, { 24873 * transform: { 24874 * width: 100, 24875 * height: 100, 24876 * } 24877 * }) 24878 * ``` 24879 * 24880 * @example Create a signed URL which triggers the download of the asset 24881 * ```js 24882 * const { data } = await supabase 24883 * .storage 24884 * .from('avatars') 24885 * .createSignedUrl('folder/avatar1.png', 60, { 24886 * download: true, 24887 * }) 24888 * ``` 24889 * 24890 * @remarks 24891 * - RLS policy permissions required: 24892 * - `buckets` table permissions: none 24893 * - `objects` table permissions: `select` 24894 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24895 */ 24896 async createSignedUrl(t, e, s) { 24897 var r = this; 24898 return r.handleOperation(async () => { 24899 let n = r._getFinalPath(t); 24900 const o = typeof s?.transform == "object" && s.transform !== null && Object.keys(s.transform).length > 0; 24901 let L = await We(r.fetch, `${r.url}/object/sign/${n}`, F(F({ expiresIn: e }, o ? { transform: s.transform } : {}), s?.versionId != null ? { versionId: s.versionId } : {}), { headers: r.headers }); 24902 const d = new URLSearchParams(); 24903 s?.download && d.set("download", s.download === !0 ? "" : s.download), s?.cacheNonce != null && d.set("cacheNonce", String(s.cacheNonce)); 24904 const l = d.toString(); 24905 return { signedUrl: encodeURI(`${r.url}${L.signedURL}${l ? `&${l}` : ""}`) }; 24906 }); 24907 } 24908 /** 24909 * Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time. 24910 * 24911 * @category Storage 24912 * @subcategory File Buckets 24913 * @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`. 24914 * @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute. 24915 * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename. 24916 * @param options.cacheNonce Append a cache nonce parameter to the URL to invali
24916date the cache. 24917 * @returns Promise with response containing array of objects with signedUrl, path, and error or error 24918 * 24919 * @example Create Signed URLs 24920 * ```js 24921 * const { data, error } = await supabase 24922 * .storage 24923 * .from('avatars') 24924 * .createSignedUrls(['folder/avatar1.png', 'folder/avatar2.png'], 60) 24925 * ``` 24926 * 24927 * Response: 24928 * ```json 24929 * { 24930 * "data": [ 24931 * { 24932 * "error": null, 24933 * "path": "folder/avatar1.png", 24934 * "signedURL": "/object/sign/avatars/folder/avatar1.png?token=<TOKEN>", 24935 * "signedUrl": "https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>" 24936 * }, 24937 * { 24938 * "error": null, 24939 * "path": "folder/avatar2.png", 24940 * "signedURL": "/object/sign/avatars/folder/avatar2.png?token=<TOKEN>", 24941 * "signedUrl": "https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar2.png?token=<TOKEN>" 24942 * } 24943 * ], 24944 * "error": null 24945 * } 24946 * ``` 24947 * 24948 * @remarks 24949 * - RLS policy permissions required: 24950 * - `buckets` table permissions: none 24951 * - `objects` table permissions: `select` 24952 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 24953 */ 24954 async createSignedUrls(t, e, s) { 24955 var r = this; 24956 return r.handleOperation(async () => { 24957 const n = await We(r.fetch, `${r.url}/object/sign/${r.bucketId}`, { 24958 expiresIn: e, 24959 paths: t 24960 }, { headers: r.headers }), o = new URLSearchParams(); 24961 s?.download && o.set("download", s.download === !0 ? "" : s.download), s?.cacheNonce != null && o.set("cacheNonce", String(s.cacheNonce)); 24962 const L = o.toString(); 24963 return n.map((d) => F(F({}, d), {}, { signedUrl: d.signedURL ? encodeURI(`${r.url}${d.signedURL}${L ? `&${L}` : ""}`) : null })); 24964 }); 24965 } 24966 /** 24967 * Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead. 24968 * 24969 * @category Storage 24970 * @subcategory File Buckets 24971 * @param path The full path and file name of the file to be downloaded. For example `folder/image.png`. 24972 * @param options Optional settings: `transform` to transform the asset before serving it to the client, `cacheNonce` to append a cache nonce parameter to the URL to invalidate the cache, and `versionId` to download a specific object version. 24973 * @param parameters Additional fetch parameters like signal for cancellation. Supports standard fetch options including cache control. 24974 * @returns BlobDownloadBuilder instance for downloading the file 24975 * 24976 * @example Download file 24977 * ```js 24978 * const { data, error } = await supabase 24979 * .storage 24980 * .from('avatars') 24981 * .download('folder/avatar1.png') 24982 * ``` 24983 * 24984 * Response: 24985 * ```json 24986 * { 24987 * "data": <BLOB>, 24988 * "error": null 24989 * } 24990 * ``` 24991 * 24992 * @example Download file with transformations 24993 * ```js 24994 * const { data, error } = await supabase 24995 * .storage 24996 * .from('avatars') 24997 * .download('folder/avatar1.png', { 24998 * transform: { 24999 * width: 100, 25000 * height: 100, 25001 * quality: 80 25002 * } 25003 * }) 25004 * ``` 25005 * 25006 * @example Download with cache control (useful in Edge Functions) 25007 * ```js 25008 * const { data, error } = await supabase 25009 * .storage 25010 * .from('avatars') 25011 * .download('folder/avatar1.png', {}, { cache: 'no-store' }) 25012 * ``` 25013 * 25014 * @example Download with abort signal 25015 * ```js 25016 * const controller = new AbortController() 25017 * setTimeout(() => controller.abort(), 5000) 25018 * 25019 * const { data, error } = await supabase 25020 * .storage 25021 * .from('avatars') 25022 * .download('folder/avatar1.png', {}, { signal: controller.signal }) 25023 * ``` 25024 * 25025 * @remarks 25026 * - RLS policy permissions required: 25027 * - `buckets` table permissions: none 25028 * - `objects` table permissions: `select` 25029 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25030 */ 25031 download(t, e, s) { 25032 const r = typeof e?.transform == "object" && e.transform !== null && Object.keys(e.transform).length > 0 ? "render/image/authenticated" : "object", n = new URLSearchParams(); 25033 e?.transform && this.applyTransformOptsToQuery(n, e.transform), e?.cacheNonce != null && n.set("cacheNonce", String(e.cacheNonce)), e?.ver
25033sionId != null && n.set("versionId", String(e.versionId)); 25034 const o = n.toString(), L = this._getFinalPath(t), d = () => mt(this.fetch, `${this.url}/${r}/${L}${o ? `?${o}` : ""}`, { 25035 headers: this.headers, 25036 noResolveJson: !0 25037 }, s); 25038 return new ih(d, this.shouldThrowOnError); 25039 } 25040 /** 25041 * Retrieves the details of an existing file. 25042 * 25043 * Returns detailed file metadata including size, content type, and timestamps. 25044 * Note: The API returns `last_modified` field, not `updated_at`. 25045 * 25046 * @category Storage 25047 * @subcategory File Buckets 25048 * @param path The file path, including the file name. For example `folder/image.png`. 25049 * @param options Optional settings, including `versionId` to retrieve a specific object version. 25050 * @returns Promise with response containing file metadata or error 25051 * 25052 * @example Get file info 25053 * ```js 25054 * const { data, error } = await supabase 25055 * .storage 25056 * .from('avatars') 25057 * .info('folder/avatar1.png') 25058 * 25059 * if (data) { 25060 * console.log('Last modified:', data.lastModified) 25061 * console.log('Size:', data.size) 25062 * } 25063 * ``` 25064 */ 25065 async info(t, e) { 25066 var s = this; 25067 const r = s._getFinalPath(t), n = new URLSearchParams(); 25068 e?.versionId != null && n.set("versionId", String(e.versionId)); 25069 const o = n.toString(); 25070 return s.handleOperation(async () => a5(await mt(s.fetch, `${s.url}/object/info/${r}${o ? `?${o}` : ""}`, { headers: s.headers }))); 25071 } 25072 /** 25073 * Checks the existence of a file. 25074 * 25075 * @category Storage 25076 * @subcategory File Buckets 25077 * @param path The file path, including the file name. For example `folder/image.png`. 25078 * @returns Promise with response containing boolean indicating file existence or error 25079 * 25080 * @example Check file existence 25081 * ```js 25082 * const { data, error } = await supabase 25083 * .storage 25084 * .from('avatars') 25085 * .exists('folder/avatar1.png') 25086 * ``` 25087 */ 25088 async exists(t) { 25089 var e = this; 25090 const s = e._getFinalPath(t); 25091 try { 25092 return await ah(e.fetch, `${e.url}/object/${s}`, { headers: e.headers }), { 25093 data: !0, 25094 error: null 25095 }; 25096 } catch (n) { 25097 if (e.shouldThrowOnError) throw n; 25098 if (V3(n)) { 25099 var r; 25100 const o = n instanceof t5 ? n.status : n instanceof _i ? (r = n.originalError) === null || r === void 0 ? void 0 : r.status : void 0; 25101 if (o !== void 0 && [400, 404].includes(o)) return { 25102 data: !1, 25103 error: n 25104 }; 25105 } 25106 throw n; 25107 } 25108 } 25109 /** 25110 * A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset. 25111 * This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset. 25112 * 25113 * @category Storage 25114 * @subcategory File Buckets 25115 * @param path The path and name of the file to generate the public URL for. For example `folder/image.png`. 25116 * @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename. 25117 * @param options.transform Transform the asset before serving it to the client. 25118 * @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache. 25119 * @param options.versionId Return the URL for a specific object version rather than the current one. 25120 * @returns Object with public URL 25121 * 25122 * @example Returns the URL for an asset in a public bucket 25123 * ```js 25124 * const { data } = supabase 25125 * .storage 25126 * .from('public-bucket') 25127 * .getPublicUrl('folder/avatar1.png') 25128 * ``` 25129 * 25130 * Response: 25131 * ```json 25132 * { 25133 * "data": { 25134 * "publicUrl": "https://example.supabase.co/storage/v1/object/public/public-bucket/folder/avatar1.png" 25135 * } 25136 * } 25137 * ``` 25138 * 25139 * @example Returns the URL for an asset in a public bucket with transformations 25140 * ```js 25141 * const { data } = supabase 25142 * .storage 25143 * .from('public-bucket') 25144 * .getPublicUrl('folder/avatar1.png', { 25145 * transform: { 25146 * width: 100, 25147 * height: 100, 25148 * } 25149 * }) 25150 * ``` 25151 * 25152 * @example Returns the URL which triggers the download of an asset in a public bucket 25153 * ```js 25154 * const { data } = supabase 25155 * .storage 25156 * .from('public-bucket') 25157 * .getPublicUrl('folder/avatar1.png', { 25158 * download: true, 25159 * }) 25160 * ``` 25161 * 25162 * @remarks 25163 * - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [supabase.com/dashboard](https://supabase.com/dashboard), clicking the overflow menu on a bucket and choosing "Make public" 25164 * - RLS policy permissions required: 25165 * - `buckets` table permissions: none 25166 * - `objects` table permissions: none 25167 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25168 */ 25169 getPublicUrl(t, e) { 25170 const s = this._getFinalPath(t), r = new URLSearchParams(); 25171 e?.download && r.set("download", e.download === !0 ? "" : e.download), e?.transform && this.applyTransformOptsToQuery(r, e.transform), e?.cacheNonce != null && r.set("cacheNonce", String(e.cacheNonce)), e?.ver
25171sionId != null && r.set("versionId", String(e.versionId)); 25172 const n = r.toString(), o = typeof e?.transform == "object" && e.transform !== null && Object.keys(e.transform).length > 0 ? "render/image" : "object"; 25173 return { data: { publicUrl: encodeURI(`${this.url}/${o}/public/${s}`) + (n ? `?${n}` : "") } }; 25174 } 25175 /** 25176 * Deletes files within the same bucket 25177 * 25178 * Returns an array of FileObject entries for the deleted files. Note that deprecated 25179 * fields like `bucket_id` may or may not be present in the response - do not rely on them. 25180 * 25181 * @category Storage 25182 * @subcategory File Buckets 25183 * @param paths An array of files to delete. Each entry is either a path (deletes whichever 25184 * version is currently at that path, e.g. `'folder/image.png'`), or `{ path, versionId }` to 25185 * delete an exact version current or archived (e.g. `{ path: 'folder/image.png', versionId: '...' }`). 25186 * @returns Promise with response containing array of deleted file objects or error 25187 * 25188 * @example Delete file 25189 * ```js 25190 * const { data, error } = await supabase 25191 * .storage 25192 * .from('avatars') 25193 * .remove(['folder/avatar1.png']) 25194 * ``` 25195 * 25196 * Response: 25197 * ```json 25198 * { 25199 * "data": [], 25200 * "error": null 25201 * } 25202 * ``` 25203 * 25204 * @example Delete a specific object version 25205 * ```js 25206 * const { data, error } = await supabase 25207 * .storage 25208 * .from('avatars') 25209 * .remove([{ path: 'folder/avatar1.png', versionId: 'noncurrent-version-id' }]) 25210 * ``` 25211 * 25212 * @remarks 25213 * - RLS policy permissions required: 25214 * - `buckets` table permissions: none 25215 * - `objects` table permissions: `delete` and `select` 25216 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25217 */ 25218 async remove(t) { 25219 var e = this; 25220 return e.handleOperation(async () => await xt(e.fetch, `${e.url}/object/${e.bucketId}`, { prefixes: t }, { headers: e.headers })); 25221 } 25222 /** 25223 * Purges the CDN cache for a single object in this bucket. 25224 * 25225 * Maps to `DELETE /cdn/{bucket}/{path}` on the Storage API. The server 25226 * issues a CDN invalidation for the object and returns `{ message: 'success' }`. 25227 * 25228 * **Requires the `service_role` key.** The underlying endpoint enforces 25229 * `service_role` JWT â calls made with the anon key or a user JWT will be 25230 * rejected by the server. 25231 * 25232 * **Hosted CDN feature.** On self-hosted Supabase, the Storage service must 25233 * have `CDN_PURGE_ENDPOINT_URL` configured and the `purgeCache` tenant 25234 * feature enabled, otherwise the server returns an error. 25235 * 25236 * Operates on a single object path. There is no wildcard or recursion: pass 25237 * the exact path of the object you want invalidated. 25238 * 25239 * @category Storage 25240 * @subcategory File Buckets 25241 * @param path The path (relative to the bucket) of the object to purge, e.g. `folder/avatar.png`. 25242 * @param options Optional purge cache options. 25243 * @param options.transformations If true, purges only transformations (resized/formatted variants), leaving the original cached file intact. 25244 * @param parameters Optional fetch parameters such as an `AbortController` signal. 25245 * @returns Promise with `{ data: { message }, error: null }` on success or `{ data: null, error }` on failure. 25246 * 25247 * @example Purge a single cached object 25248 * ```js 25249 * const { data, error } = await supabase 25250 * .storage 25251 * .from('avatars') 25252 * .purgeCache('folder/avatar1.png') 25253 * ``` 25254 * 25255 * @example Purge only transformations for a single object 25256 * ```js 25257 * const { data, error } = await supabase 25258 * .storage 25259 * .from('avatars') 25260 * .purgeCache('folder/avatar1.png', { transformations: true }) 25261 * ``` 25262 */ 25263 async purgeCache(t, e, s) { 25264 var r = this; 25265 return r.handleOperation(async () => { 25266 const n = s5(r._getFinalPath(t)), o = new URLSearchParams(); 25267 e?.transformations && o.set("transformations", "true"); 25268 const L = o.toString(); 25269 return await xt(r.fetch, `${r.url}/cdn/${n}${L ? `?${L}` : ""}`, {}, { headers: r.headers }, s); 25270 }); 25271 } 25272 /** 25273 * Get file metadata 25274 * @param id the file id to retrieve metadata 25275 */ 25276 /** 25277 * Update file metadata 25278 * @param id the file id to update metadata 25279 * @param meta the new file metadata 25280 */ 25281 /** 25282 * Lists all the files and folders within a path of the bucket. 25283 * 25284 * **Important:** For folder entries, fields like `id`, `updated_at`, `created_at`, 25285 * `last_accessed_at`, and `metadata` will be `null`. Only files have these fields populated. 25286 * Additionally, deprecated fields like `bucket_id`, `owner`, and `buckets` are NOT returned 25287 * by this method. 25288 * 25289 * @category Storage 25290 * @subcategory File Buckets 25291 * @param path The folder path. 25292 * @param options Search options including limit (defaults to 100), offset, sortBy, and search 25293 * @param parameters Optional fetch parameters including signal for cancellation 25294 * @returns Promise with response containing array of files/folders or error 25295 * 25296 * @example List files in a bucket 25297 * ```js 25298 * const { data, error } = await supabase 25299 * .storage 25300 * .from('avatars') 25301 * .list('folder', { 25302 * limit: 100, 25303 * offset: 0, 25304 * sortBy: { column: 'name', order: 'asc' }, 25305 * }) 25306 * 25307 * // Handle files vs folders 25308 * data?.forEach(item => { 25309 * if (item.id !== null) { 25310 * // It's a file 25311 * console.log('File:', item.name, 'Size:', item.metadata?.size) 25312 * } else { 25313 * // It's a folder 25314 * console.log('Folder:', item.name) 25315 * } 25316 * }) 25317 * ``` 25318 * 25319 * Response: 25320 * ```json 25321 * { 25322 * "data": [ 25323 * { 25324 * "name": "avatar1.png", 25325 * "id": "e668cf7f-821b-4a2f-9dce-7dfa5dd1cfd2", 25326 * "updated_at": "2024-05-22T23:06:05.580Z", 25327 * "created_at": "2024-05-22T23:04:34.443Z", 25328 * "last_accessed_at": "2024-05-22T23:04:34.443Z", 25329 * "metadata": { 25330 * "eTag": "\"c5e8c553235d9af30ef4f6e280790b92\"", 25331 * "size": 32175, 25332 * "mimetype": "image/png", 25333 * "cacheControl": "max-age=3600", 25334 * "lastModified": "2024-05-22T23:06:05.574Z", 25335 * "contentLength": 32175, 25336 * "httpStatusCode": 200 25337 * } 25338 * } 25339 * ], 25340 * "error": null 25341 * } 25342 * ``` 25343 *
25344 * @example Search files in a bucket 25345 * ```js 25346 * const { data, error } = await supabase 25347 * .storage 25348 * .from('avatars') 25349 * .list('folder', { 25350 * limit: 100, 25351 * offset: 0, 25352 * sortBy: { column: 'name', order: 'asc' }, 25353 * search: 'jon' 25354 * }) 25355 * ``` 25356 * 25357 * @remarks 25358 * - RLS policy permissions required: 25359 * - `buckets` table permissions: none 25360 * - `objects` table permissions: `select` 25361 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25362 */ 25363 async list(t, e, s) { 25364 var r = this; 25365 return r.handleOperation(async () => { 25366 const n = e?.sortBy ? F(F({}, m4.sortBy), e.sortBy) : m4.sortBy, o = F(F(F({}, m4), e), {}, { 25367 sortBy: n, 25368 prefix: t || "" 25369 }); 25370 return await We(r.fetch, `${r.url}/object/list/${r.bucketId}`, o, { headers: r.headers }, s); 25371 }); 25372 } 25373 /** 25374 * Lists all the files and folders within a bucket using the V2 API with pagination support. 25375 * 25376 * **Important:** Folder entries in the `folders` array only contain `name` and optionally `key` â 25377 * they have no `id`, timestamps, or `metadata` fields. Full file metadata is only available 25378 * on entries in the `objects` array. 25379 * 25380 * @experimental this method signature might change in the future 25381 * 25382 * @category Storage 25383 * @subcategory File Buckets 25384 * @param options Search options including prefix, cursor for pagination, limit, with_delimiter 25385 * @param parameters Optional fetch parameters including signal for cancellation 25386 * @returns Promise with response containing folders/objects arrays with pagination info or error 25387 * 25388 * @example List files with pagination 25389 * ```js 25390 * const { data, error } = await supabase 25391 * .storage 25392 * .from('avatars') 25393 * .listV2({ 25394 * prefix: 'folder/', 25395 * limit: 100, 25396 * }) 25397 * 25398 * // Handle pagination 25399 * if (data?.hasNext) { 25400 * const nextPage = await supabase 25401 * .storage 25402 * .from('avatars') 25403 * .listV2({ 25404 * prefix: 'folder/', 25405 * cursor: data.nextCursor, 25406 * }) 25407 * } 25408 * 25409 * // Handle files vs folders 25410 * data?.objects.forEach(file => { 25411 * if (file.id !== null) { 25412 * console.log('File:', file.name, 'Size:', file.metadata?.size) 25413 * } 25414 * }) 25415 * data?.folders.forEach(folder => { 25416 * console.log('Folder:', folder.name) 25417 * }) 25418 * ``` 25419 */ 25420 async listV2(t, e) { 25421 var s = this; 25422 return s.handleOperation(async () => { 25423 const r = F({}, t); 25424 return await We(s.fetch, `${s.url}/object/list-v2/${s.bucketId}`, r, { headers: s.headers }, e); 25425 }); 25426 } 25427 encodeMetadata(t) { 25428 return JSON.stringify(t); 25429 } 25430 toBase64(t) { 25431 return typeof Buffer < "u" ? Buffer.from(t).toString("base64") : btoa(t); 25432 } 25433 _getFinalPath(t) { 25434 return `${this.bucketId}/${t.replace(/^\/+/, "")}`; 25435 } 25436 _removeEmptyFolders(t) { 25437 return t.replace(/^\/|\/$/g, "").replace(/\/+/g, "/"); 25438 } 25439 /** Modifies the `query`, appending values the from `transform` */ 25440 applyTransformOptsToQuery(t, e) { 25441 return e.width && t.set("width", e.width.toString()), e.height && t.set("height", e.height.toString()), e.resize && t.set("resize", e.resize), e.format && t.set("format", e.format), e.quality && t.set("quality", e.quality.toString()), t; 25442 } 25443}; 25444const nh = "2.117.2", y2 = { "X-Client-Info": `storage-js/${nh}` }; 25445var oh = class extends Ct { 25446 constructor(t, e = {}, s, r) { 25447 const n = new URL(t); 25448 r?.useNewHostname && /supabase\.(co|in|red)$/.test(n.hostname) && !n.hostname.includes("storage.supabase.") && (n.hostname = n.hostname.replace("supabase.", "storage.supabase.")); 25449 const o = n.href.replace(/\/$/, ""), L = F(F({}, y2), e); 25450 super(o, L, s, "storage"); 25451 } 25452 /** 25453 * Retrieves the details of all Storage buckets within an existing project. 25454 * 25455 * @category Storage 25456 * @subcategory File Buckets 25457 * @param options Query parameters for listing buckets 25458 * @param options.limit Maximum number of buckets to return 25459 * @param options.offset Number of buckets to skip 25460 * @param options.sortColumn Column to sort by ('id', 'name', 'created_at', 'updated_at') 25461 * @param options.sortOrder Sort order ('asc' or 'desc') 25462 * @param options.search Search term to filter bucket names 25463 * @returns Promise with response containing array of buckets or error 25464 * 25465 * @example List buckets 25466 * ```js 25467 * const { data, error } = await supabase 25468 * .storage 25469 * .listBuckets() 25470 * ``` 25471 * 25472 * @example List buckets with options 25473 * ```js 25474 * const { data, error } = await supabase 25475 * .storage 25476 * .listBuckets({ 25477 * limit: 10, 25478 * offset: 0, 25479 * sortColumn: 'created_at', 25480 * sortOrder: 'desc', 25481 * search: 'prod' 25482 * }) 25483 * ``` 25484 * 25485 * @remarks 25486 * - RLS policy permissions required: 25487 * - `buckets` table permissions: `select` 25488 * - `objects` table permissions: none 25489 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25490 */ 25491 async listBuckets(t) { 25492 var e = this; 25493 return e.handleOperation(async () => { 25494 const s = e.listBucketOptionsToQueryString(t); 25495 return await mt(e.fetch, `${e.url}/bucket${s}`, { headers: e.headers }); 25496 }); 25497 } 25498 /** 25499 * Retrieves the details of an existing Storage bucket. 25500 * 25501 * @category Storage 25502 * @subcategory File Buckets 25503 * @param id The unique identifier of the bucket you would like to retrieve. 25504 * @returns Promise with response containing bucket details or error 25505 * 25506 * @example Get bucket 25507 * ```js 25508 * const { data, error } = await supabase 25509 * .storage 25510 * .getBucket('avatars') 25511 * ``` 25512 * 25513 * Response: 25514 * ```json 25515 * { 25516 * "data": { 25517 * "id": "avatars", 25518 * "name": "avatars", 25519 * "owner": "", 25520 * "public": false, 25521 * "file_size_limit": 1024, 25522 * "allowed_mime_types": [ 25523 * "image/png" 25524 * ], 25525 * "created_at": "2024-05-22T22:26:05.100Z", 25526 * "updated_at": "2024-05-22T22:26:05.100Z" 25527 * }, 25528 * "error": null 25529 * } 25530 * ``` 25531 * 25532 * @remarks 25533 * - RLS policy permissions required: 25534 * - `buckets` table permissions: `select` 25535 * - `objects` table permissions: none 25536 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25537 */ 25538 async getBucket(t) { 25539 var e = this; 25540 return e.handleOperation(async () => await mt(e.fetch, `${e.url}/bucket/${t}`, { headers: e.headers })); 25541 } 25542 /** 25543 * Creates a new Storage bucket 25544 * 25545 * @category Storage 25546 * @subcategory File Buckets 25547 * @param id A unique identifier for the bucket you are creating. 25548 * @param options.public The visibility of the bucket. Public bu
25548ckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private. 25549 * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket. 25550 * The global file size limit takes precedence over this value. 25551 * The default value is null, which doesn't set a per bucket file size limit. 25552 * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload. 25553 * The default value is null, which allows files with all mime types to be uploaded. 25554 * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png. 25555 * @param options.type (private-beta) specifies the bucket type. see `BucketType` for more details. 25556 * - default bucket type is `STANDARD` 25557 * @param options.versioningStatus the bucket's initial object versioning status. 25558 * The default value is `DISABLED` 25559 * @returns Promise with response containing newly created bucket name or error 25560 * 25561 * @example Create bucket 25562 * ```js 25563 * const { data, error } = await supabase 25564 * .storage 25565 * .createBucket('avatars', { 25566 * public: false, 25567 * allowedMimeTypes: ['image/png'], 25568 * fileSizeLimit: 1024 25569 * }) 25570 * ``` 25571 * 25572 * Response: 25573 * ```json 25574 * { 25575 * "data": { 25576 * "name": "avatars" 25577 * }, 25578 * "error": null 25579 * } 25580 * ``` 25581 * 25582 * @remarks 25583 * - RLS policy permissions required: 25584 * - `buckets` table permissions: `insert` 25585 * - `objects` table permissions: none 25586 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25587 */ 25588 async createBucket(t, e = { public: !1 }) { 25589 var s = this; 25590 return s.handleOperation(async () => await We(s.fetch, `${s.url}/bucket`, { 25591 id: t, 25592 name: t, 25593 type: e.type, 25594 public: e.public, 25595 file_size_limit: e.fileSizeLimit, 25596 allowed_mime_types: e.allowedMimeTypes, 25597 versioning_status: e.versioningStatus 25598 }, { headers: s.headers })); 25599 } 25600 /** 25601 * Updates a Storage bucket 25602 * 25603 * @category Storage 25604 * @subcategory File Buckets 25605 * @param id A unique identifier for the bucket you are updating. 25606 * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. 25607 * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket. 25608 * The global file size limit takes precedence over this value. 25609 * The default value is null, which doesn't set a per bucket file size limit. 25610 * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload. 25611 * The default value is null, which allows files with all mime types to be uploaded. 25612 * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png. 25613 * @param options.versioningStatus the bucket's new object versioning status. `DISABLED` is not 25614 * valid here, there's no transition back to it once versioning has been touched. 25615 * @returns Promise with response containing success message or error 25616 * 25617 * @example Update bucket 25618 * ```js 25619 * const { data, error } = await supabase 25620 * .storage 25621 * .updateBucket('avatars', { 25622 * public: false, 25623 * allowedMimeTypes: ['image/png'], 25624 * fileSizeLimit: 1024 25625 * }) 25626 * ``` 25627 * 25628 * Response: 25629 * ```json 25630 * { 25631 * "data": { 25632 * "message": "Successfully updated" 25633 * }, 25634 * "error": null 25635 * } 25636 * ``` 25637 * 25638 * @remarks 25639 * - RLS policy permissions required: 25640 * - `buckets` table permissions: `select` and `update` 25641 * - `objects` table permissions: none 25642 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25643 */ 25644 async updateBucket(t, e) { 25645 var s = this; 25646 return s.handleOperation(async () => await g3(s.fetch, `${s.url}/bucket/${t}`, { 25647 id: t, 25648 name: t, 25649 public: e.public, 25650 file_size_limit: e.fileSizeLimit, 25651 allowed_mime_types: e.allowedMimeTypes, 25652 versioning_status: e.versioningStatus 25653 }, { headers: s.headers })); 25654 } 25655 /** 25656 * Removes all objects inside a single bucket. 25657 * 25658 * @category Storage 25659 * @subcategory File Buckets 25660 * @param id The unique identifier of the bucket you would like to empty. 25661 * @returns Promise with success message or error 25662 * 25663 * @example Empty bucket 25664 * ```js 25665 * const { data, error } = await supabase 25666 * .storage 25667 * .emptyBucket('avatars') 25668 * ``` 25669 * 25670 * Response: 25671 * ```json 25672 * { 25673 * "data": { 25674 * "message": "Successfully emptied" 25675 * }, 25676 * "error": null 25677 * } 25678 * ``` 25679 * 25680 * @remarks 25681 * - RLS policy permissions required: 25682 * - `buckets` table permissions: `select` 25683 * - `objects` table permissions: `select` and `delete` 25684 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25685 */ 25686 async emptyBucket(t) { 25687 var e = this; 25688 return e.handleOperation(async () => await We(e.fetch, `${e.url}/bucket/${t}/empty`, {}, { headers: e.headers })); 25689 } 25690 /** 25691 * Deletes an existing bucket. A bucket can't be deleted with existing objects inside it. 25692 * You must first `empty()` the bucket. 25693 * 25694 * @category Storage 25695 * @subcategory File Buckets 25696 * @param id The unique identifier of the bucket you would like to delete. 25697 * @returns Promise with success message or error 25698 * 25699 * @example Delete bucket 25700 * ```js 25701 * const { data, error } = await supabase 25702 * .storage 25703 * .deleteBucket('avatars') 25704 * ``` 25705 * 25706 * Response: 25707 * ```json 25708 * { 25709 * "data": { 25710 * "message": "Successfully deleted" 25711 * }, 25712 * "error": null 25713 * } 25714 * ``` 25715 * 25716 * @remarks 25717 * - RLS policy permissions required: 25718 * - `buckets` table permissions: `select` and `delete` 25719 * - `objects` table permissions: none 25720 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25721 */ 25722 async deleteBucket(t) { 25723 var e = this; 25724 return e.handleOperation(async () => await xt(e.fetch, `${e.url}/bucket/${t}`, {}, { headers: e.headers })); 25725 } 25726 /** 25727 * Returns the lifecycle policy stored on a bucket. 25728 * 25729 * Fails with `NoSuchLifecycleConfiguration` when the bucket has no policy. 25730 * 25731 * These rules expire previous versions of objects, not the current one. 25732 * Turn versioning on or there is nothing for the policy to act on. 25733 * Standard buckets only. Returns `FeatureNotEnabled` if lifecycle is off 25734 * for the project. 25735 * 25736 * @category Storage 25737 * @subcategory File Buckets 25738 * @param id The unique identifier of the bucket.
25739 * @returns Promise with the lifecycle configuration or error 25740 * 25741 * @example Get lifecycle configuration 25742 * ```js 25743 * const { data, error } = await supabase 25744 * .storage 25745 * .getBucketLifecycle('avatars') 25746 * ``` 25747 * 25748 * Response: 25749 * ```json 25750 * { 25751 * "data": { 25752 * "rules": [ 25753 * { 25754 * "id": "expire-history", 25755 * "status": "Enabled", 25756 * "filter": {}, 25757 * "noncurrentVersionExpiration": { 25758 * "noncurrentDays": 30, 25759 * "newerNoncurrentVersions": 2 25760 * } 25761 * } 25762 * ] 25763 * }, 25764 * "error": null 25765 * } 25766 * ``` 25767 * 25768 * @remarks 25769 * - RLS policy permissions required: 25770 * - `buckets` table permissions: `select` 25771 * - `objects` table permissions: none 25772 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25773 */ 25774 async getBucketLifecycle(t) { 25775 var e = this; 25776 return e.handleOperation(async () => await mt(e.fetch, e.bucketLifecycleUrl(t), { headers: e.headers })); 25777 } 25778 /** 25779 * Replaces the lifecycle policy on a bucket. 25780 * 25781 * The `rules` array you send is the whole policy. Anything previously stored 25782 * is overwritten. Send at least one rule. Call {@link deleteBucketLifecycle} 25783 * to remove the policy. 25784 * 25785 * Each rule currently supports only `noncurrentVersionExpiration`. `filter` 25786 * is required and must be `{}`. Prefix filters, tag filters, and current-object 25787 * expiration are rejected. Rule IDs must be unique. Omit `id` and the 25788 * server generates one. 25789 * 25790 * Standard buckets only. Returns `FeatureNotEnabled` if lifecycle is off 25791 * for the project. 25792 * 25793 * @category Storage 25794 * @subcategory File Buckets 25795 * @param id The unique identifier of the bucket. 25796 * @param configuration The full lifecycle configuration to store. 25797 * @returns Promise with the stored configuration or error 25798 * 25799 * @example Replace lifecycle configuration 25800 * ```js 25801 * const { data, error } = await supabase 25802 * .storage 25803 * .updateBucketLifecycle('avatars', { 25804 * rules: [ 25805 * { 25806 * id: 'expire-history', 25807 * status: 'Enabled', 25808 * filter: {}, 25809 * noncurrentVersionExpiration: { 25810 * noncurrentDays: 30, 25811 * newerNoncurrentVersions: 2, 25812 * }, 25813 * }, 25814 * ], 25815 * }) 25816 * ``` 25817 * 25818 * @remarks 25819 * - RLS policy permissions required: 25820 * - `buckets` table permissions: `select` and `update` 25821 * - `objects` table permissions: none 25822 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25823 */ 25824 async updateBucketLifecycle(t, e) { 25825 var s = this; 25826 return s.handleOperation(async () => await g3(s.fetch, s.bucketLifecycleUrl(t), e, { headers: s.headers })); 25827 } 25828 /** 25829 * Removes the lifecycle policy from a bucket. 25830 * 25831 * Safe to call when no policy is stored. The response is still success. 25832 * Standard buckets only. Returns `FeatureNotEnabled` if lifecycle is off 25833 * for the project. 25834 * 25835 * @category Storage 25836 * @subcategory File Buckets 25837 * @param id The unique identifier of the bucket. 25838 * @returns Promise with success message or error 25839 * 25840 * @example Delete lifecycle configuration 25841 * ```js 25842 * const { data, error } = await supabase 25843 * .storage 25844 * .deleteBucketLifecycle('avatars') 25845 * ``` 25846 * 25847 * Response: 25848 * ```json 25849 * { 25850 * "data": { 25851 * "message": "Successfully deleted" 25852 * }, 25853 * "error": null 25854 * } 25855 * ``` 25856 * 25857 * @remarks 25858 * - RLS policy permissions required: 25859 * - `buckets` table permissions: `select` and `update` 25860 * - `objects` table permissions: none 25861 * - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works 25862 */ 25863 async deleteBucketLifecycle(t) { 25864 var e = this; 25865 return e.handleOperation(async () => await xt(e.fetch, e.bucketLifecycleUrl(t), {}, { headers: e.headers })); 25866 } 25867 /** 25868 * Purges the CDN cache for an entire bucket. 25869 * 25870 * Maps to `DELETE /cdn/{bucket}` on the Storage API. The server 25871 * issues a CDN invalidation for the bucket and returns `{ message: 'success' }`. 25872 * 25873 * **Requires the `service_role` key.** The underlying endpoint enforces 25874 * `service_role` JWT â calls made with the anon key or a user JWT will be 25875 * rejected by the server. 25876 * 25877 * **Hosted CDN feature.** On self-hosted Supabase, the Storage service must 25878 * have `CDN_PURGE_ENDPOINT_URL` configured and the `purgeCache` tenant 25879 * feature enabled, otherwise the server returns an error. 25880 * 25881 * @category Storage 25882 * @subcategory File Buckets 25883 * @param id The unique identifier of the bucket you would like to purge from cache. 25884 * @param options Optional purge cache options. 25885 * @param options.transformations If true, purges only transformations (resized/formatted variants), leaving original cached files intact. 25886 * @param parameters Optional fetch parameters such as an `AbortController` signal. 25887 * @returns Promise with `{ data: { message }, error: null }` on success or `{ data: null, error }` on failure. 25888 * 25889 * @example Purge cache for an entire bucket 25890 * ```js 25891 * const { data, error } = await supabase 25892 * .storage 25893 * .purgeBucketCache('avatars') 25894 * ``` 25895 * 25896 * @example Purge only transformations for an entire bucket 25897 * ```js 25898 * const { data, error } = await supabase 25899 * .storage 25900 * .purgeBucketCache('avatars', { transformations: true }) 25901 * ``` 25902 */ 25903 async purgeBucketCache(t, e, s) { 25904 var r = this; 25905 return r.handleOperation(async () => { 25906 const n = new URLSearchParams(); 25907 e?.transformations && n.set("transformations", "true"); 25908 const o = n.toString(); 25909 return await xt(r.fetch, `${r.url}/cdn/${s5(t)}${o ? `?${o}` : ""}`, {}, { headers: r.headers }, s); 25910 }); 25911 } 25912 bucketLifecycleUrl(t) { 25913 return `${this.url}/bucket/${s5(t)}/lifecycle`; 25914 } 25915 listBucketOptionsToQueryString(t) { 25916 const e = {}; 25917 return t && ("limit" in t && (e.limit = String(t.limit)), "offset" in t && (e.offset = String(t.offset)), t.search && (e.search = t.search), t.sortColumn && (e.sortColumn = t.sortColumn), t.sortOrder && (e.sortOrder = t.sortOrder)), Object.keys(e).length > 0 ? "?" + new URLSearchParams(e).toString() : ""; 25918 } 25919}, Lh = class extends Ct { 25920 /** 25921 * @alpha 25922 * 25923 * Creates a new StorageAnalyticsClient instance 25924 * 25925 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 25926 * 25927 * @category Storage 25928 * @subcategory Analytics Buckets 25929 * @param url - The base URL for the storage API 25930 * @param headers - HTTP headers to include in requests 25931 * @param fetch - Optional custom fetch implementation 25932 * 25933 * @example Using supabase-js (recommended) 25934 * ```typescript 25935 * import { createClient } from '@supabase/supabase-js' 25936 * 25937 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 25938 * const { data, error } = await supabase.storage.analytics.listBuckets() 25939 * ``` 25940 * 25941 * @example Standalone import for bundle-sensitive environments 25942 * ```typescript 25943 * import { StorageAnalyticsClient } from '@supabase/storage-js' 25944 * 25945 * const client = new StorageAnalyticsClient(url, headers) 25946 * ``` 25947 */ 25948 constructor(t, e = {}, s) { 25949 const r = t.replace(/\/$/, ""), n = F(F({}, y2), e); 25950 super(r, n, s, "storage"); 25951 } 25952 /** 25953 * @alpha 25954 *
25955 * Creates a new analytics bucket using Iceberg tables 25956 * Analytics buckets are optimized for analytical queries and data processing 25957 * 25958 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 25959 * 25960 * @category Storage 25961 * @subcategory Analytics Buckets 25962 * @param name A unique name for the bucket you are creating 25963 * @returns Promise with response containing newly created analytics bucket or error 25964 * 25965 * @example Create analytics bucket 25966 * ```js 25967 * const { data, error } = await supabase 25968 * .storage 25969 * .analytics 25970 * .createBucket('analytics-data') 25971 * ``` 25972 * 25973 * Response: 25974 * ```json 25975 * { 25976 * "data": { 25977 * "name": "analytics-data", 25978 * "type": "ANALYTICS", 25979 * "format": "iceberg", 25980 * "created_at": "2024-05-22T22:26:05.100Z", 25981 * "updated_at": "2024-05-22T22:26:05.100Z" 25982 * }, 25983 * "error": null 25984 * } 25985 * ``` 25986 * 25987 * @remarks 25988 * - Creates a new analytics bucket using Iceberg tables 25989 * - Analytics buckets are optimized for analytical queries and data processing 25990 */ 25991 async createBucket(t) { 25992 var e = this; 25993 return e.handleOperation(async () => await We(e.fetch, `${e.url}/bucket`, { name: t }, { headers: e.headers })); 25994 } 25995 /** 25996 * @alpha 25997 * 25998 * Retrieves the details of all Analytics Storage buckets within an existing project 25999 * Only returns buckets of type 'ANALYTICS' 26000 * 26001 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26002 * 26003 * @category Storage 26004 * @subcategory Analytics Buckets 26005 * @param options Query parameters for listing buckets 26006 * @param options.limit Maximum number of buckets to return 26007 * @param options.offset Number of buckets to skip 26008 * @param options.sortColumn Column to sort by ('name', 'created_at', 'updated_at') 26009 * @param options.sortOrder Sort order ('asc' or 'desc') 26010 * @param options.search Search term to filter bucket names 26011 * @returns Promise with response containing array of analytics buckets or error 26012 * 26013 * @example List analytics buckets 26014 * ```js 26015 * const { data, error } = await supabase 26016 * .storage 26017 * .analytics 26018 * .listBuckets({ 26019 * limit: 10, 26020 * offset: 0, 26021 * sortColumn: 'created_at', 26022 * sortOrder: 'desc' 26023 * }) 26024 * ``` 26025 * 26026 * Response: 26027 * ```json 26028 * { 26029 * "data": [ 26030 * { 26031 * "name": "analytics-data", 26032 * "type": "ANALYTICS", 26033 * "format": "iceberg", 26034 * "created_at": "2024-05-22T22:26:05.100Z", 26035 * "updated_at": "2024-05-22T22:26:05.100Z" 26036 * } 26037 * ], 26038 * "error": null 26039 * } 26040 * ``` 26041 * 26042 * @remarks 26043 * - Retrieves the details of all Analytics Storage buckets within an existing project 26044 * - Only returns buckets of type 'ANALYTICS' 26045 */ 26046 async listBuckets(t) { 26047 var e = this; 26048 return e.handleOperation(async () => { 26049 const s = new URLSearchParams(); 26050 t?.limit !== void 0 && s.set("limit", t.limit.toString()), t?.offset !== void 0 && s.set("offset", t.offset.toString()), t?.sortColumn && s.set("sortColumn", t.sortColumn), t?.sortOrder && s.set("sortOrder", t.sortOrder), t?.search && s.set("search", t.search); 26051 const r = s.toString(), n = r ? `${e.url}/bucket?${r}` : `${e.url}/bucket`; 26052 return await mt(e.fetch, n, { headers: e.headers }); 26053 }); 26054 } 26055 /** 26056 * @alpha 26057 * 26058 * Deletes an existing analytics bucket 26059 * A bucket can't be deleted with existing objects inside it 26060 * You must first empty the bucket before deletion 26061 * 26062 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26063 * 26064 * @category Storage 26065 * @subcategory Analytics Buckets 26066 * @param bucketName The unique identifier of the bucket you would like to delete 26067 * @returns Promise with response containing success message or error 26068 * 26069 * @example Delete analytics bucket 26070 * ```js 26071 * const { data, error } = await supabase 26072 * .storage 26073 * .analytics 26074 * .deleteBucket('analytics-data') 26075 * ``` 26076 * 26077 * Response: 26078 * ```json 26079 * { 26080 * "data": { 26081 * "message": "Successfully deleted" 26082 * }, 26083 * "error": null 26084 * } 26085 * ``` 26086 * 26087 * @remarks 26088 * - Deletes an analytics bucket 26089 */ 26090 async deleteBucket(t) { 26091 var e = this; 26092 return e.handleOperation(async () => await xt(e.fetch, `${e.url}/bucket/${t}`, {}, { headers: e.headers })); 26093 } 26094 /** 26095 * @alpha 26096 * 26097 * Get an Iceberg REST Catalog client configured for a specific analytics bucket 26098 * Use this to perform advanced table and namespace operations within the bucket 26099 * The returned client provides full access to the Apache Iceberg REST Catalog API 26100 * with the Supabase `{ data, error }` pattern for consistent error handling on all operations. 26101 * 26102 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26103 * 26104 * @category Storage 26105 * @subcategory Analytics Buckets
26106 * @param bucketName - The name of the analytics bucket (warehouse) to connect to 26107 * @returns The wrapped Iceberg catalog client 26108 * @throws {StorageError} If the bucket name is invalid 26109 * 26110 * @example Get catalog and create table 26111 * ```js 26112 * // First, create an analytics bucket 26113 * const { data: bucket, error: bucketError } = await supabase 26114 * .storage 26115 * .analytics 26116 * .createBucket('analytics-data') 26117 * 26118 * // Get the Iceberg catalog for that bucket 26119 * const catalog = supabase.storage.analytics.from('analytics-data') 26120 * 26121 * // Create a namespace 26122 * const { error: nsError } = await catalog.createNamespace({ namespace: ['default'] }) 26123 * 26124 * // Create a table with schema 26125 * const { data: tableMetadata, error: tableError } = await catalog.createTable( 26126 * { namespace: ['default'] }, 26127 * { 26128 * name: 'events', 26129 * schema: { 26130 * type: 'struct', 26131 * fields: [ 26132 * { id: 1, name: 'id', type: 'long', required: true }, 26133 * { id: 2, name: 'timestamp', type: 'timestamp', required: true }, 26134 * { id: 3, name: 'user_id', type: 'string', required: false } 26135 * ], 26136 * 'schema-id': 0, 26137 * 'identifier-field-ids': [1] 26138 * }, 26139 * 'partition-spec': { 26140 * 'spec-id': 0, 26141 * fields: [] 26142 * }, 26143 * 'write-order': { 26144 * 'order-id': 0, 26145 * fields: [] 26146 * }, 26147 * properties: { 26148 * 'write.format.default': 'parquet' 26149 * } 26150 * } 26151 * ) 26152 * ``` 26153 * 26154 * @example List tables in namespace 26155 * ```js 26156 * const catalog = supabase.storage.analytics.from('analytics-data') 26157 * 26158 * // List all tables in the default namespace 26159 * const { data: tables, error: listError } = await catalog.listTables({ namespace: ['default'] }) 26160 * if (listError) { 26161 * if (listError.isNotFound()) { 26162 * console.log('Namespace not found') 26163 * } 26164 * return 26165 * } 26166 * console.log(tables) // [{ namespace: ['default'], name: 'events' }] 26167 * ``` 26168 * 26169 * @example Working with namespaces 26170 * ```js 26171 * const catalog = supabase.storage.analytics.from('analytics-data') 26172 * 26173 * // List all namespaces 26174 * const { data: namespaces } = await catalog.listNamespaces() 26175 * 26176 * // Create namespace with properties 26177 * await catalog.createNamespace( 26178 * { namespace: ['production'] }, 26179 * { properties: { owner: 'data-team', env: 'prod' } } 26180 * ) 26181 * ``` 26182 * 26183 * @example Cleanup operations 26184 * ```js 26185 * const catalog = supabase.storage.analytics.from('analytics-data') 26186 * 26187 * // Drop table with purge option (removes all data) 26188 * const { error: dropError } = await catalog.dropTable( 26189 * { namespace: ['default'], name: 'events' }, 26190 * { purge: true } 26191 * ) 26192 * 26193 * if (dropError?.isNotFound()) { 26194 * console.log('Table does not exist') 26195 * } 26196 * 26197 * // Drop namespace (must be empty) 26198 * await catalog.dropNamespace({ namespace: ['default'] }) 26199 * ``` 26200 * 26201 * @remarks 26202 * This method provides a bridge between Supabase's bucket management and the standard 26203 * Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter. 26204 * All authentication and configuration is handled automatically using your Supabase credentials. 26205 * 26206 * **Error Handling**: Invalid bucket names throw immediately. All catalog 26207 * operations return `{ data, error }` where errors are `IcebergError` instances from iceberg-js. 26208 * Use helper methods like `error.isNotFound()` or check `error.status` for specific error handling. 26209 * Use `.throwOnError()` on the analytics client if you prefer exceptions for catalog operations. 26210 * 26211 * **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently 26212 * deletes all table data. Without it, the table is marked as deleted but data remains. 26213 * 26214 * **Library Dependency**: The returned catalog wraps `IcebergRestCatalog` from iceberg-js. 26215 * For complete API documentation and advanced usage, refer to the 26216 * [iceberg-js documentation](https://supabase.github.io/iceberg-js/). 26217 */ 26218 from(t) { 26219 var e = this; 26220 if (!Xu(t)) throw new O3("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters."); 26221 const s = new $u({ 26222 baseUrl: this.url, 26223 catalogName: t, 26224 auth: { 26225 type: "custom", 26226 getHeaders: async () => e.headers 26227 }, 26228 fetch: this.fetch 26229 }), r = this.shouldThrowOnError; 26230 return new Proxy(s, { get(n, o) { 26231 const L = n[o]; 26232 return typeof L != "function" ? L : async (...d) => { 26233 try { 26234 return { 26235 data: await L.apply(n, d), 26236 error: null 26237 }; 26238 } catch (l) { 26239 if (r) throw l; 26240 return { 26241 data: null, 26242 error: l 26243 }; 26244 } 26245 }; 26246 } }); 26247 } 26248}, ch = class extends Ct { 26249 /** Creates a new VectorIndexApi instance */ 26250 constructor(t, e = {}, s) { 26251 const r = t.replace(/\/$/, ""), n = F(F({}, y2), {}, { "Content-Type": "application/json" }, e); 26252 super(r, n, s, "vectors"); 26253 } 26254 /** Creates a new vector index within a bucket */ 26255 async createIndex(t) { 26256 var e = this; 26257 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/CreateIndex`, t, { headers: e.headers }) || {}); 26258 } 26259 /** Retrieves metadata for a specific vector index */ 26260 async getIndex(t, e) { 26261 var s = this; 26262 return s.handleOperation(async () => await Ce.post(s.fetch, `${s.url}/GetIndex`, { 26263 vectorBucketName: t, 26264 indexName: e 26265 }, { headers: s.headers })); 26266 } 26267 /** Lists vector indexes within a bucket with optional filtering and pagination */ 26268 async listIndexes(t) { 26269 var e = this; 26270 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/ListIndexes`, t, { headers: e.headers })); 26271 } 26272 /** Deletes a vector index and all its data */ 26273 async deleteIndex(t, e) { 26274 var s = this; 26275 return s.handleOperation(async () => await Ce.post(s.fetch, `${s.url}/DeleteIndex`, { 26276 vectorBucketName: t, 26277 indexName: e 26278 }, { headers: s.headers }) || {}); 26279 } 26280}, lh = class extends Ct { 26281 /** Creates a new VectorDataApi instance */ 26282 constructor(t, e = {}, s) { 26283 const r = t.replace(/\/$/, ""), n = F(F({}, y2), {}, { "Content-Type": "application/json" }, e); 26284 super(r, n, s, "vectors"); 26285 } 26286 /** Inserts or updates vectors in batch (1-500 per request) */ 26287 async putVectors(t) { 26288 var e = this; 26289 if (t.vectors.length < 1 || t.vectors.length > 500) throw new Error("Vector batch size must be between 1 and 500 items"); 26290 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/PutVectors`, t, { headers: e.headers }) || {}); 26291 } 26292 /** Retrieves vectors by their keys in batch */ 26293 async getVectors(t) { 26294 var e = this; 26295 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/GetVectors`, t, { headers: e.headers })); 26296 } 26297 /** Lists vectors in an index with pagination */ 26298 async listVectors(t) { 26299 var e = this; 26300 if (t.segmentCount !== void 0) { 26301 if (t.segmentCount < 1 || t.segmentCount > 16) throw new Error("segmentCount must be between 1 and 16"); 26302 if (t.segmentIndex !== void 0 && (t.segmentIndex < 0 || t.segmentIndex >= t.segmentCount)) 26303 throw new Error(`segmentIndex must be between 0 and ${t.segmentCount - 1}`); 26304 } 26305 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/ListVectors`, t, { headers: e.headers })); 26306 } 26307 /** Queries for similar vectors using approximate nearest neighbor search */ 26308 async queryVectors(t) { 26309 var e = this; 26310 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/QueryVectors`, t, { headers: e.headers })); 26311 } 26312 /** Deletes vectors by their keys in batch (1-500 per request) */ 26313 async deleteVectors(t) { 26314 var e = this; 26315 if (t.keys.length < 1 || t.keys.length >
26315 500) throw new Error("Keys batch size must be between 1 and 500 items"); 26316 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/DeleteVectors`, t, { headers: e.headers }) || {}); 26317 } 26318}, dh = class extends Ct { 26319 /** Creates a new VectorBucketApi instance */ 26320 constructor(t, e = {}, s) { 26321 const r = t.replace(/\/$/, ""), n = F(F({}, y2), {}, { "Content-Type": "application/json" }, e); 26322 super(r, n, s, "vectors"); 26323 } 26324 /** Creates a new vector bucket */ 26325 async createBucket(t) { 26326 var e = this; 26327 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/CreateVectorBucket`, { vectorBucketName: t }, { headers: e.headers }) || {}); 26328 } 26329 /** Retrieves metadata for a specific vector bucket */ 26330 async getBucket(t) { 26331 var e = this; 26332 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/GetVectorBucket`, { vectorBucketName: t }, { headers: e.headers })); 26333 } 26334 /** Lists vector buckets with optional filtering and pagination */ 26335 async listBuckets(t = {}) { 26336 var e = this; 26337 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/ListVectorBuckets`, t, { headers: e.headers })); 26338 } 26339 /** Deletes a vector bucket (must be empty first) */ 26340 async deleteBucket(t) { 26341 var e = this; 26342 return e.handleOperation(async () => await Ce.post(e.fetch, `${e.url}/DeleteVectorBucket`, { vectorBucketName: t }, { headers: e.headers }) || {}); 26343 } 26344}, gh = class extends dh { 26345 /** 26346 * @alpha 26347 * 26348 * Creates a StorageVectorsClient that can manage buckets, indexes, and vectors. 26349 * 26350 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26351 * 26352 * @category Storage 26353 * @subcategory Vector Buckets 26354 * @param url - Base URL of the Storage Vectors REST API. 26355 * @param options.headers - Optional headers (for example `Authorization`) applied to every request. 26356 * @param options.fetch - Optional custom `fetch` implementation for non-browser runtimes. 26357 * 26358 * @example Using supabase-js (recommended) 26359 * ```typescript 26360 * import { createClient } from '@supabase/supabase-js' 26361 * 26362 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 26363 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26364 * ``` 26365 * 26366 * @example Standalone import for bundle-sensitive environments 26367 * ```typescript 26368 * import { StorageVectorsClient } from '@supabase/storage-js' 26369 * 26370 * const client = new StorageVectorsClient(url, options) 26371 * ``` 26372 */ 26373 constructor(t, e = {}) { 26374 super(t, e.headers || {}, e.fetch); 26375 } 26376 /** 26377 * 26378 * @alpha 26379 * 26380 * Access operations for a specific vector bucket 26381 * Returns a scoped client for index and vector operations within the bucket 26382 * 26383 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26384 * 26385 * @category Storage 26386 * @subcategory Vector Buckets 26387 * @param vectorBucketName - Name of the vector bucket 26388 * @returns Bucket-scoped client with index and vector operations 26389 * 26390 * @example Accessing a vector bucket 26391 * ```typescript 26392 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26393 * ``` 26394 */ 26395 from(t) { 26396 return new fh(this.url, this.headers, t, this.fetch); 26397 } 26398 /** 26399 * 26400 * @alpha 26401 * 26402 * Creates a new vector bucket 26403 * Vector buckets are containers for vector indexes and their data 26404 * 26405 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26406 * 26407 * @category Storage 26408 * @subcategory Vector Buckets 26409 * @param vectorBucketName - Unique name for the vector bucket 26410 * @returns Promise with empty response on success or error 26411 * 26412 * @example Creating a vector bucket 26413 * ```typescript 26414 * const { data, error } = await supabase 26415 * .storage 26416 * .vectors 26417 * .createBucket('embeddings-prod') 26418 * ``` 26419 */ 26420 async createBucket(t) { 26421 var e = () => super.createBucket, s = this; 26422 return e().call(s, t); 26423 } 26424 /** 26425 * 26426 * @alpha 26427 * 26428 * Retrieves metadata for a specific vector bucket 26429 * 26430 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26431 * 26432 * @category Storage 26433 * @subcategory Vector Buckets 26434 * @param vectorBucketName - Name of the vector bucket 26435 * @returns Promise with bucket metadata or error 26436 * 26437 * @example Get bucket metadata 26438 * ```typescript 26439 * const { data, error } = await supabase 26440 * .storage 26441 * .vectors 26442 * .getBucket('embeddings-prod') 26443 * 26444 * console.log('Bucket created:', data?.vectorBucket.creationTime) 26445 * ``` 26446 */ 26447 async getBucket(t) { 26448 var e = () => super.getBucket, s = this; 26449 return e().call(s, t); 26450 } 26451 /** 26452 * 26453 * @alpha 26454 * 26455 * Lists all vector buckets with optional filtering and pagination 26456 * 26457 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26458 * 26459 * @category Storage 26460 * @subcategory Vector Buckets 26461 * @param options - Optional filters (prefix, maxResults, nextToken) 26462 * @returns Promise with list of buckets or error 26463 * 26464 * @example List vector buckets 26465 * ```typescript 26466 * const { data, error } = await supabase 26467 * .storage 26468 * .vectors 26469 * .listBuckets({ prefix: 'embeddings-' }) 26470 *
26471 * data?.vectorBuckets.forEach(bucket => { 26472 * console.log(bucket.vectorBucketName) 26473 * }) 26474 * ``` 26475 */ 26476 async listBuckets(t = {}) { 26477 var e = () => super.listBuckets, s = this; 26478 return e().call(s, t); 26479 } 26480 /** 26481 * 26482 * @alpha 26483 * 26484 * Deletes a vector bucket (bucket must be empty) 26485 * All indexes must be deleted before deleting the bucket 26486 * 26487 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26488 * 26489 * @category Storage 26490 * @subcategory Vector Buckets 26491 * @param vectorBucketName - Name of the vector bucket to delete 26492 * @returns Promise with empty response on success or error 26493 * 26494 * @example Delete a vector bucket 26495 * ```typescript 26496 * const { data, error } = await supabase 26497 * .storage 26498 * .vectors 26499 * .deleteBucket('embeddings-old') 26500 * ``` 26501 */ 26502 async deleteBucket(t) { 26503 var e = () => super.deleteBucket, s = this; 26504 return e().call(s, t); 26505 } 26506}, fh = class extends ch { 26507 /** 26508 * @alpha 26509 * 26510 * Creates a helper that automatically scopes all index operations to the provided bucket. 26511 * 26512 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26513 * 26514 * @category Storage 26515 * @subcategory Vector Buckets 26516 * @example Creating a vector bucket scope 26517 * ```typescript 26518 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26519 * ``` 26520 */ 26521 constructor(t, e, s, r) { 26522 super(t, e, r), this.vectorBucketName = s; 26523 } 26524 /** 26525 * 26526 * @alpha 26527 * 26528 * Creates a new vector index in this bucket 26529 * Convenience method that automatically includes the bucket name 26530 * 26531 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26532 * 26533 * @category Storage 26534 * @subcategory Vector Buckets 26535 * @param options - Index configuration (vectorBucketName is automatically set) 26536 * @returns Promise with empty response on success or error 26537 * 26538 * @example Creating a vector index 26539 * ```typescript 26540 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26541 * await bucket.createIndex({ 26542 * indexName: 'documents-openai', 26543 * dataType: 'float32', 26544 * dimension: 1536, 26545 * distanceMetric: 'cosine', 26546 * metadataConfiguration: { 26547 * nonFilterableMetadataKeys: ['raw_text'] 26548 * } 26549 * }) 26550 * ``` 26551 */ 26552 async createIndex(t) { 26553 var e = () => super.createIndex, s = this; 26554 return e().call(s, F(F({}, t), {}, { vectorBucketName: s.vectorBucketName })); 26555 } 26556 /** 26557 * 26558 * @alpha 26559 * 26560 * Lists indexes in this bucket 26561 * Convenience method that automatically includes the bucket name 26562 * 26563 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26564 * 26565 * @category Storage 26566 * @subcategory Vector Buckets 26567 * @param options - Listing options (vectorBucketName is automatically set) 26568 * @returns Promise with response containing indexes array and pagination token or error 26569 * 26570 * @example List indexes 26571 * ```typescript 26572 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26573 * const { data } = await bucket.listIndexes({ prefix: 'documents-' }) 26574 * ``` 26575 */ 26576 async listIndexes(t = {}) { 26577 var e = () => super.listIndexes, s = this; 26578 return e().call(s, F(F({}, t), {}, { vectorBucketName: s.vectorBucketName })); 26579 } 26580 /** 26581 * 26582 * @alpha 26583 * 26584 * Retrieves metadata for a specific index in this bucket 26585 * Convenience method that automatically includes the bucket name 26586 * 26587 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26588 * 26589 * @category Storage 26590 * @subcategory Vector Buckets 26591 * @param indexName - Name of the index to retrieve 26592 * @returns Promise with index metadata or error 26593 * 26594 * @example Get index metadata 26595 * ```typescript 26596 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26597 * const { data } = await bucket.getIndex('documents-openai') 26598 * console.log('Dimension:', data?.index.dimension) 26599 * ``` 26600 */ 26601 async getIndex(t) { 26602 var e = () => super.getIndex, s = this; 26603 return e().call(s, s.vectorBucketName, t); 26604 } 26605 /** 26606 * 26607 * @alpha 26608 * 26609 * Deletes an index from this bucket 26610 * Convenience method that automatically includes the bucket name 26611 * 26612 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26613 * 26614 * @category Storage 26615 * @subcategory Vector Buckets 26616 * @param indexName - Name of the index to delete
26617 * @returns Promise with empty response on success or error 26618 * 26619 * @example Delete an index 26620 * ```typescript 26621 * const bucket = supabase.storage.vectors.from('embeddings-prod') 26622 * await bucket.deleteIndex('old-index') 26623 * ``` 26624 */ 26625 async deleteIndex(t) { 26626 var e = () => super.deleteIndex, s = this; 26627 return e().call(s, s.vectorBucketName, t); 26628 } 26629 /** 26630 * 26631 * @alpha 26632 * 26633 * Access operations for a specific index within this bucket 26634 * Returns a scoped client for vector data operations 26635 * 26636 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26637 * 26638 * @category Storage 26639 * @subcategory Vector Buckets 26640 * @param indexName - Name of the index 26641 * @returns Index-scoped client with vector data operations 26642 * 26643 * @example Accessing an index 26644 * ```typescript 26645 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26646 * 26647 * // Insert vectors 26648 * await index.putVectors({ 26649 * vectors: [ 26650 * { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } } 26651 * ] 26652 * }) 26653 * 26654 * // Query similar vectors 26655 * const { data } = await index.queryVectors({ 26656 * queryVector: { float32: [...] }, 26657 * topK: 5 26658 * }) 26659 * ``` 26660 */ 26661 index(t) { 26662 return new ph(this.url, this.headers, this.vectorBucketName, t, this.fetch); 26663 } 26664}, ph = class extends lh { 26665 /** 26666 * 26667 * @alpha 26668 * 26669 * Creates a helper that automatically scopes all vector operations to the provided bucket/index names. 26670 * 26671 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26672 * 26673 * @category Storage 26674 * @subcategory Vector Buckets 26675 * @example Creating a vector index scope 26676 * ```typescript 26677 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26678 * ``` 26679 */ 26680 constructor(t, e, s, r, n) { 26681 super(t, e, n), this.vectorBucketName = s, this.indexName = r; 26682 } 26683 /** 26684 * 26685 * @alpha 26686 * 26687 * Inserts or updates vectors in this index 26688 * Convenience method that automatically includes bucket and index names 26689 * 26690 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26691 * 26692 * @category Storage 26693 * @subcategory Vector Buckets 26694 * @param options - Vector insertion options (bucket and index names automatically set) 26695 * @returns Promise with empty response on success or error 26696 * 26697 * @example Insert vectors into an index 26698 * ```typescript 26699 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26700 * await index.putVectors({ 26701 * vectors: [ 26702 * { 26703 * key: 'doc-1', 26704 * data: { float32: [0.1, 0.2, ...] }, 26705 * metadata: { title: 'Introduction', page: 1 } 26706 * } 26707 * ] 26708 * }) 26709 * ``` 26710 */ 26711 async putVectors(t) { 26712 var e = () => super.putVectors, s = this; 26713 return e().call(s, F(F({}, t), {}, { 26714 vectorBucketName: s.vectorBucketName, 26715 indexName: s.indexName 26716 })); 26717 } 26718 /** 26719 * 26720 * @alpha 26721 * 26722 * Retrieves vectors by keys from this index 26723 * Convenience method that automatically includes bucket and index names 26724 * 26725 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26726 * 26727 * @category Storage 26728 * @subcategory Vector Buckets 26729 * @param options - Vector retrieval options (bucket and index names automatically set) 26730 * @returns Promise with response containing vectors array or error 26731 * 26732 * @example Get vectors by keys 26733 * ```typescript 26734 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26735 * const { data } = await index.getVectors({ 26736 * keys: ['doc-1', 'doc-2'], 26737 * returnMetadata: true 26738 * }) 26739 * ``` 26740 */ 26741 async getVectors(t) { 26742 var e = () => super.getVectors, s = this; 26743 return e().call(s, F(F({}, t), {}, { 26744 vectorBucketName: s.vectorBucketName, 26745 indexName: s.indexName 26746 })); 26747 } 26748 /** 26749 * 26750 * @alpha 26751 * 26752 * Lists vectors in this index with pagination 26753 * Convenience method that automatically includes bucket and index names 26754 * 26755 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26756 * 26757 * @category Storage 26758 * @subcategory Vector Buckets
26759 * @param options - Listing options (bucket and index names automatically set) 26760 * @returns Promise with response containing vectors array and pagination token or error 26761 * 26762 * @example List vectors with pagination 26763 * ```typescript 26764 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26765 * const { data } = await index.listVectors({ 26766 * maxResults: 500, 26767 * returnMetadata: true 26768 * }) 26769 * ``` 26770 */ 26771 async listVectors(t = {}) { 26772 var e = () => super.listVectors, s = this; 26773 return e().call(s, F(F({}, t), {}, { 26774 vectorBucketName: s.vectorBucketName, 26775 indexName: s.indexName 26776 })); 26777 } 26778 /** 26779 * 26780 * @alpha 26781 * 26782 * Queries for similar vectors in this index 26783 * Convenience method that automatically includes bucket and index names 26784 * 26785 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26786 * 26787 * @category Storage 26788 * @subcategory Vector Buckets 26789 * @param options - Query options (bucket and index names automatically set) 26790 * @returns Promise with response containing vectors ordered by distance, an optional pagination token, or an error 26791 * 26792 * @example Query similar vectors 26793 * ```typescript 26794 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26795 * const { data } = await index.queryVectors({ 26796 * queryVector: { float32: [0.1, 0.2, ...] }, 26797 * topK: 5, 26798 * filter: { category: 'technical' }, 26799 * returnDistance: true, 26800 * returnMetadata: true 26801 * }) 26802 * ``` 26803 */ 26804 async queryVectors(t) { 26805 var e = () => super.queryVectors, s = this; 26806 return e().call(s, F(F({}, t), {}, { 26807 vectorBucketName: s.vectorBucketName, 26808 indexName: s.indexName 26809 })); 26810 } 26811 /** 26812 * 26813 * @alpha 26814 * 26815 * Deletes vectors by keys from this index 26816 * Convenience method that automatically includes bucket and index names 26817 * 26818 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26819 * 26820 * @category Storage 26821 * @subcategory Vector Buckets 26822 * @param options - Deletion options (bucket and index names automatically set) 26823 * @returns Promise with empty response on success or error 26824 * 26825 * @example Delete vectors by keys 26826 * ```typescript 26827 * const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai') 26828 * await index.deleteVectors({ 26829 * keys: ['doc-1', 'doc-2', 'doc-3'] 26830 * }) 26831 * ``` 26832 */ 26833 async deleteVectors(t) { 26834 var e = () => super.deleteVectors, s = this; 26835 return e().call(s, F(F({}, t), {}, { 26836 vectorBucketName: s.vectorBucketName, 26837 indexName: s.indexName 26838 })); 26839 } 26840}, Mh = class extends oh { 26841 /** 26842 * Creates a client for Storage buckets, files, analytics, and vectors. 26843 * 26844 * @category Storage 26845 * @subcategory File Buckets 26846 * 26847 * @example Using supabase-js (recommended) 26848 * ```ts 26849 * import { createClient } from '@supabase/supabase-js' 26850 * 26851 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 26852 * const avatars = supabase.storage.from('avatars') 26853 * ``` 26854 * 26855 * @example Standalone import for bundle-sensitive environments 26856 * ```ts 26857 * import { StorageClient } from '@supabase/storage-js' 26858 * 26859 * const storage = new StorageClient('https://xyzcompany.supabase.co/storage/v1', { 26860 * apikey: 'your-publishable-key', 26861 * }) 26862 * const avatars = storage.from('avatars') 26863 * ``` 26864 */ 26865 constructor(t, e = {}, s, r) { 26866 super(t, e, s, r); 26867 } 26868 /** 26869 * Perform file operation in a bucket. 26870 * 26871 * @category Storage 26872 * @subcategory File Buckets 26873 * 26874 * @param id The bucket id to operate on. 26875 * 26876 * @example Accessing a bucket 26877 * ```typescript 26878 * const avatars = supabase.storage.from('avatars') 26879 * ``` 26880 */ 26881 from(t) { 26882 return new rh(this.url, this.headers, t, this.fetch); 26883 } 26884 /** 26885 * 26886 * @alpha 26887 * 26888 * Access vector storage operations. 26889 * 26890 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26891 * 26892 * @category Storage 26893 * @subcategory Vector Buckets 26894 * 26895 * @returns A StorageVectorsClient instance configured with the current storage settings. 26896 */ 26897 get vectors() { 26898 return new gh(this.url + "/vector", { 26899 headers: this.headers, 26900 fetch: this.fetch 26901 }); 26902 } 26903 /** 26904 * 26905 * @alpha 26906 * 26907 * Access analytics storage operations using Iceberg tables. 26908 * 26909 * **Public alpha:** This API is part of a public alpha release and may not be available to your account type. 26910 * 26911 * @category Storage 26912 * @subcategory Analytics Buckets 26913 * 26914 * @returns A StorageAnalyticsClient instance configured with the current storage settings. 26915 */ 26916 get analytics() { 26917 return new Lh(this.url + "/iceberg", this.headers, this.fetch); 26918 } 26919}; 26920const wi = "2.117.2", f1 = 30 * 1e3, Zt = 3, x4 = Zt * f1, uh = 2 * f1, hh = "http://localhost:9999", mh = "supabase.auth.token", xh = { "X-Client-Info": `gotrue-js/${wi}` }, i5 = "X-Supabase-Api-Version", Ti = { 26921 "2024-01-01": { 26922 timestamp: Date.parse("2024-01-01T00:00:00.0Z"), 26923 name: "2024-01-01" 26924 } 26925}, _h = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i, H1 = "sb_flow_id", bh = 5, vh = 600 * 1e3;
26926class L2 extends Error { 26927 constructor(e, s, r) { 26928 super(e), this.__isAuthError = !0, this.name = "AuthError", this.status = s, this.code = r; 26929 } 26930 toJSON() { 26931 return { 26932 name: this.name, 26933 message: this.message, 26934 status: this.status, 26935 code: this.code 26936 }; 26937 } 26938} 26939function B(t) { 26940 return typeof t == "object" && t !== null && "__isAuthError" in t; 26941} 26942class yh extends L2 { 26943 constructor(e, s, r) { 26944 super(e, s, r), this.name = "AuthApiError", this.status = s, this.code = r; 26945 } 26946} 26947function L6(t) { 26948 return B(t) && t.name === "AuthApiError"; 26949} 26950class $e extends L2 { 26951 constructor(e, s) { 26952 super(e), this.name = "AuthUnknownError", this.originalError = s; 26953 } 26954} 26955class n1 extends L2 { 26956 constructor(e, s, r, n) { 26957 super(e, r, n), this.name = s, this.status = r; 26958 } 26959} 26960class he extends n1 { 26961 constructor() { 26962 super("Auth session missing!", "AuthSessionMissingError", 400, void 0); 26963 } 26964} 26965function O2(t) { 26966 return B(t) && t.name === "AuthSessionMissingError"; 26967} 26968class et extends n1 { 26969 constructor() {
26970 super("Auth session or user missing", "AuthInvalidTokenResponseError", 500, void 0); 26971 } 26972} 26973class V2 extends n1 { 26974 constructor(e) { 26975 super(e, "AuthInvalidCredentialsError", 400, void 0); 26976 } 26977} 26978class H2 extends n1 { 26979 constructor(e, s = null) { 26980 super(e, "AuthImplicitGrantRedirectError", 500, void 0), this.details = null, this.details = s; 26981 } 26982 toJSON() { 26983 return Object.assign(Object.assign({}, super.toJSON()), { details: this.details }); 26984 } 26985} 26986function wh(t) { 26987 return B(t) && t.name === "AuthImplicitGrantRedirectError"; 26988} 26989class c6 extends n1 { 26990 constructor(e, s = null) { 26991 super(e, "AuthPKCEGrantCodeExchangeError", 500, void 0), this.details = null, this.details = s; 26992 } 26993 toJSON() { 26994 return Object.assign(Object.assign({}, super.toJSON()), { details: this.details }); 26995 } 26996} 26997class Th extends n1 { 26998 constructor() { 26999 super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.", "AuthPKCECodeVerifierMissingError", 400, "pkce_code_verifier_not_found"); 27000 } 27001} 27002class s3 extends n1 { 27003 constructor(e, s) { 27004 super(e, "AuthRetryableFetchError", s, void 0); 27005 } 27006} 27007function Z2(t) { 27008 return B(t) && t.name === "AuthRetryableFetchError"; 27009} 27010class l6 extends n1 { 27011 constructor(e = "Refresh result discarded: session state changed mid-flight (e.g., concurrent signOut)") { 27012 super(e, "AuthRefreshDiscardedError", 409, void 0); 27013 } 27014} 27015function d6(t) { 27016 return B(t) && t.name === "AuthRefreshDiscardedError"; 27017} 27018class g6 extends n1 { 27019 constructor(e, s, r) { 27020 super(e, "AuthWeakPasswordError", s, "weak_password"), this.reasons = r; 27021 } 27022 toJSON() { 27023 return Object.assign(Object.assign({}, super.toJSON()), { reasons: this.reasons }); 27024 } 27025} 27026class f3 extends n1 { 27027 constructor(e) { 27028 super(e, "AuthInvalidJwtError", 400, "invalid_jwt"); 27029 } 27030} 27031const p3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""), f6 = ` 27032\r=`.split(""), Sh = (() => { 27033 const t = new Array(128); 27034 for (let e = 0; e < t.length; e += 1) 27035 t[e] = -1; 27036 for (let e = 0; e < f6.length; e += 1) 27037 t[f6[e].charCodeAt(0)] = -2; 27038 for (let e = 0; e < p3.length; e += 1) 27039 t[p3[e].charCodeAt(0)] = e; 27040 return t; 27041})(); 27042function p6(t, e, s) { 27043 if (t !== null) 27044 for (e.queue = e.queue << 8 | t, e.queuedBits += 8; e.queuedBits >= 6; ) { 27045 const r = e.queue >> e.queuedBits - 6 & 63; 27046 s(p3[r]), e.queuedBits -= 6; 27047 } 27048 else if (e.queuedBits > 0) 27049 for (e.queue = e.queue << 6 - e.queuedBits, e.queuedBits = 6; e.queuedBits >= 6; ) { 27050 const r = e.queue >> e.queuedBits - 6 & 63; 27051 s(p3[r]), e.queuedBits -= 6; 27052 } 27053} 27054function Si(t, e, s) { 27055 const r = Sh[t]; 27056 if (r > -1) 27057 for (e.queue = e.queue << 6 | r, e.queuedBits += 6; e.queuedBits >= 8; ) 27058 s(e.queue >> e.queuedBits - 8 & 255), e.queuedBits -= 8; 27059 else { 27060 if (r === -2) 27061 return; 27062 throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`); 27063 } 27064} 27065function M6(t) { 27066 const e = [], s = (L) => { 27067 e.push(String.fromCodePoint(L)); 27068 }, r = { 27069 utf8seq: 0, 27070 codepoint: 0 27071 }, n = { queue: 0, queuedBits: 0 }, o = (L) => { 27072 Ah(L, r, s); 27073 }; 27074 for (let L = 0; L < t.length; L += 1) 27075 Si(t.charCodeAt(L), n, o); 27076 return e.join(""); 27077} 27078function Bh(t, e) { 27079 if (t <= 127) { 27080 e(t); 27081 return; 27082 } else if (t <= 2047) { 27083 e(192 | t >> 6), e(128 | t & 63); 27084 return; 27085 } else if (t <= 65535) { 27086 e(224 | t >> 12), e(128 | t >> 6 & 63), e(128 | t & 63); 27087 return; 27088 } else if (t <= 1114111) { 27089 e(240 | t >> 18), e(128 | t >> 12 & 63), e(128 | t >> 6 & 63), e(128 | t & 63); 27090 return; 27091 } 27092 throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`); 27093} 27094function kh(t, e) { 27095 for (let s = 0; s < t.length; s += 1) { 27096 let r = t.charCodeAt(s); 27097 if (r > 55295 && r <= 56319) { 27098 const n = (r - 55296) * 1024 & 65535; 27099 r = (t.charCodeAt(s + 1) - 56320 & 65535 | n) + 65536, s += 1; 27100 } 27101 Bh(r, e); 27102 } 27103} 27104function Ah(t, e, s) { 27105 if (e.utf8seq === 0) { 27106 if (t <= 127) { 27107 s(t); 27108 return; 27109 } 27110 for (let r = 1; r < 6; r += 1) 27111 if ((t >> 7 - r & 1) === 0) { 27112 e.utf8seq = r; 27113 break; 27114 } 27115 if (e.utf8seq === 2) 27116 e.codepoint = t & 31; 27117 else if (e.utf8seq === 3) 27118 e.codepoint = t & 15; 27119 else if (e.utf8seq === 4) 27120 e.codepoint = t & 7; 27121 else 27122 throw new Error("Invalid UTF-8 sequence"); 27123 e.utf8seq -= 1; 27124 } else if (e.utf8seq > 0) { 27125 if (t <= 127) 27126 throw new Error("Invalid UTF-8 sequence"); 27127 e.codepoint = e.codepoint << 6 | t & 63, e.utf8seq -= 1, e.utf8seq === 0 && s(e.codepoint); 27128 } 27129} 27130function _t(t) { 27131 const e = [], s = { queue: 0, queuedBits: 0 }, r = (n) => { 27132 e.push(n); 27133 }; 27134 for (let n = 0; n < t.length; n += 1) 27135 Si(t.charCodeAt(n), s, r); 27136 return new Uint8Array(e); 27137} 27138function Nh(t) { 27139 const e = []; 27140 return kh(t, (s) => e.push(s)), new Uint8Array(e); 27141} 27142function Z1(t) { 27143 const e = [], s = { queue: 0, queuedBits: 0 }, r = (n) => { 27144 e.push(n); 27145 }; 27146 return t.forEach((n) => p6(n, s, r)), p6(null, s, r), e.join(""); 27147} 27148function Bi(t) { 27149 return Math.round(Date.now() / 1e3) + t; 27150} 27151function Ih() { 27152 return Symbol("auth-callback"); 27153} 27154const _e = () => typeof window < "u" && typeof document < "u", P1 = { 27155 tested: !1, 27156 writable: !1 27157}, ki = () => { 27158 if (!_e()) 27159 return !1; 27160 try { 27161 if (typeof globalThis.localStorage != "object") 27162 return !1; 27163 } catch { 27164 return !1; 27165 } 27166 if (P1.tested) 27167 return P1.writable; 27168 const t = `lswt-${Math.random()}${Math.random()}`; 27169 try { 27170 globalThis.localStorage.setItem(t, t), globalThis.localStorage.removeItem(t), P1.tested = !0, P1.writable = !0; 27171 } catch { 27172 P1.tested = !0, P1.writable = !1; 27173 } 27174 return P1.writable; 27175}; 27176function u6(t) { 27177 const e = {}, s = new URL(t); 27178 if (s.hash && s.hash[0] === "#") 27179 try {
27180 new URLSearchParams(s.hash.substring(1)).forEach((n, o) => { 27181 e[o] = n; 27182 }); 27183 } catch { 27184 } 27185 return s.searchParams.forEach((r, n) => { 27186 e[n] = r; 27187 }), e; 27188} 27189const Ai = (t) => t ? (...e) => t(...e) : (...e) => fetch(...e), Ph = (t) => typeof t == "object" && t !== null && "status" in t && "ok" in t && "json" in t && typeof t.json == "function", p1 = async (t, e, s) => { 27190 await t.setItem(e, JSON.stringify(s)); 27191}, be = async (t, e) => { 27192 const s = await t.getItem(e); 27193 if (!s) 27194 return null; 27195 try { 27196 return JSON.parse(s); 27197 } catch { 27198 return null; 27199 } 27200}, ke = async (t, e) => { 27201 await t.removeItem(e); 27202}; 27203class H3 { 27204 constructor() { 27205 this.promise = new H3.promiseConstructor((e, s) => { 27206 this.resolve = e, this.reject = s; 27207 }); 27208 } 27209} 27210H3.promiseConstructor = Promise; 27211function W2(t) { 27212 const e = t.split("."); 27213 if (e.length !== 3) 27214 throw new f3("Invalid JWT structure"); 27215 for (let r = 0; r < e.length; r++) 27216 if (!_h.test(e[r])) 27217 throw new f3("JWT not in base64url format"); 27218 return { 27219 // using base64url lib 27220 header: JSON.parse(M6(e[0])), 27221 payload: JSON.parse(M6(e[1])), 27222 signature: _t(e[2]), 27223 raw: { 27224 header: e[0], 27225 payload: e[1] 27226 } 27227 }; 27228} 27229async function Ch(t) { 27230 return await new Promise((e) => { 27231 setTimeout(() => e(null), t); 27232 }); 27233} 27234function Fh(t, e) { 27235 return new Promise((r, n) => { 27236 (async () => { 27237 for (let o = 0; o < 1 / 0; o++) 27238 try { 27239 const L = await t(o); 27240 if (!e(o, null, L)) { 27241 r(L); 27242 return; 27243 } 27244 } catch (L) { 27245 if (!e(o, L)) { 27246 n(L); 27247 return; 27248 } 27249 } 27250 })(); 27251 }); 27252} 27253function Ni(t) { 27254 return ("0" + t.toString(16)).substr(-2); 27255} 27256function Eh() { 27257 const e = new Uint32Array(56); 27258 if (typeof crypto > "u") { 27259 const s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~", r = s.length; 27260 let n = ""; 27261 for (let o = 0; o < 56; o++) 27262 n += s.charAt(Math.floor(Math.random() * r)); 27263 return n; 27264 } 27265 return crypto.getRandomValues(e), Array.from(e, Ni).join(""); 27266} 27267async function Rh(t) { 27268 const s = new TextEncoder().encode(t), r = await crypto.subtle.digest("SHA-256", s), n = new Uint8Array(r); 27269 return Array.from(n).map((o) => String.fromCharCode(o)).join(""); 27270} 27271async function Dh(t) { 27272 if (!(typeof crypto < "u" && typeof crypto.subtle < "u" && typeof TextEncoder < "u")) 27273 return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."), t; 27274 const s = await Rh(t); 27275 return btoa(s).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); 27276} 27277const zh = /^[a-zA-Z0-9_-]{8,64}$/; 27278function i3(t) { 27279 return typeof t == "string" && zh.test(t) ? t : null; 27280} 27281function jh() { 27282 if (typeof crypto < "u" && typeof crypto.getRandomValues == "function") { 27283 const e = new Uint8Array(16); 27284 return crypto.getRandomValues(e), Array.from(e, Ni).join(""); 27285 } 27286 let t = ""; 27287 for (let e = 0; e < 32; e++) 27288 t += Math.floor(Math.random() * 16).toString(16); 27289 return t; 27290} 27291const wt = (t, e) => `${t}-flow-${e}-code-verifier`, c2 = (t) => `${t}-flows-code-verifier`; 27292async function i0(t, e) { 27293 const s = await be(t, c2(e)); 27294 return Array.isArray(s) ? s.filter((r) => i3(r) !== null) : []; 27295} 27296async function Oh(t, e, s, r, n) { 27297 await p1(t, wt(e, s), r); 27298 const o = (await i0(t, e)).filter((L) => L !== s); 27299 for (o.push(s); o.length > bh; ) { 27300 const L = o.shift(); 27301 await ke(t, wt(e, L)), n?.(L); 27302 } 27303 await p1(t, c2(e), o), await p1(t, `${e}-code-verifier`, r); 27304} 27305async function Vh(t, e, s) { 27306 if (s) { 27307 const n = await be(t, wt(e, s)); 27308 return { verifier: typeof n == "string" ? n : null, flowId: s }; 27309 } 27310 const r = await be(t, `${e}-code-verifier`); 27311 return { verifier: typeof r == "string" ? r : null, flowId: null }; 27312} 27313async function He(t, e, s) { 27314 const r = `${e}-code-verifier`; 27315 if (!s) { 27316 await ke(t, r); 27317 return; 27318 } 27319 const n = wt(e, s), o = await be(t, n); 27320 await ke(t, n); 27321 const L = await i0(t, e), d = L.filter((l) => l !== s); 27322 d.length !== L.length && (d.length > 0 ? await p1(t, c2(e), d) : await ke(t, c2(e))), o != null && o === await be(t, r) && await ke(t, r); 27323} 27324async function Hh(t, e) { 27325 const s = await i0(t, e); 27326 for (const r of s) 27327 await ke(t, wt(e, r)); 27328 await ke(t, c2(e)), await ke(t, `${e}-code-verifier`); 27329} 27330function Zh(t, e) { 27331 const s = t.indexOf("#"); 27332 let r = s === -1 ? t : t.slice(0, s); 27333 const n = s === -1 ? "" : t.slice(s), o = r.indexOf("?"); 27334 if (o !== -1) { 27335 const d = r.slice(0, o), l = r.slice(o + 1).split("&").filter((g) => g !== "" && g !== H1 && !g.startsWith(`${H1}=`)); 27336 r = l.length > 0 ? `${d}?${l.join("&")}` : d; 27337 } 27338 const L = r.includes("?") ? "&" : "?"; 27339 return `${r}${L}${H1}=${encodeURIComponent(e)}${n}`; 27340} 27341async function Wh(t, e, s = !1, r) { 27342 const n = Eh(); 27343 let o = n; 27344 s && (o += "/recovery"); 27345 const L = jh(); 27346 await Oh(t, e, L, o, r); 27347 const d = await Dh(n); 27348 return [d, n === d ? "plain" : "s256", L]; 27349} 27350const $h = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i; 27351function qh(t) { 27352 const e = t.headers.get(i5); 27353 if (!e || !e.match($h)) 27354 return null; 27355 try { 27356 return /* @__PURE__ */ new Date(`${e}T00:00:00.0Z`); 27357 } catch { 27358 return null; 27359 } 27360} 27361function Uh(t) { 27362 if (!t) 27363 throw new Error("Missing exp claim"); 27364 const e = Math.floor(Date.now() / 1e3); 27365 if (t <= e) 27366 throw new Error("JWT has expired"); 27367} 27368function Gh(t) { 27369 switch (t) { 27370 case "RS256": 27371 return { 27372 name: "RSASSA-PKCS1-v1_5", 27373 hash: { name: "SHA-256" } 27374 }; 27375 case "ES256": 27376 return { 27377 name: "ECDSA", 27378 namedCurve: "P-256", 27379 hash: { name: "SHA-256" } 27380 }; 27381 default: 27382 throw new Error("Invalid alg claim"); 27383 } 27384} 27385const Jh = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; 27386function L1(t) { 27387 if (!Jh.test(t)) 27388 throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not"); 27389} 27390function zt(t) { 27391 if (!t.recoveryCodes) 27392 throw new Error("@supabase/auth-js: the MFA recovery codes API is experimental and disabled by default. Enable it by passing `auth: { experimental: { recoveryCodes: true } }` to createClient (or to the GoTrueClient constructor)."); 27393} 27394function _4() { 27395 const t = {}; 27396 return new Proxy(t, { 27397 get: (e, s) => { 27398 if (s === "__isUserNotAvailableProxy") 27399 return !0; 27400 if (typeof s == "symbol") { 27401 const r = s.toString(); 27402 if (r === "Symbol(Symbol.toPrimitive)" || r === "Symbol(Symbol.toStringTag)" || r === "Symbol(util.inspect.custom)") 27403 return; 27404 } 27405 throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${s}" property of the session object is not supported. Please use getUser() instead.`); 27406 }, 27407 set: (e, s) => { 27408 throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${s}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`); 27409 }, 27410 deleteProperty: (e, s) => { 27411 throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${s}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`); 27412 } 27413 }); 27414} 27415function Kh(t, e) { 27416 return new Proxy(t, { 27417 get: (s, r, n) => { 27418 if (r === "__isInsecureUserWarningProxy") 27419 return !0; 27420 if (typeof r == "symbol") { 27421 const o = r.toString(); 27422 if (o === "Symbol(Symbol.toPrimitive)" || o === "Symbol(Symbol.toStringTag)" || o === "Symbol(util.inspect.custom)" || o === "Symbol(nodejs.util.inspect.custom)") 27423 return Reflect.get(s, r, n); 27424 } 27425 return !e.value && typeof r == "string" && (console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."), e.value = !0), Reflect.get(s, r, n); 27426 } 27427 }); 27428} 27429function h6(t) { 27430 return JSON.parse(JSON.stringify(t)); 27431} 27432const F1 = (t) => { 27433 if (typeof t == "object" && t !== null) { 27434 const e = t; 27435 if (typeof e.msg == "string") 27436 return e.msg; 27437 if (typeof e.message == "string") 27438 return e.message; 27439 if (typeof e.error_description == "string") 27440 return e.error_description; 27441 if (typeof e.error == "string") 27442 return e.error; 27443 } 27444 return JSON.stringify(t); 27445}, m6 = [ 27446 500, 27447 501, 27448 502, 27449 503, 27450 504, 27451 520, 27452 521, 27453 522, 27454 523, 27455 524, 27456 525, 27457 526, 27458 527, 27459 528, 27460 529, 27461 530 27462]; 27463async function x6(t) { 27464 var e; 27465 if (!Ph(t)) 27466 throw new s3(F1(t), 0); 27467 let s; 27468 try { 27469 s = await t.json(); 27470 } catch (o) { 27471 throw m6.includes(t.status) ? new s3(t.statusText || `HTTP ${t.status}`, t.status) : new $e(F1(o), o); 27472 } 27473 if (m6.includes(t.status)) 27474 throw new s3(F1(s), t.status); 27475 let r; 27476 const n = qh(t); 27477 if (n && n.getTime() >= Ti["2024-01-01"].timestamp && typeof s == "object" && s && typeof s.code == "string" ? r = s.code : typeof s == "object" && s && typeof s.error_code == "string" && (r = s.error_code), r) { 27478 if (r === "weak_password") 27479 throw new g6(F1(s), t.status, ((e = s.weak_password) === null || e === void 0 ? void 0 : e.reasons) || []); 27480 if (r === "session_not_found") 27481 throw new he(); 27482 } else if (typeof s == "object" && s && typeof s.weak_password == "object" && s.weak_password && Array.isArray(s.weak_password.reasons) && s.weak_password.reasons.length && s.weak_password.reasons.reduce((o, L) => o && typeof L == "string", !0)) 27483 throw new g6(F1(s), t.status, s.weak_password.reasons); 27484 throw new yh(F1(s), t.status || 500, r); 27485} 27486const Yh = (t, e, s, r) => { 27487 const n = { method: t, headers: e?.headers || {} }; 27488 return t === "GET" ? n : (n.headers = Object.assign({ "Content-Type": "application/json;charset=UTF-8" }, e?.headers), n.body = JSON.stringify(r), Object.assign(Object.assign({}, n), s)); 27489}; 27490async function N(t, e, s, r) { 27491 var n; 27492 const o = Object.assign({}, r?.headers); 27493 o[i5] || (o[i5] = Ti["2024-01-01"].name), r?.jwt && (o.Authorization = `Bearer ${r.jwt}`); 27494 const L = (n = r?.query) !== null && n !== void 0 ? n : {}; 27495 r?.redirectTo && (L.redirect_to = r.redirectTo); 27496 const d = Object.keys(L).length ? "?" + new URLSearchParams(L).toString() : "", l = await Xh(t, e, s + d, {
27497 headers: o, 27498 noResolveJson: r?.noResolveJson 27499 }, {}, r?.body); 27500 return r?.xform ? r?.xform(l) : { data: Object.assign({}, l), error: null }; 27501} 27502async function Xh(t, e, s, r, n, o) { 27503 const L = Yh(e, r, n, o); 27504 let d; 27505 try { 27506 d = await t(s, Object.assign({}, L)); 27507 } catch (l) { 27508 throw new s3(F1(l), 0); 27509 } 27510 if (d.ok || await x6(d), r?.noResolveJson) 27511 return d; 27512 try { 27513 return await d.json(); 27514 } catch (l) { 27515 await x6(l); 27516 } 27517} 27518function De(t) { 27519 var e; 27520 let s = null; 27521 tm(t) && (s = Object.assign({}, t), t.expires_at || (s.expires_at = Bi(t.expires_in))); 27522 const r = (e = t.user) !== null && e !== void 0 ? e : typeof t?.id == "string" ? t : null; 27523 return { data: { session: s, user: r }, error: null }; 27524} 27525function _6(t) { 27526 const e = De(t); 27527 return !e.error && t.weak_password && typeof t.weak_password == "object" && Array.isArray(t.weak_password.reasons) && t.weak_password.reasons.length && t.weak_password.message && typeof t.weak_password.message == "string" && t.weak_password.reasons.reduce((s, r) => s && typeof r == "string", !0) && (e.data.weak_password = t.weak_password), e; 27528} 27529function _1(t) { 27530 var e; 27531 return { data: { user: (e = t.user) !== null && e !== void 0 ? e : t }, error: null }; 27532} 27533function Qh(t) { 27534 return { data: t, error: null }; 27535} 27536function em(t) { 27537 const { action_link: e, email_otp: s, hashed_token: r, redirect_to: n, verification_type: o } = t, L = j3(t, ["action_link", "email_otp", "hashed_token", "redirect_to", "verification_type"]), d = { 27538 action_link: e, 27539 email_otp: s, 27540 hashed_token: r, 27541 redirect_to: n, 27542 verification_type: o 27543 }, l = Object.assign({}, L); 27544 return { 27545 data: { 27546 properties: d, 27547 user: l 27548 }, 27549 error: null 27550 }; 27551} 27552function b6(t) { 27553 return t; 27554} 27555function tm(t) { 27556 return !!t.access_token && !!t.refresh_token && !!t.expires_in; 27557} 27558const b4 = ["global", "local", "others"]; 27559class am { 27560 /** 27561 * Creates an admin API client that can be used to manage users and OAuth clients. 27562 * 27563 * @example Using supabase-js (recommended) 27564 * ```ts 27565 * import { createClient } from '@supabase/supabase-js' 27566 * 27567 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-secret-key') 27568 * const { data, error } = await supabase.auth.admin.listUsers() 27569 * ``` 27570 * 27571 * @example Standalone import for bundle-sensitive environments 27572 * ```ts 27573 * import { GoTrueAdminApi } from '@supabase/auth-js' 27574 * 27575 * const admin = new GoTrueAdminApi({ 27576 * url: 'https://xyzcompany.supabase.co/auth/v1', 27577 * headers: { Authorization: `Bearer ${process.env.SUPABASE_SECRET_KEY}` }, 27578 * }) 27579 * ``` 27580 */ 27581 constructor({ url: e = "", headers: s = {}, fetch: r, experimental: n }) { 27582 this.url = e, this.headers = s, this.fetch = Ai(r), this.experimental = n ?? {}, this.mfa = { 27583 listFactors: this._listFactors.bind(this), 27584 deleteFactor: this._deleteFactor.bind(this) 27585 }, this.oauth = { 27586 listClients: this._listOAuthClients.bind(this), 27587 createClient: this._createOAuthClient.bind(this), 27588 getClient: this._getOAuthClient.bind(this), 27589 updateClient: this._updateOAuthClient.bind(this), 27590 deleteClient: this._deleteOAuthClient.bind(this), 27591 regenerateClientSecret: this._regenerateOAuthClientSecret.bind(this) 27592 }, this.customProviders = { 27593 listProviders: this._listCustomProviders.bind(this), 27594 createProvider: this._createCustomProvider.bind(this), 27595 getProvider: this._getCustomProvider.bind(this), 27596 updateProvider: this._updateCustomProvider.bind(this), 27597 deleteProvider: this._deleteCustomProvider.bind(this) 27598 }, this.passkey = { 27599 listPasskeys: this._adminListPasskeys.bind(this), 27600 deletePasskey: this._adminDeletePasskey.bind(this) 27601 }; 27602 } 27603 /** 27604 * Removes a logged-in session. 27605 * @param jwt A valid, logged-in JWT. 27606 * @param scope The logout sope. 27607 * 27608 * @category Auth 27609 * @subcategory Auth Admin 27610 */ 27611 async signOut(e, s = b4[0]) { 27612 if (b4.indexOf(s) < 0) 27613 throw new Error(`@supabase/auth-js: Parameter scope must be one of ${b4.join(", ")}`); 27614 try { 27615 return await N(this.fetch, "POST", `${this.url}/logout?scope=${s}`, { 27616 headers: this.headers, 27617 jwt: e, 27618 noResolveJson: !0 27619 }), { data: null, error: null }; 27620 } catch (r) { 27621 if (B(r)) 27622 return { data: null, error: r }; 27623 throw r; 27624 } 27625 } 27626 /** 27627 * Sends an invite link to an email address. 27628 * @param email The email address of the user. 27629 * @param options Additional options to be included when inviting. 27630 * 27631 * @category Auth 27632 * @subcategory Auth Admin 27633 * 27634 * @remarks 27635 * - Sends an invite link to the user's email address. 27636 * - The `inviteUserByEmail()` method is typically used by administrators to invite users to join the application. 27637 * - Note that PKCE is not supported when using `inviteUserByEmail`. This is because the browser initiating the invite is often different from the browser accepting the invite which makes it difficult to provide the security guarantees required of the PKCE flow. 27638 * 27639 * @example Invite a user 27640 * ```js 27641 * const { data, error } = await supabase.auth.admin.inviteUserByEmail('[email protected]') 27642 * ``` 27643 * 27644 * @exampleResponse Invite a user 27645 * ```json 27646 * { 27647 * "data": { 27648 * "user": { 27649 * "id": "11111111-1111-1111-1111-111111111111", 27650 * "aud": "authenticated", 27651 * "role": "authenticated", 27652 * "email": "[email protected]", 27653 * "invited_at": "2024-01-01T00:00:00Z", 27654 * "phone": "", 27655 * "confirmation_sent_at": "2024-01-01T00:00:00Z", 27656 * "app_metadata": { 27657 * "provider": "email", 27658 * "providers": [ 27659 * "email" 27660 * ] 27661 * }, 27662 * "user_metadata": {}, 27663 * "identities": [ 27664 * { 27665 * "identity_id": "22222222-2222-2222-2222-222222222222", 27666 * "id": "11111111-1111-1111-1111-111111111111", 27667 * "user_id": "11111111-1111-1111-1111-111111111111", 27668 * "identity_data": { 27669 * "email": "[email protected]", 27670 * "email_verified": false, 27671 * "phone_verified": false, 27672 * "sub": "11111111-1111-1111-1111-111111111111" 27673 * }, 27674 * "provider": "email", 27675 * "last_sign_in_at": "2024-01-01T00:00:00Z", 27676 * "created_at": "2024-01-01T00:00:00Z", 27677 * "updated_at": "2024-01-01T00:00:00Z", 27678 * "email": "[email protected]" 27679 * } 27680 * ], 27681 * "created_at": "2024-01-01T00:00:00Z", 27682 * "updated_at": "2024-01-01T00:00:00Z", 27683 * "is_anonymous": false 27684 * } 27685 * }, 27686 * "error": null 27687 * } 27688 * ``` 27689 */
27690 async inviteUserByEmail(e, s = {}) { 27691 try { 27692 return await N(this.fetch, "POST", `${this.url}/invite`, { 27693 body: { email: e, data: s.data }, 27694 headers: this.headers, 27695 redirectTo: s.redirectTo, 27696 xform: _1 27697 }); 27698 } catch (r) { 27699 if (B(r)) 27700 return { data: { user: null }, error: r }; 27701 throw r; 27702 } 27703 } 27704 /** 27705 * Generates email links and OTPs to be sent via a custom email provider. 27706 * @param params The parameters for generating the link, including the link `type`, the user's `email`, and type-specific options such as `password`, `data`, and `redirectTo`. 27707 * 27708 * @category Auth 27709 * @subcategory Auth Admin 27710 * 27711 * @remarks 27712 * - The following types can be passed into `generateLink()`: `signup`, `magiclink`, `invite`, `recovery`, `email_change_current`, `email_change_new`, `phone_change`. 27713 * - `generateLink()` only generates the email link for `email_change_email` if the **Secure email change** is enabled in your project's [email auth provider settings](/dashboard/project/_/auth/providers). 27714 * - `generateLink()` handles the creation of the user for `signup`, `invite` and `magiclink`. 27715 * 27716 * @example Generate a signup link 27717 * ```js 27718 * const { data, error } = await supabase.auth.admin.generateLink({ 27719 * type: 'signup', 27720 * email: '[email protected]', 27721 * password: 'secret' 27722 * }) 27723 * ``` 27724 * 27725 * @exampleResponse Generate a signup link 27726 * ```json 27727 * { 27728 * "data": { 27729 * "properties": { 27730 * "action_link": "<LINK_TO_SEND_TO_USER>", 27731 * "email_otp": "999999", 27732 * "hashed_token": "<HASHED_TOKEN", 27733 * "redirect_to": "<REDIRECT_URL>", 27734 * "verification_type": "signup" 27735 * }, 27736 * "user": { 27737 * "id": "11111111-1111-1111-1111-111111111111", 27738 * "aud": "authenticated", 27739 * "role": "authenticated", 27740 * "email": "[email protected]", 27741 * "phone": "", 27742 * "confirmation_sent_at": "2024-01-01T00:00:00Z", 27743 * "app_metadata": { 27744 * "provider": "email", 27745 * "providers": [ 27746 * "email" 27747 * ] 27748 * }, 27749 * "user_metadata": {}, 27750 * "identities": [ 27751 * { 27752 * "identity_id": "22222222-2222-2222-2222-222222222222", 27753 * "id": "11111111-1111-1111-1111-111111111111", 27754 * "user_id": "11111111-1111-1111-1111-111111111111", 27755 * "identity_data": { 27756 * "email": "[email protected]", 27757 * "email_verified": false, 27758 * "phone_verified": false, 27759 * "sub": "11111111-1111-1111-1111-111111111111" 27760 * }, 27761 * "provider": "email", 27762 * "last_sign_in_at": "2024-01-01T00:00:00Z", 27763 * "created_at": "2024-01-01T00:00:00Z", 27764 * "updated_at": "2024-01-01T00:00:00Z", 27765 * "email": "[email protected]" 27766 * } 27767 * ], 27768 * "created_at": "2024-01-01T00:00:00Z", 27769 * "updated_at": "2024-01-01T00:00:00Z", 27770 * "is_anonymous": false 27771 * } 27772 * }, 27773 * "error": null 27774 * } 27775 * ``` 27776 * 27777 * @example Generate an invite link 27778 * ```js 27779 * const { data, error } = await supabase.auth.admin.generateLink({ 27780 * type: 'invite', 27781 * email: '[email protected]' 27782 * }) 27783 * ``` 27784 * 27785 * @example Generate a magic link 27786 * ```js 27787 * const { data, error } = await supabase.auth.admin.generateLink({ 27788 * type: 'magiclink', 27789 * email: '[email protected]' 27790 * }) 27791 * ``` 27792 * 27793 * @example Generate a recovery link 27794 * ```js 27795 * const { data, error } = await supabase.auth.admin.generateLink({ 27796 * type: 'recovery', 27797 * email: '[email protected]' 27798 * }) 27799 * ``` 27800 * 27801 * @example Generate links to change current email address 27802 * ```js 27803 * // generate an email change link to be sent to the current email address 27804 * const { data, error } = await supabase.auth.admin.generateLink({ 27805 * type: 'email_change_current', 27806 * email: '[email protected]', 27807 * newEmail: '[email protected]' 27808 * }) 27809 * 27810 * // generate an email change link to be sent to the new email address 27811 * const { data, error } = await supabase.auth.admin.generateLink({ 27812 * type: 'email_change_new', 27813 * email: '[email protected]', 27814 * newEmail: '[email protected]' 27815 * }) 27816 * ``` 27817 */ 27818 async generateLink(e) { 27819 try { 27820 const { options: s } = e, r = j3(e, ["options"]), n = Object.assign(Object.assign({}, r), s); 27821 return "newEmail" in r && (n.new_email = r?.newEmail, delete n.newEmail), await N(this.fetch, "POST", `${this.url}/admin/generate_link`, { 27822 body: n, 27823 headers: this.headers, 27824 xform: em, 27825 redirectTo: s?.redirectTo 27826 }); 27827 } catch (s) { 27828 if (B(s)) 27829 return { 27830 data: { 27831 properties: null, 27832 user: null 27833 }, 27834 error: s 27835 }; 27836 throw s; 27837 } 27838 } 27839 // User Admin API 27840 /** 27841 * Creates a new user. 27842 * This function should only be called on a server. Never expose your `service_role` key in the browser. 27843 * 27844 * @category Auth 27845 * @subcategory Auth Admin 27846 * 27847 * @remarks 27848 * - To confirm the user's email address or phone number, set `email_confirm` or `phone_confirm` to true. Both arguments default to false. 27849 * - `createUser()` will not send a confirmation email to the user. You can use [`inv
27849iteUserByEmail()`](/docs/reference/javascript/auth-admin-inviteuserbyemail) if you want to send them an email invite instead. 27850 * - If you are sure that the created user's email or phone number is legitimate and verified, you can set the `email_confirm` or `phone_confirm` param to `true`. 27851 * 27852 * @example With custom user metadata 27853 * ```js 27854 * const { data, error } = await supabase.auth.admin.createUser({ 27855 * email: '[email protected]', 27856 * password: 'password', 27857 * user_metadata: { name: 'Yoda' } 27858 * }) 27859 * ``` 27860 * 27861 * @exampleResponse With custom user metadata 27862 * ```json 27863 * { 27864 * data: { 27865 * user: { 27866 * id: '1', 27867 * aud: 'authenticated', 27868 * role: 'authenticated', 27869 * email: '[email protected]', 27870 * email_confirmed_at: '2024-01-01T00:00:00Z', 27871 * phone: '', 27872 * confirmation_sent_at: '2024-01-01T00:00:00Z', 27873 * confirmed_at: '2024-01-01T00:00:00Z', 27874 * last_sign_in_at: '2024-01-01T00:00:00Z', 27875 * app_metadata: {}, 27876 * user_metadata: {}, 27877 * identities: [ 27878 * { 27879 * "identity_id": "22222222-2222-2222-2222-222222222222", 27880 * "id": "1", 27881 * "user_id": "1", 27882 * "identity_data": { 27883 * "email": "[email protected]", 27884 * "email_verified": true, 27885 * "phone_verified": false, 27886 * "sub": "1" 27887 * }, 27888 * "provider": "email", 27889 * "last_sign_in_at": "2024-01-01T00:00:00Z", 27890 * "created_at": "2024-01-01T00:00:00Z", 27891 * "updated_at": "2024-01-01T00:00:00Z", 27892 * "email": "[email protected]" 27893 * }, 27894 * ], 27895 * created_at: '2024-01-01T00:00:00Z', 27896 * updated_at: '2024-01-01T00:00:00Z', 27897 * is_anonymous: false, 27898 * } 27899 * } 27900 * error: null 27901 * } 27902 * ``` 27903 * 27904 * @example Auto-confirm the user's email 27905 * ```js 27906 * const { data, error } = await supabase.auth.admin.createUser({ 27907 * email: '[email protected]', 27908 * email_confirm: true 27909 * }) 27910 * ``` 27911 * 27912 * @example Auto-confirm the user's phone number 27913 * ```js 27914 * const { data, error } = await supabase.auth.admin.createUser({ 27915 * phone: '1234567890', 27916 * phone_confirm: true 27917 * }) 27918 * ``` 27919 */ 27920 async createUser(e) { 27921 try { 27922 return await N(this.fetch, "POST", `${this.url}/admin/users`, { 27923 body: e, 27924 headers: this.headers, 27925 xform: _1 27926 }); 27927 } catch (s) { 27928 if (B(s)) 27929 return { data: { user: null }, error: s }; 27930 throw s; 27931 } 27932 } 27933 /** 27934 * Get a list of users. 27935 * 27936 * This function should only be called on a server. Never expose your `service_role` key in the browser. 27937 * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results. 27938 * 27939 * @category Auth 27940 * @subcategory Auth Admin 27941 * 27942 * @remarks 27943 * - Defaults to return 50 users per page. 27944 * 27945 * @example Get a page of users 27946 * ```js 27947 * const { data: { users }, error } = await supabase.auth.admin.listUsers() 27948 * ``` 27949 * 27950 * @example Paginated list of users 27951 * ```js 27952 * const { data: { users }, error } = await supabase.auth.admin.listUsers({ 27953 * page: 1, 27954 * perPage: 1000 27955 * }) 27956 * ``` 27957 */ 27958 async listUsers(e) { 27959 var s, r, n, o, L, d, l; 27960 try { 27961 const g = { nextPage: null, lastPage: 0, total: 0 }, f = await N(this.fetch, "GET", `${this.url}/admin/users`, { 27962 headers: this.headers, 27963 noResolveJson: !0, 27964 query: { 27965 page: (r = (s = e?.page) === null || s === void 0 ? void 0 : s.toString()) !== null && r !== void 0 ? r : "", 27966 per_page: (o = (n = e?.perPage) === null || n === void 0 ? void 0 : n.toString()) !== null && o !== void 0 ? o : "" 27967 }, 27968 xform: b6 27969 }); 27970 if (f.error) 27971 throw f.error; 27972 const p = await f.json(), M = (L = f.headers.get("x-total-count")) !== null && L !== void 0 ? L : 0, u = (l = (d = f.headers.get("link")) === null || d === void 0 ? void 0 : d.split(",")) !== null && l !== void 0 ? l : []; 27973 return u.length > 0 && (u.forEach((h) => { 27974 const x = parseInt(h.split(";")[0].split("=")[1].substring(0, 1)), _ = JSON.parse(h.split(";")[1].split("=")[1]); 27975 g[`${_}
27975Page`] = x; 27976 }), g.total = parseInt(M)), { data: Object.assign(Object.assign({}, p), g), error: null }; 27977 } catch (g) { 27978 if (B(g)) 27979 return { data: { users: [] }, error: g }; 27980 throw g; 27981 } 27982 } 27983 /** 27984 * Get user by id. 27985 * 27986 * @param uid The user's unique identifier 27987 * 27988 * This function should only be called on a server. Never expose your `service_role` key in the browser. 27989 * 27990 * @category Auth 27991 * @subcategory Auth Admin 27992 * 27993 * @remarks 27994 * - Fetches the user object from the database based on the user's id. 27995 * - The `getUserById()` method requires the user's id which maps to the `auth.users.id` column. 27996 * 27997 * @example Fetch the user object using the access_token jwt 27998 * ```js 27999 * const { data, error } = await supabase.auth.admin.getUserById(1) 28000 * ``` 28001 * 28002 * @exampleResponse Fetch the user object using the access_token jwt 28003 * ```json 28004 * { 28005 * data: { 28006 * user: { 28007 * id: '1', 28008 * aud: 'authenticated', 28009 * role: 'authenticated', 28010 * email: '[email protected]', 28011 * email_confirmed_at: '2024-01-01T00:00:00Z', 28012 * phone: '', 28013 * confirmation_sent_at: '2024-01-01T00:00:00Z', 28014 * confirmed_at: '2024-01-01T00:00:00Z', 28015 * last_sign_in_at: '2024-01-01T00:00:00Z', 28016 * app_metadata: {}, 28017 * user_metadata: {}, 28018 * identities: [ 28019 * { 28020 * "identity_id": "22222222-2222-2222-2222-222222222222", 28021 * "id": "1", 28022 * "user_id": "1", 28023 * "identity_data": { 28024 * "email": "[email protected]", 28025 * "email_verified": true, 28026 * "phone_verified": false, 28027 * "sub": "1" 28028 * }, 28029 * "provider": "email", 28030 * "last_sign_in_at": "2024-01-01T00:00:00Z", 28031 * "created_at": "2024-01-01T00:00:00Z", 28032 * "updated_at": "2024-01-01T00:00:00Z", 28033 * "email": "[email protected]" 28034 * }, 28035 * ], 28036 * created_at: '2024-01-01T00:00:00Z', 28037 * updated_at: '2024-01-01T00:00:00Z', 28038 * is_anonymous: false, 28039 * } 28040 * } 28041 * error: null 28042 * } 28043 * ``` 28044 */ 28045 async getUserById(e) { 28046 L1(e); 28047 try { 28048 return await N(this.fetch, "GET", `${this.url}/admin/users/${e}`, { 28049 headers: this.headers, 28050 xform: _1 28051 }); 28052 } catch (s) { 28053 if (B(s)) 28054 return { data: { user: null }, error: s }; 28055 throw s; 28056 } 28057 } 28058 /** 28059 * Updates the user data. Changes are applied directly without confirmation flows. 28060 * 28061 * @param uid The user's unique identifier 28062 * @param attributes The data you want to update. 28063 * 28064 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28065 * 28066 * @remarks 28067 * **Important:** This is a server-side operation and does **not** trigger client-side 28068 * `onAuthStateChange` listeners. The admin API has no connection to client state. 28069 * 28070 * To sync changes to the client after calling this method: 28071 * 1. On the client, call `supabase.auth.refreshSession()` to fetch the updated user data 28072 * 2. This will trigger the `TOKEN_REFRESHED` event and notify all listeners 28073 * 28074 * @example 28075 * ```typescript 28076 * // Server-side (Edge Function) 28077 * const { data, error } = await supabase.auth.admin.updateUserById( 28078 * userId, 28079 * { user_metadata: { preferences: { theme: 'dark' } } } 28080 * ) 28081 * 28082 * // Client-side (to sync the changes) 28083 * const { data, error } = await supabase.auth.refreshSession() 28084 * // onAuthStateChange listeners will now be notified with updated user 28085 * ``` 28086 * 28087 * @see {@link GoTrueClient.refreshSession} for syncing admin changes to the client 28088 * @see {@link GoTrueClient.updateUser} for client-side user updates (triggers listeners automatically) 28089 * 28090 * @category Auth 28091 * @subcategory Auth Admin 28092 * 28093 * @example Updates a user's email 28094 * ```js 28095 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28096 * '11111111-1111-1111-1111-111111111111', 28097 * { email: '[email protected]' } 28098 * ) 28099 * ``` 28100 * 28101 * @exampleResponse Updates a user's email 28102 * ```json 28103 * { 28104 * "data": { 28105 * "user": { 28106 * "id": "11111111-1111-1111-1111-111111111111", 28107 * "aud": "authenticated", 28108 * "role": "authenticated", 28109 * "email": "[email protected]", 28110 * "email_confirmed_at": "2024-01-01T00:00:00Z", 28111 * "phone": "", 28112 * "confirmed_at": "2024-01-01T00:00:00Z", 28113 * "recovery_sent_at": "2024-01-01T00:00:00Z", 28114 * "last_sign_in_at": "2024-01-01T00:00:00Z", 28115 * "app_metadata": { 28116 * "provider": "email", 28117 * "providers": [ 28118 * "email" 28119 * ] 28120 * }, 28121 * "user_metadata": { 28122 * "email": "[email protected]", 28123 * "email_verified": false, 28124 * "phone_verified": false, 28125 * "sub": "11111111-1111-1111-1111-111111111111" 28126 * }, 28127 * "identities": [ 28128 * { 28129 * "identity_id": "22222222-2222-2222-2222-222222222222", 28130 * "id": "11111111-1111-1111-1111-111111111111", 28131 * "user_id": "11111111-1111-1111-1111-111111111111", 28132 * "identity_data": { 28133 * "email": "[email protected]", 28134 * "email_verified": false, 28135 * "phone_verified": false, 28136 * "sub": "11111111-1111-1111-1111-111111111111" 28137 * }, 28138 * "provider": "email", 28139 * "last_sign_in_at": "2024-01-01T00:00:00Z", 28140 * "created_at": "2024-01-01T00:00:00Z", 28141 * "updated_at": "2024-01-01T00:00:00Z", 28142 * "email": "[email protected]" 28143 * } 28144 * ], 28145 * "created_at": "2024-01-01T00:00:00Z", 28146 * "updated_at": "2024-01-01T00:00:00Z", 28147 * "is_anonymous": false 28148 * } 28149 * }, 28150 * "error": null 28151 * } 28152 * ``` 28153 * 28154 * @example Updates a user's password 28155 * ```js 28156 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28157 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28158 * { password: 'new_password' } 28159 * ) 28160 * ``` 28161 * 28162 * @example Updates a user's metadata 28163 * ```js 28164 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28165 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28166 * { user_metadata: { hello: 'world' } } 28167 * ) 28168 * ``` 28169 * 28170 * @example Updates a user's app_metadata 28171 * ```js 28172 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28173 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28174 * { app_metadata: { plan: 'trial' } } 28175 * ) 28176 * ``` 28177 * 28178 * @example Confirms a user's email address 28179 * ```js 28180 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28181 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28182 * { email_confirm: true } 28183 * ) 28184 * ``` 28185 * 28186 * @example Confirms a user's phone number 28187 * ```js 28188 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28189 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28190 * { phone_confirm: true } 28191 * ) 28192 * ``` 28193 * 28194 * @example Ban a user for 100 years 28195 * ```js 28196 * const { data: user, error } = await supabase.auth.admin.updateUserById( 28197 * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4', 28198 * { ban_duration: '876000h' } 28199 * ) 28200 * ``` 28201 */ 28202 async updateUserById(e, s) { 28203 L1(e); 28204 try { 28205 return await N(this.fetch, "PUT", `${this.url}/admin/users/${e}`, { 28206 body: s, 28207 headers: this.headers, 28208 xform: _1 28209 }); 28210 } catch (r) { 28211 if (B(r)) 28212 return { data: { user: null }, error: r }; 28213 throw r; 28214 } 28215 } 28216 /** 28217 * Delete a user. Requires a `service_role` key. 28218 * 28219 * @param id The user id you want to remove. 28220 * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible. 28221 * Defaults to false for backward compatibility. 28222 * 28223 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28224 * 28225 * @category Auth 28226 * @subcategory Auth Admin 28227 * 28228 * @remarks 28229 * - The `deleteUser()` method requires the user's ID, which maps to the `auth.users.id` column. 28230 * 28231 * @example Removes a user 28232 * ```js 28233 * const { data, error } = await supabase.auth.admin.deleteUser( 28234 * '715ed5db-f090-4b8c-a067-640ecee36aa0' 28235 * ) 28236 * ``` 28237 * 28238 * @exampleResponse Removes a user 28239 * ```json 28240 * { 28241 * "data": { 28242 * "user": {} 28243 * }, 28244 * "error": null 28245 * } 28246 * ``` 28247 */ 28248 async deleteUser(e, s = !1) { 28249 L1(e); 28250 try {
28251 return await N(this.fetch, "DELETE", `${this.url}/admin/users/${e}`, { 28252 headers: this.headers, 28253 body: { 28254 should_soft_delete: s 28255 }, 28256 xform: _1 28257 }); 28258 } catch (r) { 28259 if (B(r)) 28260 return { data: { user: null }, error: r }; 28261 throw r; 28262 } 28263 } 28264 async _listFactors(e) { 28265 L1(e.userId); 28266 try { 28267 const { data: s, error: r } = await N(this.fetch, "GET", `${this.url}/admin/users/${e.userId}/factors`, { 28268 headers: this.headers, 28269 xform: (n) => ({ data: { factors: n }, error: null }) 28270 }); 28271 return { data: s, error: r }; 28272 } catch (s) { 28273 if (B(s)) 28274 return { data: null, error: s }; 28275 throw s; 28276 } 28277 } 28278 async _deleteFactor(e) { 28279 L1(e.userId), L1(e.id); 28280 try { 28281 return { data: await N(this.fetch, "DELETE", `${this.url}/admin/users/${e.userId}/factors/${e.id}`, { 28282 headers: this.headers 28283 }), error: null }; 28284 } catch (s) { 28285 if (B(s)) 28286 return { data: null, error: s }; 28287 throw s; 28288 } 28289 } 28290 /** 28291 * Lists all OAuth clients with optional pagination. 28292 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28293 * 28294 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28295 */ 28296 async _listOAuthClients(e) { 28297 var s, r, n, o, L, d, l; 28298 try { 28299 const g = { nextPage: null, lastPage: 0, total: 0 }, f = await N(this.fetch, "GET", `${this.url}/admin/oauth/clients`, { 28300 headers: this.headers, 28301 noResolveJson: !0, 28302 query: { 28303 page: (r = (s = e?.page) === null || s === void 0 ? void 0 : s.toString()) !== null && r !== void 0 ? r : "", 28304 per_page: (o = (n = e?.perPage) === null || n === void 0 ? void 0 : n.toString()) !== null && o !== void 0 ? o : "" 28305 }, 28306 xform: b6 28307 }); 28308 if (f.error) 28309 throw f.error; 28310 const p = await f.json(), M = (L = f.headers.get("x-total-count")) !== null && L !== void 0 ? L : 0, u = (l = (d = f.headers.get("link")) === null || d === void 0 ? void 0 : d.split(",")) !== null && l !== void 0 ? l : []; 28311 return u.length > 0 && (u.forEach((h) => { 28312 const x = parseInt(h.split(";")[0].split("=")[1].substring(0, 1)), _ = JSON.parse(h.split(";")[1].split("=")[1]); 28313 g[`${_}Page`] = x; 28314 }), g.total = parseInt(M)), { data: Object.assign(Object.assign({}, p), g), error: null }; 28315 } catch (g) { 28316 if (B(g)) 28317 return { data: { clients: [] }, error: g }; 28318 throw g; 28319 } 28320 } 28321 /** 28322 * Creates a new OAuth client. 28323 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28324 * 28325 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28326 */ 28327 async _createOAuthClient(e) { 28328 try { 28329 return await N(this.fetch, "POST", `${this.url}/admin/oauth/clients`, { 28330 body: e, 28331 headers: this.headers, 28332 xform: (s) => ({ data: s, error: null }) 28333 }); 28334 } catch (s) { 28335 if (B(s)) 28336 return { data: null, error: s }; 28337 throw s; 28338 } 28339 } 28340 /** 28341 * Gets details of a specific OAuth client. 28342 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28343 * 28344 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28345 */ 28346 async _getOAuthClient(e) { 28347 try { 28348 return await N(this.fetch, "GET", `${this.url}/admin/oauth/clients/${e}`, { 28349 headers: this.headers, 28350 xform: (s) => ({ data: s, error: null }) 28351 }); 28352 } catch (s) { 28353 if (B(s)) 28354 return { data: null, error: s }; 28355 throw s; 28356 } 28357 } 28358 /** 28359 * Updates an existing OAuth client. 28360 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28361 * 28362 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28363 */ 28364 async _updateOAuthClient(e, s) { 28365 try { 28366 return await N(this.fetch, "PUT", `${this.url}/admin/oauth/clients/${e}`, { 28367 body: s, 28368 headers: this.headers, 28369 xform: (r) => ({ data: r, error: null }) 28370 }); 28371 } catch (r) { 28372 if (B(r)) 28373 return { data: null, error: r }; 28374 throw r; 28375 } 28376 } 28377 /** 28378 * Deletes an OAuth client. 28379 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28380 * 28381 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28382 */ 28383 async _deleteOAuthClient(e) { 28384 try {
28385 return await N(this.fetch, "DELETE", `${this.url}/admin/oauth/clients/${e}`, { 28386 headers: this.headers, 28387 noResolveJson: !0 28388 }), { data: null, error: null }; 28389 } catch (s) { 28390 if (B(s)) 28391 return { data: null, error: s }; 28392 throw s; 28393 } 28394 } 28395 /** 28396 * Regenerates the secret for an OAuth client. 28397 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 28398 * 28399 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28400 */ 28401 async _regenerateOAuthClientSecret(e) { 28402 try { 28403 return await N(this.fetch, "POST", `${this.url}/admin/oauth/clients/${e}/regenerate_secret`, { 28404 headers: this.headers, 28405 xform: (s) => ({ data: s, error: null }) 28406 }); 28407 } catch (s) { 28408 if (B(s)) 28409 return { data: null, error: s }; 28410 throw s; 28411 } 28412 } 28413 /** 28414 * Lists all custom providers with optional type filter. 28415 * 28416 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28417 */ 28418 async _listCustomProviders(e) { 28419 try { 28420 const s = {}; 28421 return e?.type && (s.type = e.type), await N(this.fetch, "GET", `${this.url}/admin/custom-providers`, { 28422 headers: this.headers, 28423 query: s, 28424 xform: (r) => { 28425 var n; 28426 return { data: { providers: (n = r?.providers) !== null && n !== void 0 ? n : [] }, error: null }; 28427 } 28428 }); 28429 } catch (s) { 28430 if (B(s)) 28431 return { data: { providers: [] }, error: s }; 28432 throw s; 28433 } 28434 } 28435 /** 28436 * Creates a new custom OIDC/OAuth provider. 28437 * 28438 * For OIDC providers, the server fetches and validates the OpenID Connect discovery document 28439 * from the issuer's well-known endpoint (or the provided `discovery_url`) at creation time. 28440 * This may return a validation error (`error_code: "validation_failed"`) if the discovery 28441 * document is unreachable, not valid JSON, missing required fields, or if the issuer 28442 * in the document does not match the expected issuer. 28443 * 28444 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28445 */ 28446 async _createCustomProvider(e) { 28447 try { 28448 return await N(this.fetch, "POST", `${this.url}/admin/custom-providers`, { 28449 body: e, 28450 headers: this.headers, 28451 xform: (s) => ({ data: s, error: null }) 28452 }); 28453 } catch (s) { 28454 if (B(s)) 28455 return { data: null, error: s }; 28456 throw s; 28457 } 28458 } 28459 /** 28460 * Gets details of a specific custom provider by identifier. 28461 * 28462 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28463 */ 28464 async _getCustomProvider(e) { 28465 try { 28466 return await N(this.fetch, "GET", `${this.url}/admin/custom-providers/${e}`, { 28467 headers: this.headers, 28468 xform: (s) => ({ data: s, error: null }) 28469 }); 28470 } catch (s) { 28471 if (B(s)) 28472 return { data: null, error: s }; 28473 throw s; 28474 } 28475 } 28476 /** 28477 * Updates an existing custom provider. 28478 * 28479 * When `issuer` or `discovery_url` is changed on an OIDC provider, the server re-fetches and 28480 * validates the discovery document before persisting. This may return a validation error 28481 * (`error_code: "validation_failed"`) if the discovery document is unreachable, invalid, or 28482 * the issuer does not match. 28483 * 28484 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28485 */ 28486 async _updateCustomProvider(e, s) { 28487 try { 28488 return await N(this.fetch, "PUT", `${this.url}/admin/custom-providers/${e}`, { 28489 body: s, 28490 headers: this.headers, 28491 xform: (r) => ({ data: r, error: null }) 28492 }); 28493 } catch (r) { 28494 if (B(r)) 28495 return { data: null, error: r }; 28496 throw r; 28497 } 28498 } 28499 /** 28500 * Deletes a custom provider. 28501 * 28502 * This function should only be called on a server. Never expose your `service_role` key in the browser. 28503 */ 28504 async _deleteCustomProvider(e) { 28505 try { 28506 return await N(this.fetch, "DELETE", `${this.url}/admin/custom-providers/${e}`, { 28507 headers: this.headers, 28508 noResolveJson: !0 28509 }), { data: null, error: null }; 28510 } catch (s) { 28511 if (B(s)) 28512 return { data: null, error: s }; 28513 throw s; 28514 } 28515 } 28516 /** 28517 * Lists all passkeys for a user. 28518 * 28519 * This function should only be called on a server. Never expose your secret key in the browser. 28520 */ 28521 async _adminListPasskeys(e) { 28522 L1(e.userId); 28523 try { 28524 return await N(this.fetch, "GET", `${this.url}/admin/users/${e.userId}/passkeys`, { headers: this.headers, xform: (s) => ({ data: s, error: null }) }); 28525 } catch (s) { 28526 if (B(s)) 28527 return { data: null, error: s }; 28528 throw s; 28529 } 28530 } 28531 /** 28532 * Deletes a user's passkey. 28533 * 28534 * This function should only be called on a server. Never expose your secret key in the browser. 28535 */ 28536 async _adminDeletePasskey(e) { 28537 L1(e.userId), L1(e.passkeyId); 28538 try {
28539 return await N(this.fetch, "DELETE", `${this.url}/admin/users/${e.userId}/passkeys/${e.passkeyId}`, { headers: this.headers, noResolveJson: !0 }), { data: null, error: null }; 28540 } catch (s) { 28541 if (B(s)) 28542 return { data: null, error: s }; 28543 throw s; 28544 } 28545 } 28546} 28547function v6(t = {}) { 28548 return { 28549 getItem: (e) => t[e] || null, 28550 setItem: (e, s) => { 28551 t[e] = s; 28552 }, 28553 removeItem: (e) => { 28554 delete t[e]; 28555 } 28556 }; 28557} 28558globalThis && ki() && globalThis.localStorage && globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug"); 28559class sm extends Error { 28560 constructor(e) { 28561 super(e), this.isAcquireTimeout = !0; 28562 } 28563} 28564function im() { 28565 if (typeof globalThis != "object") 28566 try { 28567 Object.defineProperty(Object.prototype, "__magic__", { 28568 get: function() { 28569 return this; 28570 }, 28571 configurable: !0 28572 }), __magic__.globalThis = __magic__, delete Object.prototype.__magic__; 28573 } catch { 28574 typeof self < "u" && (self.globalThis = self); 28575 } 28576} 28577function Ii(t) { 28578 if (!/^0x[a-fA-F0-9]{40}$/.test(t)) 28579 throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`); 28580 return t.toLowerCase(); 28581} 28582function rm(t) { 28583 return parseInt(t, 16); 28584} 28585function nm(t) { 28586 const e = new TextEncoder().encode(t); 28587 return "0x" + Array.from(e, (r) => r.toString(16).padStart(2, "0")).join(""); 28588} 28589function om(t) { 28590 var e; 28591 const { chainId: s, domain: r, expirationTime: n, issuedAt: o = /* @__PURE__ */ new Date(), nonce: L, notBefore: d, requestId: l, resources: g, scheme: f, uri: p, version: M } = t; 28592 { 28593 if (!Number.isInteger(s)) 28594 throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${s}`); 28595 if (!r) 28596 throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.'); 28597 if (L && L.length < 8) 28598 throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${L}`); 28599 if (!p) 28600 throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.'); 28601 if (M !== "1") 28602 throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${M}`); 28603 if (!((e = t.statement) === null || e === void 0) && e.includes(` 28604`)) 28605 throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`); 28606 } 28607 const u = Ii(t.address), h = f ? `${f}://${r}` : r, x = t.statement ? `${t.statement} 28608` : "", _ = `${h} wants you to sign in with your Ethereum account: 28609${u} 28610 28611${x}`; 28612 let v = `URI: ${p} 28613Version: ${M} 28614Chain ID: ${s}${L ? ` 28615Nonce: ${L}` : ""} 28616Issued At: ${o.toISOString()}`; 28617 if (n && (v += ` 28618Expiration Time: ${n.toISOString()}`), d && (v += ` 28619Not Before: ${d.toISOString()}`), l && (v += ` 28620Request ID: ${l}`), g) { 28621 let y = ` 28622Resources:`; 28623 for (const b of g) { 28624 if (!b || typeof b != "string") 28625 throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${b}`); 28626 y += ` 28627- ${b}`; 28628 } 28629 v += y; 28630 } 28631 return `${_} 28632${v}`; 28633} 28634class de extends Error { 28635 constructor({ message: e, code: s, cause: r, name: n }) { 28636 var o; 28637 super(e, { cause: r }), this.__isWebAuthnError = !0, this.name = (o = n ?? (r instanceof Error ? r.name : void 0)) !== null && o !== void 0 ? o : "Unknown Error", this.code = s; 28638 } 28639 toJSON() { 28640 return { 28641 name: this.name, 28642 message: this.message, 28643 code: this.code 28644 }; 28645 } 28646} 28647class M3 extends de { 28648 constructor(e, s) { 28649 super({ 28650 code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY", 28651 cause: s, 28652 message: e 28653 }), this.name = "WebAuthnUnknownError", this.originalError = s; 28654 } 28655} 28656function Lm({ error: t, options: e }) { 28657 var s, r, n; 28658 const { publicKey: o } = e; 28659 if (!o) 28660 throw Error("options was missing required publicKey property"); 28661 if (t.name === "AbortError") { 28662 if (e.signal instanceof AbortSignal) 28663 return new de({ 28664 message: "Registration ceremony was sent an abort signal", 28665 code: "ERROR_CEREMONY_ABORTED", 28666 cause: t 28667 }); 28668 } else if (t.name === "ConstraintError") { 28669 if (((s = o.authenticatorSelection) === null || s === void 0 ? void 0 : s.requireResidentKey) === !0) 28670 return new de({ 28671 message: "Discoverable credentials were required but no available authenticator supported it", 28672 code: "ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT", 28673 cause: t 28674 }); 28675 if ( 28676 // @ts-ignore: `mediation` doesn't yet exist on CredentialCreationOptions but it's possible as of Sept 2024 28677 e.mediation === "conditional" && ((r = o.authenticatorSelection) === null || r === void 0 ? void 0 : r.userVerification) === "required" 28678 ) 28679 return new de({ 28680 message: "User verification was required during automatic registration but it could not be performed", 28681 code: "ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE", 28682 cause: t 28683 }); 28684 if (((n = o.authenticatorSelection) === null || n === void 0 ? void 0 : n.userVerification) === "required") 28685 return new de({ 28686 message: "User verification was required but no available authenticator supported it", 28687 code: "ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT", 28688 cause: t 28689 }); 28690 } else { 28691 if (t.name === "InvalidStateError") 28692 return new de({ 28693 message: "The authenticator was previously registered", 28694 code: "ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED", 28695 cause: t 28696 }); 28697 if (t.name === "NotAllowedError") 28698 return new de({ 28699 message: t.message, 28700 code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY", 28701 cause: t 28702 }); 28703 if (t.name === "NotSupportedError") 28704 return o.pubKeyCredParams.filter((d) => d.type === "public-key").length === 0 ? new de({ 28705 message: 'No entry in pubKeyCredParams was of type "public-key"', 28706 code: "ERROR_MALFORMED_PUBKEYCREDPARAMS", 28707 cause: t 28708 }) : new de({ 28709 message: "No available authenticator supported any of the specified pubKeyCredParams algorithms", 28710 code: "ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG", 28711 cause: t 28712 }); 28713 if (t.name === "SecurityError") { 28714 const L = window.location.hostname; 28715 if (Pi(L)) { 28716 if (o.rp.id !== L) 28717 return new de({ 28718 message: `The RP ID "${o.rp.id}
28718" is invalid for this domain`, 28719 code: "ERROR_INVALID_RP_ID", 28720 cause: t 28721 }); 28722 } else return new de({ 28723 message: `${window.location.hostname} is an invalid domain`, 28724 code: "ERROR_INVALID_DOMAIN", 28725 cause: t 28726 }); 28727 } else if (t.name === "TypeError") { 28728 if (o.user.id.byteLength < 1 || o.user.id.byteLength > 64) 28729 return new de({ 28730 message: "User ID was not between 1 and 64 characters", 28731 code: "ERROR_INVALID_USER_ID_LENGTH", 28732 cause: t 28733 }); 28734 } else if (t.name === "UnknownError") 28735 return new de({ 28736 message: "The authenticator was unable to process the specified options, or could not create a new credential", 28737 code: "ERROR_AUTHENTICATOR_GENERAL_ERROR", 28738 cause: t 28739 }); 28740 } 28741 return new de({ 28742 message: "a Non-Webauthn related error has occurred", 28743 code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY", 28744 cause: t 28745 }); 28746} 28747function cm({ error: t, options: e }) { 28748 const { publicKey: s } = e; 28749 if (!s) 28750 throw Error("options was missing required publicKey property"); 28751 if (t.name === "AbortError") { 28752 if (e.signal instanceof AbortSignal) 28753 return new de({ 28754 message: "Authentication ceremony was sent an abort signal", 28755 code: "ERROR_CEREMONY_ABORTED", 28756 cause: t 28757 }); 28758 } else { 28759 if (t.name === "NotAllowedError") 28760 return new de({ 28761 message: t.message, 28762 code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY", 28763 cause: t 28764 }); 28765 if (t.name === "SecurityError") { 28766 const r = window.location.hostname; 28767 if (Pi(r)) { 28768 if (s.rpId !== r) 28769 return new de({ 28770 message: `The RP ID "${s.rpId}" is invalid for this domain`, 28771 code: "ERROR_INVALID_RP_ID", 28772 cause: t 28773 }); 28774 } else return new de({ 28775 message: `${window.location.hostname} is an invalid domain`, 28776 code: "ERROR_INVALID_DOMAIN", 28777 cause: t 28778 }); 28779 } else if (t.name === "UnknownError") 28780 return new de({ 28781 message: "The authenticator was unable to process the specified options, or could not create a new assertion signature", 28782 code: "ERROR_AUTHENTICATOR_GENERAL_ERROR", 28783 cause: t 28784 }); 28785 } 28786 return new de({ 28787 message: "a Non-Webauthn related error has occurred", 28788 code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY", 28789 cause: t 28790 }); 28791} 28792class lm { 28793 /** 28794 * Create an abort signal for a new WebAuthn operation. 28795 * Automatically cancels any existing operation. 28796 * 28797 * @returns {AbortSignal} Signal to pass to navigator.credentials.create() or .get() 28798 * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal MDN - AbortSignal} 28799 */ 28800 createNewAbortSignal() { 28801 if (this.controller) { 28802 const s = new Error("Cancelling existing WebAuthn API call for new one"); 28803 s.name = "AbortError", this.controller.abort(s); 28804 } 28805 const e = new AbortController(); 28806 return this.controller = e, e.signal; 28807 } 28808 /** 28809 * Manually cancel the current WebAuthn operation. 28810 * Useful for cleaning up when user cancels or navigates away. 28811 * 28812 * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort MDN - AbortController.abort} 28813 */ 28814 cancelCeremony() { 28815 if (this.controller) { 28816 const e = new Error("Manually cancelling existing WebAuthn API call"); 28817 e.name = "AbortError", this.controller.abort(e), this.controller = void 0; 28818 } 28819 } 28820} 28821const r5 = new lm(); 28822function y6(t) { 28823 if (!t) 28824 throw new Error("Credential creation options are required"); 28825 if (typeof PublicKeyCredential < "u" && "parseCreationOptionsFromJSON" in PublicKeyCredential && typeof PublicKeyCredential.parseCreationOptionsFromJSON == "function") 28826 return PublicKeyCredential.parseCreationOptionsFromJSON( 28827 /** we assert the options here as typescript still doesn't know about future webauthn types */ 28828 t 28829 ); 28830 const { challenge: e, user: s, excludeCredentials: r } = t, n = j3( 28831 t, 28832 ["challenge", "user", "excludeCredentials"] 28833 ), o = _t(e).buffer, L = Object.assign(Object.assign({}, s), { id: _t(s.id).buffer }), d = Object.assign(Object.assign({}, n), { 28834 challenge: o, 28835 user: L 28836 }); 28837 if (r && r.length > 0) { 28838 d.excludeCredentials = new Array(r.length); 28839 for (let l = 0; l < r.length; l++) { 28840 const g = r[l]; 28841 d.excludeCredentials[l] = Object.assign(Object.assign({}, g), { 28842 id: _t(g.id).buffer, 28843 type: g.type || "public-key", 28844 // Cast transports to handle future transport types like "cable" 28845 transports: g.transports 28846 }); 28847 } 28848 } 28849 return d; 28850} 28851function w6(t) { 28852 if (!t) 28853 throw new Error("Credential request options are required"); 28854 if (typeof PublicKeyCredential < "u" && "parseRequestOptionsFromJSON" in PublicKeyCredential && typeof PublicKeyCredential.parseRequestOptionsFromJSON == "function") 28855 return PublicKeyCredential.parseRequestOptionsFromJSON(t); 28856 const { challenge: e, allowCredentials: s } = t, r = j3( 28857 t, 28858 ["challenge", "allowCredentials"] 28859 ), n = _t(e).buffer, o = Object.assign(Object.assign({}, r), { challenge: n }); 28860 if (s && s.length > 0) { 28861 o.allowCredentials = new Array(s.length); 28862 for (let L = 0; L < s.length; L++) { 28863 const d = s[L]; 28864 o.allowCredentials[L] = Object.assign(Object.assign({}, d), { 28865 id: _t(d.id).buffer, 28866 type: d.type || "public-key", 28867 // Cast transports to handle future transport types like "cable" 28868 transports: d.transports 28869 }); 28870 } 28871 } 28872 return o; 28873} 28874function T6(t) { 28875 var e; 28876 if ("toJSON" in t && typeof t.toJSON == "function") 28877 return t.toJSON(); 28878 const s = t; 28879 return { 28880 id: t.id, 28881 rawId: t.id, 28882 response: { 28883 attestationObject: Z1(new Uint8Array(t.response.attestationObject)), 28884 clientDataJSON: Z1(new Uint8Array(t.response.clientDataJSON)) 28885 }, 28886 type: "public-key", 28887 clientExtensionResults: t.getClientExtensionResults(), 28888 // Convert null to undefined and cast to AuthenticatorAttachment type 28889 authenticatorAttachment: (e = s.authenticatorAttachment) !== null && e !== void 0 ? e : void 0 28890 }; 28891} 28892function S6(t) { 28893 var e; 28894 if ("toJSON" in t && typeof t.toJSON == "function") 28895 return t.toJSON(); 28896 const s = t, r = t.getClientExtensionResults(), n = t.response; 28897 return { 28898 id: t.id, 28899 rawId: t.id, 28900 // W3C spec expects rawId to match id for JSON format 28901 response: { 28902 authenticatorData: Z1(new Uint8Array(n.authenticatorData)), 28903 clientDataJSON: Z1(new Uint8Array(n.clientDataJSON)), 28904 signature: Z1(new Uint8Array(n.signature)), 28905 userHandle: n.userHandle ? Z1(new Uint8Array(n.userHandle)) : void 0 28906 }, 28907 type: "public-key", 28908 clientExtensionResults: r, 28909 // Convert null to undefined and cast to AuthenticatorAttachment type 28910 authenticatorAttachment: (e = s.authenticatorAttachment) !== null && e !== void 0 ? e : void 0 28911 }; 28912} 28913function Pi(t) { 28914 return ( 28915 // Consider localhost valid as well since it's okay wrt Secure Contexts 28916 t === "localhost" || /^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t) 28917 ); 28918} 28919function u3() { 28920 var t, e; 28921 return !!(_e() && "PublicKeyCredential" in window && window.PublicKeyCredential && "credentials" in navigator && typeof ((t = navigator?.credentials) === null || t === void 0 ? void 0 : t.create) == "function" && typeof ((e = navigator?.credentials) === null || e === void 0 ? void 0 : e.get) == "function"); 28922} 28923async function Ci(t) { 28924 try { 28925 const e = await navigator.credentials.create( 28926 /** we assert the type here until typescript types are updated */ 28927 t 28928 ); 28929 return e ? e instanceof PublicKeyCredential ? { data: e, error: null } : { 28930 data: null, 28931 error: new M3("Browser returned unexpected credential type", e) 28932 } : { 28933 data: null, 28934 error: new M3("Empty credential response", e) 28935 }; 28936 } catch (e) { 28937 return { 28938 data: null, 28939 error: Lm({ 28940 error: e, 28941 options: t 28942 }) 28943 }; 28944 } 28945} 28946async function Fi(t) { 28947 try { 28948 const e = await navigator.credentials.get( 28949 /** we assert the type here until typescript types are updated */ 28950 t 28951 ); 28952 return e ? e instanceof PublicKeyCredential ? { data: e, error: null } : { 28953 data: null, 28954 error: new M3("Browser returned unexpected credential type", e) 28955 } : { 28956 data: null, 28957 error: new M3("Empty credential response", e) 28958 }; 28959 } catch (e) { 28960 return { 28961 data: null, 28962 error: cm({ 28963 error: e, 28964 options: t 28965 }) 28966 }; 28967 } 28968} 28969const dm = { 28970 hints: ["security-key"], 28971 authenticatorSelection: { 28972 authenticatorAttachment: "cross-platform", 28973 requireResidentKey: !1, 28974 /** set to preferred because older yubikeys don't have PIN/Biometric */ 28975 userVerification: "preferred", 28976 residentKey: "discouraged" 28977 }, 28978 attestation: "direct" 28979}, gm = { 28980 /** set to preferred because older yubikeys don't have PIN/Biometric */ 28981 userVerification: "preferred", 28982 hints: ["security-key"], 28983 attestation: "direct" 28984}; 28985function h3(...t) { 28986 const e = (n) => n !== null && typeof n == "object" && !Array.isArray(n), s = (n) => n instanceof ArrayBuffer || ArrayBuffer.isView(n), r = {}; 28987 for (const n of t) 28988 if (n) 28989 for (const o in n) { 28990 const L = n[o]; 28991 if (L !== void 0) 28992 if (Array.isArray(L)) 28993 r[o] = L; 28994 else if (s(L)) 28995 r[o] = L; 28996 else if (e(L)) { 28997 const d = r[o]; 28998 e(d) ? r[o] = h3(d, L) : r[o] = h3(L); 28999 } else 29000 r[o] = L; 29001 } 29002 return r; 29003} 29004function fm(t, e) { 29005 return h3(dm, t, e || {}); 29006} 29007function pm(t, e) { 29008 return h3(gm, t, e || {}); 29009} 29010class Mm {
29011 constructor(e) { 29012 this.client = e, this.enroll = this._enroll.bind(this), this.challenge = this._challenge.bind(this), this.verify = this._verify.bind(this), this.authenticate = this._authenticate.bind(this), this.register = this._register.bind(this); 29013 } 29014 /** 29015 * Enroll a new WebAuthn factor. 29016 * Creates an unverified WebAuthn factor that must be verified with a credential. 29017 * 29018 * @experimental This method is experimental and may change in future releases 29019 * @param {Omit<MFAEnrollWebauthnParams, 'factorType'>} params - Enrollment parameters (friendlyName required) 29020 * @returns {Promise<AuthMFAEnrollWebauthnResponse>} Enrolled factor details or error 29021 * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential} 29022 */ 29023 async _enroll(e) { 29024 return this.client.mfa.enroll(Object.assign(Object.assign({}, e), { factorType: "webauthn" })); 29025 } 29026 /** 29027 * Challenge for WebAuthn credential creation or authentication. 29028 * Combines server challenge with browser credential operations. 29029 * Handles both registration (create) and authentication (request) flows. 29030 * 29031 * @experimental This method is experimental and may change in future releases 29032 * @param {MFAChallengeWebauthnParams & { friendlyName?: string; signal?: AbortSignal }} params - Challenge parameters including factorId 29033 * @param {Object} overrides - Allows you to override the parameters passed to navigator.credentials 29034 * @param {PublicKeyCredentialCreationOptionsFuture} overrides.create - Override options for credential creation 29035 * @param {PublicKeyCredentialRequestOptionsFuture} overrides.request - Override options for credential request 29036 * @returns {Promise<RequestResult>} Challenge response with credential or error 29037 * @see {@link https://w3c.github.io/webauthn/#sctn-credential-creation W3C WebAuthn Spec - Credential Creation} 29038 * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying Assertion} 29039 */ 29040 async _challenge({ factorId: e, webauthn: s, friendlyName: r, signal: n }, o) { 29041 var L; 29042 try { 29043 const { data: d, error: l } = await this.client.mfa.challenge({ 29044 factorId: e, 29045 webauthn: s 29046 }); 29047 if (!d) 29048 return { data: null, error: l }; 29049 const g = n ?? r5.createNewAbortSignal(); 29050 if (d.webauthn.type === "create") { 29051 const { user: f } = d.webauthn.credential_options.publicKey; 29052 if (!f.name) { 29053 const p = r; 29054 if (p) 29055 f.name = `${f.id}:${p}`; 29056 else { 29057 const u = (await this.client.getUser()).data.user, h = ((L = u?.user_metadata) === null || L === void 0 ? void 0 : L.name) || u?.email || u?.id || "User"; 29058 f.name = `${f.id}:${h}`; 29059 } 29060 } 29061 f.displayName || (f.displayName = f.name); 29062 } 29063 switch (d.webauthn.type) { 29064 case "create": { 29065 const f = fm(d.webauthn.credential_options.publicKey, o?.create), { data: p, error: M } = await Ci({ 29066 publicKey: f, 29067 signal: g 29068 }); 29069 return p ? { 29070 data: { 29071 factorId: e, 29072 challengeId: d.id, 29073 webauthn: { 29074 type: d.webauthn.type, 29075 credential_response: p 29076 } 29077 }, 29078 error: null 29079 } : { data: null, error: M }; 29080 } 29081 case "request": { 29082 const f = pm(d.webauthn.credential_options.publicKey, o?.request), { data: p, error: M } = await Fi(Object.assign(Object.assign({}, d.webauthn.credential_options), { publicKey: f, signal: g })); 29083 return p ? { 29084 data: { 29085 factorId: e, 29086 challengeId: d.id, 29087 webauthn: { 29088 type: d.webauthn.type, 29089 credential_response: p 29090 } 29091 }, 29092 error: null 29093 } : { data: null, error: M }; 29094 } 29095 } 29096 } catch (d) { 29097 return B(d) ? { data: null, error: d } : { 29098 data: null, 29099 error: new $e("Unexpected error in challenge", d) 29100 }; 29101 } 29102 } 29103 /** 29104 * Verify a WebAuthn credential with the server. 29105 * Completes the WebAuthn ceremony by sending the credential to the server for verification. 29106 * 29107 * @experimental This method is experimental and may change in future releases 29108 * @param {Object} params - Verification parameters 29109 * @param {string} params.challengeId - ID of the challenge being verified 29110 * @param {string} params.factorId - ID of the WebAuthn factor 29111 * @param {MFAVerifyWebauthnParams<T>['webauthn']} params.webauthn - WebAuthn credential response 29112 * @returns {Promise<AuthMFAVerifyResponse>} Verification result with session or error 29113 * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying an Authentication Assertion} 29114 * */ 29115 async _verify({ challengeId: e, factorId: s, webauthn: r }) { 29116 return this.client.mfa.verify({ 29117 factorId: s, 29118 challengeId: e, 29119 webauthn: r 29120 }); 29121 } 29122 /** 29123 * Complete WebAuthn authentication flow. 29124 * Performs challenge and verification in a single operation for existing credentials. 29125 * 29126 * @experimental This method is experimental and may change in future releases 29127 * @param {Object} params - Authentication parameters 29128 * @param {string} params.factorId - ID of the WebAuthn factor to authenticate with 29129 * @param {Object} params.webauthn - WebAuthn configuration 29130 * @param {string} params.webauthn.rpId - Relying Party ID (defaults to current hostname) 29131 * @param {string[]} params.webauthn.rpOrigins - Allowed origins (defaults to current origin) 29132 * @param {AbortSignal} params.webauthn.signal - Optional abort signal 29133 * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Override options for navigator.credentials.get 29134 * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Authentication result 29135 * @see {@link https://w3c.github.io/webauthn/#sctn-authentication W3C WebAuthn Spec - Authentication Ceremony} 29136 * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions MDN - PublicKeyCredentialRequestOptions} 29137 */ 29138 async _authenticate({ factorId: e, webauthn: { rpId: s = typeof window < "u" ? window.location.hostname : void 0, rpOrigins: r = typeof window < "u" ? [window.location.origin] : void 0, signal: n } = {} }, o) { 29139 if (!s) 29140 return { 29141 data: null, 29142 error: new L2("rpId is required for WebAuthn authentication") 29143 }; 29144 try { 29145 if (!u3()) 29146 return { 29147 data: null, 29148 error: new $e("Browser does not support WebAuthn", null) 29149 }; 29150 const { data: L, error: d } = await this.challenge({ 29151 factorId: e, 29152 webauthn: { rpId: s, rpOrigins: r }, 29153 signal: n 29154 }, { request: o }); 29155 if (!L) 29156 return { data: null, error: d }; 29157 const { webauthn: l } = L; 29158 return this._verify({ 29159 factorId: e, 29160 challengeId: L.challengeId, 29161 webauthn: { 29162 type: l.type, 29163 rpId: s, 29164 rpOrigins: r, 29165 credential_response: l.credential_response 29166 } 29167 }); 29168 } catch (L) { 29169 return B(L) ? { data: null, error: L } : { 29170 data: null, 29171 error: new $e("Unexpected error in authenticate", L) 29172 }; 29173 } 29174 } 29175 /** 29176 * Complete WebAuthn registration flow. 29177 * Performs enrollment, challenge, and verification in a single operation for new credentials. 29178 * 29179 * @experimental This method is experimental and may change in future releases 29180 * @param {Object} params - Registration parameters 29181 * @param {string} params.friendlyName - User-friendly name for the credential 29182 * @param {string} params.rpId - Relying Party ID (defaults to current hostname) 29183 * @param {string[]} params.rpOrigins - Allowed origins (defaults to current origin) 29184 * @param {AbortSignal} params.signal - Optional abort signal 29185 * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Override options for navigator.credentials.create 29186 * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Registration result 29187 * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registration Ceremony} 29188 * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions MDN - PublicKeyCredentialCreationOptions} 29189 */ 29190 async _register({ friendlyName: e, webauthn: { rpId: s = typeof window < "u" ? window.location.hostname : void 0, rpOrigins: r = typeof window < "u" ? [window.location.origin] : void 0, signal: n } = {} }, o) { 29191 if (!s) 29192 return { 29193 data: null, 29194 error: new L2("rpId is required for WebAuthn registration") 29195 }; 29196 try { 29197 if (!u3()) 29198 return { 29199 data: null, 29200 error: new $e("Browser does not support WebAuthn", null) 29201 }; 29202 const { data: L, error: d } = await this._enroll({ 29203 friendlyName: e 29204 }); 29205 if (!L) 29206 return await this.client.mfa.listFactors().then((f) => { 29207 var p; 29208 return (p = f.data) === null || p === void 0 ? void 0 : p.all.find((M) => M.factor_type === "webauthn" && M.friendly_name === e && M.status === "unverified"); 29209 }).then((f) => f ? this.client.mfa.unenroll({ factorId: f?.id }) : void 0), { data: null, error: d }; 29210 const { data: l, error: g } = await this._challenge({ 29211 factorId: L.id, 29212 friendlyName: L.friendly_name, 29213 webauthn: { rpId: s, rpOrigins: r }, 29214 signal: n 29215 }, { 29216 create: o 29217 }); 29218 return l ? this._verify({ 29219 factorId: L.id, 29220 challengeId: l.challengeId, 29221 webauthn: { 29222 rpId: s, 29223 rpOrigins: r, 29224 type: l.webauthn.type, 29225 credential_response: l.webauthn.credential_response 29226 } 29227 }) : { data: null, error: g }; 29228 } catch (L) { 29229 return B(L) ? { data: null, error: L } : { 29230 data: null, 29231 error: new $e("Unexpected error in register", L) 29232 }; 29233 } 29234 } 29235} 29236im(); 29237const um = { 29238 url: hh, 29239 storageKey: mh, 29240 autoRefreshToken: !0, 29241 persistSession: !0, 29242 detectSessionInUrl: !0, 29243 headers: xh, 29244 flowType: "implicit", 29245 debug: !1, 29246 hasCustomAuthorizationHeader: !1, 29247 throwOnError: !1, 29248 lockAcquireTimeout: 5e3, 29249 // 5 seconds. Only used when a custom `lock` is supplied. TODO(v3): remove. 29250 skipAutoInitialize: !1, 29251 experimental: {} 29252}, tt = {}; 29253let B6 = !1; 29254class l2 { 29255 /** 29256 * The JWKS used for verifying asymmetric JWTs 29257 */ 29258 get jwks() { 29259 var e, s; 29260 return (s = (e = tt[this.storageKey]) === null || e === void 0 ? void 0 : e.jwks) !== null && s !== void 0 ? s : { keys: [] }; 29261 } 29262 set jwks(e) { 29263 tt[this.storageKey] = Object.assign(Object.assign({}, tt[this.storageKey]), { jwks: e }); 29264 } 29265 get jwks_cached_at() { 29266 var e, s; 29267 return (s = (e = tt[this.storageKey]) === null || e === void 0 ? void 0 : e.cachedAt) !== null && s !== void 0 ? s : Number.MIN_SAFE_INTEGER; 29268 } 29269 set jwks_cached_at(e) { 29270 tt[this.storageKey] = Object.assign(Object.assign({}, tt[this.storageKey]), { cachedAt: e }); 29271 } 29272 /** 29273 * Create a new client for use in the browser. 29274 * 29275 * @example Using supabase-js (recommended) 29276 * ```ts 29277 * import { createClient } from '@supabase/supabase-js' 29278 * 29279 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 29280 * const { data, error } = await supabase.auth.getUser() 29281 * ``` 29282 * 29283 * @example Standalone import for bundle-sensitive environments 29284 * ```ts 29285 * import { GoTrueClient } from '@supabase/auth-js' 29286 * 29287 * const auth = new GoTrueClient({ 29288 * url: 'https://xyzcompany.supabase.co/auth/v1', 29289 * headers: { apikey: 'your-publishable-key' }, 29290 * storageKey: 'supabase-auth', 29291 * }) 29292 * ``` 29293 */ 29294 constructor(e) { 29295 var s, r, n; 29296 this.userStorage = null, this.memoryStorage = null, this.stateChangeEmitters = /* @__PURE__ */ new Map(), this.autoRefreshTicker = null, this.autoRefreshTickTimeout = null, this.visibilityChangedCallback = null, this.refreshingDeferred = null, this.lastRefreshFailure = null, this._sessionRemovalEpoch = 0, this.initializePromise = null, this._pendingInitNotifications = null, this.detectSessionInUrl = !0, this.hasCustomAuthorizationHeader = !1, this.suppressGetSessionWarning = !1, this.lock = null, this.lockAcquired = !1, this.pendingInLock = [], this.broadcastChannel = null, this.logger = console.log; 29297 const o = Object.assign(Object.assign({}, um), e); 29298 if (this.storageKey = o.storageKey, this.instanceID = (s = l2.nextInstanceID[this.storageKey]) !== null && s !== void 0 ? s : 0, l2.nextInstanceID[this.storageKey] = this.instanceID + 1, this.logDebugMessages = !!o.debug, typeof o.debug == "function" && (this.logger = o.debug), this.instanceID > 0 && _e()) { 29299 const L = `${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`; 29300 console.warn(L), this.logDebugMessages && console.trace(L); 29301 } 29302 if (this.persistSession = o.persistSession, this.autoRefreshToken = o.autoRefreshToken, this.experimental = (r = o.experimental) !== null && r !== void 0 ? r : {}, this.admin = new am({ 29303 url: o.url, 29304 headers: o.headers, 29305 fetch: o.fetch, 29306 experimental: this.experimental 29307 }), this.url = o.url, this.headers = o.headers, this.fetch = Ai(o.fetch), this.detectSessionInUrl = o.detectSessionInUrl, this.flowType = o.flowType, this.hasCustomAuthorizationHeader = o.hasCustomAuthorizationHeader, this.throwOnError = o.throwOnError, this.lockAcquireTimeout = o.lockAcquireTimeout, o.lock != null && (this.lock = o.lock, B6 || (B6 = !0, console.warn(`${this._logPrefix()} The "lock" option is deprecated and will be removed in v3. The client now coordinates session refreshes without a lock, so most apps can drop the option. See https://github.com/supabase/supabase-js/blob/master/packages/core/auth-js/migrations/lockless-coordination.md`))), this.jwks || (this.jwks = { keys: [] }, this.jwks_cached_at = Number.MIN_SAFE_INTEGER), this.mfa = { 29308 verify: this._verify.bind(this), 29309 enroll: this._enroll.bind(this), 29310 unenroll: this._unenroll.bind(this), 29311 challenge: this._challenge.bind(this), 29312 listFactors: this._listFactors.bind(this), 29313 challengeAndVerify: this._challengeAndVerify.bind(this), 29314 getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this), 29315 webauthn: new Mm(this), 29316 recoveryCodes: { 29317 getStatus: this._getRecoveryCodesStatus.bind(this), 29318 generate: this._generateRecoveryCodes.bind(this), 29319 verify: this._verifyRecoveryCode.bind(this), 29320 regenerate: this._regenerateRecoveryCodes.bind(this), 29321 unenroll: this._unenrollRecoveryCodes.bind(this) 29322 } 29323 }, this.oauth = {
29324 getAuthorizationDetails: this._getAuthorizationDetails.bind(this), 29325 approveAuthorization: this._approveAuthorization.bind(this), 29326 denyAuthorization: this._denyAuthorization.bind(this), 29327 listGrants: this._listOAuthGrants.bind(this), 29328 revokeGrant: this._revokeOAuthGrant.bind(this) 29329 }, this.passkey = { 29330 startRegistration: this._startPasskeyRegistration.bind(this), 29331 verifyRegistration: this._verifyPasskeyRegistration.bind(this), 29332 startAuthentication: this._startPasskeyAuthentication.bind(this), 29333 verifyAuthentication: this._verifyPasskeyAuthentication.bind(this), 29334 list: this._listPasskeys.bind(this), 29335 update: this._updatePasskey.bind(this), 29336 delete: this._deletePasskey.bind(this) 29337 }, this.persistSession ? (o.storage ? this.storage = o.storage : ki() ? this.storage = globalThis.localStorage : (this.memoryStorage = {}, this.storage = v6(this.memoryStorage)), o.userStorage && (this.userStorage = o.userStorage)) : (this.memoryStorage = {}, this.storage = v6(this.memoryStorage)), _e() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) { 29338 try { 29339 this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey); 29340 } catch (L) { 29341 console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available", L); 29342 } 29343 (n = this.broadcastChannel) === null || n === void 0 || n.addEventListener("message", async (L) => { 29344 this._debug("received broadcast notification from other tab or client", L), (L.data.event === "TOKEN_REFRESHED" || L.data.event === "SIGNED_IN") && (this.lastRefreshFailure = null); 29345 try { 29346 await this._notifyAllSubscribers(L.data.event, L.data.session, !1); 29347 } catch (d) { 29348 this._debug("#broadcastChannel", "error", d); 29349 } 29350 }); 29351 } 29352 o.skipAutoInitialize || this.initialize().catch((L) => { 29353 this._debug("#initialize()", "error", L); 29354 }); 29355 } 29356 /** 29357 * Returns whether error throwing mode is enabled for this client. 29358 */ 29359 isThrowOnErrorEnabled() { 29360 return this.throwOnError; 29361 } 29362 /** 29363 * Centralizes return handling with optional error throwing. When `throwOnError` is enabled 29364 * and the provided result contains a non-nullish error, the error is thrown instead of 29365 * being returned. This ensures consistent behavior across all public API methods. 29366 */ 29367 _returnResult(e) { 29368 if (this.throwOnError && e && e.error) 29369 throw e.error; 29370 return e; 29371 } 29372 _logPrefix() { 29373 return `GoTrueClient@${this.storageKey}:${this.instanceID} (${wi}) ${(/* @__PURE__ */ new Date()).toISOString()}`; 29374 } 29375 _debug(...e) { 29376 return this.logDebugMessages && this.logger(this._logPrefix(), ...e), this; 29377 } 29378 /** 29379 * Initialize the auth client by loading the session from storage or 29380 * detecting it from the URL after an OAuth, magic-link, or password-recovery 29381 * redirect. 29382 * 29383 * **Most callers do not need to invoke this directly.** The client calls it 29384 * automatically during construction, and to react to sign-in events (including 29385 * post-redirect events) you should subscribe to `onAuthStateChange` rather 29386 * than awaiting `initialize()`. 29387 * 29388 * You only need to call it manually when you have opted out of the automatic 29389 * call by passing `skipAutoInitialize: true` â for example, in an SSR context 29390 * where you need to control initialization timing. In that case, awaiting 29391 * `initialize()` returns the resolved session result (or any error encountered 29392 * while detecting it from the URL). 29393 * 29394 * @category Auth 29395 */ 29396 async initialize() { 29397 var e; 29398 if (this.initializePromise) 29399 return await this.initializePromise; 29400 this._pendingInitNotifications = [], this.initializePromise = (async () => this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._initialize()) : await this._initialize())(); 29401 const s = await this.initializePromise, r = (e = this._pendingInitNotifications) !== null && e !== void 0 ? e : []; 29402 this._pendingInitNotifications = null; 29403 for (const n of r) 29404 await this._notifyAllSubscribers(n.event, n.session, n.broadcast); 29405 return s; 29406 } 29407 /** 29408 * IMPORTANT: 29409 * 1. Never throw in this method, as it is called from the constructor 29410 * 2. Never return a session from this method as it would be cached over 29411 * the whole lifetime of the client 29412 */ 29413 async _initialize() { 29414 var e; 29415 try { 29416 let s = {}, r = "none"; 29417 if (_e() && (s = u6(window.location.href), this._isImplicitGrantCallback(s) ? r = "implicit" : await this._isPKCECallback(s) && (r = "pkce")), _e() && this.detectSessionInUrl && r !== "none") { 29418 const { data: n, error: o } = await this._getSessionFromURL(s, r); 29419 if (o) { 29420 if (this._debug("#_initialize()", "error detecting session from URL", o), wh(o)) { 29421 const l = (e = o.details) === null || e === void 0 ? void 0 : e.code;
29422 if (l === "identity_already_exists" || l === "identity_not_found" || l === "single_identity_not_deletable") 29423 return { error: o }; 29424 } 29425 return { error: o }; 29426 } 29427 const { session: L, redirectType: d } = n; 29428 return this._debug("#_initialize()", "detected session in URL", L, "redirect type", d), await this._saveSession(L), setTimeout(async () => { 29429 d === "recovery" ? await this._notifyAllSubscribers("PASSWORD_RECOVERY", L) : await this._notifyAllSubscribers("SIGNED_IN", L); 29430 }, 0), { error: null }; 29431 } 29432 return await this._recoverAndRefresh(), { error: null }; 29433 } catch (s) { 29434 return B(s) ? this._returnResult({ error: s }) : this._returnResult({ 29435 error: new $e("Unexpected error during initialization", s) 29436 }); 29437 } finally { 29438 await this._handleVisibilityChange(), this._debug("#_initialize()", "end"); 29439 } 29440 } 29441 /** 29442 * Creates a new anonymous user. 29443 * 29444 * @returns A session where the is_anonymous claim in the access token JWT set to true 29445 * 29446 * @category Auth 29447 * 29448 * @remarks 29449 * - Returns an anonymous user 29450 * - It is recommended to set up captcha for anonymous sign-ins to prevent abuse. You can pass in the captcha token in the `options` param. 29451 * 29452 * @example Create an anonymous user 29453 * ```js 29454 * const { data, error } = await supabase.auth.signInAnonymously({ 29455 * options: { 29456 * captchaToken 29457 * } 29458 * }); 29459 * ``` 29460 * 29461 * @exampleResponse Create an anonymous user 29462 * ```json 29463 * { 29464 * "data": { 29465 * "user": { 29466 * "id": "11111111-1111-1111-1111-111111111111", 29467 * "aud": "authenticated", 29468 * "role": "authenticated", 29469 * "email": "", 29470 * "phone": "", 29471 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29472 * "app_metadata": {}, 29473 * "user_metadata": {}, 29474 * "identities": [], 29475 * "created_at": "2024-01-01T00:00:00Z", 29476 * "updated_at": "2024-01-01T00:00:00Z", 29477 * "is_anonymous": true 29478 * }, 29479 * "session": { 29480 * "access_token": "<ACCESS_TOKEN>", 29481 * "token_type": "bearer", 29482 * "expires_in": 3600, 29483 * "expires_at": 1700000000, 29484 * "refresh_token": "<REFRESH_TOKEN>", 29485 * "user": { 29486 * "id": "11111111-1111-1111-1111-111111111111", 29487 * "aud": "authenticated", 29488 * "role": "authenticated", 29489 * "email": "", 29490 * "phone": "", 29491 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29492 * "app_metadata": {}, 29493 * "user_metadata": {}, 29494 * "identities": [], 29495 * "created_at": "2024-01-01T00:00:00Z", 29496 * "updated_at": "2024-01-01T00:00:00Z", 29497 * "is_anonymous": true 29498 * } 29499 * } 29500 * }, 29501 * "error": null 29502 * } 29503 * ``` 29504 * 29505 * @example Create an anonymous user with custom user metadata 29506 * ```js 29507 * const { data, error } = await supabase.auth.signInAnonymously({ 29508 * options: { 29509 * data 29510 * } 29511 * }) 29512 * ``` 29513 */ 29514 async signInAnonymously(e) { 29515 var s, r, n; 29516 try { 29517 const o = await N(this.fetch, "POST", `${this.url}/signup`, { 29518 headers: this.headers, 29519 body: { 29520 data: (r = (s = e?.options) === null || s === void 0 ? void 0 : s.data) !== null && r !== void 0 ? r : {}, 29521 gotrue_meta_security: { captcha_token: (n = e?.options) === null || n === void 0 ? void 0 : n.captchaToken } 29522 }, 29523 xform: De 29524 }), { data: L, error: d } = o; 29525 if (d || !L) 29526 return this._returnResult({ data: { user: null, session: null }, error: d }); 29527 const l = L.session, g = L.user; 29528 return L.session && (await this._saveSession(L.session), await this._notifyAllSubscribers("SIGNED_IN", l)), this._returnResult({ data: { user: g, session: l }, error: null }); 29529 } catch (o) { 29530 if (B(o)) 29531 return this._returnResult({ data: { user: null, session: null }, error: o }); 29532 throw o; 29533 } 29534 } 29535 /** 29536 * Creates a new user. 29537 * 29538 * Be aware that if a user account exists in the system you may get back an 29539 * error message that attempts to hide this information from the user. 29540 * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled. 29541 * 29542 * @returns A logged-in session if the server has "autoconfirm" ON 29543 * @returns A user if the server has "autoconfirm" OFF 29544 * 29545 * @category Auth 29546 * 29547 * @remarks 29548 * - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](/dashboard/project/_/auth/providers). 29549 * - **Confirm email** determines if users need to confirm their email address after signing up. 29550 * - If **Confirm email** is enabled, a `user` is returned but `session` is null. 29551 * - If **Confirm email** is disabled, both a `user` and a `session` are returned. 29552 * - When the user confirms their email address, they are redirected to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](/dashboard/project/_/auth/url-configuration). 29553 * - If signUp() is called for an existing confirmed user: 29554 * - When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned. 29555 * - When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned. 29556 * - To fetch the currently logged-in user, refer to [`getUser()`](/docs/reference/javascript/auth-getuser). 29557 * 29558 * @example Sign up with an email and password 29559 * ```js 29560 * const { data, error } = await supabase.auth.signUp({ 29561 * email: '[email protected]', 29562 * password: 'example-password', 29563 * }) 29564 * ``` 29565 * 29566 * @exampleResponse Sign up with an email and password 29567 * ```json
29568 * // Some fields may be null if "confirm email" is enabled. 29569 * { 29570 * "data": { 29571 * "user": { 29572 * "id": "11111111-1111-1111-1111-111111111111", 29573 * "aud": "authenticated", 29574 * "role": "authenticated", 29575 * "email": "[email protected]", 29576 * "email_confirmed_at": "2024-01-01T00:00:00Z", 29577 * "phone": "", 29578 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29579 * "app_metadata": { 29580 * "provider": "email", 29581 * "providers": [ 29582 * "email" 29583 * ] 29584 * }, 29585 * "user_metadata": {}, 29586 * "identities": [ 29587 * { 29588 * "identity_id": "22222222-2222-2222-2222-222222222222", 29589 * "id": "11111111-1111-1111-1111-111111111111", 29590 * "user_id": "11111111-1111-1111-1111-111111111111", 29591 * "identity_data": { 29592 * "email": "[email protected]", 29593 * "email_verified": false, 29594 * "phone_verified": false, 29595 * "sub": "11111111-1111-1111-1111-111111111111" 29596 * }, 29597 * "provider": "email", 29598 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29599 * "created_at": "2024-01-01T00:00:00Z", 29600 * "updated_at": "2024-01-01T00:00:00Z", 29601 * "email": "[email protected]" 29602 * } 29603 * ], 29604 * "created_at": "2024-01-01T00:00:00Z", 29605 * "updated_at": "2024-01-01T00:00:00Z" 29606 * }, 29607 * "session": { 29608 * "access_token": "<ACCESS_TOKEN>", 29609 * "token_type": "bearer", 29610 * "expires_in": 3600, 29611 * "expires_at": 1700000000, 29612 * "refresh_token": "<REFRESH_TOKEN>", 29613 * "user": { 29614 * "id": "11111111-1111-1111-1111-111111111111", 29615 * "aud": "authenticated", 29616 * "role": "authenticated", 29617 * "email": "[email protected]", 29618 * "email_confirmed_at": "2024-01-01T00:00:00Z", 29619 * "phone": "", 29620 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29621 * "app_metadata": { 29622 * "provider": "email", 29623 * "providers": [ 29624 * "email" 29625 * ] 29626 * }, 29627 * "user_metadata": {}, 29628 * "identities": [ 29629 * { 29630 * "identity_id": "22222222-2222-2222-2222-222222222222", 29631 * "id": "11111111-1111-1111-1111-111111111111", 29632 * "user_id": "11111111-1111-1111-1111-111111111111", 29633 * "identity_data": { 29634 * "email": "[email protected]", 29635 * "email_verified": false, 29636 * "phone_verified": false, 29637 * "sub": "11111111-1111-1111-1111-111111111111" 29638 * }, 29639 * "provider": "email", 29640 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29641 * "created_at": "2024-01-01T00:00:00Z", 29642 * "updated_at": "2024-01-01T00:00:00Z", 29643 * "email": "[email protected]" 29644 * } 29645 * ], 29646 * "created_at": "2024-01-01T00:00:00Z", 29647 * "updated_at": "2024-01-01T00:00:00Z" 29648 * } 29649 * } 29650 * }, 29651 * "error": null 29652 * } 29653 * ``` 29654 * 29655 * @example Sign up with a phone number and password (SMS) 29656 * ```js 29657 * const { data, error } = await supabase.auth.signUp({ 29658 * phone: '123456789', 29659 * password: 'example-password', 29660 * options: { 29661 * channel: 'sms' 29662 * } 29663 * }) 29664 * ``` 29665 * 29666 * @exampleDescription Sign up with a phone number and password (whatsapp) 29667 * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature. 29668 * 29669 * @example Sign up with a phone number and password (whatsapp) 29670 * ```js 29671 * const { data, error } = await supabase.auth.signUp({ 29672 * phone: '123456789', 29673 * password: 'example-password', 29674 * options: { 29675 * channel: 'whatsapp' 29676 * } 29677 * }) 29678 * ``` 29679 * 29680 * @example Sign up with additional user metadata 29681 * ```js 29682 * const { data, error } = await supabase.auth.signUp( 29683 * { 29684 * email: '[email protected]', 29685 * password: 'example-password', 29686 * options: { 29687 * data: { 29688 * first_name: 'John', 29689 * age: 27, 29690 * } 29691 * } 29692 * } 29693 * ) 29694 * ``` 29695 * 29696 * @exampleDescription Sign up with a redirect URL
29697 * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project. 29698 * 29699 * @example Sign up with a redirect URL 29700 * ```js 29701 * const { data, error } = await supabase.auth.signUp( 29702 * { 29703 * email: '[email protected]', 29704 * password: 'example-password', 29705 * options: { 29706 * emailRedirectTo: 'https://example.com/welcome' 29707 * } 29708 * } 29709 * ) 29710 * ``` 29711 */ 29712 async signUp(e) { 29713 var s, r, n; 29714 let o = null; 29715 try { 29716 let L; 29717 if ("email" in e) { 29718 const { email: p, password: M, options: u } = e; 29719 let h = null, x = null; 29720 this.flowType === "pkce" && ([h, x, o] = await this._getCodeChallengeAndMethod()), L = await N(this.fetch, "POST", `${this.url}/signup`, { 29721 headers: this.headers, 29722 redirectTo: this._maybeAppendFlowIdToRedirect(u?.emailRedirectTo, o), 29723 body: { 29724 email: p, 29725 password: M, 29726 data: (s = u?.data) !== null && s !== void 0 ? s : {}, 29727 gotrue_meta_security: { captcha_token: u?.captchaToken }, 29728 code_challenge: h, 29729 code_challenge_method: x 29730 }, 29731 xform: De 29732 }); 29733 } else if ("phone" in e) { 29734 const { phone: p, password: M, options: u } = e; 29735 L = await N(this.fetch, "POST", `${this.url}/signup`, { 29736 headers: this.headers, 29737 body: { 29738 phone: p, 29739 password: M, 29740 data: (r = u?.data) !== null && r !== void 0 ? r : {}, 29741 channel: (n = u?.channel) !== null && n !== void 0 ? n : "sms", 29742 gotrue_meta_security: { captcha_token: u?.captchaToken } 29743 }, 29744 xform: De 29745 }); 29746 } else 29747 throw new V2("You must provide either an email or phone number and a password"); 29748 const { data: d, error: l } = L; 29749 if (l || !d) 29750 return await He(this.storage, this.storageKey, o), this._returnResult({ data: { user: null, session: null }, error: l }); 29751 const g = d.session, f = d.user; 29752 return d.session && (await this._saveSession(d.session), await this._notifyAllSubscribers("SIGNED_IN", g)), this._returnResult({ data: { user: f, session: g }, error: null }); 29753 } catch (L) { 29754 if (await He(this.storage, this.storageKey, o), B(L)) 29755 return this._returnResult({ data: { user: null, session: null }, error: L }); 29756 throw L; 29757 } 29758 } 29759 /** 29760 * Log in an existing user with an email and password or phone and password. 29761 * 29762 * Be aware that you may get back an error message that will not distinguish 29763 * between the cases where the account does not exist or that the 29764 * email/phone and password combination is wrong or that the account can only 29765 * be accessed via social login. 29766 * 29767 * @category Auth 29768 * 29769 * @remarks 29770 * - Requires either an email and password or a phone number and password. 29771 * 29772 * @example Sign in with email and password 29773 * ```js 29774 * const { data, error } = await supabase.auth.signInWithPassword({ 29775 * email: '[email protected]', 29776 * password: 'example-password', 29777 * }) 29778 * ``` 29779 * 29780 * @exampleResponse Sign in with email and password 29781 * ```json 29782 * { 29783 * "data": { 29784 * "user": { 29785 * "id": "11111111-1111-1111-1111-111111111111", 29786 * "aud": "authenticated", 29787 * "role": "authenticated", 29788 * "email": "[email protected]", 29789 * "email_confirmed_at": "2024-01-01T00:00:00Z", 29790 * "phone": "", 29791 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29792 * "app_metadata": { 29793 * "provider": "email", 29794 * "providers": [ 29795 * "email" 29796 * ] 29797 * }, 29798 * "user_metadata": {}, 29799 * "identities": [ 29800 * { 29801 * "identity_id": "22222222-2222-2222-2222-222222222222", 29802 * "id": "11111111-1111-1111-1111-111111111111", 29803 * "user_id": "11111111-1111-1111-1111-111111111111", 29804 * "identity_data": { 29805 * "email": "[email protected]", 29806 * "email_verified": false, 29807 * "phone_verified": false, 29808 * "sub": "11111111-1111-1111-1111-111111111111" 29809 * }, 29810 * "provider": "email", 29811 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29812 * "created_at": "2024-01-01T00:00:00Z", 29813 * "updated_at": "2024-01-01T00:00:00Z", 29814 * "email": "[email protected]" 29815 * } 29816 * ], 29817 * "created_at": "2024-01-01T00:00:00Z", 29818 * "updated_at": "2024-01-01T00:00:00Z" 29819 * }, 29820 * "session": { 29821 * "access_token": "<ACCESS_TOKEN>", 29822 * "token_type": "bearer", 29823 * "expires_in": 3600, 29824 * "expires_at": 1700000000, 29825 * "refresh_token": "<REFRESH_TOKEN>", 29826 * "user": { 29827 * "id": "11111111-1111-1111-1111-111111111111", 29828 * "aud": "authenticated", 29829 * "role": "authenticated", 29830 * "email": "[email protected]", 29831 * "email_confirmed_at": "2024-01-01T00:00:00Z", 29832 * "phone": "", 29833 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29834 * "app_metadata": { 29835 * "provider": "email", 29836 * "providers": [ 29837 * "email" 29838 * ] 29839 * }, 29840 * "user_metadata": {}, 29841 * "identities": [ 29842 * { 29843 * "identity_id": "22222222-2222-2222-2222-222222222222", 29844 * "id": "11111111-1111-1111-1111-111111111111", 29845 * "user_id": "11111111-1111-1111-1111-111111111111", 29846 * "identity_data": { 29847 * "email": "[email protected]", 29848 * "email_verified": false, 29849 * "phone_verified": false, 29850 * "sub": "11111111-1111-1111-1111-111111111111" 29851 * }, 29852 * "provider": "email", 29853 * "last_sign_in_at": "2024-01-01T00:00:00Z", 29854 * "created_at": "2024-01-01T00:00:00Z", 29855 * "updated_at": "2024-01-01T00:00:00Z", 29856 * "email": "[email protected]" 29857 * } 29858 * ], 29859 * "created_at": "2024-01-01T00:00:00Z", 29860 * "updated_at": "2024-01-01T00:00:00Z" 29861 * } 29862 * } 29863 * }, 29864 * "error": null 29865 * } 29866 * ``` 29867 * 29868 * @example Sign in with phone and password 29869 * ```js 29870 * const { data, error } = await supabase.auth.signInWithPassword({ 29871 * phone: '+13334445555', 29872 * password: 'some-password', 29873 * }) 29874 * ``` 29875 * 29876 * @exampleDescription Handling errors 29877 * Log the full `error` object so fields like `code`, `status`, and `name` aren't hidden. The `error.code` (e.g. `'invalid_credentials'`, `'email_not_confirmed'`) is often more useful for branching than `error.message`, and the full object surfaces both. 29878 * 29879 * @example Handling errors 29880 * ```js 29881 * const { data, error } = await supabase.auth.signInWithPassword({ 29882 * email: '[email protected]', 29883 * password: 'example-password', 29884 * }) 29885 * if (error) { 29886 * console.error(error) 29887 * return 29888 * } 29889 * ``` 29890 */ 29891 async signInWithPassword(e) { 29892 try { 29893 let s; 29894 if ("email" in e) { 29895 const { email: o, password: L, options: d } = e; 29896 s = await N(this.fetch, "POST", `${this.url}/token?grant_type=password`, { 29897 headers: this.headers, 29898 body: { 29899 email: o, 29900 password: L,
29901 gotrue_meta_security: { captcha_token: d?.captchaToken } 29902 }, 29903 xform: _6 29904 }); 29905 } else if ("phone" in e) { 29906 const { phone: o, password: L, options: d } = e; 29907 s = await N(this.fetch, "POST", `${this.url}/token?grant_type=password`, { 29908 headers: this.headers, 29909 body: { 29910 phone: o, 29911 password: L, 29912 gotrue_meta_security: { captcha_token: d?.captchaToken } 29913 }, 29914 xform: _6 29915 }); 29916 } else 29917 throw new V2("You must provide either an email or phone number and a password"); 29918 const { data: r, error: n } = s; 29919 if (n) 29920 return this._returnResult({ data: { user: null, session: null }, error: n }); 29921 if (!r || !r.session || !r.user) { 29922 const o = new et(); 29923 return this._returnResult({ data: { user: null, session: null }, error: o }); 29924 } 29925 return r.session && (await this._saveSession(r.session), await this._notifyAllSubscribers("SIGNED_IN", r.session)), this._returnResult({ 29926 data: Object.assign({ user: r.user, session: r.session }, r.weak_password ? { weakPassword: r.weak_password } : null), 29927 error: n 29928 }); 29929 } catch (s) { 29930 if (B(s)) 29931 return this._returnResult({ data: { user: null, session: null }, error: s }); 29932 throw s; 29933 } 29934 } 29935 /** 29936 * Log in an existing user via a third-party provider. 29937 * This method supports the PKCE flow. 29938 * 29939 * @category Auth 29940 * 29941 * @remarks 29942 * - This method is used for signing in using [Social Login (OAuth) providers](/docs/guides/auth#configure-third-party-providers). 29943 * - It works by redirecting your application to the provider's authorization screen, before bringing back the user to your app. 29944 * 29945 * @example Sign in using a third-party provider 29946 * ```js 29947 * const { data, error } = await supabase.auth.signInWithOAuth({ 29948 * provider: 'github' 29949 * }) 29950 * ``` 29951 * 29952 * @exampleResponse Sign in using a third-party provider 29953 * ```json 29954 * { 29955 * data: { 29956 * provider: 'github', 29957 * url: <PROVIDER_URL_TO_REDIRECT_TO>, 29958 * flowId: <PKCE_FLOW_ID_OR_NULL> 29959 * }, 29960 * error: null 29961 * } 29962 * ``` 29963 * 29964 * @exampleDescription Sign in using a third-party provider with redirect 29965 * - When the OAuth provider successfully authenticates the user, they are redirected to the URL specified in the `redirectTo` parameter. This parameter defaults to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls). It does not redirect the user immediately after invoking this method. 29966 * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project. 29967 * 29968 * @example Sign in using a third-party provider with redirect 29969 * ```js 29970 * const { data, error } = await supabase.auth.signInWithOAuth({ 29971 * provider: 'github', 29972 * options: { 29973 * redirectTo: 'https://example.com/welcome' 29974 * } 29975 * }) 29976 * ``` 29977 * 29978 * @exampleDescription Sign in with scopes and access provider tokens 29979 * If you need additional access from an OAuth provider, in order to access provider specific APIs in the name of the user, you can do this by passing in the scopes the user should authorize for your application. Note that the `scopes` option takes in **a space-separated list** of scopes. 29980 * 29981 * Because OAuth sign-in often includes redirects, you should register an `onAuthStateChange` callback immediately after you create the Supabase client. This callback will listen for the presence of `provider_token` and `provider_refresh_token` properties on the `session` object and store them in local storage. The client library will emit these values **only once** immediately after the user signs in. You can then access them by looking them up in local storage, or send them to your backend servers for further processing. 29982 * 29983 * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend. 29984 * 29985 * @example Sign in with scopes and access provider tokens 29986 * ```js 29987 * // Register this immediately after calling createClient! 29988 * // Because signInWithOAuth causes a redirect, you need to fetch the 29989 * // provider tokens from the callback. 29990 * supabase.auth.onAuthStateChange((event, session) => { 29991 * if (session && session.provider_token) { 29992 * window.localStorage.setItem('oauth_provider_token', session.provider_token) 29993 * } 29994 * 29995 * if (session && session.provider_refresh_token) { 29996 * window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token) 29997 * } 29998 * 29999 * if (event === 'SIGNED_OUT') { 30000 * window.localStorage.removeItem('oauth_provider_token') 30001 * window.localStorage.removeItem('oauth_provider_refresh_token') 30002 * } 30003 * }) 30004 * 30005 * // Call this on your Sign in with GitHub button to initiate OAuth 30006 * // with GitHub with the requested elevated scopes. 30007 * await supabase.auth.signInWithOAuth({ 30008 * provider: 'github', 30009 * options: { 30010 * scopes: 'repo gist notifications' 30011 * } 30012 * }) 30013 * ``` 30014 */ 30015 async signInWithOAuth(e) { 30016 var s, r, n, o; 30017 return await this._handleProviderSignIn(e.provider, { 30018 redirectTo: (s = e.options) === null || s === void 0 ? void 0 : s.redirectTo, 30019 scopes: (r = e.options) === null || r === void 0 ? void 0 : r.scopes, 30020 queryParams: (n = e.options) === null || n === void 0 ? void 0 : n.queryParams, 30021 skipBrowserRedirect: (o = e.options) === null || o === void 0 ? void 0 : o.skipBrowserRedirect 30022 }); 30023 } 30024 /** 30025 * Log in an existing user by exchanging an Auth Code issued during the PKCE flow. 30026 * 30027 * @category Auth 30028 * 30029 * @remarks 30030 * - Used when `flowType` is set to `pkce` in client options. 30031 * - When several PKCE flows are in flight at once, pass `options.flowId` so 30032 * the code is exchanged with the verifier created by that specific flow. 30033 * The flow id is returned by `signInWithOAuth`, and with 30034 * `experimental.appendPkceFlowIdToRedirects` enabled it also arrives on 30035 * your callback URL as the reserved `sb_flow_id` query parameter (read 30036 * automatically in a browser). 30037 * - When a flow id is present but its stored verifier is gone (evicted, 30038 * already used, or from another device), the call fails with a verifier 30039 * missing error instead of trying another flow's verifier â a mismatched 30040 * verifier would consume the single-use code. Without any flow id the 30041 * most recently stored verifier is used, as before. 30042 * 30043 * @example Exchange Auth Code 30044 * ```js 30045 * supabase.auth.exchangeCodeForSession('34e770dd-9ff9-416c-87fa-43b31d7ef225') 30046 * ``` 30047 * 30048 * @example Exchange Auth Code for a specific flow (e.g. in a server-side callback handler) 30049 * ```js 30050 * const flowId = requestUrl.searchParams.get('sb_flow_id') 30051 * supabase.auth.exchangeCodeForSession(code, flowId ? { flowId } : undefined) 30052 * ``` 30053 * 30054 * @exampleResponse Exchange Auth Code 30055 * ```json 30056 * { 30057 * "data": { 30058 * session: { 30059 * access_token: '<ACCESS_TOKEN>', 30060 * token_type: 'bearer', 30061 * expires_in: 3600, 30062 * expires_at: 1700000000,
30063 * refresh_token: '<REFRESH_TOKEN>', 30064 * user: { 30065 * id: '11111111-1111-1111-1111-111111111111', 30066 * aud: 'authenticated', 30067 * role: 'authenticated', 30068 * email: '[email protected]' 30069 * email_confirmed_at: '2024-01-01T00:00:00Z', 30070 * phone: '', 30071 * confirmation_sent_at: '2024-01-01T00:00:00Z', 30072 * confirmed_at: '2024-01-01T00:00:00Z', 30073 * last_sign_in_at: '2024-01-01T00:00:00Z', 30074 * app_metadata: { 30075 * "provider": "email", 30076 * "providers": [ 30077 * "email", 30078 * "<OTHER_PROVIDER>" 30079 * ] 30080 * }, 30081 * user_metadata: { 30082 * email: '[email protected]', 30083 * email_verified: true, 30084 * full_name: 'User Name', 30085 * iss: '<ISS>', 30086 * name: 'User Name', 30087 * phone_verified: false, 30088 * provider_id: '<PROVIDER_ID>', 30089 * sub: '<SUB>' 30090 * }, 30091 * identities: [ 30092 * { 30093 * "identity_id": "22222222-2222-2222-2222-222222222222", 30094 * "id": "11111111-1111-1111-1111-111111111111", 30095 * "user_id": "11111111-1111-1111-1111-111111111111", 30096 * "identity_data": { 30097 * "email": "[email protected]", 30098 * "email_verified": false, 30099 * "phone_verified": false, 30100 * "sub": "11111111-1111-1111-1111-111111111111" 30101 * }, 30102 * "provider": "email", 30103 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30104 * "created_at": "2024-01-01T00:00:00Z", 30105 * "updated_at": "2024-01-01T00:00:00Z", 30106 * "email": "[email protected]" 30107 * }, 30108 * { 30109 * "identity_id": "33333333-3333-3333-3333-333333333333", 30110 * "id": "<ID>", 30111 * "user_id": "<USER_ID>", 30112 * "identity_data": { 30113 * "email": "[email protected]", 30114 * "email_verified": true, 30115 * "full_name": "User Name", 30116 * "iss": "<ISS>", 30117 * "name": "User Name", 30118 * "phone_verified": false, 30119 * "provider_id": "<PROVIDER_ID>", 30120 * "sub": "<SUB>" 30121 * }, 30122 * "provider": "<PROVIDER>", 30123 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30124 * "created_at": "2024-01-01T00:00:00Z", 30125 * "updated_at": "2024-01-01T00:00:00Z", 30126 * "email": "[email protected]" 30127 * } 30128 * ], 30129 * created_at: '2024-01-01T00:00:00Z', 30130 * updated_at: '2024-01-01T00:00:00Z', 30131 * is_anonymous: false 30132 * }, 30133 * provider_token: '<PROVIDER_TOKEN>', 30134 * provider_refresh_token: '<PROVIDER_REFRESH_TOKEN>' 30135 * }, 30136 * user: { 30137 * id: '11111111-1111-1111-1111-111111111111', 30138 * aud: 'authenticated', 30139 * role: 'authenticated', 30140 * email: '[email protected]', 30141 * email_confirmed_at: '2024-01-01T00:00:00Z', 30142 * phone: '', 30143 * confirmation_sent_at: '2024-01-01T00:00:00Z', 30144 * confirmed_at: '2024-01-01T00:00:00Z', 30145 * last_sign_in_at: '2024-01-01T00:00:00Z', 30146 * app_metadata: { 30147 * provider: 'email', 30148 * providers: [ 30149 * "email", 30150 * "<OTHER_PROVIDER>" 30151 * ] 30152 * }, 30153 * user_metadata: { 30154 * email: '[email protected]', 30155 * email_verified: true, 30156 * full_name: 'User Name', 30157 * iss: '<ISS>', 30158 * name: 'User Name', 30159 * phone_verified: false, 30160 * provider_id: '<PROVIDER_ID>', 30161 * sub: '<SUB>' 30162 * }, 30163 * identities: [ 30164 * { 30165 * "identity_id": "22222222-2222-2222-2222-222222222222", 30166 * "id": "11111111-1111-1111-1111-111111111111", 30167 * "user_id": "11111111-1111-1111-1111-111111111111", 30168 * "identity_data": { 30169 * "email": "[email protected]", 30170 * "email_verified": false, 30171 * "phone_verified": false, 30172 * "sub": "11111111-1111-1111-1111-111111111111" 30173 * }, 30174 * "provider": "email", 30175 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30176 * "created_at": "2024-01-01T00:00:00Z", 30177 * "updated_at": "2024-01-01T00:00:00Z", 30178 * "email": "[email protected]" 30179 * }, 30180 * { 30181 * "identity_id": "33333333-3333-3333-3333-333333333333", 30182 * "id": "<ID>", 30183 * "user_id": "<USER_ID>", 30184 * "identity_data": { 30185 * "email": "[email protected]", 30186 * "email_verified": true, 30187 * "full_name": "User Name", 30188 * "iss": "<ISS>", 30189 * "name": "User Name", 30190 * "phone_verified": false, 30191 * "provider_id": "<PROVIDER_ID>", 30192 * "sub": "<SUB>" 30193 * }, 30194 * "provider": "<PROVIDER>", 30195 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30196 * "created_at": "2024-01-01T00:00:00Z", 30197 * "updated_at": "2024-01-01T00:00:00Z", 30198 * "email": "[email protected]" 30199 * } 30200 * ], 30201 * created_at: '2024-01-01T00:00:00Z', 30202 * updated_at: '2024-01-01T00:00:00Z', 30203 * is_anonymous: false 30204 * }, 30205 * redirectType: null 30206 * }, 30207 * "error": null 30208 * } 30209 * ``` 30210 */ 30211 async exchangeCodeForSession(e, s) { 30212 return await this.initializePromise, this.lock != null ? this._acquireLock(this.lockAcquireTimeout, async () => this._exchangeCodeForSession(e, s)) : this._exchangeCodeForSession(e, s); 30213 } 30214 /** 30215 * Signs in a user by verifying a message signed by the user's private key. 30216 * Supports Ethereum (via Sign-In-With-Ethereum) & Solana (Sign-In-With-Solana) standards, 30217 * both of which derive from the EIP-4361 standard 30218 * With slight variation on Solana's side. 30219 * @reference https://eips.ethereum.org/EIPS/eip-4361 30220 * 30221 * @category Auth 30222 * 30223 * @remarks 30224 * - Uses a Web3 (Ethereum, Solana) wallet to sign a user in. 30225 * - Read up on the [potential for abuse](/docs/guides/auth/auth-web3#potential-for-abuse) before using it. 30226 * 30227 * @example Sign in with Solana or Ethereum (Window API) 30228 * ```js 30229 * // uses window.ethereum for the wallet 30230 * const { data, error } = await supabase.auth.signInWithWeb3({ 30231 * chain: 'ethereum', 30232 * statement: 'I accept the Terms of Service at https://example.com/tos' 30233 * }) 30234 * 30235 * // uses window.solana for the wallet 30236 * const { data, error } = await supabase.auth.signInWithWeb3({ 30237 * chain: 'solana', 30238 * statement: 'I accept the Terms of Service at https://example.com/tos' 30239 * }) 30240 * ``` 30241 * 30242 * @example Sign in with Ethereum (Message and Signature) 30243 * ```js 30244 * const { data, error } = await supabase.auth.signInWithWeb3({ 30245 * chain: 'ethereum', 30246 * message: '<sign in with ethereum message>', 30247 * signature: '<hex of the ethereum signature over the message>', 30248 * }) 30249 * ``` 30250 * 30251 * @example Sign in with Solana (Brave) 30252 * ```js 30253 * const { data, error } = await supabase.auth.signInWithWeb3({ 30254 * chain: 'solana', 30255 * statement: 'I accept the Terms of Service at https://example.com/tos', 30256 * wallet: window.braveSolana 30257 * }) 30258 * ``` 30259 * 30260 * @example Sign in with Solana (Wallet Adapter) 30261 * ```jsx 30262 * function SignInButton() { 30263 * const wallet = useWallet() 30264 * 30265 * return ( 30266 * <> 30267 * {wallet.connected ? ( 30268 * <button 30269 * onClick={() => { 30270 * supabase.auth.signInWithWeb3({ 30271 * chain: 'solana', 30272 * statement: 'I accept the Terms of Service at https://example.com/tos', 30273 * wallet, 30274 * }) 30275 * }} 30276 * > 30277 * Sign in with Solana 30278 * </button> 30279 * ) : ( 30280 * <WalletMultiButton /> 30281 * )} 30282 * </> 30283 * ) 30284 * } 30285 * 30286 * function App() { 30287 * const endpoint = clusterApiUrl('devnet') 30288 * const wallets = useMemo(() => [], []) 30289 * 30290 * return ( 30291 * <ConnectionProvider endpoint={endpoint}> 30292 * <WalletProvider wallets={wallets}> 30293 * <WalletModalProvider> 30294 * <SignInButton /> 30295 * </WalletModalProvider> 30296 * </WalletProvider> 30297 * </ConnectionProvider> 30298 * ) 30299 * } 30300 * ``` 30301 */ 30302 async signInWithWeb3(e) { 30303 const { chain: s } = e; 30304 switch (s) { 30305 case "ethereum": 30306 return await this.signInWithEthereum(e); 30307 case "solana": 30308 return await this.signInWithSolana(e); 30309 default: 30310 throw new Error(`@supabase/auth-js: Unsupported chain "${s}"`); 30311 } 30312 } 30313 async signInWithEthereum(e) { 30314 var s, r, n, o, L, d, l, g, f, p, M; 30315 let u, h; 30316 if ("message" in e) 30317 u = e.message, h = e.signature; 30318 else { 30319 const { chain: x, wallet: _, statement: v, options: y } = e; 30320 let b; 30321 if (_e()) 30322 if (typeof _ == "object") 30323 b = _; 30324 else { 30325 const P = window; 30326 if ("ethereum" in P && typeof P.ethereum == "object" && "request" in P.ethereum && typeof P.ethereum.request == "function") 30327 b = P.ethereum; 30328 else 30329 throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead."); 30330 } 30331 else { 30332 if (typeof _ != "object" || !y?.url) 30333 throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments."); 30334 b = _; 30335 } 30336 const S = new URL((s = y?.url) !== null && s !== void 0 ? s : window.location.href), k = await b.request({ 30337 method: "eth_requestAccounts" 30338 }).then((P) => P).catch(() => { 30339 throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid"); 30340 }); 30341 if (!k || k.length === 0) 30342 throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected."); 30343 const A = Ii(k[0]); 30344 let I = (r = y?.signInWithEthereum) === null || r === void 0 ? void 0 : r.chainId; 30345 if (!I) { 30346 const P = await b.request({ 30347 method: "eth_chainId" 30348 }); 30349 I = rm(P); 30350 } 30351 const w = { 30352 domain: S.host, 30353 address: A, 30354 statement: v, 30355 uri: S.href, 30356 version: "1", 30357 chainId: I, 30358 nonce: (n = y?.signInWithEthereum) === null || n === void 0 ? void 0 : n.nonce, 30359 issuedAt: (L = (o = y?.signInWithEthereum) === null || o === void 0 ? void 0 : o.issuedAt) !== null && L !== void 0 ? L : /* @__PURE__ */ new Date(), 30360 expirationTime: (d = y?.signInWithEthereum) === null || d === void 0 ? void 0 : d.expirationTime, 30361 notBefore: (l = y?.signInWithEthereum) === null || l === void 0 ? void 0 : l.notBefore, 30362 requestId: (g = y?.signInWithEthereum) === null || g === void 0 ? void 0 : g.requestId, 30363 resources: (f = y?.signInWithEthereum) === null || f === void 0 ? void 0 : f.resources 30364 }; 30365 u = om(w), h = await b.request({ 30366 method: "personal_sign", 30367 params: [nm(u), A] 30368 }); 30369 } 30370 try { 30371 const { data: x, error: _ } = await N(this.fetch, "POST", `${this.url}/token?grant_type=web3`, { 30372 headers: this.headers, 30373 body: Object.assign({ 30374 chain: "ethereum", 30375 message: u, 30376 signature: h 30377 }, !((p = e.options) === null || p === void 0) && p.captchaToken ? { gotrue_meta_security: { c
30377aptcha_token: (M = e.options) === null || M === void 0 ? void 0 : M.captchaToken } } : null), 30378 xform: De 30379 }); 30380 if (_) 30381 throw _; 30382 if (!x || !x.session || !x.user) { 30383 const v = new et(); 30384 return this._returnResult({ data: { user: null, session: null }, error: v }); 30385 } 30386 return x.session && (await this._saveSession(x.session), await this._notifyAllSubscribers("SIGNED_IN", x.session)), this._returnResult({ data: Object.assign({}, x), error: _ }); 30387 } catch (x) { 30388 if (B(x)) 30389 return this._returnResult({ data: { user: null, session: null }, error: x }); 30390 throw x; 30391 } 30392 } 30393 async signInWithSolana(e) { 30394 var s, r, n, o, L, d, l, g, f, p, M, u; 30395 let h, x; 30396 if ("message" in e) 30397 h = e.message, x = e.signature; 30398 else { 30399 const { chain: _, wallet: v, statement: y, options: b } = e; 30400 let S; 30401 if (_e()) 30402 if (typeof v == "object") 30403 S = v; 30404 else { 30405 const A = window; 30406 if ("solana" in A && typeof A.solana == "object" && ("signIn" in A.solana && typeof A.solana.signIn == "function" || "signMessage" in A.solana && typeof A.solana.signMessage == "function")) 30407 S = A.solana; 30408 else 30409 throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead."); 30410 } 30411 else { 30412 if (typeof v != "object" || !b?.url) 30413 throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments."); 30414 S = v; 30415 } 30416 const k = new URL((s = b?.url) !== null && s !== void 0 ? s : window.location.href); 30417 if ("signIn" in S && S.signIn) { 30418 const A = await S.signIn(Object.assign(Object.assign(Object.assign({ issuedAt: (/* @__PURE__ */ new Date()).toISOString() }, b?.signInWithSolana), { 30419 // non-overridable properties 30420 version: "1", 30421 domain: k.host, 30422 uri: k.href 30423 }), y ? { statement: y } : null)); 30424 let I; 30425 if (Array.isArray(A) && A[0] && typeof A[0] == "object") 30426 I = A[0]; 30427 else if (A && typeof A == "object" && "signedMessage" in A && "signature" in A) 30428 I = A; 30429 else 30430 throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value"); 30431 if ("signedMessage" in I && "signature" in I && (typeof I.signedMessage == "string" || I.signedMessage instanceof Uint8Array) && I.signature instanceof Uint8Array) 30432 h = typeof I.signedMessage == "string" ? I.signedMessage : new TextDecoder().decode(I.signedMessage), x = I.signature; 30433 else 30434 throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields"); 30435 } else { 30436 if (!("signMessage" in S) || typeof S.signMessage != "function" || !("publicKey" in S) || typeof S != "object" || !S.publicKey || !("toBase58" in S.publicKey) || typeof S.publicKey.toBase58 != "function") 30437 throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API"); 30438 h = [ 30439 `${k.host} wants you to sign in with your Solana account:`, 30440 S.publicKey.toBase58(), 30441 ...y ? ["", y, ""] : [""], 30442 "Version: 1", 30443 `URI: ${k.href}`, 30444 `Issued At: ${(n = (r = b?.signInWithSolana) === null || r === void 0 ? void 0 : r.issuedAt) !== null && n !== void 0 ? n : (/* @__PURE__ */ new Date()).toISOString()}`, 30445 ...!((o = b?.signInWithSolana) === null || o === void 0) && o.notBefore ? [`Not Before: ${b.signInWithSolana.notBefore}`] : [], 30446 ...!((L = b?.signInWithSolana) === null || L === void 0) && L.expirationTime ? [`Expiration Time: ${b.signInWithSolana.expirationTime}`] : [], 30447 ...!((d = b?.signInWithSolana) === null || d === void 0) && d.chainId ? [`Chain ID: ${b.signInWithSolana.chainId}`] : [], 30448 ...!((l = b?.signInWithSolana) === null || l === void 0) && l.nonce ? [`Nonce: ${b.signInWithSolana.nonce}`] : [], 30449 ...!((g = b?.signInWithSolana) === null || g === void 0) && g.requestId ? [`Request ID: ${b.signInWithSolana.requestId}`] : [], 30450 ...!((p = (f = b?.signInWithSolana) === null || f === void 0 ? void 0 : f.resources) === null || p === void 0) && p.length ? [ 30451 "Resources", 30452 ...b.signInWithSolana.resources.map((I) => `- ${I}`) 30453 ] : [] 30454 ].join(` 30455`); 30456 const A = await S.signMessage(new TextEncoder().encode(h), "utf8"); 30457 if (!A || !(A instanceof Uint8Array)) 30458 throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value"); 30459 x = A; 30460 } 30461 } 30462 try { 30463 const { data: _, error: v } = await N(this.fetch, "POST", `${this.url}/token?grant_type=web3`, { 30464 headers: this.headers, 30465 body: Object.assign({ chain: "solana", message: h, signature: Z1(x) }, !((M = e.options) === null || M === void 0) && M.captchaToken ? { gotrue_meta_security: { c
30465aptcha_token: (u = e.options) === null || u === void 0 ? void 0 : u.captchaToken } } : null), 30466 xform: De 30467 }); 30468 if (v) 30469 throw v; 30470 if (!_ || !_.session || !_.user) { 30471 const y = new et(); 30472 return this._returnResult({ data: { user: null, session: null }, error: y }); 30473 } 30474 return _.session && (await this._saveSession(_.session), await this._notifyAllSubscribers("SIGNED_IN", _.session)), this._returnResult({ data: Object.assign({}, _), error: v }); 30475 } catch (_) { 30476 if (B(_)) 30477 return this._returnResult({ data: { user: null, session: null }, error: _ }); 30478 throw _; 30479 } 30480 } 30481 async _exchangeCodeForSession(e, s) { 30482 const r = s?.flowId != null, n = r ? i3(s?.flowId) : _e() ? i3(u6(window.location.href)[H1]) : null; 30483 r && !n && this._debug("#_exchangeCodeForSession()", "provided flowId is not a valid flow id", s?.flowId); 30484 const { verifier: o, flowId: L } = r && !n ? { verifier: null, flowId: null } : await Vh(this.storage, this.storageKey, n), [d, l] = (o ?? "").split("/"); 30485 try { 30486 if (!d && this.flowType === "pkce") 30487 throw new Th(); 30488 const { data: g, error: f } = await N(this.fetch, "POST", `${this.url}/token?grant_type=pkce`, { 30489 headers: this.headers, 30490 body: { 30491 auth_code: e, 30492 code_verifier: d 30493 }, 30494 xform: De 30495 }); 30496 if (await He(this.storage, this.storageKey, L), f) 30497 throw f;
30498 if (!g || !g.session || !g.user) { 30499 const p = new et(); 30500 return this._returnResult({ 30501 data: { user: null, session: null, redirectType: null }, 30502 error: p 30503 }); 30504 } 30505 return g.session && (await this._saveSession(g.session), await this._notifyAllSubscribers(l === "recovery" ? "PASSWORD_RECOVERY" : "SIGNED_IN", g.session)), this._returnResult({ data: Object.assign(Object.assign({}, g), { redirectType: l ?? null }), error: f }); 30506 } catch (g) { 30507 if (await He(this.storage, this.storageKey, L), B(g)) 30508 return this._returnResult({ 30509 data: { user: null, session: null, redirectType: null }, 30510 error: g 30511 }); 30512 throw g; 30513 } 30514 } 30515 /** 30516 * Allows signing in with an OIDC ID token. The authentication provider used 30517 * should be enabled and configured. 30518 * 30519 * @category Auth 30520 * 30521 * @remarks 30522 * - Use an ID token to sign in. 30523 * - Especially useful when implementing sign in using native platform dialogs in mobile or desktop apps using Sign in with Apple or Sign in with Google on iOS and Android. 30524 * - You can also use Google's [One Tap](https://developers.google.com/identity/gsi/web/guides/display-google-one-tap) and [Automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) via this API. 30525 * 30526 * @example Sign In using ID Token 30527 * ```js 30528 * const { data, error } = await supabase.auth.signInWithIdToken({ 30529 * provider: 'google', 30530 * token: 'your-id-token' 30531 * }) 30532 * ``` 30533 * 30534 * @exampleResponse Sign In using ID Token 30535 * ```json 30536 * { 30537 * "data": { 30538 * "user": { 30539 * "id": "11111111-1111-1111-1111-111111111111", 30540 * "aud": "authenticated", 30541 * "role": "authenticated", 30542 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30543 * "app_metadata": { 30544 * ... 30545 * }, 30546 * "user_metadata": { 30547 * ... 30548 * }, 30549 * "identities": [ 30550 * { 30551 * "identity_id": "22222222-2222-2222-2222-222222222222", 30552 * "provider": "google", 30553 * } 30554 * ], 30555 * "created_at": "2024-01-01T00:00:00Z", 30556 * "updated_at": "2024-01-01T00:00:00Z", 30557 * }, 30558 * "session": { 30559 * "access_token": "<ACCESS_TOKEN>", 30560 * "token_type": "bearer", 30561 * "expires_in": 3600, 30562 * "expires_at": 1700000000, 30563 * "refresh_token": "<REFRESH_TOKEN>", 30564 * "user": { 30565 * "id": "11111111-1111-1111-1111-111111111111", 30566 * "aud": "authenticated", 30567 * "role": "authenticated", 30568 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30569 * "app_metadata": { 30570 * ... 30571 * }, 30572 * "user_metadata": { 30573 * ... 30574 * }, 30575 * "identities": [ 30576 * { 30577 * "identity_id": "22222222-2222-2222-2222-222222222222", 30578 * "provider": "google", 30579 * } 30580 * ], 30581 * "created_at": "2024-01-01T00:00:00Z", 30582 * "updated_at": "2024-01-01T00:00:00Z", 30583 * } 30584 * } 30585 * }, 30586 * "error": null 30587 * } 30588 * ``` 30589 */ 30590 async signInWithIdToken(e) { 30591 try { 30592 const { options: s, provider: r, token: n, access_token: o, nonce: L } = e, d = await N(this.fetch, "POST", `${this.url}/token?grant_type=id_token`, { 30593 headers: this.headers, 30594 body: { 30595 provider: r, 30596 id_token: n, 30597 access_token: o, 30598 nonce: L, 30599 gotrue_meta_security: { captcha_token: s?.captchaToken } 30600 }, 30601 xform: De 30602 }), { data: l, error: g } = d; 30603 if (g) 30604 return this._returnResult({ data: { user: null, session: null }, error: g }); 30605 if (!l || !l.session || !l.user) { 30606 const f = new et(); 30607 return this._returnResult({ data: { user: null, session: null }, error: f }); 30608 } 30609 return l.session && (await this._saveSession(l.session), await this._notifyAllSubscribers("SIGNED_IN", l.session)), this._returnResult({ data: l, error: g }); 30610 } catch (s) { 30611 if (B(s)) 30612 return this._returnResult({ data: { user: null, session: null }, error: s }); 30613 throw s; 30614 } 30615 } 30616 /** 30617 * Log in a user using magiclink or a one-time password (OTP). 30618 * 30619 * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent. 30620 * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent. 30621 * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins. 30622 * 30623 * Be aware that you may get back an error message that will not distinguish 30624 * between the cases where the account does not exist or, that the account 30625 * can only be accessed via social login. 30626 * 30627 * Do note that you will need to configure a Whatsapp sender on Twilio 30628 * if you are using phone sign in with the 'whatsapp' channel. The whatsapp 30629 * channel is not supported on other providers 30630 * at this time. 30631 * This method supports PKCE when an email is passed. 30632 * 30633 * @category Auth 30634 * 30635 * @remarks 30636 * - Requires either an email or phone number. 30637 * - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number. 30638 * - If the user doesn't exist, `signInWithOtp()` will signup the user instead. To restrict this behavior, you can set `shouldCreateUser` in `SignInWithPasswordlessCredentials.options` to `false`. 30639 * - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP. 30640 * - If you're using phone, you can configure whether you want the user to receive a OTP. 30641 * - The magic link's destination URL is determined by the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls).
30642 * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project. 30643 * - Magic links and OTPs share the same implementation. To send users a one-time code instead of a magic link, [modify the magic link email template](/dashboard/project/_/auth/templates) to include `{{ .Token }}` instead of `{{ .ConfirmationURL }}`. 30644 * - See our [Twilio Phone Auth Guide](/docs/guides/auth/phone-login?showSMSProvider=Twilio) for details about configuring WhatsApp sign in. 30645 * 30646 * @exampleDescription Sign in with email 30647 * The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds. 30648 * 30649 * @example Sign in with email 30650 * ```js 30651 * const { data, error } = await supabase.auth.signInWithOtp({ 30652 * email: '[email protected]', 30653 * options: { 30654 * emailRedirectTo: 'https://example.com/welcome' 30655 * } 30656 * }) 30657 * ``` 30658 * 30659 * @exampleResponse Sign in with email 30660 * ```json 30661 * { 30662 * "data": { 30663 * "user": null, 30664 * "session": null 30665 * }, 30666 * "error": null 30667 * } 30668 * ``` 30669 * 30670 * @exampleDescription Sign in with SMS OTP 30671 * The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. 30672 * 30673 * @example Sign in with SMS OTP 30674 * ```js 30675 * const { data, error } = await supabase.auth.signInWithOtp({ 30676 * phone: '+13334445555', 30677 * }) 30678 * ``` 30679 * 30680 * @exampleDescription Sign in with WhatsApp OTP 30681 * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature. 30682 * 30683 * @example Sign in with WhatsApp OTP 30684 * ```js 30685 * const { data, error } = await supabase.auth.signInWithOtp({ 30686 * phone: '+13334445555', 30687 * options: { 30688 * channel:'whatsapp', 30689 * } 30690 * }) 30691 * ``` 30692 */ 30693 async signInWithOtp(e) { 30694 var s, r, n, o, L; 30695 let d = null; 30696 try { 30697 if ("email" in e) { 30698 const { email: l, options: g } = e; 30699 let f = null, p = null; 30700 this.flowType === "pkce" && ([f, p, d] = await this._getCodeChallengeAndMethod()); 30701 const { error: M } = await N(this.fetch, "POST", `${this.url}/otp`, { 30702 headers: this.headers, 30703 body: { 30704 email: l, 30705 data: (s = g?.data) !== null && s !== void 0 ? s : {}, 30706 create_user: (r = g?.shouldCreateUser) !== null && r !== void 0 ? r : !0, 30707 gotrue_meta_security: { captcha_token: g?.captchaToken }, 30708 code_challenge: f, 30709 code_challenge_method: p 30710 }, 30711 redirectTo: this._maybeAppendFlowIdToRedirect(g?.emailRedirectTo, d) 30712 }); 30713 return this._returnResult({ data: { user: null, session: null }, error: M }); 30714 } 30715 if ("phone" in e) { 30716 const { phone: l, options: g } = e, { data: f, error: p } = await N(this.fetch, "POST", `${this.url}/otp`, { 30717 headers: this.headers, 30718 body: { 30719 phone: l, 30720 data: (n = g?.data) !== null && n !== void 0 ? n : {}, 30721 create_user: (o = g?.shouldCreateUser) !== null && o !== void 0 ? o : !0, 30722 gotrue_meta_security: { captcha_token: g?.captchaToken }, 30723 channel: (L = g?.channel) !== null && L !== void 0 ? L : "sms" 30724 } 30725 }); 30726 return this._returnResult({ 30727 data: { user: null, session: null, messageId: f?.message_id }, 30728 error: p 30729 }); 30730 } 30731 throw new V2("You must provide either an email or phone number."); 30732 } catch (l) { 30733 if (await He(this.storage, this.storageKey, d), B(l)) 30734 return this._returnResult({ data: { user: null, session: null }, error: l }); 30735 throw l; 30736 } 30737 } 30738 /** 30739 * Log in a user given a User supplied OTP or TokenHash received through mobile or email. 30740 * 30741 * @category Auth 30742 * 30743 * @remarks 30744 * - The `verifyOtp` method takes in different verification types. 30745 * - If a phone number is used, the type can either be: 30746 * 1. `sms` â Used when verifying a one-time password (OTP) sent via SMS during sign-up or sign-in. 30747 * 2. `phone_change` â Used when verifying an OTP sent to a new phone number during a phone number update process. 30748 * - If an email address is used, the type can be one of the following (note: `signup` and `magiclink` types are deprecated): 30749 * 1. `email` â Used when verifying an OTP sent to the user's email during sign-up or sign-in. 30750 * 2. `recovery` â Used when verifying an OTP sent for account recovery, typically after a password reset request. 30751 * 3. `invite` â Used when verifying an OTP sent as part of an invitation to join a project or organization. 30752 * 4. `email_change` â Used when verifying an OTP sent to a new email address during an email update process. 30753 * - The verification type used should be determined based on the corresponding auth method called before `verifyOtp` to sign up / sign-in a user. 30754 * - The `TokenHash` is contained in the [email templates](/docs/guides/auth/auth-email-templates) and can be used to sign in. You may wish to use the hash for the PKCE flow for Server Side Auth. Read [the Password-based Auth guide](/docs/guides/auth/passwords) for more details. 30755 * 30756 * @example Verify Signup One-Time Password (OTP) 30757 * ```js 30758 * const { data, error } = await supabase.auth.verifyOtp({ email, token, type: 'email'}) 30759 * ``` 30760 * 30761 * @exampleResponse Verify Signup One-Time Password (OTP) 30762 * ```json 30763 * { 30764 * "data": { 30765 * "user": { 30766 * "id": "11111111-1111-1111-1111-111111111111", 30767 * "aud": "authenticated", 30768 * "role": "authenticated", 30769 * "email": "[email protected]", 30770 * "email_confirmed_at": "2024-01-01T00:00:00Z", 30771 * "phone": "", 30772 * "confirmed_at": "2024-01-01T00:00:00Z", 30773 * "recovery_sent_at": "2024-01-01T00:00:00Z", 30774 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30775 * "app_metadata": { 30776 * "provider": "email", 30777 * "providers": [ 30778 * "email" 30779 * ] 30780 * }, 30781 * "user_metadata": { 30782 * "email": "[email protected]", 30783 * "email_verified": false, 30784 * "phone_verified": false, 30785 * "sub": "11111111-1111-1111-1111-111111111111" 30786 * }, 30787 * "identities": [ 30788 * { 30789 * "identity_id": "22222222-2222-2222-2222-222222222222", 30790 * "id": "11111111-1111-1111-1111-111111111111", 30791 * "user_id": "11111111-1111-1111-1111-111111111111", 30792 * "identity_data": { 30793 * "email": "[email protected]", 30794 * "email_verified": false, 30795 * "phone_verified": false, 30796 * "sub": "11111111-1111-1111-1111-111111111111" 30797 * }, 30798 * "provider": "email", 30799 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30800 * "created_at": "2024-01-01T00:00:00Z", 30801 * "updated_at": "2024-01-01T00:00:00Z", 30802 * "email": "[email protected]" 30803 * } 30804 * ], 30805 * "created_at": "2024-01-01T00:00:00Z", 30806 * "updated_at": "2024-01-01T00:00:00Z", 30807 * "is_anonymous": false 30808 * }, 30809 * "session": { 30810 * "access_token": "<ACCESS_TOKEN>", 30811 * "token_type": "bearer", 30812 * "expires_in": 3600, 30813 * "expires_at": 1700000000, 30814 * "refresh_token": "<REFRESH_TOKEN>", 30815 * "user": { 30816 * "id": "11111111-1111-1111-1111-111111111111", 30817 * "aud": "authenticated", 30818 * "role": "authenticated", 30819 * "email": "[email protected]", 30820 * "email_confirmed_at": "2024-01-01T00:00:00Z", 30821 * "phone": "", 30822 * "confirmed_at": "2024-01-01T00:00:00Z", 30823 * "recovery_sent_at": "2024-01-01T00:00:00Z", 30824 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30825 * "app_metadata": { 30826 * "provider": "email", 30827 * "providers": [ 30828 * "email" 30829 * ] 30830 * }, 30831 * "user_metadata": { 30832 * "email": "[email protected]", 30833 * "email_verified": false, 30834 * "phone_verified": false, 30835 * "sub": "11111111-1111-1111-1111-111111111111" 30836 * }, 30837 * "identities": [ 30838 * { 30839 * "identity_id": "22222222-2222-2222-2222-222222222222", 30840 * "id": "11111111-1111-1111-1111-111111111111", 30841 * "user_id": "11111111-1111-1111-1111-111111111111", 30842 * "identity_data": { 30843 * "email": "[email protected]", 30844 * "email_verified": false, 30845 * "phone_verified": false, 30846 * "sub": "11111111-1111-1111-1111-111111111111" 30847 * }, 30848 * "provider": "email", 30849 * "last_sign_in_at": "2024-01-01T00:00:00Z", 30850 * "created_at": "2024-01-01T00:00:00Z", 30851 * "updated_at": "2024-01-01T00:00:00Z", 30852 * "email": "[email protected]" 30853 * } 30854 * ], 30855 * "created_at": "2024-01-01T00:00:00Z", 30856 * "updated_at": "2024-01-01T00:00:00Z", 30857 * "is_anonymous": false 30858 * } 30859 * } 30860 * }, 30861 * "error": null 30862 * } 30863 * ``` 30864 * 30865 * @example Verify SMS One-Time Password (OTP) 30866 * ```js 30867 * const { data, error } = await supabase.auth.verifyOtp({ phone, token, type: 'sms'}) 30868 * ``` 30869 * 30870 * @example Verify Email Auth (Token Hash) 30871 * ```js 30872 * const { data, error } = await supabase.auth.verifyOtp({ token_hash: tokenHash, type: 'email'}) 30873 * ``` 30874 */ 30875 async verifyOtp(e) { 30876 var s, r; 30877 try { 30878 let n, o; 30879 "options" in e && (n = (s = e.options) === null || s === void 0 ? void 0 : s.redirectTo, o = (r = e.options) === null || r === void 0 ? void 0 : r.captchaToken); 30880 const { data: L, error: d } = await N(this.fetch, "POST", `${this.url}/verify`, { 30881 headers: this.headers, 30882 body: Object.assign(Object.assign({}
30882, e), { gotrue_meta_security: { captcha_token: o } }), 30883 redirectTo: n, 30884 xform: De 30885 }); 30886 if (d) 30887 throw d; 30888 if (!L) 30889 throw new Error("An error occurred on token verification."); 30890 const l = L.session, g = L.user; 30891 return l?.access_token && (await this._saveSession(l), await this._notifyAllSubscribers(e.type == "recovery" ? "PASSWORD_RECOVERY" : "SIGNED_IN", l)), this._returnResult({ data: { user: g, session: l }, error: null }); 30892 } catch (n) { 30893 if (B(n)) 30894 return this._returnResult({ data: { user: null, session: null }, error: n }); 30895 throw n; 30896 } 30897 } 30898 /** 30899 * Attempts a single-sign on using an enterprise Identity Provider. A 30900 * successful SSO attempt will redirect the current page to the identity 30901 * provider authorization page. The redirect URL is implementation and SSO 30902 * protocol specific. 30903 * 30904 * You can use it by providing a SSO domain. Typically you can extract this 30905 * domain by asking users for their email address. If this domain is 30906 * registered on the Auth instance the redirect will use that organization's 30907 * currently active SSO Identity Provider for the login. 30908 * 30909 * If you have built an organization-specific login page, you can use the 30910 * organization's SSO Identity Provider UUID directly instead. 30911 * 30912 * @category Auth 30913 * 30914 * @remarks 30915 * - Before you can call this method you need to [establish a connection](/docs/guides/auth/sso/auth-sso-saml#managing-saml-20-connections) to an identity provider. Use the [CLI commands](/docs/reference/cli/supabase-sso) to do this. 30916 * - If you've associated an email domain to the identity provider, you can use the `domain` property to start a sign-in flow. 30917 * - In case you need to use a different way to start the authentication flow with an identity provider, you can use the `providerId` property. For example: 30918 * - Mapping specific user email addresses with an identity provider. 30919 * - Using different hints to identity the identity provider to be used by the user, like a company-specific page, IP address or other tracking information. 30920 * 30921 * @example Sign in with email domain 30922 * ```js 30923 * // You can extract the user's email domain and use it to trigger the 30924 * // authentication flow with the correct identity provider. 30925 * 30926 * const { data, error } = await supabase.auth.signInWithSSO({ 30927 * domain: 'company.com' 30928 * }) 30929 * 30930 * if (data?.url) { 30931 * // redirect the user to the identity provider's authentication flow 30932 * window.location.href = data.url 30933 * } 30934 * ``` 30935 * 30936 * @example Sign in with provider UUID 30937 * ```js 30938 * // Useful when you need to map a user's sign in request according 30939 * // to different rules that can't use email domains. 30940 * 30941 * const { data, error } = await supabase.auth.signInWithSSO({ 30942 * providerId: '21648a9d-8d5a-4555-a9d1-d6375dc14e92' 30943 * }) 30944 * 30945 * if (data?.url) { 30946 * // redirect the user to the identity provider's authentication flow 30947 * window.location.href = data.url 30948 * } 30949 * ``` 30950 */ 30951 async signInWithSSO(e) { 30952 var s, r, n, o; 30953 let L = null; 30954 try { 30955 let d = null, l = null; 30956 this.flowType === "pkce" && ([d, l, L] = await this._getCodeChallengeAndMethod()); 30957 const g = await N(this.fetch, "POST", `${this.url}/sso`, { 30958 body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, "providerId" in e ? { provider_id: e.providerId } : null), "domain" in e ? { domain: e.domain } : null), { redirect_to: this._maybeAppendFlowIdToRedirect((s = e.options) === null || s === void 0 ? void 0 : s.redirectTo, L) }), !((r = e?.options) === null || r === void 0) && r.captchaToken ? { gotrue_meta_security: { captcha_token: e.options.captchaToken } } : null), { skip_http_redirect: !0, code_challenge: d, code_challenge_method: l }), 30959 headers: this.headers, 30960 xform: Qh 30961 }); 30962 return !((n = g.data) === null || n === void 0) && n.url && _e() && !(!((o = e.options) === null || o === void 0) && o.skipBrowserRedirect) && window.location.assign(g.data.url), this._returnResult(g); 30963 } catch (d) { 30964 if (await He(this.storage, this.storageKey, L), B(d)) 30965 return this._returnResult({ data: null, error: d }); 30966 throw d; 30967 } 30968 } 30969 /** 30970 * Sends a reauthentication OTP to the user's email or phone number. 30971 * Requires the user to be signed-in. 30972 * 30973 * @category Auth 30974 * 30975 * @remarks 30976 * - This method is used together with `updateUser()` when a user's password needs to be updated. 30977 * - If you require your user to reauthenticate before updating their password, you need to enable the **Secure password change** option in your [project's email provider settings](/dashboard/project/_/auth/providers). 30978 * - A user is only require to reauthenticate before updating their password if **Secure password change** is enabled and the user **hasn't recently signed in**. A user is deemed recently signed in if the session was created in the last 24 hours. 30979 * - This method will send a nonce to the user's email. If the user doesn't have a confirmed email address, the method will send the nonce to the user's confirmed phone number instead. 30980 * - After receiving the OTP, include it as the `nonce` in your `updateUser()` call to finalize the password change. 30981 * 30982 * @exampleDescription Send reauthentication nonce 30983 * Sends a reauthentication nonce to the user's email or phone number. 30984 * 30985 * @example Send reauthentication nonce 30986 * ```js 30987 * const { error } = await supabase.auth.reauthenticate() 30988 * ``` 30989 */ 30990 async reauthenticate() { 30991 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._reauthenticate()) : await this._reauthenticate(); 30992 } 30993 async _reauthenticate() { 30994 try { 30995 return await this._useSession(async (e) => { 30996 const { data: { session: s }, error: r }
30996 = e; 30997 if (r) 30998 throw r; 30999 if (!s) 31000 throw new he(); 31001 const { error: n } = await N(this.fetch, "GET", `${this.url}/reauthenticate`, { 31002 headers: this.headers, 31003 jwt: s.access_token 31004 }); 31005 return this._returnResult({ data: { user: null, session: null }, error: n }); 31006 }); 31007 } catch (e) { 31008 if (B(e)) 31009 return this._returnResult({ data: { user: null, session: null }, error: e }); 31010 throw e; 31011 } 31012 } 31013 /** 31014 * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP. 31015 * 31016 * @category Auth 31017 * 31018 * @remarks 31019 * - Resends a signup confirmation, email change or phone change email to the user. 31020 * - Passwordless sign-ins can be resent by calling the `signInWithOtp()` method again. 31021 * - Password recovery emails can be resent by calling the `resetPasswordForEmail()` method again. 31022 * - This method will only resend an email or phone OTP to the user if there was an initial signup, email change or phone change request being made(note: For existing users signing in with OTP, you should use `signInWithOtp()` again to resend the OTP). 31023 * - You can specify a redirect url when you resend an email link using the `emailRedirectTo` option. 31024 * 31025 * @exampleDescription Resend an email signup confirmation 31026 * Resends the email signup confirmation to the user 31027 * 31028 * @example Resend an email signup confirmation 31029 * ```js 31030 * const { error } = await supabase.auth.resend({ 31031 * type: 'signup', 31032 * email: '[email protected]', 31033 * options: { 31034 * emailRedirectTo: 'https://example.com/welcome' 31035 * } 31036 * }) 31037 * ``` 31038 * 31039 * @exampleDescription Resend a phone signup confirmation 31040 * Resends the phone signup confirmation email to the user 31041 * 31042 * @example Resend a phone signup confirmation 31043 * ```js 31044 * const { error } = await supabase.auth.resend({ 31045 * type: 'sms', 31046 * phone: '1234567890' 31047 * }) 31048 * ``` 31049 * 31050 * @exampleDescription Resend email change email 31051 * Resends the email change email to the user 31052 * 31053 * @example Resend email change email 31054 * ```js 31055 * const { error } = await supabase.auth.resend({ 31056 * type: 'email_change', 31057 * email: '[email protected]' 31058 * }) 31059 * ``` 31060 * 31061 * @exampleDescription Resend phone change OTP 31062 * Resends the phone change OTP to the user 31063 * 31064 * @example Resend phone change OTP 31065 * ```js 31066 * const { error } = await supabase.auth.resend({ 31067 * type: 'phone_change', 31068 * phone: '1234567890' 31069 * }) 31070 * ``` 31071 */ 31072 async resend(e) { 31073 let s = null; 31074 try { 31075 const r = `${this.url}/resend`; 31076 if ("email" in e) { 31077 const { email: n, type: o, options: L } = e; 31078 let d = null, l = null; 31079 this.flowType === "pkce" && ([d, l, s] = await this._getCodeChallengeAndMethod()); 31080 const { error: g } = await N(this.fetch, "POST", r, { 31081 headers: this.headers, 31082 body: { 31083 email: n, 31084 type: o, 31085 gotrue_meta_security: { captcha_token: L?.captchaToken }, 31086 code_challenge: d, 31087 code_challenge_method: l 31088 }, 31089 redirectTo: this._maybeAppendFlowIdToRedirect(L?.emailRedirectTo, s) 31090 }); 31091 return g && await He(this.storage, this.storageKey, s), this._returnResult({ data: { user: null, session: null }, error: g }); 31092 } else if ("phone" in e) { 31093 const { phone: n, type: o, options: L } = e, { data: d, error: l } = await N(this.fetch, "POST", r, { 31094 headers: this.headers, 31095 body: { 31096 phone: n, 31097 type: o, 31098 gotrue_meta_security: { captcha_token: L?.captchaToken } 31099 } 31100 }); 31101 return this._returnResult({ 31102 data: { user: null, session: null, messageId: d?.message_id }, 31103 error: l 31104 }); 31105 } 31106 throw new V2("You must provide either an email or phone number and a type"); 31107 } catch (r) { 31108 if (await He(this.storage, this.storageKey, s), B(r)) 31109 return this._returnResult({ data: { user: null, session: null }, error: r }); 31110 throw r; 31111 } 31112 } 31113 /** 31114 * Returns the session, refreshing it if necessary. 31115 * 31116 * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out. 31117 * 31118 * **IMPORTANT:** This method loads values directly from the storage attached 31119 * to the client. If that storage is based on request cookies for example, 31120 * the values in it may not be authentic and therefore it's strongly advised 31121 * against using this method and its results in such circumstances. A warning 31122 * will be emitted if this is detected. Use {@link GoTrueClient.getUser} instead. 31123 * 31124 * @category Auth 31125 * 31126 * @remarks 31127 * - Since the introduction of [asymmetric JWT signing keys](/docs/guides/auth/signing-keys), this method is considered low-level and we encourage you to use `getClaims()` or `getUser()` instead. 31128 * - Retrieves the current [user session](/docs/guides/auth/sessions) from the storage medium (local storage, cookies). 31129 * - The session contains an access token (signed JWT), a refresh token and the user object. 31130 * - If the session's access token is expired or is about to expire, this method will use the refresh token to refresh the session. 31131 * - When using in a browser, or you've called `startAutoRefresh()` in your environment (React Native, etc.) this function always returns a valid access token without refreshing the session itself, as this is done in the background. This function returns very fast. 31132 * - **IMPORTANT SECURITY NOTICE:** If using an insecure storage medium, such as cookies or request headers, the user object returned by this function **must not be trusted**. Always verify the JWT using `getClaims()` or your own JWT verification library to securely establish the user's identity and access. You can also use `getUser()` to fetch the user object directly from the Auth server for this purpose. 31133 * - Cross-tab refresh races are handled by the GoTrue server (the rotated token from the first tab is returned to subsequent tabs via the parent-of-active mechanism), so no client-side serialization is needed. 31134 * 31135 * @example Get the session data 31136 * ```js 31137 * const { data, error } = await supabase.auth.getSession() 31138 * ``` 31139 * 31140 * @exampleResponse Get the session data 31141 * ```json 31142 * { 31143 * "data": { 31144 * "session": { 31145 * "access_token": "<ACCESS_TOKEN>", 31146 * "token_type": "bearer", 31147 * "expires_in": 3600, 31148 * "expires_at": 1700000000, 31149 * "refresh_token": "<REFRESH_TOKEN>", 31150 * "user": { 31151 * "id": "11111111-1111-1111-1111-111111111111", 31152 * "aud": "authenticated", 31153 * "role": "authenticated", 31154 * "email": "[email protected]", 31155 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31156 * "phone": "", 31157 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31158 * "app_metadata": { 31159 * "provider": "email", 31160 * "providers": [ 31161 * "email" 31162 * ] 31163 * }, 31164 * "user_metadata": { 31165 * "email": "[email protected]", 31166 * "email_verified": false, 31167 * "phone_verified": false, 31168 * "sub": "11111111-1111-1111-1111-111111111111" 31169 * }, 31170 * "identities": [ 31171 * { 31172 * "identity_id": "22222222-2222-2222-2222-222222222222", 31173 * "id": "11111111-1111-1111-1111-111111111111", 31174 * "user_id": "11111111-1111-1111-1111-111111111111", 31175 * "identity_data": { 31176 * "email": "[email protected]", 31177 * "email_verified": false, 31178 * "phone_verified": false, 31179 * "sub": "11111111-1111-1111-1111-111111111111" 31180 * }, 31181 * "provider": "email", 31182 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31183 * "created_at": "2024-01-01T00:00:00Z", 31184 * "updated_at": "2024-01-01T00:00:00Z", 31185 * "email": "[email protected]" 31186 * } 31187 * ], 31188 * "created_at": "2024-01-01T00:00:00Z", 31189 * "updated_at": "2024-01-01T00:00:00Z", 31190 * "is_anonymous": false 31191 * } 31192 * } 31193 * }, 31194 * "error": null 31195 * } 31196 * ``` 31197 */ 31198 async getSession() { 31199 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => this._useSession(async (e) => e)) : await this._useSession(async (e) => e); 31200 } 31201 /** 31202 * Acquires a global lock based on the storage key. 31203 * 31204 * TODO(v3): remove along with the legacy lock path. Only called when 31205 * `this.lock` is non-null (custom lock supplied via constructor). The 31206 * default lockless path bypasses this entirely. 31207 */ 31208 async _acquireLock(e, s) { 31209 this._debug("#_acquireLock", "begin", e); 31210 try { 31211 if (this.lockAcquired) { 31212 const r = this.pendingInLock.length ? this.pendingInLock[this.pendingInLock.length - 1] : Promise.resolve(), n = (async () => (await r, await s()))(); 31213 return this.pendingInLock.push((async () => { 31214 try { 31215 await n; 31216 } catch { 31217 } 31218 })()), n; 31219 } 31220 return await this.lock(`lock:${this.storageKey}`, e, async () => { 31221 this._debug("#_acquireLock", "lock acquired for storage key", this.storageKey); 31222 try { 31223 this.lockAcquired = !0; 31224 const r = s(); 31225 for (this.pendingInLock.push((async () => { 31226 try { 31227 await r; 31228 } catch { 31229 } 31230 })()), await r; this.pendingInLock.length; ) { 31231 const n = [...this.pendingInLock]; 31232 await Promise.all(n), this.pendingInLock.splice(0, n.length); 31233 } 31234 return await r; 31235 } finally { 31236 this._debug("#_acquireLock", "lock released for storage key", this.storageKey), this.lockAcquired = !1; 31237 } 31238 }); 31239 } finally { 31240 this._debug("#_acquireLock", "end"); 31241 } 31242 } 31243 /** 31244 * Use instead of {@link GoTrueClient.getSession} inside the library. Loads the session 31245 * via `__loadSession` (which may trigger a refresh if the access token is 31246 * within the expiry margin) and runs `fn` with the result. 31247 */ 31248 async _useSession(e) { 31249 this._debug("#_useSession", "begin"); 31250 try { 31251 const s = await this.__loadSession(); 31252 return await e(s); 31253 } finally { 31254 this._debug("#_useSession", "end"); 31255 } 31256 } 31257 /** 31258 * NEVER USE DIRECTLY! 31259 * 31260 * Always use `_useSession`. 31261 */ 31262 async __loadSession() { 31263 this._debug("#__loadSession()", "begin"), this.lock != null && !this.lockAcquired && this._debug("#__loadSession()", "used outside of an acquired lock!", new Error().stack); 31264 try { 31265 let e = null; 31266 const s = await be(this.storage, this.storageKey); 31267 if (this._debug("#getSession()", "session from storage", s), s !== null && (this._isValidSession(s) ? e = s : (this._debug("#getSession()", "session from storage is not val
31267id"), await this._removeSession())), !e) 31268 return { data: { session: null }, error: null }; 31269 const r = e.expires_at ? e.expires_at * 1e3 - Date.now() < x4 : !1; 31270 if (this._debug("#__loadSession()", `session has${r ? "" : " not"} expired`, "expires_at", e.expires_at), !r) 31271 return { data: { session: await this._hydrateSessionUser(e) }, error: null }; 31272 const { data: n, error: o } = await this._callRefreshToken(e.refresh_token); 31273 if (o) { 31274 const L = await be(this.storage, this.storageKey); 31275 return L && this._isValidSession(L) && L.expires_at && L.expires_at * 1e3 > Date.now() ? this._returnResult({ 31276 data: { session: await this._hydrateSessionUser(L) }, 31277 error: null 31278 }) : this._returnResult({ data: { session: null }, error: o }); 31279 } 31280 return this._returnResult({ data: { session: n }, error: null }); 31281 } finally { 31282 this._debug("#__loadSession()", "end"); 31283 } 31284 } 31285 /** 31286 * Completes a session read back from storage so it matches what callers of 31287 * `getSession()` expect: fills in `session.user` from `userStorage` when the 31288 * client keeps the user in split storage, and wraps the user in the 31289 * insecure-access warning proxy on the server. 31290 */ 31291 async _hydrateSessionUser(e) { 31292 if (this.userStorage) { 31293 const s = await be(this.userStorage, this.storageKey + "-user"); 31294 e.user = s?.user ? s.user : _4(); 31295 } 31296 if (this.storage.isServer && e.user && !e.user.__isUserNotAvailableProxy) { 31297 const s = { value: this.suppressGetSessionWarning }; 31298 e.user = Kh(e.user, s), s.value && (this.suppressGetSessionWarning = !0); 31299 } 31300 return e; 31301 } 31302 /** 31303 * Gets the current user details if there is an existing session. This method 31304 * performs a network request to the Supabase Auth server, so the returned 31305 * value is authentic and can be used to base authorization rules on. 31306 * 31307 * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used. 31308 * 31309 * @category Auth 31310 * 31311 * @remarks 31312 * - This method fetches the user object from the database instead of local session. 31313 * - This method is useful for checking if the user is authorized because it validates the user's access token JWT on the server. 31314 * - Should always be used when checking for user authorization on the server. On the client, you can instead use `getSession().session.user` for faster results. `getSession` is insecure on the server. 31315 * 31316 * @example Get the logged in user with the current existing session 31317 * ```js 31318 * const { data: { user } } = await supabase.auth.getUser() 31319 * ``` 31320 * 31321 * @exampleResponse Get the logged in user with the current existing session 31322 * ```json 31323 * { 31324 * "data": { 31325 * "user": { 31326 * "id": "11111111-1111-1111-1111-111111111111", 31327 * "aud": "authenticated", 31328 * "role": "authenticated", 31329 * "email": "[email protected]", 31330 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31331 * "phone": "", 31332 * "confirmed_at": "2024-01-01T00:00:00Z", 31333 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31334 * "app_metadata": { 31335 * "provider": "email", 31336 * "providers": [ 31337 * "email" 31338 * ] 31339 * }, 31340 * "user_metadata": { 31341 * "email": "[email protected]", 31342 * "email_verified": false, 31343 * "phone_verified": false, 31344 * "sub": "11111111-1111-1111-1111-111111111111" 31345 * }, 31346 * "identities": [ 31347 * { 31348 * "identity_id": "22222222-2222-2222-2222-222222222222", 31349 * "id": "11111111-1111-1111-1111-111111111111", 31350 * "user_id": "11111111-1111-1111-1111-111111111111", 31351 * "identity_data": { 31352 * "email": "[email protected]", 31353 * "email_verified": false, 31354 * "phone_verified": false, 31355 * "sub": "11111111-1111-1111-1111-111111111111" 31356 * }, 31357 * "provider": "email", 31358 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31359 * "created_at": "2024-01-01T00:00:00Z", 31360 * "updated_at": "2024-01-01T00:00:00Z", 31361 * "email": "[email protected]" 31362 * } 31363 * ], 31364 * "created_at": "2024-01-01T00:00:00Z", 31365 * "updated_at": "2024-01-01T00:00:00Z", 31366 * "is_anonymous": false 31367 * } 31368 * }, 31369 * "error": null 31370 * } 31371 * ``` 31372 * 31373 * @example Get the logged in user with a custom access token jwt 31374 * ```js 31375 * const { data: { user } } = await supabase.auth.getUser(jwt) 31376 * ``` 31377 */ 31378 async getUser(e) { 31379 if (e) 31380 return await this._getUser(e); 31381 await this.initializePromise; 31382 let s; 31383 return this.lock != null ? s = await this._acquireLock(this.lockAcquireTimeout, async () => await this._getUser()) : s = await this._getUser(), s.data.user && (this.suppressGetSessionWarning = !0), s; 31384 } 31385 async _getUser(e) { 31386 try { 31387 return e ? await N(this.fetch, "GET", `${this.url}/user`, { 31388 headers: this.headers, 31389 jwt: e, 31390 xform: _1 31391 }) : await this._useSession(async (s) => { 31392 var r, n, o; 31393 const { data: L, error: d } = s; 31394 if (d) 31395 throw d; 31396 return !(!((r = L.session) === null || r === void 0) && r.access_token) && !this.hasCustomAuthorizationHeader ? { data: { user: null }, error: new he() } : await N(this.fetch, "GET", `${this.url}/user`, { 31397 headers: this.headers, 31398 jwt: (o = (n = L.session) === null || n === void 0 ? void 0 : n.access_token) !== null && o !== void 0 ? o : void 0, 31399 xform: _1 31400 }); 31401 }); 31402 } catch (s) { 31403 if (B(s)) 31404 return O2(s) && await this._removeSession(), this._returnResult({ data: { user: null }, error: s }); 31405 throw s; 31406 } 31407 } 31408 /** 31409 * Updates user data for a logged in user. 31410 * 31411 * @category Auth 31412 * 31413 * @remarks 31414 * - In order to use the `updateUser()` method, the user needs to be signed in first. 31415 * - By default, email updates sends a confirmation link to both the user's current and new email. 31416 * To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](/dashboard/project/_/auth/providers). 31417 * 31418 * @exampleDescription Update the email for an authenticated user 31419 * Sends a "Confirm Email Change" email to the new address. If **Secure Email Change** is enabled (default), confirmation is also required from the **old email** before the change is applied. To skip dual confirmation and apply the change after only the new email is verified, disable **Secure Email Change** in the [Email Auth Provider settings](/dashboard/project/_/auth/providers?provider=Email). 31420 * 31421 * @example Update the email for an authenticated user 31422 * ```js 31423 * const { data, error } = await supabase.auth.updateUser({ 31424 * email: '[email protected]' 31425 * }) 31426 * ``` 31427 * 31428 * @exampleResponse Update the email for an authenticated user 31429 * ```json 31430 * { 31431 * "data": { 31432 * "user": { 31433 * "id": "11111111-1111-1111-1111-111111111111", 31434 * "aud": "authenticated", 31435 * "role": "authenticated", 31436 * "email": "[email protected]", 31437 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31438 * "phone": "", 31439 * "confirmed_at": "2024-01-01T00:00:00Z", 31440 * "new_email": "[email protected]", 31441 * "email_change_sent_at": "2024-01-01T00:00:00Z", 31442 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31443 * "app_metadata": { 31444 * "provider": "email", 31445 * "providers": [ 31446 * "email" 31447 * ] 31448 * }, 31449 * "user_metadata": { 31450 * "email": "[email protected]", 31451 * "email_verified": false, 31452 * "phone_verified": false, 31453 * "sub": "11111111-1111-1111-1111-111111111111" 31454 * }, 31455 * "identities": [ 31456 * { 31457 * "identity_id": "22222222-2222-2222-2222-222222222222", 31458 * "id": "11111111-1111-1111-1111-111111111111", 31459 * "user_id": "11111111-1111-1111-1111-111111111111", 31460 * "identity_data": { 31461 * "email": "[email protected]", 31462 * "email_verified": false, 31463 * "phone_verified": false, 31464 * "sub": "11111111-1111-1111-1111-111111111111" 31465 * }, 31466 * "provider": "email", 31467 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31468 * "created_at": "2024-01-01T00:00:00Z", 31469 * "updated_at": "2024-01-01T00:00:00Z", 31470 * "email": "[email protected]" 31471 * } 31472 * ], 31473 * "created_at": "2024-01-01T00:00:00Z", 31474 * "updated_at": "2024-01-01T00:00:00Z", 31475 * "is_anonymous": false 31476 * } 31477 * }, 31478 * "error": null 31479 * } 31480 * ``` 31481 * 31482 * @exampleDescription Update the phone number for an authenticated user 31483 * Sends a one-time password (OTP) to the new phone number. 31484 * 31485 * @example Update the phone number for an authenticated user 31486 * ```js 31487 * const { data, error } = await supabase.auth.updateUser({ 31488 * phone: '123456789' 31489 * }) 31490 * ``` 31491 * 31492 * @example Update the password for an authenticated user 31493 * ```js 31494 * const { data, error } = await supabase.auth.updateUser({ 31495 * password: 'new password' 31496 * }) 31497 * ``` 31498 * 31499 * @exampleDescription Update the user's metadata 31500 * Updates the user's custom metadata. 31501 * 31502 * **Note**: The `data` field maps to the `auth.users.raw_user_meta_data` column in your Supabase database. When calling `getUser()`, the data will be available as `user.user_metadata`. 31503 * 31504 * @example Update the user's metadata 31505 * ```js 31506 * const { data, error } = await supabase.auth.updateUser({ 31507 * data: { hello: 'world' } 31508 * }) 31509 * ``` 31510 * 31511 * @exampleDescription Update the user's password with a nonce 31512 * If **Secure password change** is enabled in your [project's email provider settings](/dashboard/project/_/auth/providers), updating the user's password would require a nonce if the user **hasn't recently signed in**. The nonce is sent to the user's email or phone number. A user is deemed recently signed in if the session was created in the last 24 hours. 31513 * 31514 * @example Update the user's password with a nonce 31515 * ```js 31516 * const { data, error } = await supabase.auth.updateUser({ 31517 * password: 'new password', 31518 * nonce: '123456' 31519 * }) 31520 * ``` 31521 */ 31522 async updateUser(e, s = {}) { 31523 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._updateUser(e, s)) : await this._updateUser(e, s); 31524 } 31525 async _updateUser(e, s = {}) { 31526 let r = null; 31527 try { 31528 return await this._useSession(async (n) => { 31529 const { data: o, error: L } = n; 31530 if (L) 31531 throw L; 31532 if (!o.session) 31533 throw new he(); 31534 const d = o.session; 31535 let l = null, g = null; 31536 this.flowType === "pkce" && e.email != null && ([l, g, r] = await this._getCodeChallengeAndMethod()); 31537 const { data: f, error: p } = await N(this.fetch, "PUT", `${this.url}/user`, { 31538 headers: this.headers, 31539 redirectTo: this._maybeAppendFlowIdToRedirect(s?.emailRedirectTo, r), 31540 body: Object.assign(Object.assign({}, e), { code_challenge: l, code_challenge_method: g }), 31541 jwt: d.access_token, 31542 xform: _1 31543 }); 31544 if (p) 31545 throw p; 31546 return d.user = f.user, await this._saveSession(d), await this._notifyAllSubscribers("USER_UPDATED", d), this._returnResult({ data: { user: d.user }, error: null }); 31547 }); 31548 } catch (n) { 31549 if (await He(this.storage, this.storageKey, r), B(n)) 31550 return this._returnResult({ data: { user: null }, error: n }); 31551 throw n; 31552 } 31553 } 31554 /** 31555 * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session. 31556 * If the refresh token or access token in the current session is invali
31556d, an error will be thrown. 31557 * @param currentSession The current session that minimally contains an access token and refresh token. 31558 * 31559 * @category Auth 31560 * 31561 * @remarks 31562 * - This method sets the session using an `access_token` and `refresh_token`. 31563 * - If successful, a `SIGNED_IN` event is emitted. 31564 * 31565 * @exampleDescription Set the session 31566 * Sets the session data from an access_token and refresh_token, then returns an auth response or error. 31567 * 31568 * @example Set the session 31569 * ```js 31570 * const { data, error } = await supabase.auth.setSession({ 31571 * access_token, 31572 * refresh_token 31573 * }) 31574 * ``` 31575 * 31576 * @exampleResponse Set the session 31577 * ```json 31578 * { 31579 * "data": { 31580 * "user": { 31581 * "id": "11111111-1111-1111-1111-111111111111", 31582 * "aud": "authenticated", 31583 * "role": "authenticated", 31584 * "email": "[email protected]", 31585 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31586 * "phone": "", 31587 * "confirmed_at": "2024-01-01T00:00:00Z", 31588 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31589 * "app_metadata": { 31590 * "provider": "email", 31591 * "providers": [ 31592 * "email" 31593 * ] 31594 * }, 31595 * "user_metadata": { 31596 * "email": "[email protected]", 31597 * "email_verified": false, 31598 * "phone_verified": false, 31599 * "sub": "11111111-1111-1111-1111-111111111111" 31600 * }, 31601 * "identities": [ 31602 * { 31603 * "identity_id": "22222222-2222-2222-2222-222222222222", 31604 * "id": "11111111-1111-1111-1111-111111111111", 31605 * "user_id": "11111111-1111-1111-1111-111111111111", 31606 * "identity_data": { 31607 * "email": "[email protected]", 31608 * "email_verified": false, 31609 * "phone_verified": false, 31610 * "sub": "11111111-1111-1111-1111-111111111111" 31611 * }, 31612 * "provider": "email", 31613 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31614 * "created_at": "2024-01-01T00:00:00Z", 31615 * "updated_at": "2024-01-01T00:00:00Z", 31616 * "email": "[email protected]" 31617 * } 31618 * ], 31619 * "created_at": "2024-01-01T00:00:00Z", 31620 * "updated_at": "2024-01-01T00:00:00Z", 31621 * "is_anonymous": false 31622 * }, 31623 * "session": { 31624 * "access_token": "<ACCESS_TOKEN>", 31625 * "refresh_token": "<REFRESH_TOKEN>", 31626 * "user": { 31627 * "id": "11111111-1111-1111-1111-111111111111", 31628 * "aud": "authenticated", 31629 * "role": "authenticated", 31630 * "email": "[email protected]", 31631 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31632 * "phone": "", 31633 * "confirmed_at": "2024-01-01T00:00:00Z", 31634 * "last_sign_in_at": "11111111-1111-1111-1111-111111111111", 31635 * "app_metadata": { 31636 * "provider": "email", 31637 * "providers": [ 31638 * "email" 31639 * ] 31640 * }, 31641 * "user_metadata": { 31642 * "email": "[email protected]", 31643 * "email_verified": false, 31644 * "phone_verified": false, 31645 * "sub": "11111111-1111-1111-1111-111111111111" 31646 * }, 31647 * "identities": [ 31648 * { 31649 * "identity_id": "2024-01-01T00:00:00Z", 31650 * "id": "11111111-1111-1111-1111-111111111111", 31651 * "user_id": "11111111-1111-1111-1111-111111111111", 31652 * "identity_data": { 31653 * "email": "[email protected]", 31654 * "email_verified": false, 31655 * "phone_verified": false, 31656 * "sub": "11111111-1111-1111-1111-111111111111" 31657 * }, 31658 * "provider": "email", 31659 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31660 * "created_at": "2024-01-01T00:00:00Z", 31661 * "updated_at": "2024-01-01T00:00:00Z", 31662 * "email": "[email protected]" 31663 * } 31664 * ], 31665 * "created_at": "2024-01-01T00:00:00Z", 31666 * "updated_at": "2024-01-01T00:00:00Z", 31667 * "is_anonymous": false 31668 * }, 31669 * "token_type": "bearer", 31670 * "expires_in": 3500, 31671 * "expires_at": 1700000000 31672 * } 31673 * }, 31674 * "error": null 31675 * } 31676 * ``` 31677 */ 31678 async setSession(e) { 31679 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._setSession(e)) : await this._setSession(e); 31680 } 31681 async _setSession(e) { 31682 try { 31683 if (!e.access_token || !e.refresh_token) 31684 throw new he(); 31685 const s = Date.now() / 1e3; 31686 let r = s, n = !0, o = null; 31687 const { payload: L } = W2(e.access_token); 31688 if (L.exp && (r = L.exp, n = r <= s), n) { 31689 const { data: d, error: l } = await this._callRefreshToken(e.refresh_token); 31690 if (l) 31691 return this._returnResult({ data: { user: null, session: null }, error: l }); 31692 if (!d) 31693 return { data: { user: null, session: null }, error: null }; 31694 o = d; 31695 } else { 31696 const { data: d, error: l } = await this._getUser(e.access_token); 31697 if (l) 31698 return this._returnResult({ data: { user: null, session: null }, error: l }); 31699 o = { 31700 access_token: e.access_token, 31701 refresh_token: e.refresh_token, 31702 user: d.user, 31703 token_type: "bearer", 31704 expires_in: r - s, 31705 expires_at: r 31706 }, await this._saveSession(o), await this._notifyAllSubscribers("SIGNED_IN", o); 31707 } 31708 return this._returnResult({ data: { user: o.user, session: o }, error: null }); 31709 } catch (s) { 31710 if (B(s)) 31711 return this._returnResult({ data: { session: null, user: null }, error: s }); 31712 throw s; 31713 } 31714 } 31715 /** 31716 * Returns a new session, regardless of expiry status. 31717 * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().
31718 * If the current session's refresh token is invalid, an error will be thrown. 31719 * @param currentSession The current session. If passed in, it must contain a refresh token. 31720 * 31721 * @category Auth 31722 * 31723 * @remarks 31724 * - This method will refresh and return a new session whether the current one is expired or not. 31725 * 31726 * @example Refresh session using the current session 31727 * ```js 31728 * const { data, error } = await supabase.auth.refreshSession() 31729 * const { session, user } = data 31730 * ``` 31731 * 31732 * @exampleResponse Refresh session using the current session 31733 * ```json 31734 * { 31735 * "data": { 31736 * "user": { 31737 * "id": "11111111-1111-1111-1111-111111111111", 31738 * "aud": "authenticated", 31739 * "role": "authenticated", 31740 * "email": "[email protected]", 31741 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31742 * "phone": "", 31743 * "confirmed_at": "2024-01-01T00:00:00Z", 31744 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31745 * "app_metadata": { 31746 * "provider": "email", 31747 * "providers": [ 31748 * "email" 31749 * ] 31750 * }, 31751 * "user_metadata": { 31752 * "email": "[email protected]", 31753 * "email_verified": false, 31754 * "phone_verified": false, 31755 * "sub": "11111111-1111-1111-1111-111111111111" 31756 * }, 31757 * "identities": [ 31758 * { 31759 * "identity_id": "22222222-2222-2222-2222-222222222222", 31760 * "id": "11111111-1111-1111-1111-111111111111", 31761 * "user_id": "11111111-1111-1111-1111-111111111111", 31762 * "identity_data": { 31763 * "email": "[email protected]", 31764 * "email_verified": false, 31765 * "phone_verified": false, 31766 * "sub": "11111111-1111-1111-1111-111111111111" 31767 * }, 31768 * "provider": "email", 31769 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31770 * "created_at": "2024-01-01T00:00:00Z", 31771 * "updated_at": "2024-01-01T00:00:00Z", 31772 * "email": "[email protected]" 31773 * } 31774 * ], 31775 * "created_at": "2024-01-01T00:00:00Z", 31776 * "updated_at": "2024-01-01T00:00:00Z", 31777 * "is_anonymous": false 31778 * }, 31779 * "session": { 31780 * "access_token": "<ACCESS_TOKEN>", 31781 * "token_type": "bearer", 31782 * "expires_in": 3600, 31783 * "expires_at": 1700000000, 31784 * "refresh_token": "<REFRESH_TOKEN>", 31785 * "user": { 31786 * "id": "11111111-1111-1111-1111-111111111111", 31787 * "aud": "authenticated", 31788 * "role": "authenticated", 31789 * "email": "[email protected]", 31790 * "email_confirmed_at": "2024-01-01T00:00:00Z", 31791 * "phone": "", 31792 * "confirmed_at": "2024-01-01T00:00:00Z", 31793 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31794 * "app_metadata": { 31795 * "provider": "email", 31796 * "providers": [ 31797 * "email" 31798 * ] 31799 * }, 31800 * "user_metadata": { 31801 * "email": "[email protected]", 31802 * "email_verified": false, 31803 * "phone_verified": false, 31804 * "sub": "11111111-1111-1111-1111-111111111111" 31805 * }, 31806 * "identities": [ 31807 * { 31808 * "identity_id": "22222222-2222-2222-2222-222222222222", 31809 * "id": "11111111-1111-1111-1111-111111111111", 31810 * "user_id": "11111111-1111-1111-1111-111111111111", 31811 * "identity_data": { 31812 * "email": "[email protected]", 31813 * "email_verified": false, 31814 * "phone_verified": false, 31815 * "sub": "11111111-1111-1111-1111-111111111111" 31816 * }, 31817 * "provider": "email", 31818 * "last_sign_in_at": "2024-01-01T00:00:00Z", 31819 * "created_at": "2024-01-01T00:00:00Z", 31820 * "updated_at": "2024-01-01T00:00:00Z", 31821 * "email": "[email protected]" 31822 * } 31823 * ], 31824 * "created_at": "2024-01-01T00:00:00Z", 31825 * "updated_at": "2024-01-01T00:00:00Z", 31826 * "is_anonymous": false 31827 * } 31828 * } 31829 * }, 31830 * "error": null 31831 * } 31832 * ``` 31833 * 31834 * @example Refresh session using a refresh token 31835 * ```js 31836 * const { data, error } = await supabase.auth.refreshSession({ refresh_token }) 31837 * const { session, user } = data 31838 * ``` 31839 */ 31840 async refreshSession(e) { 31841 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._refreshSession(e)) : await this._refreshSession(e); 31842 } 31843 async _refreshSession(e) { 31844 try { 31845 return await this._useSession(async (s) => { 31846 var r; 31847 if (!e) { 31848 const { data: L, error: d } = s; 31849 if (d) 31850 throw d; 31851 e = (r = L.session) !== null && r !== void 0 ? r : void 0; 31852 } 31853 if (!e?.refresh_token) 31854 throw new he(); 31855 const { data: n, error: o } = await this._callRefreshToken(e.refresh_token); 31856 return o ? this._returnResult({ data: { user: null, session: null }, error: o }) : n ? this._returnResult({ data: { user: n.user, session: n }, error: null }) : this._returnResult({ data: { user: null, session: null }, error: null }); 31857 }); 31858 } catch (s) { 31859 if (B(s)) 31860 return this._returnResult({ data: { user: null, session: null }, error: s }); 31861 throw s; 31862 } 31863 } 31864 /** 31865 * Gets the session data from a URL string 31866 */ 31867 async _getSessionFromURL(e, s) { 31868 var r; 31869 try { 31870 if (!_e()) 31871 throw new H2("No browser detected."); 31872 if (e.error || e.error_description || e.error_code) 31873 throw new H2(e.error_description || "Error in URL with unspecified error_description", { 31874 error: e.error || "unspecified_error", 31875 code: e.error_code || "unspecified_code" 31876 }); 31877 switch (s) { 31878 case "implicit": 31879 if (this.flowType === "pkce") 31880 throw new c6("Not a valid PKCE flow url."); 31881 break; 31882 case "pkce": 31883 if (this.flowType === "implicit") 31884 throw new H2("Not a valid implicit grant flow url."); 31885 break; 31886 default: 31887 } 31888 if (s === "pkce") { 31889 if (this._debug("#_initialize()", "begin", "is PKCE flow", !0), !e.code) 31890 throw new c6("No code detected."); 31891 const { data: b, error: S } = await this._exchangeCodeForSession(e.code, { 31892 flowId: e[H1] 31893 }); 31894 if (S) 31895 throw S;
31896 const k = new URL(window.location.href); 31897 return k.searchParams.delete("code"), k.searchParams.delete(H1), window.history.replaceState(window.history.state, "", k.toString()), { 31898 data: { session: b.session, redirectType: (r = b.redirectType) !== null && r !== void 0 ? r : null }, 31899 error: null 31900 }; 31901 } 31902 const { provider_token: n, provider_refresh_token: o, access_token: L, refresh_token: d, expires_in: l, expires_at: g, token_type: f } = e; 31903 if (!L || !l || !d || !f) 31904 throw new H2("No session defined in URL"); 31905 const p = Math.round(Date.now() / 1e3), M = parseInt(l); 31906 let u = p + M; 31907 g && (u = parseInt(g)); 31908 const h = u - p; 31909 h * 1e3 <= f1 && console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${h}s, should have been closer to ${M}s`); 31910 const x = u - M; 31911 p - x >= 120 ? console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale", x, u, p) : p - x < 0 && console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew", x, u, p); 31912 const { data: _, error: v } = await this._getUser(L); 31913 if (v) 31914 throw v; 31915 const y = { 31916 provider_token: n, 31917 provider_refresh_token: o, 31918 access_token: L, 31919 expires_in: M, 31920 expires_at: u, 31921 refresh_token: d, 31922 token_type: f, 31923 user: _.user 31924 }; 31925 return window.location.hash = "", this._debug("#_getSessionFromURL()", "clearing window.location.hash"), this._returnResult({ data: { session: y, redirectType: e.type }, error: null }); 31926 } catch (n) { 31927 if (B(n)) 31928 return this._returnResult({ data: { session: null, redirectType: null }, error: n }); 31929 throw n; 31930 } 31931 } 31932 /** 31933 * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2) 31934 * 31935 * If `detectSessionInUrl` is a function, it will be called with the URL and params to determine 31936 * if the URL should be processed as a Supabase auth callback. This allows users to exclude 31937 * URLs from other OAuth providers (e.g., Facebook Login) that also return access_token in the fragment. 31938 */ 31939 _isImplicitGrantCallback(e) { 31940 return typeof this.detectSessionInUrl == "function" ? this.detectSessionInUrl(new URL(window.location.href), e) : !!(e.access_token || e.error || e.error_description || e.error_code); 31941 } 31942 /** 31943 * Checks if the current URL and backing storage contain parameters given by a PKCE flow 31944 */ 31945 async _isPKCECallback(e) { 31946 if (!e.code) 31947 return !1; 31948 const s = i3(e[H1]); 31949 return s && await be(this.storage, wt(this.storageKey, s)) ? !0 : !!await be(this.storage, `${this.storageKey}-code-verifier`); 31950 } 31951 /** 31952 * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `"SIGNED_OUT"` event. 31953 * 31954 * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`. 31955 * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason. 31956 * 31957 * If using `others` scope, no `SIGNED_OUT` event is fired! 31958 * 31959 * **Warning:** the default `scope` is `'global'`. This signs the user out of 31960 * **every device they are currently signed in on**, not just the current 31961 * tab/session. If you only want to sign the user out of the current session 31962 * (the behavior most other auth libraries default to), pass 31963 * `{ scope: 'local' }` explicitly. 31964 * 31965 * @category Auth 31966 * 31967 * @remarks 31968 * - In order to use the `signOut()` method, the user needs to be signed in first. 31969 * - By default, `signOut()` uses the **global** scope, which signs out the user 31970 * on every device they are signed in on (not just the current one). Pass 31971 * `{ scope: 'local' }` to only sign out the current session. This is 31972 * usually what apps want on a "Sign out" button, especially when users 31973 * sign in from multiple devices and do not expect signing out of one to 31974 * terminate the others. 31975 * - Since Supabase Auth uses JWTs for authentication, the access token JWT will be valid until it's expired. When the user signs out, Supabase revokes the refresh token and deletes the JWT from the client-side. This does not revoke the JWT and it will still be valid until it expires. 31976 * 31977 * @example Sign out of every device (global â default) 31978 * ```js 31979 * const { error } = await supabase.auth.signOut() 31980 * ``` 31981 * 31982 * @example Sign out only the current session (recommended for most apps) 31983 * ```js 31984 * const { error } = await supabase.auth.signOut({ scope: 'local' }) 31985 * ``` 31986 * 31987 * @example Sign out of all other sessions, keep the current one 31988 * ```js 31989 * const { error } = await supabase.auth.signOut({ scope: 'others' }) 31990 * ``` 31991 */ 31992 async signOut(e = { scope: "global" }) { 31993 return await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => await this._signOut(e)) : await this._signOut(e); 31994 } 31995 async _signOut({ scope: e } = { scope: "global" }) { 31996 return await this._useSession(async (s) => { 31997 var r; 31998 const n = async () => { 31999 await this._removeSession(); 32000 }, { data: o, error: L } = s; 32001 if (L && !O2(L)) 32002 return this._returnResult({ error: L }); 32003 const d = (r = o.session) === null || r === void 0 ? void 0 : r.access_token; 32004 if (d) { 32005 const { error: l } = await this.admin.signOut(d, e); 32006 if (l && !(L6(l) && (l.status === 404 || l.status === 401 || l.status === 403) || O2(l))) 32007 return e !== "others" && await n(), this._returnResult({ error: l }); 32008 } 32009 return e !== "others" && await n(), this._returnResult({ error: null }); 32010 }); 32011 } 32012 /** * 32013 * @category Auth 32014 * 32015 * @remarks 32016 * - Subscribes to important events occurring on the user's session. 32017 * - Use on the frontend/client. It is less useful on the server. 32018 * - Events are emitted across tabs to keep your application's UI up-to-date. Some events can fire very frequently, based on the number of tabs open. Use a quick and efficie
32018nt callback function, and defer or debounce as many operations as you can to be performed outside of the callback. 32019 * - Callbacks can be `async` and can safely call other Supabase auth methods (`getUser`, `setSession`, etc.) from inside the callback. 32020 * - Keep callbacks quick. Events are awaited in order, so a slow callback delays subsequent events to subscribers in this tab. 32021 * - Emitted events: 32022 * - `INITIAL_SESSION` 32023 * - Emitted right after the Supabase client is constructed and the initial session from storage is loaded. 32024 * - `SIGNED_IN` 32025 * - Emitted each time a user session is confirmed or re-established, including on user sign in and when refocusing a tab. 32026 * - Avoid making assumptions as to when this event is fired, this may occur even when the user is already signed in. Instead, check the user object attached to the event to see if a new user has signed in and update your application's UI. 32027 * - This event can fire very frequently depending on the number of tabs open in your application. 32028 * - `SIGNED_OUT` 32029 * - Emitted when the user signs out. This can be after: 32030 * - A call to `supabase.auth.signOut()`. 32031 * - After the user's session has expired for any reason: 32032 * - User has signed out on another device. 32033 * - The session has reached its timebox limit or inactivity timeout. 32034 * - User has signed in on another device with single session per user enabled. 32035 * - Check the [User Sessions](/docs/guides/auth/sessions) docs for more information. 32036 * - Use this to clean up any local storage your application has associated with the user. 32037 * - `TOKEN_REFRESHED` 32038 * - Emitted each time a new access and refresh token are fetched for the signed in user. 32039 * - It's best practice and highly recommended to extract the access token (JWT) and store it in memory for further use in your application. 32040 * - Avoid frequent calls to `supabase.auth.getSession()` for the same purpose. 32041 * - There is a background process that keeps track of when the session should be refreshed so you will always receive valid tokens by listening to this event. 32042 * - The frequency of this event is related to the JWT expiry limit configured on your project. 32043 * - `USER_UPDATED` 32044 * - Emitted each time the `supabase.auth.updateUser()` method finishes successfully. Listen to it to update your application's UI based on new profile information. 32045 * - `PASSWORD_RECOVERY` 32046 * - Emitted instead of the `SIGNED_IN` event when the user lands on a page that includes a password recovery link in the URL. 32047 * - Use it to show a UI to the user where they can [reset their password](/docs/guides/auth/passwords#resetting-a-users-password-forgot-password). 32048 * 32049 * @example Listen to auth changes 32050 * ```js 32051 * const { data } = supabase.auth.onAuthStateChange((event, session) => { 32052 * console.log(event, session) 32053 * 32054 * if (event === 'INITIAL_SESSION') { 32055 * // handle initial session 32056 * } else if (event === 'SIGNED_IN') { 32057 * // handle sign in event 32058 * } else if (event === 'SIGNED_OUT') { 32059 * // handle sign out event 32060 * } else if (event === 'PASSWORD_RECOVERY') { 32061 * // handle password recovery event 32062 * } else if (event === 'TOKEN_REFRESHED') { 32063 * // handle token refreshed event 32064 * } else if (event === 'USER_UPDATED') { 32065 * // handle user updated event 32066 * } 32067 * }) 32068 * 32069 * // call unsubscribe to remove the callback 32070 * data.subscription.unsubscribe() 32071 * ``` 32072 * 32073 * @exampleDescription Listen to sign out 32074 * Make sure you clear out any local data, such as local and session storage, after the client library has detected the user's sign out. 32075 * 32076 * @example Listen to sign out 32077 * ```js 32078 * supabase.auth.onAuthStateChange((event, session) => { 32079 * if (event === 'SIGNED_OUT') { 32080 * console.log('SIGNED_OUT', session) 32081 * 32082 * // clear local and session storage 32083 * [ 32084 * window.localStorage, 32085 * window.sessionStorage, 32086 * ].forEach((storage) => { 32087 * Object.entries(storage) 32088 * .forEach(([key]) => { 32089 * storage.removeItem(key) 32090 * }) 32091 * }) 32092 * } 32093 * }) 32094 * ``` 32095 * 32096 * @exampleDescription Store OAuth provider tokens on sign in 32097 * When using [OAuth (Social Login)](/docs/guides/auth/social-login) you sometimes wish to get access to the provider's access token and refresh token, in order to call provider APIs in the name of the user. 32098 * 32099 * For example, if you are using [Sign in with Google](/docs/guides/auth/social-login/auth-google) you may want to use the provider token to call Google APIs on behalf of the user. Supabase Auth does not keep track of the provider access and refresh token, but does return them for you once, immediately after sign in. You can use the `onAuthStateChange` method to listen for the presence of the provider tokens and store them in local storage. You can further send them to your server's APIs for use on the backend. 32100 * 32101 * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend. 32102 * 32103 * @example Store OAuth provider tokens on sign in 32104 * ```js 32105 * // Register this immediately after calling createClient! 32106 * // Because signInWithOAuth causes a redirect, you need to fetch the 32107 * // provider tokens from the callback. 32108 * supabase.auth.onAuthStateChange((event, session) => { 32109 * if (session && session.provider_token) { 32110 * window.localStorage.setItem('oauth_provider_token', session.provider_token) 32111 * } 32112 * 32113 * if (session && session.provider_refresh_token) { 32114 * window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token) 32115 * } 32116 * 32117 * if (event === 'SIGNED_OUT') { 32118 * window.localStorage.removeItem('oauth_provider_token') 32119 * window.localStorage.removeItem('oauth_provider_refresh_token') 32120 * } 32121 * }) 32122 * ``` 32123 * 32124 * @exampleDescription Use React Context for the User's session 32125 * Instead of relying on `supabase.auth.getSession()` within your React components, you can use a [React Context](https://react.dev/reference/react/createContext) to store the latest session information from the `onAuthStateChange` c
32125allback and access it that way. 32126 * 32127 * @example Use React Context for the User's session 32128 * ```js 32129 * const SessionContext = React.createContext(null) 32130 * 32131 * function main() { 32132 * const [session, setSession] = React.useState(null) 32133 * 32134 * React.useEffect(() => { 32135 * const {data: { subscription }} = supabase.auth.onAuthStateChange( 32136 * (event, session) => { 32137 * if (event === 'SIGNED_OUT') { 32138 * setSession(null) 32139 * } else if (session) { 32140 * setSession(session) 32141 * } 32142 * }) 32143 * 32144 * return () => { 32145 * subscription.unsubscribe() 32146 * } 32147 * }, []) 32148 * 32149 * return ( 32150 * <SessionContext.Provider value={session}> 32151 * <App /> 32152 * </SessionContext.Provider> 32153 * ) 32154 * } 32155 * ``` 32156 * 32157 * @example Listen to password recovery events 32158 * ```js 32159 * supabase.auth.onAuthStateChange((event, session) => { 32160 * if (event === 'PASSWORD_RECOVERY') { 32161 * console.log('PASSWORD_RECOVERY', session) 32162 * // show screen to update user's password 32163 * showPasswordResetScreen(true) 32164 * } 32165 * }) 32166 * ``` 32167 * 32168 * @example Listen to sign in 32169 * ```js 32170 * supabase.auth.onAuthStateChange((event, session) => { 32171 * if (event === 'SIGNED_IN') console.log('SIGNED_IN', session) 32172 * }) 32173 * ``` 32174 * 32175 * @example Listen to token refresh 32176 * ```js 32177 * supabase.auth.onAuthStateChange((event, session) => { 32178 * if (event === 'TOKEN_REFRESHED') console.log('TOKEN_REFRESHED', session) 32179 * }) 32180 * ``` 32181 * 32182 * @example Listen to user updates 32183 * ```js 32184 * supabase.auth.onAuthStateChange((event, session) => { 32185 * if (event === 'USER_UPDATED') console.log('USER_UPDATED', session) 32186 * }) 32187 * ``` 32188 */ 32189 onAuthStateChange(e) { 32190 const s = Ih(), r = { 32191 id: s, 32192 callback: e, 32193 unsubscribe: () => { 32194 this._debug("#unsubscribe()", "state change callback with id removed", s), this.stateChangeEmitters.delete(s); 32195 } 32196 }; 32197 return this._debug("#onAuthStateChange()", "registered callback with id", s), this.stateChangeEmitters.set(s, r), (async () => (await this.initializePromise, this.lock != null ? await this._acquireLock(this.lockAcquireTimeout, async () => { 32198 this._emitInitialSession(s); 32199 }) : await this._emitInitialSession(s)))(), { data: { subscription: r } }; 32200 } 32201 async _emitInitialSession(e) { 32202 return await this._useSession(async (s) => { 32203 var r, n; 32204 try { 32205 const { data: { session: o }, error: L } = s; 32206 if (L) 32207 throw L; 32208 await ((r = this.stateChangeEmitters.get(e)) === null || r === void 0 ? void 0 : r.callback("INITIAL_SESSION", o)), this._debug("INITIAL_SESSION", "callback id", e, "session", o); 32209 } catch (o) { 32210 if (await ((n = this.stateChangeEmitters.get(e)) === null || n === void 0 ? void 0 : n.callback("INITIAL_SESSION", null)), this._debug("INITIAL_SESSION", "callback id", e, "error", o), d6(o)) 32211 return; 32212 O2(o) || Z2(o) || L6(o) && (o.code === "refresh_token_not_found" || o.code === "refresh_token_already_used" || o.code === "session_expired") ? console.warn(o) : console.error(o); 32213 } 32214 }); 32215 } 32216 /** 32217 * Sends a password reset request to an email address. This method supports the PKCE flow. 32218 * 32219 * @param email The email address of the user. 32220 * @param options.redirectTo The URL to send the user to after they click the password reset link. 32221 * @param options.captchaToken Verification token received when the user completes the captcha on the site. 32222 * 32223 * @category Auth 32224 * 32225 * @remarks 32226 * - The password reset flow consist of 2 broad steps: (i) Allow the user to login via the password reset link; (ii) Update the user's password. 32227 * - The `resetPasswordForEmail()` only sends a password reset link to the user's email. 32228 * To update the user's password, see [`updateUser()`](/docs/reference/javascript/auth-updateuser). 32229 * - A `PASSWORD_RECOVERY` event will be emitted when the password recovery link is clicked. 32230 * You can use [`onAuthStateChange()`](/docs/reference/javascript/auth-onauthstatechange) to listen and invoke a callback function on these events. 32231 * - When the user clicks the reset link in the email they are redirected back to your application. 32232 * You can configure the URL that the user is redirected to with the `redirectTo` parameter.
32233 * See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project. 32234 * - After the user has been redirected successfully, prompt them for a new password and call `updateUser()`: 32235 * ```js 32236 * const { data, error } = await supabase.auth.updateUser({ 32237 * password: new_password 32238 * }) 32239 * ``` 32240 * 32241 * @example Reset password 32242 * ```js 32243 * const { data, error } = await supabase.auth.resetPasswordForEmail(email, { 32244 * redirectTo: 'https://example.com/update-password', 32245 * }) 32246 * ``` 32247 * 32248 * @exampleResponse Reset password 32249 * ```json 32250 * { 32251 * data: {} 32252 * error: null 32253 * } 32254 * ``` 32255 * 32256 * @example Reset password (React) 32257 * ```js 32258 * /** 32259 * * Step 1: Send the user an email to get a password reset token. 32260 * * This email contains a link which sends the user back to your application. 32261 * *\/ 32262 * const { data, error } = await supabase.auth 32263 * .resetPasswordForEmail('[email protected]') 32264 * 32265 * /** 32266 * * Step 2: Once the user is redirected back to your application, 32267 * * ask the user to reset their password. 32268 * *\/ 32269 * useEffect(() => { 32270 * supabase.auth.onAuthStateChange(async (event, session) => { 32271 * if (event == "PASSWORD_RECOVERY") { 32272 * const newPassword = prompt("What would you like your new password to be?"); 32273 * const { data, error } = await supabase.auth 32274 * .updateUser({ password: newPassword }) 32275 * 32276 * if (data) alert("Password updated successfully!") 32277 * if (error) alert("There was an error updating your password.") 32278 * } 32279 * }) 32280 * }, []) 32281 * ``` 32282 */ 32283 async resetPasswordForEmail(e, s = {}) { 32284 let r = null, n = null, o = null; 32285 this.flowType === "pkce" && ([r, n, o] = await this._getCodeChallengeAndMethod( 32286 !0 32287 // isPasswordRecovery 32288 )); 32289 try { 32290 return await N(this.fetch, "POST", `${this.url}/recover`, { 32291 body: { 32292 email: e, 32293 code_challenge: r, 32294 code_challenge_method: n, 32295 gotrue_meta_security: { captcha_token: s.captchaToken } 32296 }, 32297 headers: this.headers, 32298 redirectTo: this._maybeAppendFlowIdToRedirect(s.redirectTo, o) 32299 }); 32300 } catch (L) { 32301 if (await He(this.storage, this.storageKey, o), B(L)) 32302 return this._returnResult({ data: null, error: L }); 32303 throw L; 32304 } 32305 } 32306 /** 32307 * Gets all the identities linked to a user. 32308 * 32309 * @category Auth 32310 * 32311 * @remarks 32312 * - The user needs to be signed in to call `getUserIdentities()`. 32313 * 32314 * @example Returns a list of identities linked to the user 32315 * ```js 32316 * const { data, error } = await supabase.auth.getUserIdentities() 32317 * ``` 32318 * 32319 * @exampleResponse Returns a list of identities linked to the user 32320 * ```json 32321 * { 32322 * "data": { 32323 * "identities": [ 32324 * { 32325 * "identity_id": "22222222-2222-2222-2222-222222222222", 32326 * "id": "2024-01-01T00:00:00Z", 32327 * "user_id": "2024-01-01T00:00:00Z", 32328 * "identity_data": { 32329 * "email": "[email protected]", 32330 * "email_verified": false, 32331 * "phone_verified": false, 32332 * "sub": "11111111-1111-1111-1111-111111111111" 32333 * }, 32334 * "provider": "email", 32335 * "last_sign_in_at": "2024-01-01T00:00:00Z", 32336 * "created_at": "2024-01-01T00:00:00Z", 32337 * "updated_at": "2024-01-01T00:00:00Z", 32338 * "email": "[email protected]" 32339 * } 32340 * ] 32341 * }, 32342 * "error": null 32343 * } 32344 * ``` 32345 */ 32346 async getUserIdentities() { 32347 var e; 32348 try { 32349 const { data: s, error: r } = await this.getUser(); 32350 if (r) 32351 throw r; 32352 return this._returnResult({ data: { identities: (e = s.user.identities) !== null && e !== void 0 ? e : [] }, error: null }); 32353 } catch (s) { 32354 if (B(s)) 32355 return this._returnResult({ data: null, error: s }); 32356 throw s; 32357 } 32358 } 32359 /** * 32360 * @category Auth 32361 * 32362 * @remarks 32363 * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers). 32364 * - The user needs to be signed in to call `linkIdentity()`. 32365 * - If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail. 32366 * - If `linkIdentity` is run in the browser, the user is automatically redirected to the returned URL. On the server, you should handle the redirect. 32367 *
32368 * @example Link an identity to a user 32369 * ```js 32370 * const { data, error } = await supabase.auth.linkIdentity({ 32371 * provider: 'github' 32372 * }) 32373 * ``` 32374 * 32375 * @exampleResponse Link an identity to a user 32376 * ```json 32377 * { 32378 * data: { 32379 * provider: 'github', 32380 * url: <PROVIDER_URL_TO_REDIRECT_TO>, 32381 * flowId: <PKCE_FLOW_ID_OR_NULL> 32382 * }, 32383 * error: null 32384 * } 32385 * ``` 32386 */ 32387 async linkIdentity(e) { 32388 return "token" in e ? this.linkIdentityIdToken(e) : this.linkIdentityOAuth(e); 32389 } 32390 async linkIdentityOAuth(e) { 32391 var s; 32392 let r = null; 32393 try { 32394 const { data: n, error: o } = await this._useSession(async (L) => { 32395 var d, l, g, f, p; 32396 const { data: M, error: u } = L; 32397 if (u) 32398 throw u; 32399 const { url: h, flowId: x } = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, e.provider, { 32400 redirectTo: (d = e.options) === null || d === void 0 ? void 0 : d.redirectTo, 32401 scopes: (l = e.options) === null || l === void 0 ? void 0 : l.scopes, 32402 queryParams: (g = e.options) === null || g === void 0 ? void 0 : g.queryParams, 32403 skipBrowserRedirect: !0 32404 }); 32405 return r = x, await N(this.fetch, "GET", h, { 32406 headers: this.headers, 32407 jwt: (p = (f = M.session) === null || f === void 0 ? void 0 : f.access_token) !== null && p !== void 0 ? p : void 0 32408 }); 32409 }); 32410 if (o) 32411 throw o; 32412 return _e() && !(!((s = e.options) === null || s === void 0) && s.skipBrowserRedirect) && window.location.assign(n?.url), this._returnResult({ 32413 data: { provider: e.provider, url: n?.url, flowId: r }, 32414 error: null 32415 }); 32416 } catch (n) { 32417 if (B(n)) 32418 return this._returnResult({ 32419 data: { provider: e.provider, url: null, flowId: r }, 32420 error: n 32421 }); 32422 throw n; 32423 } 32424 } 32425 async linkIdentityIdToken(e) { 32426 return await this._useSession(async (s) => { 32427 var r; 32428 try { 32429 const { error: n, data: { session: o } } = s; 32430 if (n) 32431 throw n; 32432 const { options: L, provider: d, token: l, access_token: g, nonce: f } = e, p = await N(this.fetch, "POST", `${this.url}/token?grant_type=id_token`, { 32433 headers: this.headers, 32434 jwt: (r = o?.access_token) !== null && r !== void 0 ? r : void 0, 32435 body: { 32436 provider: d, 32437 id_token: l, 32438 access_token: g, 32439 nonce: f, 32440 link_identity: !0, 32441 gotrue_meta_security: { captcha_token: L?.captchaToken } 32442 }, 32443 xform: De 32444 }), { data: M, error: u } = p; 32445 return u ? this._returnResult({ data: { user: null, session: null }, error: u }) : !M || !M.session || !M.user ? this._returnResult({ 32446 data: { user: null, session: null }, 32447 error: new et() 32448 }) : (M.session && (await this._saveSession(M.session), await this._notifyAllSubscribers("USER_UPDATED", M.session)), this._returnResult({ data: M, error: u })); 32449 } catch (n) { 32450 if (await He(this.storage, this.storageKey, null), B(n)) 32451 return this._returnResult({ data: { user: null, session: null }, error: n }); 32452 throw n; 32453 } 32454 }); 32455 } 32456 /** 32457 * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked. 32458 * 32459 * @category Auth 32460 * 32461 * @remarks 32462 * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers). 32463 * - The user needs to be signed in to call `unlinkIdentity()`. 32464 * - The user must have at least 2 identities in order to unlink an identity. 32465 * - The identity to be unlinked must belong to the user. 32466 * 32467 * @example Unlink an identity 32468 * ```js 32469 * // retrieve all identities linked to a user 32470 * const identities = await supabase.auth.getUserIdentities() 32471 * 32472 * // find the google identity 32473 * const googleIdentity = identities.find( 32474 * identity => identity.provider === 'google' 32475 * ) 32476 * 32477 * // unlink the google identity 32478 * const { error } = await supabase.auth.unlinkIdentity(googleIdentity) 32479 * ``` 32480 */ 32481 async unlinkIdentity(e) { 32482 try { 32483 return await this._useSession(async (s) => { 32484 var r, n; 32485 const { data: o, error: L } = s; 32486 if (L) 32487 throw L;
32488 return await N(this.fetch, "DELETE", `${this.url}/user/identities/${e.identity_id}`, { 32489 headers: this.headers, 32490 jwt: (n = (r = o.session) === null || r === void 0 ? void 0 : r.access_token) !== null && n !== void 0 ? n : void 0 32491 }); 32492 }); 32493 } catch (s) { 32494 if (B(s)) 32495 return this._returnResult({ data: null, error: s }); 32496 throw s; 32497 } 32498 } 32499 /** 32500 * Generates a new JWT. 32501 * @param refreshToken A valid refresh token that was returned on login. 32502 */ 32503 async _refreshAccessToken(e) { 32504 const s = "#_refreshAccessToken()"; 32505 this._debug(s, "begin"); 32506 try { 32507 const r = Date.now(); 32508 return await Fh(async (n) => (n > 0 && await Ch(200 * Math.pow(2, n - 1)), this._debug(s, "refreshing attempt", n), await N(this.fetch, "POST", `${this.url}/token?grant_type=refresh_token`, { 32509 body: { refresh_token: e }, 32510 headers: this.headers, 32511 xform: De 32512 })), (n, o) => { 32513 const L = 200 * Math.pow(2, n); 32514 return o && Z2(o) && // retryable only if the request can be sent before the backoff overflows the tick duration 32515 Date.now() + L - r < f1; 32516 }); 32517 } catch (r) { 32518 if (this._debug(s, "error", r), B(r)) 32519 return this._returnResult({ data: { session: null, user: null }, error: r }); 32520 throw r; 32521 } finally { 32522 this._debug(s, "end"); 32523 } 32524 } 32525 _isValidSession(e) { 32526 return typeof e == "object" && e !== null && "access_token" in e && "refresh_token" in e && "expires_at" in e; 32527 } 32528 async _handleProviderSignIn(e, s) { 32529 const { url: r, flowId: n } = await this._getUrlForProvider(`${this.url}/authorize`, e, { 32530 redirectTo: s.redirectTo, 32531 scopes: s.scopes, 32532 queryParams: s.queryParams 32533 }); 32534 return this._debug("#_handleProviderSignIn()", "provider", e, "options", s, "url", r), _e() && !s.skipBrowserRedirect && window.location.assign(r), { data: { provider: e, url: r, flowId: n }, error: null }; 32535 } 32536 /** 32537 * Recovers the session from LocalStorage and refreshes the token 32538 * Note: this method is async to accommodate for AsyncStorage e.g. in React native. 32539 */ 32540 async _recoverAndRefresh() { 32541 var e, s; 32542 const r = "#_recoverAndRefresh()"; 32543 this._debug(r, "begin"); 32544 try { 32545 const n = await be(this.storage, this.storageKey); 32546 if (n && this.userStorage) { 32547 let L = await be(this.userStorage, this.storageKey + "-user"); 32548 !this.storage.isServer && Object.is(this.storage, this.userStorage) && !L && (L = { user: n.user }, await p1(this.userStorage, this.storageKey + "-user", L)), n.user = (e = L?.user) !== null && e !== void 0 ? e : _4(); 32549 } else if (n && !n.user && !n.user) { 32550 const L = await be(this.storage, this.storageKey + "-user"); 32551 L && L?.user ? (n.user = L.user, await ke(this.storage, this.storageKey + "-user"), await p1(this.storage, this.storageKey, n)) : n.user = _4(); 32552 } 32553 if (this._debug(r, "session from storage", n), !this._isValidSession(n)) { 32554 this._debug(r, "session is not valid"), n !== null && await this._removeSession(); 32555 return; 32556 } 32557 const o = ((s = n.expires_at) !== null && s !== void 0 ? s : 1 / 0) * 1e3 - Date.now() < x4; 32558 if (this._debug(r, `session has${o ? "" : " not"} expired with margin of ${x4}s`), o) { 32559 if (this.autoRefreshToken && n.refresh_token) { 32560 const { error: L } = await this._callRefreshToken(n.refresh_token); 32561 L && (d6(L) ? this._debug(r, "refresh discarded by commit guard", L) : this._debug(r, "refresh failed", L)); 32562 } 32563 } else if (n.user && n.user.__isUserNotAvailableProxy === !0) 32564 try { 32565 const { data: L, error: d } = await this._getUser(n.access_token); 32566 !d && L?.user ? (n.user = L.user, await this._saveSession(n), await this._notifyAllSubscribers("SIGNED_IN", n)) : this._debug(r, "could not get user data, skipping SIGNED_IN notification"); 32567 } catch (L) { 32568 console.error("Error getting user data:", L), this._debug(r, "error getting user data, skipping SIGNED_IN notification", L); 32569 } 32570 else 32571 await this._notifyAllSubscribers("SIGNED_IN", n); 32572 } catch (n) { 32573 this._debug(r, "error", n), Z2(n) ? console.warn(n) : console.error(n); 32574 return; 32575 } finally { 32576 this._debug(r, "end"); 32577 } 32578 } 32579 async _callRefreshToken(e) { 32580 var s, r; 32581 if (!e) 32582 throw new he(); 32583 if (this.refreshingDeferred) 32584 return this.refreshingDeferred.promise; 32585 if (this.lastRefreshFailure && this.lastRefreshFailure.refreshToken === e && Date.now() < this.lastRefreshFailure.expiresAt)
32586 return this._debug("#_callRefreshToken()", "returning cached failure (cooldown active)"), this.lastRefreshFailure.result; 32587 const n = "#_callRefreshToken()"; 32588 this._debug(n, "begin"); 32589 try { 32590 this.refreshingDeferred = new H3(), this.refreshingDeferred.promise.then(void 0, () => { 32591 }); 32592 const o = await be(this.storage, this.storageKey), { data: L, error: d } = await this._refreshAccessToken(e); 32593 if (d) 32594 throw d; 32595 if (!L.session) 32596 throw new he(); 32597 const l = await be(this.storage, this.storageKey); 32598 if (o !== null && (l === null || l.refresh_token !== o.refresh_token)) { 32599 this._debug(n, "commit guard: storage changed since refresh started, discarding rotated tokens", { 32600 // Presence indicators only â never log refresh token fragments, 32601 // even partial. Logs may be forwarded to third-party services. 32602 startedWith: "present", 32603 nowHolds: l ? "replaced" : "cleared" 32604 }); 32605 const M = { 32606 data: null, 32607 error: new l6() 32608 }; 32609 return this.refreshingDeferred.resolve(M), M; 32610 } 32611 const f = this._sessionRemovalEpoch; 32612 if (await this._saveSession(L.session), this._sessionRemovalEpoch !== f) { 32613 this._debug(n, "commit guard (post-save): _removeSession ran during _saveSession, undoing write"), await ke(this.storage, this.storageKey), this.userStorage && await ke(this.userStorage, this.storageKey + "-user"); 32614 const M = { 32615 data: null, 32616 error: new l6() 32617 }; 32618 return this.refreshingDeferred.resolve(M), M; 32619 } 32620 await this._notifyAllSubscribers("TOKEN_REFRESHED", L.session); 32621 const p = { data: L.session, error: null }; 32622 return this.lastRefreshFailure = null, this.refreshingDeferred.resolve(p), p; 32623 } catch (o) { 32624 if (this._debug(n, "error", o), B(o)) { 32625 const L = { data: null, error: o }; 32626 if (!Z2(o)) { 32627 const d = await be(this.storage, this.storageKey); 32628 !!(d?.expires_at && d.expires_at * 1e3 > Date.now()) ? this._debug(n, "proactive refresh failed, access token still valid â preserving session") : await this._removeSession(); 32629 } 32630 return this.lastRefreshFailure = { 32631 refreshToken: e, 32632 result: L, 32633 expiresAt: Date.now() + uh 32634 }, (s = this.refreshingDeferred) === null || s === void 0 || s.resolve(L), L; 32635 } 32636 throw (r = this.refreshingDeferred) === null || r === void 0 || r.reject(o), o; 32637 } finally { 32638 this.refreshingDeferred = null, this._debug(n, "end"); 32639 } 32640 } 32641 async _notifyAllSubscribers(e, s, r = !0) { 32642 if (this._pendingInitNotifications !== null && r) { 32643 this._pendingInitNotifications.push({ event: e, session: s, broadcast: r }); 32644 return; 32645 } 32646 const n = `#_notifyAllSubscribers(${e})`; 32647 this._debug(n, "begin", s, `broadcast = ${r}`); 32648 try { 32649 this.broadcastChannel && r && this.broadcastChannel.postMessage({ event: e, session: s }); 32650 const o = [], L = Array.from(this.stateChangeEmitters.values()).map(async (d) => { 32651 try { 32652 await d.callback(e, s); 32653 } catch (l) { 32654 o.push(l); 32655 } 32656 }); 32657 if (await Promise.all(L), o.length > 0) { 32658 for (let d = 0; d < o.length; d += 1) 32659 console.error(o[d]); 32660 throw o[0]; 32661 } 32662 } finally { 32663 this._debug(n, "end"); 32664 } 32665 } 32666 /** 32667 * set currentSession and currentUser 32668 * process to _startAutoRefreshToken if possible 32669 */ 32670 async _saveSession(e) { 32671 this._debug("#_saveSession()", e), this.suppressGetSessionWarning = !0; 32672 const s = Object.assign({}, e), r = s.user && s.user.__isUserNotAvailableProxy === !0; 32673 if (this.userStorage) { 32674 !r && s.user && await p1(this.userStorage, this.storageKey + "-user", { 32675 user: s.user 32676 }); 32677 const n = Object.assign({}, s); 32678 delete n.user; 32679 const o = h6(n); 32680 await p1(this.storage, this.storageKey, o); 32681 } else { 32682 const n = h6(s); 32683 await p1(this.storage, this.storageKey, n); 32684 } 32685 } 32686 async _removeSession() { 32687 this._sessionRemovalEpoch += 1, this._debug("#_removeSession()"), this.lastRefreshFailure = null, this.suppressGetSessionWarning = !1, await ke(this.storage, this.storageKey), await Hh(this.storage, this.storageKey), await ke(this.storage, this.storageKey + "-user"), this.userStorage && await ke(this.userStorage, this.storageKey + "-user"), await this._notifyAllSubscribers("SIGNED_OUT", null); 32688 } 32689 /**
32690 * Removes any registered visibilitychange callback. 32691 * 32692 * {@link GoTrueClient.startAutoRefresh} 32693 * {@link GoTrueClient.stopAutoRefresh} 32694 */ 32695 _removeVisibilityChangedCallback() { 32696 this._debug("#_removeVisibilityChangedCallback()"); 32697 const e = this.visibilityChangedCallback; 32698 this.visibilityChangedCallback = null; 32699 try { 32700 e && _e() && window?.removeEventListener && window.removeEventListener("visibilitychange", e); 32701 } catch (s) { 32702 console.error("removing visibilitychange callback failed", s); 32703 } 32704 } 32705 /** 32706 * This is the private implementation of {@link GoTrueClient.startAutoRefresh}. Use this 32707 * within the library. 32708 */ 32709 async _startAutoRefresh() { 32710 await this._stopAutoRefresh(), this._debug("#_startAutoRefresh()"); 32711 const e = setInterval(() => this._autoRefreshTokenTick(), f1); 32712 this.autoRefreshTicker = e, e && typeof e == "object" && typeof e.unref == "function" ? e.unref() : typeof Deno < "u" && typeof Deno.unrefTimer == "function" && Deno.unrefTimer(e); 32713 const s = setTimeout(async () => { 32714 await this.initializePromise, await this._autoRefreshTokenTick(); 32715 }, 0); 32716 this.autoRefreshTickTimeout = s, s && typeof s == "object" && typeof s.unref == "function" ? s.unref() : typeof Deno < "u" && typeof Deno.unrefTimer == "function" && Deno.unrefTimer(s); 32717 } 32718 /** 32719 * This is the private implementation of {@link GoTrueClient.stopAutoRefresh}. Use this 32720 * within the library. 32721 */ 32722 async _stopAutoRefresh() { 32723 this._debug("#_stopAutoRefresh()"); 32724 const e = this.autoRefreshTicker; 32725 this.autoRefreshTicker = null, e && clearInterval(e); 32726 const s = this.autoRefreshTickTimeout; 32727 this.autoRefreshTickTimeout = null, s && clearTimeout(s); 32728 } 32729 /** 32730 * Starts an auto-refresh process in the background. The session is checked 32731 * every few seconds. Close to the time of expiration a process is started to 32732 * refresh the session. If refreshing fails it will be retried for as long as 32733 * necessary. 32734 * 32735 * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need 32736 * to call this function, it will be called for you. 32737 * 32738 * On browsers the refresh process works only when the tab/window is in the 32739 * foreground to conserve resources as well as prevent race conditions and 32740 * flooding auth with requests. If you call this method any managed 32741 * visibility change callback will be removed and you must manage visibility 32742 * changes on your own. 32743 * 32744 * On non-browser platforms the refresh process works *continuously* in the 32745 * background, which may not be desirable. You should hook into your 32746 * platform's foreground indication mechanism and call these methods 32747 * appropriately to conserve resources. 32748 * 32749 * {@link GoTrueClient.stopAutoRefresh} 32750 * 32751 * @category Auth 32752 * 32753 * @remarks 32754 * - Only useful in non-browser environments such as React Native or Electron. 32755 * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not. 32756 * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not. 32757 * - To give this hint to the application, you should be calling this method when the app is in focus and calling `supabase.auth.stopAutoRefresh()` when it's out of focus. 32758 * 32759 * @example Start and stop auto refresh in React Native 32760 * ```js 32761 * import { AppState } from 'react-native' 32762 * 32763 * // make sure you register this only once! 32764 * AppState.addEventListener('change', (state) => { 32765 * if (state === 'active') { 32766 * supabase.auth.startAutoRefresh() 32767 * } else { 32768 * supabase.auth.stopAutoRefresh() 32769 * } 32770 * }) 32771 * ``` 32772 */ 32773 async startAutoRefresh() { 32774 this._removeVisibilityChangedCallback(), await this._startAutoRefresh(); 32775 } 32776 /** 32777 * Stops an active auto refresh process running in the background (if any). 32778 * 32779 * If you call this method any managed visibility change callback will be 32780 * removed and you must manage visibility changes on your own. 32781 * 32782 * See {@link GoTrueClient.startAutoRefresh} for more details. 32783 * 32784 * @category Auth 32785 * 32786 * @remarks 32787 * - Only useful in non-browser environments such as React Native or Electron. 32788 * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not. 32789 * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not. 32790 * - When your application goes in the background or out of focus, call this method to stop the proactive refreshing of the session. 32791 * 32792 * @example Start and stop auto refresh in React Native 32793 * ```js 32794 * import { AppState } from 'react-native' 32795 * 32796 * // make sure you register this only once! 32797 * AppState.addEventListener('change', (state) => { 32798 * if (state === 'active') { 32799 * supabase.auth.startAutoRefresh() 32800 * } else { 32801 * supabase.auth.stopAutoRefresh() 32802 * } 32803 * }) 32804 * ``` 32805 */ 32806 async stopAutoRefresh() { 32807 this._removeVisibilityChangedCallback(), await this._stopAutoRefresh(); 32808 } 32809 /** 32810 * Tears down the client's background work: stops the auto-refresh interval, 32811 * removes the `visibilitychange` listener, closes the cross-tab 32812 * `BroadcastChannel`, and clears registered `onAuthStateChange` subscribers. 32813 * 32814 * Call this from cleanup hooks when the client is being replaced before 32815 * its JS realm is destroyed. React Strict Mode and HMR are the common 32816 * cases. Any in-flight `fetch` calls continue to completion and may still 32817 * write to storage; dispose doesn't abort them or erase storage. 32818 * 32819 * Lifecycle caveat: because in-flight refreshes are not aborted, a 32820 * disposed instance can still persist a rotated session to storage after 32821 * `dispose()` returns. A subsequent `createClient` against the same 32822 * `storageKey` will pick up that session on its next read. If you need
32823 * strict isolation between client lifecycles, await any pending auth 32824 * operation before calling `dispose()` (or change the `storageKey` for 32825 * the replacement client). 32826 * 32827 * Safe to call repeatedly. 32828 * 32829 * @category Auth 32830 * 32831 * @example Cleanup on React unmount 32832 * ```ts 32833 * useEffect(() => { 32834 * const client = createClient(...) 32835 * return () => { client.auth.dispose() } 32836 * }, []) 32837 * ``` 32838 */ 32839 async dispose() { 32840 var e; 32841 this._removeVisibilityChangedCallback(), await this._stopAutoRefresh(), (e = this.broadcastChannel) === null || e === void 0 || e.close(), this.broadcastChannel = null, this.stateChangeEmitters.clear(); 32842 } 32843 /** 32844 * Runs the auto refresh token tick. 32845 */ 32846 async _autoRefreshTokenTick() { 32847 if (this._debug("#_autoRefreshTokenTick()", "begin"), this.lock != null) { 32848 try { 32849 await this._acquireLock(0, async () => { 32850 try { 32851 const e = Date.now(); 32852 try { 32853 return await this._useSession(async (s) => { 32854 const { data: { session: r } } = s; 32855 if (!r || !r.refresh_token || !r.expires_at) { 32856 this._debug("#_autoRefreshTokenTick()", "no session"); 32857 return; 32858 } 32859 const n = Math.floor((r.expires_at * 1e3 - e) / f1); 32860 this._debug("#_autoRefreshTokenTick()", `access token expires in ${n} ticks, a tick lasts ${f1}ms, refresh threshold is ${Zt} ticks`), n <= Zt && await this._callRefreshToken(r.refresh_token); 32861 }); 32862 } catch (s) { 32863 console.error("Auto refresh tick failed with error. This is likely a transient error.", s); 32864 } 32865 } finally { 32866 this._debug("#_autoRefreshTokenTick()", "end"); 32867 } 32868 }); 32869 } catch (e) { 32870 if (e instanceof sm) 32871 this._debug("auto refresh token tick lock not available"); 32872 else 32873 throw e; 32874 } 32875 return; 32876 } 32877 if (this.refreshingDeferred !== null) { 32878 this._debug("#_autoRefreshTokenTick()", "refresh already in flight, skipping"); 32879 return; 32880 } 32881 try { 32882 const e = Date.now(); 32883 try { 32884 await this._useSession(async (s) => { 32885 const { data: { session: r } } = s; 32886 if (!r || !r.refresh_token || !r.expires_at) { 32887 this._debug("#_autoRefreshTokenTick()", "no session"); 32888 return; 32889 } 32890 const n = Math.floor((r.expires_at * 1e3 - e) / f1); 32891 this._debug("#_autoRefreshTokenTick()", `access token expires in ${n} ticks, a tick lasts ${f1}ms, refresh threshold is ${Zt} ticks`), n <= Zt && await this._callRefreshToken(r.refresh_token); 32892 }); 32893 } catch (s) { 32894 console.error("Auto refresh tick failed with error. This is likely a transient error.", s); 32895 } 32896 } finally { 32897 this._debug("#_autoRefreshTokenTick()", "end"); 32898 } 32899 } 32900 /** 32901 * Registers callbacks on the browser / platform, which in-turn run 32902 * algorithms when the browser window/tab are in foreground. On non-browser 32903 * platforms it assumes always foreground. 32904 */ 32905 async _handleVisibilityChange() { 32906 if (this._debug("#_handleVisibilityChange()"), !_e() || !window?.addEventListener) 32907 return this.autoRefreshToken && this.startAutoRefresh(), !1; 32908 try { 32909 this.visibilityChangedCallback = async () => { 32910 try { 32911 await this._onVisibilityChanged(!1); 32912 } catch (e) { 32913 this._debug("#visibilityChangedCallback", "error", e); 32914 } 32915 }, window?.addEventListener("visibilitychange", this.visibilityChangedCallback), await this._onVisibilityChanged(!0); 32916 } catch (e) { 32917 console.error("_handleVisibilityChange", e); 32918 } 32919 } 32920 /** 32921 * Callback registered with `window.addEventListener('visibilitychange')`. 32922 */ 32923 async _onVisibilityChanged(e) { 32924 const s = `#_onVisibilityChanged(${e})`; 32925 if (this._debug(s, "visibilityState", document.visibilityState), document.visibilityState === "visible") { 32926 if (this.autoRefreshToken && this._startAutoRefresh(), !e) 32927 if (await this.initializePromise, this.lock != null) 32928 await this._acquireLock(this.lockAcquireTimeout, async () => { 32929 if (document.visibilityState !== "visible") { 32930 this._debug(s, "acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting"); 32931 return; 32932 } 32933 await this._recoverAndRefresh(); 32934 }); 32935 else { 32936 if (document.visibilityState !== "visible") { 32937 this._debug(s, "visibilityState is no longer visible, skipping recovery"); 32938 return; 32939 } 32940 await this._recoverAndRefresh(); 32941 } 32942 } else document.visibilityState === "hidden" && this.autoRefreshToken && this._stopAutoRefresh(); 32943 } 32944 /** 32945 * Generates the relevant login URL for a third-party provider. 32946 * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed. 32947 * @param options.scopes A space-separated list of scopes granted to the OAuth application.
32948 * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application. 32949 */ 32950 async _getUrlForProvider(e, s, r) { 32951 let n = r?.redirectTo, o = null, L = null, d = null; 32952 this.flowType === "pkce" && ([o, L, d] = await this._getCodeChallengeAndMethod(), n = this._maybeAppendFlowIdToRedirect(n, d)); 32953 const l = [`provider=${encodeURIComponent(s)}`]; 32954 if (n && l.push(`redirect_to=${encodeURIComponent(n)}`), r?.scopes && l.push(`scopes=${encodeURIComponent(r.scopes)}`), o != null && L != null) { 32955 const g = new URLSearchParams({ 32956 code_challenge: `${encodeURIComponent(o)}`, 32957 code_challenge_method: `${encodeURIComponent(L)}` 32958 }); 32959 l.push(g.toString()); 32960 } 32961 if (r?.queryParams) { 32962 const g = new URLSearchParams(r.queryParams); 32963 l.push(g.toString()); 32964 } 32965 return r?.skipBrowserRedirect && l.push(`skip_http_redirect=${r.skipBrowserRedirect}`), { url: `${e}?${l.join("&")}`, flowId: d }; 32966 } 32967 /** 32968 * Appends the reserved flow id parameter to a redirect URL so the callback 32969 * can be matched to the verifier stored for its flow. Opt-in via 32970 * `experimental.appendPkceFlowIdToRedirects`: redirect URLs are validated 32971 * against the project's allow list including the query string, so an extra 32972 * parameter can stop exact (non-wildcard) entries from matching. 32973 */ 32974 _maybeAppendFlowIdToRedirect(e, s) { 32975 return !e || !s || !this.experimental.appendPkceFlowIdToRedirects ? e ?? void 0 : Zh(e, s); 32976 } 32977 /** 32978 * Generates and stores a PKCE challenge/verifier pair for a new flow, 32979 * logging any pending verifier the bounded slot ring evicts. 32980 */ 32981 async _getCodeChallengeAndMethod(e = !1) { 32982 return Wh(this.storage, this.storageKey, e, (s) => this._debug("#_getCodeChallengeAndMethod()", "evicted oldest pending PKCE verifier slot", s)); 32983 } 32984 async _unenroll(e) { 32985 try { 32986 return await this._useSession(async (s) => { 32987 var r; 32988 const { data: n, error: o } = s; 32989 return o ? this._returnResult({ data: null, error: o }) : await N(this.fetch, "DELETE", `${this.url}/factors/${e.factorId}`, { 32990 headers: this.headers, 32991 jwt: (r = n?.session) === null || r === void 0 ? void 0 : r.access_token 32992 }); 32993 }); 32994 } catch (s) { 32995 if (B(s)) 32996 return this._returnResult({ data: null, error: s }); 32997 throw s; 32998 } 32999 } 33000 async _enroll(e) { 33001 try { 33002 return await this._useSession(async (s) => { 33003 var r, n; 33004 const { data: o, error: L } = s; 33005 if (L) 33006 return this._returnResult({ data: null, error: L }); 33007 const d = Object.assign({ friendly_name: e.friendlyName, factor_type: e.factorType }, e.factorType === "phone" ? { phone: e.phone } : e.factorType === "totp" ? { issuer: e.issuer } : {}), { data: l, error: g } = await N(this.fetch, "POST", `${this.url}/factors`, { 33008 body: d, 33009 headers: this.headers, 33010 jwt: (r = o?.session) === null || r === void 0 ? void 0 : r.access_token 33011 }); 33012 return g ? this._returnResult({ data: null, error: g }) : (e.factorType === "totp" && l.type === "totp" && (!((n = l?.totp) === null || n === void 0) && n.qr_code) && (l.totp.qr_code = `data:image/svg+xml;utf-8,${l.totp.qr_code}`), this._returnResult({ data: l, error: null })); 33013 }); 33014 } catch (s) { 33015 if (B(s)) 33016 return this._returnResult({ data: null, error: s }); 33017 throw s; 33018 } 33019 } 33020 async _verify(e) { 33021 const s = async () => { 33022 try { 33023 return await this._useSession(async (r) => { 33024 var n; 33025 const { data: o, error: L } = r; 33026 if (L) 33027 return this._returnResult({ data: null, error: L }); 33028 const d = Object.assign({ challenge_id: e.challengeId }, "webauthn" in e ? { 33029 webauthn: Object.assign(Object.assign({}, e.webauthn), { credential_response: e.webauthn.type === "create" ? T6(e.webauthn.credential_response) : S6(e.webauthn.credential_response) }) 33030 } : { code: e.code }), { data: l, error: g } = await N(this.fetch, "POST", `${this.url}/factors/${e.factorId}/verify`, { 33031 body: d, 33032 headers: this.headers, 33033 jwt: (n = o?.session) === null || n === void 0 ? void 0 : n.access_token 33034 }); 33035 return g ? this._returnResult({ data: null, error: g }) : (await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1e3) + l.expires_in }, l)), await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED", l), this._returnResult({ data: l, error: g })); 33036 }); 33037 } catch (r) { 33038 if (B(r)) 33039 return this._returnResult({ data: null, error: r }); 33040 throw r; 33041 } 33042 }; 33043 return this.lock != null ? this._acquireLock(this.lockAcquireTimeout, s) : s(); 33044 } 33045 async _challenge(e) { 33046 const s = async () => {
33047 try { 33048 return await this._useSession(async (r) => { 33049 var n; 33050 const { data: o, error: L } = r; 33051 if (L) 33052 return this._returnResult({ data: null, error: L }); 33053 const d = await N(this.fetch, "POST", `${this.url}/factors/${e.factorId}/challenge`, { 33054 body: e, 33055 headers: this.headers, 33056 jwt: (n = o?.session) === null || n === void 0 ? void 0 : n.access_token 33057 }); 33058 if (d.error) 33059 return d; 33060 const { data: l } = d; 33061 if (l.type !== "webauthn") 33062 return { data: l, error: null }; 33063 switch (l.webauthn.type) { 33064 case "create": 33065 return { 33066 data: Object.assign(Object.assign({}, l), { webauthn: Object.assign(Object.assign({}, l.webauthn), { credential_options: Object.assign(Object.assign({}, l.webauthn.credential_options), { publicKey: y6(l.webauthn.credential_options.publicKey) }) }) }), 33067 error: null 33068 }; 33069 case "request": 33070 return { 33071 data: Object.assign(Object.assign({}, l), { webauthn: Object.assign(Object.assign({}, l.webauthn), { credential_options: Object.assign(Object.assign({}, l.webauthn.credential_options), { publicKey: w6(l.webauthn.credential_options.publicKey) }) }) }), 33072 error: null 33073 }; 33074 } 33075 }); 33076 } catch (r) { 33077 if (B(r)) 33078 return this._returnResult({ data: null, error: r }); 33079 throw r; 33080 } 33081 }; 33082 return this.lock != null ? this._acquireLock(this.lockAcquireTimeout, s) : s(); 33083 } 33084 /** 33085 * {@link GoTrueMFAApi#challengeAndVerify} 33086 */ 33087 async _challengeAndVerify(e) { 33088 const { data: s, error: r } = await this._challenge({ 33089 factorId: e.factorId 33090 }); 33091 return r ? this._returnResult({ data: null, error: r }) : await this._verify({ 33092 factorId: e.factorId, 33093 challengeId: s.id, 33094 code: e.code 33095 }); 33096 } 33097 /** 33098 * {@link GoTrueMFAApi#listFactors} 33099 */ 33100 async _listFactors() { 33101 var e; 33102 const { data: { user: s }, error: r } = await this.getUser(); 33103 if (r) 33104 return { data: null, error: r }; 33105 const n = { 33106 all: [], 33107 phone: [], 33108 totp: [], 33109 webauthn: [], 33110 recovery_code: [] 33111 }; 33112 for (const o of (e = s?.factors) !== null && e !== void 0 ? e : []) 33113 n.all.push(o), o.status === "verified" && o.factor_type in n && Array.isArray(n[o.factor_type]) && n[o.factor_type].push(o); 33114 return { 33115 data: n, 33116 error: null 33117 }; 33118 } 33119 /** 33120 * {@link GoTrueMFAApi#getAuthenticatorAssuranceLevel} 33121 */ 33122 async _getAuthenticatorAssuranceLevel(e) { 33123 var s, r, n, o; 33124 if (e) 33125 try { 33126 const { payload: u } = W2(e); 33127 let h = null; 33128 u.aal && (h = u.aal); 33129 let x = h; 33130 const { data: { user: _ }, error: v } = await this.getUser(e); 33131 if (v) 33132 return this._returnResult({ data: null, error: v }); 33133 ((r = (s = _?.factors) === null || s === void 0 ? void 0 : s.filter((S) => S.status === "verified")) !== null && r !== void 0 ? r : []).length > 0 && (x = "aal2"); 33134 const b = u.amr || []; 33135 return { data: { currentLevel: h, nextLevel: x, currentAuthenticationMethods: b }, error: null }; 33136 } catch (u) { 33137 if (B(u)) 33138 return this._returnResult({ data: null, error: u }); 33139 throw u; 33140 } 33141 const { data: { session: L }, error: d }
33141 = await this.getSession(); 33142 if (d) 33143 return this._returnResult({ data: null, error: d }); 33144 if (!L) 33145 return { 33146 data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] }, 33147 error: null 33148 }; 33149 const { payload: l } = W2(L.access_token); 33150 let g = null; 33151 l.aal && (g = l.aal); 33152 let f = g; 33153 ((o = (n = L.user.factors) === null || n === void 0 ? void 0 : n.filter((u) => u.status === "verified")) !== null && o !== void 0 ? o : []).length > 0 && (f = "aal2"); 33154 const M = l.amr || []; 33155 return { data: { currentLevel: g, nextLevel: f, currentAuthenticationMethods: M }, error: null }; 33156 } 33157 /** 33158 * {@link AuthMFARecoveryCodesApi#getStatus} 33159 */ 33160 async _getRecoveryCodesStatus() { 33161 zt(this.experimental); 33162 try { 33163 return await this._useSession(async (e) => { 33164 var s; 33165 const { data: r, error: n } = e; 33166 if (n) 33167 return this._returnResult({ data: null, error: n }); 33168 const { data: o, error: L } = await N(this.fetch, "GET", `${this.url}/factors/recovery-codes`, { 33169 headers: this.headers, 33170 jwt: (s = r?.session) === null || s === void 0 ? void 0 : s.access_token 33171 }); 33172 return L ? this._returnResult({ data: null, error: L }) : this._returnResult({ data: o, error: null }); 33173 }); 33174 } catch (e) { 33175 if (B(e)) 33176 return this._returnResult({ data: null, error: e }); 33177 throw e; 33178 } 33179 } 33180 /** 33181 * {@link AuthMFARecoveryCodesApi#generate} 33182 */ 33183 async _generateRecoveryCodes(e) { 33184 zt(this.experimental); 33185 try { 33186 return await this._useSession(async (s) => { 33187 var r; 33188 const { data: n, error: o } = s; 33189 if (o) 33190 return this._returnResult({ data: null, error: o }); 33191 const { data: L, error: d } = await N(this.fetch, "POST", `${this.url}/factors/recovery-codes`, { 33192 // The body is optional server-side; only send one when a name was given. 33193 body: e?.friendlyName ? { friendly_name: e.friendlyName } : void 0, 33194 headers: this.headers, 33195 jwt: (r = n?.session) === null || r === void 0 ? void 0 : r.access_token 33196 }); 33197 return d ? this._returnResult({ data: null, error: d }) : this._returnResult({ data: L, error: null }); 33198 }); 33199 } catch (s) { 33200 if (B(s)) 33201 return this._returnResult({ data: null, error: s }); 33202 throw s; 33203 } 33204 } 33205 /** 33206 * {@link AuthMFARecoveryCodesApi#verify} 33207 */ 33208 async _verifyRecoveryCode(e) { 33209 zt(this.experimental); 33210 const s = async () => { 33211 try { 33212 return await this._useSession(async (r) => { 33213 var n; 33214 const { data: o, error: L } = r; 33215 if (L) 33216 return this._returnResult({ data: null, error: L }); 33217 const { data: d, error: l } = await N(this.fetch, "POST", `${this.url}/factors/recovery-codes/verify`, { 33218 body: { code: e.code }, 33219 headers: this.headers, 33220 jwt: (n = o?.session) === null || n === void 0 ? void 0 : n.access_token 33221 }); 33222 if (l) 33223 return this._returnResult({ data: null, error: l }); 33224 const g = Object.assign({ expires_at: Bi(d.expires_in) }, d); 33225 return await this._saveSession(g), await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED", g), this._returnResult({ data: d, error: null }); 33226 }); 33227 } catch (r) { 33228 if (B(r)) 33229 return this._returnResult({ data: null, error: r }); 33230 throw r; 33231 } 33232 }; 33233 return this.lock != null ? this._acquireLock(this.lockAcquireTimeout, s) : s(); 33234 } 33235 /** 33236 * {@link AuthMFARecoveryCodesApi#regenerate} 33237 */ 33238 async _regenerateRecoveryCodes() { 33239 zt(this.experimental); 33240 try { 33241 return await this._useSession(async (e) => { 33242 var s; 33243 const { data: r, error: n } = e; 33244 if (n) 33245 return this._returnResult({ data: null, error: n }); 33246 const { data: o, error: L } = await N(this.fetch, "POST", `${this.url}/factors/recovery-codes/regenerate`, { 33247 headers: this.headers, 33248 jwt: (s = r?.session) === null || s === void 0 ? void 0 : s.access_token 33249 }); 33250 return L ? this._returnResult({ data: null, error: L }) : this._returnResult({ data: o, error: null }); 33251 }); 33252 } catch (e) { 33253 if (B(e)) 33254 return this._returnResult({ data: null, error: e }); 33255 throw e; 33256 } 33257 } 33258 /** 33259 * {@link AuthMFARecoveryCodesApi#unenroll} 33260 */ 33261 async _unenrollRecoveryCodes() { 33262 zt(this.experimental); 33263 try { 33264 return await this._useSession(async (e) => { 33265 var s; 33266 const { data: r, error: n } = e; 33267 if (n) 33268 return this._returnResult({ data: null, error: n }); 33269 const { data: o, error: L }
33269 = await N(this.fetch, "DELETE", `${this.url}/factors/recovery-codes`, { 33270 headers: this.headers, 33271 jwt: (s = r?.session) === null || s === void 0 ? void 0 : s.access_token 33272 }); 33273 return L ? this._returnResult({ data: null, error: L }) : this._returnResult({ data: o, error: null }); 33274 }); 33275 } catch (e) { 33276 if (B(e)) 33277 return this._returnResult({ data: null, error: e }); 33278 throw e; 33279 } 33280 } 33281 /** 33282 * Retrieves details about an OAuth authorization request. 33283 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 33284 * 33285 * Returns authorization details including client info, scopes, and user information. 33286 * If the response includes only a redirect_url field, it means consent was already given - the caller 33287 * should handle the redirect manually if needed. 33288 */ 33289 async _getAuthorizationDetails(e) { 33290 try { 33291 return await this._useSession(async (s) => { 33292 const { data: { session: r }, error: n } = s; 33293 return n ? this._returnResult({ data: null, error: n }) : r ? await N(this.fetch, "GET", `${this.url}/oauth/authorizations/${e}`, { 33294 headers: this.headers, 33295 jwt: r.access_token, 33296 xform: (o) => ({ data: o, error: null }) 33297 }) : this._returnResult({ data: null, error: new he() }); 33298 }); 33299 } catch (s) { 33300 if (B(s)) 33301 return this._returnResult({ data: null, error: s }); 33302 throw s; 33303 } 33304 } 33305 /** 33306 * Approves an OAuth authorization request. 33307 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 33308 */ 33309 async _approveAuthorization(e, s) { 33310 try { 33311 return await this._useSession(async (r) => { 33312 const { data: { session: n }, error: o } = r; 33313 if (o) 33314 return this._returnResult({ data: null, error: o }); 33315 if (!n) 33316 return this._returnResult({ data: null, error: new he() }); 33317 const L = await N(this.fetch, "POST", `${this.url}/oauth/authorizations/${e}/consent`, { 33318 headers: this.headers, 33319 jwt: n.access_token, 33320 body: { action: "approve" }, 33321 xform: (d) => ({ data: d, error: null }) 33322 }); 33323 return L.data && L.data.redirect_url && _e() && !s?.skipBrowserRedirect && window.location.assign(L.data.redirect_url), L; 33324 }); 33325 } catch (r) { 33326 if (B(r)) 33327 return this._returnResult({ data: null, error: r }); 33328 throw r; 33329 } 33330 } 33331 /** 33332 * Denies an OAuth authorization request. 33333 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 33334 */ 33335 async _denyAuthorization(e, s) { 33336 try { 33337 return await this._useSession(async (r) => { 33338 const { data: { session: n }, error: o } = r; 33339 if (o) 33340 return this._returnResult({ data: null, error: o }); 33341 if (!n) 33342 return this._returnResult({ data: null, error: new he() }); 33343 const L = await N(this.fetch, "POST", `${this.url}/oauth/authorizations/${e}/consent`, { 33344 headers: this.headers, 33345 jwt: n.access_token, 33346 body: { action: "deny" }, 33347 xform: (d) => ({ data: d, error: null }) 33348 }); 33349 return L.data && L.data.redirect_url && _e() && !s?.skipBrowserRedirect && window.location.assign(L.data.redirect_url), L; 33350 }); 33351 } catch (r) { 33352 if (B(r)) 33353 return this._returnResult({ data: null, error: r }); 33354 throw r; 33355 } 33356 } 33357 /** 33358 * Lists all OAuth grants that the authenticated user has authorized. 33359 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 33360 */ 33361 async _listOAuthGrants() { 33362 try { 33363 return await this._useSession(async (e) => { 33364 const { data: { session: s }, error: r } = e; 33365 return r ? this._returnResult({ data: null, error: r }) : s ? await N(this.fetch, "GET", `${this.url}/user/oauth/grants`, { 33366 headers: this.headers, 33367 jwt: s.access_token, 33368 xform: (n) => ({ data: n, error: null }) 33369 }) : this._returnResult({ data: null, error: new he() }); 33370 }); 33371 } catch (e) { 33372 if (B(e)) 33373 return this._returnResult({ data: null, error: e }); 33374 throw e; 33375 } 33376 } 33377 /** 33378 * Revokes a user's OAuth grant for a specific client. 33379 * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth. 33380 */ 33381 async _revokeOAuthGrant(e) { 33382 try { 33383 return await this._useSession(async (s) => { 33384 const { data: { session: r }, error: n } = s; 33385 return n ? this._returnResult({ data: null, error: n }
33385) : r ? (await N(this.fetch, "DELETE", `${this.url}/user/oauth/grants`, { 33386 headers: this.headers, 33387 jwt: r.access_token, 33388 query: { client_id: e.clientId }, 33389 noResolveJson: !0 33390 }), { data: {}, error: null }) : this._returnResult({ data: null, error: new he() }); 33391 }); 33392 } catch (s) { 33393 if (B(s)) 33394 return this._returnResult({ data: null, error: s }); 33395 throw s; 33396 } 33397 } 33398 async fetchJwk(e, s = { keys: [] }) { 33399 let r = s.keys.find((d) => d.kid === e); 33400 if (r) 33401 return r; 33402 const n = Date.now(); 33403 if (r = this.jwks.keys.find((d) => d.kid === e), r && this.jwks_cached_at + vh > n) 33404 return r; 33405 const { data: o, error: L } = await N(this.fetch, "GET", `${this.url}/.well-known/jwks.json`, { 33406 headers: this.headers 33407 }); 33408 if (L) 33409 throw L; 33410 return !o.keys || o.keys.length === 0 || (this.jwks = o, this.jwks_cached_at = n, r = o.keys.find((d) => d.kid === e), !r) ? null : r; 33411 } 33412 /** 33413 * Extracts the JWT claims present in the access token by first verifying the 33414 * JWT against the server's JSON Web Key Set endpoint 33415 * `/.well-known/jwks.json` which is often cached, resulting in significantly 33416 * faster responses. Prefer this method over {@link GoTrueClient.getUser} which always 33417 * sends a request to the Auth server for each JWT. 33418 * 33419 * If the project is not using an asymmetric JWT signing key (like ECC or 33420 * RSA) it always sends a request to the Auth server (similar to 33421 * {@link GoTrueClient.getUser}) to verify the JWT. 33422 * 33423 * @param jwt An optional specific JWT you wish to verify, not the one you 33424 * can obtain from {@link GoTrueClient.getSession}. 33425 * @param options Various additional options that allow you to customize the 33426 * behavior of this method. 33427 * 33428 * @category Auth 33429 * 33430 * @remarks 33431 * - Parses the user's [access token](/docs/guides/auth/sessions#access-token-jwt-claims) as a [JSON Web Token (JWT)](/docs/guides/auth/jwts) and returns its components if valid and not expired. 33432 * - If your project is using asymmetric JWT signing keys, then the verification is done locally usually without a network request using the [WebCrypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API). 33433 * - A network request is sent to your project's JWT signing key discovery endpoint `https://project-id.supabase.co/auth/v1/.well-known/jwks.json`, which is cached locally. If your environment is ephemeral, such as a Lambda function that is destroyed after every request, a network request will be sent for each new invocation. Supabase provides a network-edge cache providing fast responses for these situations. 33434 * - If the user's access token is about to expire when calling this function, the user's session will first be refreshed before validating the JWT. 33435 * - If your project is using a symmetric secret to sign the JWT, it always sends a request similar to `getUser()` to validate the JWT at the server before returning the decoded token. This is also used if the WebCrypto API is not available in the environment. Make sure you polyfill it in such situations. 33436 * - The returned claims can be customized per project using the [Custom Access Token Hook](/docs/guides/auth/auth-hooks/custom-access-token-hook). 33437 * 33438 * @example Get JWT claims, header and signature 33439 * ```js 33440 * const { data, error } = await supabase.auth.getClaims() 33441 * ``` 33442 * 33443 * @exampleResponse Get JWT claims, header and signature 33444 * ```json 33445 * { 33446 * "data": { 33447 * "claims": { 33448 * "aal": "aal1", 33449 * "amr": [{ 33450 * "method": "email", 33451 * "timestamp": 1715766000 33452 * }], 33453 * "app_metadata": {}, 33454 * "aud": "authenticated", 33455 * "email": "[email protected]", 33456 * "exp": 1715769600, 33457 * "iat": 1715766000, 33458 * "is_anonymous": false, 33459 * "iss": "https://project-id.supabase.co/auth/v1", 33460 * "phone": "+13334445555", 33461 * "role": "authenticated", 33462 * "session_id": "11111111-1111-1111-1111-111111111111", 33463 * "sub": "11111111-1111-1111-1111-111111111111", 33464 * "user_metadata": {} 33465 * }, 33466 * "header": { 33467 * "alg": "RS256", 33468 * "typ": "JWT", 33469 * "kid": "11111111-1111-1111-1111-111111111111" 33470 * }, 33471 * "signature": [/** Uint8Array *\/], 33472 * }, 33473 * "error": null 33474 * } 33475 * ``` 33476 */ 33477 async getClaims(e, s = {}) { 33478 try { 33479 let r = e; 33480 if (!r) { 33481 const { data: u, error: h }
33481 = await this.getSession(); 33482 if (h || !u.session) 33483 return this._returnResult({ data: null, error: h }); 33484 r = u.session.access_token; 33485 } 33486 const { header: n, payload: o, signature: L, raw: { header: d, payload: l } } = W2(r); 33487 if (!s?.allowExpired) 33488 try { 33489 Uh(o.exp); 33490 } catch (u) { 33491 throw new f3(u instanceof Error ? u.message : "JWT validation failed"); 33492 } 33493 const g = !n.alg || n.alg.startsWith("HS") || !n.kid || !("crypto" in globalThis && "subtle" in globalThis.crypto) ? null : await this.fetchJwk(n.kid, s?.keys ? { keys: s.keys } : s?.jwks); 33494 if (!g) { 33495 const { error: u } = await this.getUser(r); 33496 if (u) 33497 throw u; 33498 return { 33499 data: { 33500 claims: o, 33501 header: n, 33502 signature: L 33503 }, 33504 error: null 33505 }; 33506 } 33507 const f = Gh(n.alg), p = await crypto.subtle.importKey("jwk", g, f, !0, [ 33508 "verify" 33509 ]); 33510 if (!await crypto.subtle.verify(f, p, L, Nh(`${d}.${l}`))) 33511 throw new f3("Invalid JWT signature"); 33512 return { 33513 data: { 33514 claims: o, 33515 header: n, 33516 signature: L 33517 }, 33518 error: null 33519 }; 33520 } catch (r) { 33521 if (B(r)) 33522 return this._returnResult({ data: null, error: r }); 33523 throw r; 33524 } 33525 } 33526 // --- Passkey Methods --- 33527 /** 33528 * Sign in with a passkey. Handles the full WebAuthn ceremony: 33529 * 1. Fetches authentication challenge from server
33530 * 2. Prompts user via navigator.credentials.get() 33531 * 3. Verifies credential with server and creates session 33532 * 33533 * Pass `options.mediation: 'conditional'` to use WebAuthn Conditional UI 33534 * (passkey autofill) instead of the modal picker; the value is forwarded to 33535 * `navigator.credentials.get()` unchanged. 33536 * 33537 * The challenge fetched in step 1 expires after the server's 33538 * GOTRUE_WEBAUTHN_CHALLENGE_EXPIRY_DURATION (5 minutes by default). With 33539 * `mediation: 'conditional'` the autofill prompt can stay pending for longer 33540 * than that: the browser ceremony then still succeeds, but verification fails 33541 * with `error_code: "webauthn_challenge_expired"`. Recover by calling 33542 * `signInWithPasskey()` again. It fetches a fresh challenge and, unless you 33543 * passed your own `options.signal`, cancels the pending ceremony first, so 33544 * the browser never sees two concurrent WebAuthn requests; the earlier call 33545 * resolves with a `WebAuthnError` whose code is `ERROR_CEREMONY_ABORTED`. If 33546 * you pass your own `signal`, abort it before retrying. 33547 * 33548 * @category Auth 33549 * 33550 * @example Sign in with Conditional UI (passkey autofill) 33551 * ```js 33552 * // <input autocomplete="username webauthn" /> somewhere on the page 33553 * const { data, error } = await supabase.auth.signInWithPasskey({ 33554 * options: { 33555 * mediation: 'conditional' 33556 * } 33557 * }); 33558 * ``` 33559 */ 33560 async signInWithPasskey(e) { 33561 var s, r, n, o; 33562 try { 33563 if (!u3()) 33564 return this._returnResult({ 33565 data: null, 33566 error: new $e("Browser does not support WebAuthn", null) 33567 }); 33568 const { data: L, error: d } = await this._startPasskeyAuthentication({ 33569 options: { captchaToken: (s = e?.options) === null || s === void 0 ? void 0 : s.captchaToken } 33570 }); 33571 if (d || !L) 33572 return this._returnResult({ data: null, error: d }); 33573 const l = w6(L.options), g = (n = (r = e?.options) === null || r === void 0 ? void 0 : r.signal) !== null && n !== void 0 ? n : r5.createNewAbortSignal(), { data: f, error: p } = await Fi({ 33574 publicKey: l, 33575 signal: g, 33576 mediation: (o = e?.options) === null || o === void 0 ? void 0 : o.mediation 33577 }); 33578 if (p || !f) 33579 return this._returnResult({ 33580 data: null, 33581 error: p ?? new $e("WebAuthn ceremony failed", null) 33582 }); 33583 const M = S6(f); 33584 return this._verifyPasskeyAuthentication({ 33585 challengeId: L.challenge_id, 33586 credential: M 33587 }); 33588 } catch (L) { 33589 if (B(L)) 33590 return this._returnResult({ data: null, error: L }); 33591 throw L; 33592 } 33593 } 33594 /** 33595 * Register a passkey for the current authenticated user. Handles the full WebAuthn ceremony: 33596 * 1. Fetches registration challenge from server
33597 * 2. Prompts user via navigator.credentials.create() 33598 * 3. Verifies credential with server 33599 * 33600 * Requires an active session. 33601 * 33602 * @category Auth 33603 */ 33604 async registerPasskey(e) { 33605 var s, r; 33606 try { 33607 if (!u3()) 33608 return this._returnResult({ 33609 data: null, 33610 error: new $e("Browser does not support WebAuthn", null) 33611 }); 33612 const { data: n, error: o } = await this._startPasskeyRegistration(); 33613 if (o || !n) 33614 return this._returnResult({ data: null, error: o }); 33615 const L = y6(n.options), d = (r = (s = e?.options) === null || s === void 0 ? void 0 : s.signal) !== null && r !== void 0 ? r : r5.createNewAbortSignal(), { data: l, error: g } = await Ci({ 33616 publicKey: L, 33617 signal: d 33618 }); 33619 if (g || !l) 33620 return this._returnResult({ 33621 data: null, 33622 error: g ?? new $e("WebAuthn ceremony failed", null) 33623 }); 33624 const f = T6(l); 33625 return this._verifyPasskeyRegistration({ 33626 challengeId: n.challenge_id, 33627 credential: f 33628 }); 33629 } catch (n) { 33630 if (B(n)) 33631 return this._returnResult({ data: null, error: n }); 33632 throw n; 33633 } 33634 } 33635 /** 33636 * Start passkey registration for the current authenticated user. 33637 * Returns WebAuthn credential creation options to pass to navigator.credentials.create(). 33638 */ 33639 async _startPasskeyRegistration() { 33640 try { 33641 return await this._useSession(async (e) => { 33642 const { data: { session: s }, error: r } = e; 33643 if (r) 33644 return this._returnResult({ data: null, error: r }); 33645 if (!s) 33646 return this._returnResult({ data: null, error: new he() }); 33647 const { data: n, error: o } = await N(this.fetch, "POST", `${this.url}/passkeys/registration/options`, { 33648 headers: this.headers, 33649 jwt: s.access_token, 33650 body: {} 33651 }); 33652 return o ? this._returnResult({ data: null, error: o }) : this._returnResult({ data: n, error: null }); 33653 }); 33654 } catch (e) { 33655 if (B(e)) 33656 return this._returnResult({ data: null, error: e }); 33657 throw e; 33658 } 33659 } 33660 /** 33661 * Verify passkey registration with the credential response. 33662 * The credentialResponse should be the serialized output of navigator.credentials.create(). 33663 */ 33664 async _verifyPasskeyRegistration(e) { 33665 try { 33666 return await this._useSession(async (s) => { 33667 const { data: { session: r }, error: n } = s; 33668 if (n) 33669 return this._returnResult({ data: null, error: n }); 33670 if (!r) 33671 return this._returnResult({ data: null, error: new he() }); 33672 const { data: o, error: L } = await N(this.fetch, "POST", `${this.url}/passkeys/registration/verify`, { 33673 headers: this.headers, 33674 jwt: r.access_token, 33675 body: { 33676 challenge_id: e.challengeId, 33677 credential: e.credential 33678 } 33679 }); 33680 return L ? this._returnResult({ data: null, error: L }) : this._returnResult({ data: o, error: null }); 33681 }); 33682 } catch (s) { 33683 if (B(s)) 33684 return this._returnResult({ data: null, error: s }); 33685 throw s; 33686 } 33687 } 33688 /** 33689 * Start passkey authentication. 33690 * Returns WebAuthn credential request options to pass to navigator.credentials.get(). 33691 */ 33692 async _startPasskeyAuthentication(e) { 33693 var s; 33694 try { 33695 const { data: r, error: n } = await N(this.fetch, "POST", `${this.url}/passkeys/authentication/options`, { 33696 headers: this.headers, 33697 body: { 33698 gotrue_meta_security: { captcha_token: (s = e?.options) === null || s === void 0 ? void 0 : s.captchaToken } 33699 } 33700 }); 33701 return n ? this._returnResult({ data: null, error: n }) : this._returnResult({ data: r, error: null }); 33702 } catch (r) { 33703 if (B(r)) 33704 return this._returnResult({ data: null, error: r }); 33705 throw r; 33706 } 33707 } 33708 /** 33709 * Verify passkey authentication and create a session. 33710 * The credential should be the serialized output of navigator.credentials.get(). 33711 */ 33712 async _verifyPasskeyAuthentication(e) { 33713 try { 33714 const { data: s, error: r }
33714 = await N(this.fetch, "POST", `${this.url}/passkeys/authentication/verify`, { 33715 headers: this.headers, 33716 body: { 33717 challenge_id: e.challengeId, 33718 credential: e.credential 33719 }, 33720 xform: De 33721 }); 33722 return r ? this._returnResult({ data: null, error: r }) : (s.session && (await this._saveSession(s.session), await this._notifyAllSubscribers("SIGNED_IN", s.session)), this._returnResult({ data: s, error: null })); 33723 } catch (s) { 33724 if (B(s)) 33725 return this._returnResult({ data: null, error: s }); 33726 throw s; 33727 } 33728 } 33729 /** 33730 * List all passkeys for the current user. 33731 */ 33732 async _listPasskeys() { 33733 try { 33734 return await this._useSession(async (e) => { 33735 const { data: { session: s }, error: r } = e; 33736 if (r) 33737 return this._returnResult({ data: null, error: r }); 33738 if (!s) 33739 return this._returnResult({ data: null, error: new he() }); 33740 const { data: n, error: o } = await N(this.fetch, "GET", `${this.url}/passkeys`, { 33741 headers: this.headers, 33742 jwt: s.access_token, 33743 xform: (L) => ({ data: L, error: null }) 33744 }); 33745 return o ? this._returnResult({ data: null, error: o }) : this._returnResult({ data: n, error: null }); 33746 }); 33747 } catch (e) { 33748 if (B(e)) 33749 return this._returnResult({ data: null, error: e }); 33750 throw e; 33751 } 33752 } 33753 /** 33754 * Update a passkey. 33755 */ 33756 async _updatePasskey(e) { 33757 try { 33758 return await this._useSession(async (s) => { 33759 const { data: { session: r }, error: n } = s; 33760 if (n) 33761 return this._returnResult({ data: null, error: n }); 33762 if (!r) 33763 return this._returnResult({ data: null, error: new he() }); 33764 const { data: o, error: L } = await N(this.fetch, "PATCH", `${this.url}/passkeys/${e.passkeyId}`, { 33765 headers: this.headers, 33766 jwt: r.access_token, 33767 body: { friendly_name: e.friendlyName } 33768 }); 33769 return L ? this._returnResult({ data: null, error: L }) : this._returnResult({ data: o, error: null }); 33770 }); 33771 } catch (s) { 33772 if (B(s)) 33773 return this._returnResult({ data: null, error: s }); 33774 throw s; 33775 } 33776 } 33777 /** 33778 * Delete a passkey. 33779 */ 33780 async _deletePasskey(e) { 33781 try { 33782 return await this._useSession(async (s) => { 33783 const { data: { session: r }, error: n } = s; 33784 if (n) 33785 return this._returnResult({ data: null, error: n }); 33786 if (!r) 33787 return this._returnResult({ data: null, error: new he() }); 33788 const { error: o } = await N(this.fetch, "DELETE", `${this.url}/passkeys/${e.passkeyId}`, { 33789 headers: this.headers, 33790 jwt: r.access_token, 33791 noResolveJson: !0 33792 }); 33793 return o ? this._returnResult({ data: null, error: o }) : this._returnResult({ data: null, error: null }); 33794 }); 33795 } catch (s) { 33796 if (B(s)) 33797 return this._returnResult({ data: null, error: s }); 33798 throw s; 33799 } 33800 } 33801} 33802l2.nextInstanceID = {}; 33803const hm = l2, mm = "2.117.2"; 33804let Wt = "", m3; 33805if (typeof Deno < "u") { 33806 var v4; 33807 Wt = "deno", m3 = (v4 = Deno.version) === null || v4 === void 0 ? void 0 : v4.deno; 33808} else if (typeof document < "u") Wt = "web"; 33809else if (typeof navigator < "u" && navigator.product === "ReactNative") Wt = "react-native"; 33810else { 33811 var y4; 33812 Wt = "node"; 33813 const t = globalThis.process; 33814 m3 = t == null || (y4 = t.version) === null || y4 === void 0 ? void 0 : y4.replace(/^v/, ""); 33815} 33816const Ei = [`runtime=${Wt}`]; 33817m3 && Ei.push(`runtime-version=${m3}`); 33818const xm = { "X-Client-Info": `supabase-js/${mm}; ${Ei.join("; ")}` }, _m = { headers: xm }, bm = { schema: "public" }, vm = { 33819 autoRefreshToken: !0, 33820 persistSession: !0, 33821 detectSessionInUrl: !0, 33822 flowType: "implicit" 33823}, ym = {}, wm = { 33824 enabled: !1, 33825 respectSamplingDecision: !0 33826}; 33827function Tm(t) { 33828 if (!t || typeof t != "string") return null; 33829 const e = t.split("-"); 33830 if (e.length !== 4) return null; 33831 const [s, r, n, o] = e; 33832 if (s.length !== 2 || r.length !== 32 || n.length !== 16 || o.length !== 2) return null; 33833 const L = /^[0-9a-f]+$/i; 33834 return !L.test(s) || !L.test(r) || !L.test(n) || !L.test(o) || r === "00000000000000000000000000000000" || n === "0000000000000000" ? null : { 33835 version: s, 33836 traceId: r, 33837 parentId: n, 33838 traceFlags: o, 33839 isSampled: (parseInt(o, 16) & 1) === 1 33840 }; 33841} 33842function Sm(t, e) { 33843 if (!t || !e || e.length === 0) return !1; 33844 let s; 33845 if (t instanceof URL) s = t; 33846 else try { 33847 s = new URL(t); 33848 } catch { 33849 return !1; 33850 } 33851 for (const r of e) try { 33852 if (typeof r == "string") { 33853 if (Bm(s.hostname, r)) return !0; 33854 } else if (r instanceof RegExp) { 33855 if (r.test(s.hostname)) return !0; 33856 } else if (typeof r == "function" && r(s)) 33857 return !0; 33858 } catch { 33859 continue; 33860 } 33861 return !1; 33862} 33863function Bm(t, e) { 33864 if (e === t) return !0; 33865 if (e.startsWith("*.")) { 33866 const s = e.slice(2); 33867 if (t.endsWith(s) && (t === s || t.endsWith("." + s))) 33868 return !0; 33869 } 33870 return !1; 33871} 33872function km(t) { 33873 const e = []; 33874 try { 33875 const s = new URL(t); 33876 e.push(s.hostname); 33877 } catch { 33878 } 33879 return e.push("*.supabase.co", "*.supabase.in"), e.push("localhost", "127.0.0.1", "[::1]"), e; 33880} 33881function d2(t) { 33882 "@babel/helpers - typeof"; 33883 return d2 = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { 33884 return typeof e; 33885 }
33885 : function(e) { 33886 return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; 33887 }, d2(t); 33888} 33889function Am(t, e) { 33890 if (d2(t) != "object" || !t) return t; 33891 var s = t[Symbol.toPrimitive]; 33892 if (s !== void 0) { 33893 var r = s.call(t, e); 33894 if (d2(r) != "object") return r; 33895 throw new TypeError("@@toPrimitive must return a primitive value."); 33896 } 33897 return (e === "string" ? String : Number)(t); 33898} 33899function Nm(t) { 33900 var e = Am(t, "string"); 33901 return d2(e) == "symbol" ? e : e + ""; 33902} 33903function Im(t, e, s) { 33904 return (e = Nm(e)) in t ? Object.defineProperty(t, e, { 33905 value: s, 33906 enumerable: !0, 33907 configurable: !0, 33908 writable: !0 33909 }) : t[e] = s, t; 33910} 33911function k6(t, e) { 33912 var s = Object.keys(t); 33913 if (Object.getOwnPropertySymbols) { 33914 var r = Object.getOwnPropertySymbols(t); 33915 e && (r = r.filter(function(n) { 33916 return Object.getOwnPropertyDescriptor(t, n).enumerable; 33917 })), s.push.apply(s, r); 33918 } 33919 return s; 33920} 33921function re(t) { 33922 for (var e = 1; e < arguments.length; e++) { 33923 var s = arguments[e] != null ? arguments[e] : {}; 33924 e % 2 ? k6(Object(s), !0).forEach(function(r) { 33925 Im(t, r, s[r]); 33926 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(s)) : k6(Object(s)).forEach(function(r) { 33927 Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(s, r)); 33928 }); 33929 } 33930 return t; 33931} 33932const Pm = (t) => t ? (...e) => t(...e) : (...e) => fetch(...e), Cm = () => Headers, Ri = (t) => t.startsWith("sb_publishable_") || t.startsWith("sb_secret_"), Fm = "sb_temp_", A6 = /* @__PURE__ */ new Set(), Em = (t) => { 33933 var e, s; 33934 if (!t.startsWith("sb_") || Ri(t) || t.startsWith(Fm)) return; 33935 const r = (e = (s = t.match(/^sb_[a-zA-Z0-9]+_/)) === null || s === void 0 ? void 0 : s[0]) !== null && e !== void 0 ? e : "unknown"; 33936 A6.has(r) || (A6.add(r), console.warn("@supabase/supabase-js: Unrecognized Supabase API key format. The client will proceed and send this key as-is; if you see authentication errors you may need to upgrade @supabase/supabase-js to a version that recognizes this key type.")); 33937}, N6 = (t, e, s, r, n, o) => { 33938 const L = Pm(r), d = Cm(), l = n?.enabled === !0, g = n?.respectSamplingDecision !== !1, f = l ? km(e) : null, p = !(o?.omitApiKeyAsBearer && Ri(t)); 33939 return async (M, u) => { 33940 const h = await s(); 33941 let x = new d(u?.headers); 33942 if (x.has("apikey") || x.set("apikey", t), !x.has("Authorization")) { 33943 const _ = h ?? (p ? t : null); 33944 _ && x.set("Authorization", `Bearer ${_}`); 33945 } 33946 if (f) { 33947 const _ = Rm(M, f, g); 33948 _ && (_.traceparent && !x.has("traceparent") && x.set("traceparent", _.traceparent), _.tracestate && !x.has("tracestate") && x.set("tracestate", _.tracestate), _.baggage && !x.has("baggage") && x.set("baggage", _.baggage)); 33949 } 33950 return L(M, re(re({}, u), {}, { headers: x })); 33951 }; 33952}; 33953let I6 = !1, P6 = !1; 33954function Rm(t, e, s) { 33955 const r = FM(); 33956 if (!r) 33957 return I6 || (I6 = !0, console.warn("@supabase/supabase-js: tracePropagation is enabled but the tracing runtime is not loaded, so trace headers will not be attached. Add `import '@supabase/supabase-js/tracing'` at your application entry point (requires the OpenTelemetry API package to be installed). The CDN/UMD build does not support trace propagation.")), null; 33958 if (!Sm(typeof t == "string" || t instanceof URL ? t : t.url, e)) return null; 33959 const n = r(); 33960 if (!n || !n.traceparent) { 33961 var o; 33962 if (!(n == null || (o = n.carrierKeys) === null || o === void 0) && o.length && !P6) { 33963 P6 = !0; 33964 const L = n.carrierKeys.includes("sentry-trace") ? " Sentry detected: set `propagateTraceparent: true` in Sentry.init() to emit it." : " Configure your tracing SDK to emit W3C trace context on outgoing requests."; 33965 console.warn(`@supabase/supabase-js: tracePropagation is enabled and a tracing SDK is active, but its propagator wrote [${n.carrierKeys.join(", ")}] and no W3C traceparent header, so trace headers will not be attached.` + L); 33966 } 33967 return null; 33968 } 33969 if (s) { 33970 const L = Tm(n.traceparent); 33971 if (L && !L.isSampled) return { traceparent: n.traceparent }; 33972 } 33973 return n; 33974} 33975function C6(t) { 33976 return typeof t == "boolean" ? { enabled: t } : t; 33977} 33978function Dm(t) { 33979 return t.endsWith("/") ? t : t + "/"; 33980} 33981let F6 = !1; 33982function zm(t) { 33983 F6 || typeof t != "object" || t === null || !("schema" in t) || t.schema === void 0 || (F6 = !0, console.warn(`@
33983supabase/supabase-js: The "schema" option must be nested under "db", e.g. createClient(url, key, { db: { schema: 'myschema' } }). A top-level "schema" is ignored and queries go to the default schema.`)); 33984} 33985function jm(t, e) { 33986 var s, r, n, o, L, d; 33987 const { db: l, auth: g, realtime: f, global: p } = t, { db: M, auth: u, realtime: h, global: x } = e, _ = C6(t.tracePropagation), v = C6(e.tracePropagation), y = { 33988 db: re(re({}, M), l), 33989 auth: re(re({}, u), g), 33990 realtime: re(re({}, h), f), 33991 storage: {}, 33992 global: re(re(re({}, x), p), {}, { headers: re(re({}, (s = x?.headers) !== null && s !== void 0 ? s : {}), (r = p?.headers) !== null && r !== void 0 ? r : {}) }), 33993 tracePropagation: { 33994 enabled: (n = (o = _?.enabled) !== null && o !== void 0 ? o : v?.enabled) !== null && n !== void 0 ? n : !1, 33995 respectSamplingDecision: (L = (d = _?.respectSamplingDecision) !== null && d !== void 0 ? d : v?.respectSamplingDecision) !== null && L !== void 0 ? L : !0 33996 }, 33997 accessToken: async () => "" 33998 }; 33999 return t.accessToken ? y.accessToken = t.accessToken : delete y.accessToken, y; 34000} 34001function Om(t) { 34002 const e = t?.trim(); 34003 if (!e) throw new Error("supabaseUrl is required."); 34004 if (!e.match(/^https?:\/\//i)) throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL."); 34005 try { 34006 return new URL(Dm(e)); 34007 } catch { 34008 throw Error("Invalid supabaseUrl: Provided URL is malformed."); 34009 } 34010} 34011var Vm = class extends hm { 34012 constructor(t) { 34013 super(t); 34014 } 34015}, Hm = class { 34016 /** 34017 * Create a new client for use in the browser. 34018 * 34019 * @category Initializing 34020 * 34021 * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard. 34022 * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard. 34023 * @param options Optional configuration for the client: 34024 * - `db.schema` â You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase. 34025 * - `auth.autoRefreshToken` â Set to `true` if you want to automatically refresh the token before expiring. 34026 * - `auth.persistSession` â Set to `true` if you want to automatically save the user session into local storage. 34027 * - `auth.detectSessionInUrl` â Set to `true` if you want to automatically detect OAuth grants in the URL and sign in the user. 34028 * - `realtime` â Options passed along to the realtime-js constructor. 34029 * - `storage` â Options passed along to the storage-js constructor. 34030 * - `global.fetch` â A custom fetch implementation. 34031 * - `global.headers` â Any additional headers to send with each network request. 34032 * 34033 * @example Creating a client 34034 * ```js 34035 * import { createClient } from '@supabase/supabase-js' 34036 * 34037 * // Create a single supabase client for interacting with your database 34038 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 34039 * ``` 34040 * 34041 * @example With a custom domain 34042 * ```js 34043 * import { createClient } from '@supabase/supabase-js' 34044 * 34045 * // Use a custom domain as the supabase URL 34046 * const supabase = createClient('https://my-custom-domain.com', 'your-publishable-key') 34047 * ``` 34048 * 34049 * @example With additional parameters 34050 * ```js 34051 * import { createClient } from '@supabase/supabase-js' 34052 * 34053 * const options = { 34054 * db: { 34055 * schema: 'public', 34056 * }, 34057 * auth: { 34058 * autoRefreshToken: true, 34059 * persistSession: true, 34060 * detectSessionInUrl: true 34061 * }, 34062 * global: { 34063 * headers: { 'x-my-custom-header': 'my-app-name' }, 34064 * }, 34065 * } 34066 * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", options) 34067 * ``` 34068 * 34069 * @exampleDescription With custom schemas 34070 * By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard. 34071 * Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API. 34072 * 34073 * Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema. 34074 * 34075 * @example With custom schemas 34076 * ```js 34077 * import { createClient } from '@supabase/supabase-js' 34078 * 34079 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', { 34080 * // Provide a custom schema. Defaults to "public". 34081 * db: { schema: 'other_schema' } 34082 * }) 34083 * ``` 34084 * 34085 * @exampleDescription Custom fetch implementation 34086 * `supabase-js` uses the runtime's global `fetch` to make HTTP requests, 34087 * but an alternative `fetch` implementation can be provided as an option. 34088 * This is useful in environments where the global `fetch` is unavailable or where you want to customize request behavior. 34089 * 34090 * @example Custom fetch implementation 34091 * ```js 34092 * import { createClient } from '@supabase/supabase-js' 34093 * 34094 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', { 34095 * global: { fetch: fetch.bind(globalThis) } 34096 * }) 34097 * ``` 34098 * 34099 * @exampleDescription React Native options with AsyncStorage 34100 * For React Native we recommend using `AsyncStorage` as the storage implementation for Supabase Auth. 34101 * 34102 * @example React Native options with AsyncStorage 34103 * ```js 34104 * import 'react-native-url-polyfill/auto' 34105 * import { createClient } from '@supabase/supabase-js' 34106 * import AsyncStorage from "@react-native-async-storage/async-storage"; 34107 * 34108 * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", { 34109 * auth: { 34110 * storage: AsyncStorage, 34111 * autoRefreshToken: true, 34112 * persistSession: true, 34113 * detectSessionInUrl: false, 34114 * }, 34115 * }); 34116 * ``` 34117 * 34118 * @exampleDescription React Native options with Expo SecureStore 34119 * If you wish to encrypt the user's session information, you can use `aes-js` and store the encryption key in Expo SecureStore. 34120 * The `aes-js` library, a reputable JavaScript-only implementation of the AES encryption algorithm in CTR mode. 34121 * A new 256-bit encryption key is generated using the `react-native-get-random-values` library. 34122 * This key is stored inside Expo's SecureStore, while the value is encrypted and placed inside AsyncStorage. 34123 * 34124 * Please make sure that: 34125 * - You keep the `expo-secure-store`, `aes-js` and `react-native-get-random-values` libraries up-to-date. 34126 * - Choose the correct [`SecureStoreOptions`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestoreoptions) for your app's needs. 34127 * E.g. [`SecureStore.WHEN_UNLOCKED`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestorewhen_unlocked) regulates when the data can be accessed. 34128 * - Carefully consider optimizations or other modifications to the above example, as those can lead to introducing subtle security vulnerabilities. 34129 * 34130 * @example React Native options with Expo SecureStore 34131 * ```ts 34132 * import 'react-native-url-polyfill/auto' 34133 * import { createClient } from '@supabase/supabase-js' 34134 * import AsyncStorage from '@react-native-async-storage/async-storage'; 34135 * import * as SecureStore from 'expo-secure-store';
34136 * import * as aesjs from 'aes-js'; 34137 * import 'react-native-get-random-values'; 34138 * 34139 * // As Expo's SecureStore does not support values larger than 2048 34140 * // bytes, an AES-256 key is generated and stored in SecureStore, while 34141 * // it is used to encrypt/decrypt values stored in AsyncStorage. 34142 * class LargeSecureStore { 34143 * private async _encrypt(key: string, value: string) { 34144 * const encryptionKey = crypto.getRandomValues(new Uint8Array(256 / 8)); 34145 * 34146 * const cipher = new aesjs.ModeOfOperation.ctr(encryptionKey, new aesjs.Counter(1)); 34147 * const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value)); 34148 * 34149 * await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey)); 34150 * 34151 * return aesjs.utils.hex.fromBytes(encryptedBytes); 34152 * } 34153 * 34154 * private async _decrypt(key: string, value: string) { 34155 * const encryptionKeyHex = await SecureStore.getItemAsync(key); 34156 * if (!encryptionKeyHex) { 34157 * return encryptionKeyHex; 34158 * } 34159 * 34160 * const cipher = new aesjs.ModeOfOperation.ctr(aesjs.utils.hex.toBytes(encryptionKeyHex), new aesjs.Counter(1)); 34161 * const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value)); 34162 * 34163 * return aesjs.utils.utf8.fromBytes(decryptedBytes); 34164 * } 34165 * 34166 * async getItem(key: string) { 34167 * const encrypted = await AsyncStorage.getItem(key); 34168 * if (!encrypted) { return encrypted; } 34169 * 34170 * return await this._decrypt(key, encrypted); 34171 * } 34172 * 34173 * async removeItem(key: string) { 34174 * await AsyncStorage.removeItem(key); 34175 * await SecureStore.deleteItemAsync(key); 34176 * } 34177 * 34178 * async setItem(key: string, value: string) { 34179 * const encrypted = await this._encrypt(key, value); 34180 * 34181 * await AsyncStorage.setItem(key, encrypted); 34182 * } 34183 * } 34184 * 34185 * const supabase = createClient("https://xyzcompany.supabase.co", "your-publishable-key", { 34186 * auth: { 34187 * storage: new LargeSecureStore(), 34188 * autoRefreshToken: true, 34189 * persistSession: true, 34190 * detectSessionInUrl: false, 34191 * }, 34192 * }); 34193 * ``` 34194 * 34195 * @example With a database query 34196 * ```ts 34197 * import { createClient } from '@supabase/supabase-js' 34198 * 34199 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key') 34200 * 34201 * const { data } = await supabase.from('profiles').select('*') 34202 * ``` 34203 * 34204 * @exampleDescription With OpenTelemetry tracing 34205 * Opt in to W3C trace context propagation so the `trace_id` from your 34206 * client-side spans is attached to Supabase requests and appears in API 34207 * Gateway and Edge Function logs. Requires `@opentelemetry/api` to be 34208 * installed in your application and the tracing runtime to be loaded via 34209 * `import '@supabase/supabase-js/tracing'`. See [Tracing with the JS SDK](https://supabase.com/docs/guides/telemetry/client-side-tracing). 34210 * 34211 * @example With OpenTelemetry tracing 34212 * ```ts 34213 * import '@supabase/supabase-js/tracing' 34214 * import { createClient } from '@supabase/supabase-js' 34215 * import { trace } from '@opentelemetry/api' 34216 * 34217 * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', { 34218 * tracePropagation: true, 34219 * }) 34220 * 34221 * const tracer = trace.getTracer('my-app') 34222 * 34223 * await tracer.startActiveSpan('fetch-users', async (span) => { 34224 * // Outgoing request carries the active trace context. 34225 * const { data, error } = await supabase.from('users').select('*') 34226 * span.end() 34227 * }) 34228 * ``` 34229 */ 34230 constructor(t, e, s) { 34231 var r, n; 34232 this.supabaseUrl = t, this.supabaseKey = e; 34233 const o = Om(t); 34234 if (!e) throw new Error("supabaseKey is required."); 34235 Em(e), zm(s), this.realtimeUrl = new URL("realtime/v1", o), this.realtimeUrl.protocol = this.realtimeUrl.protocol.replace("http", "ws"), this.authUrl = new URL("auth/v1", o), this.storageUrl = new URL("storage/v1", o), this.functionsUrl = new URL("functions/v1", o); 34236 const L = `sb-${o.hostname.split(".")[0]}-auth-token`, d = { 34237 db: bm, 34238 realtime: ym, 34239 auth: re(re({}, vm), {}, { storageKey: L }), 34240 global: _m, 34241 tracePropagation: wm 34242 }, l = jm(s ?? {}, d); 34243 if (this.settings = l, this.storageKey = (r = l.auth.storageKey) !== null && r !== void 0 ? r : "", this.headers = (n = l.global.headers) !== null && n !== void 0 ? n : {}, l.accessToken) 34244 this.accessToken = l.accessToken, this.auth = new Proxy({}, { get: (f, p) => { 34245 throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(p)} is not possible`); 34246 } }); 34247 else { 34248 var g; 34249 this.auth = this._initSupabaseAuthClient((g = l.auth) !== null && g !== void 0 ? g : {}, this.headers, l.global.fetch); 34250 } 34251 this.fetch = N6(e, t, this._getSessionToken.bind(this), l.global.fetch, l.tracePropagation), this.functionsFetch =
34251N6(e, t, this._getSessionToken.bind(this), l.global.fetch, l.tracePropagation, { omitApiKeyAsBearer: !0 }), this.realtime = this._initRealtimeClient(re({ 34252 headers: this.headers, 34253 accessToken: this._getAccessToken.bind(this), 34254 fetch: this.fetch 34255 }, l.realtime)), this.accessToken && Promise.resolve(this.accessToken()).then((f) => this.realtime.setAuth(f)).catch((f) => console.warn("Failed to set initial Realtime auth token:", f)), this.rest = new GM(new URL("rest/v1", o).href, { 34256 headers: this.headers, 34257 schema: l.db.schema, 34258 fetch: this.fetch, 34259 timeout: l.db.timeout, 34260 urlLengthLimit: l.db.urlLengthLimit, 34261 retry: l.db.retry 34262 }), this.storage = new Mh(this.storageUrl.href, this.headers, this.fetch, s?.storage), l.accessToken || this._listenForAuthEvents(); 34263 } 34264 /** 34265 * Supabase Functions allows you to deploy and invoke edge functions. 34266 */ 34267 get functions() { 34268 return new zM(this.functionsUrl.href, { 34269 headers: this.headers, 34270 customFetch: this.functionsFetch 34271 }); 34272 } 34273 /** 34274 * Perform a query on a table or a view. 34275 * 34276 * @param relation - The table or view name to query 34277 */ 34278 from(t) { 34279 return this.rest.from(t); 34280 } 34281 /** 34282 * Select a schema to query or perform an function (rpc) call. 34283 * 34284 * The schema needs to be on the list of exposed schemas inside Supabase. 34285 * 34286 * @param schema - The schema to query 34287 */ 34288 schema(t) { 34289 return this.rest.schema(t); 34290 } 34291 /** 34292 * Fetch the OpenAPI description PostgREST publishes for this client's schema. 34293 * 34294 * The document lists only the tables, views and functions the caller's role 34295 * holds privileges on. The request carries the same `apikey` and 34296 * `Authorization` headers as every other query, so the description is scoped 34297 * to the signed-in user. Call `.schema()` first to describe a schema other 34298 * than the client default. 34299 * 34300 * @example 34301 * ```ts 34302 * const { data, error } = await supabase.getOpenApiSpec() 34303 * ``` 34304 */ 34305 getOpenApiSpec() { 34306 return this.rest.getOpenApiSpec(); 34307 } 34308 /** 34309 * Perform a function call. 34310 * 34311 * @param fn - The function name to call 34312 * @param args - The arguments to pass to the function call 34313 * @param options - Named parameters 34314 * @param options.head - When set to `true`, `data` will not be returned. 34315 * Useful if you only need the count. 34316 * @param options.get - When set to `true`, the function will be called with 34317 * read-only access mode. 34318 * @param options.count - Count algorithm to use to count rows returned by the 34319 * function. Only applicable for [set-returning 34320 * functions](https://www.postgresql.org/docs/current/functions-srf.html). 34321 * 34322 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the 34323 * hood. 34324 * 34325 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres 34326 * statistics under the hood. 34327 * 34328 * `"estimated"`: Uses exact count for low numbers and planned count for high 34329 * numbers. 34330 */ 34331 rpc(t, e = {}, s = { 34332 head: !1, 34333 get: !1, 34334 count: void 0 34335 }) { 34336 return this.rest.rpc(t, e, s); 34337 } 34338 /** 34339 * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes. 34340 * 34341 * @param {string} name - The name of the Realtime channel. 34342 * @param {Object} opts - The options to pass to the Realtime channel. 34343 * 34344 * @category Realtime 34345 */ 34346 channel(t, e = { config: {} }) { 34347 return this.realtime.channel(t, e); 34348 } 34349 /** 34350 * Returns all Realtime channels. 34351 * 34352 * @category Realtime 34353 * 34354 * @example Get all channels 34355 * ```js 34356 * const channels = supabase.getChannels() 34357 * ``` 34358 */ 34359 getChannels() { 34360 return this.realtime.getChannels(); 34361 } 34362 /** 34363 * Unsubscribes and removes Realtime channel from Realtime client. 34364 * 34365 * @param {RealtimeChannel} channel - The name of the Realtime channel. 34366 * 34367 * 34368 * @category Realtime 34369 * 34370 * @remarks 34371 * - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. 34372 * 34373 * @example Removes a channel 34374 * ```js 34375 * supabase.removeChannel(myChannel) 34376 * ``` 34377 */ 34378 removeChannel(t) { 34379 return this.realtime.removeChannel(t); 34380 } 34381 /** 34382 * Unsubscribes and removes all Realtime channels from Realtime client. 34383 * 34384 * @category Realtime 34385 * 34386 * @remarks 34387 * - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. 34388 * 34389 * @example Remove all channels 34390 * ```js 34391 * supabase.removeAllChannels() 34392 * ``` 34393 */ 34394 removeAllChannels() { 34395 return this.realtime.removeAllChannels(); 34396 } 34397 /** 34398 * The raw session token â the custom `accessToken` result or the signed-in user's JWT â
34399 * or `null` when there is no session. Unlike {@link _getAccessToken} it does not fall back 34400 * to `supabaseKey`, so callers can distinguish "no session" from "has session". 34401 */ 34402 async _getSessionToken() { 34403 var t = this, e, s; 34404 if (t.accessToken) return await t.accessToken(); 34405 const { data: r } = await t.auth.getSession(); 34406 return (e = (s = r.session) === null || s === void 0 ? void 0 : s.access_token) !== null && e !== void 0 ? e : null; 34407 } 34408 async _getAccessToken() { 34409 var t = this, e; 34410 return (e = await t._getSessionToken()) !== null && e !== void 0 ? e : t.supabaseKey; 34411 } 34412 _initSupabaseAuthClient({ autoRefreshToken: t, persistSession: e, detectSessionInUrl: s, storage: r, userStorage: n, storageKey: o, flowType: L, lock: d, debug: l, throwOnError: g, experimental: f, lockAcquireTimeout: p, skipAutoInitialize: M }, u, h) { 34413 const x = { 34414 Authorization: `Bearer ${this.supabaseKey}`, 34415 apikey: `${this.supabaseKey}` 34416 }; 34417 return new Vm({ 34418 url: this.authUrl.href, 34419 headers: re(re({}, x), u), 34420 storageKey: o, 34421 autoRefreshToken: t, 34422 persistSession: e, 34423 detectSessionInUrl: s, 34424 storage: r, 34425 userStorage: n, 34426 flowType: L, 34427 lock: d, 34428 debug: l, 34429 throwOnError: g, 34430 experimental: f, 34431 fetch: h, 34432 lockAcquireTimeout: p, 34433 skipAutoInitialize: M, 34434 hasCustomAuthorizationHeader: Object.keys(this.headers).some((_) => _.toLowerCase() === "authorization") 34435 }); 34436 } 34437 _initRealtimeClient(t) { 34438 return new ju(this.realtimeUrl.href, re(re({}, t), {}, { params: re(re({}, { apikey: this.supabaseKey }), t?.params) })); 34439 } 34440 _listenForAuthEvents() { 34441 return this.auth.onAuthStateChange((t, e) => { 34442 this._handleTokenChanged(t, "CLIENT", e?.access_token); 34443 }); 34444 } 34445 _handleTokenChanged(t, e, s) { 34446 (t === "TOKEN_REFRESHED" || t === "SIGNED_IN" || t === "INITIAL_SESSION") && this.changedAccessToken !== s ? (this.changedAccessToken = s, this.realtime.setAuth(s)) : t === "SIGNED_OUT" && (this.realtime.setAuth(), e == "STORAGE" && this.auth.signOut(), this.changedAccessToken = void 0); 34447 } 34448}; 34449const Zm = (t, e, s) => new Hm(t, e, s); 34450function Wm() { 34451 if (typeof window < "u" || globalThis.Deno !== void 0) return !1; 34452 const t = globalThis.process; 34453 if (!t) return !1; 34454 const e = t.version; 34455 if (e == null) return !1; 34456 const s = e.match(/^v(\d+)\./); 34457 return s ? parseInt(s[1], 10) <= 20 : !1; 34458} 34459Wm() && console.warn("â ï¸ Node.js 20 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 22 or later. For more information, visit: https://github.com/orgs/supabase/discussions/45715"); 34460const $m = "https://ipwhxhtupjjhyqoccody.supabase.co", qm = "sb_publishable_VsSjL2Tn8xW3dax-6UYH_Q_1ROL4ohI"; 34461let $2 = null; 34462function Um() { 34463 return $2 || ($2 = Zm($m, qm), $2); 34464} 34465const E6 = { 34466 first_name: "", 34467 last_name: "", 34468 email: "", 34469 phone: "", 34470 organization: "", 34471 message: "" 34472}; 34473function Gm() { 34474 const [t, e] = j(E6), [s, r] = j("idle"), [n, o] = j(""), L = (f) => { 34475 e((p) => ({ ...p, [f.target.name]: f.target.value })); 34476 }, d = async (f) => { 34477 f.preventDefault(), r("submitting"), o(""); 34478 try { 34479 const p = Um(), { error: M } = await p.from("contact_submissions").insert([{ ...t, submitted_at: (/* @__PURE__ */ new Date()).toISOString() }]); 34480 if (M) throw M; 34481 r("success"), e(E6); 34482 } catch (p) { 34483 console.error("Contact form error:", p); 34484 const M = p instanceof Error ? p.message : typeof p == "object" && p !== null && "message" in p ? String(p.message) : "Something went wrong. Please try again or email us directly."; 34485 o(M), r("error"); 34486 } 34487 }, l = "w-full px-4 py-3 rounded-xl border border-slate-200 bg-slate-50 text-[#0a1628] placeholder:text-slate-400 focus:outline-none focus:border-[#EFBB0F] focus:ring-2 focus:ring-[#EFBB0F]/20 transition-all text-sm", g = "block text-[#0a1628] text-sm mb-1.5"; 34488 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "c8cu0", _fgB: 1790697589440, _fgD: !0, className: "min-h-screen bg-white", "data-fg-c8cu0": ":0:/src/app/pages/ContactPage.tsx:73:5:2313:12528:e:main:xtetxtete:1", children: [
34489 /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "c8cu2", _fgB: 1790697589440, className: "relative pt-32 pb-16 bg-gradient-to-br from-[#0a1628] via-[#0f2035] to-[#0a1628] overflow-hidden", "data-fg-c8cu2": ":0:/src/app/pages/ContactPage.tsx:75:7:2387:1510:e:section:ete", children: [ 34490 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu3", _fgB: 1790697589440, className: "absolute inset-0 opacity-10", "data-fg-c8cu3": ":0:/src/app/pages/ContactPage.tsx:76:9:2514:270:e:div:ete", children: [ 34491 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu4", _fgB: 1790697589440, className: "absolute top-20 left-10 w-72 h-72 bg-[#EFBB0F] rounded-full blur-[120px]", "data-fg-c8cu4": ":0:/src/app/pages/ContactPage.tsx:77:11:2570:92:e:div" }), 34492 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu5", _fgB: 1790697589440, className: "absolute bottom-10 right-20 w-96 h-96 bg-[#EFBB0F] rounded-full blur-[150px]", "data-fg-c8cu5": ":0:/src/app/pages/ContactPage.tsx:78:11:2673:96:e:div" }) 34493 ] }), 34494 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu6", _fgB: 1790697589440, className: "max-w-7xl mx-auto px-6 relative z-10 text-center", "data-fg-c8cu6": ":0:/src/app/pages/ContactPage.tsx:80:9:2793:1087:e:div:etete", children: [
34495 /* @__PURE__ */ i( 34496 a, 34497 { 34498 _fgT: m.p, 34499 _fgS: "c8cu7", 34500 _fgB: 1790697589440, 34501 initial: { opacity: 0, y: 20 }, 34502 animate: { opacity: 1, y: 0 }, 34503 transition: { duration: 0.5 }, 34504 className: "text-[#EFBB0F] text-sm uppercase tracking-widest mb-4", 34505 style: { fontWeight: 600 }, 34506 "data-fg-c8cu7": ":0:/src/app/pages/ContactPage.tsx:81:11:2870:316:e:motion.p:t", 34507 children: "Get In Touch" 34508 } 34509 ), 34510 /* @__PURE__ */ i( 34511 a, 34512 { 34513 _fgT: m.h1, 34514 _fgS: "c8cu9", 34515 _fgB: 1790697589440, 34516 initial: { opacity: 0, y: 20 }, 34517 animate: { opacity: 1, y: 0 }, 34518 transition: { duration: 0.5, delay: 0.1 }, 34519 className: "text-white mb-4", 34520 "data-fg-c8cu9": ":0:/src/app/pages/ContactPage.tsx:90:11:3197:250:e:motion.h1:t", 34521 children: "Contact Us" 34522 } 34523 ), 34524 /* @__PURE__ */ c( 34525 a, 34526 { 34527 _fgT: m.p, 34528 _fgS: "c8cu11", 34529 _fgB: 1790697589440, 34530 initial: { opacity: 0, y: 20 }, 34531 animate: { opacity: 1, y: 0 }, 34532 transition: { duration: 0.5, delay: 0.2 }, 34533 className: "text-white/60 max-w-2xl mx-auto", 34534 "data-fg-c8cu11": ":0:/src/app/pages/ContactPage.tsx:98:11:3458:407:e:motion.p:tst", 34535 children: [ 34536 "Have questions about our transit technology solutions? We'd love to hear from you.", 34537 " ", 34538 "Reach out and our team will get back to you promptly." 34539 ] 34540 } 34541 ) 34542 ] }) 34543 ] }), 34544 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "c8cu16", _fgB: 1790697589440, className: "py-20", "data-fg-c8cu16": ":0:/src/app/pages/ContactPage.tsx:111:7:3935:10876:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu17", _fgB: 1790697589440, className: "max-w-7xl mx-auto px-6", "data-fg-c8cu17": ":0:/src/app/pages/ContactPage.tsx:112:9:3971:10823:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu18", _fgB: 1790697589440, className: "grid lg:grid-cols-5 gap-16", "data-fg-c8cu18": ":0:/src/app/pages/ContactPage.tsx:113:11:4022:10757:e:div:xtetxte", children: [
34545 /* @__PURE__ */ c( 34546 a, 34547 { 34548 _fgT: m.div, 34549 _fgS: "c8cu20", 34550 _fgB: 1790697589440, 34551 initial: { opacity: 0, x: -30 }, 34552 animate: { opacity: 1, x: 0 }, 34553 transition: { duration: 0.6, delay: 0.2 }, 34554 className: "lg:col-span-2 flex flex-col gap-8", 34555 "data-fg-c8cu20": ":0:/src/app/pages/ContactPage.tsx:115:13:4120:3024:e:motion.div:etxtetxtetxte", 34556 children: [ 34557 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu21", _fgB: 1790697589440, "data-fg-c8cu21": ":0:/src/app/pages/ContactPage.tsx:121:15:4369:315:e:div:ete", children: [ 34558 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "c8cu22", _fgB: 1790697589440, className: "text-[#0a1628] mb-2", "data-fg-c8cu22": ":0:/src/app/pages/ContactPage.tsx:122:17:4391:51:e:h2:t", children: "Let's Talk" }), 34559 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu24", _fgB: 1790697589440, className: "text-slate-500", "data-fg-c8cu24": ":0:/src/app/pages/ContactPage.tsx:123:17:4459:204:e:p:t", children: "Whether you're looking to modernize your transit operations or explore our AI-powered solutions, we're here to help." }) 34560 ] }),
34561 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu27", _fgB: 1790697589440, className: "flex items-start gap-4 p-6 bg-slate-50 rounded-2xl border border-slate-100", "data-fg-c8cu27": ":0:/src/app/pages/ContactPage.tsx:130:15:4728:807:e:div:ete", children: [ 34562 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu28", _fgB: 1790697589440, className: "w-12 h-12 rounded-xl bg-[#EFBB0F]/10 flex items-center justify-center flex-shrink-0", "data-fg-c8cu28": ":0:/src/app/pages/ContactPage.tsx:131:17:4837:189:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "c8cu29", _fgB: 1790697589440, className: "text-[#EFBB0F]", size: 22, "data-fg-c8cu29": ":0:node_modules/lucide-react:132:19:4957:46:e:Phone::::::DmpI" }) }), 34563 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu30", _fgB: 1790697589440, "data-fg-c8cu30": ":0:/src/app/pages/ContactPage.tsx:134:17:5043:471:e:div:etete", children: [ 34564 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu31", _fgB: 1790697589440, className: "text-[#0a1628] mb-1", style: { fontWeight: 600 }, "data-fg-c8cu31": ":0:/src/app/pages/ContactPage.tsx:135:19:5067:74:e:p:t", children: "Call Us" }),
34565 /* @__PURE__ */ i( 34566 a, 34567 { 34568 _fgT: "a", 34569 _fgS: "c8cu33", 34570 _fgB: 1790697589440, 34571 href: "tel:+13012082222", 34572 className: "text-[#EFBB0F] hover:underline text-lg", 34573 style: { fontWeight: 700 }, 34574 "data-fg-c8cu33": ":0:/src/app/pages/ContactPage.tsx:136:19:5160:241:e:a:t", 34575 children: "301-208-2222" 34576 } 34577 ), 34578 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu35", _fgB: 1790697589440, className: "text-slate-400 text-sm mt-1", "data-fg-c8cu35": ":0:/src/app/pages/ContactPage.tsx:143:19:5420:71:e:p:t", children: "Mon â Fri, 8am â 6pm EST" }) 34579 ] }) 34580 ] }), 34581 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu38", _fgB: 1790697589440, className: "flex items-start gap-4 p-6 bg-slate-50 rounded-2xl border border-slate-100", "data-fg-c8cu38": ":0:/src/app/pages/ContactPage.tsx:148:15:5579:817:e:div:ete", children: [
34582 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu39", _fgB: 1790697589440, className: "w-12 h-12 rounded-xl bg-[#EFBB0F]/10 flex items-center justify-center flex-shrink-0", "data-fg-c8cu39": ":0:/src/app/pages/ContactPage.tsx:149:17:5688:188:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "c8cu40", _fgB: 1790697589440, className: "text-[#EFBB0F]", size: 22, "data-fg-c8cu40": ":0:node_modules/lucide-react:150:19:5808:45:e:Mail::::::D4VR" }) }), 34583 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu41", _fgB: 1790697589440, "data-fg-c8cu41": ":0:/src/app/pages/ContactPage.tsx:152:17:5893:482:e:div:etete", children: [ 34584 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu42", _fgB: 1790697589440, className: "text-[#0a1628] mb-1", style: { fontWeight: 600 }, "data-fg-c8cu42": ":0:/src/app/pages/ContactPage.tsx:153:19:5917:75:e:p:t", children: "Email Us" }), 34585 /* @__PURE__ */ i( 34586 a, 34587 { 34588 _fgT: "a", 34589 _fgS: "c8cu44", 34590 _fgB: 1790697589440, 34591 href: "mailto:[email protected]", 34592 className: "text-[#EFBB0F] hover:underline", 34593 style: { fontWeight: 600 }, 34594 "data-fg-c8cu44": ":0:/src/app/pages/ContactPage.tsx:154:19:6011:246:e:a:t", 34595 children: "[email protected]" 34596 } 34597 ),
34598 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu46", _fgB: 1790697589440, className: "text-slate-400 text-sm mt-1", "data-fg-c8cu46": ":0:/src/app/pages/ContactPage.tsx:161:19:6276:76:e:p:t", children: "We'll respond within 24 hours" }) 34599 ] }) 34600 ] }), 34601 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu49", _fgB: 1790697589440, className: "flex items-start gap-4 p-6 bg-slate-50 rounded-2xl border border-slate-100", "data-fg-c8cu49": ":0:/src/app/pages/ContactPage.tsx:166:15:6442:676:e:div:ete", children: [ 34602 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu50", _fgB: 1790697589440, className: "w-12 h-12 rounded-xl bg-[#EFBB0F]/10 flex items-center justify-center flex-shrink-0", "data-fg-c8cu50": ":0:/src/app/pages/ContactPage.tsx:167:17:6551:190:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Pt, _fgS: "c8cu51", _fgB: 1790697589440, className: "text-[#EFBB0F]", size: 22, "data-fg-c8cu51": ":0:node_modules/lucide-react:168:19:6671:47:e:MapPin::::::BveZ" }) }),
34603 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu52", _fgB: 1790697589440, "data-fg-c8cu52": ":0:/src/app/pages/ContactPage.tsx:170:17:6758:339:e:div:ete", children: [ 34604 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu53", _fgB: 1790697589440, className: "text-[#0a1628] mb-1", style: { fontWeight: 600 }, "data-fg-c8cu53": ":0:/src/app/pages/ContactPage.tsx:171:19:6782:75:e:p:t", children: "Visit Us" }), 34605 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "c8cu55", _fgB: 1790697589440, className: "text-slate-500", "data-fg-c8cu55": ":0:/src/app/pages/ContactPage.tsx:172:19:6876:198:e:p:tetet", children: [ 34606 "IT Curves Headquarters", 34607 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c8cu57", _fgB: 1790697589440, "data-fg-c8cu57": ":0:/src/app/pages/ContactPage.tsx:173:43:6949:6:e:br" }), 34608 "8201 Snouffer School Road,", 34609 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "c8cu59", _fgB: 1790697589440, "data-fg-c8cu59": ":0:/src/app/pages/ContactPage.tsx:174:47:7002:6:e:br" }), 34610 "Gaithersburg, MD 20879" 34611 ] }) 34612 ] }) 34613 ] }) 34614 ] 34615 } 34616 ),
34617 /* @__PURE__ */ i( 34618 a, 34619 { 34620 _fgT: m.div, 34621 _fgS: "c8cu62", 34622 _fgB: 1790697589440, 34623 initial: { opacity: 0, x: 30 }, 34624 animate: { opacity: 1, x: 0 }, 34625 transition: { duration: 0.6, delay: 0.3 }, 34626 className: "lg:col-span-3", 34627 "data-fg-c8cu62": ":0:/src/app/pages/ContactPage.tsx:182:13:7191:7571:e:motion.div:e", 34628 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu63", _fgB: 1790697589440, className: "bg-white rounded-3xl border border-slate-200 p-8 md:p-10 shadow-sm", "data-fg-c8cu63": ":0:/src/app/pages/ContactPage.tsx:188:15:7419:7317:e:div:etetxtx", children: [ 34629 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "c8cu64", _fgB: 1790697589440, className: "text-[#0a1628] mb-1", "data-fg-c8cu64": ":0:/src/app/pages/ContactPage.tsx:189:17:7520:58:e:h3:t", children: "Send Us a Message" }), 34630 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu66", _fgB: 1790697589440, className: "text-slate-400 mb-8 text-sm", "data-fg-c8cu66": ":0:/src/app/pages/ContactPage.tsx:190:17:7595:153:e:p:t", children: "Fill out the form below and we'll get back to you as soon as possible." }),
34631 s === "success" ? /* @__PURE__ */ c( 34632 a, 34633 { 34634 _fgT: m.div, 34635 _fgS: "c8cu70", 34636 _fgB: 1790697589440, 34637 initial: { opacity: 0, scale: 0.95 }, 34638 animate: { opacity: 1, scale: 1 }, 34639 className: "flex flex-col items-center justify-center py-16 gap-4 text-center", 34640 "data-fg-c8cu70": ":0:/src/app/pages/ContactPage.tsx:196:19:7851:1153:e:motion.div:etete", 34641 children: [ 34642 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu71", _fgB: 1790697589440, className: "w-16 h-16 rounded-full bg-green-50 flex items-center justify-center", "data-fg-c8cu71": ":0:/src/app/pages/ContactPage.tsx:201:21:8114:187:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: b2, _fgS: "c8cu72", _fgB: 1790697589440, className: "text-green-500", size: 32, "data-fg-c8cu72": ":0:node_modules/lucide-react:202:23:8222:52:e:CheckCircle::::::C4Wc" }) }), 34643 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu73", _fgB: 1790697589440, "data-fg-c8cu73": ":0:/src/app/pages/ContactPage.tsx:204:21:8322:340:e:div:ete", children: [
34644 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu74", _fgB: 1790697589440, className: "text-[#0a1628] mb-1", style: { fontWeight: 600 }, "data-fg-c8cu74": ":0:/src/app/pages/ContactPage.tsx:205:23:8350:80:e:p:t", children: "Message Sent!" }), 34645 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu76", _fgB: 1790697589440, className: "text-slate-500 text-sm max-w-xs", "data-fg-c8cu76": ":0:/src/app/pages/ContactPage.tsx:206:23:8453:182:e:p:t", children: "Thank you for reaching out. A member of our team will be in touch with you shortly." }) 34646 ] }), 34647 /* @__PURE__ */ i( 34648 a, 34649 { 34650 _fgT: "button", 34651 _fgS: "c8cu78", 34652 _fgB: 1790697589440, 34653 onClick: () => r("idle"), 34654 className: "mt-2 text-[#EFBB0F] text-sm hover:underline", 34655 style: { fontWeight: 600 }, 34656 "data-fg-c8cu78": ":0:/src/app/pages/ContactPage.tsx:210:21:8683:289:e:button:t", 34657 children: "Send another message" 34658 } 34659 ) 34660 ] 34661 } 34662 ) : /* @__PURE__ */ c(a, { _fgT: "form", _fgS: "c8cu80", _fgB: 1790697589440, onSubmit: d, className: "flex flex-col gap-5", "data-fg-c8cu80": ":0:/src/app/pages/ContactPage.tsx:219:19:9045:5651:e:form:xtetxtetxtetxtetxtetxtxtxte", children: [
34663 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu82", _fgB: 1790697589440, className: "grid sm:grid-cols-2 gap-4", "data-fg-c8cu82": ":0:/src/app/pages/ContactPage.tsx:221:21:9165:1442:e:div:ete", children: [ 34664 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu83", _fgB: 1790697589440, "data-fg-c8cu83": ":0:/src/app/pages/ContactPage.tsx:222:23:9231:665:e:div:ete", children: [ 34665 /* @__PURE__ */ c(a, { _fgT: "label", _fgS: "c8cu84", _fgB: 1790697589440, htmlFor: "first_name", className: g, style: { fontWeight: 500 }, "data-fg-c8cu84": ":0:/src/app/pages/ContactPage.tsx:223:25:9261:191:e:label:te", children: [ 34666 "First Name ", 34667 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c8cu86", _fgB: 1790697589440, className: "text-[#EFBB0F]", "data-fg-c8cu86": ":0:/src/app/pages/ContactPage.tsx:224:38:9378:41:e:span:t", children: "*" }) 34668 ] }), 34669 /* @__PURE__ */ i( 34670 a, 34671 { 34672 _fgT: "input", 34673 _fgS: "c8cu88", 34674 _fgB: 1790697589440, 34675 id: "first_name", 34676 name: "first_name", 34677 type: "text", 34678 required: !0, 34679 value: t.first_name, 34680 onChange: L, 34681 placeholder: "Jane", 34682 className: l, 34683 "data-fg-c8cu88": ":0:/src/app/pages/ContactPage.tsx:226:25:9477:390:e:input" 34684 } 34685 ) 34686 ] }),
34687 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu89", _fgB: 1790697589440, "data-fg-c8cu89": ":0:/src/app/pages/ContactPage.tsx:237:23:9919:661:e:div:ete", children: [ 34688 /* @__PURE__ */ c(a, { _fgT: "label", _fgS: "c8cu90", _fgB: 1790697589440, htmlFor: "last_name", className: g, style: { fontWeight: 500 }, "data-fg-c8cu90": ":0:/src/app/pages/ContactPage.tsx:238:25:9949:189:e:label:te", children: [ 34689 "Last Name ", 34690 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c8cu92", _fgB: 1790697589440, className: "text-[#EFBB0F]", "data-fg-c8cu92": ":0:/src/app/pages/ContactPage.tsx:239:37:10064:41:e:span:t", children: "*" }) 34691 ] }), 34692 /* @__PURE__ */ i( 34693 a, 34694 { 34695 _fgT: "input", 34696 _fgS: "c8cu94", 34697 _fgB: 1790697589440, 34698 id: "last_name", 34699 name: "last_name", 34700 type: "text", 34701 required: !0, 34702 value: t.last_name, 34703 onChange: L, 34704 placeholder: "Smith", 34705 className: l, 34706 "data-fg-c8cu94": ":0:/src/app/pages/ContactPage.tsx:241:25:10163:388:e:input" 34707 } 34708 ) 34709 ] }) 34710 ] }),
34711 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu96", _fgB: 1790697589440, "data-fg-c8cu96": ":0:/src/app/pages/ContactPage.tsx:255:21:10663:636:e:div:ete", children: [ 34712 /* @__PURE__ */ c(a, { _fgT: "label", _fgS: "c8cu97", _fgB: 1790697589440, htmlFor: "email", className: g, style: { fontWeight: 500 }, "data-fg-c8cu97": ":0:/src/app/pages/ContactPage.tsx:256:23:10691:185:e:label:te", children: [ 34713 "Email Address ", 34714 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c8cu99", _fgB: 1790697589440, className: "text-[#EFBB0F]", "data-fg-c8cu99": ":0:/src/app/pages/ContactPage.tsx:257:39:10804:41:e:span:t", children: "*" }) 34715 ] }), 34716 /* @__PURE__ */ i( 34717 a, 34718 { 34719 _fgT: "input", 34720 _fgS: "c8cu101", 34721 _fgB: 1790697589440, 34722 id: "email", 34723 name: "email", 34724 type: "email", 34725 required: !0, 34726 value: t.email, 34727 onChange: L, 34728 placeholder: "[email protected]", 34729 className: l, 34730 "data-fg-c8cu101": ":0:/src/app/pages/ContactPage.tsx:259:23:10899:373:e:input" 34731 } 34732 ) 34733 ] }),
34734 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu103", _fgB: 1790697589440, "data-fg-c8cu103": ":0:/src/app/pages/ContactPage.tsx:272:21:11355:553:e:div:ete", children: [ 34735 /* @__PURE__ */ i(a, { _fgT: "label", _fgS: "c8cu104", _fgB: 1790697589440, htmlFor: "phone", className: g, style: { fontWeight: 500 }, "data-fg-c8cu104": ":0:/src/app/pages/ContactPage.tsx:273:23:11383:142:e:label:t", children: "Phone Number" }), 34736 /* @__PURE__ */ i( 34737 a, 34738 { 34739 _fgT: "input", 34740 _fgS: "c8cu106", 34741 _fgB: 1790697589440, 34742 id: "phone", 34743 name: "phone", 34744 type: "tel", 34745 value: t.phone, 34746 onChange: L, 34747 placeholder: "(301) 555-0100", 34748 className: l, 34749 "data-fg-c8cu106": ":0:/src/app/pages/ContactPage.tsx:276:23:11548:333:e:input" 34750 } 34751 ) 34752 ] }),
34753 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu108", _fgB: 1790697589440, "data-fg-c8cu108": ":0:/src/app/pages/ContactPage.tsx:288:21:11971:598:e:div:ete", children: [ 34754 /* @__PURE__ */ i(a, { _fgT: "label", _fgS: "c8cu109", _fgB: 1790697589440, htmlFor: "organization", className: g, style: { fontWeight: 500 }, "data-fg-c8cu109": ":0:/src/app/pages/ContactPage.tsx:289:23:11999:149:e:label:t", children: "Organization" }), 34755 /* @__PURE__ */ i( 34756 a, 34757 { 34758 _fgT: "input", 34759 _fgS: "c8cu111", 34760 _fgB: 1790697589440, 34761 id: "organization", 34762 name: "organization", 34763 type: "text", 34764 value: t.organization, 34765 onChange: L, 34766 placeholder: "Your transit agency or company", 34767 className: l, 34768 "data-fg-c8cu111": ":0:/src/app/pages/ContactPage.tsx:292:23:12171:371:e:input" 34769 } 34770 ) 34771 ] }),
34772 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu113", _fgB: 1790697589440, "data-fg-c8cu113": ":0:/src/app/pages/ContactPage.tsx:304:21:12627:676:e:div:ete", children: [ 34773 /* @__PURE__ */ c(a, { _fgT: "label", _fgS: "c8cu114", _fgB: 1790697589440, htmlFor: "message", className: g, style: { fontWeight: 500 }, "data-fg-c8cu114": ":0:/src/app/pages/ContactPage.tsx:305:23:12655:181:e:label:te", children: [ 34774 "Message ", 34775 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "c8cu116", _fgB: 1790697589440, className: "text-[#EFBB0F]", "data-fg-c8cu116": ":0:/src/app/pages/ContactPage.tsx:306:33:12764:41:e:span:t", children: "*" }) 34776 ] }), 34777 /* @__PURE__ */ i( 34778 a, 34779 { 34780 _fgT: "textarea", 34781 _fgS: "c8cu118", 34782 _fgB: 1790697589440, 34783 id: "message", 34784 name: "message", 34785 required: !0, 34786 rows: 5, 34787 value: t.message, 34788 onChange: L, 34789 placeholder: "Tell us about your project or question...", 34790 className: `${l} resize-none`, 34791 "data-fg-c8cu118": ":0:/src/app/pages/ContactPage.tsx:308:23:12859:417:e:textarea" 34792 } 34793 ) 34794 ] }), 34795 s === "error" && /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "c8cu121", _fgB: 1790697589440, className: "flex items-start gap-3 p-4 bg-red-50 border border-red-100 rounded-xl", "data-fg-c8cu121": ":0:/src/app/pages/ContactPage.tsx:322:23:13417:291:e:div:ete", children: [
34796 /* @__PURE__ */ i(a, { _fgT: Y5, _fgS: "c8cu122", _fgB: 1790697589440, className: "text-red-500 flex-shrink-0 mt-0.5", size: 16, "data-fg-c8cu122": ":0:node_modules/lucide-react:323:25:13529:71:e:AlertCircle::::::fAY" }), 34797 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "c8cu123", _fgB: 1790697589440, className: "text-red-600 text-sm", "data-fg-c8cu123": ":0:/src/app/pages/ContactPage.tsx:324:25:13625:54:e:p:x", children: n }) 34798 ] }), 34799 /* @__PURE__ */ i( 34800 a, 34801 { 34802 _fgT: "button", 34803 _fgS: "c8cu126", 34804 _fgB: 1790697589440, 34805 type: "submit", 34806 disabled: s === "submitting", 34807 className: "flex items-center justify-center gap-2 w-full py-3.5 px-6 rounded-xl bg-[#EFBB0F] text-[#0a1628] transition-all hover:bg-[#d4a50d] disabled:opacity-60 disabled:cursor-not-allowed", 34808 style: { fontWeight: 700 }, 34809 "data-fg-c8cu126": ":0:/src/app/pages/ContactPage.tsx:329:21:13788:882:e:button:x", 34810 children: s === "submitting" ? /* @__PURE__ */ c(C, { children: [
34811 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "c8cu129", _fgB: 1790697589440, className: "w-4 h-4 border-2 border-[#0a1628]/30 border-t-[#0a1628] rounded-full animate-spin", "data-fg-c8cu129": ":0:/src/app/pages/ContactPage.tsx:337:27:14284:101:e:div" }), 34812 "Sendingâ¦" 34813 ] }) : /* @__PURE__ */ c(C, { children: [ 34814 /* @__PURE__ */ i(a, { _fgT: ti, _fgS: "c8cu132", _fgB: 1790697589440, size: 16, "data-fg-c8cu132": ":0:node_modules/lucide-react:342:27:14530:18:e:Send::::::dtm" }), 34815 "Send Message" 34816 ] }) 34817 } 34818 ) 34819 ] }) 34820 ] }) 34821 } 34822 ) 34823 ] }) }) }), 34824 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "c8cu134", _fgB: 1790697589440, "data-fg-c8cu134": ":0:/src/app/pages/ContactPage.tsx:355:7:14819:10:e:Footer::::::B1Vv" }) 34825 ] }); 34826} 34827const R6 = "#0B1B2B", c1 = "#EFBB0F"; 34828function Jm() { 34829 return /* @__PURE__ */ c(C, { children: [ 34830 /* @__PURE__ */ c( 34831 a, 34832 { 34833 _fgT: "section", 34834 _fgS: "cmy2", 34835 _fgB: 1790697589449, 34836 className: "relative pt-32 pb-16 text-white overflow-hidden", 34837 style: { background: `linear-gradient(135deg, ${R6} 0%, #132B44 100%)` }, 34838 "data-fg-cmy2": ":0:/src/app/pages/BookMeetingPage.tsx:12:7:287:1568:e:section:ete", 34839 children: [
34840 /* @__PURE__ */ i( 34841 a, 34842 { 34843 _fgT: "div", 34844 _fgS: "cmy3", 34845 _fgB: 1790697589449, 34846 className: "absolute -top-32 -right-32 w-96 h-96 rounded-full opacity-10", 34847 style: { background: `radial-gradient(circle, ${c1} 0%, transparent 70%)` }, 34848 "data-fg-cmy3": ":0:/src/app/pages/BookMeetingPage.tsx:16:9:464:187:e:div" 34849 } 34850 ), 34851 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cmy4", _fgB: 1790697589449, className: "max-w-4xl mx-auto px-6 text-center relative z-10", "data-fg-cmy4": ":0:/src/app/pages/BookMeetingPage.tsx:20:9:660:1178:e:div:e", children: /* @__PURE__ */ c( 34852 a, 34853 { 34854 _fgT: m.div, 34855 _fgS: "cmy5", 34856 _fgB: 1790697589449, 34857 initial: { opacity: 0, y: 20 }, 34858 animate: { opacity: 1, y: 0 }, 34859 transition: { duration: 0.5 }, 34860 "data-fg-cmy5": ":0:/src/app/pages/BookMeetingPage.tsx:21:11:737:1086:e:motion.div:etete", 34861 children: [
34862 /* @__PURE__ */ c( 34863 a, 34864 { 34865 _fgT: "div", 34866 _fgS: "cmy6", 34867 _fgB: 1790697589449, 34868 className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full mb-6", 34869 style: { backgroundColor: `${c1}20`, border: `1px solid ${c1}40` }, 34870 "data-fg-cmy6": ":0:/src/app/pages/BookMeetingPage.tsx:26:13:903:389:e:div:ete", 34871 children: [ 34872 /* @__PURE__ */ i(a, { _fgT: i2, _fgS: "cmy7", _fgB: 1790697589449, size: 14, style: { color: c1 }, "data-fg-cmy7": ":0:node_modules/lucide-react:30:15:1109:46:e:Calendar::::::Bbz4" }), 34873 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cmy8", _fgB: 1790697589449, className: "text-sm", style: { color: c1 }, "data-fg-cmy8": ":0:/src/app/pages/BookMeetingPage.tsx:31:15:1170:103:e:span:t", children: "Book a Meeting" }) 34874 ] 34875 } 34876 ), 34877 /* @__P
34877URE__ */ c(a, { _fgT: "h1", _fgS: "cmy10", _fgB: 1790697589449, className: "font-[Space_Grotesk] text-4xl md:text-5xl mb-4", "data-fg-cmy10": ":0:/src/app/pages/BookMeetingPage.tsx:35:13:1305:262:e:h1:tste", children: [ 34878 "Let's Talk About Your", 34879 " ", 34880 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cmy13", _fgB: 1790697589449, className: "italic font-[Playfair_Display]", style: { color: c1 }, "data-fg-cmy13": ":0:/src/app/pages/BookMeetingPage.tsx:37:15:1424:125:e:span:t", children: "Transit Needs" }) 34881 ] }), 34882 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cmy15", _fgB: 1790697589449, className: "text-white/70 max-w-2xl mx-auto text-lg", "data-fg-cmy15": ":0:/src/app/pages/BookMeetingPage.tsx:41:13:1580:219:e:p:t", children: "Schedule a personalized demo and see how IT Curves can transform your transit operations with our all-in-one platform." }) 34883 ] 34884 } 34885 ) }) 34886 ] 34887 } 34888 ), 34889 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cmy18", _fgB: 1790697589449, className: "py-16 bg-slate-50", "data-fg-cmy18": ":0:/src/app/pages/BookMeetingPage.tsx:50:7:1890:4696:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cmy19", _fgB: 1790697589449, className: "max-w-6xl mx-auto px-6", "data-fg-cmy19": ":0:/src/app/pages/BookMeetingPage.tsx:51:9:1938:4631:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy20", _fgB: 1790697589449, className: "grid grid-cols-1 lg:grid-cols-3 gap-10", "data-fg-cmy20": ":0:/src/app/pages/BookMeetingPage.tsx:52:11:1989:4565:e:div:xtetxte", children: [
34890 /* @__PURE__ */ c( 34891 a, 34892 { 34893 _fgT: m.div, 34894 _fgS: "cmy22", 34895 _fgB: 1790697589449, 34896 initial: { opacity: 0, x: -20 }, 34897 animate: { opacity: 1, x: 0 }, 34898 transition: { duration: 0.5, delay: 0.2 }, 34899 className: "lg:col-span-1 flex flex-col gap-6", 34900 "data-fg-cmy22": ":0:/src/app/pages/BookMeetingPage.tsx:54:13:2091:2829:e:motion.div:ete", 34901 children: [ 34902 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy23", _fgB: 1790697589449, className: "bg-white rounded-2xl p-6 shadow-sm border border-slate-100", "data-fg-cmy23": ":0:/src/app/pages/BookMeetingPage.tsx:60:15:2340:1141:e:div:ete", children: [ 34903 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cmy24", _fgB: 1790697589449, className: "font-[Space_Grotesk] text-lg text-slate-900 mb-4", "data-fg-cmy24": ":0:/src/app/pages/BookMeetingPage.tsx:61:17:2433:120:e:h3:t", children: "What to Expect" }), 34904 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "cmy26", _fgB: 1790697589449, className: "space-y-4 text-sm text-slate-600", "data-fg-cmy26": ":0:/src/app/pages/BookMeetingPage.tsx:64:17:2570:890:e:ul:x", children: [ 34905 "A 30-minute personalized walkthrough of our platform", 34906 "Live demo using scenarios relevant to your operations", 34907 "Q&A with our transit technology experts", 34908 "No obligation â just a conversation about your needs" 34909 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "cmy28", _fgB: 1790697589449, className: "flex items-start gap-3", "data-fg-cmy28": ":0:/src/app/pages/BookMeetingPage.tsx:71:21:2992:424:e:li:ete", children: [
34910 /* @__PURE__ */ i( 34911 a, 34912 { 34913 _fgT: "div", 34914 _fgS: "cmy29", 34915 _fgB: 1790697589449, 34916 className: "w-5 h-5 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5 text-xs", 34917 style: { backgroundColor: `${c1}20`, color: c1 }, 34918 "data-fg-cmy29": ":0:/src/app/pages/BookMeetingPage.tsx:72:23:3062:286:e:div:x", 34919 children: e + 1 34920 } 34921 ), 34922 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cmy31", _fgB: 1790697589449, "data-fg-cmy31": ":0:/src/app/pages/BookMeetingPage.tsx:78:23:3371:19:e:span:x", children: t }) 34923 ] }, e)) }) 34924 ] }), 34925 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy33", _fgB: 1790697589449, className: "bg-white rounded-2xl p-6 shadow-sm border border-slate-100", "data-fg-cmy33": ":0:/src/app/pages/BookMeetingPage.tsx:84:15:3497:1397:e:div:ete", children: [
34926 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cmy34", _fgB: 1790697589449, className: "font-[Space_Grotesk] text-lg text-slate-900 mb-4", "data-fg-cmy34": ":0:/src/app/pages/BookMeetingPage.tsx:85:17:3590:118:e:h3:t", children: "Contact Info" }), 34927 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy36", _fgB: 1790697589449, className: "space-y-3 text-sm text-slate-600", "data-fg-cmy36": ":0:/src/app/pages/BookMeetingPage.tsx:88:17:3725:1148:e:div:etetete", children: [ 34928 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy37", _fgB: 1790697589449, className: "flex items-center gap-3", "data-fg-cmy37": ":0:/src/app/pages/BookMeetingPage.tsx:89:19:3794:182:e:div:ete", children: [ 34929 /* @__PURE__ */ i(a, { _fgT: J1, _fgS: "cmy38", _fgB: 1790697589449, size: 16, className: "text-slate-400", "data-fg-cmy38": ":0:node_modules/lucide-react:90:21:3856:46:e:Globe::::::Cyd3" }), 34930 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cmy39", _fgB: 1790697589449, "data-fg-cmy39": ":0:/src/app/pages/BookMeetingPage.tsx:91:21:3923:28:e:span:t", children: "www.ITCurves.AI" }) 34931 ] }),
34932 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy41", _fgB: 1790697589449, className: "flex items-center gap-3", "data-fg-cmy41": ":0:/src/app/pages/BookMeetingPage.tsx:93:19:3995:291:e:div:ete", children: [ 34933 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cmy42", _fgB: 1790697589449, size: 16, className: "text-slate-400", "data-fg-cmy42": ":0:node_modules/lucide-react:94:21:4057:46:e:Phone::::::DmpI" }), 34934 /* @__PURE__ */ i(a, { _fgT: "a", _fgS: "cmy43", _fgB: 1790697589449, href: "tel:+13012082222", className: "hover:text-blue-600 transition-colors", "data-fg-cmy43": ":0:/src/app/pages/BookMeetingPage.tsx:95:21:4124:137:e:a:t", children: "301-208-2222" }) 34935 ] }), 34936 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy45", _fgB: 1790697589449, className: "flex items-center gap-3", "data-fg-cmy45": ":0:/src/app/pages/BookMeetingPage.tsx:99:19:4305:301:e:div:ete", children: [ 34937 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "cmy46", _fgB: 1790697589449, size: 16, className: "text-slate-400", "data-fg-cmy46": ":0:node_modules/lucide-react:100:21:4367:45:e:Mail::::::D4VR" }),
34938 /* @__PURE__ */ i(a, { _fgT: "a", _fgS: "cmy47", _fgB: 1790697589449, href: "mailto:[email protected]", className: "hover:text-blue-600 transition-colors", "data-fg-cmy47": ":0:/src/app/pages/BookMeetingPage.tsx:101:21:4433:148:e:a:t", children: "[email protected]" }) 34939 ] }), 34940 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy49", _fgB: 1790697589449, className: "flex items-start gap-3", "data-fg-cmy49": ":0:/src/app/pages/BookMeetingPage.tsx:105:19:4625:225:e:div:ete", children: [ 34941 /* @__PURE__ */ i(a, { _fgT: Pt, _fgS: "cmy50", _fgB: 1790697589449, size: 16, className: "text-slate-400 mt-0.5", "data-fg-cmy50": ":0:node_modules/lucide-react:106:21:4686:54:e:MapPin::::::BveZ" }), 34942 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "cmy51", _fgB: 1790697589449, "data-fg-cmy51": ":0:/src/app/pages/BookMeetingPage.tsx:107:21:4761:64:e:span:tet", children: [ 34943 "8201 Snouffer School Rd", 34944 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "cmy53", _fgB: 1790697589449, "data-fg-cmy53": ":0:/src/app/pages/BookMeetingPage.tsx:107:50:4790:6:e:br" }), 34945 "Gaithersburg, MD 20879" 34946 ] }) 34947 ] }) 34948 ] }) 34949 ] }) 34950 ] 34951 } 34952 ),
34953 /* @__PURE__ */ i( 34954 a, 34955 { 34956 _fgT: m.div, 34957 _fgS: "cmy56", 34958 _fgB: 1790697589449, 34959 initial: { opacity: 0, x: 20 }, 34960 animate: { opacity: 1, x: 0 }, 34961 transition: { duration: 0.5, delay: 0.3 }, 34962 className: "lg:col-span-2", 34963 "data-fg-cmy56": ":0:/src/app/pages/BookMeetingPage.tsx:114:13:4977:1560:e:motion.div:e", 34964 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cmy57", _fgB: 1790697589449, className: "bg-white rounded-2xl shadow-sm border border-slate-100 overflow-hidden", "data-fg-cmy57": ":0:/src/app/pages/BookMeetingPage.tsx:120:15:5205:1306:e:div:ete", children: [ 34965 /* @__PURE__ */ c( 34966 a, 34967 { 34968 _fgT: "div", 34969 _fgS: "cmy58", 34970 _fgB: 1790697589449, 34971 className: "px-6 py-4 border-b border-slate-100 flex items-center gap-3", 34972 style: { backgroundColor: `${R6}08` }, 34973 "data-fg-cmy58": ":0:/src/app/pages/BookMeetingPage.tsx:121:17:5310:395:e:div:ete", 34974 children: [
34975 /* @__PURE__ */ i(a, { _fgT: i2, _fgS: "cmy59", _fgB: 1790697589449, size: 18, style: { color: c1 }, "data-fg-cmy59": ":0:node_modules/lucide-react:125:19:5500:46:e:Calendar::::::Bbz4" }), 34976 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cmy60", _fgB: 1790697589449, className: "font-[Space_Grotesk] text-slate-900", "data-fg-cmy60": ":0:/src/app/pages/BookMeetingPage.tsx:126:19:5565:117:e:h2:t", children: "Choose a Date & Time" }) 34977 ] 34978 } 34979 ), 34980 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cmy62", _fgB: 1790697589449, className: "p-4 sm:p-6", "data-fg-cmy62": ":0:/src/app/pages/BookMeetingPage.tsx:130:17:5722:768:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cmy63", _fgB: 1790697589449, className: "relative w-full", style: { minHeight: "700px" }, "data-fg-cmy63": ":0:/src/app/pages/BookMeetingPage.tsx:131:19:5769:698:e:div:e", children: /* @__PURE__ */ i( 34981 a, 34982 { 34983 _fgT: "iframe", 34984 _fgS: "cmy64", 34985 _fgB: 1790697589449, 34986 src: "https://meetings.hubspot.com/itcurves/sales-meeting?embed=true", 34987 width: "100%", 34988 height: "700", 34989 frameBorder: "0", 34990 scrolling: "yes", 34991 allow: "fullscreen", 34992 style: { 34993 border: "none", 34994 minHeight: "700px", 34995 width: "1px", 34996 minWidth: "100%" 34997 }, 34998 title: "Book a Meeting with IT Curves", 34999 "data-fg-cmy64": ":0:/src/app/pages/BookMeetingPage.tsx:132:21:5854:588:e:iframe" 35000 } 35001 ) }) }) 35002 ] }) 35003 } 35004 ) 35005 ] }) }) }), 35006 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "cmy65", _fgB: 1790697589449, "data-fg-cmy65": ":0:/src/app/pages/BookMeetingPage.tsx:155:7:6594:10:e:Footer::::::B1Vv" }) 35007 ] }); 35008} 35009function Km() { 35010 const [t, e] = j(1), s = H(null), r = 5e3, [n, o] = j(0), L = H(null), d = H(Date.now()), l = Ge(() => { 35011 s.current && clearInterval(s.current), L.current && cancelAnimationFrame(L.current), d.current = Date.now(), o(0); 35012 const p = () => { 35013 const M = Date.now() - d.current, u = Math.min(M / r, 1); 35014 o(u), u < 1 && (L.current = requestAnimationFrame(p)); 35015 }; 35016 L.current = requestAnimationFrame(p), s.current = setInterval(() => { 35017 e((u) => u >= 4 ? 1 : u + 1), d.current = Date.now(), o(0), L.current && cancelAnimationFrame(L.current); 35018 const M = () => { 35019 const u = Date.now() - d.current, h = Math.min(u / r, 1); 35020 o(h), h < 1 && (L.current = requestAnimationFrame(M)); 35021 }; 35022 L.current = requestAnimationFrame(M); 35023 }, r); 35024 }, []); 35025 q(() => (l(), () => { 35026 s.current && clearInterval(s.current), L.current && cancelAnimationFrame(L.current); 35027 }), [l]); 35028 const g = (p) => { 35029 e(p), l(); 35030 }; 35031 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "sn30", _fgB: 1790697590815, _fgD: !0, className: "py-24 px-6 bg-[#F8FAFC] font-['DM_Sans']", "data-fg-sn30": ":0:/src/app/components/ai/AIHowItWorks.tsx:88:5:2976:4332:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn31", _fgB: 1790697590815, className: "max-w-[1280px] mx-auto", "data-fg-sn31": ":0:/src/app/components/ai/AIHowItWorks.tsx:89:7:3045:4248:e:div:ete", children: [ 35032 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn32", _fgB: 1790697590815, className: "text-center mb-16", "data-fg-sn32": ":0:/src/app/components/ai/AIHowItWorks.tsx:90:9:3094:564:e:div:etete", children: [
35033 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn33", _fgB: 1790697590815, className: "text-[#2B7AE8] text-xs font-bold tracking-[2.5px] uppercase mb-4", "data-fg-sn33": ":0:/src/app/components/ai/AIHowItWorks.tsx:91:11:3140:100:e:div:t", children: "HOW IT WORKS" }), 35034 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "sn35", _fgB: 1790697590815, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-[#0B1B2B] mb-4", "data-fg-sn35": ":0:/src/app/components/ai/AIHowItWorks.tsx:92:11:3251:229:e:h2:te", children: [ 35035 "A Rider Calls. ", 35036 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn37", _fgB: 1790697590815, className: "text-[#EFBB0F] italic", "data-fg-sn37": ":0:/src/app/components/ai/AIHowItWorks.tsx:93:28:3397:67:e:span:t", children: "Here's What Happens." }) 35037 ] }), 35038 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn39", _fgB: 1790697590815, className: "text-[17px] text-[#5A6A80] max-w-[600px] mx-auto", "data-fg-sn39": ":0:/src/app/components/ai/AIHowItWorks.tsx:95:11:3491:152:e:p:t", children: "From first ring to resolution, with or without a live agent." }) 35039 ] }), 35040 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn311", _fgB: 1790697590815, className: "grid lg:grid-cols-12 gap-12 items-start", "data-fg-sn311": ":0:/src/app/components/ai/AIHowItWorks.tsx:100:9:3668:3612:e:div:xtetxte", children: [
35041 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn313", _fgB: 1790697590815, className: "lg:col-span-5 flex flex-col gap-6 relative", "data-fg-sn313": ":0:/src/app/components/ai/AIHowItWorks.tsx:102:11:3776:2270:e:div:xtetx", children: [ 35042 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn315", _fgB: 1790697590815, className: "absolute left-[23px] top-8 bottom-8 w-[2px] bg-[#E2E8F0] z-0", "data-fg-sn315": ":0:/src/app/components/ai/AIHowItWorks.tsx:104:13:3886:80:e:div" }), 35043 [ 35044 { 35045 id: 1, 35046 title: "Rider Calls In", 35047 description: "AI answers instantly. No hold time, no phone tree, no voicemail." 35048 }, 35049 { 35050 id: 2, 35051 title: "Intent Detected", 35052 description: "32+ trained categories identify why the rider is calling within seconds." 35053 }, 35054 { 35055 id: 3, 35056 title: "Resolved or Routed", 35057 description: "Routine questions answered on the spot. Complex issues transferred with full context." 35058 }, 35059 { 35060 id: 4, 35061 title: "Data Captured", 35062 description: "Every interaction logged. Topics, sentiment, and outcomes feed your dashboards." 35063 } 35064 ].map((p) => /* @__PURE__ */ c( 35065 a, 35066 { 35067 _fgT: "button", 35068 _fgS: "sn317", 35069 _fgB: 1790697590815, 35070 onClick: () => g(p.id), 35071 className: `relative z-10 text-left p-6 rounded-2xl border-2 transition-all duration-300 group overflow-hidden ${t === p.id ? "bg-white border-[#2B7AE8] shadow-lg scale-[1.02]" : "bg-[#F1F5F9] border-transparent hover:bg-white hover:border-[#E2E8F0]"}`, 35072 "data-fg-sn317": ":0:/src/app/components/ai/AIHowItWorks.tsx:107:15:4017:1996:e:button:xtxte", 35073 children: [ 35074 t === p.id && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn320", _fgB: 1790697590815, className: "absolute bottom-0 left-0 right-0 h-[3px] bg-[#2B7AE8]/10", "data-fg-sn320": ":0:/src/app/components/ai/AIHowItWorks.tsx:118:19:4601:279:e:div:e", children: /* @__PURE__ */ i( 35075 a, 35076 { 35077 _fgT: "div", 35078 _fgS: "sn321", 35079 _fgB: 1790697590815, 35080 className: "h-full bg-[#2B7AE8] transition-none", 35081 style: { width: `${n * 100}%` }, 35082 "data-fg-sn321": ":0:/src/app/components/ai/AIHowItWorks.tsx:119:21:4696:159:e:div" 35083 } 35084 ) }),
35085 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn322", _fgB: 1790697590815, className: "flex gap-5 items-start", "data-fg-sn322": ":0:/src/app/components/ai/AIHowItWorks.tsx:125:17:4916:1073:e:div:ete", children: [ 35086 /* @__PURE__ */ i( 35087 a, 35088 { 35089 _fgT: "div", 35090 _fgS: "sn323", 35091 _fgB: 1790697590815, 35092 className: `w-12 h-12 rounded-full flex items-center justify-center text-lg font-bold shrink-0 transition-colors duration-300 ${t === p.id ? "bg-[#2B7AE8] text-white" : "bg-[#CBD5E1] text-[#64748B] group-hover:bg-[#94A3B8] group-hover:text-white"}`, 35093 "data-fg-sn323": ":0:/src/app/components/ai/AIHowItWorks.tsx:126:19:4975:453:e:div:x", 35094 children: p.id 35095 } 35096 ), 35097 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn325", _fgB: 1790697590815, "data-fg-sn325": ":0:/src/app/components/ai/AIHowItWorks.tsx:135:19:5447:519:e:div:ete", children: [
35098 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "sn326", _fgB: 1790697590815, className: `text-lg font-bold mb-1 transition-colors ${t === p.id ? "text-[#0B1B2B]" : "text-[#64748B]"}`, "data-fg-sn326": ":0:/src/app/components/ai/AIHowItWorks.tsx:136:21:5473:230:e:h3:x", children: p.title }), 35099 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn328", _fgB: 1790697590815, className: `text-sm leading-relaxed ${t === p.id ? "text-[#5A6A80]" : "text-[#94A3B8]"}`, "data-fg-sn328": ":0:/src/app/components/ai/AIHowItWorks.tsx:141:21:5724:217:e:p:x", children: p.description }) 35100 ] }) 35101 ] }) 35102 ] 35103 }, 35104 p.id 35105 )) 35106 ] }), 35107 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn331", _fgB: 1790697590815, className: "lg:col-span-7", "data-fg-sn331": ":0:/src/app/components/ai/AIHowItWorks.tsx:153:11:6102:1163:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn332", _fgB: 1790697590815, className: "bg-[#0B1B2B] rounded-3xl p-8 min-h-[520px] relative overflow-hidden flex items-center justify-center border border-[#1E293B] shadow-2xl", "data-fg-sn332": ":0:/src/app/components/ai/AIHowItWorks.tsx:154:13:6146:1102:e:div:xtete", children: [
35108 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn334", _fgB: 1790697590815, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[600px] bg-[radial-gradient(circle,rgba(43,122,232,0.15)_0%,transparent_70%)] pointer-events-none", "data-fg-sn334": ":0:/src/app/components/ai/AIHowItWorks.tsx:156:15:6348:189:e:div" }), 35109 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "sn335", _fgB: 1790697590815, mode: "wait", "data-fg-sn335": ":0:node_modules/motion:158:15:6567:662:e:AnimatePresence:e:::::DAs4", children: /* @__PURE__ */ c( 35110 a, 35111 { 35112 _fgT: m.div, 35113 _fgS: "sn336", 35114 _fgB: 1790697590815, 35115 initial: { opacity: 0, y: 20 }, 35116 animate: { opacity: 1, y: 0 }, 35117 exit: { opacity: 0, y: -20 }, 35118 transition: { duration: 0.3 }, 35119 className: "w-full max-w-[500px] relative z-10", 35120 "data-fg-sn336": ":0:/src/app/components/ai/AIHowItWorks.tsx:159:17:6613:583:e:motion.div:xtxtxtx", 35121 children: [ 35122 t === 1 && /* @__PURE__ */ i(a, { _fgT: Ym, _fgS: "sn338", _fgB: 1790697590815, "data-fg-sn338": ":0:/src/app/components/ai/AIHowItWorks.tsx:167:40:6978:16:e:Step1Content::::::gwJ" }), 35123 t === 2 && /* @__PURE__ */ i(a, { _fgT: Xm, _fgS: "sn340", _fgB: 1790697590815, "data-fg-sn340": ":0:/src/app/components/ai/AIHowItWorks.tsx:168:40:7035:16:e:Step2Content::::::DGhK" }), 35124 t === 3 && /* @__PURE__ */ i(a, { _fgT: Qm, _fgS: "sn342", _fgB: 1790697590815, "data-fg-sn342": ":0:/src/app/components/ai/AIHowItWorks.tsx:169:40:7092:16:e:Step3Content::::::BeJJ" }), 35125 t === 4 && /* @__PURE__ */ i(a, { _fgT: ex, _fgS: "sn344", _fgB: 1790697590815, "data-fg-sn344": ":0:/src/app/components/ai/AIHowItWorks.tsx:170:40:7149:16:e:Step4Content::::::ED4K" }) 35126 ] 35127 }, 35128 t 35129 ) }) 35130 ] }) }) 35131 ] }) 35132 ] }) }); 35133} 35134function Ym() { 35135 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn345", _fgB: 1790697590815, _fgD: !0, className: "text-center", "data-fg-sn345": ":0:/src/app/components/ai/AIHowItWorks.tsx:183:5:7358:1168:e:div:etete:1", children: [ 35136 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn346", _fgB: 1790697590815, className: "relative w-24 h-24 mx-auto mb-8", "data-fg-sn346": ":0:/src/app/components/ai/AIHowItWorks.tsx:184:7:7394:476:e:div:etete", children: [
35137 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn347", _fgB: 1790697590815, className: "absolute inset-0 bg-[#2B7AE8]/20 rounded-full animate-ping", "data-fg-sn347": ":0:/src/app/components/ai/AIHowItWorks.tsx:185:9:7452:78:e:div" }), 35138 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn348", _fgB: 1790697590815, className: "absolute inset-0 bg-[#2B7AE8]/10 rounded-full animate-pulse delay-75", "data-fg-sn348": ":0:/src/app/components/ai/AIHowItWorks.tsx:186:9:7539:88:e:div" }), 35139 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn349", _fgB: 1790697590815, className: "relative w-full h-full bg-[#2B7AE8] rounded-full flex items-center justify-center text-white shadow-[0_0_40px_rgba(43,122,232,0.6)]", "data-fg-sn349": ":0:/src/app/components/ai/AIHowItWorks.tsx:187:9:7636:221:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "sn350", _fgB: 1790697590815, size: 40, className: "animate-bounce", "data-fg-sn350": ":0:node_modules/lucide-react:188:11:7796:46:e:Phone::::::DmpI" }) }) 35140 ] }), 35141 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn351", _fgB: 1790697590815, className: "mb-8", "data-fg-sn351": ":0:/src/app/components/ai/AIHowItWorks.tsx:192:7:7884:325:e:div:ete", children: [
35142 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn352", _fgB: 1790697590815, className: "text-[#EFBB0F] font-bold tracking-widest uppercase text-xs mb-2", "data-fg-sn352": ":0:/src/app/components/ai/AIHowItWorks.tsx:193:9:7915:106:e:div:t", children: "TransitAI Answering" }), 35143 /* @__PURE__ */ c(a, { _fgT: "h3", _fgS: "sn354", _fgB: 1790697590815, className: "text-2xl font-light text-white font-['DM_Serif_Display']", "data-fg-sn354": ":0:/src/app/components/ai/AIHowItWorks.tsx:194:9:8030:166:e:h3:tet", children: [ 35144 '"Thank you for calling Metro Transit.', 35145 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "sn356", _fgB: 1790697590815, "data-fg-sn356": ":0:/src/app/components/ai/AIHowItWorks.tsx:195:48:8151:5:e:br" }), 35146 'How can I help you today?"' 35147 ] }) 35148 ] }), 35149 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn358", _fgB: 1790697590815, className: "grid grid-cols-3 gap-4 border-t border-white/10 pt-8", "data-fg-sn358": ":0:/src/app/components/ai/AIHowItWorks.tsx:199:7:8217:298:e:div:etete", children: [
35150 /* @__PURE__ */ i(a, { _fgT: w4, _fgS: "sn359", _fgB: 1790697590815, label: "Answer Time", value: "<1s", color: "text-[#22C55E]", "data-fg-sn359": ":0:/src/app/components/ai/AIHowItWorks.tsx:200:9:8296:63:e:Stat::::::RSJ" }), 35151 /* @__PURE__ */ i(a, { _fgT: w4, _fgS: "sn360", _fgB: 1790697590815, label: "Hold Queue", value: "0", color: "text-[#22C55E]", "data-fg-sn360": ":0:/src/app/components/ai/AIHowItWorks.tsx:201:9:8368:60:e:Stat::::::RSJ" }), 35152 /* @__PURE__ */ i(a, { _fgT: w4, _fgS: "sn361", _fgB: 1790697590815, label: "Availability", value: "24/7", color: "text-[#22C55E]", "data-fg-sn361": ":0:/src/app/components/ai/AIHowItWorks.tsx:202:9:8437:65:e:Stat::::::RSJ" }) 35153 ] }) 35154 ] }); 35155} 35156function Xm() { 35157 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn362", _fgB: 1790697590815, _fgD: !0, className: "space-y-6", "data-fg-sn362": ":0:/src/app/components/ai/AIHowItWorks.tsx:210:5:8576:2288:e:div:xtetxte:1", children: [ 35158 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn364", _fgB: 1790697590815, className: "bg-[#1E293B] rounded-xl p-5 border border-white/5 shadow-lg", "data-fg-sn364": ":0:/src/app/components/ai/AIHowItWorks.tsx:212:7:8635:598:e:div:ete", children: [
35159 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn365", _fgB: 1790697590815, className: "flex items-center gap-3 mb-3 border-b border-white/5 pb-3", "data-fg-sn365": ":0:/src/app/components/ai/AIHowItWorks.tsx:213:9:8721:386:e:div:etete", children: [ 35160 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn366", _fgB: 1790697590815, className: "w-8 h-8 rounded-full bg-[#64748B] flex items-center justify-center text-white", "data-fg-sn366": ":0:/src/app/components/ai/AIHowItWorks.tsx:214:11:8807:143:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: v2, _fgS: "sn367", _fgB: 1790697590815, size: 16, "data-fg-sn367": ":0:node_modules/lucide-react:215:13:8915:18:e:User::::::wpV" }) }), 35161 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn368", _fgB: 1790697590815, className: "text-sm font-bold text-white", "data-fg-sn368": ":0:/src/app/components/ai/AIHowItWorks.tsx:217:11:8961:59:e:span:t", children: "Rider" }), 35162 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn370", _fgB: 1790697590815, className: "text-xs text-[#64748B] ml-auto", "data-fg-sn370": ":0:/src/app/components/ai/AIHowItWorks.tsx:218:11:9031:61:e:span:t", children: "00:04" }) 35163 ] }),
35164 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn372", _fgB: 1790697590815, className: "text-lg text-white/90", "data-fg-sn372": ":0:/src/app/components/ai/AIHowItWorks.tsx:220:9:9116:104:e:p:t", children: '"When does the 42 bus come to MLK and 5th?"' }) 35165 ] }), 35166 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn375", _fgB: 1790697590815, className: "space-y-3 pl-4 border-l-2 border-[#2B7AE8]/30", "data-fg-sn375": ":0:/src/app/components/ai/AIHowItWorks.tsx:226:7:9275:1578:e:div:etetete", children: [ 35167 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn376", _fgB: 1790697590815, className: "text-xs font-bold text-[#64748B] uppercase tracking-wider mb-2", "data-fg-sn376": ":0:/src/app/components/ai/AIHowItWorks.tsx:227:9:9347:107:e:div:t", children: "Intent Classification" }), 35168 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn378", _fgB: 1790697590815, className: "flex items-center justify-between bg-[#2B7AE8]/10 border border-[#2B7AE8] rounded-lg p-3", "data-fg-sn378": ":0:/src/app/components/ai/AIHowItWorks.tsx:229:9:9472:446:e:div:ete", children: [
35169 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn379", _fgB: 1790697590815, className: "flex items-center gap-3", "data-fg-sn379": ":0:/src/app/components/ai/AIHowItWorks.tsx:230:11:9589:206:e:div:ete", children: [ 35170 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn380", _fgB: 1790697590815, className: "w-2.5 h-2.5 rounded-full bg-[#2B7AE8]", "data-fg-sn380": ":0:/src/app/components/ai/AIHowItWorks.tsx:231:13:9643:58:e:span" }), 35171 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn381", _fgB: 1790697590815, className: "text-white font-medium", "data-fg-sn381": ":0:/src/app/components/ai/AIHowItWorks.tsx:232:13:9714:64:e:span:t", children: "Schedule Inquiry" }) 35172 ] }), 35173 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn383", _fgB: 1790697590815, className: "text-[#22C55E] font-bold text-sm bg-[#22C55E]/10 px-2 py-0.5 rounded", "data-fg-sn383": ":0:/src/app/components/ai/AIHowItWorks.tsx:234:11:9806:97:e:span:t", children: "94%" }) 35174 ] }), 35175 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn385", _fgB: 1790697590815, className: "flex items-center justify-between bg-[#1E293B] border border-white/5 rounded-lg p-3 opacity-60", "data-fg-sn385": ":0:/src/app/components/ai/AIHowItWorks.tsx:237:9:9928:453:e:div:ete", children: [
35176 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn386", _fgB: 1790697590815, className: "flex items-center gap-3", "data-fg-sn386": ":0:/src/app/components/ai/AIHowItWorks.tsx:238:11:10051:207:e:div:ete", children: [ 35177 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn387", _fgB: 1790697590815, className: "w-2.5 h-2.5 rounded-full bg-[#EFBB0F]", "data-fg-sn387": ":0:/src/app/components/ai/AIHowItWorks.tsx:239:13:10105:58:e:span" }), 35178 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn388", _fgB: 1790697590815, className: "text-white font-medium", "data-fg-sn388": ":0:/src/app/components/ai/AIHowItWorks.tsx:240:13:10176:65:e:span:t", children: "Route Information" }) 35179 ] }), 35180 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn390", _fgB: 1790697590815, className: "text-[#EFBB0F] font-bold text-sm bg-[#EFBB0F]/10 px-2 py-0.5 rounded", "data-fg-sn390": ":0:/src/app/components/ai/AIHowItWorks.tsx:242:11:10269:97:e:span:t", children: "78%" }) 35181 ] }), 35182 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn392", _fgB: 1790697590815, className: "flex items-center justify-between bg-[#1E293B] border border-white/5 rounded-lg p-3 opacity-40", "data-fg-sn392": ":0:/src/app/components/ai/AIHowItWorks.tsx:245:9:10391:449:e:div:ete", children: [
35183 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn393", _fgB: 1790697590815, className: "flex items-center gap-3", "data-fg-sn393": ":0:/src/app/components/ai/AIHowItWorks.tsx:246:11:10514:203:e:div:ete", children: [ 35184 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn394", _fgB: 1790697590815, className: "w-2.5 h-2.5 rounded-full bg-[#64748B]", "data-fg-sn394": ":0:/src/app/components/ai/AIHowItWorks.tsx:247:13:10568:58:e:span" }), 35185 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn395", _fgB: 1790697590815, className: "text-white font-medium", "data-fg-sn395": ":0:/src/app/components/ai/AIHowItWorks.tsx:248:13:10639:61:e:span:t", children: "Stop Location" }) 35186 ] }), 35187 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn397", _fgB: 1790697590815, className: "text-[#94A3B8] font-bold text-sm bg-[#94A3B8]/10 px-2 py-0.5 rounded", "data-fg-sn397": ":0:/src/app/components/ai/AIHowItWorks.tsx:250:11:10728:97:e:span:t", children: "45%" }) 35188 ] }) 35189 ] }) 35190 ] }); 35191} 35192function Qm() { 35193 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn399", _fgB: 1790697590815, _fgD: !0, className: "space-y-4", "data-fg-sn399": ":0:/src/app/components/ai/AIHowItWorks.tsx:259:5:10914:1953:e:div:etxte:1", children: [ 35194 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3100", _fgB: 1790697590815, className: "flex flex-col gap-4", "data-fg-sn3100": ":0:/src/app/components/ai/AIHowItWorks.tsx:260:7:10948:1166:e:div:xtetxtetxtetxte", children: [
35195 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3102", _fgB: 1790697590815, className: "self-end max-w-[90%] bg-[#1E293B] text-white/90 p-4 rounded-2xl rounded-tr-sm border border-white/5", "data-fg-sn3102": ":0:/src/app/components/ai/AIHowItWorks.tsx:262:9:11023:207:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn3103", _fgB: 1790697590815, className: "text-sm", "data-fg-sn3103": ":0:/src/app/components/ai/AIHowItWorks.tsx:263:11:11151:64:e:p:t", children: "When does the 42 come to MLK and 5th?" }) }), 35196 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3106", _fgB: 1790697590815, className: "self-start max-w-[90%] bg-[#2B7AE8] text-white p-4 rounded-2xl rounded-tl-sm shadow-lg shadow-blue-900/20", "data-fg-sn3106": ":0:/src/app/components/ai/AIHowItWorks.tsx:267:9:11266:264:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn3107", _fgB: 1790697590815, className: "text-sm", "data-fg-sn3107": ":0:/src/app/components/ai/AIHowItWorks.tsx:268:11:11400:115:e:p:t", children: "The next Route 42 at MLK & 5th is at 3:15 PM, about 8 minutes from now. Running on time." }) }),
35197 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3110", _fgB: 1790697590815, className: "self-end max-w-[90%] bg-[#1E293B] text-white/90 p-4 rounded-2xl rounded-tr-sm border border-white/5", "data-fg-sn3110": ":0:/src/app/components/ai/AIHowItWorks.tsx:272:9:11569:202:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn3111", _fgB: 1790697590815, className: "text-sm", "data-fg-sn3111": ":0:/src/app/components/ai/AIHowItWorks.tsx:273:11:11697:59:e:p:t", children: "I also need to file a complaint." }) }), 35198 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3114", _fgB: 1790697590815, className: "self-start max-w-[90%] bg-[#2B7AE8] text-white p-4 rounded-2xl rounded-tl-sm shadow-lg shadow-blue-900/20", "data-fg-sn3114": ":0:/src/app/components/ai/AIHowItWorks.tsx:277:10:11809:292:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "sn3115", _fgB: 1790697590815, className: "text-sm", "data-fg-sn3115": ":0:/src/app/components/ai/AIHowItWorks.tsx:278:11:11943:143:e:p:t", children: "Let me connect you with a representative. I'll send them our full conversation so you don't have to repeat anything." }) }) 35199 ] }), 35200 /* @__PURE__ */ c( 35201 a, 35202 { 35203 _fgT: m.div, 35204 _fgS: "sn3118", 35205 _fgB: 1790697590815, 35206 initial: { opacity: 0, scale: 0.95 }, 35207 animate: { opacity: 1, scale: 1 }, 35208 transition: { delay: 0.5 }, 35209 className: "bg-[#EFBB0F]/10 border border-[#EFBB0F] rounded-xl p-4 flex items-center gap-4 mt-6", 35210 "data-fg-sn3118": ":0:/src/app/components/ai/AIHowItWorks.tsx:283:7:12150:706:e:motion.div:ete", 35211 children: [
35212 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3119", _fgB: 1790697590815, className: "w-10 h-10 rounded-full bg-[#EFBB0F]/20 flex items-center justify-center text-[#EFBB0F] shrink-0", "data-fg-sn3119": ":0:/src/app/components/ai/AIHowItWorks.tsx:289:9:12408:163:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: D, _fgS: "sn3120", _fgB: 1790697590815, size: 20, "data-fg-sn3120": ":0:node_modules/lucide-react:290:11:12532:24:e:ArrowRight::::::s5N" }) }), 35213 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3121", _fgB: 1790697590815, "data-fg-sn3121": ":0:/src/app/components/ai/AIHowItWorks.tsx:292:9:12580:256:e:div:ete", children: [ 35214 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3122", _fgB: 1790697590815, className: "text-[#EFBB0F] text-xs font-bold uppercase tracking-wider mb-1", "data-fg-sn3122": ":0:/src/app/components/ai/AIHowItWorks.tsx:293:11:12596:112:e:div:t", children: "Transferring to Live Agent" }), 35215 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3124", _fgB: 1790697590815, className: "text-white/70 text-xs", "data-fg-sn3124": ":0:/src/app/components/ai/AIHowItWorks.tsx:294:11:12719:102:e:div:t", children: "Full transcript, intent tags, and rider history attached." }) 35216 ] }) 35217 ] 35218 } 35219 ) 35220 ] }); 35221} 35222function ex() { 35223 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3126", _fgB: 1790697590815, _fgD: !0, "data-fg-sn3126": ":0:/src/app/components/ai/AIHowItWorks.tsx:303:5:12917:1592:e:div:xtetxte:1", children: [ 35224 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3128", _fgB: 1790697590815, className: "grid grid-cols-3 gap-4 mb-8", "data-fg-sn3128": ":0:/src/app/components/ai/AIHowItWorks.tsx:305:7:12955:887:e:div:etete", children: [
35225 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3129", _fgB: 1790697590815, className: "bg-[#1E293B] rounded-xl p-4 border border-white/5 text-center", "data-fg-sn3129": ":0:/src/app/components/ai/AIHowItWorks.tsx:306:9:13009:268:e:div:ete", children: [ 35226 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3130", _fgB: 1790697590815, className: "text-2xl font-bold text-[#2B7AE8] mb-1", "data-fg-sn3130": ":0:/src/app/components/ai/AIHowItWorks.tsx:307:11:13099:67:e:div:t", children: "1,247" }), 35227 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3132", _fgB: 1790697590815, className: "text-[10px] text-[#94A3B8] uppercase tracking-wide", "data-fg-sn3132": ":0:/src/app/components/ai/AIHowItWorks.tsx:308:11:13177:85:e:div:t", children: "Calls Today" }) 35228 ] }), 35229 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3134", _fgB: 1790697590815, className: "bg-[#1E293B] rounded-xl p-4 border border-white/5 text-center", "data-fg-sn3134": ":0:/src/app/components/ai/AIHowItWorks.tsx:310:9:13286:266:e:div:ete", children: [
35230 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3135", _fgB: 1790697590815, className: "text-2xl font-bold text-[#22C55E] mb-1", "data-fg-sn3135": ":0:/src/app/components/ai/AIHowItWorks.tsx:311:11:13376:65:e:div:t", children: "83%" }), 35231 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3137", _fgB: 1790697590815, className: "text-[10px] text-[#94A3B8] uppercase tracking-wide", "data-fg-sn3137": ":0:/src/app/components/ai/AIHowItWorks.tsx:312:11:13452:85:e:div:t", children: "AI Resolved" }) 35232 ] }), 35233 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3139", _fgB: 1790697590815, className: "bg-[#1E293B] rounded-xl p-4 border border-white/5 text-center", "data-fg-sn3139": ":0:/src/app/components/ai/AIHowItWorks.tsx:314:9:13561:268:e:div:ete", children: [ 35234 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3140", _fgB: 1790697590815, className: "text-2xl font-bold text-[#EFBB0F] mb-1", "data-fg-sn3140": ":0:/src/app/components/ai/AIHowItWorks.tsx:315:11:13651:66:e:div:t", children: "2.1s" }), 35235 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3142", _fgB: 1790697590815, className: "text-[10px] text-[#94A3B8] uppercase tracking-wide", "data-fg-sn3142": ":0:/src/app/components/ai/AIHowItWorks.tsx:316:11:13728:86:e:div:t", children: "Avg Response" }) 35236 ] }) 35237 ] }), 35238 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3145", _fgB: 1790697590815, className: "bg-[#1E293B] rounded-xl p-6 border border-white/5", "data-fg-sn3145": ":0:/src/app/components/ai/AIHowItWorks.tsx:321:7:13875:623:e:div:ete", children: [
35239 /* @__PURE__ */ c(a, { _fgT: "h4", _fgS: "sn3146", _fgB: 1790697590815, className: "text-white font-bold text-sm mb-6 flex items-center gap-2", "data-fg-sn3146": ":0:/src/app/components/ai/AIHowItWorks.tsx:322:9:13951:171:e:h4:et", children: [ 35240 /* @__PURE__ */ i(a, { _fgT: N3, _fgS: "sn3147", _fgB: 1790697590815, size: 16, className: "text-[#2B7AE8]", "data-fg-sn3147": ":0:node_modules/lucide-react:323:11:14036:49:e:Activity::::::Y0P" }), 35241 " Top Rider Topics Today" 35242 ] }), 35243 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3149", _fgB: 1790697590815, className: "space-y-5", "data-fg-sn3149": ":0:/src/app/components/ai/AIHowItWorks.tsx:326:9:14140:345:e:div:etetete", children: [ 35244 /* @__PURE__ */ i(a, { _fgT: q2, _fgS: "sn3150", _fgB: 1790697590815, label: "Schedules", percentage: 34, color: "bg-[#2B7AE8]", "data-fg-sn3150": ":0:/src/app/components/ai/AIHowItWorks.tsx:327:11:14178:66:e:BarItem::::::BTup" }), 35245 /* @__PURE__ */ i(a, { _fgT: q2, _fgS: "sn3151", _fgB: 1790697590815, label: "Detours", percentage: 23, color: "bg-[#EFBB0F]", "data-fg-sn3151": ":0:/src/app/components/ai/AIHowItWorks.tsx:328:11:14255:64:e:BarItem::::::BTup" }),
35246 /* @__PURE__ */ i(a, { _fgT: q2, _fgS: "sn3152", _fgB: 1790697590815, label: "Fares", percentage: 15, color: "bg-[#22C55E]", "data-fg-sn3152": ":0:/src/app/components/ai/AIHowItWorks.tsx:329:11:14330:62:e:BarItem::::::BTup" }), 35247 /* @__PURE__ */ i(a, { _fgT: q2, _fgS: "sn3153", _fgB: 1790697590815, label: "Complaints", percentage: 11, color: "bg-[#8B5CF6]", "data-fg-sn3153": ":0:/src/app/components/ai/AIHowItWorks.tsx:330:11:14403:67:e:BarItem::::::BTup" }) 35248 ] }) 35249 ] }) 35250 ] }); 35251} 35252function w4({ label: t, value: e, color: s }) { 35253 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3154", _fgB: 1790697590815, _fgD: !0, className: "flex flex-col items-center", "data-fg-sn3154": ":0:/src/app/components/ai/AIHowItWorks.tsx:339:5:14623:220:e:div:ete:1", children: [ 35254 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn3155", _fgB: 1790697590815, className: `text-2xl font-bold mb-1 ${s}`, "data-fg-sn3155": ":0:/src/app/components/ai/AIHowItWorks.tsx:340:7:14674:67:e:span:x", children: e }), 35255 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn3157", _fgB: 1790697590815, className: "text-[10px] text-[#94A3B8] uppercase tracking-wider", "data-fg-sn3157": ":0:/src/app/components/ai/AIHowItWorks.tsx:341:7:14748:84:e:span:x", children: t }) 35256 ] }); 35257} 35258function q2({ label: t, percentage: e, color: s }) { 35259 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3159", _fgB: 1790697590815, _fgD: !0, "data-fg-sn3159": ":0:/src/app/components/ai/AIHowItWorks.tsx:348:5:14970:477:e:div:ete:1", children: [ 35260 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "sn3160", _fgB: 1790697590815, className: "flex justify-between text-xs text-[#94A3B8] mb-2", "data-fg-sn3160": ":0:/src/app/components/ai/AIHowItWorks.tsx:349:7:14982:143:e:div:ete", children: [
35261 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "sn3161", _fgB: 1790697590815, "data-fg-sn3161": ":0:/src/app/components/ai/AIHowItWorks.tsx:350:9:15057:20:e:span:x", children: t }), 35262 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "sn3163", _fgB: 1790697590815, "data-fg-sn3163": ":0:/src/app/components/ai/AIHowItWorks.tsx:351:9:15086:26:e:span:xt", children: [ 35263 e, 35264 "%" 35265 ] }) 35266 ] }), 35267 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "sn3166", _fgB: 1790697590815, className: "h-2 w-full bg-white/5 rounded-full overflow-hidden", "data-fg-sn3166": ":0:/src/app/components/ai/AIHowItWorks.tsx:353:7:15132:304:e:div:e", children: /* @__PURE__ */ i( 35268 a, 35269 { 35270 _fgT: m.div, 35271 _fgS: "sn3167", 35272 _fgB: 1790697590815, 35273 initial: { width: 0 }, 35274 animate: { width: `${e}%` }, 35275 transition: { duration: 1, ease: "easeOut" }, 35276 className: `h-full rounded-full ${s}`, 35277 "data-fg-sn3167": ":0:/src/app/components/ai/AIHowItWorks.tsx:354:9:15209:214:e:motion.div" 35278 } 35279 ) }) 35280 ] }); 35281} 35282const D6 = [ 35283 { type: "rider", text: "When does the Route 42 come to MLK and 5th?" }, 35284 { type: "ai", text: "The next Route 42 bus at MLK & 5th St is scheduled for 3:15 PM, about 8 minutes from now. It's currently running on time." }, 35285 { type: "rider", text: "Is that one wheelchair accessible?" }, 35286 { type: "ai", text: "Yes, all Route 42 vehicles are wheelchair accessible with ramp boarding. The operator will assist you at the stop." }, 35287 { type: "rider", text: "I need to file a complaint about yesterday's driver." }, 35288 { type: "ai", text: "I understand. Let me connect you with a customer service representative who can help with that. I'll pass along everything we've discussed so you don't have to repeat yourself." } 35289]; 35290function tx() { 35291 const [t, e] = j([]), [s, r] = j(!1), [n, o] = j(!1), L = H(null), d = H(0), l = H(null), g = () => { 35292 e([]), r(!1), o(!1), d.current = 0, l.current && clearTimeout(l.current); 35293 const f = () => { 35294 const p = d.current; 35295 if (p >= D6.length) { 35296 l.current = setTimeout(() => { 35297 o(!0); 35298 }, 1e3); 35299 return; 35300 } 35301 const M = D6[p]; 35302 M.type === "rider" ? l.current = setTimeout(() => { 35303 e((u) => [...u, M]), d.current++, f(); 35304 }, 1200) : l.current = setTimeout(() => { 35305 r(!0), l.current = setTimeout(() => { 35306 r(!1), e((u) => [...u, M]), d.current++, f(); 35307 }, 1800); 35308 }, 600); 35309 }; 35310 l.current = setTimeout(f, 500); 35311 }; 35312 return q(() => (g(), () => { 35313 l.current && clearTimeout(l.current); 35314 }), []), q(() => { 35315 L.current && (L.current.scrollTop = L.current.scrollHeight); 35316 }, [t, s, n]), /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "eaqv0", _fgB: 1790697590841, _fgD: !0, className: "py-24 px-6 bg-[#0B1B2B] relative overflow-hidden font-['DM_Sans']", "data-fg-eaqv0": ":0:/src/app/components/ai/AIDemo.tsx:92:5:3112:5541:e:section:xtete:1", children: [ 35317 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv2", _fgB: 1790697590841, className: "absolute -top-[200px] -right-[200px] w-[600px] h-[600px] rounded-full bg-[radial-gradient(circle,rgba(43,122,232,0.08)_0%,transparent_70%)] pointer-events-none", "data-fg-eaqv2": ":0:/src/app/components/ai/AIDemo.tsx:94:7:3241:179:e:div" }), 35318 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv3", _fgB: 1790697590841, className: "max-w-[1280px] mx-auto grid grid-cols-1 lg:grid-cols-2 gap-20 items-center relative z-10", "data-fg-eaqv3": ":0:/src/app/components/ai/AIDemo.tsx:96:7:3428:5210:e:div:xtetxte", children: [
35319 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv5", _fgB: 1790697590841, "data-fg-eaqv5": ":0:/src/app/components/ai/AIDemo.tsx:99:9:3581:1283:e:div:etetetete", children: [ 35320 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv6", _fgB: 1790697590841, className: "text-[#EFBB0F] text-xs font-bold tracking-[2.5px] uppercase mb-5", "data-fg-eaqv6": ":0:/src/app/components/ai/AIDemo.tsx:100:11:3597:107:e:div:t", children: "RIDER SUPPORT AGENT" }), 35321 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "eaqv8", _fgB: 1790697590841, className: "font-['DM_Serif_Display'] text-[40px] leading-[1.2] text-white mb-5", "data-fg-eaqv8": ":0:/src/app/components/ai/AIDemo.tsx:101:11:3715:138:e:h2:t", children: "See a Real Call in Action" }), 35322 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "eaqv10", _fgB: 1790697590841, className: "text-base leading-[1.7] text-[#8B9BB5] mb-8", "data-fg-eaqv10": ":0:/src/app/components/ai/AIDemo.tsx:104:11:3864:285:e:p:t", children: "The Rider Support Agent handles the most common call types your center deals with every day. When it can't resolve something, it hands off to your staff with the full conversation already on screen." }),
35323 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv12", _fgB: 1790697590841, className: "p-7 pl-7 border-l-[3px] border-[#EFBB0F] bg-white/5 rounded-r-[10px] mb-8", "data-fg-eaqv12": ":0:/src/app/components/ai/AIDemo.tsx:108:11:4171:422:e:div:ete", children: [ 35324 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "eaqv13", _fgB: 1790697590841, className: "text-[15px] italic text-white/70 mb-3", "data-fg-eaqv13": ":0:/src/app/components/ai/AIDemo.tsx:109:13:4275:190:e:p:t", children: '"We reduced our call handling staff from 8 to 3. Wait times dropped from 12 minutes to under 30 seconds."' }), 35325 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv15", _fgB: 1790697590841, className: "text-[13px] font-bold text-[#EFBB0F] not-italic", "data-fg-eaqv15": ":0:/src/app/components/ai/AIDemo.tsx:112:13:4478:98:e:div:t", children: "â Challenger Transportation" }) 35326 ] }), 35327 /* @__PURE__ */ c( 35328 a, 35329 { 35330 _fgT: "button", 35331 _fgS: "eaqv17", 35332 _fgB: 1790697590841, 35333 onClick: g, 35334 className: "flex items-center gap-2 text-sm font-semibold text-[#2B7AE8] hover:text-[#3D8EF7] transition-colors", 35335 "data-fg-eaqv17": ":0:/src/app/components/ai/AIDemo.tsx:115:11:4605:244:e:button:et", 35336 children: [
35337 /* @__PURE__ */ i(a, { _fgT: ei, _fgS: "eaqv18", _fgB: 1790697590841, size: 16, "data-fg-eaqv18": ":0:node_modules/lucide-react:119:13:4794:23:e:RotateCcw::::::D1GU" }), 35338 " Replay Demo" 35339 ] 35340 } 35341 ) 35342 ] }), 35343 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv21", _fgB: 1790697590841, className: "flex justify-center", "data-fg-eaqv21": ":0:/src/app/components/ai/AIDemo.tsx:124:9:4909:3716:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv22", _fgB: 1790697590841, className: "w-[320px] bg-[#0F172A] rounded-[32px] border-[4px] border-[#1E293B] p-4 shadow-[0_24px_80px_rgba(0,0,0,0.6)] overflow-hidden flex flex-col h-[640px]", "data-fg-eaqv22": ":0:/src/app/components/ai/AIDemo.tsx:125:11:4957:3653:e:div:xtetxte", children: [ 35344 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv24", _fgB: 1790697590841, className: "text-center pb-4 border-b border-[#1E293B]/50 mb-4 z-20 relative bg-[#0F172A]", "data-fg-eaqv24": ":0:/src/app/components/ai/AIDemo.tsx:127:13:5169:839:e:div:etete", children: [
35345 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv25", _fgB: 1790697590841, className: "w-12 h-12 rounded-full bg-[#2B7AE8] flex items-center justify-center mx-auto mb-3 text-white shadow-lg shadow-blue-900/30 animate-pulse", "data-fg-eaqv25": ":0:/src/app/components/ai/AIDemo.tsx:128:15:5279:230:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "eaqv26", _fgB: 1790697590841, size: 24, fill: "currentColor", "data-fg-eaqv26": ":0:node_modules/lucide-react:129:17:5449:39:e:Phone::::::DmpI" }) }), 35346 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv27", _fgB: 1790697590841, className: "text-sm font-bold text-white mb-1.5", "data-fg-eaqv27": ":0:/src/app/components/ai/AIDemo.tsx:131:15:5524:74:e:div:t", children: "TransitAI Agent" }), 35347 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv29", _fgB: 1790697590841, className: "text-[10px] font-semibold text-[#22C55E] flex items-center justify-center gap-1.5 bg-[#22C55E]/10 py-1 px-3 rounded-full w-fit mx-auto tracking-wide", "data-fg-eaqv29": ":0:/src/app/components/ai/AIDemo.tsx:132:15:5613:376:e:div:etx", children: [
35348 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "eaqv30", _fgB: 1790697590841, className: "w-1.5 h-1.5 bg-[#22C55E] rounded-full animate-pulse", "data-fg-eaqv30": ":0:/src/app/components/ai/AIDemo.tsx:133:17:5796:72:e:span" }), 35349 "Active call ⢠00:", 35350 Math.floor(t.length * 3.5).toString().padStart(2, "0") 35351 ] }) 35352 ] }), 35353 /* @__PURE__ */ c( 35354 a, 35355 { 35356 _fgT: "div", 35357 _fgS: "eaqv34", 35358 _fgB: 1790697590841, 35359 ref: L, 35360 className: "flex-1 flex flex-col gap-4 overflow-y-auto pr-1 pb-4 scrollbar-hide scroll-smooth", 35361 style: { scrollbarWidth: "none", msOverflowStyle: "none" }, 35362 "data-fg-eaqv34": ":0:/src/app/components/ai/AIDemo.tsx:139:13:6066:2527:e:div:etxtxtxte", 35363 children: [ 35364 /* @__PURE__ */ i(a, { _fgT: pe, _fgS: "eaqv35", _fgB: 1790697590841, mode: "popLayout", "data-fg-eaqv35": ":0:node_modules/motion:144:15:6312:201:e:AnimatePresence:x:::::DAs4", children: t.map((f, p) => /* @__PURE__ */ i(a, { _fgT: Di, _fgS: "eaqv37", _fgB: 1790697590841, type: f.type, text: f.text, "data-fg-eaqv37": ":0:/src/app/components/ai/AIDemo.tsx:146:19:6409:51:e:Message::::::Dy5Q" }, p)) }), 35365 s && /* @__PURE__ */ c( 35366 a, 35367 { 35368 _fgT: m.div, 35369 _fgS: "eaqv39", 35370 _fgB: 1790697590841, 35371 initial: { opacity: 0, y: 10, scale: 0.9 }, 35372 animate: { opacity: 1, y: 0, scale: 1 }, 35373 exit: { opacity: 0, scale: 0.9 }, 35374 className: "bg-[#2B7AE8] self-start rounded-2xl rounded-bl-md p-4 w-16 h-10 flex items-center justify-center gap-1 shrink-0 ml-1", 35375 "data-fg-eaqv39": ":0:/src/app/components/ai/AIDemo.tsx:151:17:6576:1137:e:motion.div:etete", 35376 children: [
35377 /* @__PURE__ */ i( 35378 a, 35379 { 35380 _fgT: m.span, 35381 _fgS: "eaqv40", 35382 _fgB: 1790697590841, 35383 animate: { y: [0, -4, 0] }, 35384 transition: { duration: 0.6, repeat: 1 / 0, delay: 0 }, 35385 className: "w-1.5 h-1.5 bg-white/70 rounded-full", 35386 "data-fg-eaqv40": ":0:/src/app/components/ai/AIDemo.tsx:157:19:6945:232:e:motion.span" 35387 } 35388 ), 35389 /* @__PURE__ */ i( 35390 a, 35391 { 35392 _fgT: m.span, 35393 _fgS: "eaqv41", 35394 _fgB: 1790697590841, 35395 animate: { y: [0, -4, 0] }, 35396 transition: { duration: 0.6, repeat: 1 / 0, delay: 0.2 }, 35397 className: "w-1.5 h-1.5 bg-white/70 rounded-full", 35398 "data-fg-eaqv41": ":0:/src/app/components/ai/AIDemo.tsx:162:19:7196:234:e:motion.span" 35399 } 35400 ),
35401 /* @__PURE__ */ i( 35402 a, 35403 { 35404 _fgT: m.span, 35405 _fgS: "eaqv42", 35406 _fgB: 1790697590841, 35407 animate: { y: [0, -4, 0] }, 35408 transition: { duration: 0.6, repeat: 1 / 0, delay: 0.4 }, 35409 className: "w-1.5 h-1.5 bg-white/70 rounded-full", 35410 "data-fg-eaqv42": ":0:/src/app/components/ai/AIDemo.tsx:167:19:7449:234:e:motion.span" 35411 } 35412 ) 35413 ] 35414 } 35415 ), 35416 n && /* @__PURE__ */ c( 35417 a, 35418 { 35419 _fgT: m.div, 35420 _fgS: "eaqv44", 35421 _fgB: 1790697590841, 35422 initial: { opacity: 0, y: 10 }, 35423 animate: { opacity: 1, y: 0 }, 35424 className: "mt-2 p-4 bg-[#1E293B] border border-[#EFBB0F]/20 rounded-xl text-center shrink-0 mx-1 shadow-lg", 35425 "data-fg-eaqv44": ":0:/src/app/components/ai/AIDemo.tsx:176:17:7781:647:e:motion.div:ete", 35426 children: [
35427 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "eaqv45", _fgB: 1790697590841, className: "text-[10px] font-bold text-[#EFBB0F] uppercase tracking-[1.5px] mb-1.5 flex items-center justify-center gap-2", "data-fg-eaqv45": ":0:/src/app/components/ai/AIDemo.tsx:181:19:8055:242:e:div:et", children: [ 35428 /* @__PURE__ */ i(a, { _fgT: fc, _fgS: "eaqv46", _fgB: 1790697590841, size: 12, className: "text-[#EFBB0F]", "data-fg-eaqv46": ":0:node_modules/lucide-react:182:21:8203:53:e:ArrowUpRight::::::CDfy" }), 35429 " TRANSFERRING..." 35430 ] }), 35431 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv48", _fgB: 1790697590841, className: "text-xs font-medium text-slate-400", "data-fg-eaqv48": ":0:/src/app/components/ai/AIDemo.tsx:184:19:8316:82:e:div:t", children: "Connecting to live agent" }) 35432 ] 35433 } 35434 ), 35435 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "eaqv51", _fgB: 1790697590841, className: "h-4 w-full shrink-0", "data-fg-eaqv51": ":0:/src/app/components/ai/AIDemo.tsx:189:15:8535:39:e:div" }) 35436 ] 35437 } 35438 ) 35439 ] }) }) 35440 ] }) 35441 ] }); 35442} 35443const Di = Tt(({ type: t, text: e }, s) => { 35444 const r = t === "rider"; 35445 return /* @__PURE__ */ i( 35446 a, 35447 { 35448 _fgT: m.div, 35449 _fgS: "eaqv52", 35450 _fgB: 1790697590841, 35451 ref: s, 35452 layout: !0, 35453 initial: { opacity: 0, y: 20, scale: 0.95 }, 35454 animate: { opacity: 1, y: 0, scale: 1 }, 35455 transition: { duration: 0.4, type: "spring" }, 35456 className: `max-w-[85%] p-4 rounded-2xl text-[13px] leading-[1.5] shadow-md ${r ? "bg-[#1E293B] text-slate-200 self-end rounded-br-md mr-1" : "bg-[#2B7AE8] text-white self-start rounded-bl-md ml-1"}`, 35457 "data-fg-eaqv52": ":0:/src/app/components/ai/AIDemo.tsx:201:5:8812:479:e:motion.div:x", 35458 children: e 35459 } 35460 ); 35461}); 35462Di.displayName = "Message"; 35463function ax() { 35464 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "cnte0", _fgB: 1790697589459, _fgD: !0, className: "min-h-screen bg-white relative", "data-fg-cnte0": ":0:/src/app/pages/VoiceAIPage.tsx:10:5:425:217:e:main:etetetetetete:1", children: [ 35465 /* @__PURE__ */ i(a, { _fgT: sx, _fgS: "cnte1", _fgB: 1790697589459, "data-fg-cnte1": ":0:/src/app/pages/VoiceAIPage.tsx:11:7:481:15:e:VoiceAIHero::::::C6xa" }), 35466 /* @__PURE__ */ i(a, { _fgT: ix, _fgS: "cnte2", _fgB: 1790697589459, "data-fg-cnte2": ":0:/src/app/pages/VoiceAIPage.tsx:12:7:503:19:e:VoiceAIOverview::::::BvZN" }), 35467 /* @__PURE__ */ i(a, { _fgT: Km, _fgS: "cnte3", _fgB: 1790697589459, "data-fg-cnte3": ":0:/src/app/pages/VoiceAIPage.tsx:13:7:529:16:e:AIHowItWorks::::::360" }), 35468 /* @__PURE__ */ i(a, { _fgT: tx, _fgS: "cnte4", _fgB: 1790697589459, "data-fg-cnte4": ":0:/src/app/pages/VoiceAIPage.tsx:14:7:552:10:e:AIDemo::::::HHO" }), 35469 /* @__PURE__ */ i(a, { _fgT: rx, _fgS: "cnte5", _fgB: 1790697589459, "data-fg-cnte5": ":0:/src/app/pages/VoiceAIPage.tsx:15:7:569:23:e:VoiceAICapabilities::::::CFOk" }), 35470 /* @__PURE__ */ i(a, { _fgT: nx, _fgS: "cnte6", _fgB: 1790697589459, "data-fg-cnte6": ":0:/src/app/pages/VoiceAIPage.tsx:16:7:599:14:e:VoiceAICTA::::::DtEm" }), 35471 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "cnte7", _fgB: 1790697589459, "data-fg-cnte7": ":0:/src/app/pages/VoiceAIPage.tsx:17:7:620:10:e:Footer::::::B1Vv" }) 35472 ] }); 35473} 35474function sx() { 35475 const { openContactModal: t } = Z(); 35476 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cnte8", _fgB: 1790697589459, _fgD: !0, className: "relative min-h-[85vh] flex items-center overflow-hidden bg-[#0B1A2E] font-['DM_Sans']", "data-fg-cnte8": ":0:/src/app/pages/VoiceAIPage.tsx:27:5:761:5662:e:section:xtete:1", children: [ 35477 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte10", _fgB: 1790697589459, className: "absolute inset-0 z-0", "data-fg-cnte10": ":0:/src/app/pages/VoiceAIPage.tsx:29:7:911:667:e:div:etete", children: [
35478 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte11", _fgB: 1790697589459, className: "absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.03)_1px,transparent_1px)] bg-[size:64px_64px] [mask-image:radial-gradient(ellipse_at_center,black_40%,transparent_80%)]", "data-fg-cnte11": ":0:/src/app/pages/VoiceAIPage.tsx:30:9:958:261:e:div" }), 35479 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte12", _fgB: 1790697589459, className: "absolute -top-[20%] -right-[10%] w-[900px] h-[900px] bg-[#2B7AE8] opacity-[0.06] blur-[120px] rounded-full pointer-events-none mix-blend-screen", "data-fg-cnte12": ":0:/src/app/pages/VoiceAIPage.tsx:31:9:1228:163:e:div" }), 35480 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte13", _fgB: 1790697589459, className: "absolute -bottom-[20%] -left-[10%] w-[600px] h-[600px] bg-[#EFBB0F] opacity-[0.04] blur-[100px] rounded-full pointer-events-none mix-blend-screen", "data-fg-cnte13": ":0:/src/app/pages/VoiceAIPage.tsx:32:9:1400:165:e:div" }) 35481 ] }), 35482 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte14", _fgB: 1790697589459, className: "relative z-10 max-w-[1280px] mx-auto px-6 py-32 grid lg:grid-cols-2 gap-16 items-center w-full", "data-fg-cnte14": ":0:/src/app/pages/VoiceAIPage.tsx:35:7:1586:4822:e:div:xtetxte", children: [
35483 /* @__PURE__ */ c( 35484 a, 35485 { 35486 _fgT: m.div, 35487 _fgS: "cnte16", 35488 _fgB: 1790697589459, 35489 initial: { opacity: 0, y: 30 }, 35490 animate: { opacity: 1, y: 0 }, 35491 transition: { duration: 0.7 }, 35492 "data-fg-cnte16": ":0:/src/app/pages/VoiceAIPage.tsx:37:9:1733:1845:e:motion.div:etetete", 35493 children: [ 35494 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte17", _fgB: 1790697589459, className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-6", "data-fg-cnte17": ":0:/src/app/pages/VoiceAIPage.tsx:42:11:1889:339:e:div:ete", children: [ 35495 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cnte18", _fgB: 1790697589459, size: 14, className: "text-[#EFBB0F]", "data-fg-cnte18": ":0:node_modules/lucide-react:43:13:2023:46:e:Phone::::::DmpI" }), 35496 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnte19", _fgB: 1790697589459, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-cnte19": ":0:/src/app/pages/VoiceAIPage.tsx:44:13:2082:129:e:span:t", children: "Voice AI Agent" }) 35497 ] }),
35498 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "cnte21", _fgB: 1790697589459, className: "font-['DM_Serif_Display'] text-[36px] sm:text-[44px] md:text-[56px] leading-[1.1] text-white mb-6", "data-fg-cnte21": ":0:/src/app/pages/VoiceAIPage.tsx:49:11:2240:244:e:h1:tste", children: [ 35499 "Your 24/7 AI-Powered", 35500 " ", 35501 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnte24", _fgB: 1790697589459, className: "text-[#E8872B] italic", "data-fg-cnte24": ":0:/src/app/pages/VoiceAIPage.tsx:51:13:2405:63:e:span:t", children: "Rider Call Agent" }) 35502 ] }), 35503 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnte26", _fgB: 1790697589459, className: "text-[17px] md:text-[19px] text-[#8B9BB5] leading-relaxed mb-10 max-w-[540px]", "data-fg-cnte26": ":0:/src/app/pages/VoiceAIPage.tsx:54:11:2496:286:e:p:t", children: "Handles inbound rider calls around the clock -- booking trips, answering schedule questions, and resolving common issues without a single agent picking up the phone." }),
35504 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte28", _fgB: 1790697589459, className: "flex flex-wrap gap-4", "data-fg-cnte28": ":0:/src/app/pages/VoiceAIPage.tsx:58:11:2794:762:e:div:ete", children: [ 35505 /* @__PURE__ */ c( 35506 a, 35507 { 35508 _fgT: "button", 35509 _fgS: "cnte29", 35510 _fgB: 1790697589459, 35511 onClick: t, 35512 className: "inline-flex items-center gap-2.5 px-8 py-4 bg-[#E8872B] text-white rounded-xl text-[15px] font-bold hover:bg-[#D4771F] transition-all shadow-lg hover:shadow-orange-500/25 hover:-translate-y-0.5 duration-300 cursor-pointer", 35513 "data-fg-cnte29": ":0:/src/app/pages/VoiceAIPage.tsx:59:13:2845:387:e:button:et", 35514 children: [ 35515 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cnte30", _fgB: 1790697589459, size: 18, "data-fg-cnte30": ":0:node_modules/lucide-react:63:15:3170:19:e:Phone::::::DmpI" }), 35516 " Schedule a Call Demo" 35517 ] 35518 } 35519 ),
35520 /* @__PURE__ */ c( 35521 a, 35522 { 35523 _fgT: "a", 35524 _fgS: "cnte32", 35525 _fgB: 1790697589459, 35526 href: "#how-it-works", 35527 className: "inline-flex items-center gap-2 px-8 py-4 border border-white/15 text-white rounded-xl text-[15px] font-semibold hover:bg-white/5 transition-all", 35528 "data-fg-cnte32": ":0:/src/app/pages/VoiceAIPage.tsx:65:13:3245:294:e:a:te", 35529 children: [ 35530 "See How It Works ", 35531 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cnte34", _fgB: 1790697589459, size: 16, "data-fg-cnte34": ":0:node_modules/lucide-react:69:32:3498:24:e:ArrowRight::::::s5N" }) 35532 ] 35533 } 35534 ) 35535 ] }) 35536 ] 35537 } 35538 ), 35539 /* @__PURE__ */ i( 35540 a, 35541 { 35542 _fgT: m.div, 35543 _fgS: "cnte36", 35544 _fgB: 1790697589459, 35545 initial: { opacity: 0, scale: 0.9 }, 35546 animate: { opacity: 1, scale: 1 }, 35547 transition: { duration: 0.8, delay: 0.3 }, 35548 className: "hidden lg:flex justify-center", 35549 "data-fg-cnte36": ":0:/src/app/pages/VoiceAIPage.tsx:75:9:3643:2752:e:motion.div:e", 35550 children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte37", _fgB: 1790697589459, className: "relative", "data-fg-cnte37": ":0:/src/app/pages/VoiceAIPage.tsx:81:11:3872:2501:e:div:xtetetxtetxtete", children: [
35551 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte39", _fgB: 1790697589459, className: "absolute inset-0 flex items-center justify-center", "data-fg-cnte39": ":0:/src/app/pages/VoiceAIPage.tsx:83:13:3943:343:e:div:e", children: /* @__PURE__ */ i( 35552 a, 35553 { 35554 _fgT: m.div, 35555 _fgS: "cnte40", 35556 _fgB: 1790697589459, 35557 className: "w-64 h-64 rounded-full border border-[#2B7AE8]/20", 35558 animate: { scale: [1, 1.3, 1], opacity: [0.3, 0, 0.3] }, 35559 transition: { duration: 3, repeat: 1 / 0 }, 35560 "data-fg-cnte40": ":0:/src/app/pages/VoiceAIPage.tsx:84:15:4025:242:e:motion.div" 35561 } 35562 ) }), 35563 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte41", _fgB: 1790697589459, className: "absolute inset-0 flex items-center justify-center", "data-fg-cnte41": ":0:/src/app/pages/VoiceAIPage.tsx:90:13:4299:357:e:div:e", children: /* @__PURE__ */ i( 35564 a, 35565 { 35566 _fgT: m.div, 35567 _fgS: "cnte42", 35568 _fgB: 1790697589459, 35569 className: "w-48 h-48 rounded-full border border-[#2B7AE8]/30", 35570 animate: { scale: [1, 1.2, 1], opacity: [0.4, 0.1, 0.4] }, 35571 transition: { duration: 3, repeat: 1 / 0, delay: 0.5 }, 35572 "data-fg-cnte42": ":0:/src/app/pages/VoiceAIPage.tsx:91:15:4381:256:e:motion.div" 35573 } 35574 ) }),
35575 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte44", _fgB: 1790697589459, className: "relative w-40 h-40 flex items-center justify-center", "data-fg-cnte44": ":0:/src/app/pages/VoiceAIPage.tsx:99:13:4702:610:e:div:ete", children: [ 35576 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte45", _fgB: 1790697589459, className: "absolute inset-0 bg-[#2B7AE8]/20 rounded-full blur-2xl", "data-fg-cnte45": ":0:/src/app/pages/VoiceAIPage.tsx:100:15:4786:74:e:div" }), 35577 /* @__PURE__ */ i( 35578 a, 35579 { 35580 _fgT: m.div, 35581 _fgS: "cnte46", 35582 _fgB: 1790697589459, 35583 className: "relative w-28 h-28 bg-gradient-to-br from-[#2B7AE8] to-[#1A5EC4] rounded-full flex items-center justify-center shadow-[0_0_60px_rgba(43,122,232,0.4)]", 35584 animate: { y: [0, -8, 0] }, 35585 transition: { duration: 3, repeat: 1 / 0, ease: "easeInOut" }, 35586 "data-fg-cnte46": ":0:/src/app/pages/VoiceAIPage.tsx:101:15:4875:418:e:motion.div:e", 35587 children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cnte47", _fgB: 1790697589459, size: 48, className: "text-white", "data-fg-cnte47": ":0:node_modules/lucide-react:106:17:5223:42:e:Phone::::::DmpI" }) 35588 } 35589 ) 35590 ] }),
35591 /* @__PURE__ */ c( 35592 a, 35593 { 35594 _fgT: m.div, 35595 _fgS: "cnte49", 35596 _fgB: 1790697589459, 35597 className: "absolute -top-4 -right-8 bg-[#0F2340] border border-[#2B7AE8]/30 rounded-xl px-4 py-3 shadow-xl", 35598 animate: { y: [0, -6, 0] }, 35599 transition: { duration: 4, repeat: 1 / 0, ease: "easeInOut" }, 35600 "data-fg-cnte49": ":0:/src/app/pages/VoiceAIPage.tsx:111:13:5366:481:e:motion.div:ete", 35601 children: [ 35602 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte50", _fgB: 1790697589459, className: "text-[10px] text-[#64748B] uppercase tracking-wider mb-1", "data-fg-cnte50": ":0:/src/app/pages/VoiceAIPage.tsx:116:15:5650:91:e:div:t", children: "Answer Time" }), 35603 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte52", _fgB: 1790697589459, className: "text-lg font-bold text-[#22C55E]", "data-fg-cnte52": ":0:/src/app/pages/VoiceAIPage.tsx:117:15:5756:65:e:div:t", children: "<1 sec" }) 35604 ] 35605 } 35606 ),
35607 /* @__PURE__ */ c( 35608 a, 35609 { 35610 _fgT: m.div, 35611 _fgS: "cnte54", 35612 _fgB: 1790697589459, 35613 className: "absolute -bottom-4 -left-12 bg-[#0F2340] border border-[#E8872B]/30 rounded-xl px-4 py-3 shadow-xl", 35614 animate: { y: [0, 6, 0] }, 35615 transition: { duration: 4, repeat: 1 / 0, ease: "easeInOut", delay: 1 }, 35616 "data-fg-cnte54": ":0:/src/app/pages/VoiceAIPage.tsx:120:13:5861:495:e:motion.div:ete", 35617 children: [ 35618 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte55", _fgB: 1790697589459, className: "text-[10px] text-[#64748B] uppercase tracking-wider mb-1", "data-fg-cnte55": ":0:/src/app/pages/VoiceAIPage.tsx:125:15:6157:93:e:div:t", children: "Calls Handled" }), 35619 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte57", _fgB: 1790697589459, className: "text-lg font-bold text-[#E8872B]", "data-fg-cnte57": ":0:/src/app/pages/VoiceAIPage.tsx:126:15:6265:65:e:div:t", children: "83% by AI" }) 35620 ] 35621 } 35622 ) 35623 ] }) 35624 } 35625 ) 35626 ] }) 35627 ] }); 35628} 35629function ix() { 35630 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cnte59", _fgB: 1790697589459, _fgD: !0, className: "py-24 px-6 bg-[#F7F9FC] font-['DM_Sans']", "data-fg-cnte59": ":0:/src/app/pages/VoiceAIPage.tsx:171:5:7848:1923:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte60", _fgB: 1790697589459, className: "max-w-[1280px] mx-auto", "data-fg-cnte60": ":0:/src/app/pages/VoiceAIPage.tsx:172:7:7917:1839:e:div:ete", children: [ 35631 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte61", _fgB: 1790697589459, className: "text-center mb-16", "data-fg-cnte61": ":0:/src/app/pages/VoiceAIPage.tsx:173:9:7966:662:e:div:etete", children: [
35632 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte62", _fgB: 1790697589459, className: "text-[#2B7AE8] text-xs font-bold tracking-[2.5px] uppercase mb-4", "data-fg-cnte62": ":0:/src/app/pages/VoiceAIPage.tsx:174:11:8012:124:e:div:t", children: "WHAT IT DOES" }), 35633 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cnte64", _fgB: 1790697589459, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-[#0B1B2B] mb-4", "data-fg-cnte64": ":0:/src/app/pages/VoiceAIPage.tsx:177:11:8147:224:e:h2:te", children: [ 35634 "Built for ", 35635 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnte66", _fgB: 1790697589459, className: "text-[#E8872B] italic", "data-fg-cnte66": ":0:/src/app/pages/VoiceAIPage.tsx:178:23:8288:67:e:span:t", children: "Transit Call Centers" }) 35636 ] }), 35637 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnte68", _fgB: 1790697589459, className: "text-[17px] text-[#5A6A80] max-w-[600px] mx-auto leading-relaxed", "data-fg-cnte68": ":0:/src/app/pages/VoiceAIPage.tsx:180:11:8382:231:e:p:t", children: "Not a generic chatbot bolted onto a phone line. Every capability is purpose-built for demand-responsive transit operations." }) 35638 ] }), 35639 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte70", _fgB: 1790697589459, className: "grid sm:grid-cols-2 lg:grid-cols-3 gap-6", "data-fg-cnte70": ":0:/src/app/pages/VoiceAIPage.tsx:185:9:8638:1105:e:div:x", children: [ 35640 { 35641 icon: Il, 35642 title: "Natural Language Understanding", 35643 description: "Understands rider intent in natural speech across 32+ trained categories -- scheduling, complaints, detours, fare questions, and more." 35644 }, 35645 { 35646 icon: It, 35647 title: "Zero Hold Time, 24/7", 35648 description: "Every call is answered instantly. No phone trees, no voicemail, no staffing gaps on nights, weekends, or holidays." 35649 }, 35650 { 35651 icon: h1, 35652 title: "Caller ID Recognition", 35653 description: "Pulls up rider history, standing trips, and preferences before the conversation starts so every call feels personal." 35654 }, 35655 { 35656 icon: rd, 35657 title: "Seamless Live Agent Handoff", 35658 description: "When the AI can't resolve an issue, it transfers to your staff with the full transcript, intent tags, and rider profile attached." 35659 }, 35660 { 35661 icon: Te, 35662 title: "Direct Dispatch Integration", 35663 description: "Books, cancels, and reschedules trips in real time by connecting directly to your dispatch and scheduling system." 35664 }, 35665 { 35666 icon: dl, 35667 title: "Multilingual Support", 35668 description: "Serves riders in English and Spanish out of the box, with additional language support available for your service area." 35669 } 35670 ].map((e, s) => { 35671 const r = e.icon; 35672 return /* @__PURE__ */ c( 35673 a, 35674 { 35675 _fgT: m.div, 35676 _fgS: "cnte72", 35677 _fgB: 1790697589459, 35678 initial: { opacity: 0, y: 20 }, 35679 whileInView: { opacity: 1, y: 0 }, 35680 viewport: { once: !0 }, 35681 transition: { duration: 0.5, delay: s * 0.08 }, 35682 className: "bg-white rounded-2xl p-7 border border-[#E2E8F0] hover:border-[#2B7AE8]/30 hover:shadow-lg transition-all duration-300 group", 35683 "data-fg-cnte72": ":0:/src/app/pages/VoiceAIPage.tsx:189:15:8813:886:e:motion.div:etete", 35684 children: [
35685 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte73", _fgB: 1790697589459, className: "w-12 h-12 rounded-xl bg-[#2B7AE8]/10 flex items-center justify-center mb-5 group-hover:bg-[#2B7AE8]/20 transition-colors", "data-fg-cnte73": ":0:/src/app/pages/VoiceAIPage.tsx:197:17:9251:225:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: r, _fgS: "cnte74", _fgB: 1790697589459, size: 22, className: "text-[#2B7AE8]", "data-fg-cnte74": ":0:/src/app/pages/VoiceAIPage.tsx:198:19:9408:45:e:Icon" }) }), 35686 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "cnte75", _fgB: 1790697589459, className: "text-[18px] font-bold text-[#0B1B2B] mb-2", "data-fg-cnte75": ":0:/src/app/pages/VoiceAIPage.tsx:200:17:9493:78:e:h3:x", children: e.title }), 35687 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnte77", _fgB: 1790697589459, className: "text-[15px] text-[#5A6A80] leading-relaxed", "data-fg-cnte77": ":0:/src/app/pages/VoiceAIPage.tsx:201:17:9588:83:e:p:x", children: e.description }) 35688 ] 35689 }, 35690 e.title 35691 ); 35692 }) }) 35693 ] }) }); 35694} 35695function rx() { 35696 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "cnte79", _fgB: 1790697589459, _fgD: !0, className: "py-24 px-6 bg-white font-['DM_Sans']", "data-fg-cnte79": ":0:/src/app/pages/VoiceAIPage.tsx:221:5:10218:2405:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte80", _fgB: 1790697589459, className: "max-w-[1280px] mx-auto", "data-fg-cnte80": ":0:/src/app/pages/VoiceAIPage.tsx:222:7:10283:2325:e:div:etetxte", children: [ 35697 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte81", _fgB: 1790697589459, className: "text-center mb-16", "data-fg-cnte81": ":0:/src/app/pages/VoiceAIPage.tsx:223:9:10332:431:e:div:ete", children: [
35698 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte82", _fgB: 1790697589459, className: "text-[#E8872B] text-xs font-bold tracking-[2.5px] uppercase mb-4", "data-fg-cnte82": ":0:/src/app/pages/VoiceAIPage.tsx:224:11:10378:126:e:div:t", children: "BY THE NUMBERS" }), 35699 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cnte84", _fgB: 1790697589459, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-[#0B1B2B] mb-4", "data-fg-cnte84": ":0:/src/app/pages/VoiceAIPage.tsx:227:11:10515:233:e:h2:te", children: [ 35700 "Real Results from ", 35701 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnte86", _fgB: 1790697589459, className: "text-[#E8872B] italic", "data-fg-cnte86": ":0:/src/app/pages/VoiceAIPage.tsx:228:31:10664:68:e:span:t", children: "Real Transit Agencies" }) 35702 ] }) 35703 ] }), 35704 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte88", _fgB: 1790697589459, className: "grid grid-cols-2 lg:grid-cols-4 gap-6", "data-fg-cnte88": ":0:/src/app/pages/VoiceAIPage.tsx:232:9:10773:684:e:div:x", children: [ 35705 { value: "83%", label: "Calls Fully Resolved by AI", color: "text-[#2B7AE8]" }, 35706 { value: "<1s", label: "Average Answer Time", color: "text-[#22C55E]" }, 35707 { value: "32+", label: "Trained Intent Categories", color: "text-[#E8872B]" }, 35708 { value: "$240K", label: "Avg. Annual Savings", color: "text-[#8B5CF6]" } 35709 ].map((e, s) => /* @__PURE__ */ c( 35710 a, 35711 { 35712 _fgT: m.div, 35713 _fgS: "cnte90", 35714 _fgB: 1790697589459, 35715 initial: { opacity: 0, y: 20 }, 35716 whileInView: { opacity: 1, y: 0 }, 35717 viewport: { once: !0 }, 35718 transition: { delay: s * 0.1 }, 35719 className: "bg-[#F7F9FC] rounded-2xl p-8 text-center border border-[#E2E8F0]", 35720 "data-fg-cnte90": ":0:/src/app/pages/VoiceAIPage.tsx:234:13:10877:551:e:motion.div:ete", 35721 children: [
35722 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte91", _fgB: 1790697589459, className: `text-[40px] md:text-[52px] font-bold mb-2 ${e.color}`, "data-fg-cnte91": ":0:/src/app/pages/VoiceAIPage.tsx:242:15:11220:93:e:div:x", children: e.value }), 35723 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte93", _fgB: 1790697589459, className: "text-[14px] text-[#5A6A80] font-medium", "data-fg-cnte93": ":0:/src/app/pages/VoiceAIPage.tsx:243:15:11328:74:e:div:x", children: e.label }) 35724 ] 35725 }, 35726 e.label 35727 )) }), 35728 /* @__PURE__ */ c( 35729 a, 35730 { 35731 _fgT: m.div, 35732 _fgS: "cnte96", 35733 _fgB: 1790697589459, 35734 initial: { opacity: 0, y: 20 }, 35735 whileInView: { opacity: 1, y: 0 }, 35736 viewport: { once: !0 }, 35737 className: "mt-16 bg-[#0B1B2B] rounded-3xl p-10 md:p-14 text-center relative overflow-hidden", 35738 "data-fg-cnte96": ":0:/src/app/pages/VoiceAIPage.tsx:249:9:11495:1100:e:motion.div:ete", 35739 children: [ 35740 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte97", _fgB: 1790697589459, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[600px] h-[300px] bg-[radial-gradient(ellipse,rgba(43,122,232,0.08)_0%,transparent_70%)] pointer-events-none", "data-fg-cnte97": ":0:/src/app/pages/VoiceAIPage.tsx:255:11:11753:190:e:div" }),
35741 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte98", _fgB: 1790697589459, className: "relative z-10", "data-fg-cnte98": ":0:/src/app/pages/VoiceAIPage.tsx:256:11:11954:619:e:div:etete", children: [ 35742 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnte99", _fgB: 1790697589459, className: "text-[20px] md:text-[24px] text-white/90 italic leading-relaxed max-w-[700px] mx-auto mb-6 font-['DM_Serif_Display']", "data-fg-cnte99": ":0:/src/app/pages/VoiceAIPage.tsx:257:13:11998:302:e:p:t", children: `"We went from 8 full-time call agents to 3. Wait times dropped from 12 minutes to under 30 seconds, and we're saving $240,000 every year."` }), 35743 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte101", _fgB: 1790697589459, className: "text-[#E8872B] font-bold text-[15px]", "data-fg-cnte101": ":0:/src/app/pages/VoiceAIPage.tsx:260:13:12313:105:e:div:t", children: "Jared Gabrilowitz" }), 35744 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte103", _fgB: 1790697589459, className: "text-[#64748B] text-[13px]", "data-fg-cnte103": ":0:/src/app/pages/VoiceAIPage.tsx:263:13:12431:125:e:div:t", children: "Director of Operations, Gotham Regional Transit" }) 35745 ] }) 35746 ] 35747 } 35748 ) 35749 ] }) }); 35750} 35751function nx() { 35752 const { openContactModal: t } = Z(); 35753 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "cnte105", _fgB: 1790697589459, _fgD: !0, className: "py-24 px-6 bg-[#0B1B2B] text-center relative overflow-hidden font-['DM_Sans']", "data-fg-cnte105": ":0:/src/app/pages/VoiceAIPage.tsx:278:5:12753:1461:e:section:ete:1", children: [ 35754 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte106", _fgB: 1790697589459, className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[800px] h-[400px] bg-[radial-gradient(ellipse,rgba(232,135,43,0.08)_0%,transparent_70%)] pointer-events-none", "data-fg-cnte106": ":0:/src/app/pages/VoiceAIPage.tsx:279:7:12859:190:e:div" }), 35755 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cnte107", _fgB: 1790697589459, className: "max-w-[800px] mx-auto relative z-10", "data-fg-cnte107": ":0:/src/app/pages/VoiceAIPage.tsx:281:7:13057:1142:e:div:etetete", children: [
35756 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cnte108", _fgB: 1790697589459, className: "w-20 h-20 rounded-full bg-[#E8872B]/10 border border-[#E8872B]/25 flex items-center justify-center mx-auto mb-8", "data-fg-cnte108": ":0:/src/app/pages/VoiceAIPage.tsx:282:9:13119:201:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cnte109", _fgB: 1790697589459, size: 36, className: "text-[#E8872B]", "data-fg-cnte109": ":0:node_modules/lucide-react:283:11:13259:46:e:Phone::::::DmpI" }) }), 35757 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "cnte110", _fgB: 1790697589459, className: "font-['DM_Serif_Display'] text-[32px] sm:text-[38px] md:text-[44px] leading-[1.2] text-white mb-6", "data-fg-cnte110": ":0:/src/app/pages/VoiceAIPage.tsx:286:9:13330:220:e:h2:te", children: [ 35758 "Hear It Handle ", 35759 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "cnte112", _fgB: 1790697589459, className: "text-[#E8872B] italic", "data-fg-cnte112": ":0:/src/app/pages/VoiceAIPage.tsx:287:26:13470:66:e:span:t", children: "Your Riders' Calls." }) 35760 ] }),
35761 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cnte114", _fgB: 1790697589459, className: "text-[17px] text-[#8B9BB5] mb-10 max-w-[600px] mx-auto", "data-fg-cnte114": ":0:/src/app/pages/VoiceAIPage.tsx:289:9:13559:229:e:p:t", children: "We'll run a live call demo using your actual routes, schedules, and rider scenarios. No slides, no scripts -- just a real conversation." }), 35762 /* @__PURE__ */ c( 35763 a, 35764 { 35765 _fgT: "button", 35766 _fgS: "cnte116", 35767 _fgB: 1790697589459, 35768 onClick: t, 35769 className: "inline-flex items-center gap-2.5 px-8 py-4 bg-[#E8872B] text-white rounded-xl text-[15px] font-bold hover:bg-[#D4771F] transition-all shadow-lg hover:shadow-orange-500/25 hover:-translate-y-0.5 duration-300 cursor-pointer", 35770 "data-fg-cnte116": ":0:/src/app/pages/VoiceAIPage.tsx:293:9:13798:388:e:button:ete", 35771 children: [ 35772 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "cnte117", _fgB: 1790697589459, size: 18, "data-fg-cnte117": ":0:node_modules/lucide-react:297:11:14107:19:e:Phone::::::DmpI" }), 35773 " Book a Call Demo ",
35774 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "cnte119", _fgB: 1790697589459, size: 18, "data-fg-cnte119": ":0:node_modules/lucide-react:297:48:14144:24:e:ArrowRight::::::s5N" }) 35775 ] 35776 } 35777 ) 35778 ] }) 35779 ] }); 35780} 35781function ox() { 35782 return /* @__PURE__ */ c(a, { _fgT: "main", _fgS: "bi7v0", _fgB: 1790697589506, _fgD: !0, className: "min-h-screen bg-white relative", "data-fg-bi7v0": ":0:/src/app/pages/AIWorkshopPage.tsx:12:5:401:328:e:main:etetetetetetetetetete:1", children: [ 35783 /* @__PURE__ */ i(a, { _fgT: Lx, _fgS: "bi7v1", _fgB: 1790697589506, "data-fg-bi7v1": ":0:/src/app/pages/AIWorkshopPage.tsx:13:7:457:16:e:WorkshopHero::::::BX0" }), 35784 /* @__PURE__ */ i(a, { _fgT: cx, _fgS: "bi7v2", _fgB: 1790697589506, "data-fg-bi7v2": ":0:/src/app/pages/AIWorkshopPage.tsx:14:7:480:19:e:ApproachSection::::::DYU0" }), 35785 /* @__PURE__ */ i(a, { _fgT: dx, _fgS: "bi7v3", _fgB: 1790697589506, "data-fg-bi7v3": ":0:/src/app/pages/AIWorkshopPage.tsx:15:7:506:16:e:WorkshopMenu::::::oGb" }), 35786 /* @__PURE__ */ i(a, { _fgT: gx, _fgS: "bi7v4", _fgB: 1790697589506, "data-fg-bi7v4": ":0:/src/app/pages/AIWorkshopPage.tsx:16:7:529:19:e:WalkAwaySection::::::EDfX" }), 35787 /* @__PURE__ */ i(a, { _fgT: px, _fgS: "bi7v5", _fgB: 1790697589506, "data-fg-bi7v5": ":0:/src/app/pages/AIWorkshopPage.tsx:17:7:555:19:e:FoundationsPath::::::BvZa" }), 35788 /* @__PURE__ */ i(a, { _fgT: ux, _fgS: "bi7v6", _fgB: 1790697589506, "data-fg-bi7v6": ":0:/src/app/pages/AIWorkshopPage.tsx:18:7:581:20:e:AudiencesSection::::::BGV5" }), 35789 /* @__PURE__ */ i(a, { _fgT: mx, _fgS: "bi7v7", _fgB: 1790697589506, "data-fg-bi7v7": ":0:/src/app/pages/AIWorkshopPage.tsx:19:7:608:21:e:IndustriesSection::::::zIE" }), 35790 /* @__PURE__ */ i(a, { _fgT: xx, _fgS: "bi7v8", _fgB: 1790697589506, "data-fg-bi7v8": ":0:/src/app/pages/AIWorkshopPage.tsx:20:7:636:21:e:HowItWorksSection::::::MfD" }), 35791 /* @__PURE__ */ i(a, { _fgT: bx, _fgS: "bi7v9", _fgB: 1790697589506, "data-fg-bi7v9": ":0:/src/app/pages/AIWorkshopPage.tsx:21:7:664:14:e:FAQSection::::::B9Cw" }), 35792 /* @__PURE__ */ i(a, { _fgT: vx, _fgS: "bi7v10", _fgB: 1790697589506, "data-fg-bi7v10": ":0:/src/app/pages/AIWorkshopPage.tsx:22:7:685:15:e:WorkshopCTA::::::B2IA" }), 35793 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "bi7v11", _fgB: 1790697589506, "data-fg-bi7v11": ":0:/src/app/pages/AIWorkshopPage.tsx:23:7:707:10:e:Footer::::::B1Vv" }) 35794 ] }); 35795} 35796function Lx() { 35797 const { openContactModal: t } = Z(); 35798 return /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "bi7v12", _fgB: 1790697589506, _fgD: !0, className: "relative min-h-[80vh] flex items-center overflow-hidden bg-[#0B1A2E] font-['DM_Sans']", "data-fg-bi7v12": ":0:/src/app/pages/AIWorkshopPage.tsx:33:5:849:3269:e:section:ete:1", children: [ 35799 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v13", _fgB: 1790697589506, className: "absolute inset-0 z-0", "data-fg-bi7v13": ":0:/src/app/pages/AIWorkshopPage.tsx:34:7:963:633:e:div:etete", children: [
35800 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v14", _fgB: 1790697589506, className: "absolute inset-0 bg-[linear-gradient(rgba(255,255,255,0.03)_1px,transparent_1px),linear-gradient(90deg,rgba(255,255,255,0.03)_1px,transparent_1px)] bg-[size:64px_64px] [mask-image:radial-gradient(ellipse_at_center,black_40%,transparent_80%)]", "data-fg-bi7v14": ":0:/src/app/pages/AIWorkshopPage.tsx:35:9:1010:261:e:div" }), 35801 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v15", _fgB: 1790697589506, className: "absolute -top-[20%] -right-[10%] w-[800px] h-[800px] bg-[#EFBB0F] opacity-[0.05] blur-[120px] rounded-full pointer-events-none", "data-fg-bi7v15": ":0:/src/app/pages/AIWorkshopPage.tsx:36:9:1280:146:e:div" }), 35802 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v16", _fgB: 1790697589506, className: "absolute -bottom-[20%] -left-[10%] w-[600px] h-[600px] bg-[#2B7AE8] opacity-[0.05] blur-[100px] rounded-full pointer-events-none", "data-fg-bi7v16": ":0:/src/app/pages/AIWorkshopPage.tsx:37:9:1435:148:e:div" }) 35803 ] }), 35804 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v17", _fgB: 1790697589506, className: "relative z-10 max-w-[1280px] mx-auto px-6 py-32 w-full", "data-fg-bi7v17": ":0:/src/app/pages/AIWorkshopPage.tsx:40:7:1604:2499:e:div:etxte", children: [
35805 /* @__PURE__ */ c( 35806 a, 35807 { 35808 _fgT: m.div, 35809 _fgS: "bi7v18", 35810 _fgB: 1790697589506, 35811 initial: { opacity: 0, y: 30 }, 35812 animate: { opacity: 1, y: 0 }, 35813 transition: { duration: 0.7 }, 35814 className: "max-w-[760px]", 35815 "data-fg-bi7v18": ":0:/src/app/pages/AIWorkshopPage.tsx:41:9:1685:1516:e:motion.div:etetete", 35816 children: [ 35817 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v19", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-6", "data-fg-bi7v19": ":0:/src/app/pages/AIWorkshopPage.tsx:47:11:1877:340:e:div:ete", children: [ 35818 /* @__PURE__ */ i(a, { _fgT: Z7, _fgS: "bi7v20", _fgB: 1790697589506, size: 14, className: "text-[#EFBB0F]", "data-fg-bi7v20": ":0:node_modules/lucide-react:48:13:2011:49:e:BookOpen::::::BP4H" }), 35819 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v21", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v21": ":0:/src/app/pages/AIWorkshopPage.tsx:49:13:2073:127:e:span:t", children: "AI Workshops" }) 35820 ] }),
35821 /* @__PURE__ */ c(a, { _fgT: "h1", _fgS: "bi7v23", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[38px] sm:text-[48px] md:text-[60px] leading-[1.08] text-white mb-6", "data-fg-bi7v23": ":0:/src/app/pages/AIWorkshopPage.tsx:54:11:2229:259:e:h1:tste", children: [ 35822 "AI Workshops for Teams,", 35823 " ", 35824 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v26", _fgB: 1790697589506, className: "text-[#EFBB0F] italic", "data-fg-bi7v26": ":0:/src/app/pages/AIWorkshopPage.tsx:56:13:2398:74:e:span:t", children: "Leaders, and Pilot Planning" }) 35825 ] }), 35826 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v28", _fgB: 1790697589506, className: "text-[18px] md:text-[20px] text-[#8B9BB5] leading-relaxed mb-10 max-w-[620px]", "data-fg-bi7v28": ":0:/src/app/pages/AIWorkshopPage.tsx:59:11:2500:286:e:p:t", children: "Practical AI workshops that help organizations build AI fluency, assess readiness, prioritize real use cases, launch low-risk pilots, and move toward implementation." }),
35827 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v30", _fgB: 1790697589506, className: "flex flex-wrap gap-4", "data-fg-bi7v30": ":0:/src/app/pages/AIWorkshopPage.tsx:63:11:2798:381:e:div:e", children: /* @__PURE__ */ c( 35828 a, 35829 { 35830 _fgT: "button", 35831 _fgS: "bi7v31", 35832 _fgB: 1790697589506, 35833 onClick: t, 35834 className: "inline-flex items-center gap-2 px-7 py-3.5 bg-[#EFBB0F] text-[#0B1A2E] rounded-lg font-bold text-[15px] hover:bg-[#d9a80d] transition-colors", 35835 "data-fg-bi7v31": ":0:/src/app/pages/AIWorkshopPage.tsx:64:13:2849:313:e:button:te", 35836 children: [ 35837 "Schedule an Intro Call ", 35838 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "bi7v33", _fgB: 1790697589506, size: 16, "data-fg-bi7v33": ":0:node_modules/lucide-react:68:38:3116:24:e:ArrowRight::::::s5N" }) 35839 ] 35840 } 35841 ) }) 35842 ] 35843 } 35844 ), 35845 /* @__PURE__ */ i( 35846 a, 35847 { 35848 _fgT: m.div, 35849 _fgS: "bi7v35", 35850 _fgB: 1790697589506, 35851 initial: { opacity: 0, y: 20 }, 35852 animate: { opacity: 1, y: 0 }, 35853 transition: { duration: 0.7, delay: 0.3 }, 35854 className: "mt-20 grid grid-cols-2 md:grid-cols-4 gap-8 border-t border-white/10 pt-12", 35855 "data-fg-bi7v35": ":0:/src/app/pages/AIWorkshopPage.tsx:74:9:3237:853:e:motion.div:x", 35856 children: [ 35857 { value: "4", label: "Workshop formats" }, 35858 { value: "Virtual & Onsite", label: "Delivery options" }, 35859 { value: "Custom", label: "Tailored to your workflows" }, 35860 { value: "Action-Oriented", label: "Real outcomes, not theory" } 35861 ].map((e) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v37", _fgB: 1790697589506, "data-fg-bi7v37": ":0:/src/app/pages/AIWorkshopPage.tsx:86:13:3818:236:e:div:ete", children: [
35862 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v38", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[24px] font-bold font-['DM_Serif_Display'] mb-1", "data-fg-bi7v38": ":0:/src/app/pages/AIWorkshopPage.tsx:87:15:3855:103:e:div:x", children: e.value }), 35863 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v40", _fgB: 1790697589506, className: "text-[#8B9BB5] text-[13px]", "data-fg-bi7v40": ":0:/src/app/pages/AIWorkshopPage.tsx:88:15:3973:62:e:div:x", children: e.label }) 35864 ] }, e.label)) 35865 } 35866 ) 35867 ] }) 35868 ] }); 35869} 35870function cx() { 35871 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v42", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-white font-['DM_Sans']", "data-fg-bi7v42": ":0:/src/app/pages/AIWorkshopPage.tsx:100:5:4198:2607:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v43", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v43": ":0:/src/app/pages/AIWorkshopPage.tsx:101:7:4258:2532:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v44", _fgB: 1790697589506, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-bi7v44": ":0:/src/app/pages/AIWorkshopPage.tsx:102:9:4312:2465:e:div:ete", children: [ 35872 /* @__PURE__ */ c( 35873 a, 35874 { 35875 _fgT: m.div, 35876 _fgS: "bi7v45", 35877 _fgB: 1790697589506, 35878 initial: { opacity: 0, x: -30 }, 35879 whileInView: { opacity: 1, x: 0 }, 35880 viewport: { once: !0 }, 35881 transition: { duration: 0.6 }, 35882 "data-fg-bi7v45": ":0:/src/app/pages/AIWorkshopPage.tsx:103:11:4380:1281:e:motion.div:etetete", 35883 children: [
35884 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v46", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v46": ":0:/src/app/pages/AIWorkshopPage.tsx:109:13:4589:252:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v47", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v47": ":0:/src/app/pages/AIWorkshopPage.tsx:110:15:4723:99:e:span:t", children: "Our Approach" }) }), 35885 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v49", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] leading-[1.1] text-[#0B1A2E] mb-6", "data-fg-bi7v49": ":0:/src/app/pages/AIWorkshopPage.tsx:112:13:4854:180:e:h2:t", children: "Practical AI workshops, not generic training" }), 35886 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v51", _fgB: 1790697589506, className: "text-[17px] text-slate-600 leading-relaxed mb-8", "data-fg-bi7v51": ":0:/src/app/pages/AIWorkshopPage.tsx:115:13:5047:348:e:p:t", children: "A lot of AI education stops at definitions, demos, and inspiration. That is not enough. Our workshops are built to help organizations make progress through practical examples, real workflow conversations, structured prioritization, and clear next steps." }),
35887 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v53", _fgB: 1790697589506, className: "text-[17px] text-slate-600 leading-relaxed", "data-fg-bi7v53": ":0:/src/app/pages/AIWorkshopPage.tsx:118:13:5408:229:e:p:t", children: "Participants leave with stronger AI skills, better judgment about where AI fits, and a clearer path forward for their team or organization." }) 35888 ] 35889 } 35890 ), 35891 /* @__PURE__ */ i( 35892 a, 35893 { 35894 _fgT: m.div, 35895 _fgS: "bi7v55", 35896 _fgB: 1790697589506, 35897 initial: { opacity: 0, x: 30 }, 35898 whileInView: { opacity: 1, x: 0 }, 35899 viewport: { once: !0 }, 35900 transition: { duration: 0.6, delay: 0.1 }, 35901 className: "space-y-4", 35902 "data-fg-bi7v55": ":0:/src/app/pages/AIWorkshopPage.tsx:123:11:5673:1089:e:motion.div:x", 35903 children: [ 35904 "Every session starts with practical foundations and moves toward action", 35905 "Workshops are tailored to your workflows, roles, and priorities", 35906 "We focus on real business use cases, not abstract theory", 35907 "Leaders and teams can build shared understanding from the same starting point", 35908 "Workshops can lead directly into pilot planning, governance work, and implementation support" 35909 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v57", _fgB: 1790697589506, className: "flex items-start gap-3 p-4 rounded-xl bg-slate-50 border border-slate-100", "data-fg-bi7v57": ":0:/src/app/pages/AIWorkshopPage.tsx:137:15:6426:296:e:div:ete", children: [
35910 /* @__PURE__ */ i(a, { _fgT: b2, _fgS: "bi7v58", _fgB: 1790697589506, size: 18, className: "text-[#EFBB0F] mt-0.5 shrink-0", "data-fg-bi7v58": ":0:node_modules/lucide-react:138:17:6542:68:e:CheckCircle::::::C4Wc" }), 35911 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v59", _fgB: 1790697589506, className: "text-[15px] text-slate-700 leading-relaxed", "data-fg-bi7v59": ":0:/src/app/pages/AIWorkshopPage.tsx:139:17:6627:74:e:span:x", children: t }) 35912 ] }, e)) 35913 } 35914 ) 35915 ] }) }) }); 35916} 35917const lx = [ 35918 { 35919 tag: "Introductory", 35920 title: "AI Essentials for Work", 35921 audience: "All-staff sessions · Leadership overviews · Department kickoffs · Conferences", 35922 description: "A focused introduction to how AI can support everyday work. Designed for organizations that need a strong starting point. Participants leave with practical skills, better habits, and a clearer sense of where to go next.", 35923 listHeading: "Participants Will Learn", 35924 items: [ 35925 "What AI is good at today and where it falls short", 35926 "Practical ways to use AI for writing, research, summaries, and reports", 35927 "How to get better results through clearer prompting", 35928 "How to use AI more safely and responsibly at work" 35929 ], 35930 outcomes: ["Shared team language around AI", "Immediate day one productivity wins", "Better habits and stronger confidence with approved tools"], 35931 icon: /* @__PURE__ */ i(a, { _fgT: Z7, _fgS: "bi7v61", _fgB: 1790697589506, size: 22, "data-fg-bi7v61": ":0:node_modules/lucide-react:165:11:7752:22:e:BookOpen::::::BP4H" }), 35932 accent: "#EFBB0F" 35933 }, 35934 { 35935 tag: "Hands On", 35936 title: "Practical AI Foundations Workshop", 35937 audience: "Cross-functional teams · Department leaders · Operations teams · Internal AI rollouts", 35938 description: "A hands-on workshop for teams that want to move beyond awareness and start using AI more effectively in real workflows. Goes deeper than an overview, with role-based examples and practical skill building.", 35939 listHeading: "Participants Will Work Through", 35940 items: [ 35941 "Practical prompting and workflow improvement", 35942 "Drafting, summarization, and research support", 35943 "Documentation, communication, and knowledge work examples", 35944 "Common mistakes, limitations, and risk considerations" 35945 ], 35946 outcomes: ["Stronger individual AI usage and workflow fit", "More confidence using AI in real work", "A stronger foundation for team-level opportunity mapping"], 35947 icon: /* @__PURE__ */ i(a, { _fgT: h1, _fgS: "bi7v62", _fgB: 1790697589506, size: 22, "data-fg-bi7v62": ":0:node_modules/lucide-react:182:11:8697:19:e:Users::::::DV8M" }), 35948 accent: "#2B7AE8" 35949 }, 35950 { 35951 tag: "Strategic", 35952 title: "AI Readiness Workshop", 35953 audience: "Executive teams · Transformation leaders · Department heads · Public sector", 35954 description: "A structured working session to understand where your organization stands today and what is needed to move forward responsibly. Built for leaders who want clarity before pushing further into adoption.", 35955 listHeading: "We Cover", 35956 items: [ 35957 "Current-state AI usage and maturity", 35958 "Team capabilities and adoption blockers", 35959 "Governance and policy gaps", 35960 "Readiness across workflows, data, and decision-making" 35961 ], 35962 outcomes: ["Readiness snapshot with priority gaps and blockers", "Stronger alignment across stakeholders", "Recommended next steps and a clearer basis for pilot planning"], 35963 icon: /* @__PURE__ */ i(a, { _fgT: xd, _fgS: "bi7v63", _fgB: 1790697589506, size: 22, "data-fg-bi7v63": ":0:node_modules/lucide-react:199:11:9557:20:e:Target::::::DxzD" }), 35964 accent: "#16A085" 35965 }, 35966 { 35967 tag: "Action-Oriented", 35968 title: "AI Opportunity Workshop", 35969 audience: "Leadership teams · Operations leaders · Innovation groups · Partner engagements", 35970 description: "A collaborative working session to identify, score, and prioritize the AI use cases most worth pursuing. This is where interest turns into a practical pipeline with real ownership and clear next steps.", 35971 listHeading: "We Work Through", 35972 items: [ 35973 "Identifying workflows where AI can create real value", 35974 "Scoring opportunities by value, feasibility, risk, and ownership", 35975 "Separating useful ideas from low-impact noise", 35976 "Deciding what to pilot first" 35977 ], 35978 outcomes: ["Prioritized use case list with a value vs risk view", "Pilot shortlist with stronger alignment on where to start", "A roadmap for next-step planning or implementation"], 35979 icon: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "bi7v64", _fgB: 1790697589506, size: 22, "data-fg-bi7v64": ":0:node_modules/lucide-react:216:11:10483:17:e:Zap::::::Cp7" }), 35980 accent: "#8B5CF6" 35981 } 35982]; 35983function dx() { 35984 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v65", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-[#0B1A2E] font-['DM_Sans']", "data-fg-bi7v65": ":0:/src/app/pages/AIWorkshopPage.tsx:223:5:10575:3430:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v66", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v66": ":0:/src/app/pages/AIWorkshopPage.tsx:224:7:10639:3351:e:div:ete", children: [
35985 /* @__PURE__ */ c( 35986 a, 35987 { 35988 _fgT: m.div, 35989 _fgS: "bi7v67", 35990 _fgB: 1790697589506, 35991 initial: { opacity: 0, y: 20 }, 35992 whileInView: { opacity: 1, y: 0 }, 35993 viewport: { once: !0 }, 35994 transition: { duration: 0.6 }, 35995 className: "text-center mb-16", 35996 "data-fg-bi7v67": ":0:/src/app/pages/AIWorkshopPage.tsx:225:9:10693:904:e:motion.div:etete", 35997 children: [ 35998 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v68", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v68": ":0:/src/app/pages/AIWorkshopPage.tsx:232:11:10929:249:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v69", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v69": ":0:/src/app/pages/AIWorkshopPage.tsx:233:13:11061:100:e:span:t", children: "Workshop Menu" }) }), 35999 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v71", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-white mb-4", "data-fg-bi7v71": ":0:/src/app/pages/AIWorkshopPage.tsx:235:11:11189:156:e:h2:t", children: "Four workshop formats. One practical goal." }),
36000 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v73", _fgB: 1790697589506, className: "text-[17px] text-[#8B9BB5] max-w-[600px] mx-auto", "data-fg-bi7v73": ":0:/src/app/pages/AIWorkshopPage.tsx:238:11:11356:219:e:p:t", children: "Each workshop is designed for a specific audience and outcome. Choose the format that matches where your organization is today." }) 36001 ] 36002 } 36003 ), 36004 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v75", _fgB: 1790697589506, className: "grid md:grid-cols-2 gap-8", "data-fg-bi7v75": ":0:/src/app/pages/AIWorkshopPage.tsx:243:9:11607:2370:e:div:x", children: lx.map((t, e) => /* @__PURE__ */ c( 36005 a, 36006 { 36007 _fgT: m.div, 36008 _fgS: "bi7v77", 36009 _fgB: 1790697589506, 36010 initial: { opacity: 0, y: 24 }, 36011 whileInView: { opacity: 1, y: 0 }, 36012 viewport: { once: !0 }, 36013 transition: { duration: 0.5, delay: e * 0.1 }, 36014 className: "bg-white/5 border border-white/10 rounded-2xl p-8 flex flex-col gap-5 hover:border-white/20 transition-colors", 36015 "data-fg-bi7v77": ":0:/src/app/pages/AIWorkshopPage.tsx:245:13:11700:2248:e:motion.div:etetetete", 36016 children: [
36017 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v78", _fgB: 1790697589506, className: "flex items-start gap-4", "data-fg-bi7v78": ":0:/src/app/pages/AIWorkshopPage.tsx:253:15:12100:551:e:div:ete", children: [ 36018 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v79", _fgB: 1790697589506, className: "p-3 rounded-xl", style: { background: `${t.accent}18`, color: t.accent }, "data-fg-bi7v79": ":0:/src/app/pages/AIWorkshopPage.tsx:254:17:12157:139:e:div:x", children: t.icon }), 36019 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v81", _fgB: 1790697589506, "data-fg-bi7v81": ":0:/src/app/pages/AIWorkshopPage.tsx:257:17:12313:317:e:div:ete", children: [ 36020 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v82", _fgB: 1790697589506, className: "text-[11px] font-bold tracking-[2px] uppercase mb-1 block", style: { color: t.accent }, "data-fg-bi7v82": ":0:/src/app/pages/AIWorkshopPage.tsx:258:19:12337:158:e:span:x", children: t.tag }), 36021 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bi7v84", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[22px] text-white leading-tight", "data-fg-bi7v84": ":0:/src/app/pages/AIWorkshopPage.tsx:261:19:12514:93:e:h3:x", children: t.title }) 36022 ] }) 36023 ] }),
36024 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v86", _fgB: 1790697589506, className: "text-[12px] text-[#8B9BB5] italic", "data-fg-bi7v86": ":0:/src/app/pages/AIWorkshopPage.tsx:265:15:12667:65:e:p:x", children: t.audience }), 36025 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v88", _fgB: 1790697589506, className: "text-[15px] text-[#A8B8CC] leading-relaxed", "data-fg-bi7v88": ":0:/src/app/pages/AIWorkshopPage.tsx:266:15:12747:77:e:p:x", children: t.description }), 36026 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v90", _fgB: 1790697589506, "data-fg-bi7v90": ":0:/src/app/pages/AIWorkshopPage.tsx:268:15:12840:520:e:div:ete", children: [ 36027 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "bi7v91", _fgB: 1790697589506, className: "text-[13px] font-semibold text-white mb-3", "data-fg-bi7v91": ":0:/src/app/pages/AIWorkshopPage.tsx:269:17:12862:77:e:p:xt", children: [ 36028 t.listHeading, 36029 ":" 36030 ] }), 36031 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bi7v94", _fgB: 1790697589506, className: "space-y-2", "data-fg-bi7v94": ":0:/src/app/pages/AIWorkshopPage.tsx:270:17:12956:383:e:ul:x", children: t.items.map((s) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bi7v96", _fgB: 1790697589506, className: "flex items-start gap-2 text-[14px] text-[#A8B8CC]", "data-fg-bi7v96": ":0:/src/app/pages/AIWorkshopPage.tsx:272:21:13046:249:e:li:etx", children: [
36032 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v97", _fgB: 1790697589506, className: "mt-1.5 w-1.5 h-1.5 rounded-full shrink-0", style: { background: t.accent }, "data-fg-bi7v97": ":0:/src/app/pages/AIWorkshopPage.tsx:273:23:13146:94:e:span" }), 36033 s 36034 ] }, s)) }) 36035 ] }), 36036 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v99", _fgB: 1790697589506, className: "border-t border-white/10 pt-4", "data-fg-bi7v99": ":0:/src/app/pages/AIWorkshopPage.tsx:280:15:13376:546:e:div:ete", children: [ 36037 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v100", _fgB: 1790697589506, className: "text-[13px] font-semibold text-white mb-3", "data-fg-bi7v100": ":0:/src/app/pages/AIWorkshopPage.tsx:281:17:13440:78:e:p:t", children: "Typical Outcomes:" }), 36038 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bi7v102", _fgB: 1790697589506, className: "space-y-1.5", "data-fg-bi7v102": ":0:/src/app/pages/AIWorkshopPage.tsx:282:17:13535:366:e:ul:x", children: t.outcomes.map((s) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bi7v104", _fgB: 1790697589506, className: "flex items-start gap-2 text-[13px] text-[#A8B8CC]", "data-fg-bi7v104": ":0:/src/app/pages/AIWorkshopPage.tsx:284:21:13627:230:e:li:etx", children: [
36039 /* @__PURE__ */ i(a, { _fgT: b2, _fgS: "bi7v105", _fgB: 1790697589506, size: 13, className: "mt-0.5 shrink-0", style: { color: t.accent }, "data-fg-bi7v105": ":0:node_modules/lucide-react:285:23:13724:81:e:CheckCircle::::::C4Wc" }), 36040 s 36041 ] }, s)) }) 36042 ] }) 36043 ] 36044 }, 36045 t.title 36046 )) }) 36047 ] }) }); 36048} 36049function gx() { 36050 const t = [ 36051 "Stronger AI skills for real day-to-day work", 36052 "Better prompting and workflow habits", 36053 "A shared understanding of what AI can and cannot do well", 36054 "A readiness snapshot and clearer view of current gaps", 36055 "A prioritized list of use cases worth pursuing", 36056 "Pilot candidates with clearer ownership and value", 36057 "Governance starter points and decision criteria", 36058 "A practical next-step roadmap your team can act on" 36059 ]; 36060 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v107", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-white font-['DM_Sans']", "data-fg-bi7v107": ":0:/src/app/pages/AIWorkshopPage.tsx:313:5:14553:1636:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v108", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v108": ":0:/src/app/pages/AIWorkshopPage.tsx:314:7:14613:1561:e:div:ete", children: [ 36061 /* @__PURE__ */ c( 36062 a, 36063 { 36064 _fgT: m.div, 36065 _fgS: "bi7v109", 36066 _fgB: 1790697589506, 36067 initial: { opacity: 0, y: 20 }, 36068 whileInView: { opacity: 1, y: 0 }, 36069 viewport: { once: !0 }, 36070 className: "text-center mb-14", 36071 "data-fg-bi7v109": ":0:/src/app/pages/AIWorkshopPage.tsx:315:9:14667:803:e:motion.div:etete", 36072 children: [
36073 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v110", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v110": ":0:/src/app/pages/AIWorkshopPage.tsx:321:11:14862:244:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v111", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v111": ":0:/src/app/pages/AIWorkshopPage.tsx:322:13:14994:95:e:span:t", children: "Outcomes" }) }), 36074 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v113", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-[#0B1A2E] mb-4", "data-fg-bi7v113": ":0:/src/app/pages/AIWorkshopPage.tsx:324:11:15117:150:e:h2:t", children: "What participants walk away with" }), 36075 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v115", _fgB: 1790697589506, className: "text-[17px] text-slate-500 max-w-[560px] mx-auto", "data-fg-bi7v115": ":0:/src/app/pages/AIWorkshopPage.tsx:327:11:15278:170:e:p:t", children: "Every workshop is designed to produce practical outcomes, not just discussion." }) 36076 ] 36077 } 36078 ), 36079 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v117", _fgB: 1790697589506, className: "grid sm:grid-cols-2 lg:grid-cols-4 gap-4", "data-fg-bi7v117": ":0:/src/app/pages/AIWorkshopPage.tsx:332:9:15480:681:e:div:x", children: t.map((e, s) => /* @__PURE__ */ c( 36080 a, 36081 { 36082 _fgT: m.div, 36083 _fgS: "bi7v119", 36084 _fgB: 1790697589506, 36085 initial: { opacity: 0, y: 16 }, 36086 whileInView: { opacity: 1, y: 0 }, 36087 viewport: { once: !0 }, 36088 transition: { duration: 0.4, delay: s * 0.07 }, 36089 className: "flex items-start gap-3 p-5 rounded-xl bg-slate-50 border border-slate-100", 36090 "data-fg-bi7v119": ":0:/src/app/pages/AIWorkshopPage.tsx:334:13:15590:542:e:motion.div:ete", 36091 children: [
36092 /* @__PURE__ */ i(a, { _fgT: b2, _fgS: "bi7v120", _fgB: 1790697589506, size: 18, className: "text-[#EFBB0F] mt-0.5 shrink-0", "data-fg-bi7v120": ":0:node_modules/lucide-react:342:15:15949:68:e:CheckCircle::::::C4Wc" }), 36093 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v121", _fgB: 1790697589506, className: "text-[14px] text-slate-700 leading-relaxed", "data-fg-bi7v121": ":0:/src/app/pages/AIWorkshopPage.tsx:343:15:16032:74:e:span:x", children: e }) 36094 ] 36095 }, 36096 s 36097 )) }) 36098 ] }) }); 36099} 36100const fx = [ 36101 { step: "01", title: "Foundations", desc: "Build shared understanding of what AI does and where it fits" }, 36102 { step: "02", title: "Readiness", desc: "Assess gaps, blockers, governance, and use-case maturity" }, 36103 { step: "03", title: "Prioritization", desc: "Score opportunities, find quick wins, decide what to pilot" }, 36104 { step: "04", title: "Implementation", desc: "Pilot design, governance, workflow automation, delivery" } 36105]; 36106function px() { 36107 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v123", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-[#0B1A2E] font-['DM_Sans']", "data-fg-bi7v123": ":0:/src/app/pages/AIWorkshopPage.tsx:362:5:16730:2482:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v124", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v124": ":0:/src/app/pages/AIWorkshopPage.tsx:363:7:16794:2403:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v125", _fgB: 1790697589506, className: "grid lg:grid-cols-2 gap-16 items-center", "data-fg-bi7v125": ":0:/src/app/pages/AIWorkshopPage.tsx:364:9:16848:2336:e:div:ete", children: [ 36108 /* @__PURE__ */ c( 36109 a, 36110 { 36111 _fgT: m.div, 36112 _fgS: "bi7v126", 36113 _fgB: 1790697589506, 36114 initial: { opacity: 0, x: -30 }, 36115 whileInView: { opacity: 1, x: 0 }, 36116 viewport: { once: !0 }, 36117 transition: { duration: 0.6 }, 36118 "data-fg-bi7v126": ":0:/src/app/pages/AIWorkshopPage.tsx:365:11:16916:1448:e:motion.div:etetete", 36119 children: [
36120 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v127", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v127": ":0:/src/app/pages/AIWorkshopPage.tsx:371:13:17125:262:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v128", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v128": ":0:/src/app/pages/AIWorkshopPage.tsx:372:15:17259:109:e:span:t", children: "Why Foundations Matter" }) }), 36121 /* @__PURE__ */ c(a, { _fgT: "h2", _fgS: "bi7v130", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-white mb-6 leading-[1.1]", "data-fg-bi7v130": ":0:/src/app/pages/AIWorkshopPage.tsx:374:13:17400:237:e:h2:tste", children: [ 36122 "Start with foundations.", 36123 " ", 36124 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v133", _fgB: 1790697589506, className: "text-[#EFBB0F] italic", "data-fg-bi7v133": ":0:/src/app/pages/AIWorkshopPage.tsx:376:15:17557:62:e:span:t", children: "Then go deeper." }) 36125 ] }),
36126 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v135", _fgB: 1790697589506, className: "text-[17px] text-[#8B9BB5] leading-relaxed mb-5", "data-fg-bi7v135": ":0:/src/app/pages/AIWorkshopPage.tsx:378:13:17650:244:e:p:t", children: "The basics still matter. Most organizations need a shared starting point before they can make good decisions about pilots, policy, or implementation." }), 36127 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v137", _fgB: 1790697589506, className: "text-[17px] text-[#8B9BB5] leading-relaxed", "data-fg-bi7v137": ":0:/src/app/pages/AIWorkshopPage.tsx:381:13:17907:433:e:p:t", children: "Every workshop starts with practical AI foundations. Teams need to understand what AI actually does well, how to use it effectively, where the risks are, and how it fits into the work they already do. From that common foundation, organizations can move into readiness, prioritization, governance, and pilot planning with much better alignment." }) 36128 ] 36129 } 36130 ), 36131 /* @__PURE__ */ i( 36132 a, 36133 { 36134 _fgT: m.div, 36135 _fgS: "bi7v139", 36136 _fgB: 1790697589506, 36137 initial: { opacity: 0, x: 30 }, 36138 whileInView: { opacity: 1, x: 0 }, 36139 viewport: { once: !0 }, 36140 transition: { duration: 0.6, delay: 0.1 }, 36141 className: "space-y-4", 36142 "data-fg-bi7v139": ":0:/src/app/pages/AIWorkshopPage.tsx:386:11:18376:793:e:motion.div:x", 36143 children: fx.map((t, e) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v141", _fgB: 1790697589506, className: "flex items-start gap-5 p-5 rounded-xl bg-white/5 border border-white/10", "data-fg-bi7v141": ":0:/src/app/pages/AIWorkshopPage.tsx:394:15:18671:458:e:div:ete", children: [
36144 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v142", _fgB: 1790697589506, className: "text-[#EFBB0F] font-['DM_Serif_Display'] text-[28px] leading-none w-12 shrink-0", "data-fg-bi7v142": ":0:/src/app/pages/AIWorkshopPage.tsx:395:17:18790:111:e:div:x", children: t.step }), 36145 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v144", _fgB: 1790697589506, "data-fg-bi7v144": ":0:/src/app/pages/AIWorkshopPage.tsx:396:17:18918:190:e:div:ete", children: [ 36146 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v145", _fgB: 1790697589506, className: "text-white font-semibold text-[16px] mb-1", "data-fg-bi7v145": ":0:/src/app/pages/AIWorkshopPage.tsx:397:19:18942:70:e:p:x", children: t.title }), 36147 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v147", _fgB: 1790697589506, className: "text-[#8B9BB5] text-[14px]", "data-fg-bi7v147": ":0:/src/app/pages/AIWorkshopPage.tsx:398:19:19031:54:e:p:x", children: t.desc }) 36148 ] }) 36149 ] }, t.step)) 36150 } 36151 ) 36152 ] }) }) }); 36153} 36154const Mx = [ 36155 { 36156 icon: /* @__PURE__ */ i(a, { _fgT: W7, _fgS: "bi7v149", _fgB: 1790697589506, size: 20, "data-fg-bi7v149": ":0:node_modules/lucide-react:412:11:19279:23:e:Briefcase::::::uh8" }), 36157 label: "For Leaders", 36158 desc: "Build alignment around AI readiness, governance, use case priorities, and next-step planning. Leaders need to make decisions, not just attend training." 36159 }, 36160 { 36161 icon: /* @__PURE__ */ i(a, { _fgT: h1, _fgS: "bi7v150", _fgB: 1790697589506, size: 20, "data-fg-bi7v150": ":0:node_modules/lucide-react:417:11:19514:19:e:Users::::::DV8M" }), 36162 label: "For Teams", 36163 desc: "Improve day-to-day AI usage, workflow fit, and confidence using AI for real work. Teams need practical skills they can apply the same week." 36164 }, 36165 { 36166 icon: /* @__PURE__ */ i(a, { _fgT: k1, _fgS: "bi7v151", _fgB: 1790697589506, size: 20, "data-fg-bi7v151": ":0:node_modules/lucide-react:422:11:19731:23:e:Building2::::::DOEu" }), 36167 label: "For Departments", 36168 desc: "Identify where AI can reduce friction, improve speed, support service delivery, and create measurable value within a specific function or unit." 36169 }, 36170 { 36171 icon: /* @__PURE__ */ i(a, { _fgT: J1, _fgS: "bi7v152", _fgB: 1790697589506, size: 20, "data-fg-bi7v152": ":0:node_modules/lucide-react:427:11:19962:19:e:Globe::::::Cyd3" }), 36172 label: "For Associations & Conferences", 36173 desc: "Deliver practical AI sessions that move audiences beyond hype and into responsible action. Structured for engaged, mixed-experience attendees." 36174 }, 36175 { 36176 icon: /* @__PURE__ */ i(a, { _fgT: xl, _fgS: "bi7v153", _fgB: 1790697589506, size: 20, "data-fg-bi7v153": ":0:node_modules/lucide-react:432:11:20203:23:e:Lightbulb::::::DclZ" }), 36177 label: "For Partners", 36178 desc: "Offer co-branded or partner-led workshops that open the door to advisory, pilot, and implementation work. A natural entry point for consulting relationships." 36179 } 36180]; 36181function ux() { 36182 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v154", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-white font-['DM_Sans']", "data-fg-bi7v154": ":0:/src/app/pages/AIWorkshopPage.tsx:440:5:20480:1621:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v155", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v155": ":0:/src/app/pages/AIWorkshopPage.tsx:441:7:20540:1546:e:div:ete", children: [ 36183 /* @__PURE__ */ c( 36184 a, 36185 { 36186 _fgT: m.div, 36187 _fgS: "bi7v156", 36188 _fgB: 1790697589506, 36189 initial: { opacity: 0, y: 20 }, 36190 whileInView: { opacity: 1, y: 0 }, 36191 viewport: { once: !0 }, 36192 className: "text-center mb-14", 36193 "data-fg-bi7v156": ":0:/src/app/pages/AIWorkshopPage.tsx:442:9:20594:636:e:motion.div:ete", 36194 children: [
36195 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v157", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v157": ":0:/src/app/pages/AIWorkshopPage.tsx:448:11:20789:252:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v158", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v158": ":0:/src/app/pages/AIWorkshopPage.tsx:449:13:20921:103:e:span:t", children: "Who We Work With" }) }), 36196 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v160", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-[#0B1A2E] mb-4", "data-fg-bi7v160": ":0:/src/app/pages/AIWorkshopPage.tsx:451:11:21052:156:e:h2:t", children: "Built for leaders, teams, and partners" }) 36197 ] 36198 } 36199 ), 36200 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v162", _fgB: 1790697589506, className: "grid sm:grid-cols-2 lg:grid-cols-3 gap-6", "data-fg-bi7v162": ":0:/src/app/pages/AIWorkshopPage.tsx:456:9:21240:833:e:div:x", children: Mx.map((t, e) => /* @__PURE__ */ c( 36201 a, 36202 { 36203 _fgT: m.div, 36204 _fgS: "bi7v164", 36205 _fgB: 1790697589506, 36206 initial: { opacity: 0, y: 20 }, 36207 whileInView: { opacity: 1, y: 0 }, 36208 viewport: { once: !0 }, 36209 transition: { duration: 0.5, delay: e * 0.08 }, 36210 className: "p-7 rounded-2xl border border-slate-100 bg-slate-50 hover:border-[#EFBB0F]/30 hover:shadow-md transition-all", 36211 "data-fg-bi7v164": ":0:/src/app/pages/AIWorkshopPage.tsx:458:13:21348:696:e:motion.div:etete", 36212 children: [
36213 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v165", _fgB: 1790697589506, className: "p-3 rounded-xl bg-[#EFBB0F]/10 text-[#EFBB0F] inline-flex mb-4", "data-fg-bi7v165": ":0:/src/app/pages/AIWorkshopPage.tsx:466:15:21748:94:e:div:x", children: t.icon }), 36214 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bi7v167", _fgB: 1790697589506, className: "font-semibold text-[#0B1A2E] text-[16px] mb-2", "data-fg-bi7v167": ":0:/src/app/pages/AIWorkshopPage.tsx:467:15:21857:76:e:h3:x", children: t.label }), 36215 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v169", _fgB: 1790697589506, className: "text-[14px] text-slate-600 leading-relaxed", "data-fg-bi7v169": ":0:/src/app/pages/AIWorkshopPage.tsx:468:15:21948:70:e:p:x", children: t.desc }) 36216 ] 36217 }, 36218 t.label 36219 )) }) 36220 ] }) }); 36221} 36222const hx = [ 36223 { 36224 name: "Transit & Transportation", 36225 tags: ["Rider communications", "Incident summaries", "SOP search", "Reporting", "Maintenance knowledge"], 36226 desc: "Built from direct experience with transit agency AI adoption. Covers rider communications, incident summaries, SOP and policy search, reporting, maintenance knowledge access, and operational support workflows." 36227 }, 36228 { 36229 name: "Public Sector", 36230 tags: ["Constituent comms", "Policy search", "Meeting summaries", "Grant support", "Procurement"], 36231 desc: "Constituent communications, policy and document search, meeting summaries, grant support, procurement support, and internal admin workflows. Includes considerations for compliance and governance in regulated environments." 36232 }, 36233 { 36234 name: "Operations & Service Teams", 36235 tags: ["Documentation", "Status reporting", "Knowledge retrieval", "Process handoffs"], 36236 desc: "Documentation, recurring updates, status reporting, task coordination, knowledge retrieval, and process handoffs. Focus on reducing friction in the work that happens every day." 36237 }, 36238 { 36239 name: "Finance & Administrative", 36240 tags: ["Report drafting", "Research support", "Analysis support", "Process standardization"], 36241 desc: "Report drafting, research support, recurring documentation, internal communications, analysis support, and process standardization. Practical application in the workflows CFOs and finance teams already own." 36242 } 36243]; 36244function mx() { 36245 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v171", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-[#0B1A2E] font-['DM_Sans']", "data-fg-bi7v171": ":0:/src/app/pages/AIWorkshopPage.tsx:503:5:23656:2050:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v172", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v172": ":0:/src/app/pages/AIWorkshopPage.tsx:504:7:23720:1971:e:div:ete", children: [ 36246 /* @__PURE__ */ c( 36247 a, 36248 { 36249 _fgT: m.div, 36250 _fgS: "bi7v173", 36251 _fgB: 1790697589506, 36252 initial: { opacity: 0, y: 20 }, 36253 whileInView: { opacity: 1, y: 0 }, 36254 viewport: { once: !0 }, 36255 className: "text-center mb-14", 36256 "data-fg-bi7v173": ":0:/src/app/pages/AIWorkshopPage.tsx:505:9:23774:842:e:motion.div:etete", 36257 children: [
36258 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v174", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v174": ":0:/src/app/pages/AIWorkshopPage.tsx:511:11:23969:250:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v175", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v175": ":0:/src/app/pages/AIWorkshopPage.tsx:512:13:24101:101:e:span:t", children: "Industry Focus" }) }), 36259 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v177", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-white mb-4", "data-fg-bi7v177": ":0:/src/app/pages/AIWorkshopPage.tsx:514:11:24230:153:e:h2:t", children: "Tailored to your industry and workflows" }), 36260 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v179", _fgB: 1790697589506, className: "text-[17px] text-[#8B9BB5] max-w-[560px] mx-auto", "data-fg-bi7v179": ":0:/src/app/pages/AIWorkshopPage.tsx:517:11:24394:200:e:p:t", children: "Generic examples do not stick. We tailor workshops to the workflows and challenges your team actually faces." }) 36261 ] 36262 } 36263 ), 36264 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v181", _fgB: 1790697589506, className: "grid md:grid-cols-2 gap-6", "data-fg-bi7v181": ":0:/src/app/pages/AIWorkshopPage.tsx:522:9:24626:1052:e:div:x", children: hx.map((t, e) => /* @__PURE__ */ c( 36265 a, 36266 { 36267 _fgT: m.div, 36268 _fgS: "bi7v183", 36269 _fgB: 1790697589506, 36270 initial: { opacity: 0, y: 20 }, 36271 whileInView: { opacity: 1, y: 0 }, 36272 viewport: { once: !0 }, 36273 transition: { duration: 0.5, delay: e * 0.1 }, 36274 className: "p-7 rounded-2xl bg-white/5 border border-white/10 hover:border-[#EFBB0F]/30 transition-colors", 36275 "data-fg-bi7v183": ":0:/src/app/pages/AIWorkshopPage.tsx:524:13:24722:927:e:motion.div:etete", 36276 children: [
36277 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bi7v184", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[22px] text-white mb-3", "data-fg-bi7v184": ":0:/src/app/pages/AIWorkshopPage.tsx:532:15:25107:85:e:h3:x", children: t.name }), 36278 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v186", _fgB: 1790697589506, className: "text-[14px] text-[#8B9BB5] leading-relaxed mb-5", "data-fg-bi7v186": ":0:/src/app/pages/AIWorkshopPage.tsx:533:15:25207:77:e:p:x", children: t.desc }), 36279 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v188", _fgB: 1790697589506, className: "flex flex-wrap gap-2", "data-fg-bi7v188": ":0:/src/app/pages/AIWorkshopPage.tsx:534:15:25299:324:e:div:x", children: t.tags.map((s) => /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v190", _fgB: 1790697589506, className: "px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/20 text-[#EFBB0F] text-[12px] font-medium", "data-fg-bi7v190": ":0:/src/app/pages/AIWorkshopPage.tsx:536:19:25397:185:e:span:x", children: s }, s)) }) 36280 ] 36281 }, 36282 t.name 36283 )) }) 36284 ] }) }); 36285} 36286const z6 = [ 36287 { 36288 num: "01", 36289 title: "Assess the Current State", 36290 desc: "Start with an AI readiness assessment, a discovery conversation, or a focused intake process to understand where your organization is today." 36291 }, 36292 { 36293 num: "02", 36294 title: "Run the Workshop", 36295 desc: "We tailor the session to your audience, priorities, workflows, and maturity level. Every workshop ends with clear outputs participants can act on." 36296 }, 36297 { 36298 num: "03", 36299 title: "Prioritize the Next Moves", 36300 desc: "We identify what matters most now, what should wait, and what is worth piloting. You leave with a clearer picture of where to invest effort next." 36301 }, 36302 { 36303 num: "04", 36304 title: "Move Into Pilots or Implementation", 36305 desc: "When the organization is ready, workshops lead into pilot design, governance work, workflow automation planning, or full implementation support." 36306 } 36307]; 36308function xx() { 36309 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v192", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-white font-['DM_Sans']", "data-fg-bi7v192": ":0:/src/app/pages/AIWorkshopPage.tsx:575:5:26694:2637:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v193", _fgB: 1790697589506, className: "max-w-[1280px] mx-auto px-6", "data-fg-bi7v193": ":0:/src/app/pages/AIWorkshopPage.tsx:576:7:26754:2562:e:div:etete", children: [ 36310 /* @__PURE__ */ c( 36311 a, 36312 { 36313 _fgT: m.div, 36314 _fgS: "bi7v194", 36315 _fgB: 1790697589506, 36316 initial: { opacity: 0, y: 20 }, 36317 whileInView: { opacity: 1, y: 0 }, 36318 viewport: { once: !0 }, 36319 className: "text-center mb-16", 36320 "data-fg-bi7v194": ":0:/src/app/pages/AIWorkshopPage.tsx:577:9:26808:640:e:motion.div:ete", 36321 children: [
36322 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v195", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v195": ":0:/src/app/pages/AIWorkshopPage.tsx:583:11:27003:248:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v196", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v196": ":0:/src/app/pages/AIWorkshopPage.tsx:584:13:27135:99:e:span:t", children: "How It Works" }) }), 36323 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v198", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-[#0B1A2E] mb-4", "data-fg-bi7v198": ":0:/src/app/pages/AIWorkshopPage.tsx:586:11:27262:164:e:h2:t", children: "A clear path from first conversation to action" }) 36324 ] 36325 } 36326 ), 36327 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v200", _fgB: 1790697589506, className: "grid md:grid-cols-2 lg:grid-cols-4 gap-6", "data-fg-bi7v200": ":0:/src/app/pages/AIWorkshopPage.tsx:591:9:27458:1016:e:div:x", children: z6.map((t, e) => /* @__PURE__ */ c( 36328 a, 36329 { 36330 _fgT: m.div, 36331 _fgS: "bi7v202", 36332 _fgB: 1790697589506, 36333 initial: { opacity: 0, y: 20 }, 36334 whileInView: { opacity: 1, y: 0 }, 36335 viewport: { once: !0 }, 36336 transition: { duration: 0.5, delay: e * 0.1 }, 36337 className: "relative", 36338 "data-fg-bi7v202": ":0:/src/app/pages/AIWorkshopPage.tsx:593:13:27562:883:e:motion.div:xte", 36339 children: [ 36340 e < z6.length - 1 && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v204", _fgB: 1790697589506, className: "hidden lg:block absolute top-8 left-full w-6 h-px bg-[#EFBB0F]/30 z-10", "data-fg-bi7v204": ":0:/src/app/pages/AIWorkshopPage.tsx:602:17:27902:90:e:div" }),
36341 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v205", _fgB: 1790697589506, className: "p-7 rounded-2xl bg-slate-50 border border-slate-100 h-full", "data-fg-bi7v205": ":0:/src/app/pages/AIWorkshopPage.tsx:604:15:28024:395:e:div:etete", children: [ 36342 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v206", _fgB: 1790697589506, className: "text-[#EFBB0F] font-['DM_Serif_Display'] text-[40px] leading-none mb-4", "data-fg-bi7v206": ":0:/src/app/pages/AIWorkshopPage.tsx:605:17:28117:101:e:div:x", children: t.num }), 36343 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "bi7v208", _fgB: 1790697589506, className: "font-semibold text-[#0B1A2E] text-[16px] mb-3", "data-fg-bi7v208": ":0:/src/app/pages/AIWorkshopPage.tsx:606:17:28235:76:e:h3:x", children: t.title }), 36344 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v210", _fgB: 1790697589506, className: "text-[14px] text-slate-600 leading-relaxed", "data-fg-bi7v210": ":0:/src/app/pages/AIWorkshopPage.tsx:607:17:28328:70:e:p:x", children: t.desc }) 36345 ] }) 36346 ] 36347 }, 36348 t.num 36349 )) }), 36350 /* @__PURE__ */ c( 36351 a, 36352 { 36353 _fgT: m.div, 36354 _fgS: "bi7v212", 36355 _fgB: 1790697589506, 36356 initial: { opacity: 0, y: 16 }, 36357 whileInView: { opacity: 1, y: 0 }, 36358 viewport: { once: !0 }, 36359 transition: { duration: 0.5, delay: 0.4 }, 36360 className: "mt-12 p-6 rounded-xl bg-[#EFBB0F]/8 border border-[#EFBB0F]/20 text-center", 36361 "data-fg-bi7v212": ":0:/src/app/pages/AIWorkshopPage.tsx:613:9:28484:819:e:motion.div:ete", 36362 children: [
36363 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v213", _fgB: 1790697589506, className: "text-[16px] text-slate-700 italic mb-5", "data-fg-bi7v213": ":0:/src/app/pages/AIWorkshopPage.tsx:620:11:28789:212:e:p:t", children: '"Not sure where to start? A 30-minute discovery conversation is enough to figure out the right entry point for your organization."' }), 36364 /* @__PURE__ */ c( 36365 a, 36366 { 36367 _fgT: "a", 36368 _fgS: "bi7v215", 36369 _fgB: 1790697589506, 36370 href: "/meet", 36371 className: "inline-flex items-center gap-2 px-6 py-3 bg-[#EFBB0F] text-[#0B1A2E] rounded-lg font-bold text-[14px] hover:bg-[#d9a80d] transition-colors", 36372 "data-fg-bi7v215": ":0:/src/app/pages/AIWorkshopPage.tsx:623:11:29012:269:e:a:te", 36373 children: [ 36374 "Book a Meeting ", 36375 /* @__PURE__ */ i(a, { _fgT: D, _fgS: "bi7v217", _fgB: 1790697589506, size: 14, "data-fg-bi7v217": ":0:node_modules/lucide-react:627:28:29242:24:e:ArrowRight::::::s5N" }) 36376 ] 36377 } 36378 ) 36379 ] 36380 } 36381 ) 36382 ] }) }); 36383} 36384const _x = [ 36385 { 36386 q: "What is the difference between an AI workshop and AI training?", 36387 a: "Training usually focuses on knowledge transfer. A workshop is more practical and action oriented. Our workshops still teach the foundations, but they are built to help teams apply what they learn, identify opportunities, and decide what comes next. The goal is progress, not just awareness." 36388 }, 36389 { 36390 q: "Are these workshops customized?", 36391 a: "Yes. We tailor examples, exercises, and discussion points to the audience, industry, and workflows involved. The structure stays consistent, but the content reflects your organization's actual work. Generic examples do not stick." 36392 }, 36393 { 36394 q: "Are workshops available virtually or onsite?", 36395 a: "Yes. Format depends on the workshop type, goals, and audience. Both virtual and onsite options are available. We discuss what works best during discovery." 36396 }, 36397 { 36398 q: "Who should attend?", 36399 a: "That depends on the session. Some workshops are designed for all staff or departmental groups. Others are better suited for leaders, cross-functional stakeholders, or organizations evaluating next step pilots. We help you figure out the right audience during intake." 36400 }, 36401 { 36402 q: "Do we need to be advanced in AI already?", 36403 a: "No. Many organizations start with foundational sessions. The point is to meet your team where it is and build from there. We have worked with organizations ranging from no prior AI usage to teams actively deploying tools." 36404 }, 36405 { 36406 q: "What happens after the workshop?", 36407 a: "Some organizations stop after the workshop. Others move into assessments, governance planning, pilot design, or implementation support. We can help with that next phase when needed, but there is no obligation to continue." 36408 }, 36409 { 36410 q: "Can these be offered through partners or associations?", 36411 a: "Yes. Workshops can be delivered directly, co-branded, or structured as part of a broader partner relationship. We work with consultants, agencies, associations, and platform partners looking to offer practical AI education to their clients or members." 36412 } 36413]; 36414function bx() { 36415 const [t, e] = j(null); 36416 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v218", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-[#0B1A2E] font-['DM_Sans']", "data-fg-bi7v218": ":0:/src/app/pages/AIWorkshopPage.tsx:671:5:31614:1944:e:section:e:1", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v219", _fgB: 1790697589506, className: "max-w-[860px] mx-auto px-6", "data-fg-bi7v219": ":0:/src/app/pages/AIWorkshopPage.tsx:672:7:31678:1865:e:div:ete", children: [ 36417 /* @__PURE__ */ c( 36418 a, 36419 { 36420 _fgT: m.div, 36421 _fgS: "bi7v220", 36422 _fgB: 1790697589506, 36423 initial: { opacity: 0, y: 20 }, 36424 whileInView: { opacity: 1, y: 0 }, 36425 viewport: { once: !0 }, 36426 className: "text-center mb-14", 36427 "data-fg-bi7v220": ":0:/src/app/pages/AIWorkshopPage.tsx:673:9:31731:602:e:motion.div:ete", 36428 children: [
36429 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v221", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-5", "data-fg-bi7v221": ":0:/src/app/pages/AIWorkshopPage.tsx:679:11:31926:239:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v222", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v222": ":0:/src/app/pages/AIWorkshopPage.tsx:680:13:32058:90:e:span:t", children: "FAQ" }) }), 36430 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v224", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[44px] text-white", "data-fg-bi7v224": ":0:/src/app/pages/AIWorkshopPage.tsx:682:11:32176:135:e:h2:t", children: "Frequently asked questions" }) 36431 ] 36432 } 36433 ), 36434 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v226", _fgB: 1790697589506, className: "space-y-3", "data-fg-bi7v226": ":0:/src/app/pages/AIWorkshopPage.tsx:687:9:32343:1187:e:div:x", children: _x.map((s, r) => /* @__PURE__ */ c( 36435 a, 36436 { 36437 _fgT: m.div, 36438 _fgS: "bi7v228", 36439 _fgB: 1790697589506, 36440 initial: { opacity: 0, y: 12 }, 36441 whileInView: { opacity: 1, y: 0 }, 36442 viewport: { once: !0 }, 36443 transition: { duration: 0.4, delay: r * 0.05 }, 36444 className: "bg-white/5 border border-white/10 rounded-xl overflow-hidden", 36445 "data-fg-bi7v228": ":0:/src/app/pages/AIWorkshopPage.tsx:689:13:32417:1084:e:motion.div:etx", 36446 children: [
36447 /* @__PURE__ */ c( 36448 a, 36449 { 36450 _fgT: "button", 36451 _fgS: "bi7v229", 36452 _fgB: 1790697589506, 36453 onClick: () => e(t === r ? null : r), 36454 className: "w-full flex items-center justify-between px-6 py-5 text-left gap-4", 36455 "data-fg-bi7v229": ":0:/src/app/pages/AIWorkshopPage.tsx:697:15:32763:504:e:button:ete", 36456 children: [ 36457 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v230", _fgB: 1790697589506, className: "text-[15px] text-white font-medium", "data-fg-bi7v230": ":0:/src/app/pages/AIWorkshopPage.tsx:701:17:32971:67:e:span:x", children: s.q }), 36458 /* @__PURE__ */ i( 36459 a, 36460 { 36461 _fgT: t3, 36462 _fgS: "bi7v232", 36463 _fgB: 1790697589506, 36464 size: 18, 36465 className: `text-[#EFBB0F] shrink-0 transition-transform duration-300 ${t === r ? "rotate-180" : ""}`, 36466 "data-fg-bi7v232": ":0:node_modules/lucide-react:702:17:33055:188:e:ChevronDown::::::Ddn3" 36467 } 36468 ) 36469 ] 36470 } 36471 ), 36472 t === r && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v234", _fgB: 1790697589506, className: "px-6 pb-5", "data-fg-bi7v234": ":0:/src/app/pages/AIWorkshopPage.tsx:708:17:33320:138:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v235", _fgB: 1790697589506, className: "text-[14px] text-[#8B9BB5] leading-relaxed", "data-fg-bi7v235": ":0:/src/app/pages/AIWorkshopPage.tsx:709:19:33366:69:e:p:x", children: s.a }) }) 36473 ] 36474 }, 36475 r 36476 )) }) 36477 ] }) }); 36478} 36479function vx() { 36480 const { openContactModal: t } = Z(); 36481 return /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "bi7v237", _fgB: 1790697589506, _fgD: !0, className: "py-24 bg-white font-['DM_Sans']", "data-fg-bi7v237": ":0:/src/app/pages/AIWorkshopPage.tsx:725:5:33676:1129:e:section:e:1", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bi7v238", _fgB: 1790697589506, className: "max-w-[860px] mx-auto px-6 text-center", "data-fg-bi7v238": ":0:/src/app/pages/AIWorkshopPage.tsx:726:7:33736:1054:e:div:e", children: /* @__PURE__ */ c( 36482 a, 36483 { 36484 _fgT: m.div, 36485 _fgS: "bi7v239", 36486 _fgB: 1790697589506, 36487 initial: { opacity: 0, y: 24 }, 36488 whileInView: { opacity: 1, y: 0 }, 36489 viewport: { once: !0 }, 36490 transition: { duration: 0.6 }, 36491 "data-fg-bi7v239": ":0:/src/app/pages/AIWorkshopPage.tsx:727:9:33801:976:e:motion.div:etete", 36492 children: [
36493 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bi7v240", _fgB: 1790697589506, className: "inline-flex items-center gap-2 px-3 py-1 rounded-full bg-[#EFBB0F]/10 border border-[#EFBB0F]/25 mb-6", "data-fg-bi7v240": ":0:/src/app/pages/AIWorkshopPage.tsx:733:11:33997:311:e:div:ete", children: [ 36494 /* @__PURE__ */ i(a, { _fgT: E3, _fgS: "bi7v241", _fgB: 1790697589506, size: 13, className: "text-[#EFBB0F]", "data-fg-bi7v241": ":0:node_modules/lucide-react:734:13:34129:51:e:TrendingUp::::::tM8" }), 36495 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bi7v242", _fgB: 1790697589506, className: "text-[#EFBB0F] text-[11px] font-bold tracking-[2px] uppercase", "data-fg-bi7v242": ":0:/src/app/pages/AIWorkshopPage.tsx:735:13:34193:98:e:span:t", children: "Get Started" }) 36496 ] }), 36497 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "bi7v244", _fgB: 1790697589506, className: "font-['DM_Serif_Display'] text-[36px] md:text-[48px] text-[#0B1A2E] mb-6 leading-[1.1]", "data-fg-bi7v244": ":0:/src/app/pages/AIWorkshopPage.tsx:737:11:34319:171:e:h2:t", children: "Ready to move from curiosity to action?" }),
36498 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bi7v246", _fgB: 1790697589506, className: "text-[17px] text-slate-600 leading-relaxed mb-10 max-w-[560px] mx-auto", "data-fg-bi7v246": ":0:/src/app/pages/AIWorkshopPage.tsx:740:11:34501:254:e:p:t", children: "A 30-minute discovery conversation is all it takes to figure out the right workshop format, audience, and entry point for your organization." }) 36499 ] 36500 } 36501 ) }) }); 36502} 36503const yx = "go-time-annapolis", wx = "Go! Time: Two Years of On-Demand Transit in Maryland's Capital", Tx = "go-time-annapolis", Sx = "Dr. Hesam Rashidi", Bx = "Deployment Notes", kx = "2026-09-01", Ax = "go-time-annapolis-hero", Nx = "How Annapolis replaced two fixed bus routes with on-demand service, expanded walkable transit access by close to a square mile, and what two years of human-centered automated dispatch actually changed.", Ix = "", Px = [], Cx = { 36504 id: yx, 36505 title: wx, 36506 slug: Tx, 36507 author: Sx, 36508 category: Bx, 36509 publishedDate: kx, 36510 headerImage: Ax, 36511 excerpt: Nx, 36512 content: Ix, 36513 downloads: Px 36514}, Fx = "optimizing-dial-a-ride-services-in-maryland", Ex = "Optimizing Dial-a-Ride Services in Maryland", Rx = "optimizing-dial-a-ride-services-in-maryland", Dx = "Nikola MarkoviÄ, Rahul Nair, Paul Schonfeld, Elise Miller-Hooks (University of Maryland / IBM Research) and Matthew Mohebbi (IT Curves)", zx = "Research", jx = "2021-07-20", Ox = "figma:asset/6a2dfe6e9364f4cd1dadae79a87d992c4d16a57c.png", Vx = "This paper reports on a system developed to address the dial-a-ride problem and an implementation for Maryland where real-world practical constraints are considered. The Mobile Resource Management System (MRMS), developed jointly by IT Curves and the University of Maryland, was deployed at Regency Taxi â yielding an estimated annual cost reduction of $0.82 million (approximately 18% of total operating expense). Preprint submitted to Transportation Research Part C: Emerging Technologies, January 2015.", Hx = `<p><em>Preprint submitted to Transportation Research Part C: Emerging Technologies, January 2015</em></p> 36515 36516<h2>Key Results</h2> 36517 36518<p>Annual operational expense reduction of <strong>$0.82 million</strong> (approximately <strong>18% of total operating expense</strong>) with improved service quality and environmental benefits.</p> 36519 36520<ul> 36521<li><strong>12.8% reduction</strong> in routes, <strong>22.4% decrease</strong> in vehicle-kilometers</li> 36522<li><strong>7-minute computation</strong> for 450 daily requests</li> 36523<li>Fleet optimization: 35-45 vehicles depending on constraints</li> 36524<li>Dynamic optimization handles both pre-scheduled and real-time requests</li> 36525</ul> 36526 36527<p><em>Comprehensive journal paper with mathematical formulations, benchmark testing, and strategic planning insights for dial-a-ride operations.</em></p>`, Zx = [{ title: "Download Full Article (PDF)", url: "https://theorangegraphics.com/designsamples/itc/wp-content/uploads/2021/08/optimal_dial_a_ride-.pdf", type: "PDF" }], Wx = { 36528 id: Fx, 36529 title: Ex, 36530 slug: Rx, 36531 author: Dx, 36532 category: zx, 36533 publishedDate: jx, 36534 headerImage: Ox, 36535 excerpt: Vx, 36536 content: Hx, 36537 downloads: Zx 36538}, $x = "dial-a-ride-solution", qx = "Dial-a-Ride Solution", Ux = "dial-a-ride-solution", Gx = "Nikola MarkoviÄ, Rahul Nair, Paul Schonfeld, Elise Miller-Hooks (University of Maryland / IBM Research) and Matthew Mohebbi (IT Curves)", Jx = "Research", Kx = "2021-07-20", Yx = "figma:asset/288b299000b5556d9cc09c77679be47935703a53.png", Xx = "This paper describes the development and implementation of a computerized system â the Mobile Resource Management System (MRMS) â for managing shared-ride prescheduled door-to-door transportation services for elderly and disabled passengers. A joint project between IT Curves and the University of Maryland, the MRMS was implemented at Regency Taxi, yielding an estimated annual cost reduction of $0.82 million (approximately 17% of total operating expense).", Qx = `<p><strong>Authors:</strong> Nikola MarkoviÄ, Rahul Nair, Paul Schonfeld, Elise Miller-Hooks (University of Maryland / IBM Research) and Matthew Mohebbi (IT Curves)</p> 36539 36540<h2>Key Results</h2> 36541 36542<p>Switching from manual to MRMS computerized vehicle routing and scheduling yielded Regency Taxi many benefits with an estimated annual operational expense reduction of <strong>$0.82 million</strong>, or about <strong>17% of total annual expense</strong>.</p> 36543 36544<ul> 36545<li><strong>12.8% reduction</strong> in number of routes</li> 36546<li><strong>22.4% decrease</strong> in vehicle-kilometers traveled</li> 36547<li><strong>
365477-minute computation time</strong> for 450 daily requests</li> 36548<li><strong>12 dispatcher-hours saved</strong> per day in manual route planning</li> 36549<li>Fleet optimization: 35-45 vehicles depending on time window constraints</li> 36550</ul> 36551 36552<p><em>This comprehensive research paper includes detailed mathematical formulations, algorithm descriptions, benchmark testing results, and extensive business analytics demonstrating the MRMS system's effectiveness in real-world operations at Regency Taxi, one of Maryland's largest dial-a-ride service providers.</em></p>`, e_ = [{ title: "Download Full Article (PDF)", url: "https://theorangegraphics.com/designsamples/itc/wp-content/uploads/2021/08/dial_a_ride_solution.pdf", type: "PDF" }], t_ = { 36553 id: $x, 36554 title: qx, 36555 slug: Ux, 36556 author: Gx, 36557 category: Jx, 36558 publishedDate: Kx, 36559 headerImage: Yx, 36560 excerpt: Xx, 36561 content: Qx, 36562 downloads: e_ 36563}, a_ = "airport-shuttle-exact-solution", s_ = "Airport Shuttle â Exact Solution", i_ = "airport-shuttle-exact-solution", r_ = "Lei Feng, Elise Miller-Hooks, Paul Schonfeld (University of Maryland) and Matthew Mohebbi (IT Curves / Supreme Airport Shuttle, Inc.)", n_ = "Research", o_ = "2021-08-10", L_ = "figma:asset/67b6ef54d2d1b0506ea9402d781c39b82ca7968e.png", c_ = "A peer-reviewed paper addressing the problem of optimally routing and scheduling airport shuttle vehicles through ridesharing. Formulated as a mixed integer program, with an exact constraint programming solution and two heuristic approaches evaluated on real-world data from Washington Dulles International Airport. Originally submitted to the 2014 Transportation Research Board 93rd Annual Meeting.", l_ = `<p><strong>Submitted for presentation at the 2014 Transportation Research Board 93rd Annual Meeting</strong></p> 36564 36565<p><strong>Authors:</strong> Lei Feng, Elise Miller-Hooks, Paul Schonfeld (University of Maryland) and Matthew Mohebbi (IT Curves / Supreme Airport Shuttle, Inc.)</p> 36566 36567<h2>Abstract</h2> 36568 36569<p>This paper addresses the problem of optimally routing and scheduling airport shuttle vehicles that offer pickup and drop-off services to customers through ridesharing. This problem, which is a version of the Dial-A-Ride Problem (DARP), is formulated as a mixed integer program. An exact solution approach applying constraint programming within a column generation framework is proposed, as well as adaptations of two existing heuristics, for its solution.</p> 36570 36571<figure class="my-8"> 36572 <img src="figma:asset/e464cb82891e9b87225eb11cd56eebe5bba7fb05.png" alt="Distribution of pickup and dropoff locations" width="492" class="rounded-xl shadow-lg mx-auto" /> 36573</figure> 36574 36575<p>Performance of the proposed approaches in terms of computational requirements and solution quality is evaluated on a real-world case study involving service records for one service day out of Washington Dulles International Airport provided by an actual airport shuttle service provider. Results show that the heuristics provide good approximations to the exact solution.</p> 36576 36577<h3>Key Findings:</h3> 36578<ul> 36579<li><strong>60% improvement</strong> in vehicle utilization (17 vehicles vs. 37 in manual operations)</li> 36580<li>Jaw's algorithm within 7% of exact solution with 1/1200 computation time</li> 36581<li>Three operational policies tested: separate handling, simultaneous handling, and clustered backhauls</li> 36582<li>Real-world validation with 164 outbound and 22 inbound requests from Washington Dulles (IAD)</li> 36583</ul> 36584 36585<p><em>This peer-reviewed research demonstrates practical applications for passenger feeder problems, school bus routing, carpooling, and reverse logistics operations.</em></p>`, d_ = [{ title: "Download Full Article (PDF)", url: "https://theorangegraphics.com/designsamples/itc/wp-content/uploads/2021/08/airport_shuttle_exact_solution.pdf", type: "PDF" }], g_ = { 36586 id: a_, 36587 title: s_, 36588 slug: i_, 36589 author: r_, 36590 category: n_, 36591 publishedDate: o_, 36592 headerImage: L_, 36593 excerpt: c_, 36594 content: l_, 36595 downloads: d_ 36596}, f_ = "management-system-for-dial-a-ride-operations", p_ = "Management System for Dial-a-Ride Operations", M_ = "management-system-for-dial-a-ride-operations", u_ = "Matthew Mohebbi (IT Curves) with Elise Miller-Hooks and Paul Schonfeld (University of Maryland); Student Researchers: Nikola MarkoviÄ, Bing Qi, Lei Feng", h_ = "Research", m_ = "2021-08-10", x_ = "figma:asset/383cc9a4347b75a8a63583ada4c3071702bde6a7.png", __ = "Objective of our MIPS Project: Develop a commercially successful fleet management tool to supp
36596ort paratransit operations as part of the Mobile Resources Management System (MRMS)", b_ = `<p><strong>Industry partner:</strong> IT Curves | <strong>Lead:</strong> Matthew Mohebbi<br /><strong>Academic partner:</strong> Dept. of Civil and Env. Eng., University of Maryland<br /><strong>Co-PIs:</strong> Elise Miller-Hooks and Paul Schonfeld<br /><strong>Student Researchers:</strong> Nikola MarkoviÄ, Bing Qi, and Lei Feng</p> 36597 36598<p><strong>Objective of our MIPS Project</strong></p> 36599 36600<p>Develop a commercially successful fleet management tool to support paratransit operations as part of the Mobile Resources Management System (MRMS)</p> 36601 36602<figure class="my-8"><img src="figma:asset/118ddc7b2211104bb2ded959b514bd71a27f22f0.png" alt="MIPS Project objective diagram" width="446" height="284" class="rounded-xl shadow-lg mx-auto" /></figure> 36603 36604<p>Include algorithms within the MRMS to enable paratransit operators to efficiently schedule and route vehicles while satisfying various service constraints</p> 36605 36606<p><strong>Paratransit: Dial-a-Ride</strong></p> 36607 36608<p>Better accessibility to public transportation has become an important objective for many transit systems across the world</p> 36609 36610<p>This objective has been partially achieved by installing elevators in metro stations, introducing low-floor buses, and implementing higher platforms</p> 36611 36612<figure class="my-8"><img src="figma:asset/83bf4411a547dc144586c9c4e8719aa68c9f7156.png" alt="Paratransit accessibility" width="440" height="173" class="rounded-xl shadow-lg mx-auto" /></figure> 36613 36614<p>Some handicapped or elderly people need additional help, may find the closest stop to be too far away, or the headway too long to wait</p> 36615 36616<p>Washington Metropolitan Area Transit Authority (WMATA) offers these people a special door-to-door transportation which is often referred to as dial-a-ride (DAR) service</p> 36617 36618<p><strong>Ridership and Eligibility</strong></p> 36619 36620<p>WMATA started providing DAR service in 1994, and since that time the annual ridership has grown from 200,000 to over 2.4 million passengers, making this the sixth largest U.S. DAR operation.</p> 36621 36622<p>WMATA staff determines eligibility to use the service in response to written applications, based on the recommendations from Americans with Disability Act (ADA) from 1990.</p> 36623 36624<figure class="my-8"><img src="figma:asset/c3bdcb20fc965d58d19337b4ee6417e79126e306.png" alt="ADA logo" width="112" height="110" class="rounded-xl shadow-lg mx-auto" /></figure> 36625 36626<p>ADA defines three categories of people who are eligible for paratransit. They include persons who:</p> 36627<ol> 36628<li>Are unable to get on, ride, or get off an accessible public transit vehicle due to a physical or mental impairment</li> 36629<li>Need the assistance of a wheelchair lift or other boarding assistance device, BUT such a vehicle is not available on the route when the individual wants to travel</li> 36630<li>Have a specific impairment-related condition which prevents travel to or from a station or stop on the system</li> 36631</ol> 36632 36633<p><strong>Subsidies</strong></p> 36634 36635<p>Riders pay twice the quickest fixed-route transit fare â up to a maximum of $7 per ride. This does not cover the cost of a trip. To cover the remainder, the local jurisdiction pays WMATA $45 for each trip!</p> 36636 36637<figure class="my-8"><img src="figma:asset/6d0c304e7a41fba46779283a4a397d8eba0957c6.png" alt="WMATA service area map" width="543" height="305" class="rounded-xl shadow-lg mx-auto" /></figure> 36638 36639<p>WMATA does not provide these services directly, but instead contracts the work out to private companies like Challenger Transportation.</p> 36640 36641<p><strong>Trip Requests</strong></p> 36642 36643<p>Customers schedule a trip by specifying:</p> 36644<ul> 36645<li>Pickup and drop-off address</li> 36646<li>Desired pickup or drop-off time</li> 36647</ul> 36648<p>Based on desired pickup or drop-off time the operator can design related time windows.</p> 36649 36650<p><strong>Future Trends in Paratransit</strong></p> 36651 36652<p>Dial-a-Ride service is the fastest growing part of WMATA's budget: Paratransit ridership growth of more than 10% per year is reported for 2006 through 2009, and this trend is expected to continue. This implies that any efficie
36652ncy gained in current operations of Challenger Transportation will only increase in the future.</p> 36653 36654<figure class="my-8"><img src="figma:asset/96ea3096b56acecc1f9d3c48cc9d2a6f5d79fbb5.png" alt="Paratransit growth trends" width="734" height="228" class="rounded-xl shadow-lg mx-auto" /></figure> 36655 36656<p>Similar trends are observed in other paratransit operations: Metro Council of St. Paul, Minnesota warned that paratransit ridership may grow by as much as 6% per year for the next 10 years.</p> 36657 36658<p>In response to these trends, other DAR companies are looking for opportunities to switch to computerized vehicle routing and scheduling:</p> 36659<ol> 36660<li>To reduce manual effort</li> 36661<li>Increase operational efficiency</li> 36662<li>Improve responsiveness to customer needs</li> 36663</ol> 36664 36665<p><strong>Dial-a-Ride Problem (DARP)</strong></p> 36666 36667<p>The dial-a-ride (paratransit) operator seeks to design routes and schedules that:</p> 36668 36669<figure class="my-8"><img src="figma:asset/2d3f1eaa012e05015df2f859cde1c91ab17a2d28.png" alt="DARP problem formulation" width="1024" height="452" class="rounded-xl shadow-lg mx-auto" /></figure> 36670 36671<p>We should distinguish between static and dynamic DARP. In static DARP all the requests are made at least a day in advance and the operator typically allows his dispatchers several hours to design routes and schedules.</p> 36672 36673<figure class="my-8"><img src="figma:asset/cac31caf4fdd22fe83d150c1b5d42af03d07365f.png" alt="Static vs dynamic DARP" width="639" height="202" class="rounded-xl shadow-lg mx-auto" /></figure> 36674 36675<p>In dynamic DARP additional requests may be received on short notice, after some vehicles are already providing service and the operator must quickly assign new requests while considering previously built routes and schedules.</p> 36676 36677<p><strong>Static DARP: Solution Methods</strong></p> 36678 36679<p>Exact methods:</p> 36680<ul> 36681<li>Dynamic programming</li> 36682<li>Mathematical optimization using: Branch & Cut, Branch & Price or integer L-shaped method</li> 36683</ul> 36684 36685<figure class="my-8"><img src="figma:asset/71bba80b8d465ac757ab1f18f22cda23cc52f428.png" alt="Exact solution methods" width="826" height="230" class="rounded-xl shadow-lg mx-auto" /></figure> 36686 36687<p>Heuristic methods:</p> 36688<ul> 36689<li>Cluster first, chain second</li> 36690<li>Insertion heuristic</li> 36691</ul> 36692 36693<figure class="my-8"><img src="figma:asset/dd25b5b4c2c834e524a7c1a58ff1b6d5988afa71.png" alt="Heuristic methods" width="719" height="91" class="rounded-xl shadow-lg mx-auto" /></figure> 36694 36695<p>Metaheuristic methods:</p> 36696<ul> 36697<li>Tabu search</li> 36698<li>Simulated annealing</li> 36699<li>Genetic algorithms</li> 36700<li>Variable neighborhood search</li> 36701<li>Ant colony optimization</li> 36702</ul> 36703 36704<figure class="my-8"><img src="figma:asset/e9f0e79e1481968744d01c0eb5e060ee48914343.png" alt="Metaheuristic methods" width="1004" height="368" class="rounded-xl shadow-lg mx-auto" /></figure> 36705 36706<p><strong>Selecting a Solution Method</strong></p> 36707 36708<p>Company's requirements regarding solution method for static DARP:</p> 36709<ol> 36710<li>To provide feasible solution to problems involving up to 5000 requests</li> 36711<li>To yield a feasible solution within less than 5 hrs of computation time</li> 36712</ol> 36713 36714<figure class="my-8"><img src="figma:asset/e5bb79093872c972eb2a284ddea020d2669baf2c.png" alt="Solution method selection" width="676" height="198" class="rounded-xl shadow-lg mx-auto" /></figure> 36715 36716<p>Based on company's requirements an insertion heuristic was devised. The Parallel Insertion Heuristic (Jaw et al. 1986) was identified as the most promising core algorithm on which to build.</p> 36717 36718<p><strong>Parallel Insertion Heuristic (PIN)</strong></p> 36719 36720<p>Sort all customers by the earliest pickup time (or other criteria). Starting with the first customer and one vehicle:</p> 36721<ol> 36722<li>Insert the customer in vehicle route that has the lowest cost</li> 36723<li>If no vehicle can serve this customer, add vehicle to fleet, and assign this new vehicle to serve the customer</li> 36724</ol> 36725 36726<figure class="my-8"><img src="figma:asset/0685852f870466c2eb8721c4f59b5de75c3d2641.png" alt="Parallel Insertion Heuristic" width="804" height="204" class="rounded-xl shadow-lg mx-auto" /></figure> 36727 36728<p><strong>Modifications</strong></p> 36729 36730<p>Our insertion algorithm differs from the classic PIN in the following ways:</p> 36731<ol> 36732<li>Blocks and Locked Blocks</li> 36733<li>Outlier Procedures</li> 36734<li>Additional Performance Measures</li> 36735<li>Improvement Procedure</li> 36736<li>Rejected-Reinsertion Operator</li> 36737<li>Objective Function(s)</li> 36738<li>Drop-off and Mixed Pick-up/Drop-off Modes</li> 36739</ol> 36740 36741<figure class="my-8"><img src="figma:asset/05cae524ee189cde0b3fcf35a2b212d968d4fd64.png" alt="Algorithm modifications diagram" width="304" height="234" class="rounded-xl shadow-lg mx-auto" /></figure> 36742 36743<p>The above features enabled a state-of-the-art algorithm to be applied in the daily operations of Challenger Transportation.</p> 36744 36745<figure class="my-8"><img src="figma:asset/095a5767fce0eb57c82a67a919adea882102cc40.png" alt="Algorithm in practice" width="259" height="218" class="rounded-xl shadow-lg mx-auto" /></figure> 36746 36747<p><strong>Challenger Case Study</strong></p> 36748 36749<p>The parallel insertion heuristic was tested on real-world data coming from Challenger Transportation.</p> 36750 36751<figure class="my-8"><img src="figma:asset/cc9f3b5eb774dfe7bd59d800688742b3ec5f336d.png" alt="Challenger Transportation case study" width="713" height="215" class="rounded-xl shadow-lg mx-auto" /></figure> 36752 36753<p>Challenger Transportation receives about 450 requests that need to be served on the following day (static DARP). The common time window for specified pickup is 60 min, the maximum route duration is 12 hours, and vehicle capacity is 7 passengers.</p> 36754 36755<p>The parallel insertion algorithm took about 7 min to build a feasible solution.</p> 36756 36757<figure class="my-8"><img src="figma:asset/fef00d5077678e16ccb75269a5c7e5b5be6f0508.png" alt="Algorithm results" width="852" height="343" class="rounded-xl shadow-lg mx-auto" /></figure> 36758 36759<p>We compared the MRMS-based routes with manually built route manifest and concluded that the number of routes and vehicle-km decreased by 12.8% and 22.4%, respectively.</p> 36760 36761<figure class="my-8"><img src="figma:asset/c4276f67b7de01d07887ca24acab55551c2126fd.png" alt="Route comparison results" width="1024" height="368" class="rounded-xl shadow-lg mx-auto" /></figure> 36762 36763<p>Any additional savings?</p> 36764 36765<p>The effects of time windows and route duration limit on fleet size:</p> 36766 36767<figure class="my-8"><img src="figma:asset/007c5c3cf2ef96da72614391f7eb1f36ee139ce9.png" alt="Fleet size effects" width="816" height="385" class="rounded-xl shadow-lg mx-auto" /></figure> 36768 36769<p>
36769Thus, fewer vehicles are needed as the time windows and route duration limits are relaxed.</p> 36770 36771<p>The effects of time windows and route duration limit on operator's cost:</p> 36772 36773<figure class="my-8"><img src="figma:asset/97644761193d90c6610a5d54e016e18b15790a22.png" alt="Operator cost effects" width="816" height="385" class="rounded-xl shadow-lg mx-auto" /></figure> 36774 36775<p>Thus, the operator's cost decreases as the time windows and route duration limits are relaxed.</p> 36776 36777<p>The tool allows for further study to gain insights. For example:</p> 36778 36779<figure class="my-8"><img src="figma:asset/fe04e25ad98773fd9709fb006efd33ec10803093.png" alt="Demand pattern analysis" width="816" height="407" class="rounded-xl shadow-lg mx-auto" /></figure> 36780 36781<p>Steadier demand reduces the fleet and operator costs needed to serve all requests.</p> 36782 36783<p>The effects of vehicle capacity on fleet size:</p> 36784 36785<figure class="my-8"><img src="figma:asset/00bfe9c0798b22764ac6462fc2edf7f5885f492c.png" alt="Vehicle capacity effects" width="651" height="329" class="rounded-xl shadow-lg mx-auto" /></figure> 36786 36787<p>The effects of time windows on system performance measures:</p> 36788 36789<figure class="my-8"><img src="figma:asset/03994b5ed20e6ad599da99fec7340f2c492cded7.png" alt="System performance measures" width="860" height="493" class="rounded-xl shadow-lg mx-auto" /></figure> 36790 36791<p><strong>Dynamic DARP</strong></p> 36792 36793<p>The vast majority (about 90%) of DAR requests are prescheduled; however, new requests can be made for the same day. The operator needs to insert these requests relatively quickly considering previously built routes and current GPS locations of vehicles.</p> 36794 36795<figure class="my-8"><img src="figma:asset/020fea9a518e519770187e0f1c66266fe94c3559.png" alt="Dynamic DARP overview" width="788" height="168" class="rounded-xl shadow-lg mx-auto" /></figure> 36796 36797<p>The Online Insertion Heuristic (Luo 2006), a dynamic extension of the PIN heuristic, was implemented.</p> 36798 36799<p>The logic behind the Online Insertion Heuristic is straightforward. Main ideas:</p> 36800<ol> 36801<li>Freezing the current schedule</li> 36802<li>Inserting the trip into the best position while considering the current vehicle locations</li> 36803</ol> 36804 36805<figure class="my-8"><img src="figma:asset/70f80de0fb6690f509f46e76a5a4f9d09548d9cd.png" alt="Online Insertion Heuristic" width="732" height="265" class="rounded-xl shadow-lg mx-auto" /></figure> 36806 36807<p>Reason for selection:</p> 36808<ol> 36809<li>Computational efficiency</li> 36810<li>Can exploit functions previously coded for the PIN algorithm</li> 36811</ol> 36812<p>Straightforward and easy to explain to customers.</p> 36813 36814<p>The required input for the Online Insertion Heuristic:</p> 36815<ol> 36816<li>General info on the newly requested trips (O/D and time windows)</li> 36817<li>List of stops that were already visited</li> 36818<li>Current GPS positions of vehicles</li> 36819</ol> 36820 36821<figure class="my-8"><img src="figma:asset/674c52b9f71c9c4195751908053db3622c67412c.png" alt="Online Insertion Heuristic input" width="562" height="187" class="rounded-xl shadow-lg mx-auto" /></figure> 36822 36823<p>Dynamic requests were generated for preliminary tests of the algorithm. Other test elements:</p> 36824<ol> 36825<li>Visited stops noted at time of dynamic request</li> 36826<li>Current GPS positions of vehicles â assumed that vehicles were located at the last stop visited prior to receipt of dynamic request</li> 36827</ol> 36828 36829<p>Tests using data provided by Challenger Transportation will be completed by end of project. Missing practical requirements will be identified and addressed.</p> 36830 36831<p><strong>Summary</strong></p> 36832 36833<p>We coded, adapted and tested heuristics for static and dynamic DARP. The algorithms were implemented into the Mobile Resources Management System (MRMS).</p> 36834 36835<figure class="my-8"><img src="figma:asset/85720b196f82dde1bc0243d088be26fb9387d0fa.png" alt="MRMS summary" width="758" height="237" class="rounded-xl shadow-lg mx-auto" /></figure> 36836 36837<p>The MRMS is currently being tested at Challenger Transportation. Challenger Transportation is planning to switch to MRMS based routing and scheduling in upcoming months.</p> 36838 36839<p><strong>Future of MRMS</strong></p> 36840 36841<p>We hope that MRMS will achieve commercial success and become a widely used tool for managing paratransit operations.</p> 36842 36843<figure class="my-8"><img src="figma:asset/85720b196f82dde1bc0243d088be26fb9387d0fa.png" alt="Future of MRMS" width="758" height="237" class="rounded-xl shadow-lg mx-auto" /></figure> 36844 36845<p>We hope that UMD students will continue improving optimization algorithms built into MRMS, making this tool even more effective and powerful.</p> 36846 36847<p><strong>Extensions of MRMS</strong></p> 36848 36849<p>The MRMS can be improved by enhancing the current optimization algorithms and by adding more features. Current algorithms may be improved by:</p> 36850<ol> 36851<li>Building a metaheuristic on top of the current insertion-based heuristic</li> 36852<li>Parallelization of the algorithms (or some of their routines) for speed-up</li> 36853<li>Computing additional measures of effectiveness</li> 36854</ol> 36855 36856<figure class="my-8"><img src="figma:asset/c5197892554312cfa87e06c8ce2ab64e43fd64e2.png" alt="MRMS extensions" width="742" height="169" class="rounded-xl shadow-lg mx-auto" /></figure> 36857 36858<p>Expected new features in a proposed new project include:</p> 36859 36860<p><strong>Phase 1</strong></p> 36861<ol> 36862<li>Continuous optimization of routes in real-time</li> 36863<li>Integrated management of taxi and ridesharing services</li> 36864<li>Multiple categories of users and alternative combinations of price and service levels</li> 36865<li>
36865Improved estimates of travel times through congested regions</li> 36866<li>Reassigning trips among vehicles when some vehicles deviate from their schedules</li> 36867<li>Multiple "depots", including driver homes</li> 36868<li>More detailed labor work rules, cost rates and revenue formulas</li> 36869<li>Responding to trip cancellations, no-shows, vehicle breakdowns and other surprises</li> 36870</ol> 36871 36872<p><strong>Phase 2</strong></p> 36873<ol> 36874<li>Managing transfers among ridesharing vehicles, taxis and other modes</li> 36875<li>Heterogeneous ridesharing vehicles and optimized fleet mix</li> 36876<li>Predicting near-term traffic conditions and demand and preparing accordingly (e.g. by efficiently inserting, removing or repositioning vehicles)</li> 36877<li>Seeking robust solutions that perform well over the range of uncertain future conditions</li> 36878</ol> 36879 36880<p>Improvements attained through this second project will enable even greater efficiencies in paratransit operations, like Challenger Transportation, and the competitiveness of the proposed MRMS management system.</p> 36881 36882<p><strong>Dynamic Dial-A-Ride in the Literature</strong></p> 36883 36884<figure class="my-8"><img src="figma:asset/d3663a41ff2886882507e2fe2397494b6d8b56b2.png" alt="Literature review table 1" width="1024" height="617" class="rounded-xl shadow-lg mx-auto" /></figure> 36885 36886<figure class="my-8"><img src="figma:asset/9a5847f94aee8ed4dd1c105db3d21cc6131345cf.png" alt="Literature review table 2" width="1024" height="626" class="rounded-xl shadow-lg mx-auto" /></figure> 36887 36888<figure class="my-8"><img src="figma:asset/781ad1e00368e8e8cef759a09f8f0c4e82fe59cd.png" alt="Literature review table 3" width="1024" height="620" class="rounded-xl shadow-lg mx-auto" /></figure> 36889 36890<p><strong>Dynamic DARP</strong></p> 36891 36892<figure class="my-8"><img src="figma:asset/7510c30c7cad7f788da02b9e308c6465e2bc465a.png" alt="Dynamic DARP diagram 1" width="1024" height="447" class="rounded-xl shadow-lg mx-auto" /></figure> 36893 36894<figure class="my-8"><img src="figma:asset/0b794281909c6668faca58156580976850d1cdb5.png" alt="Dynamic DARP diagram 2" width="1024" height="447" class="rounded-xl shadow-lg mx-auto" /></figure>`, v_ = [{ title: "Download Article", url: "https://theorangegraphics.com/designsamples/itc/wp-content/uploads/2021/08/management_system_for_dial_a_ride_operations.pdf", type: "pdf" }], y_ = { 36895 id: f_, 36896 title: p_, 36897 slug: M_, 36898 author: u_, 36899 category: h_, 36900 publishedDate: m_, 36901 headerImage: x_, 36902 excerpt: __, 36903 content: b_, 36904 downloads: v_ 36905}, w_ = "rides-to-health-connecting-dots-healthcare-transportation", T_ = "Rides to Health: Connecting Dots in Healthcare Transportation", S_ = "rides-to-health-connecting-dots-healthcare-transportation", B_ = "Dr. Bryce Kositz", k_ = "Case Study", A_ = "2021-09-04", N_ = "figma:asset/4775e5c6370a4e2d4e0368e5528397534f442dc7.png", I_ = "Access to transportation is a key social determinant of health. Rides to Health is a specialized brokerage service and technology platform that connects dialysis centers, funding sources, transportation providers, and patients â improving outcomes for every party involved.", P_ = `<p><em>Connecting Dots in Healthcare Transportation</em></p> 36906 36907<h2>Introduction</h2> 36908 36909<p>Access to transportation is a key social determinant of health, particularly for those suffering from kidney disease, who require three round trips a week to their life-sustaining dialysis treatments. Dialysis care, where time is critical for the patient, poses a significant and unique problem for transportation providers since more than an estimated 50% of all dialysis patients depend on public transit. The demand for transportation to dialysis centers burdens ADA paratransit schedules and budgets, and the patients themselves often receive inadequate or incomplete treatment because of transportation failings. More than just affecting transportation agencies and patients, unreliable transportation also hurts the operations and quality of service of dialysis centers. Failures in transportation similarly harm the entire healthcare network and its funding sources by pushing more patients into ambulances and emergency rooms, costing the system more money while providing lower quality of care.</p> 36910 36911<p>Rides to Health is a new service paradigm that links each part of the customer and provider experience in an integrated system, increasing the quality of care and benefitting every party involved. It is a specialized brokerage service, technology, and provider network which solves many of these issues by connecting the dots between dialysis centers, funding sources, transportation providers, and patients themselves. Rides to Health provides each a set of tools to help manage transportation to and from dialysis centers, significantly improving outcomes for all parties.</p> 36912 36913<p>This short article will cover the problems, consider the lessons from prior pilots, and finally discuss the specific methods Rides to Health uses to build upon the lessons to address the issues. Developing a unified system to connect the dots with Rides to Health solves a thorny problem for paratransit providers, dialysis centers, funding sources, and above all patients. This integrated network is not limited to dialysis centers and can further be applied to improve access to all sorts of preventative healthcare, leading to lower costs and greater quality of service.</p> 36914 36915<h2>The Problem</h2> 36916 36917<p>Beyond the clearly vital health problems faced by dialysis patients, their need for reliable transportation produces problems for the patients, paratransit providers, funding sources, and dialysis centers. More than 700,
36917000 people in the US suffer from End Stage Renal Disease (ESRD), meaning total failure of their kidneys. The only treatments for this affliction are either a kidney transplant or dialysis. The dialysis procedure effectively does the job of the kidney, but patients must come in three times a week for three to five hours a session. Already in a weakened state, particularly after the dialysis procedure, patients largely rely on public transit, friends, or family to take their six rides a week to and from their dialysis center.</p> 36918 36919<p>As shown in Figure 1, only a quarter of patients are able to drive themselves, with another 20% depending on friends and family, leaving the majority of dialysis patients reliant on other providers, including public paratransit and private providers.</p> 36920 36921<figure class="my-8"> 36922 <img src="figma:asset/205119b26907d9e479c8611fe30149ff2bcc7457.png" alt="Transportation modes used by dialysis patients" width="313" height="392" class="rounded-xl shadow-lg mx-auto" /> 36923</figure> 36924 36925<p>Patients dependent on paratransit â which offers non-guaranteed pick-up windows rather than specific arrival and departure times â may arrive late or feel forced to leave the appointment before the course of dialysis is completed lest they miss their ride. Given the required 24-hour booking headway for most paratransit providers, changing their reservation may not be possible if a patient misses their ride. Any delay in treatment can cause significant harm to the patient and an impaired quality of life. Those who arrive late may have to cut their treatment short; similarly, leaving early to catch a ride can cut treatment short. Finally, even if everything goes right on the transportation side, patients may simply not be healthy enough for immediate transportation after the end of their dialysis treatment. Paratransit schedules are generally not agile enough to respond to the needs of dialysis patients.</p> 36926 36927<p>Studies show that 35% of transit agencies reported adverse impacts on their services because of the demand for dialysis trips, including expanding services and increasing budgetary pressure. The most critical finding was that, during peak hours for dialysis, 25% of agencies reported service constraints and had to cancel rides. Such failures to meet ADA mandates to serve all rides can result in costly audits.</p> 36928 36929<p>As Figure 2 shows, dialysis takes up a significant share of transportation resources, comprising 17% of all healthcare transportation. The trend stands to grow with time as the population ages, particularly considering proposals to drop non-emergency medical transportation from Medicaid coverage. These trends have led to a massive increase in paratransit budgets; between 2000 and 2014, paratransit ridership and cost grew precipitously.</p> 36930 36931<figure class="my-8"> 36932 <img src="figma:asset/b5e7345b9702006c5b202b394f87cd8744957054.png" alt="Healthcare transportation breakdown by service type" width="320" height="407" class="rounded-xl shadow-lg mx-auto" /> 36933</figure> 36934 36935<p>The story of dialysis transportation in Maryland, where IT Curves is currently piloting and developing Rides to Health, is a microcosm of that in the US. About 11,000 Marylanders attend dialysis centers, meaning three round trips a week for 3.3 million trips per year. As of 2013, about 40% drive themselves or are driven by family or friends, 50% took public transit, and only 3% used other government agency transportation. The cost of dialysis to public paratransit in Maryland is estimated between $30 and $40 million â or 15% to 20% of the entire paratransit budget for the state. Increasing funding for paratransit, however, has not been able to solve the problem. It requires an innovative solution that connects the dots between parties, especially dialysis centers.</p> 36936 36937<figure class="my-8"> 36938 <img src="figma:asset/0ed86dbb8e51e57678411de19496d882a5ab3872.png" alt="Operating expenditures for demand response services at selected transportation agencies, 2000 to 2014" width="623" height="427" class="rounded-xl shadow-lg" /> 36939</figure> 36940 36941<p>For dialysis centers, failures in transportation not only affect the health of their patients, but also limit their ability to serve patients effectively. There is also a direct correlation between the length of time dialysis patients spend in transportation and the likelihood of missing appointments. Total missed appointments across the US cost the healthcare sector an estimated $150 billion. Delayed arrivals similarly disrupt schedules for dialysis centers and lead to inefficiencies in the amount of care that can be provided. Workers at dialysis centers also report spending much of their time helping patients sort out problematic transportation, further stretching existing resources.</p> 36942 36943<p>Finally, there is a lack of coordination among the sources of funding for transportation to dialysis that creates inefficiencies within the network. Public transportation agencies offering paratransit, Medicaid through the non-emergency medical transportation benefit, non-profit funders and transportation organizations, and private insurers offer varying levels of financial support for transportation to healthcare facilities. Rides to Health links these various systems, allowing for the unification of resources into one harmonized platform for more efficient operations, a better cost structure, and a better patient experience.</p> 36944 36945<p>While recognizing the ADA mandate to not limit or prioritize any trip type, dialysis is a major cost for ADA paratransit that all parties suffer from. A unified platform linking patients, paratransit providers, dialysis centers, and funders would remove the problems of communication, lack of availability, and inconsistent timing â decreasing costs, increasing responsiveness for riders, and providing better healthcare outcomes for patients.</p> 36946 36947<h2>Lessons from Prior Studies and Pilots</h2> 36948 36949<p>Many pilots have attempted to optimize the delivery of transportation to dialysis, improve health outcomes, and provide efficiencies for public transportation budgets. Rides to Health builds upon these lessons in providing its centralized brokerage and service.</p> 36950 36951<p>First, pilots have attempted to assign patients more logically to appointments at their nearest facility. This is a Medicaid requirement that private clinics frequently ignore since, as clinics fill up, they send new patients rather than the geographically relevant ones to other centers.</p> 36952 36953<p>Second, dialysis patients have regular schedules because the centers have regular shifts. Changing schedules to arrange patients into proximity groups â allowing for patient choice in scheduling â so that transportation can pick up more people in less t
36953ime and fewer miles can drastically improve transportation times and cost. Similarly, as one van drops off a group, it can wait to pick up the next group, lessening stress for patients and the cost of deployment for transportation.</p> 36954 36955<p>Each of these methods taken in isolation can aid to some small degree in helping dialysis patients access care in a safer, more efficient manner. Combining all three methods will drastically improve health outcomes, increase the cost-effectiveness of transportation solutions, and reduce hospital and state budgets by expanding access to dialysis and even preventative care. Moreover, eliminating the worry over transportation can significantly decrease the stress and anxiety of dialysis patients, leading to better health outcomes. Rides to Health builds upon these lessons to provide a unified solution and centralized network that connects the dots between every party involved.</p> 36956 36957<h2>Rides to Health Connects the Dots</h2> 36958 36959<p>Rides to Health is an integrated transportation brokerage and ride-booking network for dialysis centers. Building on the lessons of prior pilots, Rides to Health links all four parties â patients, dialysis centers, funding sources, and transportation agencies â into an integrated network served by a central system and service platform.</p> 36960 36961<figure class="my-8"> 36962 <img src="figma:asset/d8306a80c16b79de54f9671fedf9fd9f8804aad8.png" alt="Health Center integration with Rides to Health platform" width="623" height="427" class="rounded-xl shadow-lg" /> 36963</figure> 36964 36965<figure class="my-8"> 36966 <img src="figma:asset/065ee1734976ca9ffc38d045bdc748657b47dfc7.png" alt="Patient and rider services provided by Rides to Health" width="623" height="427" class="rounded-xl shadow-lg" /> 36967</figure> 36968 36969<p>The system serves patients by providing more versatile and cost-effective options to riders to ensure they attend their appointments. By providing certainty with pick-up and drop-off times to appointments and flexibility for when they leave the dialysis center, no part of their treatment is abridged. The brokerage system also supplies patients with a greater choice of transportation providers as well as providing them with modern transportation services like vehicle tracking and an updating ETA for their trips. Integrated communication software sends timely calls, texts, or app notifications to riders to keep them informed of their trips and imminent pickup, meaning fewer forgotten and missed treatments.</p> 36970 36971<p>Rides to Health serves dialysis centers and healthcare centers by providing an operations screen where they can monitor the ETA of incoming and outgoing rides, allowing staff to reschedule dialysis machine seats as needed. By providing monitoring tools, we provide certainty about the arrival and departure of their patients, so center staff is freed up from assisting patients in finding a vehicle or talking with transit providers to find an appropriate ride home. The monitoring station also allows healthcare staff to change ride schedules to meet the developing medical needs of the patient.</p> 36972 36973<figure class="my-8"> 36974 <img src="figma:asset/062073bc2b4719db32abe1b0bd0be5a62558ca77.png" alt="Transportation provider integration and tools" width="623" height="427" class="rounded-xl shadow-lg" /> 36975</figure> 36976 36977<p>The Rides to Health platform serves funding sources by providing a unified platform to engage with those patients receiving transportation subsidies and streamline the payment system. The interface includes an extensive eligibility module that verifies patient and trip eligibility according to the rules set by each funding source. A central broker manages the services and allows multiple funding providers to collaborate and find maximal savings and accuracy. The detailed trip records created for each patient cataloging their rides to and from dialysis will also help funding sources reduce fraudulent transportation expenses.</p> 36978 36979<figure class="my-8"> 36980 <img src="figma:asset/d58915faa0701de338864ed74de86aa3efedf1a1.png" alt="Funding agency integration and eligibility management" width="623" height="427" class="rounded-xl shadow-lg" /> 36981</figure> 36982 36983<figure class="my-8"> 36984 <img src="figma:asset/8f085eff9043fef9d2fc2fb8a1d1bbc9192e01cf.png" alt="Central service platform connecting all stakeholders" width="378" height="372" class="rounded-xl shadow-lg mx-auto" /> 36985</figure> 36986 36987<p>Finally, Rides to Health reduces costs for transit and paratransit agencies by sending these time-sensitive and often-rebooked trips to more flexible, on-demand transportation providers. The specialized service will better meet the transportation needs of dialysis patients, remove these difficult-to-schedule trips from paratransit schedules, and lead to a much more efficient operation and better budget management for paratransit services.</p> 36988 36989<p>Dialysis is a lifesaving treatment for a disease on the rise throughout the US. However, ESRD does not just affect the patient; their needs affect the communities around them. Rides to Health connects the dots through integration and communication to provide better transportation to this essential service, and thus provide better outcomes for every party along the way.</p> 36990 36991<h3>References</h3> 36992 36993<ol> 36994<li>National Academies of Sciences, Engineering, and Medicine; Transit Cooperative Research Program [TCRP]. <em>Dialysis Transportation: The Intersection of Transportation and Healthcare.</em> Washington DC: National Academies Press, 2019.</li> 36995<li>TCRP, <em>Dialysis Transportation,</em> 28.</li> 36996<li>Ibid, 33.</li> 36997<li>Ibid, 34.</li> 36998<li>Ganuza, Adam and Rachel Davis. "Disruptive Innovation in Medicaid Non-Emergency Transportation." Center for Health Care Strategies Brief, February 2017: 3.</li> 36999<li>Medicaid and CHIP Payment and Access Commission (MACPAC). "Medicaid Coverage of Non-Emergency Medical Trans
36999portation." May 2019.</li> 37000<li>Kaufman, Sarah M. et. al. <em>Intelligent Paratransit.</em> NY: New York University Wagner, Rudin Center for Transportation Policy & Management, 2016.</li> 37001<li>KFH Group, Inc. <em>Legislative Report J00H01.01: Study of Paratransit Services for Dialysis.</em> Prepared for Maryland Transit Administration and Maryland Department of Transportation, 31 October 2013.</li> 37002<li>TCRP, <em>Dialysis Transportation,</em> 33; KFH Group, <em>Study of Paratransit Services for Dialysis,</em> 11.</li> 37003<li>KFH Group, <em>Study of Paratransit Services for Dialysis,</em> 12.</li> 37004<li>Maryland Department of Health. <em>Report on the Maryland Medical Assistance Program's Non-Emergency Medical Transportation (NEMT) Grant Program.</em> 3 October 2019.</li> 37005<li>Ray, Renee Autumn. <em>The Role of Transportation in Improving America's Health.</em> Washington DC: Eno Center of Transportation, 2020.</li> 37006<li>TCRP, <em>Dialysis Transportation,</em> 31.</li> 37007<li>National Academies of Sciences, Engineering, and Medicine. <em>Cost Benefit Analysis of Providing Non-Emergency Medical Transportation.</em> Washington DC: The National Academies Press, 2005.</li> 37008<li>TCRP, <em>Dialysis Transportation,</em> 81.</li> 37009<li>Ibid, 103, 107, 109.</li> 37010<li>Health Research and Educational Trust. <em>Social Determinants of Health Series: Transportation and the Role of Hospitals.</em> Chicago: Health Research and Educational Trust, November 2017.</li> 37011</ol>`, C_ = [], F_ = { 37012 id: w_, 37013 title: T_, 37014 slug: S_, 37015 author: B_, 37016 category: k_, 37017 publishedDate: A_, 37018 headerImage: N_, 37019 excerpt: I_, 37020 content: P_, 37021 downloads: C_ 37022}, E_ = "commingling-effects-of-microtransit", R_ = "Commingling Effects of Microtransit", D_ = "commingling-effects-of-microtransit", z_ = "Dr. Bryce Kositz", j_ = "Industry Insights", O_ = "2021-10-18", V_ = "figma:asset/02725254758f020044c37b31c6ca41922f8e9c7b.png", H_ = "In most areas, public transportation services are offered in silos rather than as an integrated system. IT Curves explores how commingling transit modes â paratransit, fixed route, and microtransit â creates higher efficiency, expanded coverage, and greater equity for both urban and rural agencies.", Z_ = `<p><em>Integrated Transit Modes for Urban and Rural Agencies</em></p> 37023 37024<p>In most areas, urban and rural, public transportation services are offered in silos rather than as an integrated system, leading to a lack of efficiency. Commingling of transit modes offers higher efficiency and allows for the addition of microtransit â technology-enabled demand-response transportation â which is an important and perhaps necessary feature in today's transit.</p> 37025 37026<p>IT Curves has drawn on the past decade of expertise to develop a smarter approach to employing commingled microtransit as a glue to integrate and improve all other modes of transportation in the public transit system. IT Curves breaks down the walls between existing siloed transit services, improving efficiency by connecting the dots between riders and their public transit. By using friendly rider interactivity tools and powerful shared ride dispatch infrastructure, public transit can achieve a highly productive Mobility-as-a-Service that integrates all modes of service.</p> 37027 37028<figure class="my-8"> 37029 <img src="figma:asset/02725254758f020044c37b31c6ca41922f8e9c7b.png" alt="Microtransit Solutions - Combine Fixed, Flex, and Paratransit Routes" width="269" height="530" class="rounded-xl shadow-lg mx-auto" /> 37030</figure> 37031 37032<p>A complete transit agency software system needs to include easy to use rider interactivity tools, a dynamic routing suite, a comprehensive rider eligibility system, a flexible fare calculation and payment system, and a vehicle communication software with a fraud proof service usage control through reliable automated rider recognition.</p> 37033 37034<p>The goal of this report is to accumulate the lessons of public pilots and research papers to show how IT Curves' specialized software easily allows for commingled fleets and riders to better leverage the strengths of microtransit and expand service across transit networks. First, we consider the lessons for urban transportation systems and how commingled paratransit and microtransit can enhance and expand both the fixed route and paratransit usage. Second, we look at how the unique services provided by rural systems should be integrated into a network of paratransit, fixed route, and microtransit. Finally, we look at lessons in equity and access for both urban and rural systems.</p> 37035 37036<h2>Supporting Urban Fixed Routes</h2> 37037 37038<p>The IT Curves system commingles paratransit and microtransit so that, not only are paratransit riders encouraged to transfer to fixed routes, but paratransit vehicles' excess capacity can also serve additional on-demand riders. High-capacity fixed routes including large buses and subways are, and in many routes will remain, the foundation of a public transportation system. Commingled paratransit and microtransit, however, enhances and increases the overall usage of transit and expands equity in on-demand mobility.</p> 37039 37040<p>Microtransit will complement high-performing fixed routes and profoundly improve public transit routes in low density or geographically challenging areas. In suburban or low-density areas, microtransit's smaller vehicles are able to operate more efficiently than large buses. Moreover, the flexibility of on-demand services expands the zone of service and ensures that empty buses do not go up and down fixed routes. In these areas, on-demand microtransit services can bring in new ridership. For example, a microtransit pilot in Seattle showed that many riders served by microtransit came from areas outside of walking distance to the nearest fixed-route stations.</p> 37041 37042<p>Paratransit vehicles operating in such areas can offer this microtransit service using their excess capacity. Using excess capacity is beneficial for paratransit in two ways. First, commingled services increase the load of paratransit vehicles and thus increases the efficiency of the vehicle. Second, since the vehicles will visit transportation hubs for the microtransit vehicles anyway, transit agencies may choose to offer paratransit riders incentives such as lower or free fare to transfer to fixed-route transit for all or part of their trips. This discourages long trips on the expensive paratransit network, resulting in more passengers per hour with shorter rides, and creating excess fleet capacity for on-demand services to cover additional areas.</p> 37043 37044<p>IT Curves utilizes the lessons of prior pilots and implements our integrated transportation software to improve service and increase transit efficiency through innovative uses of technology. Some of the key points are: first, these flexible commingled paratransit vehicles should make regular stops at the hub point where they transfer riders to or from other public transit. A report on the Alameda-Contra Costa Transit District noted that almost twice as many passengers board Flex at BART stations, rather than scheduling Flex to go to BART stations. By having microtransit vehicles appear regularly at the hub station, it can greatly increase the productivity of that vehicle while also providing access to those without smartphones or apps.</p> 37045 37046<figure class="my-8">
37047 <img src="figma:asset/8e0902ebf32faf773dd2dc400d21896c01c53550.png" alt="Accessible transit van service for wheelchair users" width="800" height="542" class="rounded-xl shadow-lg" /> 37048</figure> 37049 37050<p>During a pilot in LA, the city opened up three microtransit zones linked to fixed-route stations where users could book rides to or from the station to other locations in each zone, and that platform successfully delivered rides to users who summoned it. The pilot in Seattle, based on a similar model, showed increased ridership at stations served by microtransit. By structuring schedules around a few key points, it can build a ridership and entice new riders into the transportation network. Microtransit helps urban areas to integrate other services, using excess capacity in paratransit to expand the reach of the network.</p> 37051 37052<h2>Integrating Rural Services</h2> 37053 37054<p>Public transit agencies in rural areas face distinct problems from their urban counterparts and are positioned to benefit most from applying the integrated fleets commingling their services and employing powerful technology offered by IT Curves. Rural agencies run multiple, overlapping services for specific populations or purposes, including paratransit, shopping circulars, shuttles for elderly riders, on-demand services, and limited fixed routes. They also work in sparsely populated areas, often in difficult terrain. The difficulty and expense of providing so many separate services constrains the size, capabilities, and responsiveness of each of these services.</p> 37055 37056<p>There are several fundamental system concepts that the underlying technology must support to be able to offer commingled fixed, paratransit, and on-demand microtransit services: dynamic routing capabilities, flexible stops, and rider interactivity tools. The IT Curves approach has technologies for each that allows the commingling of the various services and rider bases to build a fully integrated, on-demand, mixed service fleet.</p> 37057 37058<p>First, dynamic routing means the route maker and dispatch system needs to be capable of dynamically, in real-time, changing vehicle routes and manifests. Dynamic routing adjusts the vehicle route by looking ahead at each stop and only routing the vehicle to those stops where there is registered demand. Dynamic routing preserves stops at ride generators and major transit hubs even if there is no registered demand, because it assumes there will be walk-on riders at these stops.</p> 37059 37060<p>Second, the system is preconfigured for a number of flexible stops, where the vehicles are routed to those stops only when there is registered demand. These stops can be placed in convenient locations riders can walk to, as is the case for Wilson, NC, which replaced their entire public transit system with microtransit. This not only eliminates vehicle detours to stops where there is no demand, it ensures that stops are in locations which reduce vehicle miles travelled. Different rider bases can be served by different rules; for example, paratransit riders can receive door-to-door service while other riders are asked to walk to a flexible stop nearby.</p> 37061 37062<p>Third, these flexibilities offered by dynamic routing, flexible stations, and same-day on-demand service require powerful rider interactivity tools. These tools allow users to be connected to the system, give and receive information, book rides, negotiate pickup and drop-off times, track their rides, and more. In short, a dynamic system of routing and stops requires dynamic information exchange with riders.</p> 37063 37064<p>The three tools all work together to increase productivity because they reduce the number of stops, break down the walls between siloed services, and allow rural agencies to serve more people more equitably. Using dynamic routing and flexible stops, vehicles skip areas of no demand and make fewer stops as a result. Commingling fleets and services makes all currently partitioned services more productive by allowing for better usage of shared available resources. Rural agencies can ill afford to have empty vehicles and overlapping services leading to excess costs. Integrated fleets which primarily serve one purpose, while flexibly serving other demand where their capacity and location allows, create efficiencies throughout the entire system.</p> 37065 37066<h2>Equity and Control of Services</h2> 37067 37068<p>Public transit is committed to equity of services â providing equal cost, quantity, and quality of service to all citizens with different physical, mental, and financial capabilities in the transit coverage area. Controlling fleets and services is vital to achieving this goal.</p> 37069 37070<figure class="my-8"> 37071 <img src="figma:asset/a54eb23cbda4cec9ea9cd75b96453ff293129386.png" alt="Facial recognition technology for secure rider identification" width="800" height="542" class="rounded-xl shadow-lg" /> 37072</figure> 37073 37074<p>Some transit agencies have tried to contract microtransit services out to Transportation Network Companies (TNCs), which poses many problems. First, TNCs' services are predominantly designed as one-size-fits-all for a certain demographic of highly mobile, digitally literate, and credit card-e
37074nabled people. Second, driver training to serve people with physical and mental challenges and provision of specialized equipment remains a barrier for TNCs. Not only is contracting out contrary to the mission of transit agencies, but because TNCs bill per ride, the success of microtransit pilots linearly increases the cost of third-party services. However, efficient route building shows that taxi or TNCs can be very effective in limited uses such as serving overflow rides or outlier trips, helping transit agencies ensure that no trip goes unserved in periods of unexpectedly high demand.</p> 37075 37076<p>Most importantly, a third-party service cannot bind together and improve the other modes of service. To successfully commingle services, transit organizations need to be able to monitor transportation data. By controlling their fleet and data, microtransit can commingle with other services, adapt as needed, and develop into a key component of transportation planning.</p> 37077 37078<h2>Ingredients for Commingled Microtransit</h2> 37079 37080<p>This paper provides practical considerations in how transit agencies can integrate microtransit in transit networks, fleets, and services. To reach such levels of integration and service, transit agencies need several key technologies:</p> 37081 37082<p><strong>1) Rider interactivity tools</strong> are required to register demand, allowing agencies to use flexible stops, dynamic route building, and provide on-demand services. IT Curves' Where's My Ride system provides riders with methods to register demand, track their ride, receive status, automate onboarding, pay for service, and monitor their receipts.</p> 37083 37084<p><strong>2) A dynamic and efficient route-making algorithm</strong> can commingle paratransit, fixed transit, and microtransit into an integrated network of riders and services. The system must consider rider needs, vehicle capabilities, and other attributes while automatically dispatching rides. IT Curves' Efficient Ride Sharing Algorithm is an example of a flexible route builder that can be deployed for all modes of service.</p> 37085 37086<p><strong>3) A comprehensive rider eligibility system</strong> manages which riders and trips are eligible for what services and funding sources. The eligibility system allows for multiple sources of funding for a single ride or rider. A sophisticated eligibility engine allows for seamless commingling of riders and services.</p> 37087 37088<p><strong>4) A flexible fare and payment system</strong> that can calculate and automatically charge the correct fare to the rider and each of the funding sources. In rural areas, fare structures may differ for different service modes and different riders. The IT Curves payment system, utilizing a rider wallet, automatically charges the correct amount even for transfer rides.</p> 37089 37090<figure class="my-8"> 37091 <img src="figma:asset/7eeedccf52e9a4eb8e0cdf79c865e376275f8215.png" alt="IT Curves commingled microtransit technology stack" width="800" height="542" class="rounded-xl shadow-lg" /> 37092</figure> 37093 37094<p>By leveraging these four key technologies, transit agencies can break down the walls between siloed services and build an integrated, efficient, and equitable public transit system that serves all riders better.</p>`, W_ = [], $_ = { 37095 id: E_, 37096 title: R_, 37097 slug: D_, 37098 author: z_, 37099 category: j_, 37100 publishedDate: O_, 37101 headerImage: V_, 37102 excerpt: H_, 37103 content: Z_, 37104 downloads: W_ 37105}, q_ = "wheres-my-ride-rider-interactivity-tools-ai-inside", U_ = "Where's My Ride (Rider Interactivity Tools, AI Inside)", G_ = "wheres-my-ride-rider-interactivity-tools-ai-inside", J_ = "Dr. Bryce Kositz", K_ = "Technology", Y_ = "2021-11-06", X_ = "figma:asset/73432ee76cfeab1db2f34208e0b0ebf18e9c41c8.png", Q_ = "IT Curves' Where's My Ride is a complete rider interactivity suite â combining a smart phone app, Interactive Voice Response, and AI-powered onboarding tools to give transit riders full control of their travel experience, from booking to payment to real-time navigation.", eb = `<p><em>Rider Interactivity Tools, Artificial Intelligence Inside</em></p> 37106 37107<h2>Introduction</h2> 37108 37109<p>A complete, intelligent transportation solution consists of four major segments: onboarding, reservations, dispatch and routing, and the user experience, with each segment consisting of multiple modules. Every segment and its modules are essential for the functioning of the whole, end-to-e
37109nd, efficient system. However, many Intelligent Transportation Management Software (ITS) suppliers today do not provide open APIs between these segments and modules.</p> 37110 37111<p>In a mature industry, often different sets of vendors specialize in one or more area and compete to create the most optimal, complex, and thorough components in their area of specialty. These specialized vendors design their components with open API or standardized API, allowing plug-and-play integration with other vendors' equally complex components. These multi-vendor cooperative systems result in an end-to-end, integrated, best of breed suite of components creating a seamless, efficient, and well supported operational system.</p> 37112 37113<figure class="my-8"> 37114 <img src="figma:asset/7cd64dff8d00d5754e0027dc12f15cb3732a903e.png" alt="Google Maps showing beacon detection for rider navigation" width="518" height="600" class="rounded-xl shadow-lg" /> 37115</figure> 37116 37117<figure class="my-8"> 37118 <img src="figma:asset/8fba95ce6beab9e90f39e9ad69ca15376735443e.png" alt="IT Curves integrated transportation framework" width="617" height="268" class="rounded-xl shadow-lg" /> 37119</figure> 37120 37121<p>IT Curves specializes in the User Experience segment, with our offerings consisting of multiple, excellent, and field-tested modules. The rider experience spans from reservations, ride tracking, splitting fare by travel segment, calculation of copay, onboarding using facial recognition, and payment processing using online rider wallet, and more.</p> 37122 37123<p>The automation of the rider experience is particularly important not only to improve the user experience and enhance business operations, but to prepare for the future of autonomous vehicles. Artificial intelligence and intelligent reality augmentation features will be necessary to replace all the other actions taken by drivers, including onboarding riders, processing payment, and other functions without human intervention. These actions are even more crucial for riders with either physical or mental disabilities and provide increased accessibility even prior to the introduction of autonomous vehicles.</p> 37124 37125<p>In this paper, we will describe some of the innovative development work IT Curves has undertaken to improve the Rider Experience. Some of this work was funded by a 2021 Federal Transit Administration Mobility for All grant.</p> 37126 37127<h2>Where's My Ride</h2> 37128 37129<p>The IT Curves system commingles paratransit and microtransit so that, not only are paratransit riders encouraged to transfer to fixed routes, but paratransit vehicles' excess capacity can also serve additional on-demand riders. High-capacity fixed routes including large buses and subways are, and in many routes will remain, the foundation of a transit network.</p> 37130 37131<p>The Where's My Ride system features a smart phone app for riders, an interactive telephony system, and an interactive rider recognition and onboarding suite. Where's My Ride is not only easy for customers to use â it has features for all customers of any age or skill â but also is proven to create efficiencies for business. Using Where's My Ride, riders can book rides and answer other common questions automatically, rather than reach a call center agent. This reduces the cost of business, but more importantly, the application opens innovative possibilities for the integration of new technologies. The goal is for Where's My Ride to allow users to complete all trip functions under rider own control using the provided interactivity tools.</p> 37132 37133<figure class="my-8"> 37134 <img src="figma:asset/89218ad2fdc869c8f5e2c2f77203c96cd5d38803.png" alt="AI-powered transit technology" width="800" height="471" class="rounded-xl shadow-lg mx-auto" /> 37135</figure> 37136 37137<p>Microtransit will complement high-performing fixed routes and profoundly improve public transit routes in low density or geographically challenging areas. In suburban or low-density areas, microtransit's smaller vehicles are able to operate more efficiently than large buses. Moreover, the flexibility of on-demand services expands the zone of coverage.</p> 37138 37139<figure class="my-8"> 37140 <img src="figma:asset/e33a08c206cba55a011a598f053e5c46ae6be835.png" alt="Access app trip planning interface" width="221" height="440" class="rounded-xl shadow-lg mx-auto" /> 37141</figure> 37142 37143<h2>Trip Planner and Public Transit</h2> 37144 37145<p>Where's My Ride can provide mixed-mode travel planning and navigation, allowing booking for demand-response paratransit mixed with fixed transit routes. The app's innovation is in offering fixed transit planning capabilities to the paratransit ridership. Using comprehensive accessibility data on each stop and vehicle and correlating that information to the individual rider's mobility needs, the app identifies which routes the rider can take. The app can also plan out multi-modal trips, so riders with mobility needs can take paratransit to a stop where they can transfer to an accessible fixed route. Decreasing the usage and length of paratransit trips greatly increases the cost efficiency of the network.</p> 37146 37147<p>From the app, users will see the screen displayed here to set their origin, destination, preferred time of either arrival or departure, and search for public transit routes. The app will offer multiple options to the rider based on their mobility needs and the potential routes available. Because each user profile, which is necessary to log into the app, contains the rider's mobility needs, the search is automatically filtered for their mobility requirements. The app is fully capable of planning out trips across multiple modes of transit and offering the rider choices, from full-price door-to-door paratransit to discounted trips on fixed route public transit. The navigation functions, covered later, will help all users be confident in their ability to transfer between rides and through busy depots to find their next vehicle.</p> 37148 37149<h2>Rider Digital ID</h2> 37150 37151<p>IT Curves' IVO app installed on an android tablet inside a vehicle verifies the Digital ID of riders using their face or QRC on rider ID Card or on rider's app. This allows for c
37151ontactless, reliable, and secure identification of riders for many different uses, all of which improve the speed and efficiency of business operations. Forms of Digital ID include facial recognition, QR codes, and could be enhanced to offer near field communications. All these forms can be used individually or in tandem to enable multifactor identification. Whether alone or as part of a multifactor identification process, all reduce the incidence of fraud through reliable identification of riders.</p> 37152 37153<figure class="my-8"> 37154 <img src="figma:asset/b1177a278f9181172c77271948a3ac54d9c8f4b0.png" alt="Digital ID QR code verification on tablet" width="500" height="491" class="rounded-xl shadow-lg mx-auto" /> 37155</figure> 37156 37157<h2>Automatic Onboarding and Offboarding Using Digital ID</h2> 37158 37159<p>Using facial recognition, other Digital ID, or Bluetooth Low Energy (BLE) beacons, riders can be onboarded and offboarded automatically, reducing manual input or error by drivers. Particularly useful in paratransit or other demand-response transportation, using Digital ID to onboard riders reduces the incidence of fraud and improves the efficiency of service. For riders, automatic onboarding improves their experience by providing contactless service and expediting the ride.</p> 37160 37161<p>By detecting either a form of Digital ID or the Bluetooth signal of the phone associated with the user's app, the system determines if the rider has an unperformed trip, identifies the rider, and automatically onboards the rider by issuing commands to the dispatch system to update trip status automatically. Riders and drivers spend less time managing their ride, improving overall service and satisfaction.</p> 37162 37163<figure class="my-8"> 37164 <img src="figma:asset/9247c8fdc9fa602057120d86530d9ddf5db4a920.png" alt="Facial recognition for rider identification" width="500" height="491" class="rounded-xl shadow-lg mx-auto" /> 37165</figure> 37166 37167<figure class="my-8"> 37168 <img src="figma:asset/26183c86d42a6313e1ad07cf7ccb3d838ddc49f1.png" alt="Trip status updated as PICKUP - automatic onboarding process" width="820" height="715" class="rounded-xl shadow-lg" /> 37169</figure> 37170 37171<h2>Rider Wallet Module</h2> 37172 37173<p>The rider wallet makes fare payment, billing, and calculating copay an integral part of the system. Payments are directly tied to rides, reducing fraud and mistakes. This functionality carries through to our comprehensive rider receipt history and balance reporting capabilities.</p> 37174 37175<figure class="my-8"> 37176 <img src="figma:asset/860baeaed02c95b809929419c4e1fd6cf7f5f538.png" alt="Access app payment options and card management" width="900" height="413" class="rounded-xl shadow-lg" /> 37177</figure> 37178 37179<p>The wallet feature is especially useful for elderly and disadvantaged riders who may not use credit cards. These riders can fill their wallet periodically by sending check or money order to transit or funding agencies. The wallet is used solely for ride copayments. Riders may also elect to refill their wallet with a credit card of their own or that of their guardians. To protect the credit card, IT Curves does not hold card data in the app or the IT Curves cloud; instead, private tokens are established with credit card companies. Riders can set the wallet to charge the credit card to top up their wallet to an amount they determine as soon as the amount in the wallet falls below a certain threshold. They can also access their wallet to view their balance and detailed transaction history.</p> 37180 37181<h2>Automatic Fare Payment</h2> 37182 37183<p>The wallet integrates with Digital ID and automatic onboarding to ensure that payments are automatically deducted upon either onboarding or offboarding. Greater automation creates greater eff
37183iciencies in the provision of services. Importantly, the integration of cashless payment reduces the incidence of fraud, prevents riders from losing paper tickets or cash, improves farebox recovery, and simplifies or eliminates reconciliation of driver collections.</p> 37184 37185<p>Using Digital ID or Bluetooth capabilities, riders can be charged immediately upon onboarding or offboarding. The app notifies the rider of their successful onboarding, of the deduction of fare from their account, and if their balance is running low. Riders will have full information about and control over their fare payment and history. Calculations are made immediately even for complicated fares including splitting fare between copayments and subsidies from funding agencies.</p> 37186 37187<figure class="my-8"> 37188 <img src="figma:asset/67c8e187b18256522f80127813a9e9865b0cc124.png" alt="Payment successful confirmation screen" width="221" height="440" class="rounded-xl shadow-lg mx-auto" /> 37189</figure> 37190 37191<h2>Guide Rider to a Station or Vehicle</h2> 37192 37193<p>BLE devices are widely used today for many Internet of Things applications. IT Curves programs and installs a BLE device in vehicles serving paratransit or fixed routes. These BLE devices periodically transmit a signal containing the vehicle ID and other program information. Riders' smart phone apps detect the BLE signal from up to 150 feet, and via voice command, device vibration, and visual tools, inform the riders that their specific assigned vehicle is approaching the station. Where's My Ride app can also navigate riders to their vehicles. This BLE guidance is especially useful for visually challenged riders.</p> 37194 37195<p>In addition, Where's My Ride integrates with another smartphone app, "Seeing I Go," which is designed for navigation through difficult areas, including complex transit hubs, transfer stations and other facilities of interest. Several BLE devices are programmed to transmit their special IDs and installed in strategic places throughout the building such as doorways, escalators, elevators, and service counters. These inexpensive and simple BLE devices transmit points to virtually map the building layout for the "Seeing I Go" app to help the individual navigate to their point of interest. This vastly improves the accessibility of vehicles and transfer stations, allowing riders who experience difficulty finding vehicles or navigating through bus stops to fully enjoy and utilize public transit.</p> 37196 37197<figure class="my-8"> 37198 <img src="figma:asset/0a0ab5c4fbd51741cab85784f8055aef346d3c13.png" alt="IT Curves complete framework - Onboarding, Reservations, Dispatch & Routing, and User Experience" width="500" height="611" class="rounded-xl shadow-lg" /> 37199</figure> 37200 37201<p>The same BLE beacons installed in vehicles which provide automatic onboarding and offboarding communicate with rider apps to notify riders where their vehicle is waiting. Using the rider's vehicle and trip information, Where's My Ride identifies the beacon ID of the destination vehicle or location and navigates the rider to that destination. Navigation can be by visual aid, audible directions, or text notifications depending on the preferences of the app user. IT Curves has performed extensive testing to estimate distance with the utmost accuracy and ensure that passengers navigate to their destination. These BLE beacons can be placed not only in vehicles and throughout transit stations, but in important locations such as hospitals or other participating public buildings to help integrate public transit and increase accessibility.</p> 37202 37203<p>As a rider interactivity tool, Where's My Ride is designed to grow and accommodate all rider needs in an integrated system. From providing the core functionalities of a booking app to offering extensive Bluetooth beacon capabilities including automatic vehicle onboarding and individualized navigation through busy transit hubs and buildings â Where's My Ride will be a one-stop rider interactivity tool for all public transit functions now and into the future.</p>`, tb = [], ab = { 37204 id: q_, 37205 title: U_, 37206 slug: G_, 37207 author: J_, 37208 category: K_, 37209 publishedDate: Y_, 37210 headerImage: X_, 37211 excerpt: Q_, 37212 content: eb, 37213 downloads: tb 37214}, sb = "enhancing-transit-services-rider-centric-interactivity", ib = "Enhancing Transit Services through Rider-Centric Interactivity", rb = "enhancing-transit-services-rider-centric-interactivity", nb = "Matthew Mohebbi, CEO", ob = "Technology", Lb = "2023-09-15", cb = "figma:asset/cb6e05888884648ed42021ba68d3956536a5ac6e.png", lb = "For decades, US transit agencies have grappled with improving operational efficiency â especially in rural and suburban areas. The solution lies in shifting from fixed transit models to flexible micro-transit powered by smart apps and IVR systems, putting riders at the center of the experience.", db = `<p>For decades, US transit agencies have grappled with the challenge of improving operational efficiency. This issue is particularly acute for rural and suburban transit operators, given the sparsely populated areas they cover, often far from major transit routes.</p> 37215 37216<h2>Transit Performance Metrics</h2> 37217 37218<p>State and federal transportation agencies have made efforts to establish universal Key Performance Indicators (KPIs) to measure and enhance the overall performance of US transit systems. Examples of these indices include:</p> 37219 37220<p><strong>
37220Passengers Served Per Hour (PAX-Hr):</strong> This KPI measures the number of passengers boarding at each stop, which drives the PAX/Hr metric. While useful, it can be a rough index, as it favors routes with numerous short trips.</p> 37221 37222<p><strong>Passenger Miles Per Hour (PAX-Miles-Hr):</strong> This KPI multiplies the number of passengers by the miles traveled in an hour, offering a more accurate reflection of capital and operating expenses per mile of travel.</p> 37223 37224<p>Many other KPIs are designed to normalize these indices as percentages for comparison or benchmarking purposes. Examples include percentages of Pax-Hr/Service Hours and PAX-Miles/Service Miles, among others.</p> 37225 37226<p>Arguably, the most critical performance indicator for transit agencies is determining their overall cost per PAX-Mile, which is often unreasonably high in rural and suburban areas. The solution lies in increasing ridership to optimize capital and operating expenses per mile traveled. However, agencies often find increasing ridership to be challenging, if not impossible, due to a lack of focus on the riders' perspective.</p> 37227 37228<h2>Riders' View of Performance Metrics</h2> 37229 37230<p>A cursory examination of performance indicators reveals that they often overlook what riders truly value in public transit:</p> 37231 37232<p><strong>Convenience:</strong> This is measured by the proximity of the nearest stop to a rider's residence, workplace, or other destinations. Inconvenience, such as having to find alternative transportation to reach a suitable stop, can deter potential riders.</p> 37233 37234<p><strong>Coverage:</strong> Riders want to know if their residence, workplace, and other points of interest are covered by public transit. Expanding the number and spread of stops can increase coverage and make transit more appealing to a broader population.</p> 37235 37236<p><strong>Connections:</strong> The number of routes requiring transfers can lead to detours and longer travel times. Simplifying connections can make public transit more attractive.</p> 37237 37238<h2>Changing the Paradigm: Flexible Micro-Transit and Enhanced Rider Interaction</h2> 37239 37240<p>The solution lies in shifting from the traditional fixed transit model to one that leverages the capabilities of smart apps and Interactive Voice Response (IVR) systems. Today, riders can access real-time information, submit travel requests, and negotiate for the best travel options online. This flexibility empowers transit agencies to innovate with new micro-transit services, moving away from rigid schedules and fixed stops to a demand-driven model.</p> 37241 37242<p>For instance, an agency operating 10 bus routes with 15 fixed stops each could transition to a model with three times as many virtual stops (e.g., 450) and schedule routes to stop only where there is demand. This approach increases convenience and coverage, attracting more riders, ultimately reducing costs per rider and per PAX-Mile.</p> 37243 37244<p>While managing 450 virtual stops may seem daunting, statistical scheduling is not new to various industries. The size and timing of this paradigm shift can be controlled by agencies, but it is imperative to embark on this transformation sooner rather than later.</p> 37245 37246<figure class="my-8"> 37247 <img src="figma:asset/f19412db2ecef1d537f6ff432b9d5ca96df8ab8c.png" alt="Access app interface showing announcements, tracking, notifications, and feedback features" width="1005" height="530" class="rounded-xl shadow-lg" /> 37248</figure> 37249 37250<figure class="my-8"> 37251 <img src="figma:asset/cb6e05888884648ed42021ba68d3956536a5ac6e.png" alt="Mobile transit app with real-time location tracking" width="1024" height="611" class="rounded-xl shadow-lg" /> 37252</figure>`, gb = [], fb = { 37253 id: sb, 37254 title: ib, 37255 slug: rb, 37256 author: nb, 37257 category: ob, 37258 publishedDate: Lb, 37259 headerImage: cb, 37260 excerpt: lb, 37261 content: db, 37262 downloads: gb 37263}, pb = "enhancing-public-transit-efficiency-microtransit-planning-optimization", Mb = "Enhancing Public Transit Efficiency through Microtransit Planning and Optimization", ub = "enhancing-public-transit-efficiency-microtransit-planning-optimization", hb = "Abhijeet Nawale", mb = "Technology", xb = "2023-10-06", _b = "figma:asset/7fa1a16c30624679815c1e2081c102453e21aa20.png", bb = "Transit planners in suburban and rural areas face growing challenges balancing vehicle allocation, underserved stops, and limited fleet resources. IT Curves has developed a cutting-edge microtransit planning tool that uses population distribution data and real passenger demand to optimize routes and stops â with a live Sandbox environment available to all partnered agencies.", vb = `<p>Public transportation plays a crucial role in addressing urban mobility challenges and alleviating traffic congestion. However, in suburban and rural areas there are additional challenges, such as covering larger areas with dispersed populations and limited fleet resources. Transit planners continually grapple with the task of balancing vehicle allocation, driver schedules, underserved areas, underutilized stops, low passenger miles, and excessive vacant miles. The efficiency and effectiveness of public transit systems are pivotal factors in promoting sustainability across urban, suburban, and rural regions.</p> 37264 37265<p>Recent technological advancements have ushered in innovative solutions aimed at enhancing the efficiency and accessibility of public transit systems.</p> 37266 37267<p>This article delves into the development and application of a cutting-edge microtransit planning tool, specifically designed to optimize transit routes and stops based on population distribution and passenger demand. As part of our research endeavors, IT Curves has created a Sandbox environment, which will be readily accessible to all our partnered transit planning agencies. This platform allows for a comprehensive analysis of current transit services and the review of suggested improvements within the plan.</p> 37268 37269<figure class="my-8"> 37270 <img src="figma:asset/824782ace3e8339710324188c16de2ff5e6a95d1.png" alt="IT Curves microtransit planning tool" width="750" height="363" class="rounded-xl shadow-lg" /> 37271</figure> 37272 37273<h2>Introduction</h2> 37274 37275<p>IT Curves has developed an emerging microtransit planning tool that offers a promising solution to improve transit service quality. This paper presents a comprehensive overview of a cutting-edge tool that c
37275ombines transit route information and population distribution analysis to optimize transit networks.</p> 37276 37277<h2>Tool Functionality</h2> 37278 37279<h3>Data Input</h3> 37280 37281<p>The microtransit planning tool operates independently, eliminating the need for interfacing with transit agency platforms. Users can simply input a city or transit agency name into the search bar. The tool validates the availability of General Transit Feed Specification (GTFS) data online and offers the option to upload a GTFS zip file if such data is not readily accessible.</p> 37282 37283<h3>Visualization</h3> 37284 37285<p>Upon successful input, the tool displays all the routes and stops of the selected transit agency in a right-side window. The first route is shown by default, and users can explore the entire network.</p> 37286 37287<h2>Population Distribution Analysis</h2> 37288 37289<h3>Population Visualization</h3> 37290 37291<p>One prominent feature of the tool is its population distribution overlay, which superimposes population data onto the map. Areas with denser population concentrations are represented in darker shades, aiding in more informed strategic decision-making.</p> 37292 37293<figure class="my-8"> 37294 <img src="figma:asset/e701867bc8a0786e54cc6c90c4250a3d2550b3b3.png" alt="Population distribution overlay" width="300" height="146" class="rounded-xl shadow-lg" /> 37295</figure> 37296 37297<h3>On-Demand Stops</h3> 37298 37299<p>Enabling the marking of stops on-demand empowers the optimizer to suggest additional flex-on-demand and deviated stops. The tool employs two methods to convert existing stops into flex-on-demand stops.</p> 37300 37301<h3>Passenger Count Data Upload</h3> 37302 37303<p>Not all densely populated areas consistently generate high subscription rates. This is why our planning tool is designed to leverage actual passenger data for each stop. The tool intelligently analyzes and suggests which scheduled stops can potentially be converted to on-demand stops. This decision-making granularity is designed at the level of the day of the week and then the specific trip of the day.</p> 37304 37305<h3>Manually Changing Stop Status</h3> 37306 37307<p>Using population data, the tool allows users to designate less populated areas as on-demand stops, where pickups require prior passenger notification. Users can select the percentage of on-demand service, with 0% allowing for an entirely on-demand route. On-demand stops are highlighted in a distinctive red color.</p> 37308 37309<h2>Route Optimization</h2> 37310 37311<h3>Algorithm Execution</h3> 37312 37313<p>The IT Curves route optimizer can be manually triggered after the selection of on-demand stops. The optimizer ensures that trip duration remains unchanged when introducing new on-demand stops. It also suggests new stops along the current route path. The optimizer runs hundreds of iterations, utilizing a randomization function to determine if these new stops will increase ridership and enhance route efficiency.</p> 37314 37315<h3>Visualization of Results</h3> 37316 37317<p>After the computation is complete, the screen displays two maps: the left map shows the actual route, while the right map displays the algorithm's suggested route. Newly suggested stops are highlighted in green, offering a visual comparison between the original and optimized routes.</p> 37318 37319<figure class="my-8"> 37320 <img src="figma:asset/d269b92bdeebd38cc9041aaf0b1e49c8603ce637.png" alt="Route comparison" width="300" height="136" class="rounded-xl shadow-lg" /> 37321</figure> 37322 37323<h2>Statistical Insights</h2> 37324 37325<p>In the quest to optimize transit routes for enhanced efficiency, it is crucial to analyze the effects of these optimizations from multiple perspectives. The statistical insights provided by this microtransit planning tool provide a comprehensive overview of the potential benefits and outcomes. These essential metrics assist transit agencies in evaluating the effectiveness of route adju
37325stments and making well-informed decisions:</p> 37326 37327<figure class="my-8"> 37328 <img src="figma:asset/6c2a005b920fbdcca246f0039ef41f700eaa6417.png" alt="Performance metrics" width="300" height="198" class="rounded-xl shadow-lg" /> 37329</figure> 37330 37331<p><strong>Population Coverage</strong> â The proportion of the population covered by the optimized route. A higher value indicates greater community access to public transit, promoting equity and potential ridership growth.</p> 37332 37333<p><strong>Average Walk per Passenger (miles)</strong> â The average distance passengers must walk to reach their nearest stop. Minimizing this distance enhances convenience and encourages adoption of public transit.</p> 37334 37335<p><strong>Passengers Served per Cycle</strong> â The number of passengers accommodated during a single transit cycle. Maximizing this metric optimizes resource utilization and helps reduce operational costs.</p> 37336 37337<p><strong>Passengers per Hour Served</strong> â The rate at which passengers are served per hour of operation, offering insight into the route's capacity during both peak and off-peak times.</p> 37338 37339<p><strong>Passengers per Mile Served</strong> â The passenger density along the route's length. This metric identifies high-demand areas and informs stop placement and route adjustments.</p> 37340 37341<p>In conclusion, these statistical insights are invaluable tools for transit agencies and planners. They offer a holistic perspective on the benefits and trade-offs associated with route optimization. By carefully considering these metrics, transit professionals can make data-driven decisions to enhance public transit services, improve passenger experiences, and contribute to sustainable urban mobility solutions.</p> 37342 37343<h2>Conclusion</h2> 37344 37345<p>This microtransit planning tool empowers transit agencies to make data-driven decisions, optimizing routes and stops to enhance efficiency and passenger satisfaction. In the face of ongoing urban population growth, such tools are essential for advancing public transportation and promoting sustainable urban mobility.</p>`, yb = [], wb = { 37346 id: pb, 37347 title: Mb, 37348 slug: ub, 37349 author: hb, 37350 category: mb, 37351 publishedDate: xb, 37352 headerImage: _b, 37353 excerpt: bb, 37354 content: vb, 37355 downloads: yb 37356}, Tb = "it-curves-acquires-ai-dev-lab", Sb = "IT Curves Acquires AI Dev Lab to Deepen AI Capabilities Across Transportation Operations", Bb = "
37356it-curves-acquires-ai-dev-lab", kb = "Joshua Thomas", Ab = "Press Release", Nb = "2026-04-06", Ib = "figma:asset/6d514e61f05d39eb93a4099f0746c87d099bb840.png", Pb = "IT Curves has acquired AI Dev Lab, marking a major step in IT Curves' strategy to expand AI across its transportation management software platform.", Cb = `<p><strong>Gaithersburg, Maryland</strong></p> 37357 37358<p>IT Curves is a leading SaaS provider for transit and transportation systems, announced today that it has acquired AI Dev Lab, marking a major step in IT Curves' strategy to expand AI across its transportation management software platform.</p> 37359 37360<p>The acquisition combines AI Dev Lab's more than a decade of AI engineering experience with IT Curves' deep domain expertise in transit and transportation operations and technology.</p> 37361 37362<p>As part of this alignment, AI Dev Lab has established a dedicated transportation team working alongside IT Curves to accelerate the development of intelligent tools built into core transit operations. The teams are focused on helping agencies and transportation providers improve routing, dispatch, rider communication, service visibility, and automation through an AI-integrated platform.</p> 37363 37364<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37365<p>"Artificial Intelligence has rapidly evolved from an emerging technology into a powerful tool capable of transforming complex operational systems. Transportation systems present a unique opportunity to benefit from these advancements. We understand the operational complexity of transit because we operate transportation services ourselves and deploy systems in live transit environments across the country. Bringing AI Dev Lab into IT Curves allows us to move faster, build smarter, and deliver more meaningful innovation across our platform for the transit industry."</p> 37366<p class="mt-2 not-italic">â <strong>Matthew Mohebbi, CEO, IT Curves</strong></p> 37367</blockquote> 37368 37369<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37370<p>"Transportation is one of the most demanding and important environments for applied AI. This is an opportunity to move beyond standalone tools and bring smarter decisions into the core workflows that shape service every day. By joining IT Curves, we can bring stronger AI capabilities into real transit workflows across dispatch, rider support, fleet coordination, trip optimization, and service performance. That makes it possible to build transit-specific tools that improve the experience for both operators and riders."</p> 37371<p class="mt-2 not-italic">â <strong>Jason Wells, CEO, AI Dev Lab</strong></p> 37372</blockquote> 37373 37374<p>Since 2025, the companies have been jointly developing and deploying:</p> 37375 37376<ul> 37377<li>AI-powered reservation and dispatch support</li> 37378<li>Rider communication and self-service tools</li> 37379<li>Fleet visibility and service insight</li> 37380<li>Smarter trip optimization</li> 37381<li>Call center and rider support automation</li> 37382</ul> 37383 37384<p>Unlike general-market AI providers, IT Curves and AI Dev Lab are developing solutions specifically designed for the regulatory, compliance, and operational realities of public transportation systems.</p> 37385 37386<p>The companies will exhibit jointly at upcoming transportation industry conferences and events under a unified presence. Their first joint appearance will be at the 2026 <a href="https://www.swta.org/" class="text-[#EFBB0F] hover:underline" target="_blank" rel="noopener noreferrer">South West Transit Association</a> & New Mexico Joint Annual Conference & Expo between March 31st and April 2nd in Albuquerque, New Mexico.</p> 37387 37388<hr class="my-8 border-gray-700" /> 37389 37390<h3>About IT Curves</h3> 37391 37392<p>IT Curves (Information Technologies Curves, Inc.) is a leading SaaS provider of transit and transportation management systems, serving transit agencies, paratransit providers, and mobility enterprises across the country. IT Curves designs, deploys, and operates technology solutions in live transit environments, bringing both technical expertise and real-world operational experience to every platform it builds. For more information, visit <a href="https://www.itcurves.ai" class="text-[#EFBB0F] hover:underline" target="_blank" rel="noopener noreferrer">www.ITCurves.AI</a>.</p> 37393 37394<h3>About AI Dev Lab</h3> 37395 37396<p>AI Dev Lab is an AI engineering firm that helps organizations move from AI strategy to deployment. Its team brings deep expertise in NLP, MLOps, data science, and custom application development to build practical AI systems that streamline operations, improve decision making, and drive measurable business results. With a dedicated focus on transportation, AI Dev Lab develops tools designed to improve automation, rider experience, and operational performance. For more information, visit <a href="https://www.aidevlab.com" class="text-[#EFBB0F] hover:underline" target="_blank" rel="noopener noreferrer">www.AIDevLab.com</a>.</p> 37397 37398<hr class="my-8 border-gray-700" /> 37399 37400<h3>Media Contact</h3> 37401 37402<p><strong>Joshua Thomas</strong><br />Director of Sales and Marketing, IT Curves<br />301-208-2222<br /><a href="mailto:[email protected]" class="text-[#EFBB0F] hover:underline">[email protected]</a></p>`, Fb = [], Eb = { 37403 id: Tb, 37404 title: Sb, 37405 slug: Bb, 37406 author: kb, 37407 category: Ab, 37408 publishedDate: Nb, 37409 headerImage: Ib, 37410 excerpt: Pb, 37411 content: Cb, 37412 downloads: Fb 37413}, Rb = "what-state-dots-need-most-for-ai", Db = "What State DOTs Say They Need Most for AI â It Isn't Funding", zb = "what-state-dots-need-most-for-ai", jb = "IT Curves", Ob = "Industry Insights", Vb = "2026-07-08", Hb = "imports/THE_FINAL.png", Zb = "A recent AASHTO survey of 76 professionals across 51 state DOTs reveals that not one agency rated itself 'very prepared' for AI â and the top resource they say would move them forward isn't funding. It's training.", Wb = `<p>In a recent <a href="https://transportation.org/systemoperations/wp-content/uploads/sites/2/2026/01/AI_Whitepaper_2026.pdf" class="text-[#0056B3] hover:underline" target="_blank" rel="noopener noreferrer">AASHTO survey</a>, state transportation agencies identified their most pressing need for advancing AI. The survey pulled responses from 76 professionals across 51 State DOTs, covering every region of the country. It's the clearest read available on where the industry actually stands.</p> 37414 37415<p>The findings paint a picture of the transit space today. Not one respondent rated their agency "very prepared" for AI, and adoption remains uneven across regions. But on what's holding agencies back and what would change it, respondents are broadly aligned.</p> 37416 37417<h3>The Missing Piece</h3> 37418 37419<p>It was training their workforce â and by a significant margin.</p> 37420 37421<p>Nearly 79% of respondents named training and skill development as the top resource they need to advance AI, ahead of both funding (67%) and pilot programs (61%). Agencies aren't asking for more money or more experiments first. They're saying the gap is in workforce readiness. The same survey flagged data quality, cybersecurity, and trust in AI reliability as leading barr
37421iers to adoption, but training is the one respondents said would move them forward.</p> 37422 37423<div class="my-8 grid grid-cols-2 gap-6"> 37424 <div class="rounded-xl bg-[#0B1A2E] p-6 text-center"> 37425 <div class="text-[#EFBB0F] text-4xl font-bold mb-2">78.7%</div> 37426 <div class="text-gray-300 text-sm">of state DOTs name training their #1 AI need</div> 37427 </div> 37428 <div class="rounded-xl bg-[#0B1A2E] p-6 text-center"> 37429 <div class="text-[#EFBB0F] text-4xl font-bold mb-2">0</div> 37430 <div class="text-gray-300 text-sm">surveyed agencies rated themselves "very prepared"</div> 37431 </div> 37432</div> 37433 37434<h3>Are You Ready for AI?</h3> 37435 37436<p>The companies that get ahead on AI won't be the ones with the biggest budgets. They'll be the ones with the most prepared teams. With no agency yet rating itself very prepared, workforce readiness is the clearest way to move from watching AI to actually using it.</p> 37437 37438<p>AI Dev Lab, part of IT Curves, offers four in-person AI courses built to close that gap. IT Curves has spent nearly two decades building intelligent transit software and operating transit services for agencies across the country. AI Dev Lab is the applied AI practice that grew from that work. Each course is taught by the people who build these systems and run these services every day â not consultants explaining them from the outside.</p> 37439 37440<h3>Our AI Training Is Your Solution</h3> 37441 37442<p>Every course is designed around real transit work, taught in small groups, with equal attention paid to what AI can do and what can go wrong. Your team leaves with practical skills and the guardrails to use them safely.</p> 37443 37444<p>Here's what your team will learn:</p> 37445 37446<ul> 37447<li><strong>Faster work.</strong> Draft reports, RFPs, rider messages, board updates, meeting notes, and internal research in less time, on the same tools your team already touches.</li> 37448<li><strong>Better output.</strong> Improve clarity, accuracy, tone, structure, and completeness before anything goes to riders, leaders, boards, or the public.</li> 37449<li><strong>Real use cases.</strong> Apply AI to dispatch, planning, customer service, operations, administration, reporting, and policy work.</li> 37450</ul> 37451 37452<h3>AI Training Courses For Every Level</h3> 37453 37454<p>AI Dev Lab offers professionally-led AI courses that will teach your staff how to effectively use AI within your organization.</p> 37455 37456<ul> 37457<li><strong>AI 101 â AI Foundations for Transportation:</strong> Work directly with ChatGPT, Claude, and Microsoft Copilot for everyday transit work: writing, summarizing, policy review, meeting prep, customer communication, planning support, and internal analysis.</li> 37458<li><strong>AI 102 â Introduction to Building with AI for Transportation:</strong> A one-day introduction to AI app builders. Build simple working prototypes with Claude Artifacts, Lovable, and Base44, then see what is useful, what is fragile, and what is not production ready.</li> 37459<li><strong>AI 103 â Introduction to AI Agents for Transportation:</strong> A one-day exploration of agents. Explore agent workflows, copilots, and automation patterns: voice booking, dispatch support, complaint triage, and survey agents.</li> 37460<li><strong>Executive: AI Executive Offsite â Park City, Utah:</strong> Over two days, move from plain-language AI foundations to executive policy, then apply the DRIVE framework to a real initiative. Leave with a draft AI policy, vendor scorecard, 90-day plan, and a working AI app you built.</li> 37461</ul> 37462 37463<h3>What Makes This Different</h3> 37464 37465<p>In-person, instructor-led group sessions. Learn AI's capabilities, limitations, and risks â including hallucinations, privacy, security, ADA, FOIA, and the importance of human oversight â while gaining practical skills to use AI effectively in everyday work.</p> 37466 37467<h3>What Participants Said</h3> 37468 37469<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37470<p>"I went in with a lot of reservations and skepticism. The projects we worked through were fun and engaging, and it helped me rethink how I do my processes and job functions every day. It taught a room with very little AI knowledge in a way everyone could understand."</p> 37471<p class="mt-2 not-italic">â <strong>Cody, Inside Sales Manager</strong></p> 37472</blockquote> 37473
37474<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37475<p>"Guardedly optimistic to start, I felt very comfortable with AI in the workplace by the end. I left thinking of ways I could use it to benefit the company day-to-day."</p> 37476<p class="mt-2 not-italic">â <strong>Bryan, Senior VP of Sales</strong></p> 37477</blockquote> 37478 37479<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37480<p>"Matt did a great job dumbing down the AI hemisphere for us. It was inspiring to see all it can do. I'm looking forward to implementing so many things into my role."</p> 37481<p class="mt-2 not-italic">â <strong>Dawn, Estimation and Contractor Support</strong></p> 37482</blockquote> 37483 37484<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37485<p>"The team made everyone feel comfortable with the technology. It was a kickstart for others to get engaged and think of ways it could help their day-to-day tasks."</p> 37486<p class="mt-2 not-italic">â <strong>Bobby, Senior Sales VP</strong></p> 37487</blockquote> 37488 37489<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37490<p>"Engaging, knowledgeable, and easy to work with. It broke down the basic concepts of what AI is and how to use it. I would take this course again."</p> 37491<p class="mt-2 not-italic">â <strong>Audra, Estimator</strong></p> 37492</blockquote> 37493 37494<blockquote class="my-6 border-l-4 border-[#EFBB0F] pl-6 italic text-gray-300"> 37495<p>"A great training that opened our eyes to the truth about AI and how it could help us. They talked on our level, so we could grasp it and understand what we were doing."</p> 37496<p class="mt-2 not-italic">â <strong>Les, Senior VP of Services</strong></p> 37497</blockquote> 37498 37499<hr class="my-8 border-gray-700" /> 37500 37501<h3>Next Steps</h3> 37502 37503<p>Read more about our AI Workshops on AI Dev Lab's website and book a meeting with us to get started.</p> 37504 37505<div class="flex flex-wrap gap-4 mt-6"> 37506 <a href="https://aidevlab.com/solutions/ai-workshops/" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-6 py-3 bg-[#EFBB0F] text-[#0B1A2E] rounded-lg font-bold text-[15px] hover:bg-[#d9a80d] transition-colors no-underline">AI Workshops</a> 37507 <a href="https://calendly.com/aidevlab-info/aidevlab-lets-talk-ai" target="_blank" rel="noopener noreferrer" class="inline-flex items-center px-6 py-3 border-2 border-[#0B1A2E] text-[#0B1A2E] rounded-lg font-bold text-[15px] hover:bg-[#0B1A2E] hover:text-white transition-colors no-underline">Book a Meeting</a> 37508</div>`, $b = [], qb = { 37509 id: Rb, 37510 title: Db, 37511 slug: zb, 37512 author: jb, 37513 category: Ob, 37514 publishedDate: Vb, 37515 headerImage: Hb, 37516 excerpt: Zb, 37517 content: Wb, 37518 downloads: $b 37519}, zi = [ 37520 Cx, 37521 qb, 37522 Eb, 37523 Wx, 37524 t_, 37525 g_, 37526 y_, 37527 F_, 37528 $_, 37529 ab, 37530 fb, 37531 wb 37532], Ub = globalThis.__GLOBALS__.getAssetURL("6a2dfe6e9364f4cd1dadae79a87d992c4d16a57c.png"), Gb = globalThis.__GLOBALS__.getAssetURL("288b299000b5556d9cc09c77679be47935703a53.png"), Jb = globalThis.__GLOBALS__.getAssetURL("67b6ef54d2d1b0506ea9402d781c39b82ca7968e.png"), Kb = globalThis.__GLOBALS__.getAssetURL("383cc9a4347b75a8a63583ada4c3071702bde6a7.png"), Yb = globalThis.__GLOBALS__.getAssetURL("4775e5c6370a4e2d4e0368e5528397534f442dc7.png"), ji = globalThis.__GLOBALS__.getAssetURL("02725254758f020044c37b31c6ca41922f8e9c7b.png"), Xb = globalThis.__GLOBALS__.getAssetURL("73432ee76cfeab1db2f34208e0b0ebf18e9c41c8.png"), Oi = globalThis.__GLOBALS__.getAssetURL("cb6e05888884648ed42021ba68d3956536a5ac6e.png"), Qb = globalThis.__GLOBALS__.getAssetURL("7fa1a16c30624679815c1e2081c102453e21aa20.png"), ev = globalThis.__GLOBALS__.getAssetURL("6d514e61f05d39eb93a4099f0746c87d099bb840.png"), tv = "/_components/v2/6f7c1cc6f4e6b5f46153147a1b8d898db9975c9c/THE_FINAL.30224583.png", Vi = "/_components/v2/6f7c1cc6f4e6b5f46153147a1b8d898db9975c9c/go_time_picture.e020e2a9.jpg", av = globalThis.__GLOBALS__.getAssetURL("824782ace3e8339710324188c16de2ff5e6a95d1.png"), sv = globalThis.__GLOBALS__.getAssetURL("e701867bc8a0786e54cc6c90c4250a3d2550b3b3.png"), iv = globalThis.__GLOBALS__.getAssetURL("d269b92bdeebd38cc9041aaf0b1e49c8603ce637.png"), rv = globalThis.__GLOBALS__.getAssetURL("6c2a005b920fbdcca246f0039ef41f700eaa6417.png"), nv = globalThis.__GLOBALS__.getAssetURL("f19412db2ecef1d537f6ff432b9d5ca96df8ab8c.png"), ov = globalThis.__GLOBALS__.getAssetURL("7cd64dff8d00d5754e0027dc12f15cb3732a903e.png"), Lv = globalThis.__GLOBALS__.getAssetURL("8fba95ce6beab9e90f39e9ad69ca15376735443e.png"), cv = globalThis.__GLOBALS__.getAssetURL("89218ad2fdc869c8f5e2c2f77203c96cd5d38803.png"), lv = globalThis.__GLOBALS__.getAssetURL("e33a08c206cba55a011a598f053e5c46ae6be835.png"), dv = globalThis.__GLOBALS__.getAssetURL("b1177a278f9181172c77271948a3ac54d9c8f4b0.png"), gv = globalThis.__GLOBALS__.getAssetURL("9247c8fdc9fa602057120d86530d9ddf5db4a920.png"), fv = globalThis.__GLOBALS__.getAssetURL("860baeaed02c95b809929419c4e1fd6cf7f5f538.png"), pv = globalThis.__GLOBALS__.getAssetURL("67c8e187b18256522f80127813a9e9865b0cc124.png"), Mv = globalThis.__GLOBALS__.getAssetURL("26183c86d42a6313e1ad07cf7ccb3d838ddc49f1.png"), uv = globalThis.__GLOBALS__.getAssetURL("0a0ab5c4fbd51
37532741cab85784f8055aef346d3c13.png"), hv = globalThis.__GLOBALS__.getAssetURL("8e0902ebf32faf773dd2dc400d21896c01c53550.png"), mv = globalThis.__GLOBALS__.getAssetURL("a54eb23cbda4cec9ea9cd75b96453ff293129386.png"), xv = globalThis.__GLOBALS__.getAssetURL("7eeedccf52e9a4eb8e0cdf79c865e376275f8215.png"), _v = globalThis.__GLOBALS__.getAssetURL("205119b26907d9e479c8611fe30149ff2bcc7457.png"), bv = globalThis.__GLOBALS__.getAssetURL("b5e7345b9702006c5b202b394f87cd8744957054.png"), vv = globalThis.__GLOBALS__.getAssetURL("0ed86dbb8e51e57678411de19496d882a5ab3872.png"), yv = globalThis.__GLOBALS__.getAssetURL("d8306a80c16b79de54f9671fedf9fd9f8804aad8.png"), wv = globalThis.__GLOBALS__.getAssetURL("065ee1734976ca9ffc38d045bdc748657b47dfc7.png"), Tv = globalThis.__GLOBALS__.getAssetURL("062073bc2b4719db32abe1b0bd0be5a62558ca77.png"), Sv = globalThis.__GLOBALS__.getAssetURL("d58915faa0701de338864ed74de86aa3efedf1a1.png"), Bv = globalThis.__GLOBALS__.getAssetURL("8f085eff9043fef9d2fc2fb8a1d1bbc9192e01cf.png"), kv = globalThis.__GLOBALS__.getAssetURL("118ddc7b2211104bb2ded959b514bd71a27f22f0.png"), Av = globalThis.__GLOBALS__.getAssetURL("83bf4411a547dc144586c9c4e8719aa68c9f7156.png"), Nv = globalThis.__GLOBALS__.getAssetURL("c3bdcb20fc965d58d19337b4ee6417e79126e306.png"), Iv = globalThis.__GLOBALS__.getAssetURL("6d0c304e7a41fba46779283a4a397d8eba0957c6.png"), Pv = globalThis.__GLOBALS__.getAssetURL("96ea3096b56acecc1f9d3c48cc9d2a6f5d79fbb5.png"), Cv = globalThis.__GLOBALS__.getAssetURL("2d3f1eaa012e05015df2f859cde1c91ab17a2d28.png"), Fv = globalThis.__GLOBALS__.getAssetURL("cac31caf4fdd22fe83d150c1b5d42af03d07365f.png"), Ev = globalThis.__GLOBALS__.getAssetURL("71bba80b8d465ac757ab1f18f22cda23cc52f428.png"), Rv = globalThis.__GLOBALS__.getAssetURL("dd25b5b4c2c834e524a7c1a58ff1b6d5988afa71.png"), Dv = globalThis.__GLOBALS__.getAssetURL("e9f0e79e1481968744d01c0eb5e060ee48914343.png"), zv = globalThis.__GLOBALS__.getAssetURL("e5bb79093872c972eb2a284ddea020d2669baf2c.png"), jv = globalThis.__GLOBALS__.getAssetURL("0685852f870466c2eb8721c4f59b5de75c3d2641.png"), Ov = globalThis.__GLOBALS__.getAssetURL("05cae524ee189cde0b3fcf35a2b212d968d4fd64.png"), Vv = globalThis.__GLOBALS__.getAssetURL("095a5767fce0eb57c82a67a919adea882102cc40.png"), Hv = globalThis.__GLOBALS__.getAssetURL("cc9f3b5eb774dfe7bd59d800688742b3ec5f336d.png"), Zv = globalThis.__GLOBALS__.getAssetURL("fef00d5077678e16ccb75269a5c7e5b5be6f0508.png"), Wv = globalThis.__GLOBALS__.getAssetURL("c4276f67b7de01d07887ca24acab55551c2126fd.png"), $v = globalThis.__GLOBALS__.getAssetURL("007c5c3cf2ef96da72614391f7eb1f36ee139ce9.png"), qv = globalThis.__GLOBALS__.getAssetURL("97644761193d90c6610a5d54e016e18b15790a22.png"), Uv = globalThis.__GLOBALS__.getAssetURL("fe04e25ad98773fd9709fb006efd33ec10803093.png"), Gv = globalThis.__GLOBALS__.getAssetURL("00bfe9c0798b22764ac6462fc2edf7f5885f492c.png"), Jv = globalThis.__GLOBALS__.getAssetURL("03994b5ed20e6ad599da99fec7340f2c492cded7.png"), Kv = globalThis.__GLOBALS__.getAssetURL("020fea9a518e519770187e0f1c66266fe94c3559.png"), Yv = globalThis.__GLOBALS__.getAssetURL("70f80de0fb6690f509f46e76a5a4f9d09548d9cd.png"), Xv = globalThis.__GLOBALS__.getAssetURL("674c52b9f71c9c4195751908053db3622c67412c.png"), Qv = globalThis.__GLOBALS__.getAssetURL("85720b196f82dde1bc0243d088be26fb9387d0fa.png"), ey = globalThis.__GLOBALS__.getAssetURL("c5197892554312cfa87e06c8ce2ab64e43fd64e2.png"), ty = globalThis.__GLOBALS__.getAssetURL("d3663a41ff2886882507e2fe2397494b6d8b56b2.png"), ay = globalThis.__GLOBALS__.getAssetURL("9a5847f94aee8ed4dd1c105db3d21cc6131345cf.png"), sy = globalThis.__GLOBALS__.getAssetURL("781ad1e00368e8e8cef759a09f8f0c4e82fe59cd.png"), iy = globalThis.__GLOBALS__.getAssetURL("7510c30c7cad7f788da02b9e308c6465e2bc465a.png"), ry = globalThis.__GLOBALS__.getAssetURL("0b794281909c6668faca58156580976850d1cdb5.png"), ny = globalThis.__GLOBALS__.getAssetURL("e464cb82891e9b87225eb11cd56eebe5bba7fb05.png"), oy = { 37533 "figma:asset/6a2dfe6e9364f4cd1dadae79a87d992c4d16a57c.png": Ub, 37534 "figma:asset/288b299000b5556d9cc09c77679be47935703a53.png": Gb, 37535 "figma:asset/67b6ef54d2d1b0506ea9402d781c39b82ca7968e.png": Jb, 37536 "figma:asset/383cc9a4347b75a8a63583ada4c3071702bde6a7.png": Kb, 37537 "figma:asset/4775e5c6370a4e2d4e0368e5528397534f442dc7.png": Yb, 37538 "figma:asset/02725254758f020044c37b31c6ca41922f8e9c7b.png": ji, 37539 "figma:asset/73432ee76cfeab1db2f34208e0b0ebf18e9c41c8.png": Xb, 37540 "figma:asset/cb6e05888884648ed42021ba68d3956536a5ac6e.png": Oi, 37541 "figma:asset/7fa1a16c30624679815c1e2081c102453e21aa20.png": Qb, 37542 "figma:asset/6d514e61f05d39eb93a4099f0746c87d099bb840.png": ev, 37543 "imports/THE_FINAL.png": tv, 37544 "go-time-annapolis-hero": Vi 37545}
37545; 37546function n5(t) { 37547 return oy[t] || t; 37548} 37549const Ly = { 37550 // Microtransit planning 37551 "figma:asset/824782ace3e8339710324188c16de2ff5e6a95d1.png": av, 37552 "figma:asset/e701867bc8a0786e54cc6c90c4250a3d2550b3b3.png": sv, 37553 "figma:asset/d269b92bdeebd38cc9041aaf0b1e49c8603ce637.png": iv, 37554 "figma:asset/6c2a005b920fbdcca246f0039ef41f700eaa6417.png": rv, 37555 // Rider-centric 37556 "figma:asset/f19412db2ecef1d537f6ff432b9d5ca96df8ab8c.png": nv, 37557 "figma:asset/cb6e05888884648ed42021ba68d3956536a5ac6e.png": Oi, 37558 // Where's My Ride 37559 "figma:asset/7cd64dff8d00d5754e0027dc12f15cb3732a903e.png": ov, 37560 "figma:asset/8fba95ce6beab9e90f39e9ad69ca15376735443e.png": Lv, 37561 "figma:asset/89218ad2fdc869c8f5e2c2f77203c96cd5d38803.png": cv, 37562 "figma:asset/e33a08c206cba55a011a598f053e5c46ae6be835.png": lv, 37563 "figma:asset/b1177a278f9181172c77271948a3ac54d9c8f4b0.png": dv, 37564 "figma:asset/9247c8fdc9fa602057120d86530d9ddf5db4a920.png": gv, 37565 "figma:asset/860baeaed02c95b809929419c4e1fd6cf7f5f538.png": fv, 37566 "figma:asset/67c8e187b18256522f80127813a9e9865b0cc124.png": pv, 37567 "figma:asset/26183c86d42a6313e1ad07cf7ccb3d838ddc49f1.png": Mv, 37568 "figma:asset/0a0ab5c4fbd51741cab85784f8055aef346d3c13.png": uv, 37569 // Commingling 37570 "figma:asset/02725254758f020044c37b31c6ca41922f8e9c7b.png": ji, 37571 "figma:asset/8e0902ebf32faf773dd2dc400d21896c01c53550.png": hv, 37572 "figma:asset/a54eb23cbda4cec9ea9cd75b96453ff293129386.png": mv, 37573 "figma:asset/7eeedccf52e9a4eb8e0cdf79c865e376275f8215.png": xv, 37574 // Rides to Health 37575 "figma:asset/205119b26907d9e479c8611fe30149ff2bcc7457.png": _v, 37576 "figma:asset/b5e7345b9702006c5b202b394f87cd8744957054.png": bv, 37577 "figma:asset/0ed86dbb8e51e57678411de19496d882a5ab3872.png": vv, 37578 "figma:asset/d8306a80c16b79de54f9671fedf9fd9f8804aad8.png": yv, 37579 "figma:asset/065ee1734976ca9ffc38d045bdc748657b47dfc7.png": wv, 37580 "figma:asset/062073bc2b4719db32abe1b0bd0be5a62558ca77.png": Tv, 37581 "figma:asset/d58915faa0701de338864ed74de86aa3efedf1a1.png": Sv, 37582 "figma:asset/8f085eff9043fef9d2fc2fb8a1d1bbc9192e01cf.png": Bv, 37583 // Dial-a-Ride management 37584 "figma:asset/118ddc7b2211104bb2ded959b514bd71a27f22f0.png": kv, 37585 "figma:asset/83bf4411a547dc144586c9c4e8719aa68c9f7156.png": Av, 37586 "figma:asset/c3bdcb20fc965d58d19337b4ee6417e79126e306.png": Nv, 37587 "figma:asset/6d0c304e7a41fba46779283a4a397d8eba0957c6.png": Iv, 37588 "figma:asset/96ea3096b56acecc1f9d3c48cc9d2a6f5d79fbb5.png": Pv, 37589 "figma:asset/2d3f1eaa012e05015df2f859cde1c91ab17a2d28.png": Cv, 37590 "figma:asset/cac31caf4fdd22fe83d150c1b5d42af03d07365f.png": Fv, 37591 "figma:asset/71bba80b8d465ac757ab1f18f22cda23cc52f428.png": Ev, 37592 "figma:asset/dd25b5b4c2c834e524a7c1a58ff1b6d5988afa71.png": Rv, 37593 "figma:asset/e9f0e79e1481968744d01c0eb5e060ee48914343.png": Dv, 37594 "figma:asset/e5bb79093872c972eb2a284ddea020d2669baf2c.png": zv, 37595 "figma:asset/0685852f870466c2eb8721c4f59b5de75c3d2641.png": jv, 37596 "figma:asset/05cae524ee189cde0b3fcf35a2b212d968d4fd64.png": Ov, 37597 "figma:asset/095a5767fce0eb57c82a67a919adea882102cc40.png": Vv, 37598 "figma:asset/cc9f3b5eb774dfe7bd59d800688742b3ec5f336d.png": Hv, 37599 "figma:asset/fef00d5077678e16ccb75269a5c7e5b5be6f0508.png": Zv, 37600 "figma:asset/c4276f67b7de01d07887ca24acab55551c2126fd.png": Wv, 37601 "figma:asset/007c5c3cf2ef96da72614391f7eb1f36ee139ce9.png": $v, 37602 "figma:asset/97644761193d90c6610a5d54e016e18b15790a22.png": qv, 37603 "figma:asset/fe04e25ad98773fd9709fb006efd33ec10803093.png": Uv, 37604 "figma:asset/00bfe9c0798b22764ac6462fc2edf7f5885f492c.png": Gv, 37605 "figma:asset/03994b5ed20e6ad599da99fec7340f2c492cded7.png": Jv, 37606 "figma:asset/020fea9a518e519770187e0f1c66266fe94c3559.png": Kv, 37607 "figma:asset/70f80de0fb6690f509f46e76a5a4f9d09548d9cd.png": Yv, 37608 "figma:asset/674c52b9f71c9c4195751908053db3622c67412c.png": Xv, 37609 "figma:asset/85720b196f82dde1bc0243d088be26fb9387d0fa.png": Qv, 37610 "figma:asset/c5197892554312cfa87e06c8ce2ab64e43fd64e2.png": ey, 37611 "figma:asset/d3663a41ff2886882507e2fe2397494b6d8b56b2.png": ty, 37612 "figma:asset/9a5847f94aee8ed4dd1c105db3d21cc6131345cf.png": ay, 37613 "figma:asset/781ad1e00368e8e8cef759a09f8f0c4e82fe59cd.png": sy, 37614 "figma:asset/7510c30c7cad7f788da02b9e308c6465e2bc465a.png": iy, 37615 "figma:asset/0b794281909c6668faca58156580976850d1cdb5.png": ry, 37616 // Airport Shuttle
37617 "figma:asset/e464cb82891e9b87225eb11cd56eebe5bba7fb05.png": ny 37618}; 37619function cy(t) { 37620 let e = t; 37621 for (const [s, r] of Object.entries(Ly)) { 37622 const n = s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); 37623 e = e.replace(new RegExp(n, "g"), r); 37624 } 37625 return e; 37626} 37627function ly() { 37628 const t = [...zi].sort( 37629 (s, r) => new Date(r.publishedDate).getTime() - new Date(s.publishedDate).getTime() 37630 ), e = (s) => { 37631 const [r, n, o] = s.split("-").map(Number); 37632 return new Date(r, n - 1, o).toLocaleDateString("en-US", { 37633 year: "numeric", 37634 month: "long", 37635 day: "numeric" 37636 }); 37637 }; 37638 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas0", _fgB: 1790697589478, _fgD: !0, className: "min-h-screen bg-gradient-to-b from-slate-50 to-white", "data-fg-ddas0": ":0:/src/app/pages/NewsArticlesPageV2.tsx:25:5:818:8252:e:div:xtetxtete:1", children: [ 37639 /* @__PURE__ */ c(a, { _fgT: "section", _fgS: "ddas2", _fgB: 1790697589478, className: "relative bg-gradient-to-br from-[#0B1B2B] via-[#0F2942] to-[#0B1B2B] text-white py-24 px-6 overflow-hidden", "data-fg-ddas2": ":0:/src/app/pages/NewsArticlesPageV2.tsx:27:7:922:1109:e:section:ete", children: [
37640 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas3", _fgB: 1790697589478, className: "absolute inset-0 opacity-10", "data-fg-ddas3": ":0:/src/app/pages/NewsArticlesPageV2.tsx:28:9:1059:261:e:div:ete", children: [ 37641 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas4", _fgB: 1790697589478, className: "absolute top-20 left-10 w-96 h-96 bg-blue-500 rounded-full blur-3xl", "data-fg-ddas4": ":0:/src/app/pages/NewsArticlesPageV2.tsx:29:11:1115:87:e:div" }), 37642 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas5", _fgB: 1790697589478, className: "absolute bottom-20 right-10 w-96 h-96 bg-[#EFBB0F] rounded-full blur-3xl", "data-fg-ddas5": ":0:/src/app/pages/NewsArticlesPageV2.tsx:30:11:1213:92:e:div" }) 37643 ] }), 37644 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas6", _fgB: 1790697589478, className: "max-w-7xl mx-auto relative z-10", "data-fg-ddas6": ":0:/src/app/pages/NewsArticlesPageV2.tsx:33:9:1330:684:e:div:e", children: /* @__PURE__ */ c( 37645 a, 37646 { 37647 _fgT: m.div, 37648 _fgS: "ddas7", 37649 _fgB: 1790697589478, 37650 initial: { opacity: 0, y: 30 }, 37651 animate: { opacity: 1, y: 0 }, 37652 transition: { duration: 0.6 }, 37653 className: "text-center", 37654 "data-fg-ddas7": ":0:/src/app/pages/NewsArticlesPageV2.tsx:34:11:1390:609:e:motion.div:etete", 37655 children: [
37656 /* @__PURE__ */ i(a, { _fgT: "h1", _fgS: "ddas8", _fgB: 1790697589478, className: "font-['DM_Serif_Display'] text-5xl md:text-6xl mb-6", "data-fg-ddas8": ":0:/src/app/pages/NewsArticlesPageV2.tsx:40:13:1592:116:e:h1:t", children: "News & Articles" }), 37657 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddas10", _fgB: 1790697589478, className: "text-xl text-slate-300 max-w-3xl mx-auto", "data-fg-ddas10": ":0:/src/app/pages/NewsArticlesPageV2.tsx:43:13:1721:153:e:p:t", children: "Insights, updates, and thought leadership from the IT Curves team" }), 37658 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddas12", _fgB: 1790697589478, className: "text-sm text-[#EFBB0F] mt-4 uppercase tracking-widest", "data-fg-ddas12": ":0:/src/app/pages/NewsArticlesPageV2.tsx:46:13:1887:88:e:p:t", children: "News & Articles" }) 37659 ] 37660 } 37661 ) }) 37662 ] }), 37663 /* @__PURE__ */ i(a, { _fgT: "section", _fgS: "ddas15", _fgB: 1790697589478, className: "py-20 px-6", "data-fg-ddas15": ":0:/src/app/pages/NewsArticlesPageV2.tsx:52:7:2067:6974:e:section:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas16", _fgB: 1790697589478, className: "max-w-7xl mx-auto", "data-fg-ddas16": ":0:/src/app/pages/NewsArticlesPageV2.tsx:53:9:2108:6916:e:div:x", children: t.length === 0 ? /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas18", _fgB: 1790697589478, className: "text-center py-20", "data-fg-ddas18": ":0:/src/app/pages/NewsArticlesPageV2.tsx:55:13:2199:153:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddas19", _fgB: 1790697589478, className: "text-xl text-slate-500", "data-fg-ddas19": ":0:/src/app/pages/NewsArticlesPageV2.tsx:56:15:2249:84:e:p:t", children: "No articles migrated yet. Check back soon!" }) }) : /* @__PURE__ */ c(C, { children: [ 37664 t.length > 0 && (() => { 37665 const s = t[0]; 37666 return /* @__PURE__ */ i( 37667 a, 37668 { 37669 _fgT: m.article, 37670 _fgS: "ddas24", 37671 _fgB: 1790697589478, 37672 initial: { opacity: 0, y: 30 }, 37673 whileInView: { opacity: 1, y: 0 }, 37674 viewport: { once: !0 }, 37675 transition: { duration: 0.6 }, 37676 className: "mb-16", 37677 "data-fg-ddas24": ":0:/src/app/pages/NewsArticlesPageV2.tsx:64:19:2571:3465:e:motion.article:e", 37678 children: /* @__PURE__ */ i(a, { _fgT: E, _fgS: "ddas25", _fgB: 1790697589478, href: `/news-articles/${s.slug}`, className: "block group", "data-fg-ddas25": ":0:node_modules/wouter:71:21:2869:3131:e:Link:e:::::C4yE", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas26", _fgB: 1790697589478, className: "relative rounded-2xl overflow-hidden shadow-lg hover:shadow-2xl transition-shadow duration-300 border border-slate-100 bg-white", "data-fg-ddas26": ":0:/src/app/pages/NewsArticlesPageV2.tsx:72:23:2963:3009:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas27", _fgB: 1790697589478, className: "grid grid-cols-1 lg:grid-cols-2", "data-fg-ddas27": ":0:/src/app/pages/NewsArticlesPageV2.tsx:73:25:3133:2810:e:div:xtetxte", children: [
37679 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas29", _fgB: 1790697589478, className: "relative min-h-72 lg:min-h-[420px] overflow-hidden bg-slate-200", "data-fg-ddas29": ":0:/src/app/pages/NewsArticlesPageV2.tsx:75:27:3249:444:e:div:e", children: /* @__PURE__ */ i( 37680 a, 37681 { 37682 _fgT: "img", 37683 _fgS: "ddas30", 37684 _fgB: 1790697589478, 37685 src: n5(s.headerImage), 37686 alt: s.title, 37687 className: "absolute inset-0 w-full h-full object-cover group-hover:scale-105 transition-transform duration-500", 37688 "data-fg-ddas30": ":0:/src/app/pages/NewsArticlesPageV2.tsx:76:29:3359:301:e:img" 37689 } 37690 ) }), 37691 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas32", _fgB: 1790697589478, className: "p-8 lg:p-12 flex flex-col justify-center", "data-fg-ddas32": ":0:/src/app/pages/NewsArticlesPageV2.tsx:84:27:3763:2149:e:div:etetetete", children: [ 37692 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas33", _fgB: 1790697589478, className: "flex items-center gap-2 mb-4", "data-fg-ddas33": ":0:/src/app/pages/NewsArticlesPageV2.tsx:85:29:3850:630:e:div:ete", children: [
37693 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddas34", _fgB: 1790697589478, className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-[#EFBB0F] text-[#0B1B2B] text-xs font-bold rounded-full uppercase tracking-wide", "data-fg-ddas34": ":0:/src/app/pages/NewsArticlesPageV2.tsx:86:31:3927:225:e:span:t", children: "Featured" }), 37694 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "ddas36", _fgB: 1790697589478, className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-[#0056B3] text-white text-xs font-semibold rounded-full", "data-fg-ddas36": ":0:/src/app/pages/NewsArticlesPageV2.tsx:89:31:4183:262:e:span:etx", children: [ 37695 /* @__PURE__ */ i(a, { _fgT: G4, _fgS: "ddas37", _fgB: 1790697589478, size: 12, "data-fg-ddas37": ":0:node_modules/lucide-react:90:33:4338:17:e:Tag::::::BKy" }), 37696 s.category 37697 ] }) 37698 ] }), 37699 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas39", _fgB: 1790697589478, className: "flex items-center gap-2 text-sm text-slate-500 mb-4", "data-fg-ddas39": ":0:/src/app/pages/NewsArticlesPageV2.tsx:94:29:4509:534:e:div:etetx", children: [
37700 /* @__PURE__ */ i(a, { _fgT: i2, _fgS: "ddas40", _fgB: 1790697589478, size: 14, "data-fg-ddas40": ":0:node_modules/lucide-react:95:31:4609:22:e:Calendar::::::Bbz4" }), 37701 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddas41", _fgB: 1790697589478, "data-fg-ddas41": ":0:/src/app/pages/NewsArticlesPageV2.tsx:96:31:4662:49:e:span:x", children: e(s.publishedDate) }), 37702 s.author && /* @__PURE__ */ c(C, { children: [ 37703 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddas45", _fgB: 1790697589478, className: "text-slate-300", "data-fg-ddas45": ":0:/src/app/pages/NewsArticlesPageV2.tsx:99:35:4833:41:e:span:t", children: "â¢" }), 37704 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddas47", _fgB: 1790697589478, "data-fg-ddas47": ":0:/src/app/pages/NewsArticlesPageV2.tsx:100:35:4909:30:e:span:x", children: s.author }) 37705 ] }) 37706 ] }), 37707 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "ddas49", _fgB: 1790697589478, className: "text-3xl lg:text-4xl font-bold text-slate-900 mb-4 group-hover:text-[#0056B3] transition-colors", "data-fg-ddas49": ":0:/src/app/pages/NewsArticlesPageV2.tsx:105:29:5073:193:e:h2:x", children: s.title }),
37708 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddas51", _fgB: 1790697589478, className: "text-slate-600 text-lg mb-8 line-clamp-4", "data-fg-ddas51": ":0:/src/app/pages/NewsArticlesPageV2.tsx:109:29:5296:138:e:p:x", children: s.excerpt }), 37709 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "ddas53", _fgB: 1790697589478, className: "inline-flex items-center gap-2 text-[#0056B3] font-semibold group-hover:text-[#004494] transition-colors", "data-fg-ddas53": ":0:/src/app/pages/NewsArticlesPageV2.tsx:113:29:5464:415:e:span:te", children: [ 37710 "Read Full Article", 37711 /* @__PURE__ */ i( 37712 a, 37713 { 37714 _fgT: D, 37715 _fgS: "ddas55", 37716 _fgB: 1790697589478, 37717 size: 18, 37718 className: "group-hover:translate-x-1 transition-transform", 37719 "data-fg-ddas55": ":0:node_modules/lucide-react:115:31:5666:177:e:ArrowRight::::::s5N" 37720 } 37721 ) 37722 ] }) 37723 ] }) 37724 ] }) }) }) 37725 } 37726 ); 37727 })(), 37728 t.length > 1 && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas58", _fgB: 1790697589478, className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", "data-fg-ddas58": ":0:/src/app/pages/NewsArticlesPageV2.tsx:130:17:6185:2778:e:div:x", children: t.slice(1).map((s, r) => /* @__PURE__ */ c( 37729 a, 37730 { 37731 _fgT: m.article, 37732 _fgS: "ddas60", 37733 _fgB: 1790697589478, 37734 initial: { opacity: 0, y: 30 }, 37735 whileInView: { opacity: 1, y: 0 }, 37736 viewport: { once: !0 }, 37737 transition: { duration: 0.5, delay: r * 0.1 }, 37738 className: "bg-white rounded-2xl overflow-hidden shadow-lg hover:shadow-2xl transition-shadow duration-300 border border-slate-100 flex flex-col h-full", 37739 "data-fg-ddas60": ":0:/src/app/pages/NewsArticlesPageV2.tsx:132:21:6345:2573:e:motion.article:xtetxte", 37740 children: [
37741 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas62", _fgB: 1790697589478, className: "relative h-56 overflow-hidden bg-slate-200", "data-fg-ddas62": ":0:/src/app/pages/NewsArticlesPageV2.tsx:141:23:6893:745:e:div:ete", children: [ 37742 /* @__PURE__ */ i( 37743 a, 37744 { 37745 _fgT: "img", 37746 _fgS: "ddas63", 37747 _fgB: 1790697589478, 37748 src: n5(s.headerImage), 37749 alt: s.title, 37750 className: "w-full h-full object-cover hover:scale-105 transition-transform duration-500", 37751 "data-fg-ddas63": ":0:/src/app/pages/NewsArticlesPageV2.tsx:142:25:6978:260:e:img" 37752 } 37753 ), 37754 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "ddas64", _fgB: 1790697589478, className: "absolute top-4 left-4", "data-fg-ddas64": ":0:/src/app/pages/NewsArticlesPageV2.tsx:147:25:7263:346:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "ddas65", _fgB: 1790697589478, className: "inline-flex items-center gap-1.5 px-3 py-1.5 bg-[#0056B3] text-white text-xs font-semibold rounded-full", "data-fg-ddas65": ":0:/src/app/pages/NewsArticlesPageV2.tsx:148:27:7329:249:e:span:etx", children: [
37755 /* @__PURE__ */ i(a, { _fgT: G4, _fgS: "ddas66", _fgB: 1790697589478, size: 12, "data-fg-ddas66": ":0:node_modules/lucide-react:149:29:7480:17:e:Tag::::::BKy" }), 37756 s.category 37757 ] }) }) 37758 ] }), 37759 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas69", _fgB: 1790697589478, className: "p-6 flex flex-col flex-grow", "data-fg-ddas69": ":0:/src/app/pages/NewsArticlesPageV2.tsx:156:23:7700:1180:e:div:etetete", children: [ 37760 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "ddas70", _fgB: 1790697589478, className: "flex items-center gap-2 text-sm text-slate-500 mb-3", "data-fg-ddas70": ":0:/src/app/pages/NewsArticlesPageV2.tsx:157:25:7770:224:e:div:ete", children: [ 37761 /* @__PURE__ */ i(a, { _fgT: i2, _fgS: "ddas71", _fgB: 1790697589478, size: 14, "data-fg-ddas71": ":0:node_modules/lucide-react:158:27:7866:22:e:Calendar::::::Bbz4" }), 37762 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "ddas72", _fgB: 1790697589478, "data-fg-ddas72": ":0:/src/app/pages/NewsArticlesPageV2.tsx:159:27:7915:48:e:span:x", children: e(s.publishedDate) }) 37763 ] }),
37764 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "ddas74", _fgB: 1790697589478, className: "text-2xl font-bold text-slate-900 mb-3 line-clamp-2", "data-fg-ddas74": ":0:/src/app/pages/NewsArticlesPageV2.tsx:162:25:8020:140:e:h2:x", children: s.title }), 37765 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "ddas76", _fgB: 1790697589478, className: "text-slate-600 mb-6 line-clamp-3 flex-grow", "data-fg-ddas76": ":0:/src/app/pages/NewsArticlesPageV2.tsx:166:25:8186:131:e:p:x", children: s.excerpt }), 37766 /* @__PURE__ */ c( 37767 a, 37768 { 37769 _fgT: E, 37770 _fgS: "ddas78", 37771 _fgB: 1790697589478, 37772 href: `/news-articles/${s.slug}`, 37773 className: "group inline-flex items-center gap-2 text-[#0056B3] font-semibold hover:text-[#004494] transition-colors mt-auto", 37774 "data-fg-ddas78": ":0:node_modules/wouter:170:25:8343:508:e:Link:te:::::C4yE", 37775 children: [ 37776 "Read More",
37777 /* @__PURE__ */ i( 37778 a, 37779 { 37780 _fgT: D, 37781 _fgS: "ddas80", 37782 _fgB: 1790697589478, 37783 size: 18, 37784 className: "group-hover:translate-x-1 transition-transform", 37785 "data-fg-ddas80": ":0:node_modules/lucide-react:175:27:8654:165:e:ArrowRight::::::s5N" 37786 } 37787 ) 37788 ] 37789 } 37790 ) 37791 ] }) 37792 ] 37793 }, 37794 s.id 37795 )) }) 37796 ] }) }) }), 37797 /* @__PURE__ */ i(a, { _fgT: Me, _fgS: "ddas81", _fgB: 1790697589478, "data-fg-ddas81": ":0:/src/app/pages/NewsArticlesPageV2.tsx:190:7:9049:10:e:Footer::::::B1Vv" }) 37798 ] }); 37799} 37800function dy() { 37801 const e = Y6().slug, s = zi.find((o) => o.slug === e), r = M1(() => { 37802 if (!s) return ""; 37803 let o = cy(s.content); 37804 return o = o.replace( 37805 /(<blockquote[^>]*>)([\s\S]*?)<p\s+class="[^"]*not-italic[^"]*">([\s\S]*?)<\/p>\s*<\/blockquote>/g, 37806 '$1$2</blockquote><p class="blockquote-attribution">$3</p>' 37807 ), o = o.replace(/<h2[^>]*>[\s\S]*?<\/h2>/, ""), s.category === "Press Release" && (o = o.replace(/<p><strong>Gaithersburg, Maryland<\/strong><\/p>\s*/, "")), o; 37808 }, [s]); 37809 if (!s) 37810 return /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys70", _fgB: 1790697589528, className: "min-h-screen bg-white flex items-center justify-center px-6", "data-fg-dys70": ":0:/src/app/pages/ArticleDetailPageV2.tsx:35:7:1400:666:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys71", _fgB: 1790697589528, className: "text-center", "data-fg-dys71": ":0:/src/app/pages/ArticleDetailPageV2.tsx:36:9:1486:567:e:div:etete", children: [
37811 /* @__PURE__ */ i(a, { _fgT: "h1", _fgS: "dys72", _fgB: 1790697589528, className: "text-4xl font-bold text-slate-900 mb-4", "data-fg-dys72": ":0:/src/app/pages/ArticleDetailPageV2.tsx:37:11:1526:77:e:h1:t", children: "Article Not Found" }), 37812 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dys74", _fgB: 1790697589528, className: "text-lg text-slate-600 mb-8", "data-fg-dys74": ":0:/src/app/pages/ArticleDetailPageV2.tsx:38:11:1614:126:e:p:t", children: "Sorry, we couldn't find the article you're looking for." }), 37813 /* @__PURE__ */ c( 37814 a, 37815 { 37816 _fgT: E, 37817 _fgS: "dys76", 37818 _fgB: 1790697589528, 37819 href: "/news-articles", 37820 className: "inline-flex items-center gap-2 bg-[#0056B3] text-white px-6 py-3 rounded-full font-semibold hover:bg-[#004494] transition-colors", 37821 "data-fg-dys76": ":0:node_modules/wouter:41:11:1751:287:e:Link:et:::::C4yE", 37822 children: [ 37823 /* @__PURE__ */ i(a, { _fgT: O1, _fgS: "dys77", _fgB: 1790697589528, size: 18, "data-fg-dys77": ":0:node_modules/lucide-react:45:13:1968:23:e:ArrowLeft::::::EIC8" }), 37824 "Back to Articles" 37825 ] 37826 } 37827 ) 37828 ] }) }); 37829 const n = (o) => { 37830 const [L, d, l] = o.split("-").map(Number); 37831 return new Date(L, d - 1, l).toLocaleDateString("en-US", { 37832 year: "numeric", 37833 month: "long", 37834 day: "numeric" 37835 }); 37836 }; 37837 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys79", _fgB: 1790697589528, _fgD: !0, className: "min-h-screen bg-white", "data-fg-dys79": ":0:/src/app/pages/ArticleDetailPageV2.tsx:64:5:2382:7687:e:div:xtetxtetxte:1", children: [ 37838 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys711", _fgB: 1790697589528, className: "bg-slate-50 border-b border-slate-200", "data-fg-dys711": ":0:/src/app/pages/ArticleDetailPageV2.tsx:66:7:2454:407:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys712", _fgB: 1790697589528, className: "max-w-4xl mx-auto px-6 py-4", "data-fg-dys712": ":0:/src/app/pages/ArticleDetailPageV2.tsx:67:9:2518:330:e:div:e", children: /* @__PURE__ */ c( 37839 a, 37840 { 37841 _fgT: E, 37842 _fgS: "dys713", 37843 _fgB: 1790697589528, 37844 href: "/news-articles", 37845 className: "inline-flex items-center gap-2 text-slate-600 hover:text-[#0056B3] transition-colors font-medium", 37846 "data-fg-dys713": ":0:node_modules/wouter:68:11:2574:259:e:Link:et:::::C4yE", 37847 children: [
37848 /* @__PURE__ */ i(a, { _fgT: O1, _fgS: "dys714", _fgB: 1790697589528, size: 18, "data-fg-dys714": ":0:node_modules/lucide-react:72:13:2759:23:e:ArrowLeft::::::EIC8" }), 37849 "Back to All Articles" 37850 ] 37851 } 37852 ) }) }), 37853 /* @__PURE__ */ i(a, { _fgT: "article", _fgS: "dys717", _fgB: 1790697589528, className: "max-w-4xl mx-auto px-6 py-12", "data-fg-dys717": ":0:/src/app/pages/ArticleDetailPageV2.tsx:79:7:2898:6391:e:article:e", children: /* @__PURE__ */ c( 37854 a, 37855 { 37856 _fgT: m.div, 37857 _fgS: "dys718", 37858 _fgB: 1790697589528, 37859 initial: { opacity: 0, y: 30 }, 37860 animate: { opacity: 1, y: 0 }, 37861 transition: { duration: 0.6 }, 37862 "data-fg-dys718": ":0:/src/app/pages/ArticleDetailPageV2.tsx:80:9:2957:6315:e:motion.div:xtxtxtxtxtetxtx", 37863 children: [ 37864 s.category === "Press Release" ? /* @__PURE__ */ c(C, { children: [ 37865 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dys723", _fgB: 1790697589528, className: "uppercase tracking-[0.2em] text-[13px] text-[#0056B3] font-semibold mb-8", "data-fg-dys723": ":0:/src/app/pages/ArticleDetailPageV2.tsx:89:15:3260:145:e:p:t", children: "For Immediate Release" }),
37866 /* @__PURE__ */ i(a, { _fgT: "h1", _fgS: "dys726", _fgB: 1790697589528, className: "font-['DM_Serif_Display'] text-4xl md:text-5xl text-slate-900 mb-6 leading-tight", "data-fg-dys726": ":0:/src/app/pages/ArticleDetailPageV2.tsx:94:15:3449:149:e:h1:x", children: s.title }), 37867 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys729", _fgB: 1790697589528, className: "mb-8 pb-8 border-b border-slate-200", "data-fg-dys729": ":0:/src/app/pages/ArticleDetailPageV2.tsx:99:15:3659:329:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "dys730", _fgB: 1790697589528, className: "text-[17px] text-[#5A6A80]", "data-fg-dys730": ":0:/src/app/pages/ArticleDetailPageV2.tsx:100:17:3729:238:e:p:etstx", children: [ 37868 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dys731", _fgB: 1790697589528, className: "font-semibold text-[#0B1B2B]", "data-fg-dys731": ":0:/src/app/pages/ArticleDetailPageV2.tsx:101:19:3790:76:e:span:t", children: "Gaithersburg, Maryland" }), 37869 " â ", 37870 n(s.publishedDate) 37871 ] }) }) 37872 ] }) : /* @__PURE__ */ c(C, { children: [
37873 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys736", _fgB: 1790697589528, className: "mb-6", "data-fg-dys736": ":0:/src/app/pages/ArticleDetailPageV2.tsx:109:15:4050:275:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dys737", _fgB: 1790697589528, className: "inline-flex items-center gap-2 px-4 py-2 bg-[#0056B3] text-white text-sm font-semibold rounded-full", "data-fg-dys737": ":0:/src/app/pages/ArticleDetailPageV2.tsx:110:17:4089:215:e:span:etx", children: [ 37874 /* @__PURE__ */ i(a, { _fgT: G4, _fgS: "dys738", _fgB: 1790697589528, size: 14, "data-fg-dys738": ":0:node_modules/lucide-react:111:19:4226:17:e:Tag::::::BKy" }), 37875 s.category 37876 ] }) }), 37877 /* @__PURE__ */ i(a, { _fgT: "h1", _fgS: "dys741", _fgB: 1790697589528, className: "font-['DM_Serif_Display'] text-4xl md:text-5xl text-slate-900 mb-6 leading-tight", "data-fg-dys741": ":0:/src/app/pages/ArticleDetailPageV2.tsx:117:15:4369:149:e:h1:x", children: s.title }), 37878 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys744", _fgB: 1790697589528, className: "flex flex-wrap items-center gap-6 text-slate-600 mb-8 pb-8 border-b border-slate-200", "data-fg-dys744": ":0:/src/app/pages/ArticleDetailPageV2.tsx:122:15:4565:502:e:div:ete", children: [
37879 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys745", _fgB: 1790697589528, className: "flex items-center gap-2", "data-fg-dys745": ":0:/src/app/pages/ArticleDetailPageV2.tsx:123:17:4684:173:e:div:ete", children: [ 37880 /* @__PURE__ */ i(a, { _fgT: v2, _fgS: "dys746", _fgB: 1790697589528, size: 18, "data-fg-dys746": ":0:node_modules/lucide-react:124:19:4744:18:e:User::::::wpV" }), 37881 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dys747", _fgB: 1790697589528, className: "font-medium", "data-fg-dys747": ":0:/src/app/pages/ArticleDetailPageV2.tsx:125:19:4781:53:e:span:x", children: s.author }) 37882 ] }), 37883 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys749", _fgB: 1790697589528, className: "flex items-center gap-2", "data-fg-dys749": ":0:/src/app/pages/ArticleDetailPageV2.tsx:127:17:4874:172:e:div:ete", children: [ 37884 /* @__PURE__ */ i(a, { _fgT: i2, _fgS: "dys750", _fgB: 1790697589528, size: 18, "data-fg-dys750": ":0:node_modules/lucide-react:128:19:4934:22:e:Calendar::::::Bbz4" }),
37885 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dys751", _fgB: 1790697589528, "data-fg-dys751": ":0:/src/app/pages/ArticleDetailPageV2.tsx:129:19:4975:48:e:span:x", children: n(s.publishedDate) }) 37886 ] }) 37887 ] }) 37888 ] }), 37889 s.category !== "Press Release" && /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys755", _fgB: 1790697589528, className: "mb-12 rounded-2xl overflow-hidden shadow-xl", "data-fg-dys755": ":0:/src/app/pages/ArticleDetailPageV2.tsx:137:13:5222:265:e:div:e", children: /* @__PURE__ */ i( 37890 a, 37891 { 37892 _fgT: "img", 37893 _fgS: "dys756", 37894 _fgB: 1790697589528, 37895 src: n5(s.headerImage), 37896 alt: s.title, 37897 className: "w-full h-auto object-cover", 37898 "data-fg-dys756": ":0:/src/app/pages/ArticleDetailPageV2.tsx:138:15:5298:170:e:img" 37899 } 37900 ) }), 37901 /* @__PURE__ */ i( 37902 a, 37903 { 37904 _fgT: "div", 37905 _fgS: "dys758", 37906 _fgB: 1790697589528, 37907 className: `prose prose-lg max-w-none mb-12 37908 [&_h2]:font-['DM_Serif_Display'] 37909 [&_h2]:text-[40px] 37910 [&_h2]:leading-[1.2] 37911 [&_h2]:text-[#0B1B2B] 37912 [&_h2]:mt-16 37913 [&_h2]:mb-8 37914 [&_h2]:pt-8 37915 [&_h2]:border-t-2 37916 [&_h2]:border-[#0056B3]/20 37917 [&_h3]:font-['DM_Serif_Display'] 37918 [&_h3]:text-[28px] 37919 [&_h3]:leading-[1.2] 37920 [&_h3]:text-[#0B1B2B] 37921 [&_h3]:mt-10 37922 [&_h3]:mb-6 37923 [&_h4]:font-['DM_Serif_Display'] 37924 [&_h4]:text-[22px] 37925 [&_h4]:leading-[1.3] 37926 [&_h4]:text-[#0B1B2B] 37927 [&_h4]:mt-8 37928 [&_h4]:mb-4 37929 [&_p]:text-[17px] 37930 [&_p]:leading-[1.7] 37931 [&_p]:text-[#5A6A80] 37932 [&_p]:mb-6 37933 [&_a]:text-[#0056B3] 37934 [&_a]:no-underline 37935 [&_a]:hover:underline 37936 [&_strong]:text-[#0B1B2B] 37937 [&_strong]:font-semibold 37938 [&_ul]:my-6 37939 [&_ul]:space-y-0 37940 [&_ul]:list-disc 37941 [&_ul]:pl-6 37942 [&_li]:text-[17px] 37943 [&_li]:leading-[1.7] 37944 [&_li]:text-[#5A6A80] 37945 [&_img]:rounded-xl 37946 [&_img]:shadow-lg 37947 [&_img]:my-10 37948 [&_figcaption]:text-center 37949 [&_figcaption]:text-sm 37950 [&_figcaption]:text-[#5A6A80] 37951 [&_figcaption]:mt-3 37952 [&_blockquote]:border-l-4 37953 [&_blockquote]:border-[#0056B3] 37954 [&_blockquote]:pl-6 37955 [&_blockquote]:italic 37956 [&_blockquote]:text-[#5A6A80] 37957 [&_.blockquote-attribution]:not-italic 37958 [&_.blockquote-attribution]:text-[15px] 37959 [&_.blockquote-attribution]:text-[#0B1B2B] 37960 [&_.blockquote-attribution]:mt-2 37961 [&_.blockquote-attribution]:mb-8 37962 [&_.text-gray-300]:!text-gray-300 37963 [&_.text-\\[#EFBB0F\\]]:!text-[#EFBB0F]`, 37964 dangerouslySetInnerHTML: { __html: r }, 37965 "data-fg-dys758": ":0:/src/app/pages/ArticleDetailPageV2.tsx:147:11:5546:2185:e:div" 37966 } 37967 ), 37968 s.downloads && s.downloads.length > 0 && /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys761", _fgB: 1790697589528, className: "mt-12 pt-8 border-t border-slate-200", "data-fg-dys761": ":0:/src/app/pages/ArticleDetailPageV2.tsx:210:13:7847:1390:e:div:ete", children: [
37969 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dys762", _fgB: 1790697589528, className: "font-['DM_Serif_Display'] text-2xl text-slate-900 mb-6", "data-fg-dys762": ":0:/src/app/pages/ArticleDetailPageV2.tsx:211:15:7916:117:e:h3:t", children: "Downloads" }), 37970 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys764", _fgB: 1790697589528, className: "space-y-4", "data-fg-dys764": ":0:/src/app/pages/ArticleDetailPageV2.tsx:214:15:8048:1170:e:div:x", children: s.downloads.map((o, L) => /* @__PURE__ */ c( 37971 a, 37972 { 37973 _fgT: "a", 37974 _fgS: "dys766", 37975 _fgB: 1790697589528, 37976 href: o.url, 37977 download: !0, 37978 className: "flex items-center gap-4 p-4 bg-slate-50 hover:bg-slate-100 rounded-xl border border-slate-200 transition-colors group", 37979 "data-fg-dys766": ":0:/src/app/pages/ArticleDetailPageV2.tsx:216:19:8156:1021:e:a:etete", 37980 children: [ 37981 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys767", _fgB: 1790697589528, className: "flex-shrink-0 w-12 h-12 bg-[#0056B3] rounded-lg flex items-center justify-center", "data-fg-dys76
379817": ":0:/src/app/pages/ArticleDetailPageV2.tsx:222:21:8450:193:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: Kc, _fgS: "dys768", _fgB: 1790697589528, size: 24, className: "text-white", "data-fg-dys768": ":0:node_modules/lucide-react:223:23:8571:45:e:Download::::::yh6" }) }), 37982 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys769", _fgB: 1790697589528, className: "flex-grow", "data-fg-dys769": ":0:/src/app/pages/ArticleDetailPageV2.tsx:225:21:8664:276:e:div:ete", children: [ 37983 /* @__PURE__ */ i(a, { _fgT: "h4", _fgS: "dys770", _fgB: 1790697589528, className: "font-semibold text-slate-900 mb-1", "data-fg-dys770": ":0:/src/app/pages/ArticleDetailPageV2.tsx:226:23:8714:119:e:h4:x", children: o.title }), 37984 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dys772", _fgB: 1790697589528, className: "text-sm text-slate-600", "data-fg-dys772": ":0:/src/app/pages/ArticleDetailPageV2.tsx:229:23:8856:57:e:p:x", children: o.type }) 37985 ] }), 37986 /* @__PURE__ */ i( 37987 a, 37988 { 37989 _fgT: O1, 37990 _fgS: "dys774", 37991 _fgB: 1790697589528, 37992 size: 20, 37993 className: "rotate-180 text-slate-400 group-hover:text-[#0056B3] group-hover:translate-x-1 transition-all", 37994 "data-fg-dys774": ":0:node_modules/lucide-react:231:21:8961:193:e:ArrowLeft::::::EIC8" 37995 } 37996 ) 37997 ] 37998 }, 37999 L 38000 )) }) 38001 ] }) 38002 ] 38003 } 38004 ) }), 38005 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dys776", _fgB: 1790697589528, className: "bg-slate-50 py-16 px-6 mt-12", "data-fg-dys776": ":0:/src/app/pages/ArticleDetailPageV2.tsx:244:7:9332:726:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dys777", _fgB: 1790697589528, className: "max-w-4xl mx-auto text-center", "data-fg-dys777": ":0:/src/app/pages/ArticleDetailPageV2.tsx:245:9:9387:658:e:div:etete", children: [
38006 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dys778", _fgB: 1790697589528, className: "font-['DM_Serif_Display'] text-3xl text-slate-900 mb-4", "data-fg-dys778": ":0:/src/app/pages/ArticleDetailPageV2.tsx:246:11:9445:121:e:h3:t", children: "Explore More Articles" }), 38007 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dys780", _fgB: 1790697589528, className: "text-slate-600 mb-8", "data-fg-dys780": ":0:/src/app/pages/ArticleDetailPageV2.tsx:249:11:9577:121:e:p:t", children: "Discover more insights and updates from the IT Curves team" }), 38008 /* @__PURE__ */ c( 38009 a, 38010 { 38011 _fgT: E, 38012 _fgS: "dys782", 38013 _fgB: 1790697589528, 38014 href: "/news-articles", 38015 className: "inline-flex items-center gap-2 bg-[#0056B3] text-white px-8 py-4 rounded-full font-semibold hover:bg-[#004494] transition-colors shadow-lg", 38016 "data-fg-dys782": ":0:node_modules/wouter:252:11:9709:321:e:Link:te:::::C4yE", 38017 children: [ 38018 "View All Articles", 38019 /* @__PURE__ */ i(a, { _fgT: O1, _fgS: "dys784", _fgB: 1790697589528, size: 18, className: "rotate-180", "data-fg-dys784": ":0:node_modules/lucide-react:257:13:9966:46:e:ArrowLeft::::::EIC8" }) 38020 ] 38021 } 38022 ) 38023 ] }) }) 38024 ] }); 38025} 38026const r0 = `<!doctype html> 38027<html lang="en"> 38028<head> 38029<meta charset="utf-8"> 38030<meta name="viewport" content="width=device-width, initial-scale=1"> 38031<title>Go! Time: Two Years of On-Demand Transit in Annapolis</title> 38032<meta name="description" content="How Annapolis replaced two fixed bus routes with on-demand service, and what automated dispatch changed."> 38033<link rel="preconnect" href="https://fonts.googleapis.com"> 38034<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 38035<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Outfit:wght@500;600;700&family=Source+Sans+3:ital,wght@0,400;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@500;600&display=swap"> 38036<link rel="stylesheet" href="style.css"> 38037</head> 38038<body> 38039 38040<div class="topbar"><div class="shell"> 38041 <span class="wordmark">IT Curves</span> 38042 <span class="label">Deployment notes</span> 38043</div></div> 38044 38045<div class="shell"> 38046<header class="hero"> 38047 <p class="label">Annapolis, Maryland</p> 38048 <h1>Go! Time: two years of on-demand transit in Marylandâs capital</h1> 38049 <figure class="hero-img"><img src="figures/hero_gotime.jpg" width="1360" height="765" alt="A Go! Time vehicle on a street in downtown Annapolis at sunset, with the Maryland State House behind it."></figure> 38050 <p class="byline"><strong>Dr. Hesam Rashidi</strong> · September 2026</p> 38051 38052 <div class="brief"> 38053 <p class="label">In brief</p> 38054 <ul> 38055 <li>Go! Time replaced the Orange and Purple routes in 2024. It expanded ten-minute walkable access to transit by nearly a square mile, and it runs on weekday and Saturday evenings and all day Sunday, when no citywide bus route operates.</li> 38056 <li>Ridership is 31% above the routes it replaced and grew 21% in the latest fiscal year. Cost per passenger trip is 8% below those routes and fell 11% year over year, as the share of rides sharing a vehicle rose from 55% to 66%.</li> 38057 <li>IT Curves brought human-centered automation to the dispatcherâs real-time work. Dispatchers now make 4% of route adju
38057stments by hand, down from 85%, and 96% of riders are picked up within 10 minutes of the quoted time, up from 86%.</li> 38058 </ul> 38059 </div> 38060</header> 38061 38062<article> 38063<div class="col"> 38064 38065<section class="sec"> 38066<span class="tick"></span> 38067<h2>A compact capital with dispersed demand</h2> 38068<p>Annapolis is Marylandâs capital and the county seat of Anne Arundel County, a city of about 40,800 residents on a little over seven square miles of land.<sup class="fn"><a href="#r1">1</a></sup><sup class="fn"><a href="#r2">2</a></sup> It has been home to St. Johnâs College since 1696 and to the U.S. Naval Academy since 1845, and the historic core around the State House still sets the street pattern downtown.</p> 38069<p>Beyond that core the city spreads out the way many small American cities do. Commercial land lines West Street and runs out to the regional retail and employment node at Parole and the Annapolis Mall, just past the city line. Forest Drive carries shopping centres and subdivisions to the south-east. Between the corridors sits lower-density housing, with the hospital, the colleges and the Academy as large single-purpose anchors (Figure 1).</p> 38070 38071<figure class="mapfig"> 38072 <div class="legend-row" role="group" aria-label="Highlight a land use"> 38073 <button class="chip" type="button" data-focus="com"><span class="sq" style="--c:#F4D29A"></span>Commercial & retail</button> 38074 <button class="chip" type="button" data-focus="ins"><span class="sq" style="--c:#C9D3DE"></span>Institutions</button> 38075 <button class="chip" type="button" data-focus="park"><span class="sq" style="--c:#D6E6D3"></span>Parks & open space</button> 38076 </div> 38077 <svg class="map" id="citymap" viewBox="0 0 680 601" role="img" aria-label="Annapolis land use and major destinations"><rect class="m-land" x="0" y="0" width="680" height="601"/><path class="m-water" d="M9.9,500.1 L11.6,506.6 L13.9,510.2 L13.1,511.5 L5.8,515.4 L0.0,514.3 L0.0,512.4 L2.1,510.8 L7.4,509.5 L4.4,504.3 L6.0,499.3 L4.6,497.1 L0.0,498.1 L0.0,444.4 L1.4,441.5 L0.8,440.9 L0.0,441.7 L0.0,433.9 L1.9,436.7 L4.0,436.5 L4.8,435.0 L6.6,434.4 L9.1,435.3 L7.1,442.4 L5.3,442.6 L3.6,441.3 L3.4,442.9 L17.9,449.0 L19.7,449.0 L22.5,447.1 L26.9,442.8 L31.2,441.7 L34.4,442.5 L41.1,447.0 L44.4,448.1 L56.2,443.5 L62.0,446.0 L67.1,451.2 L68.0,451.3 L69.3,448.8 L68.6,447.4 L59.2,443.1 L56.9,440.7 L59.7,437.7 L63.7,436.7 L65.2,438.1 L69.6,437.0 L71.3,433.4 L70.6,431.6 L65.3,428.4 L62.2,427.7 L60.7,425.3 L61.2,423.6 L68.3,415.8 L62.2,411.2 L66.0,406.3 L65.5,398.5 L58.8,392.5 L58.8,390.1 L60.2,388.4 L59.8,382.7 L58.0,380.8 L53.2,366.5 L54.9,363.5 L55.2,357.6 L56.7,360.5 L57.0,365.5 L60.7,373.4 L64.3,375.8 L63.4,380.8 L67.0,383.3 L66.1,392.0 L71.5,393.6 L71.1,400.7 L82.6,404.7 L82.4,406.4 L81.1,407.0 L76.3,407.2 L74.3,410.8 L75.8,416.2 L81.2,418.0 L75.8,422.4 L77.7,424.4 L79.0,428.5 L77.4,430.8 L84.7,435.3 L85.5,438.2 L84.6,441.4 L79.8,444.7 L82.6,453.6 L82.1,455.7 L84.2,463.4 L88.2,468.6 L87.8,471.7 L91.0,475.5 L89.2,477.6 L91.5,480.0 L98.0,475.3 L104.1,472.8 L124.0,473.6 L128.6,477.4 L134.8,490.6 L136.5,491.7 L138.9,491.3 L150.4,484.1 L154.8,483.1 L160.6,482.8 L171.6,486.7 L176.5,485.1 L177.1,484.4 L170.5,476.1 L169.0,470.8 L171.4,466.7 L172.6,461.4 L175.7,458.7 L178.0,454.7 L177.7,449.3 L179.8,447.0 L173.8,445.9 L167.8,440.1 L160.4,442.0 L160.1,440.0 L152.4,437.7 L151.9,435.3 L153.0,433.9 L156.3,434.4 L163.2,432.9 L167.9,429.7 L168.4,427.2 L164.2,424.8 L163.6,422.9 L164.6,420.5 L165.7,420.3 L173.6,423.3 L175.7,430.9 L178.5,430.7 L179.2,429.5 L177.9,426.3 L178.4,423.5 L179.9,421.5 L184.4,419.2 L183.8,416.6 L186.4,409.6 L186.7,403.9 L186.8,396.5 L185.3,390.1 L187.4,388.9 L187.4,385.5 L189.7,383.5 L189.7,382.2 L177.5,366.3 L176.4,364.0 L176.5,361.2 L177.5,361.0 L185.5,368.5 L190.6,374.0 L191.0,375.6 L195.9,375.4 L190.5,365.4 L189.2,359.1 L191.5,353.4 L191.2,338.2 L195.8,331.7 L195.7,328.1 L197.1,324.3 L199.4,326.4 L200.1,332.4 L199.8,334.3 L195.6,339.6 L195.3,353.2 L196.1,354.8 L206.9,350.0 L209.7,347.4 L210.6,344.9 L211.9,349.1 L208.7,353.7 L200.1,357.8 L196.6,362.9 L197.0,365.5 L200.8,369.6 L205.0,371.8 L201.0,378.4 L199.3,386.2 L197.7,388.4 L199.1,391.1 L198.4,396.8 L199.5,399.8 L196.2,402.5 L194.9,404.9 L200.2,409.2 L200.1,411.6 L195.3,414.3 L193.4,416.8 L194.9,420.5 L198.2,423.5 L188.9,429.5 L192.3,435.6 L192.5,442.3 L191.3,448.4 L193.6,452.2 L187.9,457.0 L190.4,458.7 L191.5,461.2 L189.9,466.6 L191.4,470.5 L190.3,472.9 L191.9,476.7 L193.6,477.8 L192.6,478.5 L194.4,483.1 L201.0,486.0 L205.2,486.3 L208.4,488.8 L215.0,483.8 L215.2,482.8 L210.9,481.9 L208.4,478.9 L202.8,475.6 L205.4,469.6 L209.7,466.1 L212.8,461.7 L216.7,461.3 L216.6,465.0 L218.4,468.1 L221.7,468.9 L230.0,466.6 L226.9,462.7 L227.5,459.8 L229.4,458.8 L229.1,451.5 L233.2,449.2 L233.7,443.6 L235.5,439.0 L244.5,431.7 L242.5,426.8 L235.4,416.4 L236.6,411.2 L237.9,411.2 L246.6,423.0 L250.8,429.3 L252.1,434.0 L255.8,435.1 L257.9,430.2 L263.2,423.7 L260.6,416.8 L262.3,413.0 L261.2,409.3 L262.0,405.2 L260.4,403.2 L261.7,401.7 L262.9,401.5 L265.2,404.2 L266.4,418.1 L269.6,423.5 L269.3,427.1 L273.4,425.5 L277.3,427.3 L282.3,434.3 L285.4,436.6 L288.6,437.4 L292.3,436.8 L292.5,440.1 L293.6,441.3 L297.4,441.0 L301.8,442.2 L308.4,440.7 L321.0,443.2 L323.8,449.5 L316.9,446.1 L307.0,445.4 L302.0,449.0 L298.2,446.6 L292.5,447.1 L288.0,449.5 L286.7,452.7 L284.2,451.2 L282.6,446.7 L281.8,439.0 L276.2,436.1 L265.2,436.8 L259.0,450.6 L245.7,452.6 L245.0,457.7 L241.2,459.3 L243.8,464.1 L247.8,466.7 L247.2,471.9 L240.5,471.6 L235.5,477.1 L236.8,479.3 L236.2,480.3 L231.9,478.3 L230.7,476.6 L230.5,473.4 L229.7,473.4 L230.3,477.1 L232.2,480.3 L233.6,492.3 L232.6,500.5 L231.7,500.5 L231.1,504.6 L230.1,504.9 L228.4,512.3 L227.9,518.9 L228.3,532.8 L230.1,533.1 L229.5,537.6 L230.6,540.9 L232.3,541.8 L235.5,538.5 L252.3,535.6 L252.4,534.1 L251.6,533.9 L248.5,535.0 L247.9,532.6 L251.2,530.4 L252.4,530.6 L252.9,532.6 L254.2,532.3 L256.7,531.5 L258.4,529.4 L260.8,521.6 L258.7,522.1 L257.6,520.9 L257.6,517.8 L259.0,515.7 L258.1,514.4 L259.4,511.8 L258.8,511.4 L261.0,508.9 L262.9,504.0 L273.6,505.5 L273.8,506.9 L265.4,508.9 L264.1,510.6 L266.1,515.4 L264.9,517.8 L266.4,520.8 L270.5,524.7 L271.6,529.2 L270.6,531.1 L268.8,530.6 L264.4,538.2 L269.5,541.3 L269.1,545.3 L266.0,544.7 L265.9,540.5 L263.2,540.0 L265.1,544.5 L273.1,577.5 L283.7,582.3 L287.1,580.4 L289.7,576.7 L291.5,576.1 L288.2,573.3 L285.3,573.4 L281.6,570.9 L280.4,568.1 L280.3,558.5 L286.4,549.8 L309.2,533.2 L308.4,532.5 L304.5,535.7 L301.2,532.3 L301.2,530.6 L302.0,529.3 L304.2,529.7 L307.1,528.1 L308.6,524.7 L307.3,523.7 L307.3,521.4 L309.2,517.0 L314.6,512.9 L313.4,509.6 L314.8,502.8 L323.6,504.8 L324.0,507.0 L318.2,509.1 L320.3,513.4 L319.5,515.4 L316.5,516.6 L315.1,514.4 L314.5,514.8 L318.1,518.8 L326.9,523.4 L336.4,516.9 L341.9,519.8 L343.4,519.7 L343.9,514.6 L345.9,511.4 L356.7,507.2 L358.6,505.3 L359.5,505.1 L360.1,507.4 L358.3,509.7 L352.1,511.8 L350.4,514.7 L351.4,519.3 L348.7,524.0 L345.5,526.4 L341.3,527.6 L334.9,527.3 L329.7,531.7 L321.7,533.6 L320.2,537.5 L322.2,543.7 L329.3,543.0 L331.5,545.5 L334.1,546.1 L334.4,548.0 L325.4,547.9 L320.3,550.9 L314.8,549.7 L312.7,551.4 L312.6,553.4 L316.2,560.1 L317.9,565.8 L325.0,564.2 L326.7,565.1 L327.4,567.0 L326.6,569.7 L317.9,571.3 L314.9,570.7 L314.5,572.2 L312.1,573.7 L309.5,577.4 L311.8,580.5 L324.6,586.6 L330.6,591.8 L335.0,600.9 L203.0,600.9 L201.5,594.2 L197.1,586.1 L190.8,578.7 L186.8,577.8 L181.4,574.5 L166.8,570.8 L162.8,568.8 L155.2,568.0 L153.7,570.4 L154.9,574.6 L154.0,586.8 L154.8,587.5 L155.0,585.5 L157.7,585.3 L162.0,587.8 L162.5,589.3 L156.8,589.8 L151.6,589.1 L149.5,586.2 L143.8,583.1 L138.0,583.1 L136.2,585.9 L140.4,591.3 L148.0,596.5 L149.6,595.6 L152.6,596.1 L153.1,599.6 L148.8,599.0 L148.1,600.9 L135.0,600.9 L134.2,597.8 L130.5,597.1 L128.5,597.6 L125.5,600.9 L114.7,600.9 L110.6,596.8 L103.9,599.9 L101.6,600.5 L101.2,599.3 L108.6,592.7 L113.5,592.3 L116.8,593.7 L118.1,591.4 L117.9,588.3 L120.1,584.9 L124.7,582.4 L126.8,572.6 L125.2,570.2 L125.9,568.6 L129.7,567.4 L135.4,567.9 L140.0,569.3 L140.8,571.9 L142.4,571.1 L148.1,560.9 L153.7,558.2 L154.6,556.7 L157.0,548.8 L156.5,547.8 L143.3,542.2 L133.9,541.8 L122.4,537.3 L121.0,538.5 L117.7,536.3 L117.9,532.9 L113.6,532.3 L104.2,533.2 L93.1,540.6 L91.2,544.0 L91.0,545.7 L96.5,556.3 L95.6,559.5 L89.8,560.4 L87.3,562.3 L86.0,564.8 L83.3,566.1 L77.1,565.2 L75.2,565.7 L74.6,571.4 L72.2,575.7 L68.1,575.5 L63.2,573.7 L59.7,574.8 L54.9,574.8 L53.5,576.2 L52.6,579.7 L49.2,582.0 L38.2,583.8 L42.5,577.7 L44.7,576.2 L45.2,572.0 L48.2,568.2 L51.5,567.6 L52.6,568.4 L58.9,566.2 L67.7,568.9 L67.6,559.2 L73.6,559.5 L76.8,558.6 L76.4,555.1 L77.9,552.9 L80.3,552.4 L82.2,554.3 L81.3,551.1 L82.5,540.8 L85.4,538.6 L86.0,536.7 L85.0,528.2 L78.6,518.6 L80.5,514.9 L79.0,513.1 L76.9,514.2 L65.6,512.1 L57.0,50
380775.8 L53.0,499.6 L46.3,496.0 L44.5,493.6 L44.5,491.6 L41.7,489.3 L35.9,489.2 L28.6,485.2 L29.1,484.5 L25.7,480.7 L27.1,477.2 L26.2,476.8 L23.6,477.7 L21.2,480.2 L11.5,493.9 L7.4,497.1 L7.7,500.2 L9.9,500.1ZM361.5,595.4 L363.2,591.0 L363.5,582.3 L366.2,580.4 L369.9,579.6 L372.2,577.1 L372.3,574.3 L374.7,573.1 L388.7,576.8 L394.7,583.7 L398.6,584.3 L400.8,586.6 L408.1,587.2 L413.0,584.7 L415.6,584.6 L412.1,589.8 L407.7,592.3 L392.0,589.6 L388.3,584.1 L376.6,580.2 L372.9,590.5 L373.0,596.3 L377.5,597.7 L380.6,600.9 L362.0,600.9 L361.5,595.4ZM75.4,237.8 L68.1,240.4 L66.8,239.5 L70.4,235.8 L73.1,235.7 L75.4,237.8ZM10.0,151.9 L10.5,154.2 L3.3,159.2 L2.5,155.2 L8.2,151.3 L10.0,151.9ZM70.8,152.6 L74.2,150.5 L76.1,151.6 L78.0,155.1 L69.9,155.3 L70.8,152.6ZM0.0,155.0 L2.7,159.4 L0.0,162.4 L0.0,155.0ZM159.9,274.3 L163.7,277.7 L161.5,279.7 L158.9,278.2 L159.9,274.3ZM219.9,170.6 L223.5,170.4 L223.4,169.5 L225.0,169.2 L228.5,170.7 L228.5,172.4 L224.7,178.5 L221.6,178.3 L220.8,177.4 L219.6,173.6 L218.4,173.4 L219.9,170.6ZM261.6,145.1 L267.9,143.5 L271.2,144.7 L276.0,144.3 L279.2,145.9 L279.3,147.3 L278.8,148.4 L273.7,148.3 L262.8,146.3 L261.6,145.1ZM188.9,138.8 L190.4,137.6 L192.5,138.2 L191.5,141.2 L184.4,140.8 L185.1,138.2 L188.9,138.8ZM216.3,141.0 L213.8,138.4 L215.7,136.8 L218.1,137.6 L217.8,139.6 L216.3,141.0ZM174.0,134.2 L175.4,134.5 L177.3,137.7 L176.5,140.2 L171.7,136.1 L174.0,134.2ZM308.4,71.9 L309.8,72.6 L309.1,74.1 L304.1,74.9 L305.8,72.4 L308.4,71.9ZM186.2,30.0 L182.3,29.3 L183.9,25.3 L185.0,25.7 L186.8,22.8 L186.6,24.7 L187.7,25.5 L186.2,30.0ZM359.5,23.1 L355.9,26.2 L354.2,25.4 L352.2,20.6 L349.2,16.6 L345.5,15.1 L342.6,15.1 L340.3,17.6 L338.5,22.9 L336.9,24.2 L330.9,23.1 L329.9,24.3 L326.9,40.8 L324.8,42.8 L323.4,41.8 L323.0,28.7 L320.4,24.9 L318.7,24.2 L310.9,26.2 L310.5,30.3 L309.5,31.5 L306.2,31.4 L304.0,38.5 L300.8,35.6 L298.2,35.1 L297.4,32.8 L294.2,33.3 L302.6,28.5 L303.6,19.6 L305.3,17.4 L312.2,19.0 L317.8,14.1 L322.5,13.1 L327.5,9.8 L332.6,11.5 L335.2,10.4 L336.9,9.0 L338.4,4.1 L342.0,0.0 L481.1,0.0 L485.7,7.9 L489.5,11.6 L493.7,13.9 L506.8,26.6 L508.6,29.3 L509.2,32.4 L511.0,28.8 L528.0,23.1 L532.3,18.5 L532.3,17.2 L529.4,18.3 L528.1,17.4 L532.0,11.7 L533.0,0.0 L538.7,0.0 L542.6,2.1 L540.4,4.6 L539.3,4.5 L538.0,6.8 L539.5,14.3 L541.4,16.2 L548.7,19.3 L553.5,25.6 L551.5,26.1 L548.3,24.8 L539.2,24.2 L536.7,23.0 L534.9,19.7 L535.3,16.9 L534.7,16.8 L534.4,21.6 L531.2,24.6 L533.8,24.7 L536.5,28.5 L546.7,53.7 L557.3,66.7 L560.5,76.2 L560.8,91.5 L561.9,93.7 L562.5,102.3 L559.7,111.3 L556.4,115.9 L557.7,117.8 L558.2,118.6 L564.8,114.7 L569.7,114.2 L583.2,117.3 L586.3,120.1 L587.7,123.1 L600.0,138.3 L602.5,149.9 L603.9,152.2 L613.3,154.4 L621.0,154.5 L626.9,157.4 L628.7,159.3 L630.3,165.4 L630.1,170.2 L628.1,173.4 L627.1,180.1 L628.4,185.8 L632.5,189.3 L645.8,209.7 L648.8,212.6 L653.9,205.3 L656.9,207.4 L652.3,214.2 L657.6,218.0 L660.9,213.0 L662.6,214.1 L659.3,219.1 L664.9,223.0 L670.6,216.0 L680.0,209.6 L680.0,497.8 L677.6,494.5 L675.3,493.5 L671.1,485.9 L660.1,471.6 L656.8,470.2 L651.4,458.7 L651.3,456.2 L640.4,422.5 L641.2,420.9 L637.1,422.0 L634.5,425.1 L634.5,443.2 L631.9,444.2 L625.8,444.3 L624.0,442.7 L623.6,430.2 L624.9,426.3 L633.7,419.4 L639.7,417.6 L637.7,417.1 L635.6,412.0 L635.1,406.9 L637.3,386.8 L634.8,378.0 L630.8,369.3 L633.9,356.5 L624.2,358.4 L624.0,359.6 L623.6,358.4 L622.0,358.9 L621.8,361.1 L619.7,363.0 L618.9,365.4 L615.1,367.7 L613.0,367.6 L607.2,364.0 L606.2,364.5 L606.0,372.0 L603.7,377.1 L600.0,380.8 L593.9,383.9 L595.7,391.6 L595.0,397.7 L599.9,398.2 L600.6,399.3 L599.1,401.4 L597.4,402.0 L594.8,401.1 L593.0,399.6 L593.3,398.2 L590.2,398.9 L586.9,403.0 L585.6,409.6 L586.1,411.6 L583.5,413.5 L578.5,412.6 L567.3,406.4 L567.2,426.5 L563.5,439.0 L566.4,440.9 L561.2,451.1 L559.0,453.9 L555.5,452.0 L545.6,454.7 L543.4,456.9 L535.4,457.7 L536.5,456.0 L535.3,453.1 L537.2,451.4 L540.8,450.3 L542.6,450.8 L545.7,448.4 L551.2,448.9 L553.8,446.0 L557.5,444.3 L554.8,439.7 L552.3,437.9 L548.0,439.7 L546.4,438.8 L541.5,439.7 L540.3,438.8 L541.1,432.4 L539.6,430.0 L539.6,427.7 L544.6,434.3 L551.7,431.4 L556.3,427.9 L556.6,424.9 L559.4,421.6 L557.5,416.2 L557.7,414.4 L559.5,412.9 L557.2,409.4 L556.8,402.9 L559.9,399.3 L566.4,396.7 L560.4,393.8 L551.7,397.0 L550.7,395.9 L551.1,393.9 L559.8,388.7 L570.2,392.2 L577.2,391.9 L576.3,384.7 L577.5,382.7 L583.7,378.4 L584.6,376.6 L584.1,374.9 L578.2,371.0 L574.9,370.1 L568.0,372.6 L566.5,370.0 L563.8,368.6 L557.7,367.5 L558.5,366.0 L562.8,364.3 L564.3,365.6 L568.9,362.3 L570.5,365.1 L573.8,365.6 L576.6,363.0 L582.6,360.2 L593.2,351.1 L592.1,350.1 L592.7,343.2 L594.7,341.4 L600.4,342.5 L601.4,343.5 L606.1,339.8 L611.5,345.1 L613.0,350.5 L617.1,348.9 L617.0,345.8 L618.7,344.3 L617.8,343.2 L619.2,342.0 L620.2,336.3 L624.3,330.9 L630.4,326.8 L633.2,321.7 L634.5,315.1 L632.9,311.5 L627.8,309.0 L625.8,308.7 L624.5,309.9 L617.1,305.7 L616.0,304.1 L617.5,303.0 L612.5,296.7 L608.4,299.7 L604.4,292.8 L603.4,293.6 L600.2,289.7 L599.6,290.1 L596.5,287.4 L599.9,284.9 L597.9,283.0 L595.2,283.4 L592.4,285.2 L591.5,284.1 L588.4,286.4 L588.9,287.7 L583.7,292.0 L585.8,297.1 L582.3,299.7 L579.3,295.7 L578.1,296.6 L581.5,301.4 L578.6,302.4 L579.0,305.0 L576.0,308.3 L576.6,309.3 L574.9,310.4 L575.7,311.7 L571.9,313.7 L569.7,313.5 L567.4,316.2 L566.7,315.4 L562.0,317.6 L547.7,313.7 L544.5,316.2 L541.4,3
3807717.1 L540.2,314.1 L534.5,316.6 L533.7,315.6 L530.0,317.1 L530.2,318.2 L528.3,319.4 L528.1,317.3 L526.8,317.1 L526.4,318.3 L524.7,316.7 L521.8,310.4 L520.1,310.0 L514.3,314.7 L512.9,316.9 L514.1,322.8 L510.3,324.8 L506.8,330.0 L506.5,333.2 L504.9,333.8 L503.5,331.4 L504.6,331.1 L504.7,326.9 L508.1,320.6 L504.8,310.5 L501.1,312.4 L498.6,311.2 L497.0,311.7 L492.9,320.5 L484.7,319.4 L478.2,321.8 L479.0,323.6 L478.3,327.6 L475.7,332.2 L478.7,337.1 L477.5,337.9 L471.6,331.2 L468.3,337.4 L475.1,345.0 L476.1,353.8 L475.6,356.1 L473.1,358.7 L471.2,347.1 L466.3,344.2 L465.1,342.5 L462.8,341.9 L458.6,335.9 L455.4,335.3 L446.2,336.3 L441.5,339.8 L441.4,344.1 L442.5,346.9 L438.6,347.4 L437.3,348.9 L435.6,354.9 L429.0,364.7 L422.9,364.3 L420.3,372.2 L419.9,369.7 L421.4,363.6 L423.0,361.9 L427.6,360.2 L428.0,358.6 L429.0,358.9 L430.1,355.8 L429.2,355.5 L430.1,352.7 L431.4,351.9 L433.2,345.4 L431.8,344.2 L432.3,342.7 L435.2,341.2 L436.1,336.3 L428.6,334.2 L423.3,329.6 L419.4,329.0 L415.9,326.6 L413.3,330.4 L409.4,332.5 L408.8,330.7 L410.8,330.1 L411.6,327.0 L407.5,326.2 L406.2,325.5 L406.5,324.3 L411.4,323.8 L419.6,320.5 L426.9,325.8 L430.5,326.9 L431.7,326.0 L435.8,329.9 L438.1,330.3 L441.0,328.4 L447.8,326.7 L453.6,327.1 L457.6,324.4 L465.9,325.5 L467.8,311.5 L459.3,305.9 L458.9,303.2 L459.9,301.5 L465.9,305.4 L473.1,306.0 L476.1,309.7 L479.7,308.9 L484.2,310.4 L487.6,303.7 L490.1,302.3 L496.2,302.7 L497.3,301.4 L500.3,295.0 L497.2,292.7 L495.9,294.3 L494.3,293.1 L496.9,292.5 L501.8,285.0 L503.9,286.8 L503.2,289.0 L505.3,291.0 L511.0,293.8 L512.4,293.7 L519.4,300.5 L523.2,300.5 L528.0,298.3 L537.3,303.3 L540.8,297.1 L551.1,297.
380770 L556.2,299.7 L558.1,298.5 L555.5,293.4 L555.0,288.5 L557.8,286.5 L555.8,283.8 L557.6,283.4 L557.9,281.7 L549.9,269.8 L546.1,268.1 L545.4,266.1 L546.7,264.4 L560.1,277.6 L559.4,278.6 L563.4,275.2 L560.7,272.8 L562.5,270.9 L564.5,270.9 L566.7,272.7 L572.1,266.4 L574.8,268.8 L591.4,265.2 L614.8,238.1 L615.3,238.6 L620.1,233.1 L608.7,223.2 L606.9,223.0 L605.6,224.6 L606.3,225.2 L601.6,230.6 L592.7,223.0 L587.7,218.7 L594.1,210.7 L564.9,185.4 L558.9,192.4 L549.7,194.5 L545.0,199.9 L537.8,197.0 L534.8,200.5 L532.8,201.3 L516.2,194.0 L511.4,194.6 L501.8,201.5 L500.0,201.7 L492.5,209.9 L486.8,212.2 L484.0,222.0 L481.6,223.2 L478.9,220.8 L473.7,221.6 L469.9,225.2 L468.3,228.5 L465.0,229.4 L461.5,236.1 L453.4,239.0 L451.8,238.4 L445.2,240.1 L444.6,239.1 L446.4,235.8 L452.1,233.0 L456.6,232.8 L462.0,221.7 L466.7,220.0 L469.2,216.4 L463.5,214.2 L461.1,214.3 L457.0,211.5 L455.8,211.8 L454.0,209.4 L459.2,208.6 L468.4,210.0 L473.1,209.6 L478.3,212.6 L479.2,208.3 L483.4,205.0 L482.2,201.0 L476.0,200.8 L473.6,197.9 L470.3,198.7 L463.8,194.6 L464.9,191.8 L466.5,191.4 L469.7,193.8 L474.9,191.8 L478.0,194.2 L485.3,195.2 L489.3,194.2 L490.1,194.9 L491.6,193.2 L491.1,192.2 L499.7,184.7 L501.8,185.4 L503.7,190.1 L505.2,189.9 L506.1,187.9 L517.1,183.2 L519.3,183.4 L523.2,186.6 L526.1,187.6 L532.4,184.3 L537.7,187.7 L547.7,184.3 L533.7,143.7 L522.6,147.7 L521.2,143.4 L521.6,141.4 L519.6,140.0 L515.4,142.7 L509.1,143.1 L498.6,137.3 L496.5,135.0 L495.0,135.3 L496.1,137.4 L495.7,140.1 L494.7,140.8 L490.9,139.5 L485.1,140.2 L482.3,138.4 L480.0,139.8 L477.9,139.5 L478.2,134.9 L479.7,134.0 L486.7,134.5 L489.3,133.8 L491.8,135.0 L496.1,133.4 L501.5,122.7 L502.3,122.7 L503.1,115.9 L500.8,115.0 L500.8,113.1 L503.1,111.7 L510.4,100.7 L509.9,98.5 L505.6,98.0 L505.2,99.1 L498.4,100.1 L490.1,95.4 L488.7,93.1 L489.5,90.5 L484.5,91.4 L476.5,90.0 L475.5,89.5 L475.6,88.1 L469.7,86.4 L468.3,83.9 L464.2,80.8 L455.1,77.3 L451.8,78.0 L450.8,79.1 L452.9,79.5 L450.2,81.6 L448.5,89.0 L440.6,92.7 L432.0,100.2 L429.8,109.1 L431.0,111.7 L428.6,116.6 L429.2,118.4 L432.5,118.2 L433.1,122.1 L423.0,129.9 L422.7,136.3 L421.0,137.2 L418.4,136.9 L408.6,133.4 L406.8,131.9 L405.0,135.4 L404.5,143.2 L402.0,145.2 L394.7,158.1 L392.2,158.1 L390.6,153.6 L384.2,155.6 L380.4,153.6 L378.8,153.9 L375.6,157.1 L375.7,164.6 L373.9,168.2 L371.6,167.0 L371.2,165.7 L369.3,157.3 L370.1,154.7 L365.9,156.5 L363.6,159.5 L361.1,159.3 L359.3,157.7 L360.5,154.5 L359.9,151.9 L356.6,150.0 L351.5,151.3 L345.3,155.1 L340.4,156.4 L338.2,159.7 L330.9,162.8 L327.1,168.2 L325.3,167.7 L324.8,160.9 L320.5,162.2 L315.0,162.0 L311.4,159.4 L304.5,158.1 L301.5,158.7 L298.0,157.4 L291.9,159.6 L289.5,159.4 L288.8,158.5 L291.5,154.9 L299.2,152.2 L310.9,153.7 L312.9,151.3 L318.6,155.3 L330.1,154.7 L335.2,150.7 L336.6,146.8 L341.9,147.1 L345.4,143.9 L345.8,141.1 L343.5,138.4 L340.9,132.6 L341.4,131.9 L345.2,132.2 L350.4,137.5 L355.4,139.1 L363.7,143.8 L372.8,142.3 L374.0,141.3 L374.7,136.4 L379.0,134.0 L380.8,135.0 L383.3,139.1 L388.7,141.2 L392.3,138.0 L394.5,133.7 L394.7,129.8 L396.2,126.9 L401.2,126.7 L407.3,123.6 L409.6,123.6 L412.2,118.8 L412.4,115.0 L415.1,111.7 L416.4,112.0 L416.7,113.6 L417.5,113.2 L415.2,107.6 L409.4,101.1 L409.9,98.5 L411.8,98.4 L413.2,93.7 L418.1,91.7 L418.4,94.3 L419.4,93.8 L415.6,81.3 L413.6,80.3 L413.2,78.6 L416.9,77.6 L419.9,78.0 L421.3,67.0 L423.0,66.3 L425.6,68.7 L424.5,69.1 L424.7,70.3 L426.9,70.0 L429.0,61.1 L430.7,59.0 L433.3,58.4 L437.5,60.1 L438.5,58.8 L440.5,58.4 L439.6,57.1 L428.4,48.5 L421.5,41.9 L415.0,39.2 L405.6,33.3 L405.5,34.8 L409.1,36.1 L408.7,41.4 L403.8,43.7 L403.8,47.4 L401.0,49.5 L394.7,51.2 L391.3,56.8 L387.0,59.3 L386.0,57.4 L388.7,54.8 L389.3,51.4 L389.3,48.0 L388.1,45.8 L388.8,43.9 L389.4,43.4 L393.3,45.4 L394.9,44.7 L398.9,36.9 L401.1,34.2 L403.9,34.1 L406.9,27.3 L413.0,20.7 L409.2,19.4 L405.8,20.1 L402.7,19.1 L396.1,13.3 L389.2,12.6 L378.2,7.7 L375.9,8.5 L361.6,5.2 L357.2,5.5 L355.7,7.7 L359.5,23.1ZM211.1,1.8 L212.4,7.1 L211.4,8.0 L205.4,10.5 L199.8,11.3 L197.2,14.0 L191.0,15.9 L190.3,17.7 L190.3,15.5 L187.5,17.6 L189.5,14.6 L198.9,7.5 L198.8,5.5 L196.5,1.8 L200.6,3.8 L202.7,3.3 L205.6,0.0 L211.9,0.0 L211.1,1.8ZM679.5,556.7 L676.8,555.4 L675.7,556.2 L678.6,562.5 L677.6,564.3 L676.1,564.3 L675.0,562.1 L671.8,560.7 L668.1,553.1 L669.0,549.1 L670.1,548.1 L669.2,544.6 L667.6,543.9 L660.2,546.3 L657.8,548.9 L652.1,551.5 L651.4,549.5 L656.0,546.4 L654.9,541.9 L651.6,541.5 L650.0,542.5 L644.5,540.7 L640.4,543.7 L639.4,543.1 L640.4,540.0 L637.5,537.5 L636.3,538.9 L634.3,539.0 L627.8,536.7
38077L614.6,545.6 L612.1,549.0 L607.0,551.3 L606.6,546.8 L610.1,546.8 L611.5,540.2 L614.2,540.1 L626.4,531.1 L624.1,523.6 L624.8,522.3 L627.0,523.8 L633.1,533.0 L635.7,528.8 L639.7,528.0 L641.1,528.5 L641.0,530.7 L646.4,533.8 L648.3,532.7 L653.0,533.7 L655.0,530.0 L661.0,533.2 L666.9,534.0 L671.6,526.9 L671.5,524.3 L672.8,523.6 L675.1,527.4 L680.0,530.7 L679.5,556.7ZM652.7,467.7 L654.3,468.7 L653.9,471.2 L658.4,473.9 L660.7,478.4 L661.2,486.7 L660.2,487.5 L655.2,485.4 L653.5,482.4 L654.0,477.2 L652.0,474.0 L651.6,470.8 L652.7,467.7ZM635.2,457.5 L638.5,457.6 L642.0,451.9 L645.5,457.3 L648.2,458.7 L645.9,463.0 L642.6,463.6 L641.7,465.2 L642.2,467.9 L640.7,468.6 L632.3,466.1 L627.8,462.9 L628.2,461.2 L635.2,457.5ZM625.7,144.6 L628.3,148.5 L627.0,152.2 L625.4,151.9 L624.7,153.8 L622.0,152.2 L621.1,145.6 L623.7,143.9 L625.7,144.6ZM634.6,144.1 L643.1,146.5 L667.1,135.1 L668.5,136.4 L658.1,145.1 L653.5,146.5 L652.1,148.7 L653.5,152.3 L651.2,153.5 L649.2,150.7 L646.3,150.0 L643.6,150.7 L635.0,157.4 L634.3,159.5 L635.0,161.1 L631.5,161.2 L630.3,156.8 L627.9,153.7 L630.7,148.3 L634.6,147.4 L634.6,144.1Z"/><path class="m-street" d="M694.3,701.8 L692.7,705.0M694.3,701.8 L695.9,702.2 L696.4,701.2 L695.4,691.3M694.3,701.8 L665.1,685.2 L664.7,682.1M692.7,705.0 L694.3,701.8M695.4,691.3 L685.9,685.9M695.4,691.3 L696.4,701.2 L695.9,702.2 L694.3,701.8M695.4,691.3 L697.0,682.7 L690.1,678.8M664.7,682.1 L661.3,680.3M664.7,682.1 L665.1,685.2 L694.3,701.8M664.7,682.1 L668.3,676.2M530.2,348.3 L524.2,350.8M530.2,348.3 L526.8,340.1M530.2,348.3 L532.3,353.8M524.2,350.8 L516.7,353.8M524.2,350.8 L530.2,348.3M526.8,340.1 L530.2,348.3M526.8,340.1 L513.2,345.9M526.8,340.1 L523.4,331.8M532.3,353.8 L530.2,348.3M516.2,354.2 L514.3,349.7M515.8,354.3 L511.2,356.3M516.7,353.8 L524.2,350.8M516.3,354.5 L518.2,359.0M514.3,349.7 L516.2,354.2M514.3,349.7 L512.8,346.0M511.2,356.3 L515.8,354.3M511.2,356.3 L512.6,361.3M512.6,361.3 L511.2,356.3M505.2,358.7 L507.5,357.8M507.5,357.8 L505.2,358.7M101.0,658.7 L95.3,662.9M101.0,658.7 L110.0,671.2M101.0,658.7 L97.6,653.8M95.3,662.9 L101.0,658.7M95.3,662.9 L92.1,662.9 L87.1,669.6M95.3,662.9 L105.2,674.6M110.0,671.2 L121.8,673.9M110.0,671.2 L118.5,682.9M110.0,671.2 L101.0,658.7M110.0,671.2 L114.7,667.9M110.0,671.2 L105.2,674.6M97.6,653.8 L101.0,658.7M97.6,653.8 L100.2,651.2M97.6,653.8 L95.2,655.8M329.1,278.0 L331.9,272.4M329.1,278.0 L333.8,279.9 L332.4,283.5M329.1,278.0 L321.7,293.3M331.9,272.4 L327.5,270.2M331.9,272.4 L336.0,274.1M331.9,272.4 L329.1,278.0M332.4,283.5 L333.8,279.9 L329.1,278.0M321.7,293.3 L317.5,293.0M321.7,293.3 L329.1,278.0M321.7,293.3 L326.9,294.0 L330.7,296.8M1.7,356.6 L-9.2,346.8M1.7,356.6 L-0.7,358.3 L-6.1,356.9 L-11.1,357.6M1.7,356.6 L8.5,364.2 L12.2,371.9M-9.2,346.8 L1.7,356.6M-9.2,346.8 L-11.9,344.3M2.5,356.0 L-8.5,346.0M2.5,356.0 L9.2,363.5 L13.0,371.5M2.5,356.0 L8.1,352.6M-11.1,357.6 L-6.1,356.9 L-0.7,358.3 L1.7,356.6M-11.1,357.6 L-12.3,357.8 L-12.2,359.0 L-10.9,358.7 L-11.1,357.6M-11.1,357.6 L-10.9,358.7 L-12.2,359.0 L-12.3,357.8 L-11.1,357.6M12.2,371.9 L14.7,382.4M12.2,371.9 L8.5,364.2 L1.7,356.6M576.7,42.4 L571.4,33.6M576.7,42.4 L566.2,47.6 L551.4,49.4 L550.8,48.5M577.0,42.9 L581.2,51.8 L583.1,59.6M571.4,33.6 L576.7,42.4M571.4,33.6 L566.1,35.2 L554.0,36.2M571.4,33.6 L555.0,7.1M550.8,48.5 L551.4,49.4 L566.2,47.6 L576.7,42.4M583.1,59.6 L577.4,60.1M583.1,59.6 L584.0,69.4 L582.9,76.4M583.1,59.6 L581.2,51.8 L577.0,42.9M577.4,60.1 L567.7,73.2M577.4,60.1 L583.1,59.6M577.4,60.1 L577.4,75.8M577.4,60.1 L562.2,61.0 L564.6,66.3M582.9,76.4 L577.4,75.8M582.9,76.4 L575.2,104.1M582.9,76.4 L584.0,69.4 L583.1,59.6M528.1,169.7 L525.1,163.9 L524.8,157.3M528.1,169.7 L530.6,175.3 L531.7,183.8M524.8,157.3 L523.8,167.0M524.8,157.3 L526.0,155.6 L525.2,152.4 L520.4,146.8 L509.8,151.0 L507.9,150.2M524.8,157.3 L525.1,163.9 L528.1,169.7M531.7,183.8 L530.6,175.3 L528.1,169.7M531.7,183.8 L530.7,185.6 L526.4,187.4 L518.6,182.7 L511.5,184.9 L508.8,184.0M516.5,176.6 L510.3,173.6 L498.3,163.0 L494.2,163.8M516.5,176.6 L515.5,180.6 L508.8,184.0M129.8,405.0 L137.8,412.3M129.8,405.0 L132.4,398.4M129.4,405.7 L118.9,419.1M137.8,412.3 L129.8,405.0M132.4,398.4 L133.7,394.0M132.4,398.4 L129.8,405.0M118.9,419.1 L124.9,424.3M118.9,419.1 L116.5,421.4M118.9,419.1 L129.4,405.7M124.9,424.3 L118.9,419.1M116.5,421.4 L118.9,419.1M116.5,421.4 L111.7,425.9M303.3,352.4 L310.6,344.1M301.8,351.1 L300.0,353.3M304.2,353.1 L311.4,344.8M304.2,353.1 L305.8,354.5 L302.4,358.7M310.6,344.1 L303.3,352.4M310.6,344.1 L306.7,340.6M310.6,344.1 L313.8,340.2M300.0,353.3 L298.3,355.3M300.0,353.3 L301.8,351.1M300.0,353.3 L295.1,348.7M298.3,355.3 L300.0,353.3M295.1,348.7 L292.9,347.0M295.1,348.7 L300.0,353.3M295.1,348.7 L275.7,369.6M295.1,348.7 L304.7,338.8M299.1,355.9 L301.8,358.3M302.4,358.7 L305.8,354.5 L304.2,353.1M301.8,358.3 L299.1,355.9M101.1,604.0 L106.3,603.5M101.1,604.0 L102.6,607.6 L106.3,603.5M106.3,603.5 L101.1,604.0M106.3,603.5 L102.6,607.6 L101.1,604.0M106.3,603.5 L110.9,598.3M100.9,602.4 L100.7,594.4M110.9,598.3 L106.3,603.5M349.3,82.7 L338.0,70.8M349.3,82.7 L352.4,85.8M338.0,70.8 L332.2,76.4M338.0,70.8 L335.8,68.7M338.0,70.8 L342.2,66.8M338.0,70.8 L349.3,82.7M352.4,85.8 L349.3,82.7M-166.3,332.7 L-161.5,329.6M-166.3,332.7 L-159.6,338.3 L-160.4,343.9M-166.3,332.7 L-173.2,338.5M-161.5,329.6 L-166.3,332.7M-161.5,329.6 L-158.7,327.8M-160.4,343.9 L-159.6,338.3 L-166.3,332.7M-160.4,343.9 L-164.7,343.2M-160.4,343.9 L-154.7,345.9 L-142.2,343.1M-173.2,338.5 L-179.5,342.8M-173.2,338.5 L-166.3,332.7M-164.7,343.2 L-168.3,346.6 L-168.3,354.5 L-166.0,359.8M-164.7,343.2 L-160.4,343.9M-142.2,343.1 L-143.9,346.5M-142.2,343.1 L-137.6,339.5 L-136.4,336.9 L-135.9,333.8 L-137.2,330.6M-142.2,343.1 L-154.7,345.9 L-160.4,343.9M501.1,156.8 L505.6,154.3 L520.7,165.7 L521.6,168.9M501.1,156.8 L513.6,167.5 L511.2,170.4M500.4,156.0 L497.7,157.7M500.4,156.0 L507.9,150.2M521.6,168.9 L520.7,165.7 L505.6,154.3 L501.1,156.8M521.6,168.9 L516.6,175.1M511.2,170.4 L513.6,167.5 L501.1,156.8M511.2,170.4 L516.6,175.1M511.2,170.4 L497.6,160.7 L492.7,162.3M-197.6,-99.5 L-195.5,-93.5 L-195.5,-86.5 L-200.9,-71.4M59.4,599.7 L65.6,598.6M59.4,599.7 L53.5,600.9M65.6,598.6 L70.1,597.8M65.6,598.6 L59.4,599.7M65.6,598.6 L64.2,588.8 L68.9,584.4M53.5,600.9 L53.5,588.6M53.5,600.9 L59.4,599.7M53.5,600.9 L48.2,602.0M285.7,311.5 L289.1,312.8M289.1,312.8 L291.5,312.2M289.1,312.8 L285.7,311.5M631.7,415.4 L634.2,415.9M630.5,415.0 L626.4,413.9M634.2,415.9 L631.7,415.4M584.3,424.4 L580.7,437.8M584.3,424.4 L586.0,419.1 L588.3,417.3M580.7,437.8 L579.9,440.7M580.7,437.8 L584.3,424.4M588.3,417.3 L586.0,419.1 L584.3,424.4M588.3,417.3 L607.7,409.9M686.4,168.9 L685.1,173.9M686.4,168.9 L688.7,164.0M685.1,173.9 L686.4,168.9M685.1,173.9 L680.9,179.3M693.2,184.0 L691.9,182.7 L688.4,186.1M693.2,184.0 L697.9,189.2M688.7,164.0 L680.3,156.7M688.7,164.0 L692.4,159.5M688.7,164.0 L693.4,167.8M688.7,164.0 L686.4,168.9M-70.5,222.6 L-64.8,224.5M-70.5,222.6 L-73.1,230.1M-70.5,222.6 L-68.9,214.3M-64.8,224.5 L-
3807754.6,227.7M-64.8,224.5 L-70.5,222.6M-64.8,224.5 L-62.4,220.0M-73.1,230.1 L-70.5,222.6M-73.1,230.1 L-77.6,242.4M-73.1,230.1 L-61.4,234.0 L-60.6,235.5M-68.9,214.3 L-70.5,222.6M358.4,623.1 L362.5,622.2M358.4,623.1 L357.0,611.4M362.5,622.2 L358.4,623.1M358.7,624.0 L361.0,631.8 L360.3,635.1 L352.6,640.5 L351.4,645.4M357.0,611.4 L358.4,623.1M357.0,611.4 L356.0,606.4M529.3,215.0 L526.8,217.8M535.1,219.9 L540.0,224.3 L542.4,224.8M530.2,214.0 L534.9,208.7M526.8,217.8 L511.3,204.6M526.8,217.8 L529.3,215.0M535.8,219.0 L537.5,217.2M542.4,224.8 L540.0,224.3 L535.1,219.9M88.7,292.4 L88.4,312.6 L90.7,316.8 L96.5,319.3M96.5,319.3 L94.6,324.7 L89.3,329.5M96.5,319.3 L90.7,316.8 L88.4,312.6 L88.7,292.4M96.5,319.3 L104.8,319.3M565.9,251.5 L562.9,248.8M562.9,248.8 L565.9,251.5M554.0,36.2 L566.1,35.2 L571.4,33.6M383.6,27.5 L391.5,30.5M383.6,27.5 L382.1,31.4M391.5,30.5 L383.6,27.5M391.5,30.5 L394.6,23.2 L399.1,25.3 L399.6,28.5M391.5,30.5 L393.1,32.6 L388.9,37.3M382.1,31.4 L383.6,27.5M382.1,31.4 L378.2,42.7M382.1,31.4 L388.9,37.3M399.6,28.5 L399.1,25.3 L394.6,23.2 L391.5,30.5M388.9,37.3 L391.2,39.9M388.9,37.3 L393.1,32.6 L391.5,30.5M388.9,37.3 L382.1,31.4M222.3,196.2 L221.3,198.5M222.3,196.2 L230.4,199.3M221.3,198.5 L222.3,196.2M221.3,198.5 L220.0,201.7M230.4,199.3 L222.3,196.2M351.5,578.4 L357.6,572.9M351.7,579.7 L352.3,583.3M357.6,572.9 L351.5,578.4M357.6,572.9 L364.4,566.7 L369.4,559.0M669.2,188.6 L661.3,204.3M669.2,188.6 L684.3,196.7M669.2,188.6 L671.5,181.1 L670.2,172.8M661.3,204.3 L669.2,188.6M661.3,204.3 L661.3,206.8M684.3,196.7 L688.8,200.3M684.3,196.7 L669.2,188.6M670.2,172.8 L658.2,189.7 L655.9,191.0 L652.6,189.9M670.2,172.8 L680.9,179.3M670.2,172.8 L671.5,181.1 L669.2,188.6M670.2,172.8 L665.8,158.6M718.8,53.5 L723.3,51.9M718.8,53.5 L719.5,56.1M723.3,51.9 L718.8,53.5M718.6,52.7 L717.3,48.8M718.6,52.7 L713.8,52.6 L714.9,56.8M719.5,56.1 L718.8,53.5M719.5,56.1 L714.9,56.8M199.7,40.4 L192.9,37.2 L188.3,37.2 L187.9,38.3M199.7,40.4 L205.3,17.5M199.7,40.4 L211.9,42.0 L216.9,44.4M187.9,38.3 L188.3,37.2 L192.9,37.2 L199.7,40.4M205.3,17.5 L199.7,40.4M216.9,44.4 L218.7,39.9M216.9,44.4 L211.9,42.0 L199.7,40.4M216.9,44.4 L221.2,46.6 L226.1,51.9M593.3,210.6 L565.1,186.1 L559.3,192.7M559.3,192.7 L565.1,186.1 L593.3,210.6M559.3,192.7 L555.0,193.6M-148.3,231.7 L-152.7,235.7 L-157.9,235.9M-148.3,231.7 L-152.1,229.7 L-160.6,228.8M-148.3,231.7 L-139.2,239.3M-157.9,235.9 L-152.7,235.7 L-148.3,231.7M-160.6,228.8 L-162.9,236.1 L-162.7,243.1M-160.6,228.8 L-156.0,215.3M-160.6,228.8 L-152.1,229.7 L-148.3,231.7M-160.6,228.8 L-166.3,225.7M-139.2,239.3 L-141.8,241.6 L-150.2,242.0M-139.2,239.3 L-148.3,231.7M-139.2,239.3 L-136.4,241.6 L-135.5,245.0M-139.2,239.3 L-133.3,236.1 L-125.4,235.8M23.8,694.3 L30.5,690.4M23.8,694.3 L18.7,699.1M24.2,694.9 L24.9,699.1M23.4,693.5 L20.7,688.9M30.5,690.4 L23.8,694.3M30.5,690.4 L34.8,687.9M18.7,699.1 L23.8,694.3M24.9,699.1 L24.2,694.9M24.9,699.1 L19.9,699.9M24.9,699.1 L28.0,698.6M19.9,699.9 L24.9,699.1M28.0,698.6 L24.9,699.1M363.8,514.0 L366.3,521.4 L366.8,528.1M363.8,514.0 L360.3,500.8M366.8,528.1 L356.9,523.2M366.8,528.1 L367.1,532.3M366.8,528.1 L366.3,521.4 L363.8,514.0M360.3,500.8 L363.8,514.0M360.3,500.8 L360.2,488.3 L358.1,473.8M356.9,523.2 L366.8,528.1M367.1,532.3 L366.8,528.1M688.4,186.1 L691.5,189.1M688.4,186.1 L683.8,181.6M688.4,186.1 L691.9,182.7 L693.2,184.0M697.9,189.2 L693.2,184.0M688.8,200.3 L684.3,196.7M690.3,202.1 L691.6,214.4 L693.4,216.9M690.3,202.1 L689.3,205.8 L687.7,207.0M694.0,191.5 L691.5,189.1M696.3,193.5 L697.2,195.6 L698.4,194.3 L697.6,193.2M-92.9,391.6 L-91.1,388.0M-92.9,391.6 L-96.9,393.5 L-101.1,392.6M-91.1,388.0 L-91.3,377.2M-91.1,388.0 L-92.9,391.6M-91.1,388.0 L-86.3,389.3 L-85.7,391.0 L-87.2,393.8M-101.1,392.6 L-96.9,393.5 L-92.9,391.6M-101.1,392.6 L-107.1,389.4M-101.1,392.6 L-103.1,396.5 L-107.0,395.3 L-110.1,392.7 L-107.1,389.4M-91.3,377.2 L-90.1,372.8M-91.3,377.2 L-91.1,388.0M-87.2,393.8 L-85.7,391.0 L-86.3,389.3 L-91.1,388.0M-90.1,372.8 L-91.3,377.2M-90.1,372.8 L-90.2,369.8M-90.2,369.8 L-90.1,372.8M-90.8,368.5 L-94.6,365.1 L-100.9,366.4M-143.9,346.5 L-143.7,349.3M-143.9,346.5 L-142.2,343.1M-137.2,330.6 L-135.9,333.8 L-136.4,336.9 L-137.6,339.5 L-142.2,343.1M-137.2,330.6 L-145.2,319.9M-137.2,330.6 L-131.3,330.1 L-126.2,331.7 L-115.8,338.7 L-106.9,342.1M-130.1,365.4 L-126.7,369.0M-130.1,365.4 L-142.2,352.4M-126.7,369.0 L-120.4,375.9M-126.7,369.0 L-130.1,365.4M-142.2,352.4 L-130.1,365.4M-142.2,352.4 L-143.7,349.3M-142.2,352.4 L-148.3,361.2M-116.2,380.4 L-120.4,375.9M-116.2,380.4 L-107.1,389.4M-116.2,380.4 L-100.9,366.4M-120.4,375.9 L-116.2,380.4M-120.4,375.9 L-126.7,369.0M-107.1,389.4 L-101.1,392.6M-107.1,389.4 L-110.1,392.7 L-107.0,395.3 L-103.1,396.5 L-101.1,392.6M-107.1,389.4 L-116.2,380.4M-100.9,366.4 L-116.2,380.4M-100.9,366.4 L-94.6,365.1 L-90.8,368.5M-22.6,174.7 L-18.6,176.6 L-13.6,177.0M-22.6,174.7 L-33.1,165.5 L-39.6,161.5 L-62.2,157.7M-13.6,177.0 L-2.1,174.7M-13.6,177.0 L-18.6,176.6 L-22.6,174.7M-62.2,157.7 L-39.6,161.5 L-33.1,165.5 L-22.6,174.7M-62.2,157.7 L-69.6,151.6M371.5,266.1 L368.9,265.4M371.5,266.1 L374.9,267.8M371.6,265.6 L372.4,263.1M368.9,265.4 L371.5,266.1M374.9,267.8 L374.0,270.7M374.9,267.8 L371.5,266.1M375.9,252.8 L376.8,247.0M375.9,252.8 L372.4,263.1M376.8,247.0 L377.6,242.7M376.8,247.0 L375.9,252.8M372.4,263.1 L375.9,252.8M372.4,263.1 L371.6,265.6M376.2,252.9 L383.8,254.7M377.6,242.7 L376.8,247.0M376.4,246.9 L368.7,245.7M377.2,247.1 L384.9,248.3M377.1,242.6 L369.3,241.3M378.0,242.7 L385.6,243.9M378.1,240.5 L369.6,239.0M379.0,240.5 L386.9,241.9M378.6,240.1 L384.3,215.6M384.4,215.0 L391.8,220.1M391.8,220.1 L384.4,215.0M391.8,220.1 L394.7,222.1M391.8,220.1 L387.0,241.5M384.3,215.6 L378.6,240.1M435.3,322.9 L432.7,321.7M435.3,322.9 L440.7,324.5 L447.1,323.7M434.6,321.1 L431.8,313.8M434.6,321.1 L444.7,316.9M432.7,321.7 L435.3,322.9M432.7,321.7 L425.9,316.8M447.1,323.7 L444.7,316.9M447.1,323.7 L452.0,321.8M447.1,323.7 L440.7,324.5 L435.3,322.9M431.8,313.8 L430.8,311.5M431.8,313.8 L434.6,321.1M431.8,313.8 L442.0,309.6M444.7,316.9 L434.6,321.1M444.7,316.9 L442.0,309.6M444.7,316.9 L447.1,323.7M444.7,316.9 L449.3,314.9M430.8,311.5 L429.4,3
3807708.1M430.8,311.5 L431.8,313.8M442.0,309.6 L439.6,303.1M442.0,309.6 L444.7,316.9M442.0,309.6 L446.3,308.2M442.0,309.6 L431.8,313.8M429.4,308.1 L430.8,311.5M428.7,308.0 L423.2,314.2M429.5,307.3 L439.6,303.1M428.8,306.9 L426.6,304.2M425.2,302.2 L423.3,299.0M425.2,302.2 L426.6,304.2M425.2,302.2 L431.8,297.3 L437.2,296.2M423.3,299.0 L425.2,302.2M423.3,299.0 L421.5,295.2M426.6,304.2 L425.2,302.2M426.6,304.2 L428.8,306.9M437.2,296.2 L439.6,303.1M437.2,296.2 L431.8,297.3 L425.2,302.2M421.2,294.4 L419.1,290.5 L416.2,291.1M421.7,294.2 L425.9,292.6M421.5,295.2 L423.3,299.0M416.2,291.1 L414.3,288.8M416.2,291.1 L419.1,290.5 L421.2,294.4M82.9,677.7 L88.2,673.0M82.9,677.7 L84.0,681.7M82.9,677.7 L78.8,661.3M88.2,673.0 L82.9,677.7M88.2,673.0 L94.7,680.3M88.2,673.0 L87.1,669.6M84.0,681.7 L93.9,684.4M84.0,681.7 L77.4,680.1M84.0,681.7 L82.5,687.4M84.0,681.7 L82.9,677.7M78.8,661.3 L82.9,677.7M78.8,661.3 L74.6,646.1M78.8,661.3 L84.1,658.9M78.8,661.3 L73.7,664.7M642.1,551.9 L649.8,545.8M642.1,551.9 L637.9,548.6M642.1,551.9 L644.9,556.1 L642.7,563.5M649.8,545.8 L642.1,551.9M637.9,548.6 L630.6,574.0M637.9,548.6 L642.1,551.9M637.9,548.6 L631.6,545.4M642.7,563.5 L646.7,564.8M642.7,563.5 L636.6,578.6M642.7,563.5 L644.9,556.1 L642.1,551.9M646.7,564.8 L642.7,563.5M636.6,578.6 L634.4,584.6M636.6,578.6 L630.6,574.0M636.6,578.6 L642.7,563.5M634.4,584.6 L636.6,578.6M634.4,584.6 L640.1,587.9 L647.5,594.4M634.4,584.6 L626.9,582.3M630.6,574.0 L637.9,548.6M630.6,574.0 L623.7,567.7M630.6,574.0 L636.6,578.6M647.5,594.4 L644.7,597.5M647.5,594.4 L649.7,591.4M647.5,594.4 L655.3,601.6 L662.4,604.3M647.5,594.4 L640.1,587.9 L634.4,584.6M626.9,582.3 L621.6,597.0M626.9,582.3 L634.4,584.6M626.9,582.3 L615.6,578.3M721.6,86.5 L727.3,80.6M721.6,86.5 L714.6,81.3M723.3,87.5 L721.4,89.9 L718.0,91.5M723.3,87.5 L740.5,87.7M727.3,80.6 L737.8,80.3M727.3,80.6 L725.5,75.7M727.3,80.6 L721.6,86.5M714.6,81.3 L718.2,77.8M714.6,81.3 L721.6,86.5M714.6,81.3 L711.7,79.5 L706.0,81.8M737.8,80.3 L727.3,80.6M737.8,80.3 L738.4,76.9M737.8,80.3 L740.5,87.7M725.5,75.7 L727.3,80.6M738.4,76.9 L734.6,72.8M738.4,76.9 L737.8,80.3M738.4,76.9 L745.9,67.1M740.5,87.7 L737.8,80.3M740.5,87.7 L723.3,87.5M575.4,542.8 L569.9,549.0M575.4,542.8 L585.4,551.7M575.4,542.8 L560.1,529.0M569.9,549.0 L566.2,553.2M569.9,549.0 L575.4,542.8M569.9,549.0 L574.8,553.8 L591.0,556.9 L585.4,551.7M569.9,549.0 L555.1,535.5M585.4,551.7 L575.4,542.8M585.4,551.7 L590.7,545.5M585.4,551.7 L591.0,556.9 L574.8,553.8 L569.9,549.0M560.1,529.0 L575.4,542.8M560.1,529.0 L555.1,535.5M560.1,529.0 L565.3,522.7M566.2,553.2 L569.9,549.0M555.1,535.5 L560.1,529.0M555.1,535.5 L569.9,549.0M555.1,535.5 L548.2,541.2M418.6,536.3 L420.5,533.7M420.5,533.7 L418.6,536.3M445.5,270.2 L440.7,257.8M440.7,257.8 L445.5,270.2M4.3,-74.3 L-2.5,-69.2M-2.5,-69.2 L-10.1,-64.3M-2.5,-69.2 L4.3,-74.3M637.9,440.6 L641.1,441.8 L642.4,441.1 L643.5,442.6 L642.8,443.4M637.9,440.6 L638.9,433.9 L637.0,430.8 L637.1,425.4M637.9,440.6 L638.1,445.9M642.8,443.4 L643.5,442.6 L642.4,441.1 L641.1,441.8 L637.9,440.6M642.8,443.4 L642.8,445.0 L638.1,445.9M642.8,443.4 L638.8,442.7M637.1,425.4 L637.0,430.8 L638.9,433.9 L637.9,440.6M638.1,445.9 L637.9,440.6M638.1,445.9 L642.8,445.0 L642.8,443.4M226.6,370.9 L214.6,359.5M226.6,370.9 L233.7,377.1 L234.8,386.8M226.6,370.9 L219.3,380.3 L210.7,378.5M214.6,359.5 L212.5,359.5 L207.9,362.3 L206.2,361.8 L203.1,364.2M214.6,359.5 L226.6,370.9M214.6,359.5 L209.9,358.7 L206.7,361.4M234.8,386.8 L233.7,377.1 L226.6,370.9M234.8,386.8 L227.7,392.9 L223.5,399.9 L217.6,416.7M234.8,386.8 L246.0,386.7 L253.2,384.3 L258.2,379.3M210.7,378.5 L207.4,378.1 L207.0,380.6 L208.2,380.8 L210.7,378.5M210.7,378.5 L208.2,380.8 L207.0,380.6 L207.4,378.1 L210.7,378.5M210.7,378.5 L219.3,380.3 L226.6,370.9M48.5,8.6 L50.6,17.9 L47.4,26.9M48.5,8.6 L36.1,10.6 L32.5,14.2 L31.4,17.3M48.5,8.6 L53.6,4.7M47.4,26.9 L50.6,17.9 L48.5,8.6M31.4,17.3 L27.8,28.5 L24.0,35.6M31.4,17.3 L32.5,14.2 L36.1,10.6 L48.5,8.6M53.6,4.7 L48.5,8.6M53.6,4.7 L56.8,8.4M53.6,4.7 L49.1,0.4M242.4,509.7 L253.3,515.1M242.4,509.7 L243.7,507.3M242.4,509.7 L240.2,509.4 L237.1,515.6 L236.3,515.3M253.3,515.1 L242.4,509.7M253.3,515.1 L260.7,500.2M253.3,515.1 L254.6,524.4 L253.7,525.2 L244.7,524.1M253.3,515.1 L244.7,524.1M243.7,507.3 L242.4,509.7M243.7,507.3 L250.1,495.3M236.3,515.3 L237.1,515.6 L240.2,509.4 L242.4,509.7M234.0,518.8 L235.6,522.4M235.6,522.4 L234.0,518.8M244.7,524.1 L243.3,526.4M244.7,524.1 L253.7,525.2 L254.6,524.4 L253.3,515.1M244.7,524.1 L253.3,515.1M243.3,526.4 L244.7,524.1M243.3,526.4 L240.8,530.6M243.3,526.4 L236.3,523.0M684.0,152.6 L692.4,159.5M684.0,152.6 L687.6,148.4M692.4,159.5 L684.0,152.6M692.4,159.5 L688.7,164.0M692.4,159.5 L695.8,155.4M683.1,153.7 L680.3,156.7M687.6,148.4 L689.5,140.9M687.6,148.4 L684.0,152.6M687.6,148.4 L695.8,155.4M687.6,148.4 L684.3,145.6M695.8,155.4 L692.4,159.5M695.8,155.4 L687.6,148.4M697.2,156.5 L703.8,162.1M523.4,222.3 L528.3,226.6M523.4,222.3 L529.2,215.9 L534.7,220.5M523.0,222.0 L518.5,218.1M523.5,220.8 L503.8,204.5 L507.5,201.4M528.3,226.6 L523.4,222.3M534.7,220.5 L529.4,226.6M534.7,220.5 L541.6,226.5M534.7,220.5 L529.2,215.9 L523.4,222.3M507.5,201.4 L511.3,204.6M507.5,201.4 L510.0,197.3 L512.8,195.3 L518.1,196.2M507.5,201.4 L503.8,204.5 L523.5,220.8M511.3,204.6 L518.1,196.2M511.3,204.6 L52
380776.8,217.8M511.3,204.6 L507.5,201.4M535.2,208.3 L541.0,213.3M534.9,208.7 L530.2,214.0M541.0,213.3 L535.2,208.3M535.0,208.1 L532.1,205.5M277.9,339.8 L273.3,344.7M279.3,341.1 L282.0,343.4M279.3,341.1 L280.9,339.3M273.3,344.7 L277.9,339.8M273.3,344.7 L267.3,351.5M273.3,344.7 L277.5,348.9M282.0,343.4 L279.3,341.1M282.0,343.4 L285.0,339.8M282.0,343.4 L277.5,348.9M280.9,339.3 L279.3,341.1M285.0,339.8 L287.5,342.4M285.0,339.8 L280.1,335.4M285.0,339.8 L282.0,343.4M277.5,348.9 L274.6,352.1M277.5,348.9 L282.0,343.4M277.5,348.9 L273.3,344.7M549.8,243.7 L552.5,240.7M552.5,240.7 L549.8,243.7M549.2,244.3 L536.4,233.6M549.2,244.3 L556.3,250.5 L547.3,251.3M440.3,294.2 L437.0,295.6M440.3,294.2 L446.4,291.6M440.3,294.2 L446.3,308.2M437.0,295.6 L434.9,289.6M437.0,295.6 L440.3,294.2M446.4,291.6 L440.3,294.2M446.4,291.6 L443.7,284.3M446.4,291.6 L452.5,305.6M446.3,308.2 L449.3,314.9M446.3,308.2 L452.5,305.6M446.3,308.2 L440.3,294.2M446.3,308.2 L442.0,309.6M452.0,321.8 L447.1,323.7M452.0,321.8 L458.2,319.3M452.0,321.8 L449.3,314.9M458.2,319.3 L452.0,321.8M458.2,319.3 L455.4,312.3M449.3,314.9 L446.3,308.2M449.3,314.9 L455.4,312.3M449.3,314.9 L444.7,316.9M449.3,314.9 L452.0,321.8M455.4,312.3 L449.3,314.9M455.4,312.3 L454.0,309.0M455.4,312.3 L458.2,319.3M455.4,312.3 L460.3,313.0 L461.9,316.7 L460.6,319.1M452.5,305.6 L446.3,308.2M452.5,305.6 L454.0,309.0M452.5,305.6 L446.4,291.6M-223.5,244.7 L-225.5,247.3M-223.5,244.7 L-226.1,240.5M-223.5,244.7 L-217.2,244.6M-225.5,247.3 L-222.8,248.8M-225.5,247.3 L-223.5,244.7M-226.1,240.5 L-223.5,244.7M-226.1,240.5 L-228.4,244.2M-217.2,244.6 L-215.9,238.2M-217.2,244.6 L-211.7,242.6M-217.2,244.6 L-216.6,248.9 L-213.1,253.8M-217.2,244.6 L-223.5,244.7M612.9,676.0 L617.6,673.3M612.9,676.0 L618.1,680.9 L620.0,687.4M612.9,676.0 L605.6,666.9M617.6,673.3 L628.4,666.8M617.6,673.3 L612.9,676.0M620.0,687.4 L621.8,689.1M620.0,687.4 L618.1,680.9 L612.9,676.0M605.6,666.9 L603.5,664.3M605.6,666.9 L597.5,673.2 L595.9,676.6M605.6,666.9 L612.9,676.0M628.4,666.8 L617.6,673.3M628.4,666.8 L631.4,665.8 L638.5,667.9M638.5,667.9 L642.4,665.5M638.5,667.9 L655.6,677.4M638.5,667.9 L631.4,665.8 L628.4,666.8M642.4,665.5 L638.5,667.9M642.4,665.5 L639.6,654.6M642.4,665.5 L648.9,659.8 L650.5,656.9M655.6,677.4 L661.3,680.3M655.6,677.4 L638.5,667.9M655.6,677.4 L663.2,661.3 L664.0,654.6M661.3,680.3 L664.7,682.1M661.3,680.3 L655.6,677.4M661.3,680.3 L665.1,672.7 L664.5,671.8M664.0,654.6 L659.3,650.1M664.0,654.6 L665.3,649.8M664.0,654.6 L663.2,661.3 L655.6,677.4M664.5,671.8 L665.1,672.7 L661.3,680.3M668.3,676.2 L671.6,668.8M668.3,676.2 L678.7,682.0M668.3,676.2 L664.7,682.1M461.5,296.6 L454.0,309.0M461.5,296.6 L465.1,290.6M461.5,296.6 L446.6,287.7M454.0,309.0 L461.5,296.6M454.0,309.0 L452.5,305.6M454.0,309.0 L455.4,312.3M465.1,290.6 L461.5,296.6M465.1,290.6 L468.7,284.5M465.1,290.6 L455.2,284.7M446.6,287.7 L461.5,296.6M652.6,189.9 L648.1,186.4M652.6,189.9 L648.1,199.0M652.6,189.9 L655.9,191.0 L658.2,189.7 L670.2,172.8M648.1,186.4 L652.6,189.9M648.1,186.4 L650.3,183.4 L641.6,177.0 L637.6,176.6 L637.5,181.2 L648.1,186.4M648.1,186.4 L637.5,181.2 L637.6,176.6 L641.6,177.0 L650.3,183.4 L648.1,186.4M648.1,199.0 L653.3,204.0M648.1,199.0 L652.6,189.9M653.3,204.0 L648.5,211.7M653.3,204.0 L657.4,206.4 L659.4,205.7M653.3,204.0 L648.1,199.0M648.5,211.7 L653.3,204.0M659.4,205.7 L657.4,206.4 L653.3,204.0M661.3,206.8 L667.1,210.8M661.3,206.8 L661.3,204.3M667.1,210.8 L661.3,206.8M667.1,210.8 L668.9,208.1 L673.6,205.5 L675.9,199.3 L680.3,201.3 L681.8,205.2 L681.1,207.3 L667.6,211.3M667.1,210.8 L661.7,218.8 L665.1,221.5 L670.3,214.6 L667.6,211.3M667.6,211.3 L670.3,214.6 L665.1,221.5 L661.7,218.8 L667.1,210.8M667.6,211.3 L681.1,207.3 L681.8,205.2 L680.3,201.3 L675.9,199.3 L673.6,205.5 L668.9,208.1 L667.1,210.8M-81.5,211.9 L-85.3,215.7 L-87.9,216.3 L-89.8,213.6 L-90.2,209.5M-81.5,211.9 L-78.1,214.0 L-73.9,214.0M-81.5,211.9 L-83.7,208.9M-90.2,209.5 L-90.5,206.8M-90.2,209.5 L-83.7,208.9M-90.2,209.5 L-89.8,213.6 L-87.9,216.3 L-85.3,215.7 L-81.5,211.9M-73.9,214.0 L-69.0,213.3M-73.9,214.0 L-74.8,208.2M-73.9,214.0 L-78.1,214.0 L-81.5,211.9M-83.7,208.9 L-90.2,209.5M-83.7,208.9 L-84.4,206.3M-83.7,208.9 L-81.5,211.9M-90.5,206.8 L-90.2,209.5M-97.1,158.1 L-96.1,162.6M-97.1,158.1 L-88.8,156.1 L-78.9,150.6 L-74.8,150.1 L-69.6,151.6M-97.1,158.1 L-101.2,159.1M-96.1,162.6 L-97.1,158.1M-69.6,151.6 L-62.2,157.7M-69.6,151.6 L-74.8,150.1 L-78.9,150.6 L-88.8,156.1 L-97.1,158.1M-101.2,159.1 L-97.1,158.1M485.2,285.2 L472.8,277.8M485.2,285.2 L481.1,292.1M485.2,285.2 L488.7,287.3M472.8,277.8 L485.2,285.2M472.8,277.8 L468.7,284.5M472.8,277.8 L462.7,271.8M472.8,277.8 L473.6,272.6M486.0,283.5 L488.7,278.7M486.0,283.5 L489.6,285.8M481.1,292.1 L485.2,285.2M481.1,292.1 L475.4,288.5M481.1,292.1 L477.4,298.4M481.1,292.1 L494.0,299.8M488.7,287.3 L492.1,290.8M488.7,287.3 L485.2,285.2M492.1,290.8 L488.7,287.3M489.6,285.8 L493.7,287.9 L496.0,284.1M489.6,285.8 L486.0,283.5M488.7,278.7 L486.0,283.5M488.7,278.7 L496.0,284.1M-90.4,-109.2 L-91.7,-116.3M-91.7,-116.3 L-90.4,-109.2M-91.7,-116.3 L-86.8,-116.2 L-80.8,-112.2M-80.8,-112.2 L-83.3,-104.7 L-80.8,-95.0 L-81.6,-90.4M-80.8,-112.2 L-75.0,-109.4 L-63.4,-109.1 L-58.9,-110.8 L-50.9,-116.7M-80.8,-112.2 L-86.8,-116.2 L-91.7,-116.3M540.4,286.9 L543.5,289.6M540.4,286.9 L548.3,278.6M539.0,285.8 L531.0,278.8M543.5,289.6 L552.4,296.7M543.5,289.6 L540.4,286.9M543.5,289.6 L546.1,286.4 L550.4,283.8M548.3,278.6 L540.4,286.9M384.4,399.7 L387.5,399.7M383.9,399.8 L384.4,395.7M383.9,399.8 L378.0,402.0M387.5,399.7 L384.4,399.7M387.5,399.7 L395.9,400.2M387.5,399.7 L388.0,392.9M230.6,25.4 L232.4,30.4M232.4,30.4 L230.6,25.4M233.0,31.1 L234.4,34.5M233.0,31.1 L234.1,23.4M234.4,34.5 L233.0,31.1M234.4,34.5 L235.9,39.4 L235.6,45.2M234.4,34.5 L240.7,29.3M234.1,23.4 L233.2,21.2M234.1,23.4 L233.0,31.1M234.1,23.4 L237.6,20.7 L235.
380771,17.9M505.3,616.0 L510.4,614.9M510.4,614.9 L505.3,616.0M515.5,609.5 L513.2,611.4M515.5,609.5 L513.8,605.9M515.5,609.5 L522.8,617.0 L523.4,620.1M513.2,611.4 L515.5,609.5M513.2,611.4 L511.9,613.4M513.8,605.9 L515.5,609.5M523.4,620.1 L507.8,628.1M523.4,620.1 L531.1,626.1M523.4,620.1 L522.8,617.0 L515.5,609.5M523.4,620.1 L523.4,627.6 L521.5,631.0M392.7,163.9 L408.1,177.4M392.7,163.9 L390.1,168.0M408.1,177.4 L392.7,163.9M408.1,177.4 L403.7,182.3M390.1,168.0 L391.2,171.6M390.1,168.0 L392.7,163.9M390.1,168.0 L387.0,161.3 L381.4,160.8M409.3,176.1 L413.2,172.0M403.7,182.3 L398.4,177.8M403.7,182.3 L397.1,189.5M403.7,182.3 L408.1,177.4M129.0,-98.6 L129.0,-101.5 L131.3,-104.2M129.0,-98.6 L118.5,-98.8M129.0,-98.6 L139.0,-100.6 L143.3,-103.1M131.3,-104.2 L126.3,-109.8M131.3,-104.2 L136.0,-108.8 L137.1,-111.6M131.3,-104.2 L129.0,-101.5 L129.0,-98.6M118.5,-98.8 L112.6,-97.5M118.5,-98.8 L129.0,-98.6M143.3,-103.1 L139.0,-100.6 L129.0,-98.6M143.3,-103.1 L150.2,-108.2 L158.9,-108.3M143.3,-103.1 L145.8,-99.7 L148.1,-88.7M126.3,-109.8 L131.3,-104.2M137.1,-111.6 L136.0,-108.8 L131.3,-104.2M458.5,320.0 L459.6,322.6M459.6,322.6 L458.5,320.0M460.6,319.1 L461.9,316.7 L460.3,313.0 L455.4,312.3M141.5,240.6 L139.0,242.3M141.5,240.6 L139.5,237.1M139.0,242.3 L141.5,240.6M139.0,242.3 L138.1,253.0M139.5,237.1 L141.5,240.6M139.5,237.1 L138.2,234.8M-193.1,128.2 L-191.1,150.2 L-187.6,149.0M-193.1,128.2 L-192.7,121.2 L-187.1,117.5 L-183.9,113.6 L-183.8,106.3M-193.1,128.2 L-198.7,129.1 L-202.7,131.3M-187.6,149.0 L-191.1,150.2 L-193.1,128.2M-183.8,106.3 L-183.9,113.6 L-187.1,117.5 L-192.7,121.2 L-193.1,128.2M-202.7,131.3 L-198.7,129.1 L-193.1,128.2M662.8,566.6 L662.4,563.5M662.8,566.6 L658.1,567.5M662.4,563.5 L662.8,566.6M658.1,567.5 L662.8,566.6M656.8,555.8 L654.5,557.0M656.8,555.8 L662.1,551.6M654.5,557.0 L656.8,555.8M662.1,551.6 L656.8,555.8M92.9,623.3 L97.3,640.1M92.9,623.3 L87.3,624.8M92.9,623.3 L98.3,622.0M97.3,640.1 L92.9,623.3M97.3,640.1 L102.7,638.6M97.3,640.1 L91.6,641.6M97.3,640.1 L100.2,651.2M87.3,624.8 L81.8,626.2M87.3,624.8 L92.9,623.3M87.3,624.8 L91.6,641.6M87.3,624.8 L85.4,617.5M98.3,622.0 L92.9,623.3M98.3,622.0 L100.0,627.8M98.3,622.0 L97.7,618.4M102.7,638.6 L97.3,640.1M102.7,638.6 L105.4,645.0M102.7,638.6 L100.0,627.8M91.6,641.6 L97.3,640.1M91.6,641.6 L85.9,643.1M91.6,641.6 L95.2,655.8M91.6,641.6 L87.3,624.8M100.2,651.2 L97.3,640.1M100.2,651.2 L97.6,653.8M493.8,607.7 L495.6,614.8M493.8,607.7 L502.5,605.5M493.8,607.7 L486.0,609.9M495.6,614.8 L493.8,607.7M502.5,605.5 L505.4,604.8M502.5,605.5 L493.8,607.7M502.5,605.5 L503.9,610.7M486.0,609.9 L484.1,603.2M486.0,609.9 L487.3,614.6M486.0,609.9 L493.8,607.7M500.0,632.4 L507.8,628.1M500.0,632.4 L495.9,616.0M500.0,632.4 L492.8,635.6M507.8,628.1 L523.4,620.1M507.8,628.1 L500.0,632.4M507.8,628.1 L506.6,621.3M495.9,616.0 L500.0,632.4M492.8,635.6 L492.5,642.3M492.8,635.6 L491.3,629.6M492.8,635.6 L500.0,632.4M492.8,635.6 L490.6,629.8M244.1,372.2 L245.8,370.4M244.1,372.2 L240.6,369.0M244.1,372.2 L240.3,377.2M245.8,370.4 L244.1,372.2M245.8,370.4 L248.0,368.1M240.6,369.0 L244.7,364.7M240.6,369.0 L244.1,372.2M240.6,369.0 L238.3,366.9M240.3,377.2 L244.1,372.2M240.3,377.2 L231.0,369.1 L235.0,363.8M240.3,377.2 L243.1,379.0M244.7,364.7 L242.7,362.7M244.7,364.7 L249.5,360.2M244.7,364.7 L240.6,369.0M238.3,366.9 L240.6,369.0M238.3,366.9 L235.0,363.8M235.0,363.8 L236.3,361.0M235.0,363.8 L238.3,366.9M235.0,363.8 L231.0,369.1 L240.3,377.2M236.3,361.0 L235.0,363.8M236.3,361.0 L237.8,357.9M691.2,743.4 L694.1,751.7M691.2,743.4 L699.3,740.9M691.2,743.4 L683.4,746.2M691.2,743.4 L687.4,736.9 L682.8,734.6M694.1,751.7 L697.0,759.9M694.1,751.7 L691.2,743.4M694.1,751.7 L702.5,748.9M699.3,740.9 L702.5,748.9M699.3,740.9 L696.7,733.5M699.3,740.9 L691.2,743.4M699.3,740.9 L706.1,738.5M683.4,746.2 L691.2,743.4M683.4,746.2 L675.3,749.1M683.4,746.2 L686.2,754.4M683.4,746.2 L681.0,739.5 L672.2,741.7M682.8,734.6 L680.5,733.8M682.8,734.6 L695.7,730.1M682.8,734.6 L687.4,736.9 L691.2,743.4M697.0,759.9 L699.7,767.6M697.0,759.9 L694.1,751.7M697.0,759.9 L705.1,757.0M697.0,759.9 L688.9,762.2M702.5,748.9 L705.1,757.0M702.5,748.9 L699.3,740.9M702.5,748.9 L709.5,746.4M702.5,748.9 L694.1,751.7M699.7,767.6 L697.0,759.9M699.7,767.6 L707.8,765.0M699.7,767.6 L691.8,770.1M705.1,757.0 L712.8,754.3M705.1,757.0 L697.0,759.9M705.1,757.0 L707.8,765.0M705.1,757.0 L702.5,748.9M688.9,762.2 L697.0,759.9M688.9,762.2 L680.6,765.1M688.9,762.2 L691.8,770.1M688.9,762.2 L686.2,754.4M707.8,765.0 L710.4,772.7M707.8,765.0 L705.1,757.0M707.8,765.0 L699.7,767.6M707.8,765.0 L716.1,762.3 L714.9,758.1M691.8,770.1 L699.7,767.6M691.8,770.1 L683.2,772.8M691.8,770.1 L688.9,762.2M356.8,162.6 L342.3,175.9M356.8,162.6 L353.5,158.1M356.8,162.6 L360.4,165.6 L360.9,167.2 L359.1,170.0M342.3,175.9 L335.9,170.2M342.3,175.9 L347.6,180.6M342.3,175.9 L356.8,162.6M353.5,158.1 L345.4,163.2M353.5,158.1 L356.8,162.6M353.5,158.1 L355.1,155.1M359.1,170.0 L360.9,167.2 L360.4,165.6 L356.8,162.6M359.1,170.0 L347.6,180.6M335.9,170.2 L342.3,175.9M335.9,170.2 L345.4,163.2M335.9,170.2 L333.7,180.4M347.6,180.6 L342.3,175.9M347.6,180.6 L353.4,186.1M347.6,180.6 L359.1,170.0M347.6,180.6 L337.2,192.4M674.5,767.3 L680.6,765.1M680.6,765.1 L688.9,762.2M680.6,765.1 L674.5,767.3M680.6,765.1 L683.2,772.8M680.6,765.1 L678.1,757.2M683.2,772.8 L691.8,770.1M683.2,772.8 L680.6,765.1M678.1,757.2 L686.2,754.4M678.1,757.2 L680.6,765.1M678.1,757.2 L675.3,749.1M678.1,757.2 L673.0,757.8M686.2,754.4 L688.9,762.2M686.2,754.4 L683.4,746.2M686.2,754.4 L690.0,753.0M686.2,754.4 L678.1,757.2M712.8,754.3 L705.1,757.0M594.4,122.0 L599.0,118.5M594.4,122.0 L591.4,118.4M594.4,122.0 L601.7,127.8 L607.1,139.9M599.0,118.5 L594.4,122.0M599.0,118.5 L604.6,121.9 L610.3,130.4M591.4,118.4 L594.4,122.0M607.1,139.9 L611.8,137.8M607.1,139.9 L607.1,146.6M607.1,139.9 L601.7,127.8 L594.4,122.0M599.1,117.9 L584.3,115.4 L580.1,110.2M600.1,118.0 L604.0,116.9 L613.0,109.4M580.1,110.2 L584.3,115.4 L599.1,117.9M580.1,110.2 L578.1,106.4M107.1,52.7 L106.7,58.7 L102.4,68.7 L106.0,78.0 L108.8,80.5 L112.6,81.4 L119.9,79.9 L128.3,80.6M107.1,52.7 L121.0,52.0M107.1,52.7 L98.2,50.1M128.3,80.6 L119.9,79.9 L112.6,81.4 L108.8,80.5 L106.0,78.0 L102.4,68.7 L106.7,58.7 L107.1,52.7M121.0,52.0 L107.1,52.7M98.2,50.1 L102.5,30.2M98.2,50.1 L107.1,52.7M98.2,50.1 L93.9,55.8 L89.7,59.1M-115.8,645.1 L-125.2,647.3M-115.8,645.1 L-115.1,641.9 L-113.0,639.7 L-105.3,639.4M-115.8,645.1 L-114.7,654.4 L-111.1,666.2M-125.2,647.3 L-132.1,648.8M-125.2,647.3 L-115.8,645.1M-125.2,647.3 L-129.1,634.1M-105.3,639.4 L-102.3,638.4M-105.3,639.4 L-113.0,639.7 L-115.1,641.9 L-115.8,645.1M-111.1,666.2 L-114.7,654.4 L-115.8,645.1M-111.1,666.2 L-115.5,674.9M-111.1,666.2 L-104.6,667.5 L-96.5,673.4M-132.1,648.8 L-125.2,647.3M-129.1,634.1 L-125.2,647.3M-129.1,634.1 L-125.2,625.4M476.8,265.4 L473.5,265.5M476.8,265.4 L476.7,273.0M476.8,265.4 L481.9,264.5M473.5,265.5 L473.5,269.2M473.5,265.5 L476.8,265.4M473.5,265.5 L473.2,262.5M476.7,273.0 L473.6,272.6M476.7,273.0 L476.8,265.4M476.7,273.0 L480.8,274.4M481.9,264.5 L481.5,259.4M481.9,264.5 L476.8,265.4M481.9,264.5 L481.2,273.4M473.6,272.6 L476.7,273.0M473.6,272.6 L473.5,269.2M473.6,272.6 L472.8,277.8M480.8,274.4 L483.4,275.8M480.8,274.4 L476.7,273.0M29.5,371.4 L34.6,371.8M29.5,371.4 L24.4,370.6M29.5,371.4 L30.4,361.0 L28.1,354.8 L31.9,347.5M34.6,371.8 L29.5,371.4M34.6,371.8 L33.9,376.9M34.6,371.8 L41.0,372.6 L46.7,375.7M34.6,371.8 L36.1,364.0 L40.4,362.8 L45.1,364.0 L47.2,365.7 L48.1,369.2 L46.7,375.7M24.4,370.6 L29.5,371.4M24.4,370.6 L24.9,365.6M24.4,370.6 L18.3,3
3807769.7M24.4,370.6 L25.6,378.0 L24.4,379.4 L21.4,379.5 L18.7,377.1 L18.3,369.7M31.9,347.5 L33.4,342.8 L36.7,343.8M31.9,347.5 L28.1,354.8 L30.4,361.0 L29.5,371.4M-19.6,702.1 L-19.1,696.9M-19.6,702.1 L-14.7,702.9M-20.9,702.0 L-25.4,701.3M-20.9,702.0 L-19.9,694.2M-19.8,703.0 L-16.1,703.6M-19.8,703.0 L-20.2,707.0M-19.1,696.9 L-18.3,689.2M-19.1,696.9 L-18.3,701.6 L-14.7,702.9M-19.1,696.9 L-19.6,702.1M-14.7,702.9 L-5.1,704.0M-14.7,702.9 L-18.3,701.6 L-19.1,696.9M-14.7,702.9 L-19.6,702.1M125.8,279.2 L125.0,273.9M125.8,279.2 L117.7,280.9M125.8,279.2 L127.8,286.8 L135.0,297.3M125.0,273.9 L124.2,268.1M125.0,273.9 L125.8,279.2M117.7,280.9 L125.8,279.2M117.7,280.9 L108.7,282.7M135.0,297.3 L127.8,286.8 L125.8,279.2M135.0,297.3 L139.6,304.3M613.2,307.2 L618.4,310.2 L624.0,316.4 L620.7,318.9M612.4,307.7 L606.5,312.0M612.4,307.7 L620.7,318.9M606.5,312.0 L614.8,323.2M606.5,312.0 L597.5,318.9M606.5,312.0 L612.4,307.7M606.5,312.0 L601.1,304.7M620.7,318.9 L614.8,323.2M620.7,318.9 L612.4,307.7M620.7,318.9 L624.0,316.4 L618.4,310.2 L613.2,307.2M614.8,323.2 L619.3,329.2M614.8,323.2 L606.5,312.0M614.8,323.2 L605.8,330.0M614.8,323.2 L620.7,318.9M597.5,318.9 L593.6,321.8M597.5,318.9 L606.5,312.0M597.5,318.9 L605.8,330.0M597.5,318.9 L589.1,307.7M601.1,304.7 L606.1,300.9M601.1,304.7 L598.3,300.9M601.1,304.7 L606.5,312.0M593.6,321.8 L597.5,318.9M605.8,330.0 L598.5,335.3M605.8,330.0 L614.8,323.2M605.8,330.0 L610.3,336.0M605.8,330.0 L597.5,318.9M589.1,307.7 L585.0,310.9M589.1,307.7 L592.7,305.1M589.1,307.7 L597.5,318.9M589.1,307.7 L587.1,305.1M590.3,324.3 L582.9,329.7M590.3,324.3 L592.3,322.7M590.3,324.3 L598.5,335.3M590.3,324.3 L584.2,316.0M582.9,329.7 L575.6,335.1M582.9,329.7 L590.3,324.3M582.9,329.7 L591.2,340.8M582.9,329.7 L580.2,326.2M592.3,322.7 L590.3,324.3M598.5,335.3 L605.8,330.0M598.5,335.3 L595.6,337.5M598.5,335.3 L590.3,324.3M598.5,335.3 L603.1,341.3 L607.8,337.7M584.2,316.0 L590.3,324.3M584.2,316.0 L582.0,313.0M575.6,335.1 L582.9,329.7M575.6,335.1 L567.4,324.0M575.6,335.1 L583.9,346.2M591.2,340.8 L582.9,329.7M591.2,340.8 L583.9,346.2M580.2,326.2 L582.9,329.7M567.4,324.0 L575.6,335.1M567.4,324.0 L563.2,318.3M567.4,324.0 L572.9,319.8M583.9,346.2 L591.2,340.8M583.9,346.2 L575.6,335.1M583.9,346.2 L576.7,351.6M568.7,340.9 L576.7,351.6M557.8,349.2 L564.1,357.7M539.4,363.0 L541.2,365.5M274.6,352.1 L278.0,355.3M274.6,352.1 L271.6,355.5M274.6,352.1 L277.5,348.9M278.0,355.3 L274.6,352.1M278.0,355.3 L275.1,358.7M278.0,355.3 L281.0,352.1M271.6,355.5 L275.1,358.7M271.6,355.5 L274.6,352.1M271.6,355.5 L267.3,351.5M275.1,358.7 L278.2,361.7M275.1,358.7 L271.6,355.5M275.1,358.7 L278.0,355.3M281.0,352.1 L284.3,354.9M281.0,352.1 L278.0,355.3M281.0,352.1 L284.8,347.9 L286.9,347.4M492.4,645.8 L492.3,649.0M492.4,645.8 L492.5,642.3M492.3,649.0 L492.4,645.8M492.5,642.3 L492.4,645.8M492.5,642.3 L492.8,635.6M490.8,645.9 L488.7,647.0M490.8,645.9 L488.2,641.7M521.5,631.0 L531.3,626.2M521.5,631.0 L503.6,640.3M521.5,631.0 L520.7,635.2 L523.2,640.0M521.5,631.0 L523.4,627.6 L523.4,620.1M531.3,626.2 L521.5,631.0M503.6,640.3 L521.5,631.0M523.2,640.0 L505.7,649.6M523.2,640.0 L529.9,635.6M523.2,640.0 L520.7,635.2 L521.5,631.0M531.1,626.1 L523.4,620.1M552.4,296.7 L543.5,289.6M550.4,283.8 L546.1,286.4 L543.5,289.6M531.0,278.8 L538.7,269.5M531.0,278.8 L539.0,285.8M538.7,269.5 L531.0,278.8M530.3,278.2 L526.6,275.9M516.2,267.0 L511.7,272.2M606.7,694.4 L606.1,696.8M606.1,696.8 L606.7,694.4M608.1,701.8 L616.5,700.7M608.1,701.8 L596.3,707.0 L589.1,707.9 L582.3,706.1 L577.1,707.2 L572.1,705.9 L568.6,707.0 L563.9,715.1 L558.9,718.9 L557.7,721.9 L561.2,728.1 L565.7,729.9 L567.6,732.2 L570.3,732.2M616.5,700.7 L622.8,700.1M616.5,700.7 L608.1,701.8M570.3,732.2 L567.6,732.2 L565.7,729.9 L561.2,728.1 L557.7,721.9 L558.9,718.9 L563.9,715.1 L568.6,707.0 L572.1,705.9 L577.1,707.2 L582.3,706.1 L589.1,707.9 L596.3,707.0 L608.1,701.8M603.3,771.5 L599.6,749.0M603.3,771.5 L611.2,771.2M599.6,749.0 L603.3,771.5M599.6,749.0 L600.0,741.6M611.2,771.2 L603.3,771.5M611.2,771.2 L610.7,760.4 L613.5,750.5M285.5,271.8 L285.4,276.2M283.5,270.8 L278.5,268.0M285.7,271.4 L291.8,273.4M285.7,271.4 L286.5,267.3M285.4,276.2 L285.6,279.5M285.4,276.2 L285.5,271.8M27
380777.9,267.7 L275.3,266.2M277.9,267.7 L280.5,263.2M275.3,266.2 L269.2,262.7M275.3,266.2 L277.9,267.7M278.5,268.0 L283.5,270.8M278.5,268.0 L274.8,274.5M280.5,263.2 L277.9,267.7M269.2,262.7 L265.4,260.5M269.2,262.7 L275.3,266.2M269.2,262.7 L259.6,269.1M265.4,260.5 L254.5,257.8M265.4,260.5 L269.2,262.7M265.4,260.5 L266.5,253.9M259.6,269.1 L266.5,277.5M259.6,269.1 L269.2,262.7M259.6,269.1 L255.1,264.7 L251.0,262.8M254.5,257.8 L265.4,260.5M254.5,257.8 L251.0,262.8M254.5,257.8 L255.3,251.2M266.5,253.9 L255.3,251.2M266.5,253.9 L265.4,260.5M251.0,262.8 L254.5,257.8M251.0,262.8 L255.1,264.7 L259.6,269.1M251.0,262.8 L246.6,262.1M255.3,251.2 L254.5,257.8M255.3,251.2 L266.5,253.9M255.3,251.2 L256.6,244.9M541.2,400.6 L539.2,404.2M541.2,400.6 L531.1,395.4M539.2,404.2 L537.0,408.0M539.2,404.2 L541.2,400.6M539.2,404.2 L529.4,401.4M531.1,395.4 L541.2,400.6M531.1,395.4 L527.1,393.5M531.1,395.4 L529.4,401.4M542.5,401.7 L548.0,406.2M537.0,408.0 L539.2,404.2M537.0,408.0 L535.4,412.0M529.4,401.4 L525.3,400.3M529.4,401.4 L539.2,404.2M529.4,401.4 L531.1,395.4M535.4,412.0 L522.9,408.6M535.4,412.0 L537.2,412.8 L536.5,417.1M535.4,412.0 L537.0,408.0M522.9,408.6 L535.4,412.0M522.9,408.6 L518.7,407.4M536.5,417.1 L543.2,420.7M536.5,417.1 L537.2,412.8 L535.4,412.0M543.2,420.7 L536.5,417.1M543.2,420.7 L542.3,425.2 L548.9,429.0M543.2,420.7 L554.5,427.1M531.2,418.8 L525.3,417.3 L525.6,414.2 L521.9,413.1M521.9,413.1 L525.6,414.2 L525.3,417.3 L531.2,418.8M577.4,75.8 L567.7,75.0M577.4,75.8 L577.4,60.1M577.4,75.8 L582.9,76.4M577.4,75.8 L574.2,86.8 L571.8,85.7M575.2,104.1 L578.0,101.2M575.2,104.1 L572.8,107.5M575.2,104.1 L578.1,106.4M575.2,104.1 L582.9,76.4M567.7,75.0 L577.4,75.8M567.7,75.0 L568.0,83.5M571.8,85.7 L568.0,83.5M571.8,85.7 L567.8,85.9 L568.0,83.5M571.8,85.7 L574.2,86.8 L577.4,75.8M568.0,83.5 L567.7,75.0M568.0,83.5 L571.8,85.7M568.0,83.5 L567.8,85.9 L571.8,85.7M567.7,73.2 L577.4,60.1M567.7,73.2 L564.6,66.3M397.6,-71.3 L398.4,-67.5 L397.2,-64.6M397.6,-71.3 L402.0,-75.2M397.2,-64.6 L398.4,-67.5 L397.6,-71.3M402.0,-75.2 L397.6,-71.3M402.0,-75.2 L408.6,-79.1M402.0,-75.2 L396.1,-77.9M-30.8,700.6 L-25.4,701.3M-30.8,700.6 L-29.5,689.3M-30.9,701.3 L-24.5,702.4M-32.9,700.8 L-39.7,699.8M-25.4,701.3 L-30.8,700.6M-25.4,701.3 L-20.9,702.0M-25.4,701.3 L-21.4,700.5 L-19.9,694.2M-29.5,689.3 L-23.2,690.6M-29.5,689.3 L-30.8,700.6M-29.5,689.3 L-27.8,679.8M-71.0,694.9 L-75.0,694.3M-71.0,694.9 L-67.1,692.0M-70.3,695.0 L-65.2,695.7M-75.0,694.3 L-69.8,693.4 L-65.2,690.4M-75.0,694.3 L-71.0,694.9M-67.1,692.0 L-65.2,690.4M-67.1,692.0 L-67.8,694.1 L-65.2,695.7M-67.1,692.0 L-71.0,694.9M-65.2,690.4 L-67.1,692.0M-65.2,690.4 L-62.6,688.5M-65.2,690.4 L-69.8,693.4 L-75.0,694.3M-119.6,695.2 L-120.5,684.8 L-117.5,678.2M-119.6,695.2 L-138.2,696.2M-119.6,695.2 L-112.0,694.2M-117.5,678.2 L-115.5,674.9M-117.5,678.2 L-120.5,684.8 L-119.6,695.2M-138.2,696.2 L-151.3,695.8 L-172.9,690.5 L-184.2,689.2M-138.2,696.2 L-119.6,695.2M-138.2,696.2 L-136.9,691.1M-112.0,694.2 L-119.6,695.2M-223.9,694.9 L-219.4,701.7M-223.9,694.9 L-228.0,688.5M-223.9,694.9 L-228.8,695.0M-223.9,694.9 L-205.0,692.9M-219.4,701.7 L-223.9,694.9M-219.4,701.7 L-216.7,707.3M-228.0,688.5 L-223.9,694.9M-228.0,688.5 L-228.0,681.3M-228.8,695.0 L-223.9,694.9M-205.0,692.9 L-223.9,694.9M-205.0,692.9 L-193.6,689.9 L-184.2,689.2M24.9,365.6 L25.8,363.7 L24.4,362.1 L23.2,363.6 L24.9,365.6M24.9,365.6 L23.2,363.6 L24.4,362.1 L25.8,363.7 L24.9,365.6M24.9,365.6 L24.4,370.6M18.3,369.7 L13.0,371.5M18.3,369.7 L24.4,370.6M18.3,369.7 L18.7,377.1 L21.4,379.5 L24.4,379.4 L25.6,378.0 L24.4,370.6M18.3,369.7 L15.6,362.8M491.3,667.3 L491.7,662.2M491.3,667.3 L494.2,666.0M491.2,668.5 L491.0,671.5M491.2,668.5 L482.8,668.3M491.7,662.2 L491.3,667.3M494.2,666.0 L497.1,664.5M494.2,666.0 L491.3,667.3M482.8,668.3 L483.0,660.0M482.8,668.3 L491.2,668.5M483.0,660.0 L482.8,668.3M483.0,660.0 L482.3,650.3M483.0,660.0 L463.5,659.2M462.2,667.4 L463.5,659.2M462.2,667.4 L463.8,679.1 L466.4,683.0M462.2,667.4 L471.7,668.0M463.5,659.2 L462.2,667.4M463.5,659.2 L464.9,650.3 L466.2,649.6M463.5,659.2 L483.0,660.0M466.4,683.0 L471.4,696.1M466.4,683.0 L463.8,679.1 L462.2,667.4M466.4,683.0 L460.9,686.6M466.4,683.0 L471.1,682.4M471.7,668.0 L475.4,668.1M471.7,668.0 L462.2,667.4M453.3,666.2 L453.7,663.6M453.3,666.2 L449.4,665.8M453.3,666.2 L458.3,666.9M453.7,663.6 L453.3,666.2M453.7,663.6 L454.7,657.9M449.4,665.8 L446.9,665.4M449.4,665.8 L453.3,666.2M458.3,666.9 L453.3,666.2M438.8,663.9 L440.9,656.0M440.9,656.0 L438.8,663.9M440.9,656.0 L441.9,647.2M440.9,656.0 L454.7,657.9M440.4,664.3 L443.9,664.8M607.9,95.9 L611.4,99.4 L615.9,100.7M607.9,95.9 L606.3,91.9 L607.7,83.3M607.9,95.9 L614.2,92.3 L618.2,92.3M607.9,95.9 L602.9,99.9 L597.0,102.5M615.9,100.7 L611.4,99.4 L607.9,95.9M607.7,83.3 L610.3,83.1M607.7,83.3 L597.9,84.0M607.7,83.3 L606.3,91.9 L607.9,95.9M618.2,92.3 L614.2,92.3 L607.9,95.9M597.0,102.5 L602.9,99.9 L607.9,95.9M610.3,83.1 L618.8,82.3M610.3,83.1 L607.7,83.3M610.3,83.1 L609.7,77.4M618.8,82.3 L610.3,83.1M618.8,82.3 L616.3,59.5 L612.6,54.6M618.8,82.3 L623.5,92.9 L622.9,100.8M609.7,77.4 L610.3,83.1M609.7,77.4 L605.3,77.3 L603.2,75.0 L601.6,64.4 L599.8,60.6M609.7,77.4 L608.8,65.5 L611.0,60.0M448.6,249.8 L449.3,244.5M448.6,249.8 L454.6,250.5M449.3,244.5 L448.6,249.8M454.6,250.5 L448.6,249.8M550.4,487.0 L561.
380776,489.8 L564.9,492.6 L569.6,493.6 L563.5,503.2M550.4,487.0 L546.0,485.4 L543.8,483.2M550.4,487.0 L549.5,492.0M550.4,487.0 L551.7,479.6M550.4,487.0 L548.7,491.7M563.5,503.2 L557.4,497.7M563.5,503.2 L569.6,493.6 L564.9,492.6 L561.6,489.8 L550.4,487.0M563.5,503.2 L556.3,511.5 L550.0,506.0M543.8,483.2 L546.0,485.4 L550.4,487.0M549.5,492.0 L550.4,487.0M549.5,492.0 L543.7,500.6M549.5,492.0 L557.4,497.7M551.7,479.6 L545.7,477.5M551.7,479.6 L561.4,481.0M551.7,479.6 L550.4,487.0M548.7,491.7 L542.7,487.7M548.7,491.7 L543.1,500.0M548.7,491.7 L550.4,487.0M579.9,440.7 L579.1,444.1M579.9,440.7 L596.3,444.5 L607.1,445.5M579.9,440.7 L580.7,437.8M579.1,444.1 L578.2,446.9M579.1,444.1 L579.9,440.7M607.1,445.5 L615.5,445.9M607.1,445.5 L596.3,444.5 L579.9,440.7M284.1,324.3 L286.4,326.5M284.1,324.3 L276.6,331.9M284.1,324.3 L279.4,321.7M286.4,326.5 L284.1,324.3M276.6,331.9 L284.1,324.3M279.4,321.7 L284.1,324.3M-128.1,266.6 L-125.0,270.5M-128.1,266.6 L-124.8,263.9 L-122.6,259.9M-125.0,270.5 L-128.1,266.6M-122.6,259.9 L-120.4,252.7M-122.6,259.9 L-109.8,264.7M-122.6,259.9 L-124.8,263.9 L-128.1,266.6M-120.7,275.9 L-123.8,272.1M-120.7,275.9 L-116.0,273.3M-120.7,275.9 L-123.1,279.3 L-125.3,289.6M-123.8,272.1 L-120.7,275.9M-116.0,273.3 L-112.7,270.9M-116.0,273.3 L-120.7,275.9M-125.3,289.6 L-116.2,290.2M-125.3,289.6 L-134.3,288.1M-125.3,289.6 L-123.1,279.3 L-120.7,275.9M-125.3,289.6 L-125.4,299.2M29.8,307.0 L25.2,301.9M29.8,307.0 L23.2,314.5 L33.2,320.2M29.8,307.0 L33.6,306.5 L38.8,311.1M25.2,301.9 L29.8,307.0M33.2,320.2 L34.7,327.1M33.2,320.2 L23.2,314.5 L29.8,307.0M33.2,320.2 L38.8,311.1M38.8,311.1 L41.2,313.1M38.8,311.1 L33.2,320.2M38.8,311.1 L33.6,306.5 L29.8,307.0M34.7,327.1 L35.7,330.9M34.7,327.1 L33.2,320.2M34.7,327.1 L26.4,327.3M381.0,108.3 L391.4,108.8 L399.7,105.8 L406.1,109.4 L405.0,114.5M381.0,108.3 L377.3,112.1M381.0,108.3 L384.8,100.4M405.0,114.5 L406.1,109.4 L399.7,105.8 L391.4,108.8 L381.0,108.3M405.0,114.5 L401.4,122.2 L396.9,125.4M377.3,112.1 L381.0,108.3M377.3,112.1 L362.1,95.9M377.3,112.1 L383.6,118.6M384.8,100.4 L381.0,108.3M384.8,100.4 L393.5,103.6M379.2,107.0 L382.0,104.3M382.0,104.3 L379.2,107.0M285.5,107.5 L288.2,106.7M285.5,107.5 L278.6,110.9M285.5,107.5 L283.9,102.6M288.2,106.7 L285.5,107.5M288.2,106.7 L292.5,104.1
38077M278.6,110.9 L285.5,107.5M278.6,110.9 L274.5,111.9 L274.6,112.5 L277.1,113.9 L278.6,110.9M278.6,110.9 L277.1,113.9 L274.6,112.5 L274.5,111.9 L278.6,110.9M283.9,102.6 L280.4,103.4M283.9,102.6 L283.0,98.4M283.9,102.6 L285.5,107.5M294.5,103.3 L293.3,98.4M294.9,103.3 L299.8,102.4M294.9,103.3 L291.2,110.1M292.5,104.1 L288.2,106.7M293.3,98.4 L296.5,94.3M293.3,98.4 L294.5,103.3M293.3,98.4 L290.8,97.4 L287.6,97.9M299.8,102.4 L294.9,103.3M299.8,102.4 L303.2,105.3M299.8,102.4 L300.2,98.6M291.2,110.1 L290.4,113.4M291.2,110.1 L294.9,103.3M303.2,105.3 L305.7,107.2M303.2,105.3 L299.8,102.4M300.2,98.6 L301.7,96.1 L304.7,95.2 L309.2,97.9M300.2,98.6 L299.8,102.4M303.1,48.6 L300.2,46.5 L297.5,46.3 L292.6,49.7M292.6,49.7 L295.9,53.2M292.6,49.7 L297.5,46.3 L300.2,46.5 L303.1,48.6M292.6,49.7 L289.3,46.6 L287.9,47.2M736.9,66.7 L719.5,72.3M719.5,72.3 L736.9,66.7M719.5,72.3 L722.2,70.3 L722.6,68.2 L720.2,59.0M719.5,72.3 L714.2,73.7M23.4,486.0 L25.5,483.6M23.4,486.0 L17.0,493.8M23.4,486.0 L36.5,494.6M25.5,483.6 L23.4,486.0M17.0,493.8 L23.4,486.0M17.0,493.8 L29.0,504.1M17.0,493.8 L15.2,496.6 L17.0,503.2M36.5,494.6 L29.0,504.1M36.5,494.6 L23.4,486.0M36.8,494.8 L49.3,504.9M29.0,504.1 L24.9,509.2M29.0,504.1 L36.5,494.6M29.0,504.1 L17.0,493.8M29.0,504.1 L42.0,514.6M49.3,504.9 L36.8,494.8M49.3,504.9 L42.0,514.6M49.3,504.9 L55.4,509.4 L50.8,516.5 L47.4,518.3M42.0,514.6 L49.3,504.9M42.0,514.6 L29.0,504.1M47.4,518.3 L41.4,515.4M47.4,518.3 L42.4,529.3M47.4,518.3 L50.8,516.5 L55.4,509.4 L49.3,504.9M18.3,508.5 L17.0,503.2M17.0,503.2 L18.3,508.5M17.0,503.2 L24.9,509.2M17.0,503.2 L15.2,496.6 L17.0,493.8M24.9,509.2 L22.5,512.2M24.9,509.2 L29.0,504.1M24.9,509.2 L17.0,503.2M24.9,509.2 L37.7,519.8M-176.5,237.5 L-172.8,232.9M-176.5,237.5 L-183.6,231.4M-176.5,237.5 L-179.2,240.8M-172.8,232.9 L-176.5,237.5M-172.8,232.9 L-168.7,228.8M-172.8,232.9 L-178.5,226.4M-172.8,232.9 L-168.6,236.7 L-166.8,234.7M-183.6,231.4 L-176.5,237.5M-179.2,240.8 L-176.5,237.5M479.4,240.8 L479.6,236.2M479.4,240.8 L479.0,246.1M479.4,240.8 L474.2,240.8M479.6,236.2 L479.4,240.8M479.6,236.2 L488.3,243.0M479.0,246.1 L479.4,240.8M474.2,240.8 L479.4,240.8M298.3,225.3 L303.4,225.7M296.3,225.0 L282.8,223.1M297.2,224.2 L295.6,218.3M304.1,225.3 L300.6,215.5M304.1,225.3 L306.6,230.0M303.4,225.7 L298.3,225.3M300.6,215.5 L291.6,206.5M300.6,215.5 L304.1,225.3M306.6,230.0 L309.7,230.5M306.6,230.0 L304.1,225.3M229.9,255.1 L222.7,255.4M229.9,255.1 L238.1,254.7M229.9,255.1 L230.4,252.6M222.7,255.4 L229.9,255.1M222.7,255.4 L223.1,262.9M222.7,255.4 L215.3,255.6 L213.4,262.7M238.1,254.7 L240.8,244.8M238.1,254.7 L229.9,255.1M238.1,254.7 L244.6,254.3M230.4,252.6 L229.9,255.1M223.1,262.9 L222.7,255.4M213.4,262.7 L215.3,255.6 L222.7,255.4M401.8,446.8 L399.6,444.9M402.9,447.6 L404.9,449.3M399.6,444.9 L401.8,446.8M406.8,441.5 L411.6,444.2 L424.1,435.8M406.8,441.5 L417.0,433.1M406.7,442.2 L403.5,446.7M424.1,435.8 L428.6,432.5 L429.1,428.7M424.1,435.8 L411.6,444.2 L406.8,441.5M417.0,433.1 L418.3,430.9M417.0,433.1 L406.8,441.5M419.7,427.6 L429.1,428.7M419.7,427.6 L421.4,423.3M429.1,428.7 L419.7,427.6M429.1,428.7 L433.7,428.6 L436.9,426.6M429.1,428.7 L428.6,432.5 L424.1,435.8M419.1,427.1 L416.7,425.4M421.4,423.3 L419.7,427.6M522.1,395.4 L521.1,399.1M522.1,395.4 L523.4,391.6M521.5,395.3 L511.3,392.3M521.1,399.1 L522.1,395.4M521.1,399.1 L525.3,400.3M521.1,399.1 L518.7,407.4M523.4,391.6 L527.1,393.5M523.4,391.6 L522.1,395.4M523.4,391.6 L525.0,385.5M511.3,392.3 L510.6,394.7M511.3,392.3 L514.0,382.3M511.3,392.3 L521.5,395.3M510.6,394.7 L508.5,401.8M510.6,394.7 L511.3,392.3M514.0,382.3 L511.3,392.3M514.0,382.3 L516.6,372.7M514.0,382.3 L524.3,385.2M514.0,382.3 L504.1,378.7M638.8,442.7 L642.8,443.4M-188.7,361.7 L-192.2,365.3M-188.7,361.7 L-184.9,358.2 L-187.5,351.5M-192.2,365.3 L-188.7,361.7M-187.5,351.5 L-184.9,358.2 L-188.7,361.7M371.8,279.5 L370.1,282.8M371.8,279.5 L379.9,281.3M370.1,282.8 L371.8,279.5M371.8,278.5 L373.4,272.3M379.9,281.3 L371.8,279.5M379.9,281.3 L398.0,285.3M366.5,290.1 L369.3,284.4M369.3,284.4 L366.5,290.1M-146.5,215.0 L-141.9,213.0M-146.5,215.0 L-148.7,210.5 L-148.3,206.5 L-144.7,204.3 L-141.4,203.8M-146.5,215.0 L-146.4,218.5M-141.9,213.0 L-146.5,215.0M-141.4,203.8 L-144.7,204.3 L-148.3,206.5 L-148.7,210.5 L-146.5,215.0M-146.4,218.5 L-139.3,217.2 L-127.6,210.4M-146.4,218.5 L-149.2,218.1M-146.4,218.5 L-146.5,215.0M341.3,252.6 L346.1,238.0M341.5,253.3 L345.0,255.0M340.4,252.7 L336.7,250.9M346.2,237.6 L350.4,238.3M346.1,238.0 L341.3,252.6M350.4,238.3 L346.2,237.6M137.7,233.7 L133.4,236.1M137.7,233.7 L147.9,228.1
38077M138.2,234.8 L139.5,237.1M133.4,236.1 L137.7,233.7M147.9,228.1 L137.7,233.7M103.9,259.5 L105.0,264.8M74.2,271.6 L68.4,272.9M51.7,279.0 L48.2,281.6M51.7,279.0 L56.4,276.6M48.2,281.6 L51.7,279.0M52.2,280.1 L54.2,284.4M56.4,276.6 L51.7,279.0M39.3,287.5 L36.6,284.2M39.1,288.6 L30.8,295.2M30.8,295.2 L39.1,288.6M30.8,295.2 L24.2,300.8M30.2,294.5 L24.3,287.2M31.3,296.1 L32.7,299.4 L41.6,307.4M24.2,300.8 L30.8,295.2M23.7,300.1 L19.4,296.0M19.1,305.9 L4.1,303.9M19.1,305.9 L22.4,302.6M19.1,305.9 L10.3,317.4M4.1,303.9 L19.1,305.9M22.4,302.6 L19.1,305.9M10.3,317.4 L7.3,321.6M10.3,317.4 L-4.7,312.7M10.3,317.4 L19.1,305.9M7.3,321.6 L1.7,328.6M7.3,321.6 L10.3,317.4M-4.7,312.7 L-13.9,310.0M-4.7,312.7 L10.3,317.4M8.0,322.1 L11.7,325.8 L13.6,331.6 L18.3,336.7 L21.7,338.0M1.7,328.6 L-0.9,332.1M1.7,328.6 L7.3,321.6M-0.9,332.1 L1.7,328.6M-1.3,332.6 L-5.6,337.5M-26.6,371.2 L-30.6,369.9M-26.6,371.2 L-27.4,374.0M-26.6,371.2 L-24.0,362.7M-30.6,369.9 L-26.6,371.2M-30.6,369.9 L-38.7,365.4M-27.4,374.0 L-26.6,371.2M-27.4,374.0 L-33.1,394.6M-24.0,362.7 L-26.6,371.2M-24.0,362.7 L-19.8,353.4 L-12.4,344.9M-34.6,399.8 L-27.4,401.9M-34.6,399.8 L-35.9,403.0M-34.6,399.8 L-33.1,394.6M-27.4,401.9 L-34.6,399.8M-27.4,401.9 L-32.5,409.5M-35.9,403.0 L-34.6,399.8M-35.9,403.0 L-58.8,461.1M-33.1,394.6 L-34.6,399.8M-33.1,394.6 L-27.4,374.0M-36.9,402.9 L-43.3,415.4M-58.8,461.1 L-35.9,403.0M255.4,105.6 L263.5,119.1 L269.8,124.5M269.8,124.5 L271.3,121.6M269.8,124.5 L276.5,126.2 L278.3,128.8 L277.5,130.8M269.8,124.5 L263.5,119.1 L255.4,105.6M690.7,62.9 L696.8,80.0M696.8,80.0 L690.7,62.9M696.8,80.0 L709.3,75.4M696.8,80.0 L684.6,84.4M709.3,75.4 L714.2,73.7M709.3,75.4 L696.8,80.0M684.6,84.4 L696.8,80.0M619.7,105.1 L623.0,104.5M619.7,105.1 L622.9,100.8M619.7,105.1 L613.0,109.4M623.0,104.5 L622.9,100.8M623.0,104.5 L619.7,105.1M622.9,100.8 L623.0,104.5M622.9,100.8 L619.7,105.1M622.9,100.8 L623.5,92.9 L618.8,82.3M613.0,109.4 L616.9,114.3M613.0,109.4 L619.7,105.1M613.0,109.4 L604.0,116.9 L600.1,118.0M624.2,104.5 L630.0,104.1M624.2,104.5 L626.7,109.4 L625.8,114.7M633.6,103.7 L637.9,103.3M633.6,103.7 L630.0,104.1M633.6,103.7 L632.6,109.0M637.9,103.3 L640.1,105.3M637.9,103.3 L641.0,102.9M637.9,103.3 L633.6,103.7M630.0,104.1 L633.6,103.7M630.0,104.1 L624.2,104.5M632.6,109.0 L633.6,103.7M640.1,105.3 L637.9,103.3M640.1,105.3 L641.0,102.9M640.1,105.3 L644.7,109.4M641.0,102.9 L643.9,102.6M641.0,102.9 L637.9,103.3M641.0,102.9 L640.1,105.3M669.6,103.6 L675.1,104.1M669.6,103.6 L666.6,103.3M669.6,103.6 L671.0,99.0M675.1,104.1 L669.6,103.6M675.1,104.1 L739.3,114.0M666.6,103.3 L669.6,103.6M666.6,103.3 L662.4,102.9M671.0,99.0 L673.8,93.7M671.0,99.0 L669.6,103.6M744.3,122.7 L737.6,125.8M744.3,122.7 L741.8,117.4M737.6,125.8 L744.3,122.7M737.6,125.8 L735.0,127.1 L732.1,130.9M741.8,117.4 L744.3,122.7M741.8,117.4 L740.0,114.7M428.1,525.3 L426.4,523.4M328.9,247.0 L333.1,249.1M329.1,246.5 L332.3,236.7M333.1,249.1 L328.9,247.0M328.1,246.7 L322.3,244.3M323.6,256.3 L324.8,253.7M323.6,256.3 L331.9,260.5M323.6,256.3 L320.9,255.5M323.0,257.7 L318.7,266.4M324.8,253.7 L323.6,256.3M324.8,253.7 L326.3,250.3M331.9,260.5 L327.5,270.2M331.9,260.5 L336.4,251.4M331.9,260.5 L323.6,256.3M331.9,260.5 L340.2,264.5M320.9,255.5 L323.6,256.3M318.7,266.4 L316.2,273.5M318.7,266.4 L323.0,257.7M318.7,266.4 L327.5,270.2M318.7,266.4 L307.7,261.8M316.2,273.5 L315.4,275.9M316.2,273.5 L318.7,266.4M316.2,273.5 L312.6,272.2M316.2,273.5 L320.9,275.6M327.5,270.2 L318.7,266.4M327.5,270.2 L331.9,272.4M327.5,270.2 L331.9,260.5M307.7,261.8 L304.6,260.7M307.7,261.8 L310.1,252.5M307.7,261.8 L318.7,266.4M307.7,261.8 L304.9,269.3M315.4,275.9 L314.4,278.9M315.4,275.9 L316.2,273.5M312.6,272.2 L316.2,273.5M312.6,272.2 L304.9,269.3M320.9,275.6 L316.2,273.5M313.6,281.1 L316.7,282.7M313.7,280.9 L317.0,281.6M316.7,282.7 L313.6,281.1M317.0,281.6 L313.7,280.9M302.0,277.1 L297.7,275.6M302.0,277.1 L304.9,269.3M297.7,275.6 L302.0,277.1M303.2,277.6 L306.9,278.9M304.9,269.3 L312.6,272.2M304.9,269.3 L296.0,266.1M304.9,269.3 L302.0,277.1M304.9,269.3 L307.7,261.8M291.8,273.4 L285.7,271.4M291.8,273.4 L294.4,274.4M286.5,267.3 L285.7,271.4M286.5,267.3 L287.8,263.1M13.0,371.5
38077L18.3,369.7M13.0,371.5 L9.2,363.5 L2.5,356.0M13.0,371.5 L14.7,382.4M14.7,382.4 L8.7,384.3M14.7,382.4 L16.4,386.5M14.7,382.4 L13.0,371.5M14.7,382.4 L12.2,371.9M15.6,362.8 L16.4,360.6 L13.5,360.5 L13.8,362.0 L15.6,362.8M15.6,362.8 L13.8,362.0 L13.5,360.5 L16.4,360.6 L15.6,362.8M15.6,362.8 L18.3,369.7M33.9,376.9 L34.6,371.8M33.9,376.9 L32.7,379.5 L33.4,380.8 L35.3,379.4 L33.9,376.9M33.9,376.9 L35.3,379.4 L33.4,380.8 L32.7,379.5 L33.9,376.9M46.7,375.7 L51.9,381.7M46.7,375.7 L41.0,372.6 L34.6,371.8M46.7,375.7 L48.1,369.2 L47.2,365.7 L45.1,364.0 L40.4,362.8 L36.1,364.0 L34.6,371.8M51.9,381.7 L46.7,375.7M541.2,213.5 L543.3,215.3M540.6,213.8 L538.0,216.7M548.3,219.7 L545.7,222.7M548.0,219.4 L543.3,215.3M545.7,222.7 L548.3,219.7M549.4,218.5 L553.4,213.7M103.6,187.8 L105.4,204.9M103.6,187.8 L107.1,187.1M105.4,204.9 L103.6,187.8M105.4,204.9 L97.2,207.3M105.4,204.9 L111.9,203.1 L112.8,198.9M101.4,188.2 L97.9,188.8M107.1,187.1 L103.6,187.8M97.2,207.3 L96.8,202.6M97.2,207.3 L105.4,204.9M97.2,207.3 L94.3,208.3M112.8,198.9 L111.9,203.1 L105.4,204.9M96.8,202.6 L97.2,207.3M94.3,208.3 L97.2,207.3M462.7,271.8 L472.8,277.8M462.7,271.8 L458.8,278.6M462.7,271.8 L473.5,269.2M458.8,278.6 L450.9,273.8M458.8,278.6 L468.7,284.5M458.8,278.6 L455.2,284.7M458.8,278.6 L462.7,271.8M473.5,269.2 L473.6,272.6M473.5,269.2 L473.5,265.5M473.5,269.2 L462.7,271.8M456.0,172.8 L458.5,170.6M456.0,172.8 L452.6,175.7 L456.4,180.8M456.0,172.8 L459.9,177.1M458.5,170.6 L456.0,172.8M458.5,170.6 L454.6,166.2M458.5,170.6 L463.3,174.0 L470.6,171.4M456.4,180.8 L459.9,177.1M456.4,180.8 L459.9,184.5M456.4,180.8 L452.6,175.7 L456.0,172.8M459.9,177.1 L456.4,180.8M459.9,177.1 L460.8,176.5 L468.4,183.1M459.9,177.1 L456.0,172.8M280.4,103.4 L283.9,102.6M280.4,103.4 L272.9,106.6M283.0,98.4 L283.9,102.6M283.0,98.4 L282.0,94.6M283.0,98.4 L287.6,97.9M280.0,101.9 L278.9,97.5 L277.5,97.7 L278.2,101.3 L280.0,101.9M280.0,101.9 L278.2,101.3 L277.5,97.7 L278.9,97.5 L280.0,101.9M272.9,106.6 L280.4,103.4M272.9,106.6 L270.3,108.5M272.9,106.6 L271.9,103.9M270.3,108.5 L272.9,106.6M271.9,103.9 L270.7,98.8M271.9,103.9 L272.9,106.6M512.0,293.4 L513.7,291.3M513.7,291.3 L518.2,286.0M513.7,291.3 L512.0,293.4M513.7,291.3 L517.1,294.0M518.2,286.0 L513.7,291.3M518.2,286.0 L524.0,290.7M517.1,294.0 L513.7,291.3M519.6,284.5 L514.3,280.1M519.6,284.5 L524.5,278.4M524.0,290.7 L518.2,286.0M524.0,290.7 L526.9,293.0M524.0,290.7 L519.0,296.7M514.3,280.1 L521.5,271.7M514.3,280.1 L519.6,284.5M514.3,280.1 L512.1,282.5M524.5,278.4 L526.6,275.9M524.5,278.4 L519.6,284.5M385.0,100.1 L385.9,97.8M385.0,100.1 L379.4,94.3M385.9,97.8 L385.0,100.1M385.9,97.8 L387.1,93.1M379.4,94.3 L385.0,100.1M492.9,331.3 L491.3,328.5M492.9,331.3 L488.8,333.1M493.8,332.7 L494.8,335.3M493.8,332.7 L496.1,330.4 L500.4,329.0M491.3,328.5 L492.9,331.3M491.3,328.5 L504.7,322.8M488.8,333.1 L484.0,334.9M488.8,333.1 L487.5,330.1 L485.6,329.2 L483.9,323.9M488.8,333.1 L492.9,331.3M484.0,334.9 L488.8,333.1M484.0,334.9 L480.3,325.5M483.9,323.9 L485.6,329.2 L487.5,330.1 L488.8,333.1M-201.5,268.9 L-204.2,274.1M-201.5,268.9 L-200.7,265.0M-201.5,268.9 L-204.2,267.8 L-205.5,265.8M-201.5,268.9 L-195.6,271.4 L-187.1,270.7M-204.2,274.1 L-201.5,268.9M-204.2,274.1 L-206.7,284.3M-204.2,274.1 L-212.3,272.5 L-215.9,275.6 L-214.8,280.4M-200.7,265.0 L-201.5,268.9M-200.7,265.0 L-206.5,262.4 L-211.0,256.7M-205.5,265.8 L-204.2,267.8 L-201.5,268.9M-187.1,270.7 L-195.6,271.4 L-201.5,268.9M218.7,39.9 L216.9,44.4M226.1,51.9 L235.6,45.2M226.1,51.9 L216.7,61.8M226.1,51.9 L221.2,46.6 L216.9,44.4M215.9,237.0 L213.1,240.7M213.1,240.7 L215.9,237.0M193.6,266.4 L190.2,268.8M193.6,266.4 L189.3,263.9M193.6,266.4 L197.1,262.4M190.2,268.8 L193.6,266.4M190.2,268.8 L184.5,272.6M189.3,263.9 L186.1,261.9M189.3,263.9 L193.6,266.4M197.1,262.4 L199.1,259.7M197.1,262.4 L193.6,266.4M180.0,275.7 L177.5,274.7M180.0,275.7 L175.8,279.7M177.5,274.7 L175.8,279.7M177.5,274.7 L180.0,275.7M177.5,274.7 L189.8,252.0M177.5,274.7 L180.6,266.1M175.8,279.7 L177.5,274.7M175.8,279.7 L180.0,275.7M175.3,280.9 L173.0,286.9M175.3,280.9 L176.4,274.3M556.2,339.1 L560.8,345.6M569.4,357.1 L565.7,359.8M569.4,357.1 L573.0,354.5M569.4,357.1 L572.7,361.5 L580.2,356.3M569.4,357.1 L561.5,346.4M565.7,359.8 L564.1,357.7M565.7,359.8 L569.4,357.1M565.7,359.8 L562.1,362.5 L559.3,358.9M573.0,354.5 L569.4,357.1M573.0,354.5 L576.7,351.
380776M580.2,356.3 L582.6,359.5M580.2,356.3 L572.7,361.5 L569.4,357.1M580.2,356.3 L576.7,351.6M561.5,346.4 L569.4,357.1M544.6,317.4 L545.7,320.1M545.7,320.1 L547.4,323.9M545.7,320.1 L544.6,317.4M551.0,332.1 L548.9,327.3M551.0,332.1 L545.2,334.6M551.0,332.1 L555.4,330.7M551.0,332.1 L554.0,339.4M548.9,327.3 L551.0,332.1M548.9,327.3 L547.4,323.9M545.2,334.6 L548.7,342.7M545.2,334.6 L539.4,337.0M545.2,334.6 L551.0,332.1M545.2,334.6 L538.6,319.0 L533.2,321.5M555.4,330.7 L551.0,332.1M555.4,330.7 L559.3,329.6M554.0,339.4 L551.0,332.1M481.5,259.4 L481.9,264.5M481.2,273.4 L481.9,264.5M483.4,275.8 L480.8,274.4M566.4,603.9 L560.5,598.6M567.0,604.6 L571.5,614.6M560.5,598.6 L566.4,603.9M560.5,598.6 L557.4,595.6M569.9,602.1 L572.7,602.0M672.9,138.8 L680.6,143.4M672.9,138.8 L668.1,146.8M672.9,138.8 L675.1,132.5M680.6,143.4 L672.9,138.8M680.6,143.4 L684.3,145.6M668.1,146.8 L672.9,138.8M668.1,146.8 L680.3,156.7M668.1,146.8 L665.7,152.4 L665.8,158.6M675.1,132.5 L672.9,138.8M675.1,132.5 L673.7,129.3 L670.0,126.6M689.5,140.9 L687.6,148.4M684.3,145.6 L687.6,148.4M684.3,145.6 L680.6,143.4M708.6,166.1 L715.9,171.9M708.6,166.1 L701.6,174.5 L696.0,169.9M715.9,171.9 L719.9,175.1M715.9,171.9 L708.6,166.1M696.0,169.9 L693.4,167.8M696.0,169.9 L701.6,174.5 L708.6,166.1M719.9,175.1 L715.9,171.9M703.2,187.6 L697.6,193.2M722.8,177.6 L738.0,192.5 L741.3,194.0 L739.3,204.7 L726.0,209.1 L724.0,211.0 L723.3,214.8 L721.8,215.1 L711.9,206.6M723.9,176.5 L716.7,170.9M723.9,176.5 L729.0,170.9 L731.4,170.6M711.9,206.6 L705.4,200.4M711.9,206.6 L721.8,215.1 L723.3,214.8 L724.0,211.0 L726.0,209.1 L739.3,204.7 L741.3,194.0 L738.0,192.5 L722.8,177.6M93.9,580.5 L104.5,583.9M93.9,580.5 L95.8,573.9M93.9,580.5 L87.2,585.2M93.9,580.5 L91.6,586.5M104.5,583.9 L109.1,585.4M104.5,583.9 L93.9,580.5M104.5,583.9 L102.3,590.1M104.5,583.9 L106.8,577.5M95.8,573.9 L90.2,576.5M95.8,573.9 L106.8,577.5M95.8,573.9 L93.9,580.5M95.8,573.9 L97.7,567.6M87.2,585.2 L83.9,581.6M87.2,585.2 L93.9,580.5M87.2,585.2 L78.2,591.5 L70.2,594.4M91.6,586.5 L102.3,590.1M91.6,586.5 L75.8,596.4M91.6,586.5 L93.9,580.5M109.1,585.4 L111.8,586.3M109.1,585.4 L104.5,583.9M102.3,590.1 L100.7,594.4M102.3,590.1 L104.5,583.9M102.3,590.1 L91.6,586.5M106.8,577.5 L108.9,571.3M106.8,577.5 L104.5,583.9M106.8,577.5 L116.3,580.7M106.8,577.5 L95.8,573.9M111.8,586.3 L115.0,590.0M111.8,586.3 L109.1,585.4M111.8,586.3 L116.3,580.7M115.0,590.0 L111.8,586.3M116.3,580.7 L111.8,586.3M116.3,580.7 L106.8,577.5M116.3,580.7 L118.7,577.8M354.9,51.3 L349.8,56.5M354.9,51.3 L347.0,45.4 L346.6,39.7 L345.0,37.2M354.9,51.3 L360.6,46.1M349.8,56.5 L354.9,51.3M349.8,56.5 L358.3,65.5 L361.3,62.9M349.8,56.5 L346.2,59.9M345.0,37.2 L346.6,39.7 L347.0,45.4 L354.9,51.3M345.0,37.2 L343.9,36.9 L344.3,35.7M360.6,46.1 L363.6,43.3M360.6,46.1 L354.9,51.3M366.2,400.4 L366.3,397.2M366.2,400.4 L369.0,401.2M366.2,400.4 L365.4,424.8M366.3,397.2 L366.2,400.4M366.3,397.2 L366.4,390.5M369.0,401.2 L366.2,400.4M369.0,401.2 L371.5,406.0M365.4,424.8 L362.5,455.2M365.4,424.8 L366.2,400.4M599.8,60.6 L601.6,64.4 L603.2,75.0 L605.3,77.3 L609.7,77.4M599.8,60.6 L597.4,63.7 L593.4,64.0M599.8,60.6 L602.1,57.2 L610.8,56.1 L612.6,54.6M593.4,64.0 L597.4,63.7 L599.8,60.6M593.4,64.0 L588.2,64.8M593.4,64.0 L593.6,84.1M612.6,54.6 L610.8,56.1 L602.1,57.2 L599.8,60.6M612.6,54.6 L619.9,42.1M612.6,54.6 L616.3,59.5 L618.8,82.3M612.6,54.6 L608.6,51.6 L600.0,41.1M611.0,60.0 L608.8,65.5 L609.7,77.4M593.6,84.1 L597.9,84.0M593.6,84.1 L590.3,88.2M593.6,84.1 L593.4,64.0M597.9,84.0 L607.7,83.3M597.9,84.0 L593.6,84.1M597.9,84.0 L598.3,90.0 L601.9,89.5M590.3,88.2 L593.6,84.1M601.9,89.5 L598.3,90.0 L597.9,84.0M311.9,226.1 L307.6,214.1M311.9,226.1 L318.0,213.1M311.6,226.7 L309.7,230.5M307.6,214.1 L311.9,226.1M318.0,213.1 L311.9,226.1M580.5,-48.4 L583.6,-45.4M583.6,-45.4 L586.5,-42.8 L596.3,-41.1M583.6,-45.4 L580.5,-48.4M583.6,-45.4 L575.7,-36.3 L580.4,-30.7 L579.6,-27.9M596.3,-41.1 L604.5,-40.3 L615.4,-35.9M596.3,-41.1 L586.5,-42.8 L583.6,-45.4M596.3,-41.1 L597.6,-50.8 L607.4,-64.6M615.4,-35.9 L604.5,-40.3 L596.3,-41.1M615.4,-35.9 L612.9,-25.8M607.4,-64.6 L611.4,-69.4M607.4,-64.6 L597.6,-50.8 L596.3,-41.1M615.6,-35.8 L630.8,-34.4M612.9,-25.8 L612.2,-20.3M612.9,-25.8 L615.4,-35.9M630.8,-34.4 L630.7,-29.7M630.8,-34.4 L61
380775.6,-35.8M630.8,-34.4 L632.7,-43.8M630.7,-29.7 L630.8,-34.4M632.7,-43.8 L630.8,-34.4M648.1,709.9 L656.8,716.2M648.1,709.9 L645.4,713.9 L636.4,717.0M648.1,709.9 L635.2,701.3M656.8,716.2 L660.0,711.9M656.8,716.2 L669.6,725.9M656.8,716.2 L648.1,709.9M636.4,717.0 L645.4,713.9 L648.1,709.9M635.2,701.3 L629.9,696.4M635.2,701.3 L648.1,709.9M635.2,701.3 L643.1,692.1 L647.8,703.2 L660.0,711.9M-104.1,235.6 L-101.3,239.4M-104.1,235.6 L-106.5,236.9 L-112.0,235.7M-101.3,239.4 L-104.1,235.6M-112.0,235.7 L-106.5,236.9 L-104.1,235.6M-104.8,233.7 L-106.0,227.7M-104.8,233.7 L-101.1,232.7M261.6,88.4 L264.6,94.8M261.6,88.4 L266.1,86.5 L269.4,82.2M261.6,88.4 L256.3,81.4M264.6,94.8 L261.6,88.4M269.4,82.2 L266.1,86.5 L261.6,88.4M256.3,81.4 L260.3,79.1 L265.2,73.2M256.3,81.4 L261.6,88.4M256.3,81.4 L255.3,77.3 L257.0,73.1M199.9,117.0 L203.2,115.6M199.9,117.0 L195.9,118.4M200.1,117.3 L204.6,123.3M203.2,115.6 L206.4,114.4M203.2,115.6 L199.9,117.0M195.9,118.4 L199.9,117.0M195.9,118.4 L193.4,119.0M211.4,127.6 L209.5,128.5 L204.6,123.3M204.6,123.3 L209.5,128.5 L211.4,127.6M204.6,123.3 L200.1,117.3M-120.3,207.5 L-118.1,212.0M-120.3,207.5 L-127.6,210.4M-120.3,207.5 L-106.1,202.2 L-91.2,202.6 L-72.7,199.5M-118.1,212.0 L-113.9,214.7M-118.1,212.0 L-120.3,207.5M-118.1,212.0 L-121.9,213.9M-127.6,210.4 L-120.3,207.5M-127.6,210.4 L-129.0,207.1M-127.6,210.4 L-139.3,217.2 L-146.4,218.5M-72.7,199.5 L-69.0,213.3M-72.7,199.5 L-18.3,204.6 L-8.6,209.1M-72.7,199.5 L-91.2,202.6 L-106.1,202.2 L-120.3,207.5M-113.9,214.7 L-118.1,212.0M-113.9,214.7 L-109.9,216.5 L-107.1,221.0M-113.9,214.7 L-115.0,221.0M-113.9,214.7 L-111.0,210.4 L-106.7,208.4 L-105.5,211.7M-121.9,213.9 L-124.4,214.2M-121.9,213.9 L-118.1,212.0M-121.9,213.9 L-121.3,217.2M-107.1,221.0 L-106.0,227.7M-107.1,221.0 L-109.9,216.5 L-113.9,214.7M-115.0,221.0 L-114.5,224.2M-115.0,221.0 L-113.9,214.7M-115.0,221.0 L-118.6,221.3M-105.5,211.7 L-106.7,208.4 L-111.0,210.4 L-113.9,214.7M-106.0,227.7 L-104.8,233.7M-106.0,227.7 L-107.1,221.0M-106.0,227.7 L-101.1,226.5M-101.1,226.5 L-106.0,227.7M-78.4,316.4 L-85.6,313.7M-85.6,313.7 L-93.7,310.9 L-97.1,308.2M-85.6,313.7 L-78.4,316.4M-85.6,313.7 L-88.0,322.1 L-86.9,325.1 L-79.5,329.5 L-78.0,331.9M-97.1,308.2 L-108.3,296.0M-97.1,308.2 L-93.7,310.9 L-85.6,313.7M-78.0,331.9 L-79.5,329.5 L-86.9,325.1 L-88.0,322.1 L-85.6,313.7M-116.2,290.2 L-125.3,289.6M-116.2,290.2 L-109.2,295.2M-134.3,288.1 L-142.3,286.1M-134.3,288.1 L-125.3,289.6M-125.4,299.2 L-118.5,300.5 L-119.0,304.7M-125.4,299.2 L-125.3,289.6M-125.4,299.2 L-127.0,306.7M383.1,489.4 L383.4,493.5 L388.4,492.7M383.1,489.4 L395.3,487.5M383.1,489.4 L377.7,487.5M388.4,492.7 L383.4,493.5 L383.1,489.4M395.3,487.5 L406.7,493.9M395.3,487.5 L383.1,489.4M377.7,487.5 L383.1,489.4M377.7,487.5 L374.5,484.4 L372.7,479.0M-199.8,237.7 L-193.6,235.5M-199.8,237.7 L-199.7,248.2M-199.8,237.7 L-200.8,232.1M-199.8,237.7 L-209.8,238.6M-193.6,235.5 L-199.8,237.7M-193.6,235.5 L-191.6,238.9M-199.7,248.2 L-199.8,237.7M-200.8,232.1 L-199.4,228.9M-200.8,232.1 L-199.8,237.7M-209.8,238.6 L-215.9,238.2M-209.8,238.6 L-199.8,237.7M399.4,246.1 L392.6,245.0M392.6,245.0 L386.8,244.1M392.6,245.0 L391.8,249.5M392.6,245.0 L399.4,246.1M386.8,244.1 L392.6,245.0M391.8,249.5 L384.9,248.3M391.8,249.5 L392.6,245.0M391.8,249.5 L390.3,257.8M385.6,243.9 L378.0,242.7M385.6,243.9 L384.9,248.3M384.9,248.3 L385.6,243.9M384.9,248.3 L383.8,254.7M384.9,248.3 L377.2,247.1M384.9,248.3 L391.8,249.5M369.3,241.3 L377.1,242.6M369.3,241.3 L368.7,245.7M369.0,241.2 L362.0,240.1M368.7,245.7 L361.1,244.5M368.7,245.7 L376.4,246.9M368.7,245.7 L369.3,241.3M368.7,245.7 L364.7,258.1M361.7,240.1 L361.1,244.5M361.7,240.1 L351.1,238.4M362.0,240.1 L369.0,241.2M361.1,244.5 L368.7,245.7M361.1,244.5 L361.7,240.1M361.1,244.5 L357.0,255.2M351.1,238.4 L361.7,240.1M400.5,244.1 L393.2,242.9M393.2,242.9 L387.2,242.0M393.2,242.9 L400.5,244.1M387.2,242.0 L393.2,242.9M393.3,242.5 L394.4,238.2M386.9,241.9 L379.0,240.5M387.0,241.5 L391.8,220.1M369.6,239.0 L378.1,240.5M369.6,239.0 L371.3,231.5M371.3,231.5 L375.0,215.7M371.3,231.5 L369.6,239.0M325.7,233.0 L331.3,219.8M325.7,233.0 L332.7,234.2M331.3,219.8 L337.2,222.5M331.3,219.8 L334.2,212.4M331.3,219.8 L325.7,233.0M332.7,234.2 L325.7,233.0M319.4,232.1 L326.7,214.6M319.4,232.1 L314.0,231.3M319.4,232.1 L321.7,232.4M326.7,214.6 L328.1,211.1M326.7,214.6 L319.4,232.1M314.0,231.3 L319.4,232.1M321.7,232.4 L319.4,232.1M309.7,23
380770.5 L311.6,226.7M309.7,230.5 L306.6,230.0M578.0,101.2 L575.2,104.1M578.0,101.2 L584.1,90.9 L588.0,77.2M578.0,101.2 L577.0,104.4 L578.1,106.4M572.8,107.5 L575.2,104.1M572.8,107.5 L575.8,105.6 L578.1,106.4M572.8,107.5 L564.5,116.2 L550.4,126.9 L518.9,143.1 L507.9,150.2M578.1,106.4 L580.1,110.2M578.1,106.4 L575.2,104.1M578.1,106.4 L575.8,105.6 L572.8,107.5M578.1,106.4 L577.0,104.4 L578.0,101.2M379.0,529.5 L379.7,534.4 L378.1,543.4M378.1,543.4 L379.7,534.4 L379.0,529.5M378.1,543.4 L371.6,540.9M378.1,543.4 L383.9,543.0 L388.2,540.2M371.6,540.9 L372.6,534.1 L371.1,525.3M371.6,540.9 L368.1,541.2M371.6,540.9 L378.1,543.4M388.2,540.2 L383.9,543.0 L378.1,543.4M108.9,571.3 L106.8,577.5M108.9,571.3 L97.7,567.6M108.9,571.3 L117.7,574.4 L118.7,577.8M97.7,567.6 L108.9,571.3M97.7,567.6 L95.8,573.9M118.7,577.8 L116.3,580.7M118.7,577.8 L117.7,574.4 L108.9,571.3M348.3,204.2 L344.3,205.0M344.3,205.0 L348.3,204.2M349.8,204.2 L355.6,205.6M343.0,197.6 L353.4,186.1M343.0,197.6 L337.2,192.4M343.0,197.6 L348.1,202.1M353.4,186.1 L343.0,197.6M353.4,186.1 L347.6,180.6M353.4,186.1 L359.0,190.9M337.2,192.4 L343.0,197.6M337.2,192.4 L332.7,194.7 L326.9,192.5M337.2,192.4 L347.6,180.6M348.1,202.1 L343.0,197.6M326.9,192.5 L325.3,196.8M326.9,192.5 L333.7,180.4M326.9,192.5 L332.7,194.7 L337.2,192.4M378.2,42.7 L382.1,31.4M378.2,42.7 L382.6,45.8 L384.0,51.2 L383.0,52.8 L380.6,53.5 L376.1,51.4 L372.2,52.3M378.2,42.7 L369.4,38.0M372.2,52.3 L361.3,62.9M372.2,52.3 L363.9,43.0M372.2,52.3 L376.1,51.4 L380.6,53.5 L383.0,52.8 L384.0,51.2 L382.6,45.8 L378.2,42.7M372.2,52.3 L375.2,57.2M369.4,38.0 L378.2,42.7M603.9,645.4 L598.2,645.6M598.2,645.6 L594.0,649.1M598.2,645.6 L603.9,645.4M598.2,645.6 L597.2,643.0M594.0,649.1 L590.7,651.9M594.0,649.1 L598.2,645.6M597.2,643.0 L598.2,645.6M590.7,651.9 L594.0,649.1M590.7,651.9 L603.5,664.3M590.7,651.9 L582.0,637.6M603.5,664.3 L605.6,666.9M603.5,664.3 L590.7,651.9M582.0,637.6 L590.7,651.9M582.0,637.6 L578.2,629.5M582.0,637.6 L584.3,636.7M-30.5,-75.0 L-32.6,-81.4 L-29.3,-88.1 L-34.4,-93.1 L-36.6,-101.7M-30.5,-75.0 L-22.0,-73.2M-30.5,-75.0 L-38.4,-74.6M-36.6,-101.7 L-25.0,-104.3M-36.6,-101.7 L-34.4,-93.1 L-29.3,-88.1 L-32.6,-81.4 L-30.5,-75.0M-22.0,-73.2 L-15.7,-69.7 L-10.1,-64.3M-22.0,-73.2 L-30.5,-75.0M-38.4,-74.6 L-44.4,-74.2M-38.4,-74.6 L-30.5,-75.0M223.2,443.6 L226.0,443.9M223.2,443.6 L209.6,439.2M223.2,443.6 L221.6,449.1 L221.9,456.2 L224.1,459.3M226.0,443.9 L223.2,443.6M209.6,439.2 L223.2,443.6M209.6,439.2 L206.6,446.0M209.6,439.2 L214.3,426.3M224.1,459.3 L221.9,456.2 L221.6,449.1 L223.2,443.6M287.3,192.5 L289.7,203.5M286.6,192.2 L284.0,189.8 L281.6,184.2M287.1,191.4 L284.8,178.8 L276.8,164.9 L279.3,151.2M289.7,203.5 L287.3,192.5M289.7,203.5 L291.6,206.5M280.6,183.6 L275.1,181.1M275.1,181.1 L280.6,183.6M275.1,181.1 L274.0,177.5 L276.7,175.1M281.6,184.2 L284.0,189.8 L286.6,192.2M281.4,183.1 L280.5,178.5 L276.7,175.1M139.2,451.8 L143.4,455.8M139.2,451.8 L127.9,440.8M139.2,451.8 L144.3,447.1 L151.8,446.8M139.2,451.8 L137.7,455.3 L138.7,460.2 L138.1,470.9M143.4,455.8 L139.2,451.8M143.4,455.8 L149.3,460.3 L156.6,460.4M127.9,440.8 L139.2,451.8M127.9,440.8 L119.5,433.1M127.9,440.8 L137.7,431.6M151.8,446.8 L144.3,447.1 L139.2,451.8M138.1,470.9 L138.7,460.2 L137.7,455.3 L139.2,451.8M-155.2,274.2 L-156.9,276.0 L-154.7,279.3M-155.2,274.2 L-145.4,281.6M-155.2,274.2 L-158.4,269.9 L-159.8,264.6M-154.7,279.3 L-157.3,281.4M-154.7,279.3 L-154.0,281.2 L-156.1,283.2 L-157.3,281.4M-154.7,279.3 L-156.9,276.0 L-155.2,274.2M-145.4,281.6 L-142.3,286.1M-145.4,281.6 L-155.2,274.2M-159.8,264.6 L-154.7,264.3M-159.8,264.6 L-158.4,269.9 L-155.2,274.2M-159.8,264.6 L-161.4,253.4M-159.8,264.6 L-164.7,264.9M718.0,91.5 L721.4,89.9 L723.3,87.5M533.5,236.8 L529.4,241.5M533.5,236.8 L536.4,233.6M529.4,241.5 L541.7,252.1M529.4,241.5 L533.5,236.8M529.4,241.5 L526.8,239.5M529.4,241.5 L523.1,248.7M536.4,233.6 L533.5,236.8M536.4,233.6 L542.1,227.0M536.4,233.6 L549.2,244.3M536.4,233.6 L529.2,227.3M454.7,657.9 L453.7,663.6M454.7,657.9 L455.1,654.9M454.7,657.9 L440.9,656.0M455.1,654.9 L454.7,657.9M441.9,647.2 L440.9,656.0M441.9,647.2 L442.6,642.4M441.9,647.2 L447.9,648.1M523.4,331.8 L513.2,336.0M523.4,331.8 L526.4,329.6M523.4,331.8 L526.8,340.1M513.2,336.0 L510.2,337.3M513.2,336.0 L523.4,331.8M526.4,329.6 L523.4,331.8M526.4,329.6 L530.6,326.6M107.6,619.7 L121.8,632.4M107.6,619.7 L111.8,615.4M107.6,619.7 L104.1,624.0M121.8,632.4 L107.6,619.7M121.8,632.4 L124.1,631.4M121.8,632.4 L119.0,633.7M111.8,615.4 L120.1,606.0M111.8,615.4 L107.6,619.7M111.8,615.4 L116.3,619.3M111.8,615.4 L107.6,611.4M104.1,624.0 L107.6,619.7M104.1,624.0 L100.0,627.8M104.1,624.0 L116.2,635.1M124.1,631.4 L126.0,633.9M124.1,631.4 L127.8,629.9M124.1,631.4 L121.8,632.4M119.0,633.7 L121.2,636.9M119.0,633.7 L121.8,632.4M119.0,633.7 L116.2,635.1M537.8,333.0 L539.4,337.0M537.8,333.0 L534.2,324.2M537.4,333.1 L532.8,335.4M539.4,337.0 L537.8,333.0M539.4,337.0 L545.2,334.6M534.2,324.2 L537.8,333.0M534.2,324.2 L533.2,321.5M532.8,335.4 L537.4,333.1M6.2,374.0 L1.7,374.9M6.2,374.0 L3.6,368.0M6.2,374.0 L8.7,384.3M1.7,374.9 L6.2,374.0M3.6,368.0 L6.2,374.0M8.7,384.3 L10.4,389.5M8.7,384.3 L14.7,382.4M8.7,384.3 L6.2,374.0M8.7,384.3 L3.0,384.8 L-3.7,382.2M520.0,316.0 L518.7,313.2M520.0,316.0 L524.5,325.8M520.0,316.0 L518.0,317.6 L517.6,324.9 L512.2,330.1 L511.7,332.3M518.7,313.2 L520.0,316.0M524.5,325.8 L526.2,329.3M524.5,325.8 L520.0,316.0M524.5,325.8 L512.0,332.2M511.7,332.3 L513.2,335.7M511.7,332.3 L512.2,330.1 L517.6,324.9 L518.0,317.6 L520.0,316.0M526.2,329.3 L524.5,325.8M530.6,326.6 L526.4,329.6M530.6,326.6 L533.6,324.6M500.4,467.9 L503.0,460.9M500.4,467.9 L497.1,466.7M500.4,467.9 L498.2,474.0M503.0,460.9 L500.4,467.9M497.1,466.7 L489.1,461.9 L484.8,461.7M497.1,466.7 L494.7,470.3 L492.7,469.8 L485.3,466.2 L484.8,461.7M497.1,466.7 L500.4,467.9M498.2,474.0 L500.4,467.9M484.8,461.7 L489.1,461.9 L497.1,466.7M484.8,461.7 L485.3,466.2 L492.7,469.8 L494.7,470.3 L497.1,466.7M484.8,461.7 L483.0,454.5M483.0,454.5 L484.8,461.7M471.2,245.6 L471.3,242.7M471.1,246.3 L470.9,248.8M470.9,246.0 L465.9,245.7M471.6,246.1 L474.1,246.2M471.3,242.7 L471.2,245.6M253.6,224.9 L248.8,222.7M253.1,226.1 L251.6,229.8M248.8,222.7 L253.6,224.9M249.9,236.6 L246.9,246.8M249.9,236.6 L244.0,235.0M246.9,246.8 L244.6,254.3M246.9,246.8 L249.9,236.6M246.9,246.8 L240.8,244.8M249.9,235.0 L251.6,229.8M244.0,235.0 L240.8,244.8M244.0,235.0 L240.3,234.0M244.0,235.0 L249.9,236.6M244.6,254.3 L243.9,262.2M244.6,254.3 L246.9,246.8M244.6,254.3 L238.1,254.7M244.6,254.3 L250.7,253.8M240.8,244.8 L238.1,254.7M240.8,244.8 L244.0,235.0M240.8,244.8 L246.9,246.8M240.8,244.8 L232.9,242.8M243.9,262.2 L244.6,254.3M243.9,262.2 L240.1,262.4M243.9,262.2 L246.6,262.1M250.7,253.8 L244.6,254.3M240.1,262.4 L237.4,262.6M240.1,262.4 L243.9,262.2M246.6,262.1 L243.9,262.2M246.6,262.1 L251.0,262.8M288.8,314.5 L287.6,318.1 L290.8,321.7M291.5,312.2 L289.1,312.8M290.8,321.7 L287.6,318.1 L288.8,314.5M-202.6,284.9 L-206.7,284.3M-202.6,284.9 L-198.2,285.1M-202.6,284.9 L-203.5,291.4 L-202.3,292.7 L-198.5,292.5 L-197.5,289.6 L-198.2,285.1M-202.6,284.9 L-201.3,279.7 L-201.5,276.8 L-203.3,276.4M-206.7,284.3 L-206.7,288.4M-206.7,284.3 L-202.6,284.9M-206.7,284.3 L-204.2,274.1M-206.7,284.3 L-210.6,283.7 L-214.8,280.4M-198.2,285.1 L-195.1,283.7M-198.2,285.1 L-202.6,284.9M-198.2,285.1 L-197.5,289.6 L-198.5,292.5 L-202.3,292.7 L-203.5,291.4 L-202.6,284.9M-203.3,276.4 L-201.5,276.8 L-201.3,279.7 L-202.6,284.9M489.3,243.8 L491.0,241.7M489.3,243.8 L487.9,247.6M491.0,241.7 L489.3,243.8M491.0,241.7 L496.1,236.3M491.0,241.7 L489.7,233.6 L485.9,226.9M491.0,241.7 L492.1,246.1M488.3,243.0 L479.6,236.2M487.9,247.6 L489.3,243.8M339.5,216.9 L337.2,222.5M339.5,216.9 L343.4,205.7M340.0,217.0 L345.3,218.2M337.2,222.5 L331.3,219.8M337.2,222.5 L339.5,216.9M337.2,222.5 L333.2,232.9M343.4,205.7 L339.5,216.9M345.3,218.2 L340.0,217.0M546.1,223.0 L548.9,224.6M545.4,223.1 L543.3,225.6M497.4,515.9 L498.6,513.2M496.8,517.1 L496.8,519.1 L497.2,517.3M497.2,517.3 L496.8,519.1 L496.8,517.1M491.3,575.1 L493.2,571.6M491.3,575.1 L498.5,576.0M491.3,575.1 L484.6,586.3M490.5,574.8 L484.1,586.0M490.5,574.8 L494.3,566.4M493.2,571.6 L491.3,575.1M493.2,571.6 L494.3,569.0M498.5,576.0 L491.3,575.1M484.6,586.3 L492.7,588.8 L501.5,583.3M484.6,586.3 L491.3,575.1M484.6,586.3 L481.5,592.6M-102.6,267.7
38077L-94.7,270.5M-102.6,267.7 L-109.8,264.7M-102.6,267.7 L-101.2,263.8 L-101.9,261.4M-94.7,270.5 L-102.6,267.7M-94.7,270.5 L-93.3,266.1M-94.7,270.5 L-92.4,272.1M-109.8,264.7 L-102.6,267.7M-109.8,264.7 L-122.6,259.9M-109.8,264.7 L-112.7,270.9M-101.9,261.4 L-101.2,263.8 L-102.6,267.7M-101.9,261.4 L-103.3,260.9 L-104.1,258.6 L-102.6,259.0 L-101.9,261.4M-101.9,261.4 L-102.6,259.0 L-104.1,258.6 L-103.3,260.9 L-101.9,261.4M139.0,680.7 L150.2,681.0M139.0,680.7 L132.8,692.1 L129.2,694.2 L125.9,694.0M139.0,680.7 L133.7,678.8M150.2,681.0 L139.0,680.7M125.9,694.0 L133.7,678.8M125.9,694.0 L120.8,691.0M125.9,694.0 L129.2,694.2 L132.8,692.1 L139.0,680.7M133.7,678.8 L125.9,694.0M133.7,678.8 L127.6,678.1M133.7,678.8 L139.0,680.7M494.3,408.9 L491.1,407.9M542.1,227.0 L536.4,233.6M542.4,227.3 L549.6,233.7M541.6,226.5 L534.7,220.5M543.3,225.6 L545.4,223.1M433.5,282.7 L424.4,284.5M433.5,282.7 L434.4,287.3M424.4,284.5 L433.5,282.7M434.4,287.3 L433.5,282.7M259.3,319.1 L264.3,322.6 L263.1,324.4M259.3,319.1 L264.5,312.6 L268.5,313.2M263.1,324.4 L264.3,322.6 L259.3,319.1M268.5,313.2 L268.0,316.4 L273.1,316.0M268.5,313.2 L264.5,312.6 L259.3,319.1M671.6,668.8 L668.3,676.2M671.6,668.8 L682.8,674.6M671.7,668.5 L673.4,664.9M671.7,668.5 L668.0,666.6 L674.9,652.4M682.8,674.6 L678.7,682.0M682.8,674.6 L690.1,678.8M682.8,674.6 L671.6,668.8M682.8,674.6 L685.9,669.1M678.7,682.0 L682.8,674.6M678.7,682.0 L685.9,685.9M678.7,682.0 L668.3,676.2M690.1,678.8 L685.9,685.9M690.1,678.8 L682.8,674.6M690.1,678.8 L697.0,682.7 L695.4,691.3M685.9,669.1 L682.8,674.6M685.9,685.9 L690.1,678.8M685.9,685.9 L695.4,691.3M685.9,685.9 L678.7,682.0M233.2,21.2 L235.1,17.9M233.2,21.2 L230.9,17.9 L229.7,9.8M233.2,21.2 L234.1,23.4M235.1,17.9 L233.2,21.2M235.1,17.9 L237.2,11.5 L238.6,10.3M235.1,17.9 L237.6,20.7 L234.1,23.4M229.7,9.8 L233.0,5.9M229.7,9.8 L230.9,17.9 L233.2,21.2M238.6,10.3 L237.2,11.5 L235.1,17.9M392.6,416.5 L389.8,415.3M392.6,416.5 L393.5,419.3M392.7,415.7 L394.2,412.4 L396.9,410.9M389.8,415.3 L388.2,414.6 L387.7,415.4 L388.6,416.0 L389.8,415.3M389.8,415.3 L388.6,416.0 L387.7,415.4 L388.2,414.6 L389.8,415.3M389.8,415.3 L392.6,416.5M393.5,419.3 L395.4,424.5M393.5,419.3 L392.6,416.5M393.5,419.3 L390.3,422.5 L388.9,421.8M617.0,337.4 L613.3,340.1M613.3,340.1 L617.0,337.4M613.3,340.1 L610.3,336.0M613.3,340.1 L616.9,344.8M610.3,336.0 L613.3,340.1M610.3,336.0 L607.8,337.7M610.3,336.0 L615.5,332.1M610.3,336.0 L605.8,330.0M616.9,344.8 L613.3,340.1M394.8,291.8 L382.6,289.3M394.8,291.8 L391.7,296.1M394.8,291.8 L400.3,287.5M382.6,289.3 L394.8,291.8M391.7,296.1 L382.7,294.2M391.7,296.1 L389.9,300.4M391.7,296.1 L394.8,291.8M400.3,287.5 L403.2,291.5M400.3,287.5 L402.2,286.2M400.3,287.5 L394.8,291.8M395.9,400.2 L396.3,395.0M395.9,400.2 L387.5,399.7M395.9,400.2 L403.5,399.5M395.9,400.2 L395.5,406.7 L396.7,410.3M396.3,395.
380770 L395.9,400.2M403.5,399.5 L395.9,400.2M403.5,399.5 L403.2,397.9 L405.9,395.3 L407.8,396.5M396.7,410.3 L395.5,406.7 L395.9,400.2M282.3,317.3 L279.2,320.8M279.2,320.8 L282.3,317.3M627.7,605.2 L638.0,610.9M627.7,605.2 L626.9,608.0M627.7,605.2 L630.5,601.1 L633.9,599.1M638.0,610.9 L627.7,605.2M638.0,610.9 L640.2,606.6M638.0,610.9 L636.4,614.1M626.9,608.0 L628.3,615.3 L631.5,619.4 L634.0,620.5M626.9,608.0 L627.7,605.2M633.9,599.1 L630.5,601.1 L627.7,605.2M633.9,599.1 L640.1,598.6M633.9,599.1 L634.1,590.3M640.2,606.6 L638.0,610.9M636.4,614.1 L638.0,610.9M-198.5,265.3 L-198.6,262.4M-198.5,265.3 L-193.3,264.4 L-181.5,259.4M-198.6,262.4 L-198.5,265.3M-198.6,262.4 L-198.8,260.5 L-200.8,260.1 L-200.8,261.2 L-198.6,262.4M-198.6,262.4 L-200.8,261.2 L-200.8,260.1 L-198.8,260.5 L-198.6,262.4M-181.5,259.4 L-176.7,258.7M-181.5,259.4 L-193.3,264.4 L-198.5,265.3M103.3,21.1 L102.5,30.2M103.3,21.1 L101.1,20.6M103.3,21.1 L109.4,22.2M103.3,21.1 L104.8,13.1 L108.9,10.3M102.5,30.2 L103.3,21.1M102.5,30.2 L98.2,50.1M102.5,30.2 L92.5,42.5M101.1,20.6 L103.3,21.1M101.1,20.6 L101.4,16.0 L99.5,12.7M101.1,20.6 L97.1,19.1M109.4,22.2 L103.3,21.1M108.9,10.3 L114.7,7.3M108.9,10.3 L106.8,5.9M108.9,10.3 L104.8,13.1 L103.3,21.1M59.9,687.7 L60.7,683.8M59.9,687.7 L81.2,693.1M59.5,689.7 L58.8,692.7M60.7,683.8 L59.9,687.7M81.2,693.1 L98.0,697.3M81.2,693.1 L79.9,698.7M81.2,693.1 L82.5,687.4M81.2,693.1 L59.9,687.7M98.0,697.3 L81.2,693.1M98.0,697.3 L96.5,702.9M98.0,697.3 L116.6,701.6M98.0,697.3 L99.5,691.6M79.9,698.7 L96.5,702.9M79.9,698.7 L78.0,704.4M79.9,698.7 L81.2,693.1M79.9,698.7 L58.7,693.2M82.5,687.4 L99.5,691.6M82.5,687.4 L61.0,682.1M82.5,687.4 L81.2,693.1M82.5,687.4 L84.0,681.7M96.5,702.9 L98.0,697.3M96.5,702.9 L118.4,708.5M96.5,702.9 L79.9,698.7M96.5,702.9 L95.1,708.6M116.6,701.6 L98.0,697.3M116.6,701.6 L118.7,703.5 L118.4,708.5M116.6,701.6 L107.8,694.2 L99.5,691.6M99.5,691.6 L82.5,687.4M99.5,691.6 L98.0,697.3M99.5,691.6 L107.8,694.2 L116.6,701.6M99.5,691.6 L93.9,684.4M118.4,708.5 L96.5,702.9M118.4,708.5 L119.3,715.7 L117.7,717.2 L111.4,712.1 L95.1,708.6M118.4,708.5 L118.7,703.5 L116.6,701.6M16.4,386.5 L14.7,382.4M16.4,386.5 L20.0,392.3M-65.4,656.4 L-61.5,653.8M-65.4,656.4 L-60.4,664.5M-65.4,656.4 L-68.5,650.6 L-67.9,644.9M-61.5,653.8 L-65.4,656.4M-60.4,664.5 L-65.4,656.4M-60.4,664.5 L-57.2,668.3 L-54.0,668.4M-60.4,664.5 L-52.8,657.9M-67.9,644.9 L-68.5,650.6 L-65.4,656.4M-217.6,254.0 L-214.9,257.1M-214.9,257.1 L-217.6,254.0M-214.9,257.1 L-217.2,260.9M-213.2,258.1 L-211.0,256.7M-213.2,258.1 L-212.3,260.6M-217.2,260.9 L-214.9,257.1M-217.2,260.9 L-217.8,262.4 L-218.9,262.4 L-218.2,260.6 L-217.2,260.9M-217.2,260.9 L-218.2,260.6 L-218.9,262.4 L-217.8,262.4 L-217.2,260.9M-211.0,256.7 L-213.2,258.1M-211.0,256.7 L-213.1,253.8M-211.0,256.7 L-206.5,262.4 L-200.7,265.0M-211.0,256.7 L-208.7,255.2 L-205.7,257.3M-212.3,260.6 L-213.2,258.1M-212.3,260.6 L-212.4,262.4 L-210.9,262.7 L-211.0,261.8 L-212.3,260.6M-212.3,260.6 L-211.0,261.8 L-210.9,262.7 L-212.4,262.4 L-212.3,260.6M-213.1,253.8 L-211.0,256.7M-213.1,253.8 L-211.0,252.0M-213.1,253.8 L-216.6,248.9 L-217.2,244.6M-205.7,257.3 L-208.7,255.2 L-211.0,256.7M435.8,472.8 L441.2,469.3M479.0,504.8 L477.8,507.7M479.0,504.8 L487.5,507.8M479.0,504.8 L470.6,501.4 L459.6,494.0M477.8,507.7 L479.0,504.8M477.8,507.7 L476.0,512.1M477.8,507.7 L474.9,506.9 L472.9,512.5M487.5,507.8 L492.4,510.2M487.5,507.8 L479.0,504.8M459.6,494.0 L455.7,490.8M459.6,494.0 L457.8,496.4M459.6,494.0 L470.6,501.4 L479.0,504.8M492.4,510.2 L492.0,512.2 L493.0,512.8 L493.7,512.0 L492.4,510.2M492.4,510.2 L493.7,512.0 L493.0,512.8 L492.0,512.2 L492.4,510.2M492.4,510.2 L487.5,507.8M231.6,231.5 L234.3,221.9M231.6,231.5 L225.7,229.9M231.6,231.5 L235.9,232.7M234.3,221.9 L231.6,231.5M225.7,229.9 L231.6,231.5M235.9,232.7 L233.6,240.8M235.9,232.7 L231.6,231.5M235.9,232.7 L240.3,234.0M-46.2,570.4 L-43.0,577.1M-43.0,577.1 L-39.1,580.2M-43.0,577.1 L-44.8,579.6M-43.0,577.1 L-46.2,570.4M-39.1,580.2 L-43.0,577.1M-39.1,580.2 L-37.3,581.7M-44.8,579.6 L-44.0,584.9M-44.8,579.6 L-48.5,579.1 L-48.4,582.0 L-44.0,584.9M-44.8,579.6 L-43.0,577.1M-44.0,584.9 L-44.8,579.6M-44.0,584.9 L-48.4,582.0 L-48.5,579.1 L-44.8,579.6M-44.6,587.0 L-52.5,585.3M-42.9,587.8 L-39.3,590.7M503.7,581.9 L502.0,579.6M503.7,581.9 L501.5,583.3M502.0,579.6 L503.7,581.9M501.5,583.3 L503.7,581.9M501.5,583.3 L492.7,588.8 L484.6,586.3M512.6,595.0 L512.5,597.9M512.6,595.0 L515.6,596.5 L518.3,595.9M512.5,597.9 L512.6,595.0M518.3,595.9 L515.6,596.5 L512.6,595.0M512.4,603.0 L512.3,599.7M510.6,603.5 L508.0,604.2M512.3,599.7 L512.4,603.0M536.7,630.9 L534.7,632.3M537.0,631.9 L537.7,635.3M535.1,629.5 L533.1,627.6M534.7,632.3 L536.7,630.9M537.0,630.7 L539.1,629.1M531.0,649.2 L536.6,662.1 L537.9,671.4M531.0,649.2 L536.3,639.7M531.0,649.2 L526.1,649.2M537.9,671.4 L536.6,662.1 L531.0,649.2M536.3,639.7 L531.0,649.2M526.1,649.2 L518.3,653.5M526.1,649.2 L525.0,645.5M526.1,649.2 L531.0,649.2M-31.8,659.4 L-41.7,646.9M-31.8,659.4 L-41.7,669.0M-31.8,659.4 L-25.5,653.1M-41.7,646.9 L-31.8,659.4M-41.7,646.9 L-52.8,657.9M-4
380771.7,646.9 L-28.6,634.1M-41.7,669.0 L-52.8,657.9M-41.7,669.0 L-31.8,659.4M-41.7,669.0 L-56.1,683.0M-25.5,653.1 L-23.8,651.5M-25.5,653.1 L-31.8,659.4M-42.8,645.6 L-46.4,641.7M-52.8,657.9 L-41.7,669.0M-52.8,657.9 L-41.7,646.9M-52.8,657.9 L-60.4,664.5M-28.6,634.1 L-41.7,646.9M-28.6,634.1 L-36.8,624.6M-28.6,634.1 L-20.3,625.7M-50.1,642.3 L-46.4,641.7M-46.4,641.7 L-50.1,642.3M-46.4,641.7 L-42.8,645.6M395.0,-71.5 L387.7,-74.0 L383.8,-73.9 L374.1,-70.2 L375.7,-64.8M395.0,-71.5 L388.5,-77.4 L379.4,-77.4 L375.1,-83.4 L376.8,-85.1 L387.7,-84.9M375.7,-64.8 L374.1,-70.2 L383.8,-73.9 L387.7,-74.0 L395.0,-71.5M387.7,-84.9 L387.4,-88.3 L384.8,-91.9M387.7,-84.9 L391.6,-83.8M387.7,-84.9 L376.8,-85.1 L375.1,-83.4 L379.4,-77.4 L388.5,-77.4 L395.0,-71.5M528.6,521.5 L531.7,516.8M548.2,541.2 L555.1,535.5M621.6,597.0 L626.9,582.3M615.6,578.3 L611.4,576.8M615.6,578.3 L626.9,582.3M644.7,597.5 L647.5,594.4M644.7,597.5 L640.1,598.6M644.7,597.5 L649.6,608.5M649.7,591.4 L647.5,594.4M662.4,604.3 L662.8,601.2M662.4,604.3 L655.3,601.6 L647.5,594.4M662.8,601.2 L663.6,598.5M662.8,601.2 L662.4,604.3M664.0,604.6 L669.9,605.7M669.9,605.7 L687.2,608.9M669.9,605.7 L664.0,604.6M669.9,605.7 L700.6,640.9M687.2,608.9 L669.9,605.7M687.2,608.9 L717.3,643.7M687.2,608.9 L704.3,612.1M700.6,640.9 L712.3,654.5M700.6,640.9 L669.9,605.7M30.4,639.4 L42.3,636.4M30.4,639.4 L35.3,644.1M30.4,639.4 L39.9,626.9M42.3,636.4 L30.4,639.4M42.3,636.4 L47.8,635.0M42.3,636.4 L43.7,642.0M42.3,636.4 L39.9,626.9M35.3,644.1 L40.6,648.6M35.3,644.1 L43.7,642.0M35.3,644.1 L30.4,639.4M39.9,626.9 L44.4,621.2M39.9,626.9 L42.3,636.4M39.9,626.9 L30.4,639.4M40.6,648.6 L46.4,653.4M40.6,648.6 L35.3,644.1M40.6,648.6 L56.6,644.8M43.7,642.0 L42.3,636.4M43.7,642.0 L35.3,644.1M43.7,642.0 L55.1,639.0M46.4,653.4 L51.7,657.9M46.4,653.4 L40.6,648.6M46.4,653.4 L58.0,650.3M56.6,644.8 L40.6,648.6M56.6,644.8 L55.1,639.0M51.7,657.9 L58.1,663.2M51.7,657.9 L46.4,653.4M51.7,657.9 L59.4,655.7M58.0,650.3 L63.9,648.8M58.0,650.3 L46.4,653.4M58.0,650.3 L59.4,655.7M58.0,650.3 L56.8,645.5M58.1,663.2 L51.7,657.9M58.1,663.2 L61.9,665.4M59.4,655.7 L61.1,662.2M59.4,655.7 L58.0,650.3M59.4,655.7 L65.0,654.2M59.4,655.7 L51.7,657.9M61.9,665.4 L61.1,662.2M61.9,665.4 L58.1,663.2M62.4,667.6 L63.3,671.6M61.1,662.2 L61.9,665.4M61.1,662.2 L59.4,655.7M40.4,64.4 L50.1,73.6M40.4,64.4 L37.2,68.4 L36.8,78.8M40.4,64.4 L35.7,60.3 L30.8,63.7M50.1,73.6 L40.4,64.4M50.1,73.6 L54.3,67.8 L55.2,61.9M50.1,73.6 L55.0,78.2M36.8,78.8 L37.2,68.4 L40.4,64.4M30.8,63.7 L35.7,60.3 L40.4,64.4M55.2,61.9 L54.3,67.8 L50.1,73.6M55.0,78.2 L65.0,87.8M55.0,78.2 L50.1,73.6M65.0,87.8 L59.2,93.8M65.0,87.8 L55.0,78.2M65.0,87.8 L70.1,92.7M59.2,93.8 L65.0,87.8M59.2,93.8 L44.3,79.5M59.2,93.8 L53.8,98.6 L41.4,97.3M70.1,92.7 L75.2,97.5M70.1,92.7 L65.8,97.3M70.1,92.7 L65.0,87.8M75.2,97.5 L70.1,92.7M65.8,97.3 L70.1,92.7M76.0,98.0 L75.5,99.4 L77.6,104.4 L82.9,105.2 L87.8,108.7M76.0,98.0 L82.2,95.7M87.8,108.7 L68.2,115.2M87.8,108.7 L90.5,109.7 L97.3,108.2M87.8,108.7 L82.9,105.2 L77.6,104.4 L75.5,99.4 L76.0,98.0M82.2,95.7 L85.2,94.3M82.2,95.7 L76.0,98.0M68.2,115.2 L66.9,112.6M68.2,115.2 L87.8,108.7M68.2,115.2 L52.2,120.8 L50.5,120.2M97.3,108.2 L90.5,109.7 L87.8,108.7M97.3,108.2 L89.3,92.3M97.3,108.2 L101.0,114.1M532.1,205.5 L535.0,208.1M532.1,205.5 L526.9,201.2M526.9,201.2 L532.1,205.5M526.9,201.2 L523.2,198.1M777.3,590.5 L781.2,587.2M777.3,590.5 L773.1,594.1M777.3,590.5 L748.6,557.7M781.2,587.2 L774.9,579.6M781.2,587.2 L783.1,585.6M781.2,587.2 L777.3,590.5M773.1,594.1 L777.3,590.5M773.1,594.1 L769.7,597.1M748.6,557.7 L777.3,590.5M748.6,557.7 L746.3,569.9M748.6,557.7 L743.6,550.1M746.3,569.9 L769.7,597.1M746.3,569.9 L745.9,573.4M746.3,569.9 L748.6,557.7M743.6,550.1 L750.2,544.3M743.6,550.1 L748.6,557.7M743.6,550.1 L725.5,530.6M17.0,44.7 L20.8,48.0M17.0,44.7 L14.3,47.0 L8.0,48.6M17.0,44.7 L24.0,35.6M20.8,48.0 L17.0,44.7M8.0,48.6 L-6.2,42.9M8.0,48.6 L7.1,55.2 L5.3,58.4 L-2.8,61.4M8.0,48.6 L14.3,47.0 L17.0,44.7M24.0,35.6 L17.0,44.7M24.0,35.6 L27.8,28.5 L31.4,17.3M24.0,35.6 L30.0,39.5 L32.9,43.2M361.3,62.9 L372.2,52.3M361.3,62.9 L358.3,65.5 L349.8,56.5M361.3,62.9 L365.6,67.3 L375.2,57.2M346.2,59.9 L349.8,56.5M346.2,59.9 L344.6,62.2M377.9,86.3 L373.4,81.8M373.4,81.8 L377.9,86.3M373.4,81.8 L384.5,70.9 L390.2,67.5 L398.8,56.0M373.4,81.8 L370.3,78.5M398.8,56.0 L390.2,67.5 L384.5,70.9 L373.4,81.8M370.3,78.5 L373.4,81.8M370.3,78.5 L368.1,78.6 L356.2,89.7M-3.7,382.2 L-5.1,384.4M-3.7,382.2 L-11.2,375.9 L-17.4,376.1 L-22.5,381.1 L-24.0,389.5M-3.7,382.2 L3.0,384.8 L8.7,384.3M-5.1,384.4 L-3.7,382.2M-24.0,389.5 L-22.5,381.1 L-17.4,376.1 L-11.2,375.9 L-3.7,382.2M260.7,500.2 L253.3,515.1M260.7,500.2 L263.3,495.4M260.7,500.2 L243.4,491.4M-193.4,210.3 L-200.8,211.7M-193.4,210.3 L-181.6,212.8M-193.5,209.8 L-193.5,205.2M-200.8,211.7 L-202.4,206.5M-200.8,211.7 L-209.2,216.2M-200.8,211.7 L-193.4,210.3M-181.6,212.8 L-183.0,218.5M-181.6,212.8 L-193.4,210.3M-181.6,212.8 L-173.6,215.5 L-171.4,217.7M489.0,164.2 L487.3,166.8M489.0,164.2 L493.6,168.5M489.0,164.2 L492.7,162.3M487.3,166.8 L491.8,170.7M487.3,166.8 L489.0,164.2M493.6,168.5 L491.8,170.7M493.6,168.5 L496.2,165.4M493.6,168.5 L489.0,164.2M492.7,162.3 L497.6,160.7 L511.2,170.4M492.7,162.3 L489.0,164.2M491.8,170.7 L487.3,166.8M491.8,170.7 L493.6,168.5M491.8,170.7 L494.9,173.7M496.2,165.4 L494.2,163.8M496.2,165.4 L493.6,168.5M496.2,165.4 L497.8,165.3 L502.3,168.6 L502.5,171.7 L504.7,174.8M543.8,369.0 L541.5,365.9M543.8,369.0 L540.3,371.5M543.8,369.0 L548.2,372.7M541.5,365.9 L543.8,369.0M540.3,371.5 L543.8,369.0M540.3,371.5 L536.4,375.8 L534.4,382.8M548.2,372.7 L553.8,374.8M548.2,372.7 L543.8,369.0M553.8,374.8 L548.2,372.7M553.8,374.8 L555.6,373.0 L560.9,375.3 L562.6,378.3M553.8,374.8 L562.4,378.7M577.4,472.5 L577.9,477.1M577.4,472.5 L576.8,465.6M578.6,472.4 L580.2,476.4 L583.2,477.3 L584.0,475.3M578.6,472.4 L578.7,468.6 L579.8,467.5 L584.6,468.6 L584.7,470.1M577.9,477.1 L584.0,478.2 L585.1,475.4M577.9,477.1 L577.4,472.5M576.8,465.6 L586.7,467.9M576.8,465.6 L577.4,472.5M576.8,465.6 L575.9,458.3M584.0,475.3 L583.2,477.3 L580.2,476.4 L578.6,472.4M584.7,470.1 L584.6,468.6 L579.8,467.5 L578.7,468.6 L578.6,472.4M41.2,313.1 L38.8,311.1M35.7,330.9 L34.7,327.1M26.4,327.3 L34.7,327.1M-25.6,350.8 L-30.5,349.2M-25.6,350.8 L-28.6,357.7M-25.6,350.8 L-22.1,347.4 L-20.3,342.2M-30.5,349.2 L-25.6,350.8M-28.6,357.7 L-25.6,350.8M-20.3,342.2 L-21.0,338.9M-20.3,342.2 L-32.7,342.5 L-46.4,335.6M-20.3,342.2 L-14.5,342.3M-20.3,342.2 L-22.1,347.4 L-25.6,350.8M75.2,2.5 L78.5,6.6M75.2,2.5 L82.8,-7.4M75.2,2.5 L69.3,3.9 L63.7,1.8M78.5,6.6 L75.2,2.5M82.8,-7.4 L75.2,2.5M63.7,1.8 L65.3,-4.7 L62.9,-14.2M63.7,1.8 L56.8,8.4M63.7,1.8 L69.3,3.9 L75.2,2.5M313.4,328.6 L306.1,321.6M313.4,328.6 L319.4,333.7M306.1,321.6 L303.9,319.2M306.1,321.6 L313.4,328.6M319.4,333.7 L321.3,332.1M319.4,333.7 L313.4,328.6M304.7,338.8 L310.4,332.8M304.7,338.8 L295.1,348.7M304.7,338.8 L306.7,340.6M310.4,332.8 L304.7,338.8M306.7,340.6 L310.6,344.1M306.7,340.6 L304.7,338.8M292.9,347.0 L295.1,348.7M292.9,347.0 L294.9,344.6M292.9,347.0 L289.8,344.4M275.7,369.6 L274.2,371.5M275.7,369.6 L295.1,348.7M258.6,396.0 L256.4,401.4 L249.0,410.1 L254.3,418.8M258.6,396.0 L266.1,402.1M258.6,396.0 L261.9,384.1M254.3,418.8 L257.5,424.1 L253.9,428.2M254.3,418.8 L249.0,410.1 L256.4,401.4 L258.6,396.0M266.1,402.1 L270.3,404.4 L269.0,408.1M266.1,402.1 L258.6,396.0M261.9,384.1 L262.1,380.3M261.9,384.1 L258.6,396.0M294.9,344.6 L296.0,343.5 L294.7,342.5 L293.7,343.5 L294.9,344.6M294.9,344.6 L293.7,343.5 L294.7,342.5 L296.0,343.5 L294.9,344.6M294.9,344.6 L292.9,347.0M289.8,344.4 L287.5,342.4M289.8,344.4 L286.9,347.4M289.8,344.4 L292.9,347.0M336.0,274.1 L331.9,272.4M336.0,274.1 L340.2,264.5M336.0,274.1 L337.1,275.5 L336.5,278.7M340.2,264.5 L336.0,274.1M340.2,264.5 L344.7,255.6M340.2,264.5 L331.9,260.5M336.5,278.7 L337.1,275.5 L336.0,274.1M304.6,260.7 L302.4,259.9M304.6,260.7 L307.7,261.8M310.1,252.5 L307.7,261.8M310.1,252.5 L311.5,246.8M310.1,252.5 L306.6,251.5M310.1,252.5 L314.4,253.7M290.5,255.6 L294.1,256.8M290.5,255.6 L287.8,263.1M290.5,255.6 L293.6,247.8M294.1,256.8 L290.5,255.6M294.1,256.8 L301.9,259.7M287.8,263.1 L286.5,267.3M287.8,263.1 L290.5,255.6M287.8,263.1 L296.0,266.1M293.6,247.8 L296.0,248.5M293.6,247.8 L290.5,255.6M293.6,247.8 L296.0,241.7M362.9,286.5 L354.5,283.1M354.5,283.1 L362.9,286.5M354.5,283.1 L350.9,292.1M354.5,283.1 L358.6,272.9M350.9,292.1 L359.0,295.3M350.9,292.1 L354.5,283.1M358.6,272.9 L354.5,283.1M358.6,272.9 L362.0,265.0M358.6,272.9 L350.9,270.1M358.6,272.9 L365.1,275.6M42.4,529.3 L34.2,524.5M42.4,529.3 L48.2,532.7M42.4,529.3 L47.4,518.3M34.2,524.5 L42.4,529.3M34.2,524.5 L37.7,519.8M34.2,524.5 L21.3,517.3M48.2,532.7 L42.4,529.3M48.2,532.7 L53.1,525.4M37.7,519.8 L24.9,509.2M37.7,519.8 L34.2,524.5M37.7,519.8 L41.4,515.4M21.3,517.3 L34.2,524.5M548.2,236.0 L550.4,233.4M550.4,233.4 L548.2,236.0M552.9,240.2 L558.1,233.4M558.1,233.4 L552.9,240.2M558.1,233.4 L556.3,230.6M325.9,476.7 L320.1,497.7M325.9,476.7 L334.5,479.2M325.9,476.7 L311.9,474.4M320.1,497.7 L325.9,476.7M334.5,479.2 L325.9,476.7M311.9,474.4 L308.8,474.1M311.9,474.4 L308.7,480.7M311.9,474.4 L325.9,476.7M495.4,107.9 L483.0,104.2M495.4,107.9 L493.2,116.5M495.4,107.9 L500.0,102.1M483.0,104.2 L484.1,100.9M483.0,104.2 L476.9,111.0M483.0,104.2 L495.4,107.9M493.2,116.5 L487.1,113.5M493.2,116.5 L493.2,120.6 L491.2,123.0M493.2,116.5 L495.4,107.9M500.0,102.1 L495.4,107.9M534.1,513.4 L537.4,508.7M534.1,513.4 L531.7,516.8M537.4,508.7 L534.1,513.4M531.7,516.8 L534.1,513.4M531.7,516.8 L528.6,521.5M533.4,512.9 L531.1,516.4M533.4,512.9 L536.8,508.2M507.0,277.8 L502.3,273.6M507.0,277.8 L512.1,282.5M507.0,277.8 L511.7,272.2M507.0,277.8 L501.2,284.7 L497.5,281.9M502.3,273.6 L507.0,277.8M502.3,273.6 L504.5,270.9M502.3,273.6 L499.6,278.2M512.1,282.5 L507.0,277.8M512.1,282.5 L505.3,290.3M512.1,282.5 L514.3,280.1M511.7,272.2 L516.2,267.0M511.7,272.2 L507.0,277.8M497.5,281.9 L496.0,284.1M497.5,281.9 L501.2,284.7 L507.0,277.8M497.5,281.9 L499.6,278.2M511.3,272.0 L507.9,269.2M446.0,222.3 L440.7,219.5M446.0,222.3 L441.6,226.5 L438.2,226.5M446.0,222.3 L449.0,218.7 L449.9,215.3 L446.4,214.7M440.7,219.5 L437.3,218.8M440.7,219.5 L442.7,211.0M440.7,219.5 L446.0,222.3M438.2,226.5 L435.3,225.9M438.2,226.5 L441.6,226.5 L446.0,222.3M446.4,214.7 L449.9,215.3 L449.0,218.7 L446.0,222.3M437.3,218.8 L432.0,217.5M437.3,218.8 L440.7,219.5M442.7,211.0 L440.7,219.5M419.6,214.6 L419.0,217.4M419.6,214.6 L432.0,217.5M419.6,214.6 L420.5,210.8M419.0,217.4 L418.0,222.0M419.0,217.4 L419.6,214.6M432.0,217.5 L437.3,218.8M432.0,217.5 L419.6,214.6M420.5,210.8 L421.2,208.3M420.5,210.8 L419.6,214.6M100.7,594.4 L102.3,590.1M100.7,594.4 L100.9,602.4M100.7,594.4 L91.6,593.5M91.6,593.5 L100.7,594.4M40.9,-28.1 L30.5,-15.5M40.9,-28.1 L36.1,-31.8M40.9,-28.1 L44.6,-32.5 L45.9,-37.7M30.5,-15.5 L40.9,-28.1M30.5,-15.5 L27.3,-18.3M30.5,-15.5 L49.1,0.4M36.1,-31.8 L40.9,-28.1M45.9,-37.7 L44.6,-32.5 L40.9,-28.1M472.8,415.4 L469.2,417.8M472.8,415.4 L475.3,419.5 L474.7,423.5M472.8,415.4 L477.6,412.0M469.2,417.8 L463.3,422.0M469.2,417.8 L472.8,415.4M469.2,417.8 L461.1,405.9M474.7,423.5 L475.4,427.7 L477.9,430.1M474.7,423.5 L475.3,419.5 L472.8,415.4M477.6,412.0 L472.8,415.4M-222.8,248.8 L-220.4,247.4 L-219.9,248.4 L-221.4,249.7M-222.8,248.8 L-223.7,251.9 L-222.3,251.8 L-221.4,249.7M-222.8,248.8 L-225.5,247.3M545.2,394.9 L534.4,389.7M534.4,389.7 L545.2,394.9M525.0,385.5 L523.4,391.6M524.3,385.2 L514.0,382.3M516.6,372.7 L514.0,382.3M504.1,378.7 L514.0,382.3M451.3,713.0 L450.8,710.3M451.3,713.0 L454.7,710.6M451.4,713.8 L451.8,716.2M450.8,710.3 L451.3,713.0M454.7,710.6 L451.3,713.0M450.9,725.5 L450.4,729.0M450.9,725.5 L453.5,724.2M450.4,729.0 L450.9,725.5M453.5,724.2 L456.8,722.0M453.5,724.2 L450.9,725.5M290.8,171.7 L285.4,169.1M290.8,171.7 L290.7,176.2 L293.6,186.5M290.8,171.7 L295.2,167.9 L307.8,167.8M285.4,169.1 L290.8,171.7M293.6,186.5 L309.0,186.6M293.6,186.5 L290.7,176.2 L290.8,171.7M293.6,186.5 L292.6,188.0 L293.7,190.7 L299.1,194.6M307.8,167.8 L308.8,176.5M307.8,167.8 L295.2,167.9 L290.8,171.7M307.8,167.8 L314.1,168.0 L316.0,170.0 L317.7,183.7 L316.2,188.7M579.6,-27.9 L580.4,-30.7 L575.7,-36.3 L583.6,-45.4M579.6,-27.9 L576.7,-28.9 L567.7,-28.1M579.6,-27.9 L582.7,-26.6M579.3,-26.8 L582.4,-25.3M579.3,-26.8 L577.6,-20.8 L577.9,-14.6 L584.0,-8.9M579.3,-26.8 L571.7,-27.8 L568.2,-27.0M582.4,-25.3 L585.0,-24.1M582.4,-25.3 L579.3,-26.8M584.0,-8.9 L581.6,-6.5M584.0,-8.9 L587.3,-8.2M584.0,-8.9 L577.9,-14.6 L577.6,-20.8 L579.3,-26.8M568.2,-27.0 L569.3,-21.7 L568.9,-9.4M568.2,-27.0 L571.7,-27.8 L579.3,-26.8M581.6,-6.5 L584.0,-8.9M587.3,-8.2 L584.0,-8.9M13.8,105.5 L20.4,98.8M13.8,105.5 L17.8,109.9M13.8,105.5 L6.6,112.6 L5.9,118.3M20.4,98.8 L25.9,93.5M20.4,98.8 L13.8,105.5M20.4,98.8 L26.2,104.9M17.8,109.9 L13.8,105.5M5.9,118.3 L6.6,127.2M5.9,118.3 L6.6,112.6 L13.8,105.5M5.9,118.3 L10.7,118.6 L15.8,121.4 L22.5,120.5M589.9,455.7 L576.9,452.6M589.9,455.7 L588.8,460.7M589.9,455.7 L590.7,450.0 L578.2,446.9M576.9,452.6 L589.9,455.7M576.9,452.6 L576.3,455.5M576.9,452.6 L577.8,448.7M576.9,452.6 L569.1,451.9M588.8,460.7 L593.9,461.9M588.8,460.7 L575.9,458.3M588.8,460.7 L589.9,455.7M578.2,446.9 L579.1,444.1M578.2,446.9 L590.7,450.0 L589.9,455.7M576.3,455.5 L576.9,452.6M577.8,448.7 L576.9,452.6M569.1,451.9 L576.9,452.6M569.1,451.9 L568.6,451.0 L567.8,451.6 L568.3,452.4 L569.1,451.9M569.1,451.9 L568.3,452.4 L567.8,451.6 L568.6,451.0 L569.1,451.9M264.7,337.2 L269.2,341.2M264.7,337.2 L268.4,333.0M264.7,337.2 L260.7,335.0M269.2,341.2 L264.7,337.2M269.2,341.2 L271.3,343.0M269.2,341.2 L273.3,336.9M268.4,333.0 L264.7,337.2M260.7,335.0 L257.4,334.5M260.7,335.0 L264.7,337.2M260.7,335.0 L261.3,332.7 L265.0,328.6M239.4,328.4 L247.3,331.5M239.4,328.4 L237.5,335.2M239.4,328.4 L241.5,320.7M425.9,292.6 L420.4,285.4M425.9,292.6 L421.7,294.2M425.9,292.6 L434.7,289.1M420.4,285.4 L425.9,292.6M434.7,289.1 L425.9,292.6M434.7,289.1 L436.5,287.0M312.6,96.1 L314.0,98.6M312.6,96.1 L311.0,94.3M314.0,98.6 L314.4,101.1M314.0,98.6 L312.6,96.1M311.0,94.3 L312.6,96.1M314.4,101.1 L313.0,106.3M314.4,101.1 L314.0,98.6M677.5,523.0 L66
380775.1,511.1M677.5,523.0 L682.7,530.3M677.5,523.0 L679.9,522.2 L684.3,517.0 L689.6,516.3 L697.0,523.2M665.1,511.1 L677.5,523.0M665.1,511.1 L666.0,507.4 L672.3,501.2 L671.6,499.2 L668.9,498.2M682.7,530.3 L677.5,523.0M697.0,523.2 L697.9,525.5 L698.5,525.2 L698.3,524.4 L697.0,523.2M697.0,523.2 L698.3,524.4 L698.5,525.2 L697.9,525.5 L697.0,523.2M697.0,523.2 L689.6,516.3 L684.3,517.0 L679.9,522.2 L677.5,523.0M649.6,608.5 L653.4,607.8M649.6,608.5 L644.7,597.5M649.6,608.5 L648.8,614.4 L644.8,619.4M653.4,607.8 L649.6,608.5M644.8,619.4 L648.8,614.4 L649.6,608.5M644.8,619.4 L638.9,621.3M516.6,175.1 L521.6,168.9M516.6,175.1 L511.2,170.4M518.3,653.5 L526.1,649.2M518.3,653.5 L509.9,658.0M518.3,653.5 L524.5,664.4M509.9,658.0 L518.3,653.5M509.9,658.0 L499.3,663.4M509.9,658.0 L505.7,649.6M509.9,658.0 L513.8,666.2M524.5,664.4 L518.3,653.5M75.9,-32.7 L81.8,-34.3 L96.5,-43.5M75.9,-32.7 L68.3,-32.1 L62.8,-28.4 L60.5,-22.8 L62.9,-14.2M75.9,-32.7 L75.4,-38.5 L72.8,-43.6M96.5,-43.5 L81.8,-34.3 L75.9,-32.7M62.9,-14.2 L68.7,-16.1M62.9,-14.2 L60.5,-22.8 L62.8,-28.4 L68.3,-32.1 L75.9,-32.7M62.9,-14.2 L65.3,-4.7 L63.7,1.8M72.8,-43.6 L75.4,-38.5 L75.9,-32.7M68.7,-16.1 L62.9,-14.2M56.8,8.4 L63.7,1.8M56.8,8.4 L62.6,17.2 L67.6,28.1M56.8,8.4 L53.6,4.7M67.6,28.1 L71.6,43.3M67.6,28.1 L62.6,17.2 L56.8,8.4M430.1,549.1 L434.8,548.8M434.8,548.8 L438.0,548.6M434.8,548.8 L430.1,549.1M438.0,548.6 L441.6,548.3M438.0,548.6 L434.8,548.8M438.0,548.6 L438.1,545.8M438.0,548.6 L438.4,553.3M441.6,548.3 L438.0,548.6M438.1,545.8 L438.0,548.6M438.1,545.8 L438.8,542.5M438.4,553.3 L438.0,548.6M516.9,243.1 L517.9,248.6M515.9,242.0 L506.7,234.4M515.9,242.0 L511.5,247.1M518.0,239.9 L521.9,235.4M518.0,249.0 L522.7,249.1M518.0,249.0 L515.5,250.8M517.9,248.6 L516.9,243.1M522.7,249.1 L518.0,249.0M515.5,250.8 L518.0,249.0M54.9,614.5 L48.9,613.7M55.0,614.8 L59.4,632.0M55.3,614.6 L60.9,615.1M48.9,613.7 L54.9,614.5M59.4,632.0 L63.9,648.8M59.4,632.0 L55.0,614.8M59.4,632.0 L53.7,633.5M59.4,632.0 L64.9,630.6M63.9,648.8 L59.4,632.0M63.9,648.8 L69.4,647.4M63.9,648.8 L58.0,650.3M53.7,633.5 L54.6,636.9M53.7,633.5 L51.9,626.6M53.7,633.5 L59.4,632.0M64.9,630.6 L69.4,647.4M64.9,630.6 L61.0,615.3M64.9,630.6 L59.4,632.0M64.9,630.6 L70.5,629.2M69.4,647.4 L73.7,664.7M69.4,647.4 L64.9,630.6M69.4,647.4 L74.6,646.1M69.4,647.4 L63.9,648.8M71.3,678.5 L77.4,680.1M71.3,678.5 L68.6,668.1M71.3,678.5 L62.3,676.2M77.4,680.1 L73.7,664.7M77.4,680.1 L84.0,681.7M77.4,680.1 L71.3,678.5M68.6,668.1 L73.7,664.7M68.6,668.1 L71.3,678.5M68.6,668.1 L67.7,664.4M62.3,676.2 L61.0,682.1M62.3,676.2 L62.9,673.4M62.3,676.2 L71.3,678.5M676.5,576.5 L677.0,578.9M677.0,578.9 L676.5,576.5M677.0,578.9 L676.8,582.0M276.0,315.7 L279.5,310.3 L281.7,310.0 L282.9,311.1M276.0,315.7 L270.2,313.1M276.0,315.7 L278.2,320.7M282.9,311.1 L281.7,310.0 L279.5,310.3 L276.0,315.7M270.2,313.1 L269.9,309.6M270.2,313.1 L276.0,315.7M278.2,320.7 L276.0,315.7M179.3,-111.7 L173.2,-107.5M173.2,-107.5 L168.3,-106.8 L158.9,-108.3M173.2,-107.5 L179.3,-111.7M173.2,-107.5 L175.2,-103.0 L179.4,-102.7M158.9,-108.3 L150.2,-108.2 L143.3,-103.1M158.9,-108.3 L168.3,-106.8 L173.2,-107.5M179.4,-102.7 L175.2,-103.0 L173.2,-107.5M148.1,-88.7 L145.8,-99.7 L143.3,-103.1M102.1,-87.9 L94.2,-82.8M102.1,-87.9 L109.5,-95.7M102.1,-87.9 L108.5,-83.2 L119.2,-82.5 L122.8,-80.3 L124.1,-78.6 L120.5,-74.7 L118.4,-69.7M94.2,-82.8 L86.2,-81.9M94.2,-82.8 L102.1,-87.9M109.5,-95.7 L102.1,-87.9M109.5,-95.7 L112.6,-97.5M118.4,-69.7 L120.5,-74.7 L124.1,-78.6 L122.8,-80.3 L119.2,-82.5 L108.5,-83.2 L102.1,-87.9M86.2,-81.9 L79.4,-84.1M86.2,-81.9 L94.2,-82.8M86.2,-81.9 L87.6,-72.8M79.4,-84.1 L71.7,-88.0M79.4,-84.1 L86.2,-81.9M79.4,-84.1 L82.5,-90.2M87.6,-72.8 L86.2,-81.9M71.7,-88.0 L67.7,-88.3M71.7,-88.0 L79.4,-84.1M82.5,-90.2 L79.4,-84.1M67.7,-88.3 L71.7,-88.0M67.7,-88.3 L64.9,-95.0M67.7,-88.3 L56.5,-75.7M64.9,-95.0 L67.7,-88.3M56.5,-75.7 L52.3,-73.3 L29.5,-72.7M56.5,-75.7 L67.7,-88.3M56.5,-75.7 L61.8,-70.0 L71.0,-66.4M29.5,-72.7 L23.4,-73.5 L17.6,-79.1M29.5,-72.7 L52.3,-73.3 L56.5,-75.7M29.5,-72.7 L26.0,-59.9 L27.8,-56.0 L31.3,-55.7M71.0,-66.4 L61.8,-70.0 L56.5,-75.7M17.6,-79.1 L15.8,-81.4M17.6,-79.1 L23.4,-73.5 L29.5,-72.7M31.3,-55.7 L27.8,-56.0 L26.0,-59.9 L29.5,-72.7M15.8,-81.4 L17.6,-79.1M15.8,-81.4 L8.8,-77.7M17.6,-82.9 L21.7,-87.4 L22.7,-90.6M8.8,-77.7 L15.8,-81.4M512.8,346.0 L514.3,349.7M512.8,346.0 L509.5,338.3M513.2,345.9 L526.8,340.1M509.5,338.3 L512.8,346.0M361.9,310.0 L366.7,312.6M361.9,310.0 L360.6,312.6 L360.4,318.3M361.9,310.0 L354.4,307.3M366.7,312.6 L361.9,310.0M360.4,318.3 L360.6,312.6 L361.9,310.0M354.4,307.3 L351.5,319.4 L343.3,322.0 L337.0,322.1M354.4,307.3 L337.8,307.0M354.4,307.3 L361.9,310.0M523.2,14.9 L531.7,2.4 L534.4,-16.5M534.4,-16.5 L531.7,2.4 L523.2,14.9M534.4,-16.5 L530.2,-16.3 L525.6,-18.7 L513.9,-40.2M534.4,-16.5 L538.9,-19.3M-166.6,264.6 L-167.9,267.3 L-170.1,268.4 L-174.0,267.6M-166.6,264.6 L-171.6,261.3M-164.7,264.9 L-159.8,264.6M-174.0,267.6 L-170.1,268.4 L-167.9,267.3 L-166.6,264.6M-171.6,261.3 L-166.6,264.6M-171.6,261.3 L-176.7,258.7M257.0,358.7 L252.4,357.2M257.0,358.7 L254.8,361.3M257.0,358.7 L260.3,360.3M257.0,358.7 L258.1,355.1M252.4,357.2 L248.9,356.1M252.4,357.2 L257.0,358.7M252.4,357.2 L254.8,361.3M254.8,3
3807761.3 L252.6,363.4M254.8,361.3 L257.0,358.7M254.8,361.3 L252.4,357.2M260.3,360.3 L266.5,366.1M260.3,360.3 L257.0,358.7M258.1,355.1 L257.0,358.7M252.6,363.4 L248.0,368.1M252.6,363.4 L254.8,361.3M252.6,363.4 L249.5,360.2M252.6,363.4 L254.8,365.6M248.0,368.1 L245.8,370.4M248.0,368.1 L252.6,363.4M248.0,368.1 L253.6,373.8M249.5,360.2 L244.7,364.7M249.5,360.2 L247.4,358.0M249.5,360.2 L252.6,363.4M254.8,365.6 L252.6,363.4M254.8,365.6 L260.9,371.7M253.6,373.8 L251.4,376.0M253.6,373.8 L248.0,368.1M253.6,373.8 L258.5,378.9M243.1,379.0 L249.4,377.9 L251.4,376.0M243.1,379.0 L240.3,377.2M-32.1,581.8 L-34.1,584.3M-32.1,581.8 L-34.6,572.2M-32.1,581.8 L-27.4,575.6 L-33.6,572.7M-34.1,584.3 L-39.3,590.7M-34.1,584.3 L-32.1,581.8M-34.1,584.3 L-37.3,581.7M-34.1,584.3 L-21.7,594.2M-34.6,572.2 L-32.1,581.8M-33.6,572.7 L-27.4,575.6 L-32.1,581.8M-39.3,590.7 L-34.1,584.3M-39.3,590.7 L-42.9,587.8M-39.3,590.7 L-33.3,595.3M-37.3,581.7 L-39.1,580.2M-37.3,581.7 L-34.1,584.3M-21.7,594.2 L-26.9,600.4M-21.7,594.2 L-34.1,584.3M-21.7,594.2 L-12.7,582.5M-33.3,595.3 L-37.6,600.9M-33.3,595.3 L-39.3,590.7M-33.3,595.3 L-26.9,600.4M-24.5,721.9 L-22.9,718.1M-24.5,721.9 L-13.4,716.2M-22.9,718.1 L-24.5,721.9M-22.9,718.1 L-20.9,713.4 L-20.2,707.0M-22.9,718.1 L-21.3,705.7M-13.4,716.2 L-6.6,712.3M-13.4,716.2 L-24.5,721.9M-215.0,220.1 L-218.2,216.3M-215.0,220.1 L-209.5,224.9M-215.0,220.1 L-217.5,223.5M-215.0,220.1 L-209.2,216.2M-218.2,216.3 L-215.0,220.1M-209.5,224.9 L-215.0,220.1M-217.5,223.5 L-224.1,223.7M-217.5,223.5 L-215.9,238.2M-217.5,223.5 L-215.0,220.1M-209.2,216.2 L-205.4,219.3 L-198.3,219.3M-209.2,216.2 L-215.0,220.1M-209.2,216.2 L-200.8,211.7M-209.2,216.2 L-213.6,207.6M200.4,199.0 L203.2,200.3M199.9,200.1 L198.1,204.2M201.0,197.7 L202.6,193.9 L213.3,198.4 L211.3,202.9M203.2,200.3 L207.4,202.1M203.2,200.3 L200.4,199.0M198.1,204.2 L199.9,200.1M198.1,204.2 L194.1,202.7M194.1,202.7 L191.5,201.3M194.1,202.7 L198.1,204.2M660.0,711.9 L656.8,716.2M660.0,711.9 L676.8,724.7 L695.3,718.4M660.0,711.9 L647.8,703.2 L643.1,692.1 L635.2,701.3M669.6,725.9 L676.3,731.1M669.6,725.9 L656.8,716.2M669.6,725.9 L667.3,729.2 L663.2,731.6M695.3,718.4 L696.5,723.9M695.3,718.4 L676.8,724.7 L660.0,711.9M695.3,718.4 L694.6,711.3M588.0,596.3 L593.7,600.9M588.0,596.3 L587.7,592.3 L589.9,586.6 L592.5,581.0 L594.9,578.9M593.7,600.9 L588.0,596.3M594.9,578.9 L593.3,577.1M594.9,578.9 L592.5,581.0 L589.9,586.6 L587.7,592.3 L588.0,596.3M594.9,578.9 L599.1,573.3M141.5,644.9 L145.6,641.8M141.5,644.9 L146.8,653.7M141.5,644.9 L136.9,638.8M145.6,641.8 L141.5,644.9M145.6,641.8 L148.3,645.0M145.6,641.8 L135.5,627.2M145.6,641.8 L150.5,638.9M146.8,653.7 L142.2,657.0M146.8,653.7 L153.9,662.9M146.8,653.7 L141.5,644.9M136.9,638.8 L141.5,644.9M136.9,638.8 L129.8,629.3M136.9,638.8 L132.0,642.4M148.3,645.0 L155.0,654.7M148.3,645.0 L155.4,644.5 L157.8,646.4 L159.3,650.9 L155.0,654.7M148.3,645.0 L145.6,641.8M135.5,627.2 L145.6,641.8M135.5,627.2 L140.9,625.0M150.5,638.9 L140.9,625.0M150.5,638.9 L145.6,641.8M150.5,638.9 L156.4,635.2M391.6,-83.8 L389.7,-81.4 L386.5,-81.9M391.6,-83.8 L406.9,-80.3M391.6,-83.8 L387.7,-84.9M386.5,-81.9 L389.7,-81.4 L391.6,-83.8M406.9,-80.3 L407.1,-84.8M406.9,-80.3 L391.6,-83.8M384.8,-91.9 L387.4,-88.3 L387.7,-84.9M717.3,643.7 L687.2,608.9M717.3,643.7 L722.7,650.0M704.3,612.1 L720.2,614.8M704.3,612.1 L687.2,608.9M704.3,612.1 L730.1,641.9M720.2,614.8 L704.3,612.1M720.2,614.8 L721.8,607.3M730.1,641.9 L738.0,634.5M730.1,641.9 L722.7,650.0M730.1,641.9 L704.3,612.1M721.4,615.2 L737.2,618.1M721.4,615.2 L728.8,623.8M721.8,607.3 L719.5,603.4 L713.9,601.2 L711.9,594.3M721.8,607.3 L720.2,614.8M721.8,607.3 L725.4,603.5M752.1,617.5 L757.3,616.9M752.1,617.5 L749.8,614.7M752.1,617.5 L737.2,618.1M752.1,617.5 L753.7,619.9M757.3,616.9 L752.1,617.5M757.3,616.9 L762.4,612.8M757.3,616.9 L753.7,619.9M749.8,614.7 L743.7,607.7M749.8,614.7 L752.1,617.5M749.8,614.7 L758.0,607.5M737.2,618.1 L752.1,617.5M737.2,618.1 L721.4,615.2M753.7,619.9 L757.3,616.9M753.7,619.9 L752.1,617.5M753.7,619.9 L738.0,634.5M762.4,612.8 L774.5,602.8M762.4,612.8 L757.3,616.9M762.4,612.8 L758.0,607.5M378.2,210.9 L383.5,214.4M376.3,210.4 L375.0,215.7M376.3,210.4 L371.6,209.3M383.5,214.4 L378.2,210.9M378.7,210.2 L386.7,201.
380771M386.7,201.1 L381.7,196.6M386.7,201.1 L393.5,193.6M386.7,201.1 L378.7,210.2M381.7,196.6 L386.7,201.1M381.7,196.6 L376.6,192.0M381.7,196.6 L392.0,184.9M381.7,196.6 L373.8,205.3M393.5,193.6 L386.7,201.1M397.1,189.5 L392.0,184.9M397.1,189.5 L403.7,182.3M397.1,189.5 L393.8,193.2M392.0,184.9 L397.1,189.5M392.0,184.9 L387.0,180.4M392.0,184.9 L398.4,177.8M392.0,184.9 L381.7,196.6M393.8,193.2 L397.1,189.5M398.4,177.8 L391.2,171.6M398.4,177.8 L392.0,184.9M398.4,177.8 L403.7,182.3M417.6,167.3 L414.3,170.9M417.6,167.3 L413.5,164.0M414.3,170.9 L417.6,167.3M413.5,164.0 L417.6,167.3M413.5,164.0 L405.6,160.7 L401.3,155.7M419.8,167.1 L423.4,170.0M417.7,165.4 L367.2,118.9 L317.0,92.7 L311.3,91.1M494.2,163.8 L496.2,165.4M494.2,163.8 L498.3,163.0 L510.3,173.6 L516.5,176.6M508.8,184.0 L511.5,184.9 L518.6,182.7 L526.4,187.4 L530.7,185.6 L531.7,183.8M508.8,184.0 L515.5,180.6 L516.5,176.6M126.0,633.9 L132.0,642.4M126.0,633.9 L124.1,631.4M127.8,629.9 L120.4,623.1M127.8,629.9 L124.1,631.4M132.0,642.4 L142.2,657.0M132.0,642.4 L126.0,633.9M132.0,642.4 L136.9,638.8M132.0,642.4 L127.2,645.7M142.2,657.0 L132.0,642.4M142.2,657.0 L146.8,653.7M142.2,657.0 L137.6,660.0M142.2,657.0 L151.0,669.7M127.2,645.7 L137.6,660.0M127.2,645.7 L121.2,636.9M127.2,645.7 L132.0,642.4M127.2,645.7 L122.4,649.2M137.6,660.0 L142.2,657.0M137.6,660.0 L138.8,662.4M137.6,660.0 L127.2,645.7M151.0,669.7 L142.2,657.0M151.0,669.7 L144.1,669.2 L138.8,662.4M151.0,669.7 L154.1,667.9 L153.9,662.9M478.8,126.0 L474.5,122.3M478.8,126.0 L482.8,125.8M474.5,122.3 L468.8,128.2M474.5,122.3 L465.7,115.2M474.5,122.3 L478.8,126.0M482.8,125.8 L478.8,126.0M482.8,125.8 L486.8,123.4 L491.2,123.0M246.1,356.6 L248.9,356.1M246.1,356.6 L243.1,353.7 L241.2,353.7M247.4,358.0 L249.5,360.2M248.9,356.1 L252.4,357.2M248.9,356.1 L246.1,356.6M241.2,353.7 L239.7,353.1 L239.7,354.8M241.2,353.7 L243.1,353.7 L246.1,356.6M711.9,594.3 L705.9,583.0 L705.5,579.6M711.9,594.3 L713.9,601.2 L719.5,603.4 L721.8,607.3M725.4,603.5 L728.5,606.9M725.4,603.5 L721.8,607.3M725.4,603.5 L736.9,600.0M694.4,554.8 L705.7,573.5 L705.5,579.6M705.5,579.6 L705.7,573.5 L694.4,554.8M705.5,579.6 L705.9,583.0 L711.9,594.3M705.5,579.6 L701.5,580.6 L698.2,579.4M305.7,107.2 L303.2,105.3M305.7,107.2 L309.4,110.1M305.7,107.2 L308.4,104.3M309.4,110.1 L313.0,106.3M309.4,110.1 L305.7,107.2M309.4,110.1 L311.9,115.4M308.4,104.3 L305.7,107.2M308.4,104.3 L310.2,100.1 L309.2,97.9M29.7,-100.3 L38.0,-97.1M29.7,-100.3 L24.0,-95.4 L22.7,-90.6M29.7,-100.3 L37.0,-112.0M38.0,-97.1 L42.7,-98.5M38.0,-97.1 L29.7,-100.3M22.7,-90.6 L29.8,-90.8M22.7,-90.6 L21.7,-87.4 L17.6,-82.9M22.7,-90.6 L24.0,-95.4 L29.7,-100.3M37.0,-112.0 L29.7,-100.3M465.9,245.7 L462.9,245.4M465.9,245.7 L470.9,246.0M466.0,245.3 L466.2,242.1M462.9,245.4 L465.9,245.7M462.9,245.4 L455.4,244.6M466.2,242.1 L466.0,245.3M398.0,279.1 L398.0,285.3M398.0,285.3 L398.0,279.1M398.0,285.3 L402.2,286.2M398.0,285.3 L379.9,281.3M402.2,286.2 L398.0,285.3M402.2,286.2 L400.3,287.5M402.2,286.2 L405.1,284.7M258.5,378.9 L253.6,373.8M258.5,378.9 L262.1,380.3M258.2,379.3 L253.2,384.3 L246.0,386.7 L234.8,386.8M262.1,380.3 L261.9,384.1M262.1,380.3 L258.5,378.9M206.6,446.0 L209.6,439.2M214.3,426.3 L209.6,439.2M214.3,426.3 L217.4,417.5M-20.3,625.7 L-24.1,622.4M-20.3,625.7 L-28.6,634.1M-24.1,622.4 L-43.0,607.7M-24.1,622.4 L-20.3,625.7M-24.1,622.4 L-19.1,615.4M-43.0,607.7 L-24.1,622.4M-43.0,607.7 L-37.6,600.9M-43.0,607.7 L-49.1,616.3M-19.1,615.4 L-37.6,600.9M-19.1,615.4 L-24.1,622.4M-19.1,615.4 L-14.7,609.7M-37.6,600.9 L-43.0,607.7M-37.6,600.9 L-33.3,595.3M-37.6,600.9 L-19.1,615.4M-37.6,600.9 L-49.7,593.4 L-44.1,587.8M-49.1,616.3 L-59.0,610.9M-49.1,616.3 L-43.0,607.7M-49.1,616.3 L-36.8,624.6M371.1,525.3 L372.6,534.1 L371.6,540.9M368.1,541.2 L371.6,540.9M368.1,541.2 L367.3,533.5M284.4,-17.2 L280.6,-10.5M280.6,-10.5 L275.2,-4.3 L272.8,1.3M280.6,-10.5 L284.4,-17.2M280.6,-10.5 L274.5,-14.2 L268.8,-21.3M272.8,1.3 L275.2,-4.3 L280.6,-10.5M272.8,1.3 L283.4,2.1 L289.6,4.3M268.8,-21.3 L274.5,-14.2 L280.6,-10.5M272.2,1.9 L267.9,4.7M289.6,4.3 L295.2,2.2 L305.2,3.4 L328.2,1.3 L333.4,-0.9 L339.5,-7.0M289.6,4.3 L283.4,2.1 L272.8,1.3M238.8,42.7 L235.6,45.2M238.8,42.7 L261.0,14.2M238.8,42.7 L245.3,49.7 L250.3,51.2M235.6,45.2 L226.1,51.9M235.6,45.2 L238.8,42.7M235.6,45.2 L235.9,39.4 L234.4,34.5M261.0,14.2 L238.8,42.7M261.0,14.2 L263.6,10.4M261.0,14.2 L263.1,16.1 L263.7,18.6 L258.5,30.7 L259.0,36.0M250.3,51.2 L253.9,55.0M250.3,51.2 L245.3,49.7 L238.8,42.7M216.7,61.8 L208.6,72.5M216.7,61.8 L226.1,51.9M207.3,79.9 L213.3,93.5M207.3,79.9 L208.6,72.5M207.3,79.9 L202.0,75.8 L198.5,75.1 L196.4,70.6M213.3,93.5 L207.3,79.9M213.3,93.5 L221.8,90.0 L225.3,86.3M208.6,72.5 L207.3,79.9M208.6,72.5 L216.7,61.8M196.4,70.6 L198.5,75.1 L202.0,75.8 L207.3,79.9M196.4,70.6 L193.0,67.0M213.6,94.3 L217.4,103.7M225.3,86.3 L219.9,81.8M225.3,86.3 L229.5,79.9M225.3,86.3 L221.8,90.0 L213.3,93.5M399.6,296.4 L398.5,294.6 L403.2,291.5M403.2,291.5 L400.3,287.5M403.2,291.5 L398.5,294.6 L399.6,296.4M403.2,291.5 L407.7,288.5 L405.3,285.1M-115.5,674.9 L-117.5,678.2M-115.5,674.9 L-111.1,666.2M-96.5,673.4 L-94.0,664.9M-96.5,673.4 L-90.3,675.0 L-83.7,674.9 L-78.5,672.0 L-76.0,668.3M-96.5,673.4 L-104.6,667.5 L-111.1,666.2M372.7,479.0 L374.5,484.4 L377.7,487.5M372.7,479.0 L373.7,469.1M371.1,479.4 L368.2,481.3 L366.6,479.1 L369.8,477.0 L371.1,479.4M371.1,479.4 L369.8,477.0 L366.6,479.1 L368.2,481.3 L371.1,479.4M373.7,469.1 L372.7,479.0M373.7,469.1 L373.3,461.8 L369.9,457.9 L367.3,456.9M373.7,469.1 L370.3,469.6M240.3,234.0 L235.9,232.7M240.3,234.0 L244.0,235.0M232.9,242.8 L231.4,249.1M232.9,242.8 L240.8,244.8M496.0,284.1 L497.5,281.9M496.0,284.1 L488.7,278.7M496.0,284.1 L493.7,287.9 L489.6,285.8M504.5,270.9 L502.3,273.6M504.5,270.9 L505.7,268.4M500.5,272.2 L495.9,268.2M499.6,278.2 L492.3,273.1M499.6,278.2 L502.3,273.6M499.6,278.2 L497.5,281.9M505.7,268.4 L505.1,261.1M505.7,268.4 L504.5,270.9M505.1,261.1 L505.7,268.4M505.0,260.1 L508.2,259.0M508.2,259.0 L508.8,256.3M508.2,259.0 L505.0,260.1M503.3,259.6 L501.9,257.5M485.3,164.2 L489.1,162.3M485.3,164.2 L486.9,166.4M485.3,164.2 L470.6,171.4M489.1,162.3 L485.3,164.2M489.1,162.3 L497.7,157.7M486.9,166.4 L485.3,164.2M484.3,162.5 L480.9,161.5 L473.5,168.1 L471.4,166.3M470.6,171.4 L475.8,182.1M470.6,171.4 L485.3,164.2M470.6,171.4 L463.3,174.0 L458.5,170.6M486.3,167.2 L476.0,179.3M494.9,173.7 L498.3,176.6M494.9,173.7 L491.8,170.7M498.3,176.6 L502.6,180.3M498.3,176.6 L494.9,173.7M502.6,180.3 L505.7,183.0M502.6,180.3 L498.3,176.6M505.7,183.0 L507.9,184.9M505.7,183.0 L502.6,180.3M505.7,183.0 L506.0,179.5M507.9,184.9 L505.7,183.0M507.9,184.9 L520.4,195.7M506.0,179.5 L505.7,183.0M506.0,179.5 L504.7,174.8M506.0,179.5 L508.5,178.1M520.4,195.7 L523.2,198.1M520.4,195.7 L507.9,184.9M523.2,198.1 L52
380776.9,201.2M523.2,198.1 L520.4,195.7M523.2,198.1 L519.3,196.6M519.3,196.6 L523.2,198.1M97.0,566.1 L83.9,573.3 L80.0,577.4M97.0,566.1 L100.7,558.0M504.7,174.8 L499.8,174.8M504.7,174.8 L506.0,179.5M504.7,174.8 L508.5,178.1M504.7,174.8 L502.5,171.7 L502.3,168.6 L497.8,165.3 L496.2,165.4M499.8,174.8 L504.7,174.8M508.5,178.1 L506.0,179.5M508.5,178.1 L504.7,174.8M508.6,338.0 L506.4,339.1M510.2,337.3 L513.2,336.0M514.0,349.8 L509.8,351.5M519.6,362.0 L518.2,359.0M519.6,362.0 L518.9,364.5M518.2,359.0 L519.6,362.0M518.2,359.0 L516.3,354.5M518.9,364.5 L519.6,362.0M529.7,365.2 L524.4,363.7M620.5,450.9 L623.5,451.8M620.5,450.9 L616.8,449.2M620.7,449.9 L617.0,447.8 L616.6,443.8M620.7,449.9 L621.3,447.7 L618.6,444.0M623.5,451.8 L620.5,450.9M623.5,451.8 L625.0,445.9M623.5,451.8 L628.3,453.0M616.8,449.2 L620.5,450.9M541.7,252.1 L547.3,251.3M541.7,252.1 L534.0,253.2M541.7,252.1 L529.4,241.5M541.7,252.1 L548.9,258.2M547.3,251.3 L541.7,252.1M547.3,251.3 L556.3,250.5 L549.2,244.3M534.0,253.2 L541.7,252.1M534.0,253.2 L531.5,253.6M534.0,253.2 L543.8,258.3M548.9,258.2 L541.7,252.1M531.5,253.6 L540.4,260.6M531.5,253.6 L534.0,253.2M531.5,253.6 L526.1,254.3M543.8,258.3 L534.0,253.2M540.4,260.6 L531.5,253.6M526.1,254.3 L531.5,253.6M525.5,254.4 L523.0,258.6M525.5,254.0 L523.0,249.3M523.0,258.6 L525.5,254.4M-168.7,228.8 L-163.9,232.9M-168.7,228.8 L-172.8,232.9M-168.7,228.8 L-166.3,225.7M-168.7,228.8 L-172.1,225.6 L-174.6,220.8M-178.5,226.4 L-172.8,232.9M-166.8,234.7 L-168.6,236.7 L-172.8,232.9M345.4,163.2 L335.9,170.2M345.4,163.2 L353.5,158.1M333.7,180.4 L336.5,182.1M333.7,180.4 L326.9,192.5M333.7,180.4 L335.9,170.2M127.9,-9.0 L129.5,-5.4 L133.1,-4.7M127.9,-9.0 L142.1,-22.8M127.9,-9.0 L121.0,-4.8M133.1,-4.7 L129.5,-5.4 L127.9,-9.0M142.1,-22.8 L147.4,-28.5M142.1,-22.8 L127.9,-9.0M121.0,-4.8 L112.7,-10.1 L111.2,-14.6M121.0,-4.8 L127.9,-9.0M121.0,-4.8 L117.9,5.6M95.1,708.6 L78.0,704.4M95.1,708.6 L96.5,702.9M95.1,708.6 L111.4,712.1 L117.7,717.2 L119.3,715.7 L118.4,708.5M436.9,426.6 L444.0,421.8M436.9,426.6 L435.1,424.0M436.9,426.6 L433.7,428.6 L429.1,428.7M444.0,421.8 L450.5,417.2M444.0,421.8 L436.9,426.6M444.0,421.8 L442.0,419.0M435.1,424.0 L436.9,426.6M450.5,417.2 L444.0,421.8M450.5,417.2 L454.9,413.7 L456.2,410.0M450.5,417.2 L448.5,415.3M450.5,417.2 L454.4,421.3 L460.2,417.6M442.0,419.0 L444.0,421.8M456.2,410.0 L456.6,404.9M456.2,410.0 L459.3,410.7M456.2,410.0 L454.9,413.7 L450.5,417.2M448.5,415.3 L444.9,413.1M448.5,415.3 L450.5,417.2M460.2,417.6 L463.3,422.0M460.2,417.6 L454.4,421.3 L450.5,417.2M460.2,417.6 L462.9,415.0M456.6,404.9 L456.2,410.0M456.6,404.9 L452.0,404.7M459.3,410.7 L456.2,410.0M452.0,404.7 L456.6,404.9M452.0,404.7 L444.3,404.4M452.0,404.7 L452.1,400.5M34.9,402.1 L34.7,396.5M34.7,396.5 L35.7,393.2M34.7,396.5 L32.7,396.9 L31.9,395.0 L34.3,392.6 L35.7,393.2M34.7,396.5 L34.9,402.1M33.8,402.5 L27.1,399.0 L20.0,392.3M35.4,402.7 L38.1,404.0M35.7,393.2 L38.5,390.2M35.7,393.2 L34.7,396.5M35.7,393.2 L34.3,392.6 L31.9,395.0 L32.7,396.9 L34.7,396.5M558.2,-37.6 L562.8,-44.7M558.2,-37.6 L553.3,-40.6M558.2,-37.6 L564.0,-34.2 L567.7,-28.1M562.8,-44.7 L558.2,-37.6M562.8,-44.7 L565.2,-47.8M553.3,-40.6 L558.2,-37.6M553.3,-40.6 L550.2,-42.5M553.3,-40.6 L549.9,-36.4 L546.4,-35.3M567.7,-28.1 L564.0,-34.2 L558.2,-37.6M567.7,-28.1 L576.7,-28.9 L579.6,-27.9M482.3,650.3 L484.9,648.9M482.3,650.3 L480.2,647.9M482.3,650.3 L483.0,660.0M484.9,648.9 L482.3,650.3M480.2,647.9 L482.3,650.3M466.2,649.6 L464.9,650.3 L463.5,659.2M471.4,696.1 L473.9,703.8M471.4,696.1 L466.4,683.0M471.4,696.1 L460.3,699.8M471.4,696.1 L490.0,690.0M460.9,686.6 L466.4,683.0M471.1,682.4 L470.8,674.1M471.1,682.4 L476.0,682.8M471.1,682.4 L466.4,683.0M473.9,703.8 L471.4,696.1M473.9,703.8 L455.4,710.1M473.9,703.8 L489.6,699.0M460.3,699.8 L457.3,700.7M460.3,699.8 L471.4,696.1M490.0,690.0 L489.7,697.0M490.0,690.0 L490.3,686.9M490.0,690.0 L471.4,696.1M455.4,710.1 L473.9,703.8M455.4,710.1 L455.7,702.1M489.6,699.0 L473.9,703.8M489.6,699.0 L489.7,706.6M683.8,181.6 L688.4,186.1M683.8,181.6 L680.2,185.4 L683.2,188.5M683.8,181.6 L680.9,179.3M683.2,188.5 L686.8,194.0M683.2,188.5 L680.2,185.4 L683.8,181.6M683.2,188.5 L683.1,192.1 L684.8,195.9M680.9,179.3 L676.9,182.7M680.9,179.3 L685.1,173.9M680.9,179.3 L683.8,181.6M680.9,179.3 L670.2,172.8M686.8,194.0 L691.5,189.1M686.8,194.0 L683.2,188.5M686.8,194.0 L684.8,195.9M691.5,189.1 L686.8,194.0M691.5,189.1 L694.0,191.5M691.5,189.1 L688.4,186.1M684.8,195.9 L686.8,194.0M684.8,195.9 L683.1,192.1 L683.2,188.5M317.5,293.0 L321.7,293.3M317.5,293.0 L313.4,292.0M330.7,296.8 L326.9,294.0 L321.7,293.3M505.3,290.3 L512.1,282.5M521.5,271.7 L514.3,280.1M523.4,266.1 L524.2,263.5M523.4,266.1 L522.1,270.7M524.2,263.5 L523.4,266.1M522.1,270.7 L523.4,266.1M-81.6,-90.4 L-70.6,-82.8 L-61.6,-85.8M-81.6,-90.4 L-80.8,-95.0 L-83.3,-104.7 L-80.8,-112.2M-81.6,-90.4 L-84.0,-87.1M-81.6,-90.4 L-84.0,-87.1M-61.6,-85.8 L-52.6,-85.4 L-47.0,-88.6 L-45.0,-93.5 L-46.9,-104.0M-61.6,-85.8 L-70.6,-82.8 L-81.6,-90.4M-84.0,-87.1 L-74.4,-81.4 L-63.9,-77.1M-84.0,-87.1 L-111.0,-106.0M-84.0,-87.1 L-81.6,-90.4M-84.0,-87.1 L-81.6,-90.4M-61.7,-87.8 L-62.2,-92.4M-46.9,-104.0 L-45.0,-93.5 L-47.0,-88.6 L-52.6,-85.4 L-61.6,-85.8M-62.2,-92.4 L-61.7,-87.8M475.8,182.1 L481.2,186.7M475.8,182.1 L470.6,171.4M474.5,183.4 L472.1,186.0M481.2,186.7 L475.8,182.1M481.2,186.7 L488.7,193.1M25.9,93.5 L20.4,98.8M25.9,93.5 L31.3,92.4 L37.8,95.4M25.9,93.5 L22.4,88.1 L17.4,84.4M37.8,95.4 L31.3,92.4 L25.9,93.5M37.8,95.4 L41.4,97.3M37.8,95.4 L39.3,87.2M17.4,84.4 L19.1,77.6M17.4,84.4 L9.4,83.8M17.4,84.4 L22.4,88.1 L25.9,93.5M26.2,104.9 L20.4,98.8M26.2,104.9 L28.5,108.4 L28.2,112.7 L22.5,120.5M26.2,104.9 L30.8,101.1M44.3,79.5 L59.2,93.8M41.4,97.3 L37.8,95.4M41.4,97.3 L53.8,98.6 L59.2,93.8M39.3,87.2 L37.8,95.4M6.6,127.2 L5.9,118.3M22.5,120.5 L24.2,122.6M22.5,120.5 L28.2,112.7 L28.5,108.4 L26.2,104.9M22.5,120.5 L15.8,121.4 L10.7,118.6 L5.9,118.3M-21.0,338.9 L-20.3,342.2M-46.4,335.6 L-32.7,342.5 L-20.3,342.2M-14.5,342.3 L-20.3,342.2M-14.5,342.3 L-12.6,343.8M-14.5,342.3 L-11.9,343.2M16.1,277.2 L20.0,282.0M16.1,277.2 L12.8,274.6 L8.9,275.3M20.0,282.0 L16.1,277.2M8.9,275.3 L12.8,274.6 L16.1,277.2M8.9,275.3 L-1.3,283.2M512.8,370.9 L511.5,374.9M119.6,333.0 L112.4,334.8 L108.8,340.9M119.6,333.0 L118.2,328.7M119.6,333.0 L122.2,344.0M108.8,340.9 L112.4,334.8 L119.6,333.0M118.2,328.7 L121.8,327.0M118.2,328.7 L113.2,320.6 L107.9,319.3M118.2,328.7 L119.6,333.0M122.2,344.0 L111.6,349.9 L108.1,353.4M122.2,344.0 L128.1,341.0 L131.5,336.4M122.2,344.0 L119.6,333.0M122.2,344.0 L128.6,359.2 L127.1,365.1 L124.0,369.8M489.8,326.1 L490.4,324.5 L496.5,321.4 L497.4,319.8M497.4,319.8 L500.3,316.4 L503.9,317.3 L499.1,320.1 L497.4,319.8M497.4,319.8 L499.1,320.1 L503.9,317.3 L500.3,316.4 L497.4,319.8M497.4,319.8 L49
380776.5,321.4 L490.4,324.5 L489.8,326.1M504.7,322.8 L491.3,328.5M494.8,335.3 L489.4,337.5M494.8,335.3 L493.8,332.7M489.4,337.5 L494.8,335.3M495.1,335.9 L499.2,334.7M495.1,335.9 L498.1,342.6M498.1,342.6 L492.7,344.9M498.1,342.6 L504.2,339.9M498.1,342.6 L495.1,335.9M498.1,342.9 L500.7,348.7M492.7,344.9 L490.2,345.9M492.7,344.9 L498.1,342.6M504.2,339.9 L498.1,342.6M500.7,348.7 L506.9,346.3M500.7,348.7 L497.9,350.0M500.7,348.7 L498.1,342.9M506.9,346.3 L500.7,348.7M497.9,350.0 L500.7,348.7M497.9,350.0 L493.1,351.6 L491.3,348.9M495.7,404.0 L490.7,403.6 L491.1,407.9M-130.5,632.9 L-134.3,625.6M-125.2,625.4 L-129.1,634.1M73.3,616.1 L79.3,616.7M73.3,616.1 L67.0,615.6M73.4,616.3 L76.1,627.7M79.3,616.7 L85.3,617.1M79.3,616.7 L73.3,616.1M67.0,615.6 L73.3,616.1M67.0,615.6 L60.9,615.1M76.1,627.7 L80.4,644.6M76.1,627.7 L73.4,616.3M76.1,627.7 L70.5,629.2M76.1,627.7 L81.8,626.2M80.4,644.6 L84.1,658.9M80.4,644.6 L76.1,627.7M80.4,644.6 L85.9,643.1M80.4,644.6 L74.6,646.1M70.5,629.2 L64.9,630.6M70.5,629.2 L76.1,627.7M70.5,629.2 L74.6,646.1M70.5,629.2 L67.1,615.9M81.8,626.2 L85.9,643.1M81.8,626.2 L79.3,616.9M81.8,626.2 L76.1,627.7M81.8,626.2 L87.3,624.8M84.1,658.9 L87.1,669.6M84.1,658.9 L80.4,644.6M84.1,658.9 L89.8,657.5M84.1,658.9 L78.8,661.3M85.9,643.1 L91.6,641.6M85.9,643.1 L80.4,644.6M85.9,643.1 L89.8,657.5M85.9,643.1 L81.8,626.2M74.6,646.1 L80.4,644.6M74.6,646.1 L69.4,647.4M74.6,646.1 L78.8,661.3M74.6,646.1 L70.5,629.2M87.1,669.6 L84.1,658.9M87.1,669.6 L92.1,662.9 L95.3,662.9M87.1,669.6 L88.2,673.0M89.8,657.5 L85.9,643.1M89.8,657.5 L84.1,658.9M89.8,657.5 L95.2,655.8M175.8,598.6 L188.5,610.2M175.8,598.6 L184.0,590.6M175.8,598.6 L166.3,606.9M188.5,610.2 L195.7,616.4M188.5,610.2 L175.8,598.6M184.0,590.6 L189.4,594.1 L195.8,594.1M184.0,590.6 L175.8,598.6M166.3,606.9 L163.6,609.3M166.3,606.9 L164.1,603.6 L166.8,601.0 L166.7,599.0 L159.5,594.6 L148.3,591.4 L141.9,586.8M166.3,606.9 L175.8,598.6M197.9,618.4 L195.7,616.4M381.8,323.6 L384.1,325.8M381.8,323.6 L379.2,331.1M381.8,323.6 L389.9,300.4M384.1,325.8 L381.8,323.6M384.1,325.8 L391.1,332.0M379.2,331.1 L381.8,323.6M379.2,331.1 L383.9,333.9M379.2,331.1 L371.5,343.0M389.9,300.4 L381.8,323.6M389.9,300.4 L391.7,296.1M396.9,336.3 L394.2,334.7M396.9,336.3 L403.9,337.6 L409.3,333.2 L415.6,334.4M396.9,336.3 L396.7,343.2M394.2,334.7 L396.9,336.3M415.6,334.4 L409.3,333.2 L403.9,337.6 L396.9,336.3M396.7,343.2 L393.3,344.2M396.7,343.2 L397.5,348.8 L405.9,355.3M396.7,343.2 L396.9,336.3M393.3,344.2 L396.7,343.2M405.9,355.3 L408.1,356.5M405.9,355.3 L397.5,348.8 L396.7,343.2M408.1,356.5 L413.7,341.2M408.1,356.5 L405.9,355.3M408.1,356.5 L405.8,360.7M408.1,356.5 L414.4,358.4M413.7,341.2 L408.1,356.5M413.7,341.2 L416.1,334.5M405.8,360.7 L403.1,365.1M405.8,360.7 L408.1,356.5M414.4,358.4 L413.8,364.5M414.4,358.4 L420.7,355.8M414.4,358.4 L408.1,356.5M565.3,522.7 L560.1,529.0M565.3,522.7 L573.1,529.5M565.3,522.7 L574.0,511.3 L585.4,492.1 L590.4,489.2 L602.0,487.0M590.7,545.5 L585.4,551.7M590.7,545.5 L573.1,529.5M590.7,545.5 L597.1,550.8M469.1,629.8 L467.5,633.4M469.1,629.8 L471.8,631.1M467.5,633.4 L469.1,629.8M471.8,631.1 L469.1,629.8M456.9,630.1 L453.7,630.4M456.9,629.2 L456.7,626.8M453.7,630.4 L456.9,630.1M453.7,630.4 L448.1,630.8 L442.6,637.1M446.7,170.6 L443.0,167.4M446.7,170.6 L443.2,174.6M446.7,170.6 L449.1,174.0M446.7,170.6 L448.5,168.7M443.0,167.4 L446.7,170.6M443.2,174.6 L446.7,170.6M443.2,174.6 L438.0,180.3M449.1,174.0 L446.7,170.6M449.1,174.0 L450.3,183.1M448.5,168.7 L446.7,170.6M436.9,161.5 L434.3,159.0M436.9,161.5 L439.2,163.7M436.9,161.5 L443.3,154.8M436.9,161.5 L432.2,166.4M434.3,159.0 L428.7,153.8M434.3,159.0 L436.9,161.5M439.2,163.7 L436.9,161.5M443.3,154.8 L445.8,157.3M443.3,154.8 L440.7,152.3M443.3,154.8 L436.9,161.5M443.3,154.8 L445.4,152.6M432.2,166.4 L428.7,169.9M432.2,166.4 L436.9,161.5M428.7,153.8 L426.1,151.2M428.7,153.8 L434.3,159.0M428.7,153.8 L430.6,151.8M428.7,153.8 L426.3,156.3M426.1,151.2 L428.7,153.8M430.6,151.8 L435.2,147.1M430.6,151.8 L428.7,153.8M426.3,156.3 L428.7,153.8M426.3,156.3 L422.9,159.9M422.7,147.8 L413.5,138.9M422.7,147.8 L424.6,149.7M422.7,147.8 L418.0,152.7M422.7,147.8 L425.3,145.0M413.5,138.9 L422.7,147.8M413.5,138.9 L396.9,125.4M413.5,138.9 L408.1,144.8M424.6,149.7 L422.7,147.8M418.0,152.7 L415.7,155.0M418.0,152.7 L422.7,147.8M425.3,145.0 L422.7,147.8M425.3,145.0 L429.0,141.1M396.9,125.4 L390.9,122.6M396.9,125.4 L401.4,122.2 L405.0,114.5M396.9,125.4 L413.5,138.9M408.1,144.8 L413.5,138.9M390.9,122.6 L385.1,119.7M390.9,122.6 L396.9,125.4M390.9,122.6 L390.5,126.9 L388.1,132.9M385.1,119.7 L390.9,122.6M385.1,119.7 L385.5,128.8 L388.1,132.9M383.6,118.6 L377.3,112.1M388.1,132.9 L390.5,126.9 L390.9,122.6M388.1,132.9 L390.8,137.0 L390.3,138.6 L388.1,139.6 L384.8,138.3 L379.9,132.3 L371.9,132.8 L367.4,129.0M388.1,132.9 L385.5,128.8 L385.1,119.7M362.1,95.9 L377.3,112.1M360.6,97.3 L359.4,100.3 L363.0,104.1M356.2,89.7 L354.0,87.5M356.2,89.7 L368.1,78.6 L370.3,78.5M354.0,87.5 L356.2,89.7M357.1,90.6 L359.7,93.5M332.2,76.4 L328.0,80.3M332.2,76.4 L338.0,70.8M335.8,68.7 L334.1,67.0M335.8,68.7 L338.0,70.8M342.2,66.8 L344.6,62.2M342.2,66.8 L338.0,70.8M323.2,55.0 L328.8,61.1M323.2,55.0 L318.9,60.4M328.8,61.1 L323.2,55.0M328.8,61.1 L334.1,67.0M318.9,60.4 L323.2,55.0M323.3,52.3 L318.8,47.7 L318.7,39.8M318.7,39.8 L317.9,36.5M318.7,39.8 L318.8,47.7 L323.3,52.3M324.9,53.1 L327.4,50.7M478.4,501.1 L480.0,497.5M478.4,501.1 L476.5,502.0 L470.6,498.3M478.4,501.1 L482.6,502.5 L483.3,504.5 L488.3,505.5M480.0,497.5 L478.4,501.1M470.6,498.3 L476.5,502.0 L478.4,501.1M488.3,505.5 L489.3,506.0 L489.7,505.2 L488.8,504.6 L488.3,505.5M488.3,505.5 L488.8,504.6 L489.7,505.2 L489.3,506.0 L488.3,505.5M488.3,505.5 L483.3,504.5 L482.6,502.5 L478.4,501.1M527.1,393.5 L531.1,395.4M527.1,393.5 L523.4,391.6M527.1,393.5 L525.3,400.3M111.7,425.9 L119.5,433.1M111.7,425.9 L116.5,421.4M111.7,425.9 L103.2,436.0 L99.5,442.8M119.5,433.1 L127.9,440.8M119.5,433.1 L111.7,425.9M99.5,442.8 L101.9,445.2 L100.7,452.2M99.5,442.8 L90.2,462.6 L53.9,526.6M99.5,442.8 L103.2,436.0 L111.7,425.9M137.7,431.6 L140.2,430.7M137.7,431.6 L127.9,440.8M156.6,460.4 L167.2,449.7 L170.2,451.2M156.6,460.4 L149.3,460.3 L143.4,455.8M156.6,460.4 L160.2,468.4M170.2,451.2 L167.2,449.7 L156.6,460.4M160.2,468.4 L155.2,472.8M160.2,468.4 L165.1,472.7 L165.0,476.0 L168.3,481.4 L170.9,482.1M160.2,468.4 L156.6,460.4M650.5,656.9 L644.0,649.6 L642.0,645.4 L643.7,641.2 L648.0,640.1M650.5,656.9 L652.2,653.1 L656.8,648.7M650.5,656.9 L648.9,659.8 L642.4,665.5M648.0,640.1 L654.3,646.5M648.0,640.1 L653.9,641.1 L654.3,646.5M648.0,640.1 L643.7,641.2 L642.0,645.4 L644.0,649.6 L650.5,656.9M656.8,648.7 L659.3,650.1M656.8,648.7 L654.3,646.5M656.8,648.7 L652.2,653.1 L650.5,656.9M654.3,646.5 L656.8,648.7M654.3,646.5 L648.0,640.1M654.3,646.5 L653.9,641.1 L648.0,640.1M659.3,650.1 L656.8,648.7M659.3,650.1 L664.0,654.6M659.3,650.1 L665.3,649.8M665.3,649.8 L659.3,650.1M665.3,649.8 L664.0,654.6M412.0,92.2 L405.2,85.1M405.2,85.1 L412.0,92.2M405.2,85.1 L409.3,85.8 L415.5,90.9M415.5,90.9 L409.3,85.8 L405.2,85.1M396.2,76.1 L399.2,79.1M396.2,76.1 L389.9,82.0M396.2,76.1 L404.4,68.2M399.2,79.1 L396.2,76.1M389.9,82.0 L396.2,76.1M389.9,82.0 L401.2,94.0M389.9,82.0 L384.3,87.7M404.4,68.2 L396.2,76.1M404.4,68.2 L407.8,64.9M542.1,262.5 L539.8,266.0M341.0,294.5 L342.8,290.2M340.6,294.3 L329.3,289.7M342.8,290.2 L350.4,293.2M342.8,290.2 L341.0,294.5M342.8,290.2 L350.9,270.1M329.3,289.7 L340.6,294.3M525.3,400.3 L529.4,401.4M525.3,400.3 L527.1,393.5M525.3,400.3 L521.1,399.1M518.7,407.4 L517.8,410.5M518.7,407.4 L522.9,408.6M518.7,407.4 L521.1,399.1M303.3,379.4 L304.3,382.3 L306.9,384.2M303.3,379.4 L300.0,379.5M303.3,379.4 L307.2,377.2M306.9,384.2 L304.1,388.0 L302.4,387.4M306.9,384.2 L304.3,382.3 L303.3,379.4M300.0,379.5 L303.3,379.4M307.2,377.2 L303.3,379.4M405.1,284.7 L402.2,286.2M405.1,284.7 L409.4,282.5M405.3,285.1 L407.7,288.5 L403.2,291.5M409.4,282.5 L405.1,284.7M83.9,581.6 L87.2,585.2M83.9,581.6 L80.0,577.4M83.9,581.6 L90.2,576.5M83.9,581.6 L77.8,585.9 L69.5,589.1M80.0,577.4 L83.9,581.6M80.0,577.4 L77.6,580.0 L72.3,582.5M80.0,577.4 L83.9,573.3 L97.0,566.1M90.2,576.5 L95.8,573.9M90.2,576.5 L83.9,581.6M69.5,589.1 L70.2,594.4M69.5,589.1 L68.9,584.4M69.5,589.1 L77.8,585.9 L83.9,581.6M695.7,730.1 L696.7,733.5M695.7,730.1 L682.8,734.6M695.7,730.1 L697.0,728.9 L696.5,723.9M696.7,733.5 L699.3,740.9M696.7,733.5 L695.7,730.1M696.7,733.5 L700.6,732.5M696.5,723.9 L676.3,731.1M696.5,723.9 L695.3,718.4M696.5,723.9 L697.0,728.9 L695.7,730.1M700.6,732.5 L696.7,733.5M706.1,738.5 L699.3,740.9M709.5,746.4 L702.5,748.9M710.4,772.7 L707.8,765.0M710.4,772.7 L716.7,770.8M714.9,758.1 L716.1,762.3 L707.8,765.0M716.7,770.8 L710.4,772.7M398.3,533.4 L402.0,532.7M398.3,533.4 L392.7,536.0M402.0,532.7 L398.3,533.4M402.0,532.7 L408.4,530.2 L411.
380770,524.5 L411.6,518.9M392.7,536.0 L390.6,538.0M392.7,536.0 L394.0,538.2M392.7,536.0 L398.3,533.4M483.1,309.0 L474.2,303.8 L477.4,298.4M477.4,298.4 L481.1,292.1M477.4,298.4 L487.1,304.1M477.4,298.4 L474.2,303.8 L483.1,309.0M-213.1,155.5 L-210.1,147.1 L-211.4,134.6M-213.1,155.5 L-189.1,166.8 L-178.6,167.9M-211.4,134.6 L-206.9,133.7M-211.4,134.6 L-210.1,147.1 L-213.1,155.5M-178.6,167.9 L-155.3,167.7M-178.6,167.9 L-189.1,166.8 L-213.1,155.5M-137.1,165.7 L-127.2,164.7M-137.1,165.7 L-155.3,167.7M-137.1,165.7 L-136.7,169.5 L-138.1,169.5M-127.2,164.7 L-124.8,164.5M-127.2,164.7 L-137.1,165.7M-127.2,164.7 L-126.9,161.4M-155.3,167.7 L-137.1,165.7M-155.3,167.7 L-178.6,167.9M-138.1,169.5 L-136.7,169.5 L-137.1,165.7M-124.8,164.5 L-121.2,164.1M-124.8,164.5 L-127.2,164.7M-126.9,161.4 L-127.2,164.7M-126.9,161.4 L-126.4,156.1M-127.4,166.8 L-128.0,170.3M-112.8,162.5 L-113.2,169.7M-113.2,169.7 L-112.8,162.5M-111.1,161.9 L-103.3,159.6M-113.7,162.7 L-119.9,163.9M41.0,184.5 L48.2,186.7M41.0,184.5 L39.4,189.1M41.0,184.5 L33.1,181.8M48.2,186.7 L51.7,187.7M48.2,186.7 L41.0,184.5M39.4,189.1 L41.0,184.5M33.1,181.8 L41.0,184.5M33.1,181.8 L27.4,178.6 L19.4,177.7M51.7,187.7 L54.7,188.5M51.7,187.7 L48.2,186.7M54.7,188.5 L53.5,192.9M54.7,188.5 L51.7,187.7M54.7,188.5 L60.9,189.7M53.5,192.9 L54.7,188.5M60.9,189.7 L54.7,188.5M115.9,185.3 L114.4,172.3M115.9,185.3 L112.9,185.8M115.9,185.3 L120.6,184.2M114.4,172.3 L115.9,185.3M112.9,185.8 L115.9,185.3M120.6,184.2 L115.9,185.3M123.6,183.6 L125.2,177.9M123.6,183.6 L126.7,182.3M122.4,183.9 L130.0,186.4M125.2,177.9 L123.6,183.6M125.2,177.9 L126.7,182.3M125.2,177.9 L124.9,175.2M126.7,182.3 L130.0,186.4M126.7,182.3 L123.6,183.6M126.7,182.3 L125.2,177.9M588.2,64.8 L593.4,64.0M588.2,64.8 L585.7,55.4 L581.2,46.5M588.2,64.8 L588.0,77.2M121.8,673.9 L110.0,671.2M121.8,673.9 L121.8,668.1M122.4,675.9 L118.5,682.9M122.4,675.9 L127.6,678.1M121.8,668.1 L119.3,664.7M121.8,668.1 L121.8,673.9M121.8,668.1 L124.2,668.1 L131.0,671.9 L136.9,671.2 L137.7,669.5 L136.7,668.1 L130.5,664.2M118.5,682.9 L110.0,671.2M118.5,682.9 L122.4,675.9M118.5,682.9 L116.3,687.0M114.7,667.9 L119.3,664.7M114.7,667.9 L110.0,671.2M114.7,667.9 L101.7,649.6M105.2,674.6 L110.0,671.2M105.2,674.6 L95.3,662.9M105.2,674.6 L112.7,685.1 L116.3,687.0M95.2,655.8 L91.6,641.6M95.2,655.8 L97.6,653.8M95.2,655.8 L89.8,657.5M116.3,687.0 L118.5,682.9M116.3,687.0 L112.7,685.1 L105.2,674.6M116.3,687.0 L120.8,691.0M-8.5,613.9 L-9.1,619.4M-9.6,613.7 L-10.2,618.6M-8.0,612.6 L-6.6,609.5M-9.1,619.4 L-9.3,621.8M-9.1,619.4 L-8.5,613.9M-14.7,609.7 L-19.1,615.4M-16.1,608.7 L-23.9,602.7M-13.5,610.7 L-10.0,613.0M-13.5,610.7 L-11.5,612.8M-26.9,600.4 L-21.7,594.2M-26.9,600.4 L-33.3,595.3M-26.9,600.4 L-23.9,602.7M-23.9,602.7 L-26.9,600.4M-23.9,602.7 L-16.1,608.7M-44.1,587.8 L-49.7,593.4 L-37.6,600.9M-52.5,585.3 L-51.6,577.1M-52.5,585.3 L-44.6,587.0M-52.5,585.3 L-58.3,583.3 L-61.9,584.7 L-70.1,591.0M-51.6,577.1 L-52.5,585.3M-70.1,591.0 L-61.9,584.7 L-58.3,583.3 L-52.5,585.3M501.5,229.9 L506.7,234.4M501.5,229.9 L498.9,227.5M501.3,230.2 L497.0,235.2M506.7,234.4 L501.5,229.9M506.7,234.4 L515.9,242.0M498.9,227.5 L501.5,229.9M496.6,235.6 L488.5,228.6 L465.5,203.2 L455.3,194.1M497.0,235.2 L501.3,230.2M496.1,236.3 L491.0,241.7M496.1,236.3 L485.9,226.9M455.3,194.1 L465.5,203.2 L488.5,228.6 L496.6,235.6M487.0,247.4 L481.5,246.8M487.5,248.6 L486.5,251.8M486.5,251.8 L487.5,248.6M484.5,257.9 L485.8,253.9M485.6,259.0 L490.6,263.5M478.8,97.7 L484.1,100.9M484.1,100.9 L478.8,97.7M484.1,100.9 L483.0,104.2M484.1,100.9 L485.3,97.3M485.3,97.3 L484.1,100.9M533.8,430.9 L533.9,427.2 L532.4,426.1 L526.7,427.1 L522.7,425.8M533.8,430.9 L528.7,434.3 L526.7,437.7M522.7,425.8 L520.8,429.3M522.7,425.8 L515.5,421.8M522.7,425.8 L526.7,427.1 L532.4,426.1 L533.9,427.2 L533.8,430.9M526.7,437.7 L511.4,433.6M526.7,437.7 L531.7,439.5 L538.9,445.2M526.7,437.7 L528.7,434.3 L533.8,430.9M-198.3,219.3 L-205.4,219.3 L-209.2,216.2M-213.6,207.6 L-209.2,216.2M12.0,639.5 L9.6,637.6 L11.9,634.3M11.9,634.3 L9.6,637.6 L12.0,639.5M654.5,519.8 L652.1,521.7M654.5,519.8 L655.6,521.5 L659.8,522.3M654.5,519.8 L662.1,513.7 L664.6,510.2M652.1,521.7 L646.5,521.1M652.1,521.7 L654.5,519.8M652.1,521.7 L652.8,525.6M659.8,522.3 L655.6,521.5 L654.5,519.8M659.8,522.3 L660.5,526.2 L664.3,527.2M659.8,522.3 L664.2,523.0 L66
380775.2,524.9 L664.3,527.2M664.6,510.2 L661.4,507.4M664.6,510.2 L662.1,513.7 L654.5,519.8M664.3,527.2 L665.2,524.9 L664.2,523.0 L659.8,522.3M664.3,527.2 L660.5,526.2 L659.8,522.3M475.0,159.9 L473.1,163.2M473.1,163.2 L475.0,159.9M473.1,163.2 L471.4,166.3M476.9,159.1 L479.8,157.6 L479.2,154.7M475.4,157.6 L477.1,155.0 L479.2,154.7M15.0,679.1 L19.3,686.3M14.7,678.6 L11.9,674.6M19.3,686.3 L15.0,679.1M19.3,686.3 L20.7,688.9M1.5,668.4 L6.2,670.1 L11.9,674.6M1.0,667.5 L2.1,662.1M-13.8,666.1 L-5.9,667.4M-14.5,665.3 L-11.3,642.3M-14.9,667.2 L-17.2,679.8M499.3,663.4 L509.9,658.0M505.7,649.6 L509.9,658.0M505.7,649.6 L523.2,640.0M513.8,666.2 L509.9,658.0M513.8,666.2 L520.6,673.4M513.8,666.2 L493.9,676.8 L490.7,677.2M525.0,645.5 L526.1,649.2M537.9,302.1 L526.9,293.0M526.9,293.0 L524.0,290.7M526.9,293.0 L537.9,302.1M519.0,296.7 L524.0,290.7M519.0,296.7 L521.0,298.3 L523.0,296.2 L525.1,298.1M-17.9,410.8 L-15.6,411.5M-17.9,410.8 L-21.0,415.3 L-20.6,418.8M-17.9,410.8 L-15.2,416.2 L-16.1,419.8M-17.9,410.8 L-22.7,407.1 L-24.7,403.4M-15.6,411.5 L-17.9,410.8M-20.6,418.8 L-21.0,415.3 L-17.9,410.8M-20.6,418.8 L-21.1,419.7 L-20.2,420.3 L-19.5,419.3 L-20.6,418.8M-20.6,418.8 L-19.5,419.3 L-20.2,420.3 L-21.1,419.7 L-20.6,418.8M-16.1,419.8 L-15.0,425.8 L-15.7,431.5M-16.1,419.8 L-15.2,416.2 L-17.9,410.8M-24.7,403.4 L-22.7,407.1 L-17.9,410.8M56.8,645.5 L58.0,650.3M55.1,639.0 L56.6,644.8M55.1,639.0 L43.7,642.0M668.0,750.3 L665.5,743.9M665.5,743.9 L668.0,750.3M665.5,743.9 L672.2,741.7M665.5,743.9 L657.5,746.7 L658.7,750.1M672.2,741.7 L665.5,743.9M672.2,741.7 L675.3,749.1M672.2,741.7 L681.0,739.5 L683.4,746.2M658.7,750.1 L657.5,746.7 L665.5,743.9M-200.9,-71.4 L-200.6,-64.9M-200.9,-71.4 L-195.5,-86.5 L-195.5,-93.5 L-197.6,-99.5M-200.9,-71.4 L-212.6,-70.4M-200.6,-64.9 L-200.9,-71.4M-200.6,-64.9 L-196.9,-46.9M-212.6,-70.4 L-200.9,-71.4M309.0,186.6 L308.8,176.5M309.0,186.6 L293.6,186.5M309.0,186.6 L316.2,188.7M308.8,176.5 L307.8,167.8M308.8,176.5 L309.0,186.6M308.8,176.5 L300.4,177.2M316.2,188.7 L309.0,186.6M316.2,188.7 L317.7,183.7 L316.0,170.0 L314.1,168.0 L307.8,167.8M316.2,188.7 L306.6,198.8M300.4,177.2 L308.8,176.5M309.2,97.9 L310.2,100.1 L308.4,104.3M309.2,97.9 L304.7,95.2 L301.7,96.1 L300.2,98.6M160.7,348.5 L161.9,346.5M160.7,348.5 L157.7,351.5 L150.2,345.9M160.7,348.5 L168.5,354.2 L173.2,354.9M161.9,346.5 L165.4,339.6M161.9,346.5 L160.7,348.5M161.9,346.5 L156.6,344.0M150.2,345.9 L157.7,351.5 L160.7,348.5M150.2,345.9 L144.1,361.5M150.2,345.9 L156.1,331.9M173.2,354.9 L168.5,354.2 L160.7,348.5M149.4,345.5 L143.0,362.5M149.4,345.5 L143.7,343.2 L141.6,341.0M149.4,345.5 L142.2,340.5M149.4,345.5 L157.5,324.3M144.1,361.5 L150.2,345.9M144.1,361.5 L139.3,375.1M144.1,361.5 L149.8,363.7M156.1,331.9 L159.0,333.4M156.1,331.9 L150.2,345.9M156.1,331.9 L158.7,324.8M412.7,391.1 L407.8,396.5M412.7,391.1 L418.7,395.5M412.7,391.1 L407.9,387.6M407.8,396.5 L412.7,391.1M407.8,396.5 L405.2,398.7M407.8,396.5 L405.9,395.3 L403.2,397.9 L403.5,399.5M418.7,395.5 L412.7,391.1M407.9,387.6 L405.0,391.2M407.9,387.6 L404.0,384.4M407.9,387.6 L412.7,391.1M405.2,398.7 L407.8,396.5M388.0,392.9 L387.5,399.7M384.4,395.7 L383.9,399.8M384.4,395.7 L380.2,395.9 L377.6,390.4 L382.5,386.7M384.4,395.7 L384.4,390.4 L382.5,386.7M378.0,402.0 L383.9,399.8M377.2,400.3 L375.7,397.5M606.1,300.9 L601.1,304.7M598.3,300.9 L601.1,304.7M598.3,300.9 L592.7,305.1M598.3,300.9 L595.9,297.7M598.3,300.9 L603.4,297.1M500.4,329.0 L496.1,330.4 L493.8,332.7M24.2,122.6 L22.5,120.5M30.8,101.1 L26.2,104.9M495.5,549.2 L497.9,549.4M494.3,566.4 L496.8,566.5M494.3,566.4 L494.3,569.0M494.3,566.4 L490.5,574.8M496.8,566.5 L494.3,566.4M494.3,569.0 L494.3,566.4M494.3,569.0 L493.2,571.6M484.1,586.0 L480.9,592.6M484.1,586.0 L490.5,574.8M481.5,592.6 L483.3,599.7M481.5,592.6 L484.6,586.3M483.3,599.7 L481.5,592.6M483.3,599.7 L484.1,603.2M483.3,599.7 L490.8,597.8M482.6,599.8 L483.4,603.4M482.6,599.8 L480.9,592.6M484.1,603.2 L486.0,609.9M484.1,603.2 L483.3,599.7M490.8,597.8 L483.3,599.7M485.4,610.1 L483.4,603.4M487.3,614.6 L486.0,609.9M487.3,614.6 L488.0,617.3M491.3,629.6 L488.5,619.0M491.3,629.6 L492.8,635.6M490.6,629.8 L472.3,622.2M490.6,629.8 L492.8,635.6M490.6,629.8 L487.9,619.1M492.0,656.0 L504.5,650.3M504.5,650.3 L492.0,656.0M490.7,677.2 L493.9,676.8 L513.8,666.2M490.7,677.2 L490.3,684.3M490.7,677.2 L490.9,674.2M490.3,684.3 L490.7,677.2M490.9,674.2 L491.0,671.5M490.9,674.2 L490.7,677.2M490.4,686.5 L499.1,684.8 L520.6,673.4M488.8,684.1 L478.4,683.1
38077M490.3,686.9 L490.0,690.0M520.6,673.4 L513.8,666.2M520.6,673.4 L525.6,678.8 L525.7,680.6M520.6,673.4 L499.1,684.8 L490.4,686.5M489.7,697.0 L490.0,690.0M489.7,706.6 L482.9,709.0M489.7,706.6 L492.2,706.3M489.7,706.6 L489.6,699.0M482.9,709.0 L489.7,706.6M492.2,706.3 L489.7,706.6M693.4,216.9 L697.6,218.5M693.4,216.9 L691.6,214.4 L690.3,202.1M693.4,216.9 L692.7,218.1 L687.7,207.0M687.7,207.0 L687.0,205.9 L685.1,206.2 L684.3,201.8 L682.1,202.3 L682.7,206.8 L673.9,212.9M687.7,207.0 L689.3,205.8 L690.3,202.1M687.7,207.0 L692.7,218.1 L693.4,216.9M697.6,218.5 L701.4,219.9M697.6,218.5 L693.4,216.9M708.9,222.7 L704.9,221.2M284.3,354.9 L281.0,352.1M284.3,354.9 L288.8,350.0M284.3,354.9 L278.2,361.7M288.8,350.0 L290.8,347.7M288.8,350.0 L284.3,354.9M288.8,350.0 L286.9,347.4M278.2,361.7 L275.1,358.7M278.2,361.7 L276.2,363.9M278.2,361.7 L284.3,354.9M267.3,351.5 L273.3,344.7M267.3,351.5 L271.6,355.5M267.3,351.5 L265.5,350.1 L264.2,351.5M471.1,143.9 L472.4,147.3M471.1,143.9 L462.3,135.0M471.1,143.9 L473.6,141.1M472.4,147.3 L471.1,143.9M472.4,147.3 L471.2,148.0 L472.7,147.9M462.3,135.0 L456.1,141.5M462.3,135.0 L468.7,128.3M462.3,135.0 L454.3,127.2M462.3,135.0 L471.1,143.9M473.6,141.1 L471.1,143.9M495.9,156.6 L495.5,154.1M495.5,154.1 L495.9,156.6M495.5,154.1 L495.0,148.7 L503.9,147.1M497.7,157.7 L500.4,156.0M497.7,157.7 L489.1,162.3M494.2,155.5 L483.0,145.0 L472.7,147.9M350.4,293.2 L342.8,290.2M350.4,293.2 L348.8,297.5M348.8,297.5 L350.4,293.2M350.9,270.1 L342.8,290.2M350.9,270.1 L352.9,264.8M350.9,270.1 L358.6,272.9M359.0,295.3 L350.9,292.1M19.1,77.6 L17.4,84.4M9.4,83.8 L17.4,84.4M9.4,83.8 L8.5,81.1M9.4,83.8 L8.6,88.7M629.9,696.4 L635.2,701.3M49.3,615.9 L50.8,622.5M49.3,615.9 L46.8,617.9M48.4,612.5 L46.0,609.1M44.4,621.2 L39.9,626.9M44.4,621.2 L46.8,617.9M44.4,621.2 L47.8,635.0M46.8,617.9 L44.4,621.2M46.8,617.9 L49.3,615.9M47.8,635.0 L42.3,636.4M47.8,635.0 L52.7,633.7M47.8,635.0 L44.4,621.2M506.6,621.3 L507.8,628.1M337.0,322.1 L336.4,328.6 L338.2,333.8M337.0,322.1 L331.4,319.4M337.0,322.1 L343.3,322.0 L351.5,319.4 L354.4,307.3M338.2,333.8 L342.1,337.9M338.2,333.8 L336.4,328.6 L337.0,322.1M331.4,319.4 L335.9,313.3M331.4,319.4 L325.2,327.7M331.4,319.4 L322.8,315.6 L320.9,313.4 L321.1,311.5 L325.9,307.6 L337.8,307.0M331.4,319.4 L337.0,322.1M342.1,337.9 L345.3,340.3M342.1,337.9 L345.1,331.1M342.1,337.9 L338.2,333.8M345.3,340.3 L350.3,344.0M345.3,340.3 L344.7,342.1 L346.9,345.8 L350.3,344.0M345.3,340.3 L342.1,337.9M345.1,331.1 L347.6,330.0M345.1,331.1 L342.1,337.9M345.1,331.1 L353.9,340.1 L350.7,344.2M350.7,344.2 L352.3,346.5M350.7,344.2 L353.9,340.1 L345.1,331.1M350.3,344.0 L345.3,340.3M350.3,344.0 L346.9,345.8 L344.7,342.1 L345.3,340.3M352.3,346.5 L352.4,349.3M352.3,346.5 L350.7,344.2M352.3,346.5 L355.2,347.6M352.4,349.3 L352.3,346.5M352.4,349.3 L360.9,352.4M360.9,352.4 L352.4,349.3M577.8,478.5 L588.0,480.3M577.8,478.5 L575.3,485.7M588.0,480.3 L593.3,481.6M588.0,480.3 L577.8,478.5M575.3,485.7 L571.1,484.2M575.3,485.7 L567.4,501.0 L555.7,516.2M575.3,485.7 L577.8,478.5M593.3,481.6 L598.0,482.6M593.3,481.6 L588.0,480.3M587.6,482.0 L586.0,487.6M598.0,482.6 L593.3,481.6M599.7,483.0 L602.5,475.1M602.5,475.1 L599.7,483.0M513.2,335.7 L511.7,332.3M639.3,729.4 L639.6,727.0 L646.1,720.8 L652.4,724.3 L660.2,730.8 L663.2,731.6M663.2,731.6 L660.2,730.8 L652.4,724.3 L646.1,720.8 L639.6,727.0 L639.3,729.4M663.2,731.6 L651.5,735.6 L652.8,741.4 L654.8,742.9M663.2,731.6 L667.3,729.2 L669.6,725.9M654.8,742.9 L652.8,741.4 L651.5,735.6 L663.2,731.6M654.8,742.9 L680.5,733.8M116.3,619.3 L127.7,606.5M116.3,619.3 L120.4,623.1M116.3,619.3 L111.8,615.4M127.7,606.5 L116.3,619.3M127.7,606.5 L131.0,609.2M127.7,606.5 L124.8,603.4M120.4,623.1 L124.3,619.0M120.4,623.1 L127.8,629.9M120.4,623.1 L116.3,619.3M131.0,609.2 L127.7,606.5M131.0,609.2 L129.8,613.3 L126.1,617.0M131.0,609.2 L132.6,604.6M124.8,603.4 L120.1,606.0M124.8,603.4 L127.7,606.5M124.8,603.4 L130.5,599.7 L133.2,602.6M-218.8,68.1 L-213.0,63.1M-218.8,68.1 L-217.7,72.9M-213.0,63.1 L-218.8,68.1M-217.7,72.9 L-212.7,72.9 L-206.4,70.6M-217.7,72.9 L-218.8,68.1M-217.7,72.9 L-219.8,79.5M611.4,-69.4 L607.4,-64.6M180.9,121.3 L185.8,120.4M180.9,121.3 L170.3,123.7M181.1,121.7 L183.8,131.8M185.8,120.4 L191.6,119.4M185.8,120.4 L180.9,121.3M170.3,123.7 L180.9,121.3M170.3,123.7 L159.7,126.8M183.8,131.8 L181.1,121.7M447.9,133.9 L456.1,141.5M447.9,133.9 L445.2,131.3M447.9,133.9 L452.8,128.6M456.1,141.5 L447.9,133.9M456.1,141.5 L462.3,135.0M456.1,141.5 L463.3,148.1M456.1,141.5 L449.6,148.3M445.2,131.3 L447.9,133.9M452.8,128.6 L447.9,133.9M441.6,127.9 L439.5,130.1M441.6,127.9 L444.4,124.9M439.5,130.1 L441.6,127.9M444.4,124.9 L441.6,127.9M444.4,124.9 L447.9,121.2M-85.9,181.2 L-86.7,177.1M-86.7,177.1 L-85.9,181.2M-86.7,177.1 L-88.4,170.8M-86.7,177.1 L-90.7,178.8 L-98.3,185.5M-88.4,170.8 L-86.7,177.1M-98.3,185.5 L-96.4,188.6M-98.3,185.5 L-90.7,178.8 L-86.7,177.1M-98.3,185.5 L-103.1,180.7M60.9,615.1 L67.0,615.6M60.9,615.1 L55.3,614.6M61.0,615.3 L64.9,630.6M73.7,664.7 L77.4,680.1M73.7,664.7 L69.4,647.4M73.7,664.7 L68.6,668.1M73.7,664.7 L78.8,661.3M-30.8,679.1 L-27.8,679.8M-27.8,679.8 L-30.8,679.1M-27.8,679.8 L-24.0,673.6M-27.8,679.8 L-29.5,689.3M-27.8,679.8 L-18.5,682.0M-24.0,673.6 L-27.8,679.8M-18.5,682.0 L-17.5,675.2M-18.5,682.0 L-27.8,679.8M-18.5,682.0 L-19.9,694.2M648.1,8.4 L644.3,3.0M648.1,8.4 L655.0,3.4M648.1,8.4 L644.3,11.1M644.3,3.0 L648.1,8.4M655.0,3.4 L660.9,-1.0M655.0,3.4 L648.1,8.4M655.0,3.4 L650.3,-3.9M644.3,11.1 L651.8,13.4M644.3,11.1 L648.1,8.4M644.3,11.1 L641.9,12.9M75.6,761.6 L74.3,757.3 L63.7,746.1M75.6,761.6 L81.2,760.4M63.7,746.1 L67.2,742.9M63.7,746.1 L74.3,757.3 L75.6,761.6M63.7,746.1 L58.8,739.1 L58.3,736.8 L59.3,734.3M63.7,746.1 L60.3,748.3M63.7,746.1 L60.6,748.9M81.2,760.4 L82.0,760.8 L82.5,759.5 L81.8,759.1 L81.2,760.4M81.2,760.4 L81.8,759.1 L82.5,759.5 L82.0,760.8 L81.2,760.4M81.2,760.4 L75.6,761.6M668.9,498.2 L661.4,507.4M668.9,498.2 L671.6,499.2 L672.3,501.2 L666.0,507.4 L665.1,511.1M668.9,498.2 L667.7,488.6 L663.3,480.1M661.4,507.4 L668.9,498.2M661.4,507.4 L664.6,510.2M661.4,507.4 L654.5,504.9 L652.3,501.8 L652.4,499.5M663.3,480.1 L667.7,488.6 L668.9,498.2M465.7,115.2 L460.3,120.8M465.7,115.2 L474.5,122.3M460.3,120.8 L465.7,115.2M460.3,120.8 L453.3,115.5M460.3,120.8 L454.3,127.2M460.3,120.8 L468.7,128.3M418.5,164.4 L401.4,150.2 L373.2,121.6 L367.0,116.9 L353.0,109.5M420.5,166.0 L438.0,180.3M420.4,162.7 L413.5,157.3M420.4,162.7 L423.0,165.0M420.4,162.7 L422.9,159.9M413.5,157.3 L415.7,155.0M413.5,157.3 L420.4,162.7M413.5,157.3 L407.1,152.1M423.0,165.0 L420.4,162.7M422.9,159.9 L426.3,156.3M422.9,159.9 L420.4,162.7M435.2,147.1 L429.0,141.1M435.2,147.1 L438.7,150.4M435.2,147.1 L430.6,151.8M435.2,147.1 L438.4,143.7M429.0,141.1 L435.2,147.1M429.0,141.1 L424.5,136.8M429.0,141.1 L425.3,145.0M429.0,141.1 L435.4,134.6M438.7,150.4 L440.7,152.3M438.7,150.4 L435.2,147.1M438.4,143.7 L441.5,140.5M438.4,143.7 L435.2,147.1M441.5,140.5 L449.6,148.3M441.5,140.5 L437.0,136.1M441.5,140.5 L438.4,143.7M441.5,140.5 L444.0,137.9M449.6,148.3 L441.5,140.5M449.6,148.3 L452.4,150.9M449.6,148.3 L446.5,151.5M449.6,148.3 L456.1,141.5M437.0,136.1 L441.5,140.5M444.0,137.9 L441.5,140.5M454.3,127.2 L450.2,123.3M454.3,127.2 L462.3,135.0M454.3,127.2 L460.3,120.8M450.2,123.3 L447.9,121.2M450.2,123.3 L454.3,127.2M453.3,115.5 L438.8,107.5M453.3,115.5 L447.9,121.2M453.3,115.5 L460.3,120.8M468.7,128.3 L462.3,135.0M468.7,128.3 L460.3,120.8M489.0,278.3 L491.4,274.0M488.3,278.5 L484.5,276.4M484.5,276.4 L488.3,278.5M484.8,276.1 L486.1,273.7M-163.9,232.9 L-168.7,228.8M-166.3,225.7 L-168.7,228.8M-166.3,225.7 L-162.4,220.7 L-168.4,218.7M-166.3,225.7 L-160.6,228.8M-174.6,220.8 L-172.1,225.6 L-168.7,228.8M557.4,595.6 L560.5,598.6M557.4,595.6 L553.6,592.4M553.6,592.4 L557.4,595.6M553.6,592.4 L549.3,588.5M562.4,590.2 L564.1,588.3M560.7,592.2 L558.7,594.2M256.0,488.9 L253.9,487.5M256.0,488.9 L259.7,484.5 L261.1,478.5M256.0,488.9 L263.6,494.7M253.9,487.5 L256.0,488.9M253.9,487.5 L250.3,485.6M261.1,478.5 L259.7,484.5 L256.0,488.9M263.6,494.7 L270.9,485.7 L290.1,481.5M263.6,494.7 L256.0,488.9M96.5,339.3 L89.3,329.5M96.5,339.3 L100.1,336.4 L107.9,321.9M96.5,339.3 L108.1,353.4M89.3,329.5 L96.5,339.3M89.3,329.5 L84.3,333.0 L80.3,339.9M89.3,329.5 L94.6,324.7 L96.5,319.3M89.3,329.5 L78.5,317.5 L76.9,314.3 L76.9,310.0M107.9,321.9 L100.1,336.4 L96.5,339.3M107.9,321.9 L107.9,319.3M108.1,353.4 L114.8,360.5M108.1,353.4 L111.6,349.9 L122.2,344.0M108.1,353.4 L104.7,356.2 L102.4,355.0 L100.6,351.9 L97.0,355.0 L98.0,357.6M108.1,353.4 L96.5,339.3M-202.4,206.5 L-200.8,211.7M387.1,507.1 L391.6,509.0M391.6,509.0 L400.9,516.4 L411.6,518.9M391.6,509.0 L387.1,507.1M391.6,509.0 L399.2,501.9 L403.4,501.8 L409.0,503.8 L411.9,503.3M411.6,518.9 L420.3,520.3M411.6,518.9 L412.3,511.5M411.6,518.9 L400.9,516.4 L391.6,509.0M411.6,518.9 L411.0,524.5 L408.4,530.2 L402.0,532.7M411.9,503.3 L411.2,500.9M411.9,503.3 L414.7,501.2 L414.1,500.0 L411.2,500.9M411.9,503.3 L412.3,511.5M411.9,503.3 L409.0,503.8 L403.4,501.8 L399.2,501.9 L391.6,509.0M420.3,520.3 L411.6,518.9M412.3,511.5 L411.6,518.9M412.3,511.5 L411.9,503.3M412.3,511.5 L402.2,509.3M511.5,247.1 L515.9,242.0M496.1,225.0 L493.0,222.7M496.6,225.5 L495.0,227.4M493.0,222.7 L490.8,220.7M493.0,222.7 L496.1,225.0M124.3,619.0 L126.8,620.9M124.3,619.0 L126.1,61
380777.0M124.3,619.0 L120.4,623.1M126.8,620.9 L124.3,619.0M126.8,620.9 L129.2,623.1M126.8,620.9 L126.1,617.0M126.1,617.0 L124.3,619.0M126.1,617.0 L126.8,620.9M126.1,617.0 L129.8,613.3 L131.0,609.2M129.2,623.1 L126.8,620.9M129.2,623.1 L133.7,627.9M129.2,623.1 L139.9,617.9M117.9,5.6 L114.7,7.3M117.9,5.6 L130.8,15.5 L139.9,15.9M117.9,5.6 L121.0,-4.8M114.7,7.3 L117.9,5.6M114.7,7.3 L108.9,10.3M139.9,15.9 L147.1,12.3M139.9,15.9 L130.8,15.5 L117.9,5.6M139.9,15.9 L141.0,24.1M147.1,12.3 L155.5,3.6M147.1,12.3 L139.9,15.9M147.1,12.3 L155.4,18.8 L164.9,20.6M141.0,24.1 L139.9,15.9M155.5,3.6 L164.2,2.0 L171.5,4.3M155.5,3.6 L147.1,12.3M155.5,3.6 L153.6,-0.1M164.9,20.6 L155.4,18.8 L147.1,12.3M171.5,4.3 L178.4,5.9M171.5,4.3 L164.2,2.0 L155.5,3.6M153.6,-0.1 L155.5,3.6M359.0,190.9 L353.4,186.1M359.0,190.9 L349.3,201.9M359.0,190.9 L368.4,182.7 L372.5,186.4M525.1,298.1 L523.0,296.2 L521.0,298.3 L519.0,296.7M409.8,283.0 L412.7,286.8M382.7,294.2 L391.7,296.1M371.5,343.0 L368.0,340.8M371.5,343.0 L379.2,331.1M371.5,343.0 L366.6,351.2M368.0,340.8 L361.9,339.4M368.0,340.8 L371.5,343.0M366.6,351.2 L371.5,343.0M366.6,351.7 L366.1,356.7M366.6,351.7 L365.5,354.2 L363.4,354.4M366.1,356.7 L363.4,354.4M366.1,356.7 L366.6,351.7M366.1,356.7 L366.1,360.9M366.1,356.7 L371.9,361.3M363.4,354.4 L366.1,356.7M363.4,354.4 L365.5,354.2 L366.6,351.7M366.1,360.9 L366.1,356.7M366.1,360.9 L366.4,372.3M371.9,361.3 L366.1,356.7M366.4,372.3 L366.5,378.7M366.4,372.3 L370.6,373.8M366.4,372.3 L366.1,360.9M366.5,378.7 L366.4,372.3M366.5,378.7 L363.6,379.1M370.6,373.8 L366.4,372.3M366.5,382.5 L363.6,379.1M366.5,382.5 L368.5,385.6M366.5,384.5 L366.5,387.1M363.6,379.1 L360.6,375.7M363.6,379.1 L366.5,378.7M363.6,379.1 L366.5,382.5M368.5,385.6 L366.5,382.5M362.5,455.2 L367.3,456.9M362.5,455.2 L358.9,469.9M362.5,455.2 L365.4,424.8M367.3,456.9 L362.5,455.2M367.3,456.9 L369.9,457.9 L373.3,461.8 L373.7,469.1M367.3,456.9 L367.0,458.5 L369.3,462.1M358.9,469.9 L357.3,471.8M358.9,469.9 L362.5,455.2M358.9,469.9 L358.1,473.8M357.3,471.8 L358.9,469.9M27.3,-18.3 L30.5,-15.5M27.3,-18.3 L25.4,-19.8M49.1,0.4 L53.6,4.7M49.1,0.4 L30.5,-15.5M-192.4,234.3 L-189.8,229.5 L-193.1,227.9M-191.6,238.9 L-191.8,244.4M-191.6,238.9 L-193.6,235.5M538.9,445.2 L531.7,439.5 L526.7,437.7M538.9,445.2 L531.3,447.8 L509.1,441.6M538.9,445.2 L551.4,442.7M509.1,441.6 L507.0,449.0M509.1,441.6 L531.3,447.8 L538.9,445.2M551.4,442.7 L538.9,445.2M511.4,433.6 L509.7,439.4M511.4,433.6 L512.2,430.5M511.4,433.6 L526.7,437.7M509.7,439.4 L511.4,433.6M509.7,439.4 L502.4,437.4M512.2,430.5 L511.4,433.6M512.2,430.5 L514.6,422.2M512.2,430.5 L507.3,429.3M-224.9,637.2 L-214.6,639.0M-224.9,637.2 L-227.1,654.2M-224.9,637.2 L-229.1,628.0M-214.6,639.0 L-224.9,637.2M-214.6,639.0 L-213.5,633.3M-214.6,639.0 L-189.4,645.1 L-185.8,642.9M-227.1,654.2 L-228.9,674.5M-227.1,654.2 L-224.9,637.2M-229.1,628.0 L-224.9,637.2M-229.1,628.0 L-233.2,623.2M410.7,-107.6 L413.1,-100.2M410.7,-107.6 L402.3,-98.5M413.1,-100.2 L410.7,-107.6M413.1,-100.2 L411.6,-96.0 L405.6,-95.0M402.3,-98.5 L399.5,-95.8M402.3,-98.5 L410.7,-107.6M402.3,-98.5 L405.6,-95.0M402.3,-98.5 L398.4,-104.6M405.6,-95.0 L411.6,-96.0 L413.1,-100.2M405.6,-95.0 L406.9,-90.5M405.6,-95.0 L402.3,-98.5M525.8,681.3 L526.1,689.8 L524.0,692.7 L507.7,701.5 L492.4,706.3M525.8,681.3 L508.8,690.3M525.7,680.6 L525.6,678.8 L520.6,673.4M492.4,706.3 L507.7,701.5 L524.0,692.7 L526.1,689.8 L525.8,681.3M508.8,690.3 L525.8,681.3M505.4,604.8 L502.5,605.5M503.9,610.7 L502.5,605.5M450.9,273.8 L458.8,278.6M468.7,284.5 L465.1,290.6M468.7,284.5 L472.8,277.8M468.7,284.5 L458.8,278.6M468.7,284.5 L475.4,288.5M455.2,284.7 L465.1,290.6M455.2,284.7 L458.8,278.6M455.2,284.7 L442.5,277.4M442.5,277.4 L455.2,284.7M614.0,521.1 L618.4,527.9M614.0,521.1 L608.5,523.6 L606.1,528.8M614.0,521.1 L620.0,520.6 L627.5,515.8 L636.6,520.9M618.4,527.9 L614.0,521.1M606.1,528.8 L614.0,531.0M606.1,528.8 L605.3,533.8 L601.2,536.6M606.1,528.8 L608.5,523.6 L614.0,521.1M636.6,520.9 L627.5,515.8 L620.0,520.6 L614.0,521.1M636.6,520.9 L646.5,521.1M636.6,520.9 L632.7,525.3 L628.1,519.7M614.0,531.0 L606.1,528.8M614.0,531.0 L616.8,531.0 L618.4,528.8M601.2,536.6 L607.1,541.9M601.2,536.6 L605.3,533.8 L606.1,528.8M601.2,536.6 L581.9,528.9 L573.1,529.5M89.3,92.3 L87.1,93.4M89.3,92.3 L97.3,108.2M89.3,92.3 L84.3,82.0M87.1,93.4 L89.3,92.3M84.3,82.0 L89.3,92.3M84.3,82.0 L78.2,68.3M665.8,158.6 L657.9,162.7M665.8,158.6 L670.2,172.8M665.8,158.6 L665.7,152.4 L668.1,146.8M150.1,243.4 L143.8,242.3M143.8,242.3 L150.1,243.4M491.2,-67.5 L480.9,-62.1M491.2,-67.5 L487.4,-73.7M491.2,-67.5 L495.1,-68.3 L498.1,-66.4 L501.5,-56.7 L513.9,-40.2M491.2,-67.5 L499.6,-56.1 L500.2,-52.2M480.9,-62.1 L491.2,-67.5M487.4,-73.7 L491.2,-67.5M487.4,-73.7 L478.6,-85.9 L475.0,-86.9 L469.5,-85.9M
38077513.9,-40.2 L508.3,-39.6M513.9,-40.2 L501.5,-56.7 L498.1,-66.4 L495.1,-68.3 L491.2,-67.5M513.9,-40.2 L525.6,-18.7 L530.2,-16.3 L534.4,-16.5M500.2,-52.2 L498.1,-48.9 L487.5,-43.6 L475.4,-39.8M500.2,-52.2 L499.6,-56.1 L491.2,-67.5M639.6,654.6 L642.4,665.5M487.1,304.1 L477.4,298.4M390.6,538.0 L392.7,536.0M394.0,538.2 L392.7,536.0M368.1,542.1 L369.4,559.0M367.3,533.5 L368.1,541.2M369.3,462.1 L367.0,458.5 L367.3,456.9M370.3,469.6 L368.9,467.5 L366.6,469.0 L368.2,471.1 L370.3,469.6M370.3,469.6 L368.2,471.1 L366.6,469.0 L368.9,467.5 L370.3,469.6M370.3,469.6 L373.7,469.1M376.7,489.0 L373.4,491.1 L374.9,493.2 L378.0,491.3 L376.7,489.0M376.7,489.0 L378.0,491.3 L374.9,493.2 L373.4,491.1 L376.7,489.0M394.9,489.7 L395.5,492.4 L393.5,492.9 L392.8,490.1 L394.9,489.7M394.9,489.7 L392.8,490.1 L393.5,492.9 L395.5,492.4 L394.9,489.7M406.7,493.9 L411.2,500.9M406.7,493.9 L395.3,487.5M406.7,493.9 L409.3,492.1 L414.4,491.1 L420.3,493.6M411.2,500.9 L411.9,503.3M411.2,500.9 L414.1,500.0 L414.7,501.2 L411.9,503.3M411.2,500.9 L406.7,493.9M420.3,493.6 L423.0,490.6M420.3,493.6 L422.1,495.9M420.3,493.6 L414.4,491.1 L409.3,492.1 L406.7,493.9M402.2,509.3 L412.3,511.5M649.6,581.6 L652.5,580.9M649.8,582.6 L650.7,586.5M652.5,580.9 L649.6,581.6M652.5,580.9 L656.9,581.0M650.7,586.5 L649.8,582.6M648.8,586.5 L646.1,585.7M663.6,598.5 L662.8,601.2M663.6,598.5 L660.2,596.7M664.6,597.3 L666.3,595.4M660.2,596.7 L663.6,598.5M669.5,592.5 L667.5,589.7M667.5,589.7 L669.5,592.5M575.7,589.5 L578.2,587.3M578.2,587.3 L575.7,589.5M605.0,379.2 L607.7,380.2M607.7,380.2 L610.9,381.7M607.7,380.2 L605.0,379.2M610.9,381.7 L618.7,382.7M610.9,381.7 L607.7,380.2M610.9,381.7 L610.3,385.3M618.7,382.7 L610.9,381.7M618.7,382.7 L617.7,390.0M618.7,382.7 L620.9,366.6 L622.5,363.4 L625.0,362.1M610.3,385.3 L609.9,388.7M610.3,385.3 L610.9,381.7M617.7,390.0 L618.7,382.7M617.7,390.0 L609.9,388.7M617.7,390.0 L616.3,401.4M625.0,362.1 L622.5,363.4 L620.9,366.6 L618.7,382.7M462.5,105.7 L465.6,100.9M462.5,105.7 L467.8,110.6M465.6,100.9 L464.5,98.8M465.6,100.9 L462.5,105.7M465.6,100.9 L468.9,99.2 L471.6,99.4M467.8,110.6 L462.5,105.7M445.6,98.8 L448.2,100.3M445.6,98.8 L438.8,107.5M448.2,100.3 L445.6,98.8M448.2,100.3 L461.1,105.6M438.8,107.5 L453.3,115.5M438.8,107.5 L437.6,111.3 L438.7,114.4 L437.3,115.9M438.8,107.5 L445.6,98.8M233.6,240.8 L235.9,232.7M233.6,240.8 L222.6,237.3M222.6,237.3 L233.6,240.8M231.4,249.1 L230.6,251.9M231.4,249.1 L232.9,242.8M443.5,235.5 L439.5,234.6M443.5,235.5 L442.7,238.3M439.5,234.6 L443.5,235.5M442.7,238.3 L443.5,235.5M-1.1,602.4 L1.9,598.6M-1.1,602.4 L-4.3,606.4M-1.1,602.4 L1.0,597.5M1.9,598.6 L4.3,595.6M1.9,598.6 L-1.1,602.4M-4.3,606.4 L-1.1,602.4M1.0,597.5 L-1.1,602.4M707.0,17.5 L707.6,24.6M707.0,17.5 L710.8,17.2M707.6,24.6 L707.0,17.5M710.8,17.2 L720.6,15.8M710.8,17.2 L707.0,17.5M-112.1,179.6 L-113.0,188.7M-112.1,179.6 L-107.5,181.1 L-103.1,180.7M-112.1,179.6 L-129.5,172.5M-113.0,188.7 L-112.1,179.6M-113.0,188.7 L-104.0,189.9 L-96.4,188.6M-113.0,188.7 L-127.2,189.3M-103.1,180.7 L-101.7,177.3 L-102.2,174.3M-103.1,180.7 L-107.5,181.1 L-112.1,179.6M-103.1,180.7 L-98.3,185.5M-129.5,172.5 L-134.1,178.7M-129.5,172.5 L-128.0,170.3M-129.5,172.5 L-112.1,179.6M-96.4,188.6 L-98.3,185.5M-96.4,188.6 L-86.7,187.6M-96.4,188.6 L-104.0,189.9 L-113.0,188.7M-127.2,189.3 L-113.0,188.7M-127.2,189.3 L-136.0,189.4 L-140.5,187.6M-127.2,189.3 L-128.9,183.0M390.3,257.8 L383.8,254.7M390.3,257.8 L393.3,260.8M390.3,257.8 L391.8,249.5M383.8,254.7 L390.3,257.8M383.8,254.7 L384.9,248.3M383.8,254.7 L379.5,268.0M383.8,254.7 L376.2,252.9M393.3,260.8 L390.3,257.8M393.3,260.8 L391.0,271.3M393.3,260.8 L402.1,260.9M379.5,268.0 L383.8,254.7M229.5,79.9 L237.1,80.8 L241.3,79.2M229.5,79.9 L228.1,72.3M229.5,79.9 L225.3,86.3M241.3,79.2 L237.1,80.8 L229.5,79.9M228.1,72.3 L235.8,67.9M228.1,72.3 L225.4,66.7 L226.4,60.8M228.1,72.3 L229.5,79.9M89.7,59.1 L81.5,65.6M89.7,59.1 L87.9,55.7M89.7,59.1 L93.9,55.8 L98.2,50.1M375.2,57.2 L365.6,67.3 L361.3,62.9M375.2,57.2 L384.0,58.9 L388.4,57.6M375.2,57.2 L372.2,52.3M26.8,403.1 L23.9,414.1M23.9,414.1 L21.3,423.4M23.9,414.1 L26.8,403.1M21.3,423.4 L17.9,431.7M21.3,423.4 L23.9,414.1M21.3,423.4 L12.3,421.4M21.3,423.4 L24.1,424.4 L30.0,432.5 L36.0,436.4M17.9,431.7 L11.9,441.7M17.9,431.7 L21.3,423.4M17.9,431.7 L21.2,434.4 L22.2,441.6 L19.4,444.1M12.3,421.4 L21.3,423.4M12.3,421.4 L13.5,416.8 L12.9,413.5 L10.7,411.5M12.3,421.4 L11.5,423.4 L3.1,430.1M36.0,436.4 L30.0,432.5 L24.1,424.4 L21.3,423.4M36.0,436.4 L45.5,441.5 L53.1,440.7M36.0,436.4 L42.3,427.6M11.9,441.7 L17.9,431.7M19.4,444.1 L22.2,441.6 L21.2,434.4 L17.9,431.7M-212.6,134.7 L-217.0,135.4M-212.6,134.7 L-213.8,126.7M-206.9,133.7 L-204.6,132.7M-206.9,133.7 L-211.4,134.6M242.7,362.7 L244.7,364.7M242.7,362.7 L237.8,357.9M237.8,357.9 L236.3,361.0M237.8,357.9 L242.7,362.7M237.8,357.9 L239.7,354.8M239.7,354.8 L237.8,357.9M239.7,354.8 L239.7,353.1 L241.2,353.7M442.6,642.4 L441.9,647.2M447.9,648.1 L452.0,648.6M447.9,648.1 L441.9,647.2M447.9,648.1 L448.2,645.0M436.1,673.8 L437.6,668.5M436.1,673.8 L441.2,674.9 L442.9,678.4M436.0,674.4 L435.1,679.0M437.6,668.5 L436.1,673.8M442.9,678.4 L441.2,674.9 L436.1,673.8M435.1,679.0 L436.0,674.4M435.1,679.0 L440.5,686.0M435.1,679.0 L433.0,689.5 L438.6,690.8M440.5,686.0 L435.1,679.0M438.6,690.8 L433.0,689.5 L435.1,679.0M552.2,2.4 L555.0,7.1M552.2,2.4 L544.1,7.4 L545.9,12.6M552.2,2.4 L538.9,-19.3M553.6,1.5 L540.3,-20.2M553.6,1.5 L556.5,6.2M555.0,7.1 L552.2,2.4M555.0,7.1 L571.4,33.6M545.9,12.6 L544.1,7.4 L552.2,2.4M538.9,-19.3 L536.8,-22.8M538.9,-19.3 L552.2,2.4M538.9,-19.3 L534.4,-16.5M568.7,-0.7 L568.9,-9.4M568.7,-0.7 L556.9,-0.6 L555.8,0.6 L556.5,6.2M568.7,-0.7 L569.9,10.0 L572.5,14.5 L578.6,18.4M568.9,-9.4 L568.7,-0.7M568.9,-9.4 L569.3,-21.7 L568.2,-27.0M556.5,6.2 L553.6,1.5M556.5,6.2 L572.8,33.0M556.5,6.2 L555.8,0.6 L556.9,-0.6 L568.7,-0.7M578.6,18.4 L586.5,24.4M578.6,18.4 L572.5,
3807714.5 L569.9,10.0 L568.7,-0.7M452.7,164.1 L454.6,166.2M452.7,164.1 L445.8,157.3M452.7,164.1 L450.1,167.0M454.6,166.2 L452.7,164.1M454.6,166.2 L452.4,165.5 L450.1,167.0M454.6,166.2 L458.5,170.6M445.8,157.3 L443.3,154.8M445.8,157.3 L452.7,164.1M450.1,167.0 L452.4,165.5 L454.6,166.2M450.1,167.0 L452.7,164.1M440.7,152.3 L443.3,154.8M440.7,152.3 L438.7,150.4M445.4,152.6 L443.3,154.8M424.5,136.8 L429.0,141.1M435.4,134.6 L437.9,131.8M435.4,134.6 L429.0,141.1M563.2,318.3 L567.4,324.0M567.0,324.3 L562.0,328.0M572.9,319.8 L567.4,324.0M576.7,351.6 L573.0,354.5M576.7,351.6 L568.7,340.9M576.7,351.6 L580.2,356.3M576.7,351.6 L583.9,346.2M305.5,241.5 L302.5,241.3M306.7,231.3 L306.4,235.2M291.6,206.5 L289.7,203.5M291.6,206.5 L300.6,215.5M289.1,204.0 L285.0,207.0M243.1,127.3 L239.3,122.2M243.1,127.3 L249.0,130.1 L257.7,130.1M239.3,122.2 L235.5,115.1M239.3,122.2 L243.1,127.3M257.7,130.1 L249.0,130.1 L243.1,127.3M257.7,130.1 L265.0,129.8M241.2,121.2 L243.9,119.8M235.5,115.1 L233.7,111.7M235.5,115.1 L232.1,116.9M235.5,115.1 L239.3,122.2M437.3,115.9 L438.7,114.4 L437.6,111.3 L438.8,107.5M100.0,627.8 L104.1,624.0M100.0,627.8 L111.1,638.4M100.0,627.8 L102.7,638.6M100.0,627.8 L98.3,622.0M111.1,638.4 L100.0,627.8M111.1,638.4 L109.1,640.2M111.1,638.4 L113.7,636.5M116.2,635.1 L104.1,624.0M116.2,635.1 L119.0,633.7M116.2,635.1 L113.7,636.5M120.1,606.0 L111.8,615.4M120.1,606.0 L124.8,603.4M120.1,606.0 L113.3,605.4 L107.6,611.4M107.6,611.4 L111.8,615.4M107.6,611.4 L113.3,605.4 L120.1,606.0M107.6,611.4 L102.9,616.9 L97.7,618.0M537.5,217.2 L535.8,219.0M538.0,216.7 L540.6,213.8M533.2,321.5 L532.2,318.6M533.2,321.5 L538.6,319.0 L545.2,334.6M533.2,321.5 L534.2,324.2M532.2,318.6 L533.2,321.5M184.3,589.9 L183.1,587.7 L175.9,584.0M195.8,594.1 L189.4,594.1 L184.0,590.6M609.9,388.7 L617.7,390.0M609.9,388.7 L607.3,388.2M609.9,388.7 L610.3,385.3M616.3,401.4 L615.2,406.7M616.3,401.4 L617.7,390.0M109.1,640.2 L111.1,638.4M109.1,640.2 L105.4,645.0M109.1,640.2 L124.1,661.2M105.4,645.0 L119.3,664.7M105.4,645.0 L102.7,638.6M105.4,645.0 L109.1,640.2M105.4,645.0 L101.7,649.6M124.1,661.2 L130.5,664.2M124.1,661.2 L119.3,664.7M124.1,661.2 L109.1,640.2M130.5,664.2 L124.1,661.2M130.5,664.2 L136.7,668.1 L137.7,669.5 L136.9,671.2 L131.0,671.9 L124.2,668.1 L121.8,668.1M130.5,664.2 L131.3,661.6M119.3,664.7 L124.1,661.2M119.3,664.7 L114.7,667.9M119.3,664.7 L105.4,645.0M119.3,664.7 L121.8,668.1M131.3,661.6 L122.4,649.2M131.3,661.6 L130.5,664.2M131.3,661.6 L138.8,662.4M183.9,278.0 L184.9,283.4M183.9,278.0 L185.4,276.8 L184.5,272.6M184.9,283.4 L183.9,278.0M184.5,272.6 L190.2,268.8M184.5,272.6 L185.4,276.8 L183.9,278.0M184.5,272.6 L182.3,269.1 L184.0,265.8M181.7,274.6 L184.2,272.9M-145.2,319.9 L-137.2,330.6M-145.2,319.9 L-144.5,313.1M-145.2,319.9 L-153.8,324.0 L-158.7,327.8M-144.5,313.1 L-149.5,312.1M-144.5,313.1 L-145.2,319.9M-144.5,313.1 L-142.2,303.5M-158.7,327.8 L-161.5,329.6M-158.7,327.8 L-153.8,324.0 L-145.2,319.9M-179.5,342.8 L-184.2,346.6M-179.5,342.8 L-173.2,338.5M-184.2,346.6 L-179.5,342.8M-184.2,346.6 L-186.9,349.3M-184.2,346.6 L-191.3,328.8M-186.9,349.3 L-184.2,346.6M-191.3,328.8 L-184.2,346.6M-150.2,242.0 L-141.8,241.6 L-139.2,239.3M-135.5,245.0 L-136.4,241.6 L-139.2,239.3M-125.4,235.8 L-133.3,236.1 L-139.2,239.3M625.0,445.9 L629.7,446.2M625.0,445.9 L623.5,451.8M628.3,453.0 L633.4,452.7 L635.2,450.8M628.3,453.0 L623.5,451.8M637.6,447.5 L636.1,447.1 L632.0,451.7 L628.6,451.6M628.6,451.6 L625.4,450.8M628.6,451.6 L632.0,451.7 L636.1,447.1 L637.6,447.5M646.5,521.1 L652.1,521.7M646.5,521.1 L645.9,528.3M646.5,521.1 L636.6,520.9M652.8,525.6 L652.1,521.7M645.9,528.3 L646.5,521.1M628.1,519.7 L632.7,525.3 L636.6,520.9M607.1,541.9 L601.2,536.6M573.1,529.5 L590.7,545.5M573.1,529.5 L565.3,522.7M573.1,529.5 L581.9,528.9 L601.2,536.6M-166.3,-10.1 L-162.0,-7.7M-166.3,-10.1 L-170.6,-12.6M-162.0,-7.7 L-166.3,-10.1M-162.0,-7.7 L-155.5,-3.6M-170.6,-12.6 L-166.3,-10.1M-170.6,-12.6 L-177.0,-16.2M565.7,617.7 L562.0,611.8M565.7,617.7 L557.6,624.5M565.7,617.7 L571.5,614.6M562.0,611.8 L565.7,617.7M557.6,624.5 L552.8,628.6M557.6,624.5 L565.7,617.7M557.6,624.5 L550.7,617.5 L541.3,616.3M571.5,614.6 L574.1,620.5M571.5,614.6 L565.7,617.7M571.5,614.6 L567.0,604.6M552.8,628.6 L557.6,624.5M541.3,616.3 L550.7,617.5 L557.6,624.5M-142.3,286.1 L-141.0,290.8M-142.3,286.1 L-145.4,281.6M-142.3,286.1 L-134.3,288.1M-120.4,252.7 L-122.6,259.9M-120.4,252.7 L-119.6,251.5 L-116.9,252.6 L-117.8,253.5 L-120.4,252.7M-120.4,252.7 L-117.8,253.5 L-116.9,252.6 L-119.6,251.5 L-120.4,252.7M268.9,326.2 L274.8,325.3 L278.2,322.1M278.2,322.1 L274.8,325.3 L268.9,326.2M478.3,449.7 L473.6,452.7M478.3,449.7 L477.0,444.8M478.3,449.7 L482.1,448.2M473.6,452.7 L467.9,456.0M473.6,452.7 L478.3,449.7M473.6,452.7 L481.9,465.2M477.0,444.8 L476.2,439.6 L463.3,422.0M477.0,444.8 L478.3,449.7M477.0,444.8 L472.7,445.0 L469.4,443.7M482.1,448.2 L478.3,449.7M467.9,456.0 L462.7,459.1M467.9,456.0 L473.6,452.7M481.9,465.2 L473.6,452.7M462.7,459.1 L467.9,456.0M462.7,459.1 L456.9,462.2M463.4,460.4 L466.0,469.4M456.9,462.2 L462.7,459.1M456.5,462.3 L452.1,462.2 L449.7,460.3M449.7,460.3 L447.5,457.0M449.7,460.3 L452.1,462.2 L456.5,462.3M449.7,460.3 L447.4,462.6 L448.2,464.0 L445.6,465.8 L447.3,468.2M447.5,457.0 L442.2,449.7M447.5,457.0 L449.7,460.3M447.5,457.0 L430.9,469.0M447.3,468.2 L445.6,465.8 L448.2,464.0 L447.4,462.6 L449.7,460.3M442.2,449.7 L447.5,457.0M442.2,449.7 L436.3,453.7M430.9,469.0 L447.5,457.0M441.9,449.4 L436.3,441.1M436.3,453.7 L423.2,462.7M436.3,453.7 L442.2,449.7M614.9,442.7 L615.5,445.9M614.9,442.7 L614.8,437.7M616.3,442.3 L621.3,441.5 L621.6,440.5M61
380775.5,445.9 L607.1,445.5M615.5,445.9 L614.9,442.7M614.8,437.7 L616.0,424.5M614.8,437.7 L614.9,442.7M616.3,437.8 L618.3,434.1M616.0,424.5 L616.0,419.5M616.0,424.5 L614.8,437.7M-54.6,227.7 L-64.8,224.5M-54.6,227.7 L-45.6,225.2 L-42.5,217.9M-54.6,227.7 L-55.3,219.0 L-54.5,216.0M-62.4,220.0 L-64.8,224.5M336.5,182.1 L333.7,180.4M337.4,350.3 L341.8,350.0M337.4,350.3 L340.3,353.2M335.7,350.4 L349.9,363.3M336.1,349.0 L320.6,334.8M341.8,350.0 L340.0,351.4 L340.3,353.2M341.8,350.0 L351.2,349.2M341.8,350.0 L337.4,350.3M340.3,353.2 L340.0,351.4 L341.8,350.0M340.3,353.2 L349.9,363.3M340.3,353.2 L337.4,350.3M380.2,366.3 L383.2,360.9M380.2,366.3 L384.5,368.8M380.2,366.3 L373.2,362.1M383.2,360.9 L380.2,366.3M383.2,360.9 L384.7,355.2 L388.1,351.4M384.5,368.8 L387.0,370.2M384.5,368.8 L379.8,376.6M384.5,368.8 L380.2,366.3M373.2,362.1 L380.2,366.3M387.0,370.2 L384.5,368.8M387.0,370.2 L390.4,365.5M387.0,370.2 L392.5,374.8M379.8,376.6 L384.5,368.8M379.8,376.6 L382.5,382.2 L385.1,383.6 L387.6,383.3 L395.5,377.3M392.5,374.8 L395.5,377.3M392.5,374.8 L399.7,369.1M392.5,374.8 L387.0,370.2M395.5,377.3 L392.5,374.8M395.5,377.3 L387.6,383.3 L385.1,383.6 L382.5,382.2 L379.8,376.6M395.5,377.3 L404.0,384.4M399.7,369.1 L392.5,374.8M399.7,369.1 L403.1,365.1M404.0,384.4 L395.5,377.3M404.0,384.4 L407.9,387.6M405.0,391.2 L407.9,387.6M444.3,404.4 L452.0,404.7M444.3,404.4 L441.3,409.1M444.3,404.4 L433.0,403.0M441.3,409.1 L444.3,404.4M441.3,409.1 L444.9,413.1M433.0,403.0 L427.5,407.8M433.0,403.0 L444.3,404.4M452.1,400.5 L452.0,404.7M477.3,409.9 L476.9,403.3 L475.1,398.0M750.2,544.3 L743.6,550.1M750.2,544.3 L744.0,538.7 L742.2,527.5 L739.1,523.6M750.2,544.3 L753.7,551.2 L760.8,558.0 L767.7,568.8 L774.0,575.0 L781.3,578.0 L786.3,582.7M725.5,530.6 L722.1,533.4M725.5,530.6 L735.6,521.9 L739.1,523.6M725.5,530.6 L743.6,550.1M739.1,523.6 L735.6,521.9 L725.5,530.6M739.1,523.6 L742.2,527.5 L744.0,538.7 L750.2,544.3M786.3,582.7 L789.7,586.9 L789.1,591.0 L774.5,602.8M786.3,582.7 L783.1,585.6M786.3,582.7 L781.3,578.0 L774.0,575.0 L767.7,568.8 L760.8,558.0 L753.7,551.2 L750.2,544.3M106.8,5.9 L108.9,10.3M-149.4,250.5 L-149.4,257.5M-149.4,250.5 L-143.1,251.0 L-142.8,257.5 L-149.4,257.5M-149.4,250.5 L-155.6,250.4M-149.4,257.5 L-149.2,263.8M-149.4,257.5 L-149.4,250.5M-149.4,257.5 L-142.8,257.5 L-143.1,251.0 L-149.4,250.5M-155.6,250.4 L-154.7,264.3M-155.6,250.4 L-149.4,250.5M-149.2,263.8 L-149.4,257.5M-149.2,263.8 L-154.7,264.3M-149.2,263.8 L-148.6,267.6 L-145.9,269.5M267.8,346.1 L263.1,341.7M263.1,341.7 L267.8,346.1M-42.5,217.9 L-45.6,225.2 L-54.6,227.7M-54.5,216.0 L-55.3,219.0 L-54.6,227.7M124.0,369.8 L114.8,360.5M124.0,369.8 L126.3,372.2M124.0,369.8 L127.1,365.1 L128.6,359.2 L122.2,344.0M124.0,369.8 L121.1,372.7M114.8,360.5 L108.1,353.4M114.8,360.5 L124.0,369.8M114.8,360.5 L118.2,356.4M126.3,372.2 L124.0,369.8M126.3,372.2 L129.2,375.2M121.1,372.7 L119.2,374.6M121.1,372.7 L124.0,369.8M131.5,336.4 L128.1,341.0 L122.2,344.0M-213.5,633.3 L-212.9,629.3M-213.5,633.3 L-214.6,639.0M-185.8,642.9 L-189.4,645.1 L-214.6,639.0M468.4,183.1 L470.6,184.9M468.4,183.1 L466.0,185.9M468.4,183.1 L460.8,176.5 L459.9,177.1M470.6,184.9 L468.4,183.1M466.0,185.9 L468.4,183.1M466.0,185.9 L463.7,188.2 L459.9,184.5M280.1,335.4 L285.0,339.8M287.5,342.4 L289.8,344.4M287.5,342.4 L285.0,339.8M287.5,342.4 L290.2,339.6 L291.0,340.3M465.4,637.6 L463.0,638.4M465.4,637.6 L468.2,638.9M465.4,637.6 L462.4,640.2M465.4,637.6 L466.6,635.3M463.0,638.4 L465.4,637.6M468.2,638.9 L465.4,637.6M462.4,640.2 L460.7,642.0M462.4,640.2 L465.4,637.6M466.6,635.3 L465.4,637.6M452.0,648.6 L447.9,648.1M448.2,645.0 L447.9,648.1M208.4,-52.5 L209.9,-38.1M-15.7,431.5 L-20.2,428.3M-15.7,431.5 L-15.0,425.8 L-16.1,419.8M-15.7,432.0 L-15.5,435.6M-20.2,428.3 L-15.7,431.5M-10.4,444.8 L-9.6,454.8M-10.4,444.8 L-15.5,435.6M-10.4,444.8 L-5.0,446.9M-9.6,454.8 L-10.4,444.8M-15.5,435.6 L-15.7,432.0M-15.5,435.6 L-10.4,444.8M-5.0,446.9 L-10.4,444.8M378.3,553.0 L377.2,561.7M377.2,561.7 L378.3,553.0M377.2,561.7 L369.4,559.0M379.1,562.3 L385.7,564.2M379.1,562.3 L377.8,568.5 L374.2,568.0M369.4,559.0 L352.8,551.4M369.4,559.0 L377.2,561.7M369.4,559.0 L368.1,542.1M369.4,559.0 L364.4,566.7 L357.6,572.9M66.9,112.6 L68.2,115.2M66.9,112.6 L66.0,111.3 L65.1,111.4 L65.4,112.3 L66.9,112.6M66.9,112.6 L65.4,112.3 L65.1,111.4 L66.0,111.3 L66.9,112.6M50.5,120.2 L52.2,120.8 L68.2,115.2M495.5,482.2 L496.6,478.5M495.5,482.2 L495.8,485.0M493.8,481.5 L489.1,479.4M496.6,478.5 L495.5,482.2M495.8,485.0 L499.9,493.0M495.8,485.0 L495.5,482.2M478.1,475.9 L478.1,480.6M478.1,475.9 L466.0,475.9M478.1,475.9 L489.1,479.4M478.1,480.6 L478.1,483.7M478.1,480.6 L478.1,475.9M478.1,480.6 L486.1,487.5M466.0,475.9 L466.0,469.4M466.0,475.9 L440.3,476.5M466.0,475.9 L478.1,475.9M489.1,479.4 L493.8,481.5M489.1,479.4 L478.1,475.9M466.
380770,469.4 L457.7,469.4M466.0,469.4 L466.0,475.9M466.0,469.4 L463.4,460.4M466.0,469.4 L469.6,469.1M440.3,476.5 L466.0,475.9M8.5,81.1 L9.4,83.8M8.6,88.7 L9.4,83.8M15.3,-28.5 L18.7,-25.5M15.3,-28.5 L13.4,-30.1M15.3,-28.5 L21.5,-36.8M18.7,-25.5 L15.3,-28.5M18.7,-25.5 L25.4,-19.8M13.4,-30.1 L15.3,-28.5M13.4,-30.1 L6.3,-36.1M21.5,-36.8 L15.3,-28.5M457.7,469.4 L466.0,469.4M469.6,469.1 L471.6,467.6 L471.7,459.6M469.6,469.1 L466.0,469.4M154.9,616.9 L169.2,631.5M154.9,616.9 L159.4,613.2M154.9,616.9 L146.2,608.2M154.9,616.9 L150.3,620.4M169.2,631.5 L154.9,616.9M169.2,631.5 L163.3,633.7M169.2,631.5 L174.3,632.4 L177.0,631.3M159.4,613.2 L177.0,631.3M159.4,613.2 L163.6,609.3M159.4,613.2 L154.9,616.9M159.4,613.2 L149.0,602.7M146.2,608.2 L154.9,616.9M146.2,608.2 L149.0,602.7M146.2,608.2 L143.3,613.5M150.3,620.4 L157.1,627.3M150.3,620.4 L143.3,613.5M150.3,620.4 L154.9,616.9M150.3,620.4 L144.9,623.1M163.3,633.7 L157.1,627.3M163.3,633.7 L156.4,635.2M163.3,633.7 L169.2,631.5M177.0,631.3 L159.4,613.2M177.0,631.3 L174.3,632.4 L169.2,631.5M177.0,631.3 L178.1,629.2 L177.0,623.4M61.0,682.1 L82.5,687.4M61.0,682.1 L62.3,676.2M62.9,673.4 L62.3,676.2M93.9,684.4 L84.0,681.7M93.9,684.4 L99.5,691.6M93.9,684.4 L94.7,680.3M94.7,680.3 L93.9,684.4M94.7,680.3 L88.2,673.0M15.3,582.3 L18.1,578.8M18.1,578.8 L20.7,575.6M18.1,578.8 L15.3,582.3M14.6,583.1 L13.0,585.0M16.1,583.1 L17.9,584.6M14.2,581.5 L17.1,578.0M40.2,603.9 L34.1,598.7M40.2,603.9 L45.8,602.4M41.1,604.8 L43.6,606.9M34.1,598.7 L40.2,603.9M34.1,598.7 L28.1,593.5M39.5,604.6 L37.4,607.1M45.8,602.4 L48.2,602.0M45.8,602.4 L40.2,603.9M54.6,636.9 L53.7,633.5M51.9,626.6 L53.7,633.5M51.9,626.6 L50.8,622.5M52.7,633.7 L47.8,635.0M65.0,654.2 L59.4,655.7M65.0,654.2 L67.7,664.4M58.7,693.2 L79.9,698.7M58.7,693.2 L57.6,699.2M58.8,692.7 L59.5,689.7M57.6,699.2 L78.0,704.4M57.6,699.2 L54.1,721.6M57.6,699.2 L58.7,693.2M68.9,584.4 L69.5,589.1M68.9,584.4 L72.3,582.5M68.9,584.4 L64.2,588.8 L65.6,598.6M68.7,582.1 L72.3,582.5M68.7,582.1 L68.2,575.9M68.7,582.1 L62.9,582.0M72.3,582.5 L68.7,582.1M72.3,582.5 L77.6,580.0 L80.0,577.4M72.3,582.5 L68.9,584.4M-214.8,280.4 L-210.6,283.7 L-206.7,284.3M-214.8,280.4 L-215.9,275.6 L-212.3,272.5 L-204.2,274.1M-214.8,280.4 L-211.2,278.9 L-208.0,279.4M-206.7,288.4 L-206.0,293.1M-206.7,288.4 L-206.7,284.3M-206.7,288.4 L-217.5,289.4M-206.0,293.1 L-205.7,298.8M-206.0,293.1 L-206.7,288.4M-206.0,293.1 L-209.1,293.8M-217.5,289.4 L-206.7,288.4M-217.5,289.4 L-219.2,290.7 L-218.9,292.6 L-217.1,294.0M-205.7,298.8 L-206.0,293.1M-205.7,298.8 L-207.1,306.6M-205.7,298.8 L-214.7,300.2M-209.1,293.8 L-206.0,293.1M-209.1,293.8 L-211.6,294.2M-207.1,306.6 L-209.5,308.6M-207.1,306.6 L-205.7,298.8M-214.7,300.2 L-205.7,298.8M-209.5,308.6 L-207.1,306.6M370.4,36.8 L367.8,35.1M370.4,36.8 L374.2,27.4 L370.8,25.1M367.8,35.1 L370.4,36.8M370.8,25.1 L371.9,20.3M370.8,25.1 L367.8,24.4M370.8,25.1 L374.2,27.4 L370.4,36.8M258.7,207.5 L255.4,211.5M259.3,207.6 L262.6,210.2M255.4,211.5 L258.7,207.5M677.5,88.3 L683.6,84.7M677.5,88.3 L673.8,93.7M677.5,88.3 L684.3,86.2M683.6,84.7 L677.5,88.3M673.8,93.7 L677.5,88.3M673.8,93.7 L671.0,99.0M684.3,86.2 L693.9,85.6 L706.0,81.8M684.3,86.2 L677.5,88.3M720.2,59.0 L722.6,68.2 L722.2,70.3 L719.5,72.3M714.2,73.7 L719.5,72.3M714.2,73.7 L709.3,75.4M714.9,56.8 L713.8,52.6 L718.6,52.7M714.9,56.8 L719.5,56.1M-11.1,640.9 L-10.4,633.7M-11.3,642.3 L-14.5,665.3M-10.4,633.7 L-10.2,631.1M-10.4,633.7 L-11.1,640.9M-12.1,640.8 L-11.5,635.3M-17.4,645.2 L-27.2,635.6M-17.4,645.2 L-15.2,642.9M-27.2,635.6 L-17.4,645.2M-15.2,642.9 L-17.4,645.2M-23.8,651.5 L-25.5,653.1M-56.1,683.0 L-62.6,688.5M-56.1,683.0 L-41.7,669.0M-63.9,-77.1 L-53.1,-73.5M-63.9,-77.1 L-74.4,-81.4 L-84.0,-87.1M-53.1,-73.5 L-48.3,-71.9M-53.1,-73.5 L-53.8,-70.5 L-51.3,-69.3M-53.1,-73.5 L-63.9,-77.1M-78.1,-57.0 L-83.3,-61.6M-83.3,-61.6 L-78.1,-57.0M-147.3,-4.9 L-152.4,-4.2M-147.3,-4.9 L-145.4,-0.3M-147.3,-4.9 L-150.0,-8.7M-152.4,-4.2 L-147.3,-4.9M-152.4,-4.2 L-155.5,-3.6M-152.4,-4.2 L-158.9,-9.5M-145.4,-0.3 L-148.1,0.6M-145.4,-0.3 L-147.3,-4.9M-145.4,-0.3 L-139.9,-3.5 L-136.4,-10.3M-150.0,-8.7 L-154.3,-12.0M-150.0,-8.7 L-150.6,-15.0 L-152.1,-15.0 L-154.3,-12.0M-150.0,-8.7 L-147.3,-4.9M282.0,94.6 L283.0,98.4M287.6,97.9 L283.0,98.4M287.6,97.9 L290.8,97.4 L293.3,98.4M201.5,226.8 L202.7,224.5M201.5,226.8 L198.8,225.5 L2
3807700.2,225.5M202.7,224.5 L208.3,213.6M202.7,224.5 L201.5,226.8M202.7,224.5 L200.2,225.5M200.2,225.5 L198.8,225.5 L201.5,226.8M200.2,225.5 L202.7,224.5M187.9,205.8 L187.6,209.8M189.1,206.0 L187.6,209.8M187.6,209.8 L189.1,206.0M187.6,209.8 L187.9,205.8M197.6,-78.8 L188.9,-76.5M188.9,-76.5 L197.6,-78.8M188.9,-76.5 L188.7,-69.4M188.0,-76.2 L184.8,-75.2M188.7,-69.4 L188.9,-76.5M184.8,-75.2 L188.0,-76.2M211.0,203.6 L207.4,202.1M211.0,203.6 L208.5,208.3 L206.8,207.6M207.4,202.1 L203.2,200.3M207.4,202.1 L211.0,203.6M211.3,202.9 L213.3,198.4 L202.6,193.9 L201.0,197.7M206.8,207.6 L208.5,208.3 L211.0,203.6M256.6,244.9 L255.3,251.2M256.6,244.9 L258.3,240.7M-156.0,215.3 L-160.6,228.8M-156.0,215.3 L-151.7,203.3 L-140.5,187.6M-156.0,215.3 L-149.2,218.1M-140.5,187.6 L-134.1,178.7M-140.5,187.6 L-151.7,203.3 L-156.0,215.3M-140.5,187.6 L-136.0,189.4 L-127.2,189.3M-140.5,187.6 L-147.1,183.9 L-155.2,184.5M-149.2,218.1 L-146.4,218.5M-149.2,218.1 L-156.0,215.3M-162.7,243.1 L-161.4,253.4M-162.7,243.1 L-162.9,236.1 L-160.6,228.8M-161.4,253.4 L-162.7,243.1M-161.4,253.4 L-159.8,264.6M-161.4,253.4 L-164.9,253.4 L-169.1,247.7M-169.1,247.7 L-169.4,245.7 L-166.2,245.6 L-166.5,246.9 L-169.1,247.7M-169.1,247.7 L-166.5,246.9 L-166.2,245.6 L-169.4,245.7 L-169.1,247.7M-169.1,247.7 L-164.9,253.4 L-161.4,253.4M-154.7,264.3 L-149.2,263.8M-154.7,264.3 L-159.8,264.6M-154.7,264.3 L-155.6,250.4M-141.0,290.8 L-142.3,286.1M-141.0,290.8 L-145.0,292.2M-141.0,290.8 L-140.7,297.1 L-142.2,303.5M511.7,575.5 L516.7,572.1M511.7,575.5 L513.0,577.5M516.7,572.1 L526.1,565.5M516.7,572.1 L511.7,575.5M513.0,577.5 L511.7,575.5M526.1,565.5 L516.7,572.1M526.1,565.5 L519.1,560.4M526.1,565.5 L528.0,574.4M519.1,560.4 L510.6,564.4M519.1,560.4 L526.1,565.5M519.1,560.4 L515.7,553.7 L505.2,549.9M528.0,574.4 L526.1,565.5M189.8,252.0 L191.5,248.8M189.8,252.0 L177.5,274.7M180.6,266.1 L176.4,274.3M180.6,266.1 L183.2,261.3M180.6,266.1 L177.5,274.7M235.8,67.9 L228.1,72.3M226.4,60.8 L225.4,66.7 L228.1,72.3M337.8,307.0 L337.9,303.5M337.8,307.0 L325.9,307.6 L321.1,311.5 L320.9,313.4 L322.8,315.6 L331.4,319.4M337.8,307.0 L354.4,307.3M337.8,307.0 L335.9,313.3M337.9,303.5 L337.8,307.0M335.9,313.3 L331.4,319.4M335.9,313.3 L340.2,315.0 L345.1,313.8M335.9,313.3 L337.8,307.0M325.2,327.7 L331.4,319.4M325.2,327.7 L321.7,331.6M-59.0,610.9 L-49.1,616.3M-59.0,610.9 L-73.9,600.6M-59.0,610.9 L-62.0,616.0M-36.8,624.6 L-46.4,634.7M-36.8,624.6 L-49.1,616.3M-36.8,624.6 L-28.6,634.1M505.2,455.0 L503.1,460.5M505.2,455.0 L499.6,452.5 L499.2,447.8 L497.9,445.7 L493.6,445.1M505.2,455.0 L507.0,449.0M503.1,460.5 L505.2,455.0M493.6,445.1 L487.1,442.7M493.6,445.1 L497.9,445.7 L499.2,447.8 L499.6,452.5 L505.2,455.0M493.6,445.1 L491.7,449.2M507.0,449.0 L509.1,441.6M507.0,449.0 L505.2,455.0M487.1,442.7 L493.6,445.1M487.1,442.7 L486.7,443.6 L485.6,443.1 L486.1,442.2 L487.1,442.7M487.1,442.7 L486.1,442.2 L485.6,443.1 L486.7,443.6 L487.1,442.7M491.7,449.2 L493.6,445.1M140.9,625.0 L150.5,638.9M140.9,625.0 L135.5,627.2M140.9,625.0 L144.9,623.1M133.7,627.9 L129.8,629.3M133.7,627.9 L129.2,623.1M155.0,654.7 L148.3,645.0M155.0,654.7 L159.3,650.9 L157.8,646.4 L155.4,644.5 L148.3,645.0M155.0,654.7 L153.9,662.9M455.7,702.1 L455.4,710.1M-155.5,-3.6 L-152.4,-4.2M-155.5,-3.6 L-153.0,1.6M-155.5,-3.6 L-162.0,-7.7M-153.0,1.6 L-152.4,3.9M-153.0,1.6 L-155.5,-3.6M-135.6,79.9 L-143.3,78.8M-135.6,79.9 L-136.9,90.6M-135.9,78.5 L-149.9,36.8 L-151.2,23.9M-143.3,78.8 L-135.6,79.9M-143.3,78.8 L-149.2,76.9M-136.9,90.6 L-138.1,96.4M-136.9,90.6 L-135.
380776,79.9M-138.3,100.1 L-146.0,97.3 L-152.6,93.1M-138.3,100.1 L-138.3,109.7M-138.3,100.1 L-138.1,96.4M-152.6,93.1 L-155.8,91.4M-152.6,93.1 L-146.0,97.3 L-138.3,100.1M-138.3,109.7 L-149.8,106.5 L-160.9,100.4M-138.3,109.7 L-138.3,100.1M-138.1,96.4 L-138.3,100.1M-138.1,96.4 L-136.9,90.6M-138.3,111.0 L-138.4,127.4M-160.9,100.4 L-155.8,91.4M-160.9,100.4 L-167.3,96.7M-160.9,100.4 L-149.8,106.5 L-138.3,109.7M-138.4,127.4 L-145.9,126.4M-138.4,127.4 L-137.8,135.8M-138.4,127.4 L-138.3,111.0M-145.9,126.4 L-149.4,124.8 L-156.7,117.7M-145.9,126.4 L-138.4,127.4M-137.8,135.8 L-130.5,133.8M-137.8,135.8 L-138.4,127.4M571.1,484.2 L569.2,488.3M571.1,484.2 L575.3,485.7M571.1,484.2 L568.6,479.6M569.2,488.3 L571.1,484.2M568.6,479.6 L561.4,481.0M568.6,479.6 L573.2,477.9 L572.9,474.5M568.6,479.6 L566.8,467.9M568.6,479.6 L571.1,484.2M476.9,111.0 L469.3,112.1M476.9,111.0 L483.0,104.2M476.9,111.0 L481.2,116.0M469.3,112.1 L476.9,111.0M481.2,116.0 L476.9,111.0M464.5,98.8 L465.6,100.9M471.6,99.4 L468.9,99.2 L465.6,100.9M463.9,97.7 L467.9,89.8M462.7,96.2 L461.1,94.1M467.9,89.8 L463.9,97.7M457.9,85.2 L458.8,87.9M458.8,87.9 L457.9,85.2M458.8,87.9 L459.8,91.0M422.1,509.1 L422.5,506.6M-173.1,205.4 L-168.3,205.3 L-166.6,207.0M-173.1,205.4 L-179.4,206.5M-173.1,206.3 L-173.1,210.6M-166.6,207.0 L-166.4,209.8M-166.6,207.0 L-168.3,205.3 L-173.1,205.4M-179.4,206.5 L-181.4,212.1M-179.4,206.5 L-182.4,205.7 L-181.6,209.0M-179.4,206.5 L-173.1,205.4M273.1,316.0 L268.0,316.4 L268.5,313.2M118.2,356.4 L114.8,360.5M159.0,333.4 L156.1,331.9M159.0,333.4 L161.0,334.7M159.0,333.4 L161.9,326.2M158.7,324.8 L160.4,320.5M158.7,324.8 L161.9,326.2M158.7,324.8 L156.1,331.9M161.0,334.7 L159.0,333.4M161.0,334.7 L165.4,339.6M161.0,334.7 L164.4,331.1M165.4,339.6 L161.0,334.7M165.4,339.6 L161.9,346.5M164.4,331.1 L161.0,334.7M164.4,331.1 L167.5,330.4 L178.4,340.2 L178.5,342.5 L176.9,344.2M166.4,340.2 L173.5,345.5 L175.4,345.7 L176.9,344.2M176.9,344.2 L175.4,345.7 L173.5,345.5 L166.4,340.2M176.9,344.2 L182.0,349.2 L183.4,357.0M176.9,344.2 L178.5,342.5 L178.4,340.2 L167.5,330.4 L164.4,331.1M183.4,357.0 L182.0,349.2 L176.9,344.2M183.4,357.0 L184.7,359.5M127.6,678.1 L120.8,691.0M127.6,678.1 L133.7,678.8M127.6,678.1 L122.4,675.9M120.8,691.0 L127.6,678.1M120.8,691.0 L116.3,687.0M120.8,691.0 L125.9,694.0M363.9,43.0 L369.3,38.0M363.9,43.0 L372.2,52.3M369.3,38.0 L363.9,43.0M363.6,43.3 L360.6,46.1M371.9,20.3 L370.8,25.1M371.9,20.3 L372.8,13.0M367.8,24.4 L370.8,25.1M352.8,551.4 L369.4,559.0M352.8,551.4 L335.9,543.1 L333.6,536.8 L328.8,539.3M385.7,564.2 L379.1,562.3M385.7,564.2 L393.0,566.9M385.7,564.2 L387.5,559.0 L391.0,557.0M374.2,568.0 L377.8,568.5 L379.1,562.3M393.0,566.9 L407.1,572.1M393.0,566.9 L385.7,564.2M391.0,557.0 L387.5,559.0 L385.7,564.2M407.1,572.1 L411.6,571.8M407.1,572.1 L393.0,566.9M407.1,572.1 L405.1,578.5 L405.9,580.4M411.6,571.8 L407.1,572.1M411.6,571.8 L424.5,571.0M411.6,571.8 L416.3,554.1M405.9,580.4 L413.5,579.6 L415.2,578.2M405.9,580.4 L405.1,578.5 L407.1,572.1M424.5,571.0 L411.6,571.8M424.5,571.0 L425.6,566.0M416.3,554.1 L411.6,571.8M425.2,570.9 L431.1,570.5 L433.7,569.1M425.2,570.9 L425.6,566.0M425.6,566.0 L425.2,570.9M425.6,566.0 L424.5,571.0M434.2,568.7 L436.1,567.0M434.2,568.7 L435.4,572.1M433.7,569.1 L431.1,570.5 L425.2,570.9M436.1,567.0 L434.2,568.7M435.4,572.1 L434.2,568.7M593.3,577.1 L594.9,578.9M599.1,573.3 L594.9,578.9M599.1,573.3 L606.0,574.9M111.2,-14.6 L112.7,-10.1 L121.0,-4.8M738.0,634.5 L728.8,623.8M738.0,634.5 L753.7,619.9M738.0,634.5 L730.1,641.9M743.7,607.7 L736.9,600.0M743.7,607.7 L749.8,614.7M758.0,607.5 L762.4,612.8M758.0,607.5 L764.0,602.0M758.0,607.5 L749.8,614.7M758.0,607.5 L744.8,592.7M736.9,600.0 L743.7,607.7M736.9,600.0 L725.4,603.5M736.9,600.0 L744.8,592.7M744.8,592.7 L758.0,607.5M744.8,592.7 L736.9,600.0M744.8,592.7 L746.4,589.9M-212.9,629.3 L-213.5,633.3M291.0,340.3 L290.2,339.6 L287.5,342.4M70.2,594.4 L70.1,597.8M70.2,594.4 L69.5,589.1M70.2,594.4 L78.2,591.5 L87.2,585.2M475.8,614.3 L477.7,611.2M475.8,614.3 L473.8,618.8M475.8,614.3 L467.1,608.4M475.8,614.3 L485.0,618.4M477.7,611.2 L475.8,614.3M473.8,618.8 L472.3,622.2M473.8,618.8 L475.8,614.3M467.1,608.4 L475.8,614.3M467.1,608.4 L460.3,616.4M467.1,608.4 L480.9,592.6M485.0,618.4 L475.8,614.3M485.0,618.4 L487.9,619.1M472.3,622.2 L470.9,625.8M472.3,622.2 L473.8,618.8M472.3,622.2 L490.6,629.8M470.9,625.8 L472.3,622.2M456.2,649.2 L452.8,648.7M456.6,648.1 L458.3,644.4M452.8,648.7 L456.2,649.2M459.6,687.3 L459.9,694.1M459.0,686.2 L452.8,674.0M459.9,694.1 L457.3,700.7M459.9,694.1 L459.6,687.3M457.3,700.7 L460.3,699.8M457.3,700.7 L459.9,694.1M-111.0,-106.0 L-84.0,-87.1M-50.9,-116.7 L-58.9,-110.8 L-63.4,-109.1 L-75.0,-109.4 L-80.8,-112.2M10.7,411.5 L6.6,410.4 L-3.0,415.2 L-7.7,415.0 L-14.1,411.9M10.7,411.5 L12.9,413.5 L13.5,416.8 L12.3,421.4M3.1,430.1 L11.5,423.4 L12.3,421.4M-14.1,411.9 L-7.7,415.0 L-3.0,415.2 L6.6,410.4 L10.7,411.5M-13.8,410.5 L-8.8,406.1 L-8.6,399.4 L-6.6,395.9M53.1,440.7 L45.5,441.5 L36.0,436.4M42.3,427.6 L33.7,420.8M42.3,427.6 L36.0,436.4M42.3,427.6 L67.3,434.3M564.6,66.3 L567.7,73.2M564.6,66.3 L562.2,61.0 L577.4,60.1M347.6,330.0 L345.1,331.1M193.1,280.4 L201.1,286.9M193.1,280.4 L188.7,285.4 L196.7,292.4M193.1,280.4 L187.5,275.0 L189.8,272.1M201.1,286.9 L193.1,280.4M196.7,292.4 L188.7,285.4 L193.1,280.4M189.8,272.1 L191.3,270.1M189.8,272.1 L187.5,275.0 L193.1,280.4M186.1,261.9 L189.3,263.9M597.1,550.8 L590.7,545.5M444.5,255.9 L444.1,253.6M444.1,253.6 L444.5,255.9M-0.3,637.4 L3.6,637.8 L3.4,639.3 L-0.6,638.9M-0.3,637.4 L1.0,628.8 L2.8,627.9 L4.6,628.6M-0.6,638.9 L3.4,639.3 L3.6,637.8 L-0.3,637.4M-0.
380776,638.9 L-1.4,647.5 L3.2,651.5M4.6,628.6 L2.8,627.9 L1.0,628.8 L-0.3,637.4M3.2,651.5 L-1.4,647.5 L-0.6,638.9M561.4,481.0 L561.2,477.8 L558.9,474.5M561.4,481.0 L551.7,479.6M561.4,481.0 L568.6,479.6M558.9,474.5 L561.2,477.8 L561.4,481.0M475.4,288.5 L468.7,284.5M475.4,288.5 L481.1,292.1M475.4,288.5 L466.0,303.9M494.0,299.8 L496.1,296.0M494.0,299.8 L481.1,292.1M494.0,299.8 L497.0,301.6M495.3,268.2 L492.0,272.9M495.2,267.6 L493.1,265.7M495.9,268.2 L500.5,272.2M502.7,260.2 L500.2,263.0M501.9,257.5 L503.3,259.6M501.9,257.5 L503.3,255.2M531.1,516.4 L533.4,512.9M531.1,516.4 L527.9,521.1M537.8,508.3 L543.7,500.6M536.8,508.2 L533.7,506.0M536.8,508.2 L533.4,512.9M543.7,500.6 L550.0,506.0M543.7,500.6 L549.5,492.0M543.7,500.6 L537.8,508.3M550.0,506.0 L543.7,500.6M550.0,506.0 L556.3,511.5 L563.5,503.2M543.1,500.0 L540.1,497.7M543.1,500.0 L537.0,507.8M543.1,500.0 L548.7,491.7M557.4,497.7 L563.5,503.2M557.4,497.7 L549.5,492.0M545.7,477.5 L546.2,466.3 L544.2,463.9M545.7,477.5 L536.7,472.7 L530.9,467.0M545.7,477.5 L551.7,479.6M479.5,260.1 L476.2,261.0M476.2,261.0 L479.5,260.1M473.2,262.5 L473.5,265.5M472.4,262.0 L463.8,264.4M463.8,264.4 L472.4,262.0M391.0,271.3 L393.3,260.8M362.9,262.8 L364.0,259.9M362.2,263.1 L355.3,260.2M355.3,260.2 L362.2,263.1M355.5,259.7 L357.0,255.2M345.0,255.0 L347.6,256.3M345.0,255.0 L341.5,253.3M344.7,255.6 L340.2,264.5M347.6,256.3 L350.3,257.6M347.6,256.3 L345.0,255.0M336.7,250.9 L340.4,252.7M336.7,250.9 L333.9,249.5M336.4,251.4 L331.9,260.5M333.9,249.5 L336.7,250.9M333.9,248.7 L337.0,240.1M312.7,242.0 L315.6,242.6M312.7,242.0 L310.0,241.6M312.6,242.7 L311.5,246.8M315.6,242.6 L312.7,242.0M310.0,241.6 L312.7,242.0M296.0,241.7 L293.6,247.8M295.9,240.4 L29
380771.4,239.7M270.7,233.4 L267.8,232.0M270.3,234.2 L266.8,240.2M267.8,232.0 L270.7,233.4M263.0,230.4 L261.6,233.4M514.6,422.2 L512.2,430.5M507.3,429.3 L512.2,430.5M-158.9,-9.5 L-152.4,-4.2M-154.3,-12.0 L-150.0,-8.7M-154.3,-12.0 L-152.1,-15.0 L-150.6,-15.0 L-150.0,-8.7M-154.3,-12.0 L-163.2,-16.1M-163.2,-16.1 L-165.3,-12.0M-163.2,-16.1 L-170.5,-20.0M-163.2,-16.1 L-154.3,-12.0M-163.2,-16.1 L-159.7,-21.0 L-155.6,-24.3M-165.3,-12.0 L-163.2,-16.1M-170.5,-20.0 L-163.2,-16.1M-155.6,-24.3 L-159.7,-21.0 L-163.2,-16.1M-69.0,213.3 L-72.7,199.5M-69.0,213.3 L-73.9,214.0M-69.0,213.3 L-62.1,210.6M-74.8,208.2 L-75.3,205.6 L-76.1,205.5 L-76.1,208.1 L-74.8,208.2M-74.8,208.2 L-76.1,208.1 L-76.1,205.5 L-75.3,205.6 L-74.8,208.2M-74.8,208.2 L-73.9,214.0M517.8,410.5 L518.7,407.4M505.4,566.2 L507.1,568.6M505.4,566.2 L510.6,564.4M505.4,566.2 L502.0,566.7M507.1,568.6 L509.8,572.9M507.1,568.6 L505.4,566.2M510.6,564.4 L519.1,560.4M510.6,564.4 L505.4,566.2M502.0,566.7 L505.4,566.2M505.2,549.9 L499.8,549.5M505.2,549.9 L505.3,560.6M505.2,549.9 L515.7,553.7 L519.1,560.4M403.1,365.1 L405.6,368.3M403.1,365.1 L399.7,369.1M403.1,365.1 L405.8,360.7M405.6,368.3 L403.1,365.1M405.6,368.3 L406.1,369.8 L410.5,372.0 L410.6,370.8 L405.6,368.3M405.6,368.3 L410.6,370.8 L410.5,372.0 L406.1,369.8 L405.6,368.3M680.3,156.7 L683.1,153.7M680.3,156.7 L688.7,164.0M680.3,156.7 L668.1,146.8M402.1,260.9 L401.8,253.6M402.1,260.9 L393.3,260.8M402.1,260.9 L402.5,270.7M401.8,253.6 L402.1,260.9M402.5,270.7 L402.1,260.9M156.6,344.0 L161.9,346.5M238.6,223.2 L246.5,225.3M246.5,225.3 L238.6,223.2M491.1,407.9 L494.3,408.9M491.1,407.9 L490.7,403.6 L495.7,404.0M491.1,407.9 L489.9,410.8 L489.0,410.5M489.0,410.5 L489.9,410.8 L491.1,407.9M629.7,446.2 L625.0,445.9M631.6,545.4 L623.7,567.7M631.6,545.4 L637.9,548.6M623.7,567.7 L630.6,574.0M623.7,567.7 L631.6,545.4M623.7,567.7 L618.2,562.9 L617.5,558.7 L621.0,548.3 L629.0,544.9M657.9,162.7 L654.8,163.1M657.9,162.7 L653.1,172.6M657.9,162.7 L665.8,158.6M654.8,163.1 L657.9,162.7M654.8,163.1 L646.5,166.2 L640.4,166.3 L636.1,168.9 L632.2,168.9M653.1,172.6 L657.9,162.7M144.9,623.1 L156.4,635.2M144.9,623.1 L139.9,617.9M144.9,623.1 L150.3,620.4M144.9,623.1 L140.9,625.0M156.4,635.2 L144.9,623.1M156.4,635.2 L150.5,638.9M156.4,635.2 L163.3,633.7M139.9,617.9 L144.9,623.1M139.9,617.9 L143.3,613.5M139.9,617.9 L129.2,623.1M80.3,339.9 L81.8,349.6M80.3,339.9 L84.3,333.0 L89.3,329.5M80.3,339.9 L74.6,338.3 L70.2,333.9M76.9,310.0 L70.1,309.6M76.9,310.0 L79.4,302.3 L74.6,300.9M76.9,310.0 L76.9,314.3 L78.5,317.5 L89.3,329.5M468.8,128.2 L474.5,122.3M447.9,121.2 L450.2,123.3M447.9,121.2 L444.4,124.9M447.9,121.2 L453.3,115.5M629.0,544.9 L621.0,548.3 L617.5,558.7 L618.2,562.9 L623.7,567.7M518.1,196.2 L511.3,204.6M518.1,196.2 L512.8,195.3 L510.0,197.3 L507.5,201.4M622.8,700.1 L625.8,713.8M622.8,700.1 L621.2,693.1M622.8,700.1 L616.5,700.7M625.8,713.8 L622.8,700.1M625.8,713.8 L625.8,720.0 L620.9,727.8 L613.5,750.5M621.2,693.1 L622.8,700.1M621.2,693.1 L620.5,689.7M446.3,-81.4 L459.5,-84.8M446.3,-81.4 L450.1,-77.9 L450.1,-73.8M445.8,-81.2 L440.4,-79.6M459.5,-84.8 L469.5,-85.9M459.5,-84.8 L446.3,-81.4M450.1,-73.8 L450.1,-77.9 L446.3,-81.4M426.5,560.1 L430.1,560.1M426.5,560.1 L425.2,555.3M426.5,560.1 L426.2,563.2M430.1,560.1 L426.5,560.1M425.2,555.3 L426.5,560.1M426.2,563.2 L426.5,560.1M421.9,549.8 L420.4,547.0M420.4,547.0 L418.5,544.2M420.4,547.0 L421.9,549.8M420.7,550.5 L418.7,552.5M418.5,544.2 L420.4,547.0M502.4,437.4 L503.5,432.3 L497.0,430.1M502.4,437.4 L500.4,442.2 L494.3,440.7M502.4,437.4 L509.7,439.4M497.0,430.1 L489.2,428.0M497.0,430.1 L503.5,432.3 L502.4,437.4M494.3,440.7 L500.4,442.2 L502.4,437.4M494.3,440.7 L485.6,438.4M617.7,429.1 L618.3,434.1M618.3,434.1 L616.3,437.8M618.3,434.1 L617.7,429.1M382.5,386.7 L377.6,381.7M382.5,386.7 L377.6,390.4 L380.2,395.9 L384.4,395.7M382.5,386.7 L384.4,390.4 L384.4,395.7M377.6,381.7 L375.7,384.0M377.6,381.7 L382.5,386.7M377.6,381.7 L374.2,379.8M191.0,-30.4 L187.9,-29.7M191.0,-30.4 L197.4,-6.4M191.0,-30.4 L198.8,-32.5M187.9,-29.7 L191.0,-30.4M187.9,-29.7 L177.1,-28.3M197.4,-6.4 L191.0,-30.4M198.8,-32.5 L202.5,-34.2M198.8,-32.5 L205.2,-17.2 L208.4,-15.6 L211.3,-15.9 L213.6,-17.9M198.8,-32.5 L191.0,-30.4M163.6,609.3 L166.3,606.9M163.6,609.3 L159.4,613.2M163.6,609.3 L177.0,623.4M163.6,609.3 L157.3,602.8 L151.7,601.9 L149.0,602.7M149.0,602.7 L159.4,613.2M149.0,602.7 L151.7,601.9 L157.3,602.8 L163.6,609.3M149.0,602.7 L146.2,608.2M177.0,623.4 L178.1,629.2 L177.0,631.3M177.0,623.4 L163.6,609.3M137.6,-61.4 L141.1,-53.8 L141.1,-49.5M141.1,-49.5 L147.7,-48.2M141.1,-49.5 L141.1,-53.8 L137.6,-61.4M141.1,-49.5 L130.3,-48.8M147.7,-48.2 L141.1,-49.5M147.7,-48.2 L156.9,-52.6M147.7,-48.2 L149.6,-44.6M130.3,-48.8 L120.0,-42.5M130.3,-48.8 L141.1,-49.5M652.4,499.5 L650.7,492.1M652.4,499.5 L652.3,501.8 L654.5,504.9 L661.4,507.4M270.2,107.3 L268.5,100.2M268.5,100.2 L267.9,97.8M268.5,100.2 L270.2,107.3M660.9,-1.0 L666.0,-4.9M660.9,-1.0 L655.0,3.4M650.3,-3.9 L655.0,3.4M-23.2,690.6 L-29.5,689.3M-224.1,223.7 L-217.5,223.5M-215.9,238.2 L-217.2,244.6M-215.9,238.2 L-209.8,238.6M-215.9,238.2 L-217.5,223.5M551.7,-53.8 L548.3,-53.9 L546.1,-51.7 L541.2,-52.1 L539.7,-54.2 L540.1,-61.3M551.7,-53.8 L556.3,-54.9 L562.5,-63.0M551.7,-53.8 L549.5,-43.7M551.7,-53.8 L558.0,-68.6 L557.4,-74.2M540.1,-61.3 L539.7,-54.2 L541.2,-52.1 L546.1,-51.7 L548.3,-53.9 L551.7,-53.8M562.5,-63.0 L556.3,-54.9 L551.7,-53.8M549.5,-43.7 L551.7,-53.8M557.4,-74.2 L558.0,-68.6 L551.7,-53.8M418.0,222.0 L416.3,229.5M418.0,222.0 L419.0,217.4M418.0,222.0 L435.3,225.9M416.3,229.5 L418.0,222.0M416.3,229.5 L415.6,232.8M435.3,225.9 L438.2,226.5M435.3,225.9 L418.0,222.0M46.4,399.9 L48.3,398.1 L55.9,400.6 L56.5,401.8 L52.2,404.2 L47.0,402.2M47.0,402.2 L52.2,404.2 L56.5,401.8 L55.9,400.6 L48.3,398.1 L46.4,399.9M39.9,404.6 L38.7,409.3 L39.3,411.6 L43.6,414.2M39.9,404.6 L43.1,400.2M38.1,404.0 L35.2,403.4M38.1,404.0 L35.4,402.7M43.6,414.2 L39.3,411.6 L38.7,409.3 L39.9,404.6M43.1,400.2 L39.9,404.6M336.0,42.8 L342.1,49.4M336.0,42.8 L329.0,49.3M342.1,49.4 L336.0,42.8M329.0,49.3 L336.0,42.8M722.7,650.0 L717.3,643.7M722.7,650.0 L730.1,641.9M722.7,650.0 L715.7,657.5 L712.3,654.5M712.3,654.5 L715.7,657.5 L722.7,650.0M712.3,654.5 L700.6,640.9M728.8,623.8 L738.0,634.5M728.8,623.8 L721.4,615.2M774.5,602.8 L762.4,612.8M774.5,602.8 L789.1,591.0 L789.7,586.9 L786.3,582.7M774.5,602.8 L769.7,597.1M769.7,597.1 L773.1,594.1M769.7,597.1 L764.0,602.0M769.7,597.1 L746.3,569.9M769.7,597.1 L774.5,602.8M783.1,585.6 L781.2,587.2M783.1,585.6 L786.3,582.7M362.0,265.0 L358.6,272.9M365.1,275.6 L358.6,272.9M462.9,245.7 L462.7,250.4M463.0,245.0 L463.5,238.8M455.4,244.6 L462.9,245.4M463.5,238.8 L463.0,245.0M463.5,238.8 L456.5,241.0 L455.1,244.2M455.1,244.2 L456.5,241.0 L463.5,238.8M296.0,248.5 L293.6,247.8M296.0,266.1 L304.9,269.3M296.0,266.1 L287.8,263.1M286.4,288.0 L286.5,290.4M285.8,299.1 L284.5,301.8 L280.6,302.9M285.8,299.1 L285.2,303.9M285.8,299.1 L286.6,294.1M280.6,302.9 L285.2,303.9M280.6,302.9 L284.5,301.8 L285.8,299.1M280.6,302.9 L237.8,304.2 L215.2,313.4 L204.5,314.0 L194.2,313.3 L186.3,311.2 L182.3,307.4 L177.9,299.4 L172.3,295.9M285.2,303.9 L280.6,302.9M285.2,303.9 L285.8,299.1M285.2,303.9 L286.8,299.3M285.2,303.9 L290.3,305.8M286.6,294.1 L282.7,294.1M286.6,294.1 L285.8,299.1M286.6,294.1 L286.9,297.0M443.7,284.3 L436.5,287.0M443.7,284.3 L441.7,277.6M443.7,284.3 L446.4,291.6M436.5,287.0 L443.7,284.3M436.5,287.0 L434.7,289.1M441.7,277.6 L443.7,284.3M-84.4,206.3 L-83.7,208.9M34.2,668.7 L37.9,675.3M3.5,651.7 L5.5,653.4M3.8,651.3 L8.5,643.9M5.5,653.4 L3.5,651.7M-183.0,218.5 L-186.5,218.2M-183.0,218.5 L-181.6,212.8M-183.0,218.5 L-183.0,223.8M-186.5,218.2 L-183.0,218.5M-183.0,223.8 L-183.0,218.5M675.3,749.1 L683.4,746.2M675.3,749.1 L671.7,750.3M675.3,749.1 L678.1,757.2M675.3,749.1 L672.2,741.7M671.7,750.3 L675.3,749.1M425.9,316.8 L423.2,314.2M425.9,316.8 L432.7,321.7M53.5,588.6 L53.5,600.9M53.5,588.6 L57.0,584.4 L62.9,582.0M48.2,602.0 L45.8,602.4M48.2,602.0 L53.5,600.9M68.2,575.9 L68.7,582.1M62.9,582.0 L57.0,584.4 L53.5,588.6M62.9,582.0 L68.7,582.1M100.7,558.0 L97.0,566.1M100.7,558.0 L95.4,546.4 L96.3,544.9 L99.1,544.4M100.7,558.0 L102.3,552.0 L99.1,544.4M99.1,544.4 L96.3,544.9 L95.4,546.4 L100.7,558.0M99.1,544.4 L102.3,552.0 L100.7,558.0M437.9,131.8 L435.4,134.6M434.0,133.5 L424.3,129.1M415.7,155.0 L413.5,157.3M415.7,155.0 L418.0,152.7M407.1,152.1 L404.8,150.0M407.1,152.1 L413.5,157.3M613.5,750.5 L610.7,760.4 L611.2,771.2M613.5,750.5 L620.9,727.8 L625.8,720.0 L625.8,713.8M-181.4,212.1 L-179.4,206.5M-171.4,217.7 L-173.6,215.5 L-181.6,212.8M-171.4,217.7 L-166.6,225.3M529.2,227.3 L536.4,233.6M529.4,226.6 L534.7,220.5M528.7,227.5 L524.9,232.0M488.7,193.1 L481.2,186.7M488.7,193.1 L514.7,214.9M489.3,191.4 L476.7,181.3 L476.0,179.3M489.3,191.4 L496.2,186.8 L501.0,181.8M514.7,214.9 L518.5,218.1M514.7,214.9 L488.7,193.1M-208.0,279.4 L-211.2,278.9 L-214.8,280.4M487.1,113.5 L493.2,116.5M491.2,123.0 L492.8,125.4M491.2,123.0 L493.2,120.6 L493.2,116.5M491.2,123.0 L486.8,123.4 L482.8,125.8M227.2,-1.6 L233.0,5.9M227.2,-1.6 L227.9,-3.5 L230.4,-3.2 L235.9,3.1M233.0,5.9 L227.2,-1.6M233.0,5.9 L235.9,3.1M233.0,5.9 L229.7,9.8M235.9,3.1 L233.0,5.9M235.9,3.1 L230.4,-3.2 L227.9,-3.5 L227.2,-1.6M463.3,148.1 L456.1,141.5M365.1,126.4 L360.2,131.3M365.1,126.4 L362.9,123.8M360.2,131.3 L365.1,126.4M360.2,131.3 L362.8,137.3M362.9,123.8 L365.1,126.4M362.9,123.8 L353.1,132.8M365.6,126.9 L367.4,129.0M362.8,137.3 L360.2,131.3M222.9,123.8 L220.8,111.3M222.9,123.8 L220.4,130.4 L210.5,141.1M220.8,111.3 L222.9,123.8M210.5,141.1 L220.4,130.4 L222.9,123.8M723.7,44.8 L716.5,45.9 L717.3,48.8M717.3,48.8 L718.6,52.7M717.3,48.8 L716.5,45.9 L723.7,44.8M394.7,222.1 L391.8,220.1M394.7,222.1 L400.4,225.9M638.5,469.8 L644.3,468.7M638.5,469.8 L644.9,476.6M638.5,469.8 L633.3,468.6 L622.0,472.9 L618.5,476.2 L616.9,481.7M644.3,468.7 L646.0,468.7 L646.3,467.1M644.3,468.7 L646.3,467.1M644.3,468.7 L638.5,469.8M644.9,476.6 L647.5,477.8 L649.1,480.7 L649.1,486.4 L647.7,488.7M644.9,476.6 L638.5,469.8M616.9,481.7 L618.5,476.2 L622.0,472.9 L633.3,468.6 L638.5,469.8M616.9,481.7 L610.7,483.0 L602.0,487.0M616.9,481.7 L636.4,481.8 L640.3,483.2 L647.7,488.7M646.3,467.1 L644.3,468.7M646.3,467.1 L646.0,468.7 L644.3,468.7M219.9,81.8 L225.3,86.3M-106.9,342.1 L-109.5,348.5M-106.9,342.1 L-101.5,346.1M-106.9,342.1 L-115.8,338.7 L-126.2,331.7 L-131.3,330.1 L-137.2,330.6M-134.1,178.7 L-140.5,187.6M-134.1,178.7 L-129.5,172.5M-134.1,178.7 L-136.8,176.4M-128.0,170.3 L-129.5,172.5M-128.0,170.3 L-127.4,166.8M-136.8,176.4 L-134.1,178.7M-155.2,184.5 L-157.0,177.3M-155.2,184.5 L-162.6,186.0M-155.2,184.5 L-147.1,183.9 L-140.5,187.6M298.6,380.5 L298.6,384.5 L302.4,387.4M302.4,387.4 L298.6,384.5 L298.6,380.5M302.4,387.4 L304.1,388.0 L306.9,384.2M263.3,495.4 L260.7,500.2M290.1,481.5 L302.1,477.4M290.1,481.5 L270.9,485.7 L263.6,494.7M290.1,481.5 L285.6,474.4M302.1,477.4 L290.1,481.5M285.6,474.4 L290.1,481.5M285.6,474.4 L283.6,471.2 L275.6,465.2M308.8,474.1 L311.9,474.4M308.8,474.1 L303.3,476.6M308.7,480.7 L311.9,474.4M308.7,480.7 L300.1,498.1M352.8,474.3 L346.7,476.3M352.8,474.3 L353.7,482.2 L351.8,504.9 L348.9,506.8M353.4,474.0 L355.7,472.9M346.7,476.3 L352.8,474.3M346.7,476.3 L343.1,477.5M348.9,506.8 L351.8,504.9 L353.7,482.2 L352.8,474.3M113.7,636.5 L122.4,649.2M113.7,636.5 L116.2,635.1M113.7,636.5 L111.1,638.4M307.6,126.3 L310.6,125.3M310.6,125.3 L307.8,122.4M310.6,125.3 L307.6,126.3M310.6,125.3 L314.4,127.9M548.9,429.0 L542.3,425.2 L543.2,420.7M-206.4,70.6 L-212.7,72.9 L-217.7,72.9M-219.8,79.5 L-219.8,83.7M-219.8,79.5 L-217.7,72.9M-219.8,79.5 L-220.9,83.7M460.3,616.4 L457.9,619.4M460.3,616.4 L467.1,608.4M480.9,592.6 L467.1,608.4M480.9,592.6 L484.1,586.0M480.9,592.6 L482.6,599.8M202.5,-34.2 L198.8,-32.5M202.5,-34.2 L209.9,-38.1M213.6,-17.9 L211.3,-15.9 L208.4,-15.6 L205.2,-17.2 L198.8,-32.5M177.1,-28.3 L187.9,-29.7M177.1,-28.3 L160.5,-35.1M177.1,-28.3 L172.1,-22.5M160.5,-35.1 L157.8,-35.8M160.5,-35.1 L177.1,-28.3M172.1,-22.5 L168.5,-18.7M172.1,-22.5 L177.1,-28.3M157.8,-35.8 L160.5,-35.1M154.5,-35.0 L149.6,-44.6M154.5,-35.0 L157.3,-35.8M154.0,-34.7 L151.2,-32.3M149.6,-44.6 L154.5,-35.0M149.6,-44.6 L147.7,-48.2M157.3,-35.8 L154.5,-35.0M92.5,42.5 L102.5,30.2M92.5,42.5 L86.4,50.7 L87.9,55.7M92.5,42.5 L85.5,36.5M81.5,65.6 L89.7,59.1M81.5,65.6 L78.2,68.3M87.9,55.7 L89.7,59.1M87.9,55.7 L86.4,50.7 L92.5,42.5M722.1,533.4 L725.5,530.6M774.9,579.6 L781.2,587.2M544.2,463.9 L546.2,466.3 L545.7,477.5M544.2,463.9 L533.2,465.5 L530.9,467.0M530.9,467.0 L533.2,465.5 L544.2,463.9M530.9,467.0 L536.7,472.7 L545.7,477.5M572.9,474.5 L573.2,477.9 L568.6,479.6M566.8,467.9 L568.6,479.6M566.8,467.9 L571.6,466.5M718.2,77.8 L714.6,81.3M706.0,81.8 L710.5,89.7M706.0,81.8 L711.7,79.5 L714.6,81.3M706.0,81.8 L693.9,85.6 L684.3,86.2M520.8,429.3 L522.7,425.8M515.5,421.8 L522.7,425.8M515.1,420.8 L516.6,415.5M463.3,422.0 L460.2,417.6M463.3,422.0 L456.3,426.9M463.3,422.0 L469.2,417.8M463.3,422.0 L476.2,439.6 L477.0,444.8M461.1,405.9 L469.2,417.8M456.3,426.9 L449.9,431.2M456.3,426.9 L463.3,422.0M456.3,426.9 L469.4,443.7M449.9,431.2 L451.6,433.9M449.9,431.2 L443.9,435.4M449.9,431.2 L456.3,426.9M469.4,443.7 L472.7,445.0 L477.0,444.8M469.4,443.7 L456.3,426.9M451.6,433.9 L449.9,431.2M443.9,435.4 L449.9,431.2M651.8,13.4 L661.9,16.3M651.8,13.4 L644.3,11.1M641.9,12.9 L644.3,11.1M641.9,12.9 L631.1,21.8 L624.9,31.9M72
380771.6,15.3 L724.1,14.1 L726.7,15.0M720.6,15.8 L710.8,17.2M75.8,596.4 L91.6,586.5M75.8,596.4 L70.1,597.8M-48.3,-71.9 L-53.1,-73.5M-48.3,-71.9 L-45.4,-74.1M-48.3,-71.9 L-27.0,-62.9 L-9.3,-49.5M-45.4,-74.1 L-48.3,-71.9M-9.3,-49.5 L1.7,-40.1M-9.3,-49.5 L-12.6,-45.3M-9.3,-49.5 L-27.0,-62.9 L-48.3,-71.9M1.7,-40.1 L3.9,-38.2M1.7,-40.1 L-9.3,-49.5M3.9,-38.2 L1.7,-40.1M3.9,-38.2 L6.3,-36.1M2.3,-41.4 L6.3,-36.1M2.3,-41.4 L-1.0,-45.5M71.6,43.3 L75.0,58.0M71.6,43.3 L67.6,28.1M381.9,175.8 L387.0,180.4M381.9,175.8 L372.5,186.4M381.9,175.8 L381.8,169.7 L379.5,166.4 L379.9,162.4 L381.4,160.8M387.0,180.4 L392.0,184.9M387.0,180.4 L381.9,175.8M387.0,180.4 L376.6,192.0M387.0,180.4 L391.2,171.6M372.5,186.4 L381.9,175.8M372.5,186.4 L361.4,199.1M372.5,186.4 L376.6,192.0M372.5,186.4 L368.4,182.7 L359.0,190.9M381.4,160.8 L387.0,161.3 L390.1,168.0M381.4,160.8 L379.9,162.4 L379.5,166.4 L381.8,169.7 L381.9,175.8M376.6,192.0 L381.7,196.6M376.6,192.0 L387.0,180.4M376.6,192.0 L366.3,203.6M376.6,192.0 L372.5,186.4M391.2,171.6 L398.4,177.8M391.2,171.6 L390.1,168.0M391.2,171.6 L387.0,180.4M409.1,415.0 L413.1,414.8M409.1,415.0 L406.7,416.6 L408.9,420.7M409.1,415.0 L403.2,410.5M413.1,414.8 L409.1,415.0M413.1,414.8 L415.0,417.8 L416.7,416.3M413.1,414.8 L414.7,412.7M408.9,420.7 L406.7,416.6 L409.1,415.0M408.9,420.7 L406.6,422.5 L407.8,424.2 L410.0,422.5 L408.9,420.7M408.9,420.7 L410.0,422.5 L407.8,424.2 L406.6,422.5 L408.9,420.7M403.2,410.5 L403.2,408.2 L400.3,405.0M403.2,410.5 L396.9,410.9M403.2,410.5 L409.1,415.0M-94.4,622.5 L-97.6,625.3M-97.6,625.3 L-94.4,622.5M-97.6,625.3 L-100.5,636.2 L-102.3,638.4M407.1,547.8 L407.1,550.2M407.1,550.2 L407.1,547.8M349.3,201.9 L359.0,190.9M449.3,375.7 L457.7,377.8M676.9,182.7 L680.9,179.3M-155.8,91.4 L-160.9,100.4M-155.8,91.4 L-152.6,93.1M-155.8,91.4 L-163.0,87.5M-163.0,87.5 L-171.9,82.7M-163.0,87.5 L-155.8,91.4M-167.3,96.7 L-160.9,100.4M521.9,235.4 L518.0,239.9M521.9,235.4 L526.8,239.5M521.9,235.4 L524.9,232.0M526.8,239.5 L521.9,235.4M526.8,239.5 L529.4,241.5M524.9,232.0 L521.9,235.4M524.9,232.0 L528.7,227.5M-134.3,625.6 L-130.5,632.9M70.1,597.8 L70.2,594.4M70.1,597.8 L65.6,598.6M70.1,597.8 L75.8,596.4M79.3,616.9 L81.8,626.2M85.3,617.1 L79.3,616.7M85.3,617.1 L97.7,618.0M406.9,-90.5 L407.1,-84.8M406.9,-90.5 L405.6,-95.0M-145.9,269.5 L-148.6,267.6 L-149.2,263.8M-145.9,269.5 L-149.0,273.5 L-147.9,274.4M324.7,275.4 L323.0,274.7 L320.7,278.6 L318.5,279.8M318.5,279.8 L320.7,278.6 L323.0,274.7 L324.7,275.4M274.8,274.5 L278.5,268.0M439.6,303.1 L437.2,296.2M439.6,303.1 L442.0,309.6M439.6,303.1 L429.5,307.3M434.9,289.6 L437.0,295.6M-166.6,225.3 L-171.4,217.7M-168.4,218.7 L-162.4,220.7 L-166.3,225.7M414.7,412.7 L412.3,410.8M414.7,412.7 L413.1,414.8M414.7,412.7 L416.8,408.6M412.3,410.8 L414.7,412.7M416.8,408.6 L413.9,406.4M416.8,408.6 L418.8,410.0M416.8,408.6 L414.7,412.7M416.8,408.6 L420.0,406.1M-10.1,-64.3 L-15.7,-69.7 L-22.0,-73.2M-10.1,-64.3 L-2.5,-69.2M-9.4,-63.3 L-5.5,-54.7M300.1,498.1 L308.7,480.7M299.4,499.5 L295.9,506.8M401.2,94.0 L389.9,82.0M384.3,87.7 L389.9,82.0M523.1,248.7 L529.4,241.5M523.0,249.3 L525.5,254.0M250.3,485.6 L253.9,487.5M251.4,376.0 L253.6,373.8M251.4,376.0 L249.4,377.9 L243.1,379.0M325.3,196.8 L326.9,192.5M325.3,196.8 L320.8,196.9 L316.0,200.5M325.3,196.8 L330.0,201.5M413.9,59.3 L408.9,64.0M413.9,59.3 L417.8,63.5 L415.2,64.8M408.9,64.0 L413.9,59.3M408.9,64.0 L415.4,70.4M415.2,64.8 L417.8,63.5 L413.9,59.3M407.8,64.9 L404.4,68.2M415.4,70.4 L408.9,64.0M384.8,88.6 L387.1,93.1M387.1,93.1 L385.9,97.8M387.1,93.1 L384.8,88.6M674.9,-81.7 L668.2,-78.2M674.9,-81.7 L687.9,-90.7M674.9,-81.7 L679.4,-74.6M668.2,-78.2 L674.9,-81.7M687.9,-90.7 L689.7,-92.6M687.9,-90.7 L674.9,-81.7M679.4,-74.6 L674.9,-81.7M679.4,-74.6 L673.8,-72.5M-112.7,270.9 L-109.8,264.7M-112.7,270.9 L-116.0,273.3M734.6,72.8 L738.4,76.9M745.9,67.1 L738.4,76.9M306.6,198.8 L299.1,194.6M306.6,198.8 L316.2,188.7M306.6,198.8 L309.6,200.4 L316.0,200.5M299.1,194.6 L306.6,198.8M299.1,194.6 L297.3,197.7 L294.7,198.8M299.1,194.6 L293.7,190.7 L292.6,188.0 L293.6,186.5M-129.0,207.1 L-127.6,210.4M-129.0,207.1 L-114.4,200.9M-129.0,207.1 L-131.1,204.3M-8.6,209.1 L9.1,219.9M-8.6,209.1 L-18.3,204.6 L-72.7,199.5M25.9,223.1 L31.1,223.9M25.9,223.1 L22.4,222.4M31.1,223.9 L25.9,223.1M22.4,222.4 L25.9,223.1M22.4,222.4 L19.2,221.9M31.3,224.0 L36.1,224.7M36.1,224.7 L31.3,224.0M36.1,224.7 L42.1,225.8 L48.5,229.3M677.2,-11.9 L683.2,-6.6M677.2,-11.9 L680.2,-18.0 L680.6,-25.8M683.2,-6.6 L677.2,-11.9M683.2,-6.6 L687.9,-4.4 L703.6,-6.2 L707.5,-9.8 L706.6,-13.4M676.0,-11.5 L670.3,-7.8M680.6,-25.8 L680.2,-18.0 L677.2,-11.9M680.6,-25.8 L678.6,-28.2 L676.7,-35.1M703.7,-15.8 L706.6,-13.4M706.6,-13.4 L703.7,-15.8M706.6,-13.4 L707.5,-9.8 L703.6,-6.2 L687.9,-4.4 L683.2,-6.6M449.6,241.2 L449.4,243.8M449.4,243.8 L449.6,241.2M449.5,244.2 L454.7,244.6M673.9,212.9 L682.7,206.8 L682.1,202.3 L684.3,201.8 L685.1,206.2 L687.0,205.9 L687.7,207.0M478.1,483.7 L478.7,486.2M478.1,483.7 L478.1,480.6M478.1,483.7 L474.1,482.8M478.7,486.2 L478.1,483.7M478.7,486.2 L481.1,493.6 L480.6,495.8M478.7,486.2 L483.7,492.9M474.1,482.8 L470.2,482.7M474.1,482.8 L478.1,483.7M465.6,482.6 L469.0,482.7M469.0,482.7 L465.6,482.6M548.3,344.0 L553.5,351.1M559.3,358.9 L555.7,361.7M559.3,358.9 L554.0,351.9M559.3,358.9 L562.1,362.5 L565.7,359.8M555.7,361.7 L546.8,368.1 L544.1,364.9 L553.0,357.9M555.7,361.7 L559.3,358.9M554.0,351.9 L559.3,358.9M548.7,342.7 L545.2,334.6M361.4,199.1 L372.5,186.4M361.4,199.1 L357.0,204.7M366.3,203.6 L376.6,192.0M366.3,203.6 L364.7,206.7M373.8,205.3 L381.7,196.6M373.8,205.3 L371.9,208.5M138.8,662.4 L137.6,660.0M138.8,662.4 L131.3,661.6M138.8,662.4 L144.1,669.2 L151.0,669.7M153.9,662.9 L146.8,653.7M153.9,662.9 L154.1,667.9 L151.
380770,669.7M153.9,662.9 L155.0,654.7M22.5,512.2 L24.9,509.2M428.7,169.9 L426.4,167.9M428.7,169.9 L432.2,166.4M426.4,167.9 L428.7,169.9M10.4,389.5 L8.7,384.3M478.8,257.4 L478.9,248.7M478.9,248.7 L475.3,248.5 L474.1,246.5M478.9,248.7 L478.8,257.4M583.1,299.8 L585.0,302.2M585.0,302.2 L583.1,299.8M585.0,310.9 L582.0,313.0M585.0,310.9 L589.1,307.7M592.7,305.1 L589.1,307.7M592.7,305.1 L598.3,300.9M587.1,305.1 L585.5,303.0M587.1,305.1 L589.1,307.7M607.8,337.7 L610.3,336.0M607.8,337.7 L603.1,341.3 L598.5,335.3M615.5,332.1 L610.3,336.0M615.5,332.1 L619.3,329.2M-128.9,183.0 L-127.2,189.3M-86.7,187.6 L-96.4,188.6M499.8,549.5 L505.2,549.9M505.3,560.6 L505.2,549.9M350.6,365.3 L317.9,401.3 L305.5,394.0 L286.9,410.6 L279.3,419.7 L287.0,427.4 L284.3,431.0M351.9,365.7 L357.9,372.5M349.9,363.3 L340.3,353.2M349.9,363.3 L335.7,350.4M284.3,431.0 L287.0,427.4 L279.3,419.7 L286.9,410.6 L305.5,394.0 L317.9,401.3 L350.6,365.3M540.4,339.4 L542.2,344.0M540.0,339.6 L535.7,343.2M542.2,344.0 L543.4,346.5M542.2,344.0 L540.4,339.4M535.7,343.2 L540.0,339.6M474.1,246.5 L475.3,248.5 L478.9,248.7M-54.0,668.4 L-57.2,668.3 L-60.4,664.5M674.9,652.4 L668.0,666.6 L671.7,668.5M-221.4,249.7 L-222.3,251.8 L-223.7,251.9 L-222.8,248.8M-221.4,249.7 L-219.9,248.4 L-220.4,247.4 L-222.8,248.8M492.8,125.4 L491.2,123.0M657.9,581.0 L658.7,578.2M656.9,581.0 L652.5,580.9M658.7,578.2 L657.9,581.0M97.7,618.4 L98.3,622.0M85.4,617.5 L87.3,624.8M67.1,615.9 L70.5,629.2M-47.5,360.3 L-44.6,362.0M-47.5,360.3 L-50.8,366.7M-47.5,360.3 L-52.2,351.6M-44.6,362.0 L-47.5,360.3M-44.6,362.0 L-41.9,363.6M-50.8,366.7 L-47.5,360.3M-50.8,366.7 L-52.1,369.4 L-50.8,376.8 L-51.8,379.8 L-55.5,383.7 L-58.4,384.7M-52.2,351.6 L-53.1,348.4M-52.2,351.6 L-47.5,360.3M-53.1,348.4 L-52.2,351.6M157.1,627.3 L163.3,633.7M157.1,627.3 L150.3,620.4M143.3,613.5 L150.3,620.4M143.3,613.5 L146.2,608.2M143.3,613.5 L139.9,617.9M337.0,240.1 L333.9,248.7M97.7,618.0 L102.9,616.9 L107.6,611.4M97.7,618.0 L85.3,617.1M680.5,733.8 L682.8,734.6M680.5,733.8 L654.8,742.9M680.5,733.8 L676.3,731.1M676.3,731.1 L696.5,723.9M676.3,731.1 L669.6,725.9M676.3,731.1 L680.5,733.8M121.2,636.9 L127.2,645.7M121.2,636.9 L119.0,633.7M129.8,629.3 L136.9,638.8M129.8,629.3 L133.7,627.9M101.7,649.6 L114.7,667.9M101.7,649.6 L105.4,645.0M141.9,586.8 L148.3,591.4 L159.5,594.6 L166.7,599.0 L166.8,601.0 L164.1,603.6 L166.3,606.9M35.8,689.7 L41.7,686.5 L44.4,691.3 L41.3,693.7 L37.5,693.2 L35.2,690.5 L35.8,689.7M35.8,689.7 L35.2,690.5 L37.5,693.2 L41.3,693.7 L44.4,691.3 L41.7,686.5 L35.8,689.7M745.9,573.4 L735.0,574.0M745.9,573.4 L746.3,569.9M735.0,574.0 L745.9,573.4M356.7,205.8 L363.8,207.5M357.0,204.7 L361.4,199.1M355.6,205.6 L349.8,204.2M363.8,207.5 L356.7,205.8M364.7,258.1 L368.7,245.7M357.0,255.2 L361.1,244.5M357.0,255.2 L355.5,259.7M611.8,137.8 L607.1,139.9M611.8,137.8 L610.3,130.4M607.1,146.6 L607.1,139.9M-215.1,169.2 L-212.7,175.8 L-204.0,180.4 L-201.3,184.5M-201.3,184.5 L-201.2,187.6M-201.3,184.5 L-204.0,180.4 L-212.7,175.8 L-215.1,169.2M-201.2,187.6 L-201.3,184.5M-201.2,187.6 L-197.8,187.8M-197.8,187.8 L-201.2,187.6M-197.8,187.8 L-174.5,187.1M195.7,117.3 L193.1,118.1M195.7,117.3 L198.9,116.3M193.1,118.1 L187.9,119.1M193.1,118.1 L195.7,117.3M198.9,116.3 L195.7,117.3M196.0,118.9 L200.5,125.6M193.4,119.0 L195.9,118.4M200.5,125.6 L203.1,128.7M200.5,125.6 L197.8,128.0M200.5,125.6 L196.0,118.9M203.1,128.7 L200.5,125.6M197.8,128.0 L200.5,125.6M316.0,200.5 L309.6,200.4 L306.6,198.8M316.0,200.5 L320.8,196.9 L325.3,196.8M330.0,201.5 L325.3,196.8M330.0,201.5 L332.5,203.8 L343.4,205.3M624.9,31.9 L631.1,21.8 L641.9,12.9M624.9,31.9 L622.4,37.4M622.4,37.4 L624.9,31.9M666.0,-4.9 L670.3,-7.8M666.0,-4.9 L660.9,-1.0M666.0,-4.9 L657.1,-12.7 L660.4,-19.2M670.3,-7.8 L666.0,-4.9M670.3,-7.8 L676.0,-11.5M660.4,-19.2 L657.1,-12.7 L666.0,-4.9M63.8,368.1 L84.0,381.3 L86.2,384.4M86.2,384.4 L84.0,381.3 L63.8,368.1M309.2,299.3 L304.6,295.7M309.2,299.3 L315.2,303.8M309.2,299.3 L306.2,302.8 L300.0,306.2M304.6,295.7 L309.2,299.3M315.2,303.8 L309.2,299.3M300.0,306.2 L297.7,304.0M300.0,306.2 L302.4,308.1 L307.5,309.0 L309.9,307.3M300.0,306.2 L306.2,302.8 L309.2,299.3M300.0,306.2 L295.0,309.5M371.6,209.3 L376.3,210.4M371.9,208.5 L373.8,205.3M370.1,209.0 L365.0,207.8M399.5,-95.8 L402.3,-98.5M399.5,-95.8 L401.4,-93.5M399.5,-95.8 L396.6,-99.2M398.4,-104.6 L401.1,-106.2 L398.9,-109.5 L397.9,-108.5 L398.4,-104.6M398.4,-104.6 L397.9,-108.5 L398.9,-109.5 L401.1,-106.2 L398.4,-104.6M398.4,-104.6 L402.3,-98.5M401.4,-93.5 L399.5,-95.8M396.6,-99.2 L399.5,-95.8M474.6,396.9 L473.5,396.3 L473.4,395.6 L474.4,395.7 L474.6,396.9M474.6,396.9 L474.4,395.7 L473.4,395.6 L473.5,396.3 L474.6,396.9M475.1,398.0 L476.9,403.3 L477.3,409.9M490.6,263.5 L485.6,259.0M388.4,57.6 L384.0,58.9 L375.2,57.2M615.2,406.7 L616.3,401.4M615.2,406.7 L609.2,409.3M609.2,409.3 L615.2,406.7M424.0,405.3 L426.4,403.3M424.0,405.3 L423.3,404.4 L426.4,403.3M424.0,405.3 L420.7,406.0M426.4,403.3 L424.0,405.3M426.4,403.3 L423.3,404.4 L424.0,405.3M426.4,403.3 L427.1,400.8M420.7,406.0 L424.0,405.3M420.0,406.1 L419.0,402.5 L419.8,401.3M420.0,406.1 L416.8,408.6M419.8,401.3 L419.0,402.5 L420.0,406.1M540.1,497.7 L543.1,500.0M276.2,363.9 L278.2,361.7M264.2,351.5
38077L265.5,350.1 L267.3,351.5M542.7,487.7 L540.4,490.4M542.7,487.7 L548.7,491.7M542.7,487.7 L539.2,484.7 L533.1,491.1 L535.4,493.2M540.4,490.4 L542.7,487.7M535.4,493.2 L533.1,491.1 L539.2,484.7 L542.7,487.7M333.2,232.9 L337.2,222.5M334.2,212.4 L331.3,219.8M375.7,384.0 L377.6,381.7M374.2,379.8 L377.6,381.7M441.4,276.8 L440.1,273.3M440.1,273.3 L441.4,276.8M764.0,602.0 L769.7,597.1M764.0,602.0 L757.0,593.6M764.0,602.0 L758.0,607.5M757.0,593.6 L764.0,602.0M332.3,236.7 L329.1,246.5M33.7,420.8 L42.3,427.6M67.3,434.3 L42.3,427.6M-93.3,266.1 L-94.7,270.5M-92.4,272.1 L-94.7,270.5M-213.8,126.7 L-212.6,134.7M320.4,352.4 L323.8,348.5M320.4,352.4 L318.3,355.6 L318.5,358.4M318.7,350.8 L311.4,344.8M323.8,348.5 L320.4,352.4M323.8,348.5 L327.6,344.3M318.5,358.4 L321.7,358.4 L325.8,361.5 L320.5,368.2 L317.1,365.2M318.5,358.4 L314.4,362.9 L317.1,365.2M318.5,358.4 L319.0,361.6 L317.1,365.2M318.5,358.4 L318.3,355.6 L320.4,352.4M317.1,365.2 L320.5,368.2 L325.8,361.5 L321.7,358.4 L318.5,358.4M317.1,365.2 L314.4,362.9 L318.5,358.4M317.1,365.2 L319.0,361.6 L318.5,358.4M317.1,365.2 L312.8,371.1M312.8,371.1 L307.8,376.7M312.8,371.1 L317.1,365.2M265.2,73.2 L260.3,79.1 L256.3,81.4M257.0,73.1 L255.3,77.3 L256.3,81.4M694.6,711.3 L695.3,718.4M304.4,118.9 L306.8,121.5M304.4,118.9 L304.4,118.1 L300.4,114.6 L300.0,115.7 L304.4,118.9M304.4,118.9 L300.0,115.7 L300.4,114.6 L304.4,118.1 L304.4,118.9M306.8,121.5 L304.4,118.9M306.8,121.5 L303.5,124.4M306.8,121.5 L309.9,118.1 L310.3,115.5M-209.7,86.3 L-210.1,82.8M-209.7,86.3 L-209.2,97.5 L-212.9,105.0M-210.1,82.8 L-209.7,86.3M-210.1,82.8 L-219.8,83.7M-210.1,82.8 L-203.3,82.2M-212.9,105.0 L-209.2,97.5 L-209.7,86.3M452.4,150.9 L449.6,148.3M452.4,150.9 L457.1,155.2M446.5,151.5 L449.6,148.3M246.5,262.7 L246.4,266.9 L248.2,272.9M248.2,272.9 L252.9,273.0M248.2,272.9 L246.4,266.9 L246.5,262.7M248.2,272.9 L238.6,272.8M252.9,273.0 L248.2,272.9M252.9,273.0 L259.1,269.4M238.6,272.8 L234.7,268.5M238.6,272.8 L248.2,272.9M414.3,288.8 L416.2,291.1M414.3,288.8 L412.7,286.8M536.3,482.2 L537.5,482.3 L537.1,483.7 L531.0,489.2M531.0,489.2 L537.1,483.7 L537.5,482.3 L536.3,482.2M-62.1,210.6 L-69.0,213.3M-109.5,348.5 L-106.9,342.1M-101.5,346.1 L-99.7,348.4M-101.5,346.1 L-106.9,342.1M619.9,42.1 L621.9,38.3M619.9,42.1 L625.6,44.7 L632.4,44.3 L647.7,32.9 L664.4,33.7M619.9,42.1 L612.6,54.6M619.9,42.1 L613.2,38.5 L610.0,30.3M600.0,41.1 L608.6,51.6 L612.6,54.6M600.0,41.1 L587.6,25.8M616.9,114.3 L613.0,109.4M616.9,114.3 L617.6,118.7 L616.1,122.4 L613.8,127.1 L610.3,130.4M560.7,329.6 L563.6,333.8M559.3,329.6 L555.4,330.7M563.6,333.8 L560.7,329.6M582.6,359.5 L580.2,356.3M-102.2,174.3 L-101.7,177.3 L-103.1,180.7M595.9,297.7 L598.3,300.9M595.9,297.7 L593.7,294.8M603.4,297.1 L605.4,299.7M603.4,297.1 L598.3,300.9M619.3,329.2 L614.8,323.2M619.3,329.2 L615.5,332.1M619.3,329.2 L627.1,323.3 L630.5,313.5 L629.0,313.0M629.0,313.0 L630.5,313.5 L627.1,323.3 L619.3,329.2M496.1,296.0 L494.0,299.8M497.0,301.6 L494.0,299.8M344.3,35.7 L343.9,36.9 L345.0,37.2M344.3,35.7 L345.7,27.2M540.3,-20.2 L553.6,1.5M540.3,-20.2 L527.1,-41.8 L523.8,-55.0M536.8,-22.8 L538.9,-19.3M536.8,-22.8 L531.5,-31.0M515.4,256.3 L517.7,258.3M508.8,256.3 L508.2,259.0M508.8,256.3 L506.7,254.8 L503.3,255.2M509.4,256.3 L513.2,256.3M503.3,255.2 L501.9,257.5M503.3,255.2 L506.7,254.8 L508.8,256.3M85.5,36.5 L92.5,42.5M363.0,104.1 L359.4,100.3 L360.6,97.3M329.7,201.7 L323.2,205.9M343.4,205.3 L332.5,203.8 L330.0,201.5M323.2,205.9 L329.7,201.7M423.2,314.2 L425.9,316.8M423.2,314.2 L428.7,308.0M664.4,33.7 L663.2,39.5M664.4,33.7 L677.0,34.1 L688.9,28.5 L693.2,30.5 L693.8,33.6 L692.5,38.2M664.4,33.7 L647.7,32.9 L632.4,44.3 L625.6,44.7 L619.9,42.1M663.2,39.5 L659.7,42.5 L657.9,42.2M663.2,39.5 L664.4,33.7M692.5,38.2 L693.8,33.6 L693.2,30.5 L688.9,28.5 L677.0,34.1 L664.4,33.7M99.5,12.7 L101.4,16.0 L101.1,20.6M97.1,19.1 L101.1,20.6M525.8,585.6 L529.4,586.1M525.8,585.6 L524.2,589.1M529.4,586.1 L525.8,585.6M524.2,589.1 L525.8,585.6M556.7,264.7 L562.6,269.7M555.9,264.2 L552.8,261.5M574.1,620.5 L555.1,636.7M574.1,620.5 L575.2,622.8M574.1,620.5 L571.5,614.6M555.1,636.7 L574.1,620.5M575.2,622.8 L577.6,628.4M575.2,622.8 L574.1,620.5M595.9,676.6 L597.5,673.2 L605.6,666.9M620.5,689.7 L621.2,693.1M621.8,689.1 L620.0,687.4M488.2,395.9 L489.6,390.8M137.8,133.5 L131.9,135.4M140.0,132.9 L150.9,129.6M459.8,484.7 L453.1,482.5 L450.5,484.1M450.5,484.1 L453.1,482.5 L459.8,484.7M49.3,533.4 L52.3,529.1M49.3,533.4 L53.1,535.0 L55.6,532.7M52.3,529.1 L49.3,533.4M52.3,529.1 L53.9,526.6M52.3,529.1 L55.8,529.7 L55.6,532.7M48.5,534.5 L45.1,539.1M55.6,532.7 L57.6,529.5M55.6,532.7 L55.8,529.7 L52.3,529.1M55.6,532.7 L53.1,535.0 L49.3,533.4M-6.2,42.9 L8.0,48.6M-2.8,61.4 L5.3,58.4 L7.1,55.2 L8.0,48.6M555.7,516.2 L549.3,523.3M555.7,516.2 L567.4,501.0 L575.3,485.7M571.6,466.5 L566.8,467.9M-12.7,582.5 L-21.7,594.2M-12.7,582.5 L-21.8,578.7M364.7,206.7 L366.3,203.6M365.0,207.8 L370.1,209.0M-211.7,242.6 L-217.2,244.6M690.0,753.0 L686.2,754.4M471.7,459.6 L471.6,467.6 L469.6,469.1M535.9,339.1 L539.3,337.9M539.3,337.9 L535.9,339.1M122.4,649.2 L131.3,661.6M122.4,649.2 L113.7,636.5M122.4,649.2 L127.2,645.7M416.1,334.5 L413.7,341.2M4
3807716.1,334.5 L427.1,338.6M427.1,338.6 L421.7,353.0M427.1,338.6 L430.3,339.1M427.1,338.6 L416.1,334.5M353.7,593.6 L354.3,597.3M353.7,593.6 L343.1,605.5 L344.3,610.1M353.7,593.6 L353.2,588.3M354.3,597.3 L354.8,599.7M354.3,597.3 L353.7,593.6M344.3,610.1 L343.1,605.5 L353.7,593.6M353.2,588.3 L353.7,593.6M353.2,588.3 L352.7,585.5M174.2,-62.5 L172.2,-72.0M174.2,-62.5 L156.9,-52.6M174.2,-62.5 L182.7,-62.7 L188.2,-67.9M172.2,-72.0 L174.2,-62.5M172.2,-72.0 L170.8,-75.7 L158.5,-69.3M156.9,-52.6 L147.7,-48.2M156.9,-52.6 L174.2,-62.5M156.9,-52.6 L152.8,-70.5 L156.6,-74.1M188.2,-67.9 L182.7,-62.7 L174.2,-62.5M529.9,635.6 L532.8,633.7M529.9,635.6 L523.2,640.0M396.9,410.9 L401.0,416.2 L401.3,418.3M396.9,410.9 L394.2,412.4 L392.7,415.7M396.9,410.9 L403.2,410.5M401.3,418.3 L401.0,416.2 L396.9,410.9M-181.6,209.0 L-182.4,205.7 L-179.4,206.5M345.1,313.8 L340.2,315.0 L335.9,313.3M-35.2,571.0 L-45.1,565.7 L-47.4,561.7M353.1,132.8 L362.9,123.8M523.8,167.0 L524.8,157.3M507.9,150.2 L509.8,151.0 L520.4,146.8 L525.2,152.4 L526.0,155.6 L524.8,157.3M507.9,150.2 L518.9,143.1 L550.4,126.9 L564.5,116.2 L572.8,107.5M507.9,150.2 L500.4,156.0M259.1,269.4 L252.9,273.0M266.5,277.5 L259.6,269.1M266.5,277.5 L268.5,279.9M-219.8,83.7 L-210.1,82.8M-219.8,83.7 L-219.8,79.5M-203.3,82.2 L-210.1,82.8M-203.3,82.2 L-176.7,81.8M462.9,415.0 L460.2,417.6M270.7,98.8 L271.9,103.9M-46.4,634.7 L-36.8,624.6M401.3,155.7 L405.6,160.7 L413.5,164.0M631.3,-14.3 L627.3,-16.1 L611.6,-16.1M631.3,-14.3 L624.8,-7.6 L623.0,-2.8 L625.8,10.6M631.3,-14.3 L644.2,-28.7 L646.3,-36.1 L646.2,-41.7M611.6,-16.1 L612.2,-20.3M611.6,-16.1 L627.3,-16.1 L631.3,-14.3M611.6,-16.1 L607.7,-8.9 L605.0,-7.0 L602.0,-5.6 L596.0,-6.6M625.8,10.6 L623.0,-2.8 L624.8,-7.6 L631.3,-14.3M646.2,-41.7 L646.3,-36.1 L644.2,-28.7 L631.3,-14.3M646.2,-41.7 L647.0,-47.0 L656.0,-60.8M621.9,38.3 L619.9,42.1M610.0,30.3 L613.2,38.5 L619.9,42.1M604.3,613.8 L601.8,614.4M157.5,324.3 L168.3,295.1M157.5,324.3 L149.4,345.5M160.4,320.5 L158.7,324.8M160.4,320.5 L163.0,316.4 L166.6,314.4 L211.8,315.8 L217.8,314.3 L235.9,306.4 L253.4,305.0M160.4,320.5 L170.0,295.1M161.9,326.2 L159.0,333.4M161.9,326.2 L158.7,324.8M42.3,543.2 L40.7,545.4M42.9,543.6 L47.3,546.3M42.7,542.5 L44.5,540.0M42.7,542.5 L44.8,537.4M40.7,545.4 L42.3,543.2M32.7,556.7 L35.9,552.0M31.0,559.1 L28.8,562.6M472.1,186.0 L474.5,183.4M470.8,674.1 L471.1,682.4M476.0,682.8 L471.1,682.4M423.0,490.6 L420.3,493.6M422.1,495.9 L420.3,493.6M650.7,113.5 L654.2,115.8M650.7,113.5 L644.7,109.4M654.2,115.8 L658.3,118.6M654.2,115.8 L650.7,113.5M644.7,109.4 L650.7,113.5M644.7,109.4 L640.1,105.3M670.0,126.6 L664.1,122.6M670.0,126.6 L673.7,129.3 L675.1,132.5M-73.9,600.6 L-79.7,599.6 L-83.7,597.0M-73.9,600.6 L-59.0,610.9M-62.0,616.0 L-59.0,610.9M289.3,325.4 L294.1,329.6M224.6,124.1 L224.0,121.2 L225.7,117.1 L224.3,111.3 L228.7,110.4 L232.1,116.9M224.6,124.1 L225.1,130.1 L224.7,130.1 L222.7,129.2 L224.6,124.1M224.6,124.1 L222.7,129.2 L224.7,130.1 L225.1,130.1 L224.6,124.1M232.1,116.9 L234.2,120.2M232.1,116.9 L228.7,110.4 L224.3,111.3 L225.7,117.1 L224.0,121.2 L224.6,124.1M232.1,116.9 L235.5,115.1M234.2,120.2 L232.1,116.9M438.2,234.3 L432.4,233.0M438.2,234.3 L443.0,228.4M432.4,233.0 L433.7,226.8M432.4,233.0 L438.2,234.3M443.0,228.4 L438.2,234.3M486.1,487.5 L478.1,480.6M480.6,495.8 L481.1,493.6 L478.7,486.2M483.7,492.9 L478.7,486.2M746.4,589.9 L744.8,592.7M746.4,589.9 L748.3,584.8M41.4,515.4 L47.4,518.3M41.4,515.4 L37.7,519.8M277.5,60.3 L290.3,73.9 L292.0,77.5M292.0,77.5 L292.5,87.5M292.0,77.5 L290.3,73.9 L277.5,60.3M457.1,155.2 L452.4,150.9M602.0,487.0 L590.4,489.2 L585.4,492.1 L574.0,511.3 L565.3,522.7M602.0,487.0 L610.7,483.0 L616.9,481.7M647.7,488.7 L650.7,492.1M647.7,488.7 L649.1,486.4 L649.1,480.7 L647.5,477.8 L644.9,476.6M647.7,488.7 L640.3,483.2 L636.4,481.8 L616.9,481.7M650.7,492.1 L647.7,488.7M650.7,492.1 L652.4,499.5M673.0,757.8 L678.1,757.2M296.5,94.3 L293.3,98.4M562.6,269.7 L556.7,264.7M-166.4,209.8 L-166.6,207.0M-166.4,209.8 L-166.5,213.4 L-170.9,217.3M-165.9,209.8 L-160.5,209.0M-170.9,217.3 L-166.5,213.4 L-166.4,209.8M320.2,334.3 L321.3,332.1M320.6,334.8 L336.1,349.0M321.3,332.1 L319.4,333.7M321.3,332.1 L320.2,334.3M311.4,344.8 L314.6,340.9M311.4,344.8 L304.2,353.1M311.4,344.8 L318.7,350.8M314.6,340.9 L311.4,344.8M314.6,340.9 L317.8,337.1M352.9,264.8 L350.9,270.1M352.9,264.8 L354.5,260.5M413.9,406.4 L416.8,408.6M418.8,410.0 L416.8,408.6M-66.7,674.9 L-70.6,670.2M-70.6,670.2 L-66.7,674.9M-70.6,670.2 L-76.0,668.3M-114.4,200.9 L-129.0,207.1M-131.1,204.3 L-129.0,207.1M341.0,509.0 L344.0,481.9 L343.1,477.5M343.1,477.5 L335.5,479.5M343.1,477.5 L346.7,476.3M343.1,477.5 L344.0,481.9 L341.0,509.0M564.1,357.7 L565.7,359.8M564.1,357.7 L557.8,349.2M466.0,303.9 L475.4,288.5M710.5,89.7 L706.0,81.8M640.1,598.6 L633.9,599.1M640.1,598.6 L644.7,597.5M634.1,590.3 L633.9,599.1M638.9,621.3 L644.8,619.4M638.9,621.3 L634.0,620.5M250.1,495.3 L243.7,507.3M44.0,292.9 L45.7,295.0M44.0,292.9 L41.3,289.8M44.0,292.9 L41.0,295.4M45.7,295.0 L44.0,292.9M41.3,289.8 L44.0,292.9M41.0,295.4 L44.0,292.9M44.6,292.4 L41.9,289.2M44.6,292.4 L46.3,294.5M285.0,207.0 L289.1,204.0M285.0,207.0 L277.5,212.5M277.5,212.5 L285.0,207.0M277.5,212.5 L273.2,214.4M78.0,704.4 L57.6,699.2M78.0,704.4 L95.1,708.6M78.0,704.4 L79.9,698.7M-211.0,252.0 L-213.1,253.8M-211.0,252.0 L-213.0,248.4 L-211.6,247.7 L-209.6,251.1 L-211.0,252.0M-211.0,252.0 L-209.6,251.1 L-211.6,247.7 L-213.0,248.4 L-211.0,252.0M-176.7,258.7 L-171.6,261.3M-176.7,258.7 L-181.5,259.4M-176.7,258.7 L-176.4,253.5 L-178.5,251.5 L-180.8,251.8M-180.8,251.8 L-178.5,251.5 L-176.4,253.5 L-176.7,258.7M618.6,631.8 L617.3,629.8M617.3,629.8 L618.6,631.8M269.9,309.6 L270.2,313.1M269.9,309.6 L274.4,309.8M269.9,309.6 L266.3,309.7 L265.4,311.0M554.5,427.1 L543.2,420.7M517.4,412.0 L516.6,415.5M517.4,412.0 L521.5,413.1M516.6,415.5 L515.1,420.8M516.6,415.5 L517.4,412.0M521.5,413.1 L517.4,412.0M508.5,401.8 L510.6,394.7M156.6,-74.1 L152.8,-70.5 L156.9,-52.6M120.0,-42.5 L130.3,-48.8M423.2,462.7 L436.3,453.7M697.6,193.2 L703.2,187.6M697.6,193.2 L698.4,194.3 L697.2,195.6 L696.3,193.5M457.9,619.4 L460.3,616.4M395.4,424.5 L393.5,419.3M395.4,424.5 L398.7,424.8 L402.0,427.1M395.4,424.5 L393.0,428.8M402.0,427.1 L398.7,424.8 L395.4,424.5M393.0,428.8 L392.1,427.5 L393.5,425.2M393.0,428.8 L395.4,424.5M393.0,428.8 L389.8,431.2M415.3,236.1 L406.2,229.9M415.3,237.1 L416.0,242.8M406.2,229.9 L415.3,236.1M400.4,225.9 L403.5,228.0M400.4,225.9 L394.7,222.1M400.4,225.9 L397.6,232.1M403.5,228.0 L400.4,225.9M397.6,232.1 L400.4,225.9M316.0,200.8 L315.0,207.6M294.7,198.8 L297.3,197.7 L299.1,194.6M607.7,409.9 L588.3,417.3M240.7,29.3 L234.4,34.5M236.9,1.0 L237.8,-2.1 L236.0,-3.7 L235.3,-2.7 L236.9,1.0M236.9,1.0 L235.3,-2.7 L236.0,-3.7 L237.8,-2.1 L236.9,1.0M402.4,-60.5 L401.8,-59.5 L402.2,-58.7 L402.6,-59.4 L402.4,-60.5M402.4,-60.5 L402.6,-59.4 L402.2,-58.7 L401.8,-59.5 L402.4,-60.5M402.4,-60.5 L404.0,-69.4 L408.7,-75.7 L408.6,-79.1M408.6,-79.1 L402.0,-75.2M408.6,-79.1 L408.7,-75.7 L404.0,-69.4 L402.4,-60.5M612.2,-20.3 L612.9,-25.8M612.2,-20.3 L611.6,-16.1M596.0,-6.6 L594.6,-3.2M596.0,-6.6 L602.0,-5.6 L605.0,-7.0 L607.7,-8.9 L611.6,-16.1M596.0,-6.6 L596.5,-9.8 L592.2,-17.5M-220.9,83.7 L-219.8,79.5M278.9,202.9 L276.0,209.1 L277.2,212.1M277.2,212.1 L276.0,209.1 L278.9,202.9M572.8,33.0 L556.5,6.2M47.3,546.3 L42.9,543.6M605.4,299.7 L603.4,297.1M582.0,313.0 L585.0,310.9M582.0,313.0 L584.2,316.0M582.0,313.0 L574.6,318.7M574.6,318.7 L582.0,313.0M574.6,318.7 L572.5,315.8M581.1,311.9 L577.9,307.7M575.2,319.4 L576.7,321.5M572.5,315.8 L574.6,318.7M610.3,130.4 L613.8,127.1 L616.1,122.4 L617.6,118.7 L616.9,114.3M610.3,130.4 L611.8,137.8M610.3,130.4 L604.6,121.9 L599.0,118.5M311.5,246.8 L310.1,252.5M311.5,246.8 L312.6,242.7M306.6,251.5 L310.1,252.5M306.6,251.5 L298.2,249.1M314.4,253.7 L310.1,252.5M247.6,116.0 L250.5,117.1M247.6,116.0 L243.9,119.8M247.6,116.0 L248.6,111.9 L246.5,103.0M250.5,117.1 L247.6,116.0M243.9,119.8 L241.2,121.2M243.9,119.8 L239.6,111.6M243.9,119.8 L247.6,116.0M246.5,103.0 L242.3,104.1M246.5,103.0 L248.6,111.9 L247.6,116.0M246.5,103.0 L254.8,100.7M239.6,111.6 L243.9,119.8M594.6,-3.2 L596.0,-6.6M592.2,-17.5 L596.5,-9.8 L596.0,-6.6M592.2,-17.5 L589.5,-21.3M416.7,416.3 L415.0,417.8 L413.1,414.8M297.7,304.0 L300.0,306.2M309.9,307.3 L307.5,309.0 L302.4,308.1 L300.0,306.2M295.0,309.5 L299.0,313.9M295.0,309.5 L300.0,306.2M295.0,309.5 L290.3,305.8M299.0,313.9 L295.0,309.5M298.1,314.9 L293.7,310.2M299.9,314.9 L301.9,317.1M280.1,294.1 L276.9,294.1M280.1,294.1 L276.3,289.6M276.9,294.1 L280.1,294.1M276.9,294.1 L277.0,298.4M276.9,294.1 L225.3,294.9M281.0,294.1 L282.1,296.9M276.3,289.6 L273.2,285.7M276.3,289.6 L280.1,294.1M-124.4,214.2 L-121.9,213.9M607.3,388.2 L609.9,388.7M98.0,357.6 L97.0,355.0 L100.6,351.9 L102.4,355.0 L104.7,356.2 L108.1,353.4M426.6,195.1 L423.7,200.8M426.8,194.7 L428.3,192.1M423.7,200.8 L421.2,208.3M423.7,200.8 L426.6,195.1M454.5,195.1 L450.9,199.2M454.5,195.1 L467.3,206.3 L485.9,226.9M450.9,199.2 L454.5,195.1M450.9,199.2 L449.0,200.7 L438.5,202.2 L433.8,200.9M453.9,194.7 L437.3,181.1M485.9,226.9 L49
380776.1,236.3M485.9,226.9 L467.3,206.3 L454.5,195.1M485.9,226.9 L489.7,233.6 L491.0,241.7M575.9,458.3 L588.8,460.7M575.9,458.3 L576.8,465.6M593.9,461.9 L599.6,463.2M593.9,461.9 L588.8,460.7M415.7,237.1 L428.6,239.7M416.0,242.8 L416.1,247.6M416.0,242.8 L415.3,237.1M598.5,478.4 L585.1,475.4M585.1,475.4 L598.5,478.4M585.1,475.4 L586.7,467.9M585.1,475.4 L584.0,478.2 L577.9,477.1M693.4,167.8 L696.0,169.9M693.4,167.8 L688.7,164.0M553.0,357.9 L544.1,364.9 L546.8,368.1 L555.7,361.7M507.9,269.2 L511.3,272.0M-157.0,177.3 L-155.2,184.5M-162.6,186.0 L-174.5,187.1M-162.6,186.0 L-155.2,184.5M427.1,400.8 L426.4,403.3M427.1,400.8 L419.9,396.4M427.1,400.8 L431.8,402.6M478.5,246.5 L474.1,246.2M455.0,245.0 L454.7,249.7M454.7,244.6 L449.5,244.2M32.9,43.2 L30.0,39.5 L24.0,35.6M415.3,242.9 L411.6,243.1 L410.1,242.0M416.1,247.6 L416.0,242.8M416.8,229.5 L419.6,230.2M415.6,232.8 L416.3,229.5M437.3,181.1 L433.3,185.6M437.3,181.1 L453.9,194.7M437.3,181.1 L433.2,177.8M438.0,180.3 L454.8,193.7M438.0,180.3 L420.5,166.0M438.0,180.3 L443.2,174.6M433.3,185.6 L437.3,181.1M433.3,185.6 L429.3,190.7M433.2,177.8 L430.8,175.9M433.2,177.8 L437.3,181.1M274.4,309.8 L269.9,309.6M265.4,311.0 L266.3,309.7 L269.9,309.6M586.7,467.9 L601.3,471.2M586.7,467.9 L576.8,465.6M586.7,467.9 L585.1,475.4M555.1,515.7 L543.0,505.0M549.3,523.3 L555.7,516.2M404.6,547.4 L401.9,546.2M728.5,606.9 L725.4,603.5M-172.8,65.8 L-161.3,72.0M-161.3,72.0 L-172.8,65.8M478.8,351.2 L485.7,347.9M485.7,347.9 L478.8,351.2M42.4,683.6 L50.5,678.9M41.9,682.7 L37.9,675.3M50.5,678.9 L42.4,683.6M315.0,207.6 L316.0,200.8M168.5,-18.7 L172.1,-22.5M-144.8,270.3 L-143.4,264.4M-144.8,270.3 L-147.9,274.4M-147.9,274.4 L-144.8,270.3M-147.9,274.4 L-149.0,273.5 L-145.9,269.5M-143.4,264.4 L-144.8,270.3M-54.9,302.7 L-50.1,304.6 L-28.2,299.2M-28.2,299.2 L-50.1,304.6 L-54.9,302.7M-28.2,299.2 L-24.6,300.1 L-19.7,305.8M543.4,346.5 L542.2,344.0M-156.7,117.7 L-159.2,115.4M-156.7,117.7 L-149.4,124.8 L-145.9,126.4M-156.7,117.7 L-162.4,124.0 L-165.8,133.1M-159.2,115.4 L-156.7,117.7M-159.2,115.4 L-163.2,112.0 L-170.8,109.4M-165.8,133.1 L-173.2,141.0M-165.8,133.1 L-162.4,124.0 L-156.7,117.7M-170.8,109.4 L-163.2,112.0 L-159.2,115.4M444.9,413.1 L448.5,415.3M444.9,413.1 L441.3,409.1M-99.7,348.4 L-101.5,346.1M270.5,449.5 L269.6,451.6 L275.6,465.2M270.5,449.5 L273.4,448.2 L273.7,445.5 L271.0,445.2 L270.5,449.5M270.5,449.5 L271.0,445.2 L273.7,445.5 L273.4,448.2 L270.5,449.5M275.6,465.2 L283.6,471.2 L285.6,474.4M275.6,465.2 L269.6,451.6 L270.5,449.5M275.6,465.2 L273.7,469.0 L271.4,469.6 L252.8,461.3 L249.6,455.3M720.9,26.8 L725.0,21.1 L726.7,15.0M726.7,15.0 L730.7,17.6M726.7,15.0 L724.1,14.1 L721.6,15.3M726.7,15.0 L725.0,21.1 L720.9,26.8M601.3,471.2 L586.7,467.9M162.6,324.2 L164.7,321.6M585.0,-24.1 L582.4,-25.3M585.0,-24.1 L589.5,-21.3M582.7,-26.6 L585.4,-25.4M582.7,-26.6 L579.6,-27.9M421.7,353.0 L427.1,338.6M430.3,339.1 L427.1,338.6M-195.1,283.7 L-198.2,285.1M-195.1,283.7 L-194.1,280.7 L-191.4,280.5M-195.1,283.7 L-192.1,287.2M-192.1,326.9 L-193.6,325.0 L-197.0,326.2M-197.0,326.2 L-193.6,325.0 L-192.1,326.9M442.6,238.6 L444.6,241.4M444.6,241.4 L442.6,238.6M444.6,241.4 L446.5,243.7M351.4,645.4 L352.6,640.5 L360.3,635.1 L361.0,631.8 L358.7,624.0M351.4,645.4 L352.3,646.2 L351.5,646.9 L350.7,646.2 L351.4,645.4M351.4,645.4 L350.7,646.2 L351.5,646.9 L352.3,646.2 L351.4,645.4M276.7,175.1 L274.0,177.5 L275.1,181.1M276.7,175.1 L280.5,178.5 L281.4,183.1M595.6,337.5 L598.5,335.3M595.6,337.5 L592.9,339.5M592.9,339.5 L595.6,337.5M328.1,211.1 L326.7,214.6M129.7,130.1 L131.0,132.6M327.8,511.4 L329.6,509.8M329.6,509.8 L327.8,511.4M329.6,509.8 L330.6,506.4M433.7,226.8 L432.4,233.0M547.8,645.6 L548.3,648.1M548.3,648.1 L547.8,645.6M-191.4,280.5 L-194.1,280.7 L-195.1,283.7M-192.1,287.2 L-195.1,283.7M-114.5,224.2 L-115.0,221.0M108.7,282.7 L117.7,280.9M108.7,282.7 L107.8,278.1M108.7,282.7 L102.1,284.0M109.2,284.8 L110.0,288.5M107.8,278.1 L108.7,282.7M107.8,278.1 L107.2,275.7M102.1,284.0 L108.7,282.7M102.1,284.0 L90.6,286.5 L82.3,284.5M415.2,578.2 L413.5,579.6 L405.9,580.4M391.2,39.9 L388.9,37.3M543.0,505.0 L555.1,515.7M111.8,297.1 L112.9,303.1M111.8,297.1 L113.8,302.8M112.9,303.1 L118.1,307.9 L125.2,308.3M112.9,303.1 L111.8,297.1M113.8,302.8 L111.8,297.1M113.8,302.8 L118.1,306.9 L125.0,307.4M626.4,413.9 L630.5,415.0M626.4,413.9 L620.4,409.6M626.4,413.9 L622.7,418.6M620.4,409.6 L626.4,413.9M622.7,418.6 L626.4,413.9M586.0,487.6 L587.6,482.0M216.2,295.2 L225.3,294.9M225.3,294.9 L216.2,295.2M225.3,294.9 L276.9,294.1M11.7,612.9 L0.0,603.3M30.3,609.9 L34.9,608.4M22.9,608.0 L21.2,610.1M10.1,624.4 L12.8,621.1M12.8,621.1 L10.1,624.4M28.9,615.1 L25.6,619.2M25.6,619.2 L28.9,615.1M29.1,615.3 L32.7,618.2M17.0,629.8 L19.2,627.1M19.2,627.1 L17.0,629.8M-65.2,695.7 L-67.8,694.1 L-67.1,692.0M-65.2,695.7 L-70.3,695.0M-65.2,695.7 L-61.4,696.3M-61.4,696.3 L-65.2,695.7M-61.4,696.3 L-49.6,698.0M-92.1,692.0 L-110.4,693.9M-92.1,692.0 L-87.7,692.5M-110.4,693.9 L-92.1,692.0M-87.7,692.5 L-92.1,692.0M20.6,606.1 L18.7,608.2M59.3,734.3 L50.8,728.6M59.3,734.3 L58.3,736.8 L58.8,739.1 L63.7,746.1M59.3,734.3 L69.0,739.0M50.8,728.6 L59.3,734.3M69.0,739.0 L76.1,742.0 L78.1,744.5 L77.1,749.7 L67.2,742.9M69.0,739.0 L67.2,742.9M69.0,739.0 L59.3,734.3M67.2,742.9 L63.7,746.1M67.2,742.9 L69.0,739.0M67.2,742.9 L77.1,749.7 L78.1,744.5 L76.1,742.0 L69.0,739.0M60.3,748.3 L63.7,746.1M60.3,748.3 L45.8,730.4M60.6,748.9 L63.7,746.1M45.8,730.4 L60.3,748.3M15.3,707.1 L21.6,709.1 L32.3,715.1 L45.1,729.5M15.3,707.1 L2.4,704.9M15.3,707.1 L4.9,706.3M15.7,706.1 L18.3,699.5M45.1,729.5 L32.3,715.1 L21.6,709.1 L15.3,707.1M2.4,704.9 L-1.9,704.4M2.4,704.9 L15.3,707.1M4.9,706.3 L1.5,705.9M4.9,706.3 L0.1,708.3M4.9,706.3 L15.3,707.1M0.1,708.3 L-3.0,710.2M0.1,708.3 L4.9,706.3M0.1,708.3 L1.5,705.9M-3.0,710.2 L-6.6,712.3M-3.0,710.2 L0.1,708.3M1.5,705.9 L4.9,706.3M1.5,705.9 L-2.8,705.4M1.5,705.9 L0.1,708.3M-2.8,705.4 L1.5,705.9M-2.8,705.4 L-16.1,703.6M-1.9,704.4 L-5.1,704.0M-1.9,704.4 L2.4,704.9M34.8,687.9 L30.5,690.4M46.7,729.7 L53.7,722.9M-20.2,707.0 L-20.9,713.4 L-22.9,718.1M-20.2,707.0 L-19.8,703.0M-20.2,707.0 L-18.4,704.2 L-16.1,703.6M-21.3,705.7 L-21.0,702.9M-21.3,705.7 L-22.3,703.4 L-24.5,702.4M-21.3,705.7 L-22.9,718.1M-21.0,702.9 L-21.3,705.7M-21.0,702.9 L-24.5,702.4M-19.9,694.2 L-21.4,700.5 L-25.4,701.3M-19.9,694.2 L-20.9,702.0M-19.9,694.2 L-18.5,682.0M-17.5,675.2 L-18.5,682.0M-15.9,665.1 L-14.2,655.3M-16.2,667.0 L-17.2,673.1M-16.1,703.6 L-19.8,703.0M-16.1,703.6 L-2.8,705.4M-16.1,703.6 L-18.4,704.2 L-20.2,707.0M-24.5,702.4 L-30.9,701.3M-24.5,702.4 L-21.0,702.9M-24.5,702.4 L-22.3,703.4 L-21.3,705.7M-39.7,699.8 L-32.9,700.8M-39.7,699.8 L-49.6,698.0M-13.4,650.3 L-13.0,647.1M-13.4,650.3 L-14.2,655.3M-13.0,647.1 L-13.4,650.3M-13.0,647.1 L-12.3,642.3M-14.2,655.3 L-15.9,665.1M-14.2,655.3 L-13.4,650.3M-12.3,642.3 L-13.0,647.1M-12.7,640.9 L-14.7,642.4M-11.5,635.3 L-11.0,627.2M-11.5,635.3 L-12.1,640.8M-14.7,642.4 L-13.0,639.7M-14.7,642.4 L-12.7,640.9M-13.0,639.7 L-14.7,642.4M-11.7,636.0 L-12.8,639.4M-11.0,627.2 L-11.5,635.3M-11.0,627.2 L-10.4,621.3M19.5,575.1 L21.0,573.0M21.0,573.0 L19.5,575.1M21.7,574.1 L23.3,571.8M23.3,571.8 L2
380776.7,566.0M23.3,571.8 L21.7,574.1M20.7,575.6 L18.1,578.8M34.8,551.4 L27.0,563.2M35.2,550.8 L41.9,541.3M35.9,552.0 L38.3,548.8M35.9,552.0 L32.7,556.7M27.0,563.2 L25.5,565.6M27.0,563.2 L34.8,551.4M47.4,533.8 L45.8,536.1M53.1,525.4 L48.2,532.7M53.1,525.4 L92.0,457.0M53.9,526.6 L52.3,529.1M53.9,526.6 L57.6,529.5M53.9,526.6 L90.2,462.6 L99.5,442.8M92.0,457.0 L53.1,525.4M92.0,457.0 L98.6,442.3M100.4,438.4 L98.6,442.3M100.4,438.4 L87.6,433.1M100.4,438.4 L107.8,428.9M98.6,442.3 L100.4,438.4M98.6,442.3 L92.0,457.0M87.6,433.1 L100.4,438.4M107.8,428.9 L100.4,438.4M100.7,452.2 L100.2,464.1M100.7,452.2 L101.9,445.2 L99.5,442.8M100.2,464.1 L100.7,452.2M134.8,386.6 L136.4,381.0M134.8,386.6 L126.4,388.5M134.8,386.6 L128.4,405.1M136.4,381.0 L134.8,386.6M136.4,381.0 L135.8,385.9M136.4,381.0 L129.2,375.2M136.4,381.0 L139.3,375.1M136.4,381.0 L143.0,362.5M126.4,388.5 L106.2,395.7M126.4,388.5 L134.8,386.6M128.4,405.1 L123.3,412.8 L117.0,419.5M128.4,405.1 L134.8,386.6M135.8,385.9 L139.3,375.1M135.8,385.9 L136.4,381.0M135.8,385.9 L133.9,393.5M129.2,375.2 L126.3,372.2M129.2,375.2 L136.4,381.0M139.3,375.1 L144.1,361.5M139.3,375.1 L135.8,385.9M139.3,375.1 L136.4,381.0M143.0,362.5 L149.4,345.5M143.0,362.5 L136.4,381.0M141.6,341.0 L139.0,343.3M141.6,341.0 L143.7,343.2 L149.4,345.5M141.6,341.0 L139.1,335.1 L140.0,322.5M142.2,340.5 L139.9,333.3 L140.8,322.6M142.2,340.5 L149.4,345.5M139.6,304.3 L135.0,297.3M139.6,304.3 L139.6,306.9 L137.7,310.2M137.7,310.2 L139.6,306.9 L139.6,304.3M137.3,310.5 L132.4,307.6 L125.0,307.4M137.3,310.5 L140.7,315.9 L140.8,322.6M136.9,311.2 L139.6,315.6 L140.0,322.5M136.9,311.2 L131.3,308.1 L125.2,308.3M125.0,307.4 L118.1,306.9 L113.8,302.8M125.0,307.4 L132.4,307.6 L137.3,310.5M140.8,322.6 L140.7,315.9 L137.3,310.5M140.8,322.6 L139.9,333.3 L142.2,340.5M140.0,322.5 L139.1,335.1 L141.6,341.0M140.0,322.5 L139.6,315.6 L136.9,311.2M140.0,322.5 L136.5,321.9M125.2,308.3 L131.3,308.1 L136.9,311.2M125.2,308.3 L118.1,307.9 L112.9,303.1M168.3,295.1 L157.5,324.3M170.0,295.1 L171.0,292.2M170.0,295.1 L160.4,320.5M170.0,295.1 L172.3,295.9M168.5,294.5 L170.1,290.6M171.0,292.2 L173.0,286.9M171.0,292.2 L170.0,295.1M171.0,292.2 L172.3,295.9M172.3,295.9 L171.0,292.2M172.3,295.9 L170.0,295.1M172.3,295.9 L177.9,299.4 L182.3,307.4 L186.3,311.2 L194.2,313.3 L204.5,314.0 L215.2,313.4 L237.8,304.2 L280.6,302.9M165.9,293.2 L168.3,293.0 L170.1,290.6M170.1,290.6 L168.5,294.5M170.1,290.6 L176.4,274.3M170.1,290.6 L168.3,293.0 L165.9,293.2M138.1,253.0 L139.0,242.3M138.1,253.0 L137.9,254.3 L136.7,254.1 L136.7,253.1 L138.1,253.0M138.1,253.0 L136.7,253.1 L136.7,254.1 L137.9,254.3 L138.1,253.0M523.8,-55.0 L527.1,-41.8 L540.3,-20.2M531.5,-31.0 L536.8,-22.8M581.2,46.5 L578.4,42.0M581.2,46.5 L585.7,55.4 L588.2,64.8M578.4,42.0 L573.8,34.6M578.4,42.0 L581.2,46.5M588.0,77.2 L585.5,76.8M588.0,77.2 L588.2,64.8M588.0,77.2 L584.1,90.9 L578.0,101.2M108.5,428.2 L117.0,419.5M-152.4,3.9 L-153.0,1.6M-152.4,3.9 L-152.1,10.5M-152.1,10.5 L-151.7,20.1M-152.1,10.5 L-152.4,3.9M382.0,416.7 L380.4,416.9 L376.6,413.0M382.9,416.3 L384.0,419.5M382.9,416.3 L380.1,407.4M376.6,413.0 L374.4,410.1M376.6,413.0 L380.4,416.9 L382.0,416.7M295.9,53.2 L302.3,59.9M295.9,53.2 L292.6,49.7M287.9,47.2 L289.3,46.6 L292.6,49.7M324.7,83.3 L318.9,77.3M324.7,83.3 L340.5,100.3 L345.8,99.8 L350.6,103.0M324.7,83.3 L317.6,85.2 L316.4,79.8M324.7,83.3 L328.0,80.3M318.9,77.3 L324.7,83.3M318.9,77.3 L309.3,67.2M350.6,103.0 L345.8,99.8 L340.5,100.3 L324.7,83.3M316.4,79.8 L317.6,85.2 L324.7,83.3M328.0,80.3 L332.2,76.4M328.0,80.3 L324.7,83.3M310.0,89.6 L302.0,89.3 L292.7,91.6M292.7,91.6 L292.5,87.5M292.7,91.6 L302.0,89.3 L310.0,89.6M292.7,91.6 L303.8,90.5 L311.3,91.1M353.0,109.5 L367.0,116.9 L373.2,121.6 L401.4,150.2 L418.5,164.4M292.5,87.5 L292.7,91.6M292.5,87.5 L292.0,77.5M311.3,91.1 L317.0,92.7 L367.2,118.9 L417.7,165.4M311.3,91.1 L303.8,90.5 L292.7,91.6M211.2,211.2 L212.4,208.9M553.4,213.7 L549.4,218.5M503.9,147.1 L495.0,148.7 L495.5,154.1M503.9,147.1 L505.8,147.7 L506.5,146.2 L504.8,145.7 L503.9,147.1M503.9,147.1 L504.8,145.7 L506.5,146.2 L505.8,147.7 L503.9,147.1M523.0,602.5 L521.5,600.5M521.5,600.5 L523.0,602.5M538.6,576.0 L540.8,577.2M538.6,576.0 L537.2,573.6M540.8,577.2 L541.9,579.7M540.8,577.2 L538.6,576.0M537.2,573.6 L538.6,576.0M537.2,573.6 L523.0,550.2 L509.1,536.6M442.6,637.1 L448.1,630.8 L453.7,630.4M482.2,709.3 L464.1,717.0M491.0,671.5 L490.9,674.2M491.0,671.5 L491.2,668.5M550.2,-42.5 L553.3,-40.6M586.0,3.4 L590.3,2.1 L593.7,-1.8M593.7,-1.8 L590.3,2.1 L586.0,3.4M517.7,258.3 L521.3,259.0M517.7,258.3 L515.4,256.3M521.3,259.0 L517.7,258.3M454.8,193.7 L438.0,180.3M119.1,245.3 L113.4,249.3M119.1,245.3 L127.7,239.3M119.1,245.3 L112.2,251.5M113.4,249.3 L119.1,245.3M127.7,239.3 L119.1,245.3M112.2,251.5 L119.1,245.3M112.2,251.5 L108.5,254.6M285.0,305.3 L293.7,310.2M285.0,305.3 L253.4,305.0M293.7,310.2 L285.0,305.3M293.7,310.2 L298.1,314.9M253.4,305.0 L285.0,305.3M253.4,305.0 L235.9,306.4 L217.8,314.3 L211.8,315.8 L166.6,314.4 L163.0,316.4 L160.4,320.5M286.8,299.3 L287.1,303.2 L290.3,305.8M286.8,299.3 L285.2,303.9M290.3,305.8 L287.1,303.2 L286.8,299.3M290.3,305.8 L285.2,303.9M290.3,305.8 L295.0,309.5M106.6,254.8 L109.4,252.5M106.6,254.8 L103.7,257.5M109.4,252.5 L106.6,254.8M109.4,252.5 L111.7,250.7M103.7,257.5 L106.6,254.8M467.9,-34.5 L462.2,-31.5M467.9,-34.5 L475.4,-39.8M462.2,-31.5 L457.8,-26.3M462.2,-31.5 L467.9,-34.5M475.4,-39.8 L467.9,-34.5M475.4,-39.8 L487.5,-43.6 L498.1,-48.9 L500.2,-52.2M45
380777.8,-26.3 L462.2,-31.5M508.3,-39.6 L513.9,-40.2M508.3,-39.6 L493.1,-38.9M508.3,-39.6 L511.2,-29.5 L508.4,-25.1 L509.3,-17.6 L508.0,-4.4 L503.4,-3.9 L497.7,0.2M465.6,-18.3 L462.8,-21.5 L464.5,-24.7 L471.0,-29.6 L478.6,-32.6M478.6,-32.6 L481.6,-34.4M478.6,-32.6 L471.0,-29.6 L464.5,-24.7 L462.8,-21.5 L465.6,-18.3M481.6,-34.4 L493.1,-38.9M481.6,-34.4 L478.6,-32.6M493.1,-38.9 L508.3,-39.6M493.1,-38.9 L481.6,-34.4M497.7,0.2 L503.4,-3.9 L508.0,-4.4 L509.3,-17.6 L508.4,-25.1 L511.2,-29.5 L508.3,-39.6M78.2,68.3 L81.5,65.6M78.2,68.3 L84.3,82.0M78.2,68.3 L75.0,58.0M75.0,58.0 L78.2,68.3M75.0,58.0 L71.6,43.3M103.2,117.7 L105.4,121.2M103.2,117.7 L106.2,115.8M103.2,117.7 L101.0,114.1M105.4,121.2 L103.2,117.7M105.4,121.2 L108.8,126.4M106.2,115.8 L112.0,111.4 L109.1,107.7M106.2,115.8 L103.2,117.7M101.0,114.1 L97.3,108.2M101.0,114.1 L103.2,117.7M106.0,102.2 L107.1,104.8M107.1,104.8 L106.0,102.2M111.3,130.0 L109.9,128.0M111.3,130.0 L114.5,134.0M109.9,128.0 L111.3,130.0M114.5,134.0 L118.8,140.1M114.5,134.0 L111.3,130.0M118.8,140.1 L115.3,135.8M118.8,140.1 L114.5,134.0M119.6,139.3 L132.0,134.4M117.5,140.6 L113.6,141.8M119.9,139.9 L131.9,135.4M115.3,135.8 L118.8,140.1M122.2,151.4 L120.7,145.1M122.2,151.4 L123.5,159.4M120.7,145.1 L122.2,151.4M123.5,159.4 L122.2,151.4M124.9,175.2 L125.2,177.9M124.9,173.8 L124.1,165.4M130.0,186.4 L122.4,183.9M130.0,186.4 L126.7,182.3M277.5,130.8 L278.3,128.8 L276.5,126.2 L269.8,124.5M277.5,130.8 L273.6,129.4 L265.0,129.8M277.5,130.8 L280.9,134.5 L283.2,141.1 L282.7,144.7 L279.3,151.2M265.0,129.8 L273.6,129.4 L277.5,130.8M265.0,129.8 L257.7,130.1M279.3,151.2 L276.8,164.9 L284.8,178.8 L287.1,191.4M279.3,151.2 L282.7,144.7 L283.2,141.1 L280.9,134.5 L277.5,130.8M279.3,151.2 L261.3,151.8M261.3,151.8 L252.5,155.8M261.3,151.8 L279.3,151.2M252.5,155.8 L261.3,151.8M247.5,158.2 L250.5,156.8M246.5,158.7 L235.9,161.1 L220.8,159.9M250.5,156.8 L247.5,158.2M156.3,173.7 L163.2,170.3M155.8,174.6 L150.0,183.5M163.2,170.3 L171.5,168.4M163.2,170.3 L156.3,173.7M170.7,203.8 L172.2,207.4M170.7,203.8 L179.7,205.0M172.2,207.4 L170.7,203.8M172.2,207.4 L170.9,211.7M172.2,207.4 L173.0,210.2M169.6,203.4 L163.4,201.2 L165.5,202.5M179.7,205.0 L173.0,210.2M179.7,205.0 L170.7,203.8M162.6,235.2 L159.0,233.4M149.8,228.6 L157.3,232.6M150.5,228.2 L163.0,234.4M157.3,232.6 L149.8,228.6M148.1,226.9 L142.9,222.3M150.0,226.9 L153.2,223.5M181.1,205.1 L184.6,205.3M180.3,205.7 L175.4,209.3M173.0,210.2 L170.9,211.7M173.0,210.2 L179.7,205.0M173.0,210.2 L172.2,207.4M170.9,211.7 L168.0,213.9M170.9,211.7 L173.0,210.2M170.9,211.7 L172.2,207.4M172.1,211.4 L168.0,213.9M168.0,213.9 L172.1,211.4M168.0,213.9 L170.9,211.7M184.6,205.3 L181.1,205.1M206.0,207.2 L202.1,205.6M206.0,209.6 L196.7,207.4M233.7,111.7 L235.5,115.1M233.7,111.7 L231.0,107.9M209.7,140.9 L218.9,130.9 L221.4,126.1 L222.2,120.3 L220.0,111.6M209.3,142.1 L208.2,150.9M220.0,111.6 L222.2,120.3 L221.4,126.1 L218.9,130.9 L209.7,140.9M208.2,150.9 L208.9,158.8M208.2,150.9 L209.3,142.1M208.9,158.8 L208.2,150.9M209.3,161.1 L209.9,164.5M208.3,160.2 L198.2,162.3M210.1,142.2 L209.1,148.8 L210.0,158.7M210.9,163.3 L210.4,160.9M210.9,163.3 L218.2,193.1 L217.5,199.0 L212.4,208.9M211.7,161.3 L214.4,159.6M210.4,160.9 L210.9,163.3M212.4,208.9 L211.2,211.2M212.4,208.9 L213.4,211.8M212.4,208.9 L217.5,199.0 L218.2,193.1 L210.9,163.3M214.4,159.6 L211.7,161.3M214.4,159.6 L210.9,159.8M214.9,159.6 L219.7,159.8M210.9,159.8 L214.4,159.6M210.0,158.7 L209.1,148.8 L210.1,142.2M209.9,164.5 L209.3,161.1M209.9,164.5 L207.6,161.3 L198.2,162.3M209.9,164.5 L217.5,194.5 L210.9,208.8M198.2,162.3 L207.6,161.3 L209.9,164.5M198.2,162.3 L208.3,160.2M198.2,162.3 L188.5,164.5M210.9,208.8 L217.5,194.5 L209.9,164.5M210.9,208.8 L207.3,210.0M731.4,170.6 L729.0,170.9 L723.9,176.5M632.2,168.9 L636.1,168.9 L640.4,166.3 L646.5,166.2 L654.8,163.1M-226.7,238.9 L-222.3,238.8M-228.4,244.2 L-226.1,240.5M-191.8,244.4 L-191.6,238.9M-199.4,228.9 L-200.8,232.1M413.5,273.7 L413.5,277.7M426.0,276.3 L423.9,277.5M423.9,277.5 L419.1,279.0M423.9,277.5 L426.0,276.3M492.1,246.1 L491.0,241.7M183.2,261.3 L180.6,266.1M183.2,261.3 L187.9,253.3M187.9,253.3 L188.3,249.8 L186.6,247.6M187.9,253.3 L189.9,249.7 L186.6,247.6M187.9,253.3 L183.2,261.3M176.4,274.3 L180.6,266.1M176.4,274.3 L170.1,290.6M176.4,274.3 L175.3,280.9M178.4,5.9 L171.5,4.3M140.3,59.5 L134.2,55.5 L122.0,52.3M122.0,52.3 L134.2,55.5 L140.3,59.5M131.9,135.4 L137.8,133.5M131.9,135.4 L119.9,139.9M132.0,134.4 L119.6,139.3M150.9,129.6 L140.0,132.9M153.2,128.9 L158.6,127.1M159.7,126.8 L170.3,123.7M159.5,125.9 L177.3,121.1M158.6,127.1 L153.2,128.9M206.4,114.4 L203.2,115.6M206.4,114.4 L208.7,113.8M208.7,113.8 L206.4,114.4M232.3,107.0 L236.3,105.7M232.0,107.7 L233.6,110.7M236.3,105.7 L240.1,104.6M236.3,105.7 L232.3,107.0M240.1,104.6 L236.3,105.7M242.3,104.1 L246.5,103.0M254.8,100.7 L257.9,99.9M254.8,100.7 L246.5,103.0M254.8,100.7 L242.1,103.0M261.9,98.8 L264.6,98.0M261.9,98.8 L257.9,99.9M264.6,98.0 L261.9,98.8M257.9,99.9 L261.9,98.8M257.9,99.9 L254.8,100.7M266.
380770,97.6 L267.7,96.9 L267.9,97.8M267.9,97.8 L268.5,100.2M267.9,97.8 L267.7,96.9 L266.0,97.6M231.9,106.0 L242.1,103.0M187.9,119.1 L193.1,118.1M186.1,119.5 L177.3,121.1M177.3,121.1 L159.5,125.9M177.3,121.1 L186.1,119.5M177.1,120.6 L174.9,113.9M158.5,126.1 L152.6,127.9M152.6,127.9 L158.5,126.1M150.7,128.6 L139.8,132.0M139.8,132.0 L150.7,128.6M137.9,132.6 L134.3,133.7M134.3,133.7 L137.9,132.6M390.4,365.5 L387.0,370.2M413.8,364.5 L414.4,358.4M420.7,355.8 L414.4,358.4M420.7,355.8 L431.2,362.2M431.2,362.2 L420.7,355.8M431.2,362.2 L439.9,363.3M464.0,378.7 L458.3,377.9M458.3,377.9 L464.0,378.7M463.0,388.6 L459.0,386.9M463.0,388.6 L463.2,389.6 L464.2,389.3 L464.0,388.4 L463.0,388.6M463.0,388.6 L464.0,388.4 L464.2,389.3 L463.2,389.6 L463.0,388.6M459.0,386.9 L463.0,388.6M459.0,386.9 L452.8,385.9M448.3,385.8 L446.5,379.7 L447.4,374.9M449.0,385.8 L452.8,385.9M447.4,374.9 L446.5,379.7 L448.3,385.8M447.4,374.9 L456.5,358.1M447.4,374.9 L444.6,370.3M464.1,345.3 L457.7,356.5M457.7,356.5 L464.1,345.3M456.5,358.1 L447.4,374.9M444.6,370.3 L442.1,366.1M444.6,370.3 L447.4,374.9M439.9,363.3 L431.2,362.2M440.5,363.9 L442.1,366.1M461.6,358.3 L466.4,354.5M383.9,333.9 L379.2,331.1M383.9,333.9 L384.2,334.9 L385.1,334.5 L384.8,333.8 L383.9,333.9M383.9,333.9 L384.8,333.8 L385.1,334.5 L384.2,334.9 L383.9,333.9M504.6,502.0 L504.0,505.6M504.0,501.0 L502.9,498.9M505.8,503.7 L508.7,509.4 L506.5,508.2M504.0,505.6 L504.6,502.0M385.7,479.7 L384.6,480.4 L385.4,481.5 L386.5,480.6 L385.7,479.7M385.7,479.7 L386.5,480.6 L385.4,481.5 L384.6,480.4 L385.7,479.7M386.8,477.7 L390.7,473.7M448.7,486.8 L455.7,490.8M448.7,486.8 L440.5,480.4M455.7,490.8 L459.6,494.0M455.7,490.8 L448.7,486.8M440.5,480.4 L448.7,486.8M384.0,419.5 L389.1,431.8M384.0,419.5 L382.9,416.3M380.1,407.4 L382.9,416.3M389.1,431.8 L384.0,419.5M389.8,431.2 L393.0,428.8M393.2,429.0 L394.6,431.2M393.5,425.2 L392.1,427.5 L393.0,428.8M418.3,430.9 L417.0,433.1M388.9,421.8 L390.3,422.5 L393.5,419.3M419.9,396.4 L427.1,400.8M431.8,402.6 L427.5,407.8M431.8,402.6 L427.1,400.8M441.2,469.3 L435.8,472.8M400.3,405.0 L403.2,408.2 L403.2,410.5M-193.5,205.2 L-193.5,209.8M-151.7,20.1 L-152.1,10.5M-151.7,20.8 L-151.2,23.9M-151.2,23.9 L-149.9,36.8 L-135.9,78.5M-151.2,23.9 L-151.7,20.8M625.4,450.8 L628.6,451.6M635.2,450.8 L633.4,452.7 L628.3,453.0M633.3,683.6 L635.2,684.4 L634.9,687.4 L628.4,694.9M628.4,694.9 L625.4,692.3M628.4,694.9 L634.9,687.4 L635.2,684.4 L633.3,683.6M625.4,692.3 L628.4,694.9M625.4,692.3 L623.6,690.6M566.4,585.9 L568.6,583.5M566.4,585.9 L569.0,588.3M568.6,583.5 L566.4,585.9M569.0,588.3 L566.4,585.9M-5.1,704.0 L-14.7,702.9M-5.1,704.0 L-1.9,704.4M-18.3,689.2 L-19.1,696.9M-18.3,689.2 L-17.2,679.8M207.3,210.0 L210.9,208.8M207.3,210.0 L209.9,210.8M209.9,210.8 L207.3,210.0M213.4,211.8 L212.4,208.9M228.5,218.2 L228.9,219.3 L230.6,219.0M230.6,219.0 L228.9,219.3 L228.5,218.2M206.9,211.0 L208.3,213.6M208.3,213.6 L202.7,224.5M208.3,213.6 L206.9,211.0M173.0,286.9 L175.3,280.9M173.0,286.9 L171.0,292.2M429.3,190.7 L433.3,185.6M262.6,210.2 L259.3,207.6M307.8,122.4 L310.6,125.3M307.8,122.4 L304.5,124.9 L301.1,125.5M307.8,122.4 L311.1,118.8 L311.9,115.4M301.1,125.5 L297.8,125.4M301.1,125.5 L304.5,124.9 L307.8,122.4M311.9,115.4 L311.1,118.8 L307.8,122.4M311.9,115.4 L309.4,110.1M427.3,173.2 L423.4,170.0M427.3,173.2 L430.8,175.9M423.4,170.0 L427.3,173.2M423.4,170.0 L419.8,167.1M430.8,175.9 L433.2,177.8M430.8,175.9 L427.3,173.2M313.0,106.3 L309.4,110.1M313.0,106.3 L314.4,101.1M314.6,107.2 L317.1,108.7M297.8,125.4 L301.1,125.5M297.8,125.4 L295.0,125.6 L293.5,127.9M303.5,124.4 L306.8,121.5M310.3,115.5 L308.0,111.6M310.3,115.5 L309.9,118.1 L306.8,121.5M375.0,215.7 L376.3,210.4M375.0,215.7 L371.3,231.5M315.0,121.2 L314.8,121.8 L315.9,122.6 L316.3,121.8 L315.0,121.2M315.0,121.2 L316.3,121.8 L315.9,122.6 L314.8,121.8 L315.0,121.2M315.0,121.2 L316.1,116.9 L313.0,115.3M313.0,115.3 L316.1,116.9 L315.0,121.2M313.0,115.3 L312.2,111.3M293.5,127.9 L295.0,125.6 L297.8,125.4M290.4,113.4 L291.2,110.1M364.0,259.9 L362.9,262.8M308.0,111.6 L310.3,115.5M282.7,223.1 L282.4,221.2 L284.7,219.0M282.7,223.1 L281.1,222.7 L281.3,218.3M282.8,223.1 L296.3,225.0M284.7,219.0 L282.4,221.2 L282.7,223.1M281.3,218.3 L281.1,222.7 L282.7,223.1M314.4,127.9 L310.6,125.3M334.1,67.0 L328.8,61.1M334.1,67.0 L335.8,68.7M428.3,192.1 L426.8,194.7M421.2,208.3 L420.5,210.8M421.2,208.3 L423.7,200.8M413.5,280.5 L413.5,277.7M469.5,-85.9 L475.0,-86.9 L478.6,-85.9 L487.4,-73.7M469.5,-85.9 L459.5,-84.8M469.5,-85.9 L468.3,-90.3 L466.3,-92.1M466.3,-92.1 L468.3,-90.3 L469.5,-85.9M396.1,-77.9 L402.0,-75.2M408.6,-79.9 L423.3,-80.3M423.3,-80.3 L426.6,-81.1M423.3,-80.3 L408.6,-79.9M407.1,-84.8 L406.9,-80.3M407.1,-84.8 L406.9,-90.5M440.4,-79.6 L445.8,-81.2M440.4,-79.6 L435.6,-79.3 L426.6,-81.1M440.4,-79.6 L434.4,-72.2 L433.9,-69.7 L434.1,-65.8 L436.7,-62.4 L436.9,-58.0 L438.1,-55.8 L440.7,-54.7 L437.9,-54.2M426.6,-81.1 L435.6,-79.3 L440.4,-79.6M426.6,-81.1 L423.3,-80.3M437.9,-54.2 L440.7,-54.7 L438.1,-55.8 L436.9,-58.0 L436.7,-62.4 L434.1,-65.8 L433.9,-69.7 L434.4,-72.2 L440.4,-79.6M201.3,230.3 L191.5,248.8M191.5,248.8 L201.3,230.3M191.5,248.8 L189.8,252.0M144.3,191.1 L145.6,190.5 L145.1,191.7M145.1,191.7 L145.6,190.5 L144.3,191.1M141.4,191.8 L138.8,190.6M138.8,190.6 L141.4,191.8M184.0,265.8 L182.3,269.1 L184.5,272.6M186.6,247.6 L188.3,249.8 L187.9,253.3M186.6,247.6 L189.9,249.7 L187.9,253.3M186.6,247.6 L179.6,244.0 L178.1,253.6M178.1,253.6 L179.6,244.0 L186.6,247.6M184.2,272.9 L181.7,274.6M191.7,246.1 L189.4,247.4M189.4,247.4 L191.7,246.1M64.4,167.4 L61.2,167.5M61.2,167.5 L64.4,166.7M61.2,167.5 L64.4,167.4M61.2,167.5 L56.1,172.2 L50.8,172.4M64.4,166.7 L61.2,167.5M50.8,172.4 L50.0,181.8 L53.5,184.0M50.8,172.4 L56.1,172.2 L61.2,167.5M53.5,184.0 L50.0,181.8 L50.8,172.4M85.1,165.0 L76.8,165.9M76.8,165.9 L85.1,165.0M76.8,165.9 L72.2,166.4M-21.8,578.7 L-12.7,582.5M38.3,548.8 L35.9,552.0M57.6,529.5 L55.6,532.7M57.6,529.5 L60.0,526.8 L64.4,525.3M57.6,529.5 L53.9,526.6M64.4,525.3 L66.2,522.6M64.4,525.3 L60.0,526.8 L57.6,529.5M6.3,-36.1 L13.4,-30.1M6.3,-36.1 L2.3,-41.4M6.3,-36.1 L3.9,-38.2M-1.0,-45.5 L2.3,-41.4M-1.0,-45.5 L-5.5,-54.2M460.7,250.8 L455.1,250.3M455.1,250.3 L460.7,250.8M464.8,250.6 L466.0,251.0 L464.7,251.2M462.7,250.4 L455.1,249.7M462.7,250.4 L462.9,245.7M464.7,251.2 L466.0,251.0 L464.8,250.6M493.2,229.4 L495.0,227.4M493.2,229.4 L490.0,224.7M455.1,249.7 L462.7,250.4M454.7,249.7 L455.0,245.0M495.0,227.4 L493.2,229.4M495.0,227.4 L496.6,225.5M490.0,224.7 L488.7,222.2M490.0,224.7 L493.2,229.4M474.1,246.2 L471.6,246.1M474.1,246.2 L478.5,246.5M513.2,256.3 L509.4,256.3M539.8,266.0 L542.1,262.5M401.9,546.2 L404.6,547.4M282.7,294.1 L286.6,294.1M286.6,293.6 L286.5,290.4M286.9,297.0 L286.6,294.1M477.9,430.1 L475.4,427.7 L474.7,423.5M616.6,443.8 L617.0,447.8 L620.7,449.9M618.6,444.0 L621.3,447.7 L620.7,449.9M617.3,424.5 L618.2,421.8 L620.9,420.1M620.9,420.1 L618.2,421.8 L617.3,424.5M-148.1,0.6 L-145.4,-0.3M-136.4,-10.3 L-140.0,-11.8M-136.4,-10.3 L-134.5,-14.4M-136.4,-10.3 L-139.9,-3.5 L-145.4,-0.3M-140.0,-11.8 L-136.4,-10.3M-134.5,-14.4 L-136.4,-10.3M-181.5,-18.7 L-185.7,-12.4M-181.5,-18.7 L-191.0,-24.4M-179.5,-17.6 L-177.0,-16.2M-185.7,-12.4 L-190.1,-13.9 L-196.8,-13.0 L-191.0,-24.4M-185.7,-12.4 L-181.5,-18.7M-191.0,-24.4 L-196.8,-13.0 L-190.1,-13.9 L-185.7,-12.4M-191.0,-24.4 L-181.5,-18.7M-191.0,-24.4 L-192.9,-26.5M-197.8,-99.9 L-200.2,-104.1M42.3,540.8 L44.6,537.7M41.9,541.3 L35.2,550.8M44.6,537.7 L42.3,540.8M41.8,540.6 L21.9,529.1M62.9,190.1 L70.5,191.0M66.7,190.9 L70.5,191.3M327.7,247.5 L326.3,250.3M322.3,244.3 L328.1,246.7M322.3,244.3 L317.6,243.1M18.4,385.6 L23.7,383.4 L28.2,384.6M20.0,392.3 L27.1,399.0 L33.8,402.5M20.0,392.3 L16.4,386.5M7.4,396.3 L-1.4,392.4 L-4.0,393.1 L-6.6,395.9M-6.6,395.9 L-4.0,393.1 L-1.4,392.4 L7.4,396.3M-6.6,395.9 L-8.6,399.4 L-8.8,406.1 L-13.8,410.5M-6.6,365.7 L-11.1,368.0 L-23.2,362.9M-6.6,365.7 L-5.6,366.3 L-5.1,365.1 L-6.2,364.6 L-6.6,365.7M-6.6,365.7 L-6.2,364.6 L-5.1,365.1 L-5.6,366.3 L-6.6,365.7M-23.2,362.9 L-11.1,368.0 L-6.6,365.7M-12.4,344.9 L-19.8,353.4 L-24.0,362.7M8.1,352.6 L16.8,352.1 L18.3,347.8 L15.7,344.8 L11.5,344.8 L8.7,348.4 L8.1,352.6M8.1,352.6 L8.7,348.4 L11.5,344.8 L15.7,344.8 L18.3,347.8 L16.8,352.1 L8.1,352.6M8.1,352.6 L2.5,356.0M42.5,348.4 L39.7,344.7 L36.7,343.8M36.7,343.8 L39.7,344.7 L42.5,348.4M36.7,343.8 L33.4,342.8 L31.9,347.5M38.5,390.2 L39.5,388.9 L38.7,388.2 L38.0,388.9 L38.5,390.2M38.5,390.2 L38.0,388.9 L38.7,388.2 L39.5,388.9 L38.5,390.2M38.5,390.2 L35.7,393.2M-8.5,346.0 L2.5,356.0M-8.5,346.0 L-11.3,343.6M45.9,414.9 L53.1,418.5 L54.7,417.6 L53.8,416.2 L45.9,414.9M45.9,414.9 L53.8,416.2 L54.7,417.6 L53.1,418.5 L45.9,414.9M240.8,530.6 L243.3,526.4M240.8,530.6 L238.6,534.7 L235.5,535.5 L233.0,537.8M233.0,537.8 L235.5,535.5 L238.6,534.7 L240.8,530.6M303.3,476.6 L308.8,474.1M275.6,568.0 L273.7,566.9 L272.6,563.2M272.6,563.2 L273.7,566.9 L275.6,568.0M272.6,563.2 L271.8,556.3 L287.3,524.8M746.1,574.1 L748.3,584.8M748.3,584.8 L746.4,589.9M748.3,584.8 L746.1,574.1M219.0,110.9 L210.6,113.1M221.2,110.2 L230.1,107.6M219.7,109.0 L217.4,103.7M220.8,109.3 L229.9,106.7M218.8,109.7 L212.9,111.4M585.5,76.8 L588.0,77.2M476.0,179.3 L486.3,167.2M476.0,179.3 L476.7,181.3 L489.3,191.4M501.0,181.8 L496.2,186.8 L489.3,191.4M616.0,419.5 L616.2,412.8M616.0,419.5 L616.0,424.5M616.2,412.8 L616.0,419.5M617.6,410.8 L619.7,409.8M548.0,406.2 L542.5,401.7M548.0,406.2 L553.4,413.2 L552.5,416.9 L550.1,417.9M550.1,417.9 L552.5,416.9 L553.4,413.2 L548.0,406.2M532.4,388.6 L534.4,382.8M530.6,387.7 L528.0,386.4M534.4,382.8 L532.4,388.6M534.4,382.8 L536.4,375.8 L540.3,371.5M570.9,382.4 L576.0,378.3M570.9,382.4 L567.1,382.7 L563.9,380.5M576.0,378.3 L577.8,376.1M576.0,378.3 L570.9,382.4M563.9,380.5 L567.1,382.7 L570.9,382.4M562.4,378.7 L553.8,374.8M562.6,378.3 L560.9,375.3 L555.6,373.0 L553.8,374.8M577.8,376.1 L576.0,378.3M492.3,273.1 L499.6,278.2M492.0,272.9 L495.3,268.2M467.2,255.2 L425.1,248.7M425.1,248.7 L419.0,247.8M425.1,248.7 L467.2,255.2M-62.6,688.5 L-65.2,690.4M-62.6,688.5 L-56.1,683.0M317.9,109.6 L320.9,112.4 L324.6,108.9 L321.3,105.3 L317.5,108.4M317.1,108.7 L314.6,107.2M317.5,108.4 L321.3,105.3 L324.6,108.9 L320.9,112.4 L317.9,109.6M472.7,147.9 L471.2,148.0 L472.4,147.3M472.7,147.9 L483.0,145.0 L494.2,155.5M625.8,114.7 L626.7,109.4 L624.2,104.5M643.9,102.6 L641.0,102.9M643.9,102.6 L662.4,102.9M587.6,25.8 L600.0,41.1M299.0,315.7 L301.3,318.3M178.7,230.4 L175.1,228.6M178.7,233.7 L177.7,236.1M182.4,227.7 L183.8,225.2M177.7,236.1 L178.7,233.7M177.4,237.1 L176.5,240.6M178.2,236.2 L179.4,234.0M179.4,234.0 L178.2,236.2M181.7,233.6 L184.5,235.0M190.4,235.8 L192.8,233.3 L192.5,231.1M190.4,235.8 L193.5,233.3M192.5,231.1 L192.8,233.3 L190.4,235.8M193.5,233.3 L193.1,231.0M193.5,233.3 L190.4,235.8M178.1,231.7 L174.4,229.8M188.3,237.0 L184.5,235.0M189.0,235.8 L185.3,234.0M167.2,224.9 L164.9,223.6M182.3,232.4 L185.3,234.0M164.2,234.3 L167.5,228.2M163.0,234.4 L150.5,228.2M192.5,230.6 L192.2,228.7 L194.1,224.7M194.1,224.7 L192.2,228.7 L192.5,230.6M193.1,231.0 L193.5,233.3M166.9,225.4 L163.5,223.8M167.5,228.2 L164.2,234.3M169.7,227.3 L174.4,229.8M174.4,229.8 L169.7,227.3M174.4,229.8 L178.1,231.7M183.8,225.2 L182.4,227.7M170.6,226.3 L175.1,228.6M188.6,241.6 L189.2,238.1M189.2,238.1 L188.6,241.6M183.9,244.5 L185.9,241.6M185.9,241.6 L183.9,244.5M189.0,238.1 L188.2,240.8M188.2,240.8 L189.0,238.1M163.0,223.5 L159.9,221.5M163.5,223.8 L166.9,225.4M163.4,222.8 L160.6,220.8M159.9,221.5 L163.0,223.5M175.4,209.3 L180.3,205.7M164.9,223.6 L167.2,224.9M160.6,220.8 L163.4,222.8M434.5,576.3 L435.4,572.5M435.4,572.5 L434.5,576.3M435.6,502.9 L434.6,510.0M434.6,510.0 L435.6,502.9M21.0,624.8 L24.0,627.1M24.0,627.1 L21.0,624.8M35.7,611.9 L39.9,614.8 L38.7,616.4 L37.4,615.1M35.7,611.9 L35.1,609.1M37.4,615.1 L38.7,616.4 L39.9,614.8 L35.7,611.9M35.1,609.1 L35.7,611.9M34.9,608.4 L37.4,607.1M34.9,608.4 L30.3,609.9M37.4,607.1 L39.5,604.6M37.4,607.1 L34.9,608.4M217.6,416.7 L223.5,399.9 L227.7,392.9 L234.8,386.8M264.6,379.9 L270.1,376.7M264.8,380.6 L270.1,376.7M270.1,376.7 L264.6,379.9M270.1,376.7 L264.8,380.6M270.1,376.7 L274.2,371.5M274.2,371.5 L275.7,369.6M274.2,371.5 L270.1,376.7M263.1,373.4 L269.7,370.0 L267.3,367.0M263.1,373.4 L262.3,374.3 L262.2,373.1M267.3,367.0 L269.7,370.0 L263.1,373.4M262.2,373.1 L262.3,374.3 L263.1,373.4M286.9,347.4 L289.8,344.4M286.9,347.4 L288.8,350.0M286.9,347.4 L284.8,347.9 L281.0,352.1M290.8,347.7 L288.8,350.0M72.2,166.4 L68.9,166.7M72.2,166.4 L76.8,165.9M-2.1,174.7 L0.8,174.7M-2.1,174.7 L-13.6,177.0M0.8,174.7 L19.4,177.7M0.8,174.7 L-2.1,174.7M36.0,199.5 L36.9,195.9M36.9,195.9 L36.0,199.5M36.9,195.9 L37.8,193.5M19.4,177.7 L27.4,178.6 L33.1,181.8M19.4,177.7 L0.8,174.7M37.8,193.5 L36.9,195.9M37.8,193.5 L38.7,190.9M732.1,130.9 L720.8,135.4M732.1,130.9 L735.0,127.1 L737.6,125.8M720.8,135.4 L716.2,137.5 L705.4,145.9M720.8,135.4 L732.1,130.9M107.2,275.7 L107.8,278.1M107.2,275.7 L105.8,268.6M105.8,268.6 L107.2,275.7M105.8,268.6 L105.0,264.8M124.2,268.1 L125.0,273.9M124.2,268.1 L124.2,260.0M498.6,513.2 L500.3,510.7M498.6,513.2 L497.4,515.9M195.7,616.4 L197.9,618.4M195.7,616.4 L188.5,610.2M195.7,616.4 L199.8,611.9M199.8,611.9 L195.7,616.4M132.6,604.6 L131.0,609.2M133.2,602.6 L130.5,599.7 L124.8,603.4M175.9,584.0 L183.1,587.7 L184.3,589.9M54.1,721.6 L57.6,699.2M-69.3,246.1 L-77.6,242.4M-77.6,242.4 L-73.1,230.1M-77.6,242.4 L-79.9,253.3 L-71.1,258.0 L-66.3,264.4 L-66.2,272.6M-77.6,242.4 L-69.3,246.1M-66.2,272.6 L-66.3,264.4 L-71.1,258.0 L-79.9,253.3 L-77.6,242.4M-222.3,238.8 L-220.6,240.1 L-220.5,241.4 L-221.7,241.0 L-222.3,238.8M-222.3,238.8 L-221.7,241.0 L-220.5,241.4 L-220.6,240.1 L-222.3,238.8M-222.3,238.8 L-226.7,238.9M-60.6,235.5 L-61.4,234.0 L-73.1,230.1M-160.5,209.0 L-165.9,209.8M-160.5,209.0 L-159.0,206.8 L-159.2,204.6 L-160.7,204.6 L-160.5,209.0M-160.5,209.0 L-160.7,204.6 L-159.2,204.6 L-159.0,206.8 L-160.5,209.0M171.5,168.4 L163.2,170.3M172.4,168.2 L182.0,165.9M182.0,165.9 L184.9,165.3M182.0,165.9 L172.4,168.2M123.8,161.3 L124.1,164.2M124.1,164.2 L123.8,161.3M124.1,165.4 L124.9,173.8M188.5,164.5 L198.2,162.3M-6.6,712.3 L-3.0,710.2M-6.6,712.3 L-13.4,716.2M-17.2,679.8 L-18.3,689.2M-17.2,679.8 L-14.9,667.2M2.1,662.1 L1.0,667.5M2.1,662.1 L6.8,654.6 L5.7,
38077653.7M1.2,661.8 L-0.2,667.3M1.2,661.8 L5.7,653.7M5.7,653.7 L1.2,661.8M5.7,653.7 L6.8,654.6 L2.1,662.1M-0.9,668.0 L-5.9,667.4M-0.9,668.1 L-6.0,668.2M-0.2,667.3 L1.2,661.8M-21.3,649.0 L-19.5,647.3M-19.5,647.3 L-21.3,649.0M-10.4,621.3 L-10.2,618.6M-10.4,621.3 L-11.0,627.2M-10.2,618.6 L-10.4,621.3M-10.2,618.6 L-9.6,613.7M-10.0,613.0 L-13.5,610.7M-9.1,611.9 L-4.8,604.9M17.1,578.0 L14.2,581.5M-184.2,689.2 L-193.6,689.9 L-205.0,692.9M-184.2,689.2 L-172.9,690.5 L-151.3,695.8 L-138.2,696.2M-136.9,691.1 L-132.5,686.3M-136.9,691.1 L-138.2,696.2M-143.7,672.3 L-138.2,673.0 L-133.9,676.5M-133.9,676.5 L-138.2,673.0 L-143.7,672.3M-133.9,676.5 L-132.2,681.2 L-132.5,686.3M33.7,404.9 L30.8,404.4 L29.6,411.5 L32.2,411.7 L33.7,404.9M33.7,404.9 L32.2,411.7 L29.6,411.5 L30.8,404.4 L33.7,404.9M-157.3,281.4 L-154.7,279.3M-157.3,281.4 L-156.1,283.2 L-154.0,281.2 L-154.7,279.3M-142.2,303.5 L-144.5,313.1M-142.2,303.5 L-140.7,297.1 L-141.0,290.8M-145.0,292.2 L-141.0,290.8M-145.0,292.2 L-146.5,290.9 L-148.7,292.1 L-150.3,296.4 L-149.6,298.3 L-146.4,299.4M-145.0,292.2 L-146.4,299.4M-146.4,299.4 L-145.0,292.2M-146.4,299.4 L-149.6,298.3 L-150.3,296.4 L-148.7,292.1 L-146.5,290.9 L-145.0,292.2M-143.7,349.3 L-142.2,352.4M-143.7,349.3 L-143.9,346.5M-148.3,361.2 L-142.2,352.4M-148.4,361.6 L-151.7,362.6M-147.1,363.2 L-143.0,367.4M-151.7,362.6 L-157.4,364.4 L-158.6,371.9M-151.7,362.6 L-148.4,361.6M-217.0,135.4 L-212.6,134.7M-217.0,135.4 L-220.8,135.8M740.0,114.7 L741.8,117.4M705.4,145.9 L702.4,149.0 L699.7,154.7 L700.8,157.0 L716.7,170.9M705.4,145.9 L716.2,137.5 L720.8,135.4M739.3,114.0 L675.1,104.1M6.5,590.7 L2.1,596.2M6.5,590.7 L11.1,585.1M2.1,596.2 L6.5,590.7M11.1,585.1 L6.5,590.7M253.9,428.2 L257.5,424.1 L254.3,418.8M269.0,408.1 L270.3,404.4 L266.1,402.1M260.9,371.7 L254.8,365.6M266.5,366.1 L260.3,360.3M271.3,343.0 L269.2,341.2M273.3,336.9 L269.2,341.2M237.5,335.2 L239.4,328.4M257.4,334.5 L260.7,335.0M257.4,334.5 L258.3,331.0M265.0,328.6 L261.3,332.7 L260.7,335.0M256.8,334.3 L249.7,332.4M258.3,331.0 L257.4,334.5M258.3,331.0 L252.6,329.4M258.3,331.0 L259.7,325.8M249.7,332.4 L256.8,334.3M252.6,329.4 L258.3,331.0M259.7,325.8 L258.3,331.0M259.7,325.8 L246.5,322.4M247.3,331.5 L239.4,328.4M241.5,320.7 L239.4,328.4M246.5,322.4 L259.7,325.8M366.5,387.1 L366.4,390.5M366.5,387.1 L366.5,384.5M366.4,390.5 L366.5,387.1M366.4,390.5 L366.3,397.2M369.1,386.6 L370.8,389.0M370.8,389.0 L372.2,391.2M370.8,389.0 L369.1,386.6M360.6,375.7 L363.6,379.1M360.6,375.7 L358.8,373.4M355.2,347.6 L358.3,348.1 L358.6,349.3 L356.2,348.8 L355.2,347.6M355.2,347.6 L356.2,348.8 L358.6,349.3 L358.3,348.1 L355.2,347.6M355.2,347.6 L352.3,346.5M361.9,339.4 L368.0,340.8M361.2,338.3 L360.4,335.3 L356.9,331.1 L356.5,334.6 L361.2,338.3M361.2,338.3 L356.5,334.6 L356.9,331.1 L360.4,335.3 L361.2,338.3M170.5,121.1 L168.9,116.1M168.9,116.1 L174.9,113.9M168.9,116.1 L170.5,121.1M168.9,116.1 L164.9,103.1M174.9,113.9 L168.9,116.1M174.9,113.9 L170.7,101.2M174.9,113.9 L180.7,111.5M174.9,113.9 L177.1,120.6M164.9,103.1 L168.9,116.1M164.9,103.1 L170.7,101.2M164.9,103.1 L161.5,103.5 L160.7,101.1M170.7,101.2 L169.8,98.3M170.7,101.2 L174.9,113.9M170.7,101.2 L176.4,99.5M170.7,101.2 L164.9,103.1M180.7,111.5 L176.4,99.5M180.7,111.5 L174.9,113.9M176.4,99.5 L180.7,111.5M176.4,99.5 L173.0,90.2M176.4,99.5 L170.7,101.2M160.7,101.1 L161.5,103.5 L164.9,103.1M160.7,101.1 L158.0,90.7 L158.5,86.5 L161.2,84.0 L162.5,80.7 L160.0,76.7 L157.7,75.7M169.8,98.3 L170.7,101.2M169.8,98.3 L168.3,92.0 L173.0,90.2M173.0,90.2 L176.4,99.5M173.0,90.2 L171.5,85.8M173.0,90.2 L168.3,92.0 L169.8,98.3M171.5,85.8 L173.0,90.2M193.0,67.0 L196.4,70.6M-17.2,673.1 L-16.2,667.0M23.2,569.8 L25.5,565.6M25.5,565.6 L23.2,569.8M25.5,565.6 L27.0,563.2M45.8,536.1 L47.4,533.8M44.8,537.4 L42.7,542.5M366.3,17.6 L368.3,11.8M366.3,17.6 L361.3,14.2 L363.2,11.1M365.9,18.8 L365.3,21.8M368.3,11.8 L366.3,17.6M368.3,11.8 L372.8,13.0M363.2,11.1 L361.3,14.2 L366.3,17.6M133.9,393.5 L135.8,385.9M133.9,393.5 L146.4,395.8 L149.4,401.2M149.8,363.7 L144.1,361.5M500.5,530.5 L502.8,530.6 L509.1,536.6M446.7,-14.5 L447.0,-20.0 L453.1,-20.5 L456.6,-24.7M456.6,-24.7 L453.1,-20.5 L447.0,-20.0 L446.7,-14.5M730.7,17.6 L726.7,15.0M732.2,18.6 L735.6,21.7 L735.0,25.5M432.7,240.5 L428.6,239.7M-119.9,163.9 L-113.7,162.7M-121.2,164.1 L-124.8,164.5M49.7,200.7 L51.2,200.6 L52.3,196.6M52.3,196.6 L51.2,200.6 L49.7,200.7M38.7,190.9 L37.8,193.5M70.5,191.3 L66.7,190.9M280.1,75.3 L282.8,84.3 L280.6,86.8 L281.6,92.7M281.6,92.7 L280.6,86.8 L282.8,84.3 L280.1,75.3M393.5,334.1 L391.1,332.0M676.7,-35.1 L678.6,-28.2 L680.6,-25.8M184.9,165.3 L182.0,165.9M150.0,183.5 L155.8,174.6M149.2,185.3 L146.5,191.0M146.5,191.0 L149.2,185.3M147.0,192.3 L148.9,194.7 L146.0,193.4M326.3,250.3 L324.8,253.7M326.3,250.3 L327.7,247.5M26.7,566.0 L28.2,563.5M26.7,566.0 L23.3,571.8M28.2,563.5 L26.7,566.0M28.8,562.6 L31.0,559.1M35.9,568.7 L38.1,564.4M35.9,568.7 L34.0,573.7 L36.8,575.5M38.1,564.4 L35.9,568.7M36.8,575.5 L34.0,573.7 L35.9,568.7M40.2,559.5 L38.3,563.1M38.3,563.1 L40.2,559.5M39.1,548.7 L61.3,564.4 L63.5,564.6M63.5,564.6 L61.3,564.4 L39.1,548.7M18.3,699.5 L15.7,706.1M11.9,674.6 L6.2,670.1 L1.5,668.4M11.9,674.6 L14.7,678.6M20.7,688.9 L19.3,686.3M20.7,688.9 L23.4,693.5M-11.8,667.7 L-6.0,668.2M-6.0,668.2 L-0.9,668.1M-6.0,668.2 L-11.8,667.7M112.6,-97.5 L109.5,-95.7M112.6,-97.5 L118.5,-98.8M419.1,279.0 L423.9,277.5M576.7,321.5 L579.2,324.8M576.7,321.5 L575.2,319.4M578.2,629.5 L582.0,637.6M584.3,636.7 L582.0,637.6M459.8,91.0 L458.8,87.9M459.8,91.0 L460.7,93.6M460.7,93.6 L459.8,91.0M461.1,94.1 L462.7,96.2M461.1,105.6 L448.2,100.3M165.5,202.5 L168.3,203.6M16
380775.5,202.5 L163.4,201.2 L169.6,203.4M518.5,218.1 L514.7,214.9M518.5,218.1 L523.0,222.0M90.5,267.3 L92.9,266.1M90.5,267.3 L86.3,268.4M92.9,266.1 L90.5,267.3M86.3,268.4 L83.3,269.6M86.3,268.4 L90.5,267.3M86.3,268.4 L76.6,270.3M335.5,479.5 L343.1,477.5M335.5,479.5 L332.4,496.6M332.4,496.6 L331.5,501.4M332.4,496.6 L335.5,479.5M531.7,358.8 L526.0,357.3M526.0,357.3 L531.7,358.8M511.5,374.9 L512.8,370.9M490.2,345.9 L486.6,347.5M490.2,345.9 L492.7,344.9M486.6,347.5 L490.2,345.9M490.3,346.5 L491.3,348.9M498.0,350.1 L498.8,352.5M491.3,348.9 L490.3,346.5M491.3,348.9 L493.1,351.6 L497.9,350.0M499.2,334.7 L495.1,335.9M499.2,334.7 L499.7,333.8 L500.6,334.4 L500.0,335.3 L499.2,334.7M499.2,334.7 L500.0,335.3 L500.6,334.4 L499.7,333.8 L499.2,334.7M506.4,339.1 L508.6,338.0M506.1,338.5 L503.6,337.6 L502.3,335.2M502.3,335.2 L503.6,337.6 L506.1,338.5M512.0,332.2 L524.5,325.8M-220.8,135.8 L-217.0,135.4M-220.8,135.8 L-224.8,134.5M-224.8,134.5 L-220.8,135.8M470.2,482.7 L474.1,482.8M527.9,521.1 L531.1,516.4M509.1,536.6 L523.0,550.2 L537.2,573.6M509.1,536.6 L502.8,530.6 L500.5,530.5M537.0,507.8 L543.1,500.0M500.3,510.7 L498.6,513.2M533.7,506.0 L536.8,508.2M621.6,440.5 L621.3,441.5 L616.3,442.3M271.3,121.6 L269.8,124.5M271.3,121.6 L274.3,122.2M271.3,121.6 L266.1,116.5M274.3,122.2 L271.3,121.6M266.1,116.5 L271.3,121.6M328.8,539.3 L333.6,536.8 L335.9,543.1 L352.8,551.4M418.7,552.5 L420.7,550.5M423.6,556.2 L421.3,557.6M421.3,557.6 L423.6,556.2M421.9,546.3 L424.1,545.3M424.1,545.3 L421.9,546.3M438.7,557.3 L438.5,554.5M438.5,554.5 L438.7,557.3M438.8,542.5 L438.1,545.8M439.1,540.4 L439.1,537.3M439.1,537.3 L439.1,540.4M439.0,536.0 L438.7,532.3M438.7,532.3 L439.0,536.0M430.9,535.9 L430.8,533.5M430.8,533.5 L430.9,535.9M430.7,532.5 L430.4,529.6M430.4,529.6 L430.7,532.5M426.4,523.4 L428.1,525.3M431.6,525.3 L433.5,523.8M433.5,523.8 L431.6,525.3M435.8,516.6 L435.4,514.2M435.4,514.2 L435.8,516.6M419.9,537.1 L422.8,538.4M422.8,538.4 L419.9,537.1M420.7,517.3 L421.2,514.6M421.2,514.6 L420.7,517.3M422.5,506.6 L422.1,509.1M501.5,566.7 L498.4,566.5M498.4,566.5 L501.5,566.7M509.8,572.9 L507.1,568.6M499.7,576.7 L501.4,578.7M501.4,578.7 L499.7,576.7M508.7,589.0 L510.3,591.3M510.3,591.3 L508.7,589.0M509.4,595.2 L506.4,596.3M506.4,596.3 L509.4,595.2M508.0,604.2 L510.6,603.5M511.9,613.4 L513.2,611.4M486.9,615.6 L487.9,619.1M488.0,617.3 L487.3,614.6M488.5,619.0 L491.3,629.6M487.9,619.1 L485.0,618.4M487.9,619.1 L490.6,629.8M487.9,619.1 L486.9,615.6M513.1,577.6 L514.7,579.8M514.7,579.8 L513.1,577.6M530.5,592.9 L530.2,590.5M530.2,590.5 L530.5,592.9M530.8,594.9 L532.6,609.9M532.6,609.9 L530.8,594.9M519.9,598.0 L521.5,600.4M521.5,600.4 L519.9,598.0M525.7,606.4 L527.5,609.0M527.5,609.0 L525.7,606.4M529.5,611.8 L531.7,613.9M531.7,613.9 L529.5,611.8M532.5,613.3 L532.7,610.3M532.7,610.3 L532.5,613.3M533.1,627.6 L535.1,629.5M532.8,633.7 L529.9,635.6M537.7,635.3 L537.0,631.9M539.1,629.1 L537.0,630.7M552.0,640.0 L553.6,638.2M553.6,638.2 L552.0,640.0M577.6,628.4 L575.2,622.8M609.2,705.1 L609.2,708.7M609.2,708.7 L609.2,705.1M608.2,712.5 L606.1,717.6M606.1,717.6 L608.2,712.5M601.6,730.4 L600.9,733.1M600.9,733.1 L601.6,730.4M600.0,741.6 L599.6,749.0M-12.6,-45.3 L-28.9,-31.1M-12.6,-45.3 L-9.3,-49.5M-12.6,-45.3 L-3.2,-36.7M-28.9,-31.1 L-12.6,-45.3M-3.2,-36.7 L-12.6,-45.3M282.9,299.8 L283.5,298.7 L282.1,296.9M282.1,296.9 L277.0,298.4M282.1,296.9 L281.0,294.1M282.1,296.9 L283.5,298.7 L282.9,299.8M277.0,298.4 L276.9,294.1M277.0,298.4 L282.1,296.9M130.9,327.2 L131.5,324.7M131.5,324.7 L130.9,327.2M131.5,324.7 L133.2,324.3 L133.9,321.5M131.5,324.7 L128.8,323.4M126.6,327.0 L128.8,323.4M128.8,323.4 L131.5,324.7M128.8,323.4 L126.6,327.0M135.4,326.6 L136.5,321.9M136.5,321.9 L135.4,326.6M136.5,321.9 L133.9,321.5M136.5,321.9 L140.0,322.5M133.9,321.5 L129.4,322.4M133.9,321.5 L136.5,321.9M133.9,321.5 L133.2,324.3 L131.5,324.7M129.4,322.4 L128.8,320.1M129.4,322.4 L133.9,321.5M122.5,322.8 L128.8,320.1M128.8,320.1 L129.4,322.4M128.8,320.1 L135.8,319.2M128.8,320.1 L122.5,322.8M135.8,319.2 L128.8,320.1M119.2,374.6 L121.1,372.7M75.1,352.7 L82.3,351.5M82.3,351.5 L86.6,361.4 L84.9,369.8 L71.2,367.2M82.3,351.5 L75.1,352.7M81.8,349.6 L80.3,339.9M71.2,367.2 L84.9,369.8 L86.6,361.4 L82.3,351.5M70.2,333.9 L64.5,337.5M70.2,333.9 L74.6,338.3 L80.3,339.9M70.2,333.9 L64.0,321.9 L58.4,318.3 L52.1,328.5M64.5,337.5 L70.2,333.9M52.1,328.5 L58.4,318.3 L64.0,321.9 L70.2,333.9M121.8,327.0 L118.2,328.7M107.9,319.3 L104.8,319.3M107.9,319.3 L107.9,321.9M107.9,319.3 L113.2,320.6 L118.2,328.7M104.8,319.3 L107.9,319.3M104.8,319.3 L96.5,319.3M70.1,309.6 L76.9,310.0M74.6,300.9 L79.4,302.3 L76.9,310.0M-49.4,419.5 L-48.9,416.6 L-43.3,415.4M-43.3,415.4 L-36.9,402.9M-43.3,415.4 L-48.9,416.6 L-49.4,419.5M-32.5,409.5 L-32.4,410.8 L-33.9,410.9 L-33.8,409.7 L-32.5,409.5M-32.5,409.5 L-33.8,409.7 L-33.9,410.9 L-32.4,410.8 L-32.5,409.5M-32.5,409.5 L-27.4,401.9M177.0,405.9 L175.9,408.1 L174.7,407.6 L1
3807774.9,406.4 L177.0,405.9M177.0,405.9 L174.9,406.4 L174.7,407.6 L175.9,408.1 L177.0,405.9M177.0,405.9 L176.7,401.3 L173.1,395.8M173.1,395.8 L166.1,386.4M173.1,395.8 L166.8,385.9M173.1,395.8 L176.7,401.3 L177.0,405.9M149.4,401.2 L146.4,395.8 L133.9,393.5M163.8,398.1 L159.2,391.1M163.8,398.1 L163.7,399.4 L164.9,399.6 L165.1,398.4 L163.8,398.1M163.8,398.1 L165.1,398.4 L164.9,399.6 L163.7,399.4 L163.8,398.1M159.2,391.1 L166.1,386.4M159.2,391.1 L163.8,398.1M159.2,391.1 L157.0,387.8M166.1,386.4 L159.2,391.1M166.1,386.4 L173.1,395.8M166.1,386.4 L161.5,377.8 L153.2,371.4M166.8,385.9 L162.0,377.3 L155.4,372.8 L152.8,369.1 L152.1,365.3M166.8,385.9 L173.1,395.8M133.7,394.0 L132.4,398.4M157.0,387.8 L159.2,391.1M157.0,387.8 L157.3,386.6 L156.1,386.3 L155.8,387.5 L157.0,387.8M157.0,387.8 L155.8,387.5 L156.1,386.3 L157.3,386.6 L157.0,387.8M153.2,371.4 L161.5,377.8 L166.1,386.4M153.2,371.4 L150.7,373.3 L149.6,372.9 L152.0,369.7M152.0,369.7 L149.6,372.9 L150.7,373.3 L153.2,371.4M152.0,369.7 L151.1,365.4M151.1,365.4 L152.0,369.7M152.1,365.3 L152.4,363.7 L150.8,363.6M152.1,365.3 L152.8,369.1 L155.4,372.8 L162.0,377.3 L166.8,385.9M150.8,363.6 L152.4,363.7 L152.1,365.3M25.9,336.9 L22.5,338.0M47.3,296.2 L49.8,299.4 L48.2,300.7M46.3,294.5 L44.6,292.4M-3.6,286.0 L-2.1,283.9M-3.6,286.0 L-2.8,289.4 L5.5,296.8M-2.1,283.9 L-3.6,286.0M5.5,296.8 L-2.8,289.4 L-3.6,286.0M5.5,296.8 L11.1,298.1 L19.4,296.0M-1.3,283.2 L8.9,275.3M222.4,228.1 L220.9,230.2M222.4,228.1 L225.0,229.9 L224.6,231.3 L223.6,231.0M220.9,230.2 L222.4,228.1M220.9,230.2 L217.8,234.4M223.6,231.0 L224.6,231.3 L225.0,229.9 L222.4,228.1M-5.9,667.4 L-0.9,668.0M-5.9,667.4 L-13.8,666.1M367.4,129.0 L365.6,126.9M367.4,129.0 L371.9,132.8 L379.9,132.3 L384.8,138.3 L388.1,139.6 L390.3,138.6 L390.8,137.0 L388.1,132.9M345.7,27.2 L346.3,22.5 L344.9,21.7 L344.0,22.4 L345.7,27.2M345.7,27.2 L344.0,22.4 L344.9,21.7 L346.3,22.5 L345.7,27.2M345.7,27.2 L344.3,35.7M527.9,514.0 L525.2,511.0 L526.1,507.4M526.1,507.4 L529.6,502.6M526.1,507.4 L525.3,506.7 L528.0,502.4 L529.6,502.6M526.1,507.4 L525.2,511.0 L527.9,514.0M529.6,502.6 L526.1,507.4M529.6,502.6 L528.0,502.4 L525.3,506.7 L526.1,507.4M529.6,502.6 L532.2,505.0M532.2,505.0 L529.6,502.6M673.8,-72.5 L679.4,-74.6M673.8,-72.5 L671.2,-70.8 L672.9,-66.5M41.9,289.2 L44.6,292.4M40.1,286.9 L37.4,283.5M41.1,287.1 L47.0,282.5M36.6,284.2 L39.3,287.5M37.4,283.5 L40.1,286.9M-47.4,561.7 L-45.1,565.7 L-35.2,571.0M450.3,183.1 L449.1,174.0M459.9,184.5 L456.4,180.8M459.9,184.5 L463.7,188.2 L466.0,185.9M294.7,334.2 L296.3,331.7 L294.1,329.6M294.7,334.2 L293.6,335.5 L294.7,336.4 L295.7,335.2 L294.7,334.2M294.7,334.2 L295.7,335.2 L294.7,336.4 L293.6,335.5 L294.7,334.2M294.1,329.6 L289.3,325.4M294.1,329.6 L296.3,331.7 L294.7,334.2M155.2,472.8 L160.2,468.4M170.9,482.1 L168.3,481.4 L165.0,476.0 L165.1,472.7 L160.2,468.4M388.1,351.4 L384.7,355.2 L383.2,360.9M388.1,351.4 L389.2,351.3 L389.1,350.2 L388.1,350.3 L388.1,351.4M388.1,351.4 L388.1,350.3 L389.1,350.2 L389.2,351.3 L388.1,351.4M312.2,111.3 L313.0,115.3M556.3,230.6 L558.1,233.4M556.3,230.6 L553.6,226.5M549.5,237.2 L551.6,239.1M551.6,239.1 L549.5,237.2M48.2,300.7 L49.8,299.4 L47.3,296.2M110.9,293.0 L110.0,288.5M110.0,288.5 L110.9,293.0M110.0,288.5 L109.2,284.8M107.9,289.0 L107.4,286.5 L98.5,288.4 L99.5,293.6 L108.3,291.7 L107.9,289.0M107.9,289.0 L108.3,291.7 L99.5,293.6 L98.5,288.4 L107.4,286.5 L107.9,289.0M55.3,286.9 L54.2,284.4M54.2,284.4 L52.2,280.1M54.2,284.4 L55.3,286.9M55.8,283.7 L59.9,281.8M59.9,281.8 L55.8,283.7M59.9,281.8 L64.5,279.8M82.3,284.5 L90.6,286.5 L102.1,284.0M82.3,284.5 L79.3,282.0 L76.8,276.8M64.5,279.8 L68.2,278.9M64.5,279.8 L59.9,281.8M68.2,278.9 L64.5,279.8M57.2,276.2 L66.7,272.8M66.7,272.8 L57.2,276.2M66.7,272.8 L74.0,270.8M76.8,276.8 L79.3,282.0 L82.3,284.5M76.8,276.8 L76.2,274.3M75.2,277.2 L70.1,278.5M76.2,274.3 L76.8,276.8M80.2,276.2 L84.1,275.5M84.1,275.5 L80.2,276.2M85.9,275.1 L87.1,280.5 L93.4,278.2 L91.0,269.2M85.9,275.1 L85.4,272.5 L87.4,270.3M91.0,269.2 L93.4,278.2 L87.1,280.5 L85.9,275.1M87.4,270.3 L90.2,269.4M87.4,270.3 L85.4,272.5 L85.9,275.1M68.4,272.9 L74.2,271.6M74.0,270.8 L66.7,272.8M90.2,269.4 L87.4,270.3M124.2,260.0 L124.4,254.8 L123.2,252.5M124.2,260.0 L124.2,268.1M105.0,264.8 L105.8,268.6M105.0,264.8 L103.9,259.5M123.2,252.5 L124.4,254.8 L124.2,260.0M479.2,154.7 L477.1,155.0 L475.4,157.6M479.2,154.7 L479.8,157.6 L476.9,159.1M642.0,-2.5 L636.3,4.9 L628.8,9.1 L627.2,12.6M627.2,12.6 L628.8,9.1 L636.3,4.9 L642.0,-2.5M626.0,12.6 L626.1,15.0M626.1,15.0 L626.0,12.6M626.1,15.0 L625.5,28.1M626.1,15.0 L610.1,13.8 L606.6,11.2M733.4,34.2 L734.6,35.8 L738.7,37.1M733.4,34.2 L734.2,29.0M738.7,37.1 L742.2,38.4 L743.0,43.2M738.7,37.1 L734.6,35.8 L733.4,34.2M734.2,29.0 L733.4,34.2M546.4,-35.3 L549.9,-36.4 L553.3,-40.6M75.1,549.0 L71.6,546.0M71.6,546.0 L77.2,537.8 L78.0,532.5M71.6,546.0 L75.1,549.0M71.6,546.0 L59.5,537.1M78.0,532.5 L77.2,537.8 L71.6,546.0M59.5,537.1 L64.8,526.5M59.5,537.1 L56.5,535.3M59.5,537.1 L71.6,546.0M64.8,526.5 L59.5,537.1M56.5,535.3 L59.5,537.1M66.2,522.6 L68.0,519.5M66.2,522.6 L64.4,525.3M194.4,375.1 L186.4,364.2 L184.7,359.5M184.7,359.5 L183.4,357.0M184.7,359.5 L186.4,364.2 L194.4,375.1M183.6,358.7 L181.4,359.8M403.5,446.7 L406.7,442.2M404.9,449.3 L407.8,451.5M404.9,449.3 L402.9,447.6M58.8,689.6 L51.9,689.3M51.9,689.3 L51.6,688.7 L51.0,689.0 L51.4,689.6 L51.9,689.3M51.9,689.3 L51.4,689.6 L51.0,689.0 L51.6,688.7 L51.9,689.3M51.9,689.3 L58.8,689.6
38077M97.9,188.8 L92.7,189.8M97.9,188.8 L101.4,188.2M538.1,350.4 L536.7,347.9M535.3,345.8 L536.7,347.9M536.7,347.9 L538.1,350.4M536.7,347.9 L535.3,345.8M253.5,213.9 L251.8,216.1M253.5,213.9 L249.0,210.4M251.8,216.1 L253.5,213.9M249.0,210.4 L253.5,213.9M273.2,214.4 L277.5,212.5M273.2,214.4 L269.6,214.4M248.0,210.1 L243.8,208.7M243.8,208.7 L248.0,210.1M253.6,204.8 L251.4,199.4 L243.9,200.1 L241.6,202.3M241.6,202.3 L243.9,200.1 L251.4,199.4 L253.6,204.8M241.6,202.3 L241.4,207.2 L243.4,208.5M243.4,208.5 L241.4,207.2 L241.6,202.3M466.4,354.5 L466.0,352.2 L467.6,351.5 L467.9,353.9 L466.4,354.5M466.4,354.5 L467.9,353.9 L467.6,351.5 L466.0,352.2 L466.4,354.5M466.4,354.5 L461.6,358.3M421.7,415.6 L423.1,412.4M423.1,412.4 L421.7,415.6M423.1,412.4 L427.5,407.8M427.5,407.8 L433.0,403.0M427.5,407.8 L431.8,402.6M427.5,407.8 L423.1,412.4M181.0,336.4 L182.5,335.7 L183.4,338.7 L181.0,336.4M181.0,336.4 L183.4,338.7 L182.5,335.7 L181.0,336.4M181.0,336.4 L164.7,321.6M164.7,321.6 L181.0,336.4M164.7,321.6 L162.6,324.2M577.9,307.7 L581.1,311.9M220.0,201.7 L221.3,198.5M220.0,201.7 L218.5,204.9M676.3,-56.8 L672.9,-66.5M672.9,-66.5 L671.2,-70.8 L673.8,-72.5M672.9,-66.5 L676.3,-56.8M286.5,290.4 L286.6,293.6M286.5,290.4 L286.4,288.0M413.2,172.0 L409.3,176.1M394.4,238.2 L393.3,242.5M393.5,103.6 L384.8,100.4M196.7,207.4 L206.0,209.6M192.3,206.5 L189.8,206.1M20.1,683.0 L21.6,681.9 L20.4,679.8M20.4,679.8 L21.6,681.9 L20.1,683.0M18.1,675.7 L15.5,672.1M15.5,672.1 L18.1,675.7M108.8,126.4 L105.4,121.2M48.5,229.3 L52.9,234.9M48.5,229.3 L42.1,225.8 L36.1,224.7M52.9,234.9 L56.7,240.1M52.9,234.9 L48.5,229.3M327.4,50.7 L324.9,53.1M317.9,36.5 L318.7,39.8M81.2,154.0 L80.2,148.0M82.2,153.2 L81.7,147.9M82.2,153.2 L85.2,156.2 L91.6,155.5 L90.4,146.8M80.2,148.0 L81.2,154.0M80.2,148.0 L75.9,149.0M81.7,147.9 L82.2,153.2M81.7,147.9 L84.5,147.5M90.4,146.8 L84.5,147.5M90.4,146.8 L91.6,155.5 L85.2,156.2 L82.2,153.2M75.9,149.0 L80.2,148.0M84.5,147.5 L81.7,147.9M84.5,147.5 L90.4,146.8M206.7,361.4 L209.9,358.7 L214.6,359.5M203.1,364.2 L206.2,361.8 L207.9,362.3 L212.5,359.5 L214.6,359.5M277.9,248.4 L280.3,249.4M280.3,249.4 L277.9,248.4M287.7,239.1 L291.4,239.7M285.2,244.4 L286.4,240.8M285.2,244.4 L283.4,249.7 L282.0,250.1M286.4,240.8 L285.2,244.4M282.0,250.1 L283.4,249.7 L285.2,244.4M354.7,259.9 L350.9,257.9M354.5,260.5 L352.9,264.8M350.9,257.9 L354.7,259.9M220.8,159.9 L235.9,161.1 L246.5,158.7M219.7,159.8 L214.9,159.6M623.6,690.6 L625.4,692.3M404.9,145.7 L402.9,147.9 L404.8,150.0M404.8,150.0 L407.1,152.1M404.8,150.0 L402.9,147.9 L404.9,145.7M548.9,224.6 L553.6,226.5M548.9,224.6 L546.1,223.0M553.6,226.5 L556.3,230.6M553.6,226.5 L548.9,224.6M549.6,233.7 L542.4,227.3M543.3,215.3 L548.0,219.4M543.3,215.3 L541.2,213.5M471.4,166.3 L473.5,168.1 L480.9,161.5 L484.3,162.5M471.4,166.3 L473.1,163.2M19.2,221.9 L22.4,222.4M9.1,219.9 L16.0,221.4M9.1,219.9 L-8.6,209.1M16.0,221.4 L9.1,219.9M176.5,240.6 L177.4,237.1M-192.9,-26.5 L-191.0,-24.4M-192.9,-26.5 L-196.9,-46.9M-196.9,-46.9 L-192.9,-26.5M-196.9,-46.9 L-200.6,-64.9M-177.0,-16.2 L-179.5,-17.6M-177.0,-16.2 L-170.6,-12.6M-25.0,-104.3 L-36.6,-101.7M-94.0,664.9 L-96.5,673.4M-76.0,668.3 L-70.6,670.2M-76.0,668.3 L-75.7,662.3M-76.0,668.3 L-78.5,672.0 L-83.7,674.9 L-90.3,675.0 L-96.5,673.4M-75.7,662.3 L-76.0,668.3M0.0,603.3 L11.7,612.9M502.9,498.9 L501.6,496.2M502.9,498.9 L504.0,501.0M63.3,671.6 L67.9,668.5M63.3,671.6 L62.4,667.6M61.5,672.6 L55.3,676.2M67.9,668.5 L63.3,671.6M67.7,664.4 L68.6,668.1M67.7,664.4 L65.0,654.2M-12.8,639.4 L-11.7,636.0M313.6,330.4 L318.6,334.7M311.9,328.9 L307.0,324.2M318.6,334.7 L316.2,337.3M318.6,334.7 L313.6,330.4M319.8,335.8 L327.5,342.5M317.8,337.1 L314.6,340.9M329.2,344.0 L332.4,347.1M327.5,342.5 L319.8,335.8M327.6,344.3 L323.8,348.5M332.4,347.1 L335.3,349.9M332.4,347.1 L329.2,344.0M335.3,349.9 L332.4,347.1M351.2,349.2 L341.8,350.0M504.1,506.8 L506.5,508.2M316.2,337.3 L313.8,340.2M316.2,337.3 L318.6,334.7M321.7,331.6 L325.2,327.7M743.0,43.2 L742.2,38.4 L738.7,37.1M661.9,16.3 L651.8,13.4M661.9,16.3 L674.8,19.7 L691.8,18.7M691.8,18.7 L702.8,17.9M691.8,18.7 L674.8,19.7 L661.9,16.3M209.9,-38.1 L208.4,-52.5M209.9,-38.1 L202.5,-34.2M209.9,-38.1 L218.6,-40.6 L218.7,-43.0 L216.9,-43.6M216.9,-43.6 L218.7,-43.0 L218.6,-40.6 L209.9,-38.1M480.8,-62.0 L476.6,-54.2 L469.8,-51.8 L460.6,-52.7 L459.6,-50.9 L462.1,-49.5M313.8,340.2 L310.6,344.1M313.8,340.2 L316.2,337.3M606.0,574.9 L599.1,573.3M606.0,574.9 L610.3,562.8 L608.8,558.2M607.6,575.5 L611.4,576.8M608.8,558.2 L610.3,562.8 L606.0,574.9M653.7,570.1 L650.4,565.6M650.4,565.6 L653.7,570.1M634.0,620.5 L638.9,621.3M634.0,620.5 L631.5,619.4 L628.3,615.3 L626.9,608.0M599.6,463.2 L593.9,461.9M599.6,463.2 L605.4,464.5 L606.7,462.8M606.7,462.8 L605.4,464.5 L599.6,463.2M528.0,386.4 L530.6,387.7M493.1,265.7 L495.2,267.6M233.6,533.5 L233.9,528.8M233.9,528.8 L229.3,529.2M233.9,528.8 L236.3,523.0M233.9,528.8 L233.6,533.5M229.3,529.2 L233.9,528.8M236.3,523.0 L243.3,526.4M236.3,523.0 L233.9,528.8M243.4,491.4 L260.7,500.2M307.0,324.2 L311.9,328.9M307.0,324.2 L301.3,318.3M301.3,318.3 L299.0,315.7M301.3,318.3 L307.0,324.2M273.2,285.7 L269.3,280.9M273.2,285.7 L276.3,289.6M269.3,280.9 L273.2,285.7M-158.6,371.9 L-157.4,364.4 L-151.7,362.6M-143.0,367.4 L-147.1,363.2M-166.0,359.8 L-168.3,354.5 L-168.3,346.6 L-164.7,343.2M134.9,347.2 L139.0,343.3M134.9,347.2 L138.9,351.9M134.9,347.2 L133.8,349.1 L138.1,352.6M139.0,343.3 L141.6,341.0M139.0,343.3 L134.9,347.2M139.0,343.3 L136.4,340.5M139.0,343.3 L144.9,348.3M138.9,351.9 L134.9,347.2M138.9,351.9 L143.0,354.3M138.1,352.6 L133.8,349.1 L134.9,347.2M136.4,340.5 L139.0,343.3M144.9,348.3 L139.0,343.3M-44.0,311.9 L-19.7,305.8M-19.7,305.8 L-44.0,311.9M-19.7,305.8 L-24.6,300.1 L-28.2,299.2M-19.7,305.8 L-13.9,310.0M-119.0,304.7 L-118.5,300.5 L-125.4,299.2M-13.9,310.0 L-4.7,312.7M-13.9,310.0 L-19.7,305.8M-127.0,306.7 L-125.4,299.2M309.3,67.2 L305.8,63.4M309.3,67.2 L318.9,77.3M253.9,55.0 L250.3,51.2M158.5,-69.3 L170.8,-75.7 L172.2,-72.0M-6.6,609.5 L-8.0,612.6M263.6,10.4 L261.0,14.2M264.3,9.5 L267.9,4.7M267.9,4.7 L264.3,9.5M267.9,4.7 L272.2,1.9M-149.5,312.1 L-144.5,313.1M389.5,432.6 L393.6,438.8M502.9,354.5 L505.5,353.4M488.7,647.
380770 L485.6,648.6M488.7,647.0 L490.8,645.9M488.2,641.7 L490.8,645.9M126.0,302.8 L124.2,300.0M124.2,300.0 L126.0,302.8M127.5,297.9 L129.4,300.6M129.4,300.6 L127.5,297.9M129.6,301.1 L129.4,303.7M129.4,303.7 L129.6,301.1M129.4,304.0 L131.9,304.7M131.9,304.7 L134.5,305.4M131.9,304.7 L129.4,304.0M130.8,295.6 L132.8,298.4M132.8,298.4 L130.8,295.6M133.3,299.1 L135.3,301.8M134.5,305.4 L131.9,304.7M134.5,305.4 L136.3,305.5 L137.2,302.2M134.6,305.1 L135.3,301.8M137.2,302.2 L136.3,305.5 L134.5,305.4M676.8,582.0 L677.0,578.9M666.2,585.2 L666.9,588.2M666.9,588.2 L666.2,585.2M674.1,588.0 L672.0,590.1M672.0,590.1 L674.1,588.0M666.3,595.4 L664.6,597.3M665.4,548.3 L663.9,550.2M663.9,550.2 L665.4,548.3M650.8,573.0 L649.4,575.4M649.4,575.4 L650.8,573.0M649.2,576.1 L649.2,578.8M649.2,578.8 L649.2,576.1M646.1,585.7 L648.8,586.5M35.2,403.4 L38.1,404.0M28.2,384.6 L23.7,383.4 L18.4,385.6M-11.9,344.3 L-9.2,346.8M-11.3,343.6 L-8.5,346.0M-12.6,343.8 L-14.5,342.3M-11.9,343.2 L-14.5,342.3M-10.8,343.2 L-5.6,337.5M-5.6,337.5 L-1.3,332.6M-5.6,337.5 L-10.8,343.2M-49.6,698.0 L-61.4,696.3M-49.6,698.0 L-39.7,699.8M533.8,203.7 L538.5,198.9 L544.5,200.4M544.5,200.4 L549.9,195.0 L555.0,193.6M544.5,200.4 L538.5,198.9 L533.8,203.7M555.0,193.6 L559.3,192.7M555.0,193.6 L549.9,195.0 L544.5,200.4M131.3,187.1 L136.6,189.6M136.6,189.6 L131.3,187.1M189.8,206.1 L192.3,206.5M-204.6,132.7 L-206.9,133.7M-173.2,141.0 L-177.0,148.9M-173.2,141.0 L-165.8,133.1M-137.4,137.1 L-136.2,139.9M-136.2,139.9 L-130.3,148.4M-136.2,139.9 L-137.4,137.1M-48.9,-68.7 L-51.3,-69.3M-51.3,-69.3 L-48.9,-68.7M-51.3,-69.3 L-52.0,-62.6M-51.3,-69.3 L-53.8,-70.5 L-53.1,-73.5M-52.0,-62.6 L-51.3,-69.3M433.8,200.9 L438.5,202.2 L449.0,200.7 L450.9,199.2M429.0,196.9 L432.7,200.0M432.7,200.0 L429.0,196.9M0.2,598.5 L-4.8,604.9M44.5,540.0 L42.7,542.5M547.1,586.5 L544.2,583.6M265.9,212.7 L263.6,211.0M267.0,213.4 L269.6,214.4M263.6,211.0 L265.9,212.7M-103.3,159.6 L-111.1,161.9M70.5,191.0 L62.9,190.1M81.9,192.1 L78.6,192.0M78.6,192.0 L73.0,191.6M78.6,192.0 L81.9,192.1M78.6,192.0 L84.2,190.9M73.0,191.6 L78.6,192.0M84.2,190.9 L78.6,192.0M68.0,519.5 L66.2,522.6M358.1,473.8 L360.2,488.3 L360.3,500.8M358.1,473.8 L358.9,469.9M355.7,472.9 L353.4,474.0M698.2,579.4 L701.5,580.6 L705.5,579.6M50.8,622.5 L51.9,626.6M50.8,622.5 L49.3,615.9M46.0,609.1 L43.6,606.9M46.0,609.1 L48.4,612.5M43.6,606.9 L46.0,609.1M43.6,606.9 L41.1,604.8M242.1,103.0 L254.8,100.7M242.1,103.0 L231.9,106.0M230.1,107.6 L221.2,110.2M231.0,107.9 L233.7,111.7M229.9,106.7 L220.8,109.3M233.6,110.7 L232.0,107.7M203.5,253.7 L204.9,251.8M203.5,253.7 L202.1,255.7M204.9,251.8 L208.1,247.5M204.9,251.8 L203.5,253.7M202.1,255.7 L203.5,253.7M619.7,409.8 L617.6,410.8M135.3,301.8 L134.6,305.1M135.3,301.8 L133.3,299.1M143.0,354.3 L138.9,351.9M317.6,243.1 L322.3,244.3M201.0,280.8 L198.5,278.8M201.0,280.8 L203.9,283.1M201.0,280.8 L204.1,276.6 L201.6,274.5M198.5,278.8 L196.0,276.8M198.5,278.8 L201.0,280.8M198.5,278.8 L201.6,274.5M203.9,283.1 L201.0,280.8M201.6,274.5 L198.5,278.8M201.6,274.5 L204.1,276.6 L201.0,280.8M201.6,274.5 L199.3,272.6M197.8,271.5 L195.0,275.2 L196.0,276.8M197.8,271.5 L193.2,267.9 L191.3,270.1M196.0,276.8 L198.5,278.8M196.0,276.8 L199.3,272.6M196.0,276.8 L195.0,275.2 L197.8,271.5M199.3,272.6 L196.0,276.8M199.3,272.6 L201.6,274.5M191.3,270.1 L189.8,272.1M191.3,270.1 L193.2,267.9 L197.8,271.5M-130.5,133.8 L-124.1,129.6M-130.5,133.8 L-137.8,135.8M-130.5,133.8 L-131.6,128.3M-111.3,129.2 L-112.8,127.9 L-118.3,127.3M-118.3,127.3 L-112.8,127.9 L-111.3,129.2M-118.3,127.3 L-122.2,128.4M-118.3,127.3 L-118.7,120.9 L-116.7,117.5M-122.2,128.4 L-118.3,127.3M-116.7,117.5 L-118.7,120.9 L-118.3,127.3M-116.7,117.5 L-116.2,116.2 L-115.0,116.5M-115.0,116.5 L-116.2,116.2 L-116.7,117.5M-124.1,129.6 L-130.5,133.8M-131.6,128.3 L-130.5,133.8M-131.6,128.3 L-132.2,127.1 L-131.0,126.9M29.8,-90.8 L22.7,-90.6M-102.3,638.4 L-100.5,636.2 L-97.6,625.3M-102.3,638.4 L-105.3,639.4M259.0,36.0 L263.6,43.5M259.0,36.0 L258.5,30.7 L263.7,18.6 L263.1,16.1 L261.0,14.2M263.6,43.5 L259.0,36.0M625.5,28.1 L626.1,15.0M606.6,11.2 L610.1,13.8 L626.1,15.0M287.3,524.8 L271.8,556.3 L272.6,563.2M67.6,254.9 L65.6,252.2M68.6,256.3 L73.8,264.6M73.8,264.6 L68.6,256.3M217.4,417.5 L214.3,426.3M291.2,516.8 L289.0,521.5M291.2,516.8 L295.9,506.8M289.0,521.5 L287.9,523.6M289.0,521.5 L291.2,516.8M295.9,506.8 L291.2,516.8M295.9,506.8 L299.4,499.5M-176.7,81.8 L-203.3,82.2M-176.7,81.8 L-171.9,82.7M480.3,325.5 L484.0,334.9M111.7,250.7 L109.4,252.5M506.5,508.2 L504.1,506.8M506.5,508.2 L508.7,509.4 L505.8,503.7M-83.7,597.0 L-79.7,599.6 L-73.9,600.6M287.9,523.6 L289.0,521.5M411.2,458.3 L406.6,458.6 L402.5,461.1M206.1,447.1 L194.6,469.9 L197.3,475.9 L201.4,480.6 L210.6,483.9M210.6,483.9 L201.4,480.6 L197.3,475.9 L194.6,469.9 L206.1,447.1M356.0,606.4 L354.8,599.7M356.0,606.4 L357.0,611.4M-130.3,148.4 L-127.5,151.8M-130.3,148.4 L-136.2,139.9M216.1,210.9 L217.0,208.3M217.0,208.3 L216.1,210.9M218.5,204.9 L220.0,201.7M97.8,262.8 L95.7,264.3M99.4,261.5 L101.8,259.5M95.7,264.3 L93.5,265.7M95.7,264.3 L97.8,262.8M223.3,214.0 L220.7,215.5M248.4,220.5 L249.8,218.6M249.8,218.6 L248.4,220.5M258.6,227.4 L256.4,226.4M256.4,226.4 L258.6,227.4M395.8,468.3 L392.1,472.3M397.4,466.6 L401.0,462.7M392.1,472.3 L395.8,468.3M41.6,307.4 L32.7,299.4 L31.3,296.1M297.5,275.6 L294.4,274.4M269.6,214.4 L273.2,214.4M269.6,214.4 L267.0,213.4M306.9,278.9 L303.2,277.6M306.9,278.9 L309.8,279.9M307.8,376.7 L312.8,371.1M589.5,-21.3 L592.2,-17.5M589.5,-21.3 L585.4,-25.4M589.5,-21.3 L585.0,-24.1M208.1,247.5
38077L211.7,242.6M208.1,247.5 L204.9,251.8M211.7,242.6 L208.1,247.5M483.4,603.4 L485.4,610.1M483.4,603.4 L482.6,599.8M354.8,599.7 L356.0,606.4M354.8,599.7 L354.3,597.3M611.4,576.8 L615.6,578.3M611.4,576.8 L607.6,575.5M-174.5,187.1 L-197.8,187.8M-174.5,187.1 L-162.6,186.0M702.8,17.9 L705.4,17.7M702.8,17.9 L691.8,18.7M705.4,17.7 L702.8,17.9M659.8,-69.2 L657.9,-64.4M659.8,-69.2 L664.8,-76.4M47.0,282.5 L41.1,287.1M147.4,-28.5 L151.2,-32.3M147.4,-28.5 L142.1,-22.8M-5.5,-54.2 L-1.0,-45.5M-200.2,-104.1 L-197.8,-99.9M-200.2,-104.1 L-201.6,-106.7M735.0,25.5 L735.6,21.7 L732.2,18.6M305.8,63.4 L309.3,67.2M305.8,63.4 L302.3,59.9M302.3,59.9 L305.8,63.4M302.3,59.9 L295.9,53.2M-108.3,296.0 L-97.1,308.2M-109.2,295.2 L-116.2,290.2M159.0,233.4 L162.6,235.2M70.1,278.5 L75.2,277.2M19.4,296.0 L11.1,298.1 L5.5,296.8M19.4,296.0 L23.7,300.1M21.2,283.5 L24.3,287.2M117.0,419.5 L108.5,428.2M117.0,419.5 L123.3,412.8 L128.4,405.1M181.4,359.8 L183.6,358.7M-216.7,707.3 L-214.5,712.9M-216.7,707.3 L-219.4,701.7M249.6,455.3 L252.8,461.3 L271.4,469.6 L273.7,469.0 L275.6,465.2M656.0,-60.8 L647.0,-47.0 L646.2,-41.7M656.0,-60.8 L657.9,-64.4M657.9,-64.4 L659.8,-69.2M657.9,-64.4 L656.0,-60.8M664.1,122.6 L670.0,126.6M662.4,102.9 L666.6,103.3M662.4,102.9 L643.9,102.6M662.5,121.5 L660.1,119.8M10.5,516.2 L11.5,520.4 L16.8,523.3 L17.1,526.3 L21.9,529.1M21.9,529.1 L41.8,540.6M21.9,529.1 L17.1,526.3 L16.8,523.3 L11.5,520.4 L10.5,516.2M-132.5,686.3 L-132.2,681.2 L-133.9,676.5M-132.5,686.3 L-136.9,691.1M-44.4,-74.2 L-38.4,-74.6M352.7,585.5 L353.2,588.3M352.3,583.3 L351.7,579.7M547.4,323.9 L548.9,327.3M547.4,323.9 L545.7,320.1M-171.9,82.7 L-176.7,81.8M-171.9,82.7 L-163.0,87.5M344.6,62.2 L346.2,59.9M344.6,62.2 L342.2,66.8M230.6,251.9 L231.4,249.1M-149.2,76.9 L-143.3,78.8M-149.2,76.9 L-160.6,72.3M-160.6,72.3 L-149.2,76.9M390.7,473.7 L386.8,477.7M401.0,462.7 L402.5,461.1M401.0,462.7 L397.4,466.6M402.5,461.1 L401.0,462.7M402.5,461.1 L406.6,458.6 L411.2,458.3M51.5,678.3 L55.3,676.2M55.3,676.2 L61.5,672.6M55.3,676.2 L51.5,678.3M-41.9,363.6 L-44.6,362.0M-41.9,363.6 L-38.7,365.4M-38.7,365.4 L-41.9,363.6M-38.7,365.4 L-30.6,369.9M-58.4,384.7 L-55.5,383.7 L-51.8,379.8 L-50.8,376.8 L-52.1,369.4 L-50.8,366.7M689.7,-92.6 L687.9,-90.7M541.2,365.5 L539.4,363.0M506.3,541.7 L501.5,538.7M501.5,538.7 L506.3,541.7M501.6,496.2 L502.9,498.9M501.6,496.2 L499.9,493.0M499.9,493.0 L501.6,496.2M499.9,493.0 L495.8,485.0M485.6,438.4 L494.3,440.7M485.6,438.4 L481.4,437.3 L480.3,426.8 L481.8,425.9 L489.2,428.0M489.2,428.0 L481.8,425.9 L480.3,426.8 L481.4,437.3 L485.6,438.4M489.2,428.0 L497.0,430.1M25.4,-19.8 L27.3,-18.3M25.4,-19.8 L18.7,-25.5M355.1,155.1 L353.5,158.1M400.3,80.1 L402.1,82.1M402.1,82.1 L400.3,80.1M452.8,385.9 L449.0,385.8M452.8,385.9 L459.0,386.9M302.4,259.9 L304.6,260.7M301.9,259.7 L294.1,256.8M294.4,274.4 L291.8,273.4M294.4,274.4 L297.5,275.6M285.6,279.5 L285.4,276.2M285.8,280.9 L286.1,283.9M286.1,283.9 L285.8,280.9M268.5,279.9 L266.5,277.5M312.2,280.8 L309.8,279.9M309.8,279.9 L306.9,278.9M309.8,279.9 L312.2,280.8M312.9,290.8 L313.4,288.6 L317.0,285.6M317.0,285.6 L313.4,288.6 L312.9,290.8M313.4,292.0 L317.5,293.0M142.9,222.3 L139.4,219.3M142.9,222.3 L148.1,226.9M139.4,219.3 L142.9,222.3M153.2,223.5 L150.0,226.9M-101.1,232.7 L-104.8,233.7M-118.6,221.3 L-115.0,221.0M-121.3,217.2 L-121.9,213.9M266.2,241.2 L262.9,247.3 L260.2,246.4 L262.7,240.3 L266.2,241.2M266.2,241.2 L262.7,240.3 L260.2,246.4 L262.9,247.3 L266.2,241.2M266.8,240.2 L270.3,234.2M302.5,241.3 L305.5,241.5M298.2,249.1 L306.6,251.5M291.4,239.7 L295.9,240.4M291.4,239.7 L287.7,239.1M199.1,259.7 L197.1,262.4M199.1,259.7 L200.8,257.4M92.7,189.8 L97.9,188.8M109.7,186.5 L112.5,185.9M107.3,105.1 L109.1,107.7M109.1,107.7 L107.3,105.1M109.1,107.7 L112.0,111.4 L106.2,115.8M658.3,118.6 L654.2,115.8M74.0,265.4 L75.3,269.8M75.3,269.8 L74.0,265.4M436.3,441.1 L441.9,449.4M436.3,441.1 L442.6,436.4M-233.2,623.2 L-229.1,628.0M339.5,-7.0 L342.1,-8.1M339.5,-7.0 L340.7,-10.0 L342.1,-8.1M339.5,-7.0 L333.4,-0.9 L328.2,1.3 L305.2,3.4 L295.2,2.2 L289.6,4.3M342.1,-8.1 L340.7,-10.0 L339.5,-7.0M342.1,-8.1 L339.5,-7.0M21.7,338.0 L18.3,336.7 L13.6,331.6 L11.7,325.8 L8.0,322.1M22.5,338.0 L25.9,336.9M234.7,268.5 L238.6,272.8M391.1,332.0 L393.5,334.1M391.1,332.0 L384.1,325.8M45.1,539.1 L48.5,534.5M209.2,112.5 L212.9,111.4M208.3,112.8 L201.5,115.3M212.9,111.4 L209.2,112.5M212.9,111.4 L218.8,109.7M217.4,103.7 L213.6,94.3M217.4,103.7 L219.7,109.0M357.9,372.5 L351.9,365.7M358.8,373.4 L360.6,375.7M-5.5,-54.7 L-9.4,-63.3M565.2,-47.8 L567.8,-50.8M565.2,-47.8 L562.8,-44.7M368.7,265.3 L365.6,264.3M365.6,264.3 L368.7,265.3M-214.5,712.9 L-216.7,707.3M-214.5,712.9 L-212.7,717.5M-212.7,717.5 L-214.5,712.9M225.4,224.2 L223.8,226.4M220.7,215.5 L223.3,214.0M223.8,226.4 L225.4,224.2M303.9,319.2 L306.1,321.6M-81.6,693.4 L-86.3,692.7M-86.3,692.7 L-81.6,693.4M583.2,-69.8 L574.8,-59.1M574.8,-59.1 L572.5,-56.4M574.8,-59.1 L583.2,-69.8M113.6,141.8 L117.5,140.6M526.6,275.9 L524.5,278.4M526.6,275.9 L530.3,278.2M56.7,240.1 L65.6,252.2M56.7,240.1 L52.9,234.9M28.1,593.5 L26.1,591.8M28.1,593.5 L34.1,598.7M26.1,591.8 L28.1,593.5M26.1,591.8 L23.5,589.5M23.5,589.5 L26.1,591.8M17.9,584.6 L16.1,583.1M10.3,588.2 L13.0,585.0M13.0,585.0 L10.3,588.2M13.0,585.0 L14.6,583.1M8.9,589.9 L6.6,592.8M131.6,237.1 L128.0,239.1M128.0,239.1 L131.6,237.1M202.1,205.6 L206.0,207.2M238.7,110.0 L237.1,107.1M237.1,107.1 L238.7,110.0M200.8,257.4 L199.1,259.7M101.8,259.5 L99.4,261.5M375.7,397.5 L377.2,400.3M375.7,397.5 L374.2,394.6M374.2,394.6 L375.7,397.5M68.9,166.7 L72.2,166.4M188.0,199.6 L184.9,198.0 L184.1,199.6 L182.6,199.3M182.6,199.3 L184.1,199.6 L184.9,198.0 L188.0,199.6M191.5,201.3 L194.1,202.7M217.8,234.4 L220.9,230.2M93.5,265.7 L95.7,264.3M261.3,234.0 L258.6,240.2M261.6,233.4 L263.0,230.4M258.6,240.2 L261.3,234.0M673.4,664.9 L671.7,668.5M673.4,664.9 L675.1,661.3M306.4,235.2 L306.7,231.3M-126.4,156.1 L-126.9,161.4M-126.4,156.1 L-127.1,152.5M-11.5,612.8 L-13.5,610.7M131.0,132.6 L129.7,130.1M372.2,391.2 L370.8,389.0M371.5,406.0 L369.0,401.2M371.5,406.0 L373.0,408.2M593.3,294.2 L591.8,292.1M593.7,294.8 L595.9,297.7M591.8,292.1 L593.3,294.2M112.5,185.9 L109.7,186.5M-228.4,677.9 L-228.9,674.5M-228.9,674.5 L-228.4,677.9M-228.9,674.5 L-227.1,654.2M87.1,385.8 L96.3,398.5 L106.2,395.7M106.2,395.7 L96.3,398.5 L87.1,385.8M106.2,395.7 L126.4,388.5M490.9,349.1 L488.5,350.2 L490.9,355.7 L498.8,352.5M462.1,-49.5 L459.6,-50.9 L460.6,-52.7 L469.8,-51.8 L476.6,-54.2 L480.8,-62.0M106.9,143.0 L101.1,143.7M101.1,143.7 L106.9,143.0M101.1,143.7 L96.9,144.1M442.6,436.4 L436.3,441.1M24.3,287.2 L21.2,283.5M24.3,287.2 L30.2,294.5M365.3,21.8 L365.9,18.8M664.8,-76.4 L659.8,-69.2M6.6,592.8 L8.9,589.9M4.3,595.6 L1.9,598.6M237.4,262.6 L234.0,262.8M237.4,262.6 L240.1,262.4M234.0,262.8 L223.6,263.5M234.0,262.8 L237.4,262.6M42.7,-98.5 L38.0,-97.1M618.4,528.8 L616.8,531.0 L614.0,531.0M53.7,722.9 L46.7,729.7M373.0,408.2 L371.5,406.0M374.4,410.1 L376.6,413.0M372.8,13.0 L368.3,11.8M372.8,13.0 L371.9,20.3M-10.2,631.1 L-9.9,627.9M-10.2,631.1 L-10.4,633.7M-9.9,627.9 L-10.2,631.1M-9.9,627.9 L-9.5,623.5M-4.8,604.9 L-9.1,611.9M-4.8,604.9 L0.2,598.5M-127.5,151.8 L-130.3,148.4M191.6,119.4 L185.8,120.4M500.2,263.0 L502.7,260.2M485.8,253.9 L484.5,257.9M-9.5,623.5 L-9.9,627.9M251.6,229.8 L253.1,226.1M251.6,229.8 L249.9,235.0M424.3,129.1 L434.0,133.5M550.2,42.1 L548.1,41.1 L548.0,40.2 L549.9,40.2 L550.2,42.1M550.2,42.1 L549.9,40.2 L548.0,40.2 L548.1,41.1 L550.2,42.1M550.3,43.3 L550.7,47.1M550.7,47.1 L550.3,43.3M83.3,269.6 L86.3,268.4M83.3,269.6 L78.3,270.7M78.3,270.7 L83.3,269.6M521.9,363.1 L524.4,363.7M524.4,363.7 L529.7,365.2M524.4,363.7 L521.9,363.1M-228.0,681.3 L-228.0,688.5M76.6,270.3 L86.3,268.4M314.5,253.7 L318.0,254.7M470.9,248.8 L471.1,246.3M470.9,248.8 L470.8,254.1M470.8,254.1 L470.9,248.8M470.8,254.1 L470.7,255.6 L472.6,255.2 L472.4,254.1 L470.8,254.1M470.8,254.1 L472.4,254.1 L472.6,255.2 L470.7,255.6 L470.8,254.1M96.9,144.1 L101.1,143.7M701.4,219.9 L704.9,221.2M701.4,219.9 L697.6,218.5M704.9,221.2 L708.9,222.7M704.9,221.2 L701.4,219.9M-193.1,227.9 L-189.8,229.5 L-192.4,234.3M37.9,675.3 L41.9,682.7M37.9,675.3 L34.2,668.7M-9.3,621.8 L-9.1,619.4M480.5,668.2 L475.4,668.1M412.7,286.8 L409.8,283.0M412.7,286.8 L414.3,288.8M533.6,324.6 L530.6,326.6M140.2,430.7 L144.5,430.5 L142.1,433.4 L140.2,430.7M140.2,430.7 L142.1,433.4 L144.5,430.5 L140.2,430.7M140.2,430.7 L137.7,431.6M318.0,254.7 L314.5,253.7M373.4,272.3 L371.8,278.5M6.8,-71.6 L9.5,-68.8 L9.4,-65.8 L7.7,-64.4M7.7,-64.4 L9.4,-65.8 L9.5,-68.8 L6.8,-71.6M374.0,270.7 L374.9,267.8M586.5,24.4 L578.6,18.4M301.9,317.1 L299.9,314.9M-177.0,148.9 L-173.2,141.0M590.6,290.4 L592.9,288.2 L591.5,286.0 L588.9,288.4 L590.6,290.4M590.6,290.4 L588.9,288.4 L591.5,286.0 L592.9,288.2 L590.6,290.4M-217.1,294.0 L-214.8,294.5M-217.1,294.0 L-218.9,292.6 L-219.2,290.7 L-217.5,289.4M-203.0,-109.4 L-201.6,-106.7M-201.6,-106.7 L-200.2,-104.1M-201.6,-106.7 L-203.0,-109.4M407.8,451.5 L404.9,449.3M579.2,324.8 L576.7,321.5M-127.1,152.5 L-126.4,156.1M703.8,162.1 L697.2,156.5M552.8,261.5 L549.5,258.7M552.8,261.5 L555.9,264.2M549.5,258.7 L552.8,261.5M146.0,193.4 L148.9,194.7 L147.0,192.3M705.4,200.4 L702.6,197.9M705.4,200.4 L711.9,206.6M702.6,197.9 L705.4,200.4M660.1,119.8 L662.5,121.5M585.4,-25.4 L582.7,-26.6M585.4,-25.4 L589.5,-21.3M675.1,661.3 L673.4,664.9M95.5,144.3 L92.0,144.8M92.0,144.8 L95.5,144.3M331.5,501.4 L330.6,506.4M331.5,501.4 L332.4,496.6M330.6,506.4 L331.5,501.4M330.6,506.4 L329.6,509.8M440.8,686.4 L441.4,688.9 L443.2,690.3M443.2,690.3 L441.4,688.9 L440.8,686.4M657.9,42.2 L659.7,42.5 L663.2,39.5M359.7,93.5 L357.1,90.6M585.5,303.0 L587.1,305.1M457.7,377.8 L449.3,375.7M413.5,277.7 L413.5,280.5M413.5,277.7 L413.5,273.7M151.2,-32.3 L154.0,-34.7M151.2,-32.3 L147.4,-28.5M201.5,115.3 L208.3,112.8M210.6,113.1 L219.0,110.9M314.4,278.9 L315.4,275.9M572.5,-56.4 L574.8,-59.1M572.5,-56.4 L567.8,-50.8M567.8,-50.8 L572.5,-56.4M567.8,-50.8 L565.2,-47.8M573.8,34.6 L578.4,42.0M350.3,257.6 L347.6,256.3M490.3,266.9 L487.9,270.5M457.8,496.4 L456.0,498.7M457.8,496.4 L459.6,494.0M456.0,498.7 L457.8,496.4M456.0,498.7 L458.1,500.4M32.7,618.2 L29.1,615.3M419.0,247.8 L425.1,248.7M562.0,328.0 L567.0,324.3M410.1,242.0 L411.6,243.1 L415.3,242.9M433.3,281.7 L432.0,275.6M432.0,275.6 L433.3,281.7M487.9,270.5 L486.1,273.7M487.9,270.5 L490.3,266.9M486.1,273.7 L484.8,276.1M486.1,273.7 L487.9,270.5M491.4,274.0 L489.0,278.3M544.2,583.6 L547.1,586.5M543.2,582.4 L541.9,579.7M549.3,588.5 L553.6,592.4M558.7,594.2 L560.7,592.2M564.1,588.3 L562.4,590.2M505.5,353.4 L502.9,354.5M716.7,170.9 L723.9,176.5M716.7,170.9 L700.8,157.0 L699.7,154.7 L702.4,149.0 L705.4,145.9M426.5,231.8 L421.7,230.6M421.7,230.6 L426.5,231.8M419.6,230.2 L416.8,229.5M428.6,239.7 L415.7,237.
380771M428.6,239.7 L432.7,240.5M442.1,366.1 L440.5,363.9M442.1,366.1 L444.6,370.3M416.7,425.4 L419.1,427.1M393.6,438.8 L389.5,432.6M394.6,431.2 L396.1,430.3 L396.9,431.8 L395.7,432.5 L394.6,431.2M394.6,431.2 L395.7,432.5 L396.9,431.8 L396.1,430.3 L394.6,431.2M394.6,431.2 L393.2,429.0M18.7,608.2 L20.6,606.1M21.2,610.1 L22.9,608.0M25.9,628.6 L27.7,630.1 L35.3,620.4M35.3,620.4 L27.7,630.1 L25.9,628.6M8.5,643.9 L3.8,651.3M-131.0,126.9 L-132.2,127.1 L-131.6,128.3M599.3,614.8 L601.8,614.4M572.7,602.0 L569.9,602.1M601.8,614.4 L604.3,613.8M601.8,614.4 L599.3,614.8M464.1,717.0 L482.2,709.3M466.3,509.1 L458.1,500.4M466.3,509.1 L469.4,511.3M458.1,500.4 L456.0,498.7M458.1,500.4 L466.3,509.1M469.4,511.3 L466.3,509.1M469.4,511.3 L472.9,512.5M469.4,511.3 L466.1,524.9 L469.8,527.1 L472.8,525.3 L476.7,514.7 L476.0,512.1M476.0,512.1 L472.9,512.5M476.0,512.1 L477.8,507.7M476.0,512.1 L476.7,514.7 L472.8,525.3 L469.8,527.1 L466.1,524.9 L469.4,511.3M472.9,512.5 L469.4,511.3M472.9,512.5 L476.0,512.1M472.9,512.5 L474.9,506.9 L477.8,507.7M175.1,228.6 L178.7,230.4M175.1,228.6 L170.6,226.3M458.8,638.6 L456.0,639.0M460.7,642.0 L462.4,640.2M458.3,644.4 L456.6,648.1M456.7,626.8 L456.9,629.2M475.4,668.1 L471.7,668.0M475.4,668.1 L480.5,668.2M464.7,618.6 L462.4,617.4M462.4,617.4 L464.7,618.6M456.0,639.0 L458.8,638.6M455.6,652.2 L455.2,654.6M474.2,643.2 L476.1,644.6M476.1,644.6 L474.2,643.2M474.7,650.0 L471.6,649.6M471.6,649.6 L474.7,650.0M455.2,654.6 L455.6,652.2M497.1,664.5 L494.2,666.0M485.0,637.8 L487.1,639.9M487.1,639.9 L485.0,637.8M485.6,648.6 L488.7,647.0M453.0,670.4 L452.8,674.0M452.8,674.0 L453.0,670.4M452.8,674.0 L459.0,686.2M65.6,252.2 L67.6,254.9M65.6,252.2 L56.7,240.1M501.0,538.6 L498.0,538.0M498.0,538.0 L501.0,538.6M223.6,263.5 L234.0,262.8M295.6,218.3 L297.2,224.2M295.2,218.0 L291.1,214.9M606.0,601.1 L605.0,603.4M605.0,603.4 L606.0,601.1M541.9,579.7 L543.2,582.4M541.9,579.7 L540.8,577.2M289.2,208.3 L287.1,210.2 L287.5,212.1M-214.8,294.5 L-217.1,294.0M-214.8,294.5 L-211.6,294.2M-211.6,294.2 L-209.1,293.8M-211.6,294.2 L-214.8,294.5M478.4,683.1 L488.8,684.1M495.9,695.6 L498.4,694.9M498.4,694.9 L495.9,695.6M503.7,693.0 L506.4,691.6M506.4,691.6 L508.6,690.4M506.4,691.6 L503.7,693.0M508.6,690.4 L506.4,691.6M456.8,722.0 L453.5,724.2M451.4,722.0 L451.8,716.2M451.8,716.2 L451.4,713.8M451.8,716.2 L451.4,722.0M450.6,709.2 L450.1,705.9 L448.2,705.1M448.2,705.1 L450.1,705.9 L450.6,709.2M446.9,665.4 L443.9,664.8M446.9,665.4 L449.4,665.8M443.9,664.8 L440.4,664.3M443.9,664.8 L446.9,665.4M490.8,220.7 L493.0,222.7M490.8,220.7 L488.2,219.3 L488.7,222.2M488.7,222.2 L490.0,224.7M488.7,222.2 L488.2,219.3 L490.8,220.7M489.6,390.8 L490.9,386.4M489.6,390.8 L488.2,395.9M490.9,386.4 L489.6,390.8M498.8,352.5 L490.9,355.7 L488.5,350.2 L490.9,349.1M498.8,352.5 L498.0,350.1M509.8,351.5 L514.0,349.8M502.7,390.1 L509.7,391.9M464.4,486.8 L466.7,488.2 L465.4,490.4M465.4,490.4 L466.7,488.2 L464.4,486.8M480.9,606.5 L479.2,609.0M479.2,609.0 L480.9,606.5M497.9,549.4 L495.5,549.2M168.3,203.6 L165.5,202.5M85.2,94.3 L82.2,95.7M104.0,257.9 L108.5,254.6M108.5,254.6 L112.2,251.5M108.5,254.6 L104.0,257.9M157.7,75.7 L160.0,76.7 L162.5,80.7 L161.2,84.0 L158.5,86.5 L158.0,90.7 L160.7,101.1M185.3,234.0 L182.3,232.4M185.3,234.0 L189.0,235.8M184.5,235.0 L188.3,237.0M184.5,235.0 L181.7,233.6M258.3,240.7 L256.6,244.9M287.5,212.1 L291.1,214.9M287.5,212.1 L287.1,210.2 L289.2,208.3M291.1,214.9 L295.2,218.0M291.1,214.9 L287.5,212.1M446.5,243.7 L444.6,241.4M481.5,246.8 L487.0,247.4M-173.1,210.6 L-173.1,206.3M509.7,391.9 L502.7,390.1M553.5,351.1 L548.3,344.0M560.8,345.6 L556.2,339.1"/><path class="lu lu-park" data-lu="park" d="M72.7,597.4 L89.6,594.4 L88.4,598.4 L99.6,597.0 L100.3,600.9 L73.3,600.9 L72.7,597.4ZM26.5,389.1 L28.5,391.3 L25.2,394.3 L23.2,392.2 L26.5,389.1ZM189.7,382.2 L189.7,383.5 L187.4,385.5 L187.4,388.9 L185.3,390.1 L173.9,390.8 L166.0,377.9 L165.4,378.4 L163.9,376.5 L164.6,375.8 L156.9,364.6 L153.8,364.6 L154.1,357.1 L155.2,353.8 L164.9,359.4 L170.1,361.6 L176.5,361.2 L176.4,364.0 L177.5,366.3 L184.4,374.5 L186.7,378.6 L189.7,382.2ZM136.6,311.8 L139.4,321.4 L137.0,321.2 L136.5,318.7 L132.5,317.0 L131.4,314.7 L133.7,313.6 L133.6,313.1 L132.6,310.8 L130.4,308.8 L134.6,310.2 L136.6,311.8ZM137.7,308.6 L137.0,309.1 L135.0,307.8 L137.7,302.4 L138.7,305.5 L137.7,308.6ZM131.6,293.9 L128.6,296.1 L128.5,295.2 L130.7,293.9 L127.9,290.1 L125.5,290.0 L126.5,287.9 L125.8,283.8 L126.4,284.0 L127.6,287.5 L131.6,293.9ZM249.3,276.7 L249.4,280.0 L254.9,280.1 L259.9,276.1 L261.3,277.8 L264.4,275.5 L275.3,289.1 L226.6,290.3 L226.5,276.9 L249.3,276.7ZM38.4,228.9 L39.5,243.4 L42.2,242.8 L40.0,245.4 L34.2,246.3 L13.8,259.6 L0.0,253.0 L0.0,231.6 L38.4,228.9ZM180.5,257.8 L180.0,256.1 L179.8,244.6 L187.5,249.1 L188.1,250.9 L184.8,257.3 L180.5,257.8ZM167.0,217.5 L166.0,216.8 L168.8,214.4 L169.5,214.8 L169.9,213.7 L171.7,212.5 L177.3,214.4 L176.5,219.2 L167.0,217.5ZM173.9,209.5 L172.1,204.9 L178.8,205.6 L173.9,209.5ZM175.4,198.1 L178.1,199.9 L178.1,201.6 L176.6,203.0 L173.2,203.1 L169.0,202.2 L165.1,200.3 L169.6,199.1 L172.8,199.2 L173.6,198.3 L175.4,198.1ZM163.3,194.6 L163.5,195.3 L164.7,195.2 L165.5,194.5 L172.2,192.6 L173.8,191.0 L175.5,192.3 L175.4,193.3 L158.7,198.0 L158.1,197.6 L163.0,196.0 L163.3,194.6ZM124.1,184.9 L125.2,185.3 L126.3,193.7 L119.0,194.3 L118.5,185.7 L124.1,184.9ZM53.3,187.5
38077L43.2,184.7 L43.2,184.2 L40.6,183.6 L26.0,177.4 L9.9,175.9 L3.9,174.7 L0.0,173.2 L0.0,162.4 L2.7,160.0 L2.7,159.4 L1.7,156.5 L0.0,155.0 L0.0,66.0 L7.2,64.3 L10.1,62.0 L9.8,54.8 L10.3,54.0 L12.0,53.4 L12.7,54.0 L12.4,54.9 L13.8,55.8 L14.2,57.6 L16.8,58.5 L17.8,56.9 L16.6,54.5 L16.9,52.7 L18.6,51.9 L24.9,51.9 L26.1,50.6 L23.6,49.5 L23.6,48.6 L26.4,49.4 L28.1,48.8 L29.2,47.3 L34.6,46.6 L38.6,44.8 L39.0,44.0 L37.6,41.6 L37.4,39.7 L36.0,36.8 L34.3,36.2 L32.4,34.1 L33.9,33.2 L34.8,31.7 L34.5,29.0 L35.7,25.5 L38.5,24.7 L41.3,22.4 L43.7,23.8 L43.1,28.2 L44.7,32.2 L47.3,32.7 L50.8,32.0 L53.1,33.2 L59.7,29.4 L60.6,29.3 L61.3,30.0 L61.2,30.8 L60.0,32.3 L61.4,33.0 L61.2,35.6 L61.9,36.2 L66.0,34.5 L67.1,33.0 L67.8,33.5 L70.6,43.0 L63.6,46.5 L62.4,48.0 L61.9,50.6 L63.1,52.0 L64.9,52.3 L66.9,54.0 L71.3,54.9 L72.9,54.0 L71.0,46.7 L71.6,47.3 L72.6,48.9 L74.6,59.3 L73.7,59.8 L70.0,59.0 L70.0,60.7 L71.3,63.0 L72.2,63.1 L73.3,61.8 L74.2,62.0 L75.8,64.4 L76.6,68.0 L73.2,66.8 L71.4,67.7 L71.4,70.4 L75.0,69.7 L75.2,71.5 L74.7,72.2 L68.9,75.4 L63.7,69.0 L58.6,68.6 L57.0,69.6 L55.8,72.0 L56.4,73.8 L54.8,76.1 L54.4,75.5 L55.4,73.7 L55.3,72.4 L53.9,70.3 L55.0,68.1 L59.1,66.1 L61.8,63.4 L61.7,61.1 L59.2,58.3 L59.3,55.6 L57.4,54.9 L55.8,55.8 L54.8,59.4 L53.5,58.2 L52.7,60.8 L53.5,62.5 L53.6,64.3 L52.6,67.9 L48.1,67.4 L45.5,62.3 L42.7,61.9 L41.0,58.8 L39.3,57.8 L36.5,57.3 L35.6,57.5 L35.3,58.4 L33.6,57.7 L32.6,59.2 L30.6,59.4 L29.7,61.0 L28.0,61.8 L25.9,64.8 L29.7,68.3 L31.6,68.1 L32.2,67.4 L31.5,66.7 L33.2,67.3 L33.5,68.2 L35.4,69.6 L35.4,70.6 L33.6,71.2 L34.3,73.7 L35.2,73.8 L34.3,75.4 L35.1,76.2 L33.8,78.6 L34.2,80.4 L35.0,80.0 L34.3,81.8 L34.7,82.6 L35.5,83.0 L37.0,81.8 L37.6,83.6 L39.9,82.3 L43.0,83.5 L46.4,86.5 L49.0,90.5 L48.9,92.3 L48.1,92.6 L45.4,91.3 L43.7,85.9 L40.8,83.5 L37.1,84.0 L35.5,85.1 L35.6,86.9 L34.7,88.4 L35.4,90.0 L34.5,90.3 L28.9,89.2 L28.3,88.5 L24.6,90.0 L23.7,89.6 L23.8,88.7 L26.3,87.8 L26.7,86.0 L26.1,84.2 L24.2,83.7 L20.7,85.1 L19.3,83.8 L21.1,83.3 L22.9,80.3 L22.6,79.3 L23.0,78.5 L25.5,77.5 L26.1,75.8 L25.0,74.3 L20.6,72.3 L15.2,74.1 L15.7,80.4 L15.0,81.0 L13.3,80.5 L12.2,79.1 L10.5,80.1 L9.9,77.2 L9.3,76.6 L8.4,77.0 L7.1,79.3 L6.2,79.3 L4.7,80.4 L4.0,82.1 L5.3,85.5 L4.7,90.0 L6.0,92.4 L8.1,94.1 L9.4,92.9 L12.9,92.8 L14.6,90.8 L14.3,88.1 L15.2,88.0 L16.9,89.0 L18.6,88.6 L20.9,92.5 L20.7,93.4 L18.8,95.3 L18.8,99.1 L16.5,100.8 L13.8,100.7 L11.6,102.4 L11.1,104.1 L11.6,105.7 L8.0,109.8 L9.5,105.7 L7.6,105.4 L6.0,106.3 L1.9,117.5 L1.8,119.3 L3.3,123.7 L2.1,126.7 L2.1,128.4 L3.3,131.0 L3.1,131.9 L2.3,132.0 L2.3,132.8 L4.3,132.8 L5.6,131.4 L7.4,131.3 L11.2,128.9 L11.7,126.0 L10.1,123.8 L9.7,122.0 L22.8,126.4 L23.5,126.9 L23.5,128.7 L24.3,129.0 L26.1,129.0 L26.9,127.2 L27.8,127.6 L29.5,126.8 L28.6,125.2 L26.7,124.7 L27.1,123.8 L30.6,122.9 L30.9,122.0 L29.3,121.2 L25.4,122.0 L24.6,121.7 L24.0,120.0 L26.0,117.1 L28.3,115.6 L30.1,115.6 L31.3,114.3 L31.6,111.5 L32.6,110.1 L32.2,109.2 L30.6,108.4 L30.4,107.5 L31.1,107.0 L30.7,105.5 L29.6,104.1 L28.7,104.0 L29.7,102.6 L31.6,102.4 L33.0,104.5 L34.8,104.5 L36.3,100.0 L37.7,99.8 L40.5,97.5 L40.6,98.4 L39.2,100.7 L40.2,102.1 L42.8,102.7 L45.4,101.7 L51.3,102.1 L55.4,101.5 L60.3,97.7 L61.8,95.4 L63.1,96.5 L63.6,99.8 L65.3,99.8 L65.7,99.0 L65.8,100.8 L66.7,101.0 L68.1,99.9 L68.3,98.1 L72.1,96.2 L72.1,98.1 L70.5,99.0 L69.7,100.6 L70.8,102.0 L72.3,102.6 L75.0,106.0 L73.9,109.4 L67.9,109.7 L66.5,108.3 L62.8,107.4 L61.8,107.6 L61.6,112.3 L59.5,114.9 L57.2,113.5 L57.2,111.6 L55.0,110.1 L54.0,111.6 L54.5,113.3 L52.1,114.6 L50.8,118.1 L48.9,120.3 L46.0,120.6 L43.6,121.9 L42.4,124.4 L47.7,123.0 L48.9,120.7 L49.0,121.6 L48.1,123.3 L48.4,124.2 L51.0,124.5 L52.8,124.1 L56.2,123.1 L61.1,120.7 L63.8,120.6 L65.2,119.5 L67.0,119.4 L79.0,115.4 L81.8,115.1 L84.2,114.0 L88.8,114.9 L89.9,118.3 L91.5,119.1 L92.5,120.7 L92.9,122.4 L91.9,129.7 L90.3,131.9 L74.9,134.6 L74.2,135.3 L73.0,136.9 L73.1,138.8 L74.1,144.1 L76.1,145.7 L71.9,148.0 L66.9,154.1 L65.1,158.8 L65.1,165.0 L64.5,166.1 L60.9,167.0 L56.8,171.0 L54.8,171.7 L54.7,168.1 L53.4,167.2 L50.9,166.7 L50.1,165.5 L48.3,165.6 L47.3,169.5 L47.9,170.8 L46.9,181.3 L46.1,181.6 L45.9,180.3 L45.6,182.2 L45.8,182.9 L49.1,181.9 L45.3,183.6 L46.9,184.8 L54.0,186.9 L53.3,187.5ZM8.2,151.3 L2.1,155.8 L3.3,159.2 L4.5,159.0 L10.5,154.2 L10.5,152.4 L8.2,151.3ZM32.4,0.1 L31.3,2.5 L31.6,3.4 L30.4,4.8 L28.3,6.1 L24.5,6.6 L22.6,7.5 L23.6,9.5 L18.7,10.5 L17.2,12.8 L17.0,13.7 L17.6,14.3 L21.2,14.9 L19.7,
3807717.1 L19.5,19.0 L22.3,21.1 L21.6,23.7 L19.7,23.7 L17.6,21.9 L12.4,21.7 L9.4,19.5 L4.7,19.7 L3.1,20.7 L3.3,22.5 L4.6,23.9 L7.2,24.3 L9.0,26.2 L9.8,29.8 L9.4,30.6 L11.4,32.2 L11.9,34.0 L11.6,35.7 L8.0,35.0 L7.2,35.4 L9.0,40.3 L9.7,40.8 L8.2,43.0 L7.0,40.7 L7.1,39.8 L5.5,37.9 L2.7,37.7 L0.0,35.9 L0.0,0.0 L32.4,0.1ZM66.2,174.9 L66.8,176.1 L65.8,177.6 L66.7,187.9 L67.6,188.7 L66.8,189.3 L66.9,190.1 L65.7,190.0 L64.8,180.4 L58.7,181.2 L57.9,183.3 L57.6,188.8 L55.2,187.8 L56.5,185.4 L56.6,182.7 L55.8,180.8 L51.5,182.0 L54.6,180.5 L55.7,180.5 L53.1,177.2 L53.3,176.1 L55.0,175.4 L54.8,173.6 L57.7,171.8 L61.4,168.2 L64.4,167.8 L65.5,169.2 L66.6,174.8 L66.2,174.9ZM186.7,172.9 L185.5,174.4 L184.4,174.5 L182.2,173.7 L181.0,172.5 L184.8,171.1 L186.4,171.9 L186.7,172.9ZM244.6,142.0 L253.7,143.1 L255.8,144.0 L263.4,143.8 L262.1,144.3 L261.6,145.1 L262.0,145.8 L266.1,146.6 L261.3,146.5 L260.5,147.0 L259.1,146.5 L254.2,147.2 L249.8,146.0 L249.0,144.2 L244.5,143.1 L244.2,142.5 L244.6,142.0ZM256.9,99.1 L242.6,102.5 L241.1,98.8 L243.4,98.2 L239.2,88.1 L252.4,82.6 L259.0,95.7 L255.5,96.6 L256.9,99.1ZM252.0,89.8 L249.7,90.0 L249.5,91.0 L251.7,91.0 L252.2,90.6 L252.0,89.8ZM182.2,33.7 L182.2,37.0 L185.7,41.5 L188.8,43.8 L187.7,46.3 L187.8,49.2 L185.8,53.7 L186.2,58.1 L187.4,59.8 L184.0,63.6 L182.9,67.3 L184.1,72.5 L182.1,72.8 L179.4,69.8 L172.3,73.6 L168.2,77.2 L164.2,78.8 L160.7,81.2 L155.1,80.5 L148.6,82.0 L144.1,81.3 L144.3,77.3 L152.5,74.4 L164.1,73.6 L170.3,70.5 L174.9,69.1 L178.7,65.1 L181.4,60.9 L181.6,53.8 L183.6,47.4 L182.5,44.3 L180.5,42.1 L179.8,39.3 L177.1,37.1 L172.7,37.3 L170.4,38.3 L165.6,36.1 L161.4,36.0 L161.1,34.5 L166.0,32.7 L171.3,34.4 L177.8,32.3 L178.8,30.2 L181.9,27.2 L183.5,22.1 L186.6,17.3 L189.5,14.6 L187.5,17.6 L188.6,17.2 L188.9,16.0 L190.3,15.5 L189.7,16.9 L190.3,17.7 L191.0,15.9 L192.9,14.8 L197.2,14.0 L199.5,11.6 L203.0,10.6 L201.0,11.9 L200.1,14.1 L195.1,15.5 L193.6,17.4 L193.5,19.2 L189.3,20.1 L188.0,25.4 L188.0,29.2 L185.2,32.4 L182.2,33.7ZM186.2,30.0 L187.7,25.5 L186.6,24.7 L186.8,22.8 L185.0,25.7 L183.9,25.3 L183.6,27.5 L182.3,29.3 L183.1,30.0 L186.2,30.0ZM293.2,36.8 L291.9,37.0 L290.7,36.3 L288.2,37.9 L286.6,36.1 L290.6,34.2 L293.9,31.1 L296.8,32.0 L294.2,33.3 L295.0,33.8 L297.4,32.8 L298.2,35.1 L296.5,34.6 L293.2,36.8ZM491.2,546.0 L492.7,549.0 L494.4,549.1 L493.4,568.8 L489.9,575.6 L487.5,574.8 L472.3,597.5 L467.7,600.9 L380.6,600.9 L377.5,597.7 L373.0,596.3 L373.5,594.3 L372.9,590.5 L375.1,586.2 L375.7,581.8 L376.6,580.2 L384.0,583.3 L388.3,584.1 L389.3,584.9 L392.0,589.6 L394.1,590.1 L397.1,589.9 L407.7,592.3 L409.9,591.8 L412.1,589.8 L415.6,584.6 L414.6,584.1 L411.7,585.3 L415.9,582.4 L421.9,580.6 L444.1,578.0 L445.8,522.2 L472.8,533.2 L478.8,518.2 L482.5,519.7 L484.8,514.0 L485.5,514.2 L486.4,512.3 L489.2,511.8 L489.9,510.5 L488.0,508.3 L490.4,508.9 L495.2,513.6 L495.0,515.1 L496.2,518.7 L491.9,528.6 L492.0,536.7 L490.5,540.0 L491.2,546.0ZM480.1,495.7 L466.6,491.1 L469.6,486.0 L479.7,490.9 L480.6,493.6 L480.1,495.7ZM441.8,481.9 L447.1,486.3 L446.3,488.5 L442.5,487.7 L441.4,486.6 L441.0,482.3 L441.8,481.9ZM438.6,347.4 L442.5,346.9 L441.4,344.1 L441.5,339.8 L446.2,336.3 L449.8,335.8 L455.4,335.3 L458.6,335.9 L462.8,341.9 L465.1,342.5 L466.3,344.2 L454.3,363.3 L447.1,377.2 L446.9,380.7 L447.9,386.6 L452.9,395.2 L441.9,403.6 L432.5,402.2 L426.4,399.4 L413.3,390.3 L418.5,383.7 L419.8,374.4 L422.9,364.3 L429.0,364.7 L431.5,359.9 L435.6,354.9 L437.3,348.9 L438.6,347.4ZM377.6,285.6 L378.4,281.7 L381.1,282.2 L380.2,286.2 L377.6,285.6ZM409.4,282.1 L402.1,285.8 L400.1,285.3 L400.1,273.1 L409.1,273.2 L409.4,282.1ZM428.2,268.3 L422.5,268.7 L423.5,265.1 L428.3,264.3 L429.2,267.5 L428.1,267.8 L428.2,268.3ZM411.8,260.8 L416.4,272.9 L406.9,272.0 L407.9,259.6 L411.0,259.8 L411.8,260.8ZM417.6,258.8 L422.5,256.8 L424.1,257.6 L421.6,266.9 L421.4,272.6 L420.1,273.4 L416.4,272.9 L415.3,267.8 L415.1,264.2 L417.6,258.8ZM429.0,239.0 L430.2,235.8 L433.7,236.7 L432.2,239.7 L429.0,239.0ZM489.3,237.5 L488.0,242.0 L479.4,235.3 L479.2,238.9 L475.7,238.6 L475.6,240.1 L472.3,239.9 L472.2,241.7 L466.2,241.3 L466.4,239.3 L463.0,237.3 L463.4,234.4 L464.9,232.7 L468.3,230.7 L468.0,229.3 L470.3,228.2 L474.1,222.3 L478.0,222.0 L479.2,222.8 L480.3,226.2 L482.3,226.1 L487.0,230.5 L489.3,237.5ZM415.0,203.7 L415.7,204.4 L415.5,205.1 L411.5,208.3 L410.7,208.4 L410.2,207.5 L407.1,211.0 L405.9,209.5 L404.8,210.2 L398.2,201.6 L398.8,201.1 L398.2,197.6 L399.8,197.3 L401.4,193.8 L400.4,192.6 L403.1,190.5 L404.0,191.7 L407.9,190.9 L408.4,189.7 L410.1,190.3 L409.7,191.4 L411.0,192.1 L412.7,190.9 L419.0,199.0 L418.1,199.8 L419.3,201.4 L417.5,202.8 L417.0,202.2 L415.0,203.7ZM430.6,179.4 L427.9,178.6 L425.4,180.1 L414.6,171.4 L418.4,167.5 L419.4,167.6 L435.1,180.3 L435.7,181.7 L432.1,185.8 L429.7,183.2 L431.3,180.8 L430.6,180.3 L430.6,179.4ZM505.2,524.7 L509.2,519.3 L512.8,521.4 L515.0,519.8 L518.9,522.4 L509.0,536.2 L502.7,529.2 L505.2,524.7ZM481.6,493.7 L483.8,493.7 L489.8,483.5 L492.5,487.6 L495.1,486.5 L497.9,492.0 L492.5,500.0 L481.3,496.1 L481.6,493.7ZM502.7,481.9 L502.2,483.8 L497.8,485.8 L496.5,482.6 L497.9,476.7 L502.7,481.9ZM497.5,282.5 L501.4,285.5 L499.8,287.4 L496.3,284.3 L497.5,282.5ZM519.8,258.5 L517.6,257.7 L515.3,255.8 L514.8,255.0 L514.8,254.2 L514.9,252.9 L516.3,250.6 L517.9,249.4 L521.7,249.2 L524.5,251.3 L525.0,254.5 L523.4,257.7 L519.8,258.5ZM519.6,252.3 L517.7,251.0 L515.4,253.1 L515.0,254.7 L516.3,255.8 L517.2,255.4 L518.7,256.8 L520.7,254.6 L519.2,253.3 L519.6,252.3ZM510.9,215.0 L508.5,217.8 L506.3,216.0 L508.7,213.2 L510.9,215.0ZM493.7,218.6 L491.6,218.8 L488.8,216.1 L496.7,206.9 L499.8,211.5 L496.6,215.8 L493.7,218.6ZM486.8,212.2 L492.5,209.9 L499.3,202.5 L500.0,203.1 L490.1,213.7 L489.1,212.7 L488.0,213.2 L486.3,216.0 L485.7,215.2 L486.8,212.2ZM511.6,204.4 L518.3,196.5 L524.0,199.2 L534.6,208.4 L526.8,217.3 L511.6,204.4ZM531.2,183.5 L530.5,185.2 L526.5,187.0 L524.4,186.4 L518.5,182.5 L516.4,182.7 L512.1,184.6 L510.7,184.7 L509.5,183.8 L515.6,180.9 L517.3,175.6 L518.1,175.4 L524.4,167.8 L525.4,167.5 L529.4,174.9 L531.2,183.5ZM560.6,557.2 L583.1,566.8 L576.2,583.6 L567.1,578.4 L554.6,592.3 L543.3,581.2 L542.4,578.0 L560.6,557.2ZM637.3,520.2 L637.4,518.6 L636.7,518.1 L635.4,518.1 L634.2,520.1 L627.8,515.5 L626.7,515.4 L625.0,516.0 L621.4,519.5 L619.5,520.2 L614.7,520.7 L610.0,522.3 L608.8,520.1 L607.2,520.1 L604.9,521.9 L604.0,524.5 L603.5,527.4 L605.5,528.1 L605.1,530.0 L603.0,530.1 L602.6,532.2 L599.7,533.4 L593.2,529.4 L592.4,529.7 L591.4,532.4 L588.8,530.7 L589.4,528.5 L586.8,528.2 L586.8,527.2 L585.3,526.7 L584.3,525.5 L579.8,525.1 L579.3,527.6 L578.3,527.7 L578.5,524.8 L574.8,524.9 L574.8,523.5 L572.5,523.8 L571.2,521.5 L568.4,519.5 L571.0,516.3 L573.4,519.8 L577.5,517.9 L583.5,516.4 L588.1,516.4 L592.2,515.3 L606.4,509.1 L615.2,506.9 L616.5,505.7 L616.2,502.6 L616.8,501.7 L620.7,501.7 L625.2,495.2 L627.4,495.9 L627.9,496.9 L627.3,497.8 L624.7,498.1 L624.0,499.7 L624.3,500.4 L626.1,500.6 L629.7,499.8 L635.1,501.0 L638.6,503.1 L642.8,507.6 L645.9,508.7 L649.6,507.7 L652.8,510.3 L653.9,510.1 L654.5,508.5 L654.1,505.4 L661.1,507.8 L659.2,509.1 L658.4,511.2 L657.1,512.4 L656.0,514.5 L657.2,516.5 L655.7,517.8 L654.4,516.4 L649.7,517.7 L641.3,517.1 L638.9,518.5 L638.5,520.1 L637.3,520.2ZM591.6,498.9 L592.0,501.4 L588.1,502.0 L587.7,499.5 L591.6,498.9ZM586.9,403.0 L590.2,398.9 L593.3,398.2 L592.8,399.1 L593.4,400.0 L597.4,402.0 L598.5,402.0 L600.6,399.3 L608.8,400.5 L615.6,402.0 L615.5,404.6 L615.0,406.4 L587.1,417.2 L584.9,412.1 L586.1,411.6 L585.6,409.6 L586.9,403.0ZM550.5,395.2 L551.1,396.7 L542.1,400.1 L523.9,391.2 L524.5,389.6 L529.0,392.6 L532.0,391.6 L536.1,393.7 L536.8,392.1 L545.7,39
380776.3 L550.5,395.2ZM601.4,333.7 L603.4,336.2 L601.1,338.0 L599.1,335.5 L601.4,333.7ZM538.5,277.2 L541.5,279.3 L541.1,280.0 L542.4,281.3 L540.4,283.6 L535.7,280.1 L535.6,278.7 L536.4,277.8 L538.5,277.2ZM548.1,278.3 L544.3,281.8 L542.3,279.4 L547.2,275.6 L548.1,278.3ZM566.8,260.2 L571.3,265.0 L569.6,266.5 L567.7,266.1 L564.8,269.4 L561.6,267.2 L560.7,265.4 L557.7,262.9 L560.1,260.1 L559.6,259.7 L562.4,257.3 L565.6,260.0 L566.8,260.2ZM586.4,248.5 L581.7,254.0 L579.5,252.1 L584.2,246.6 L586.4,248.5ZM567.7,248.3 L565.9,250.4 L561.0,246.2 L562.8,244.1 L567.7,248.3ZM542.2,248.7 L538.9,245.8 L543.8,240.3 L547.0,243.2 L542.2,248.7ZM553.4,225.8 L546.3,222.5 L557.2,210.3 L561.8,214.2 L561.2,215.1 L563.6,217.2 L564.6,216.7 L569.6,221.1 L558.8,232.7 L557.3,232.1 L555.8,228.2 L553.4,225.8ZM558.5,205.8 L555.7,209.1 L554.9,209.0 L551.8,206.2 L552.2,204.9 L550.9,203.8 L552.7,201.8 L554.0,202.9 L555.1,202.2 L556.0,203.0 L556.8,202.2 L558.3,203.6 L557.7,204.4 L558.5,205.8ZM573.4,91.6 L578.4,91.1 L575.4,101.3 L571.6,106.4 L571.8,107.1 L569.6,109.3 L566.1,112.7 L558.2,118.6 L556.4,115.9 L559.7,111.3 L561.7,106.1 L562.5,98.8 L566.0,97.5 L573.4,91.6ZM671.6,600.9 L672.3,597.6 L680.0,590.1 L680.0,600.9 L671.6,600.9ZM677.8,514.7 L675.3,514.4 L672.4,512.3 L670.7,512.3 L669.4,511.1 L668.2,510.8 L666.9,512.0 L665.9,511.0 L667.3,507.1 L669.4,504.4 L675.9,501.4 L677.2,501.4 L678.6,502.5 L678.3,503.9 L680.0,50
380775.3 L680.0,513.4 L677.8,514.7ZM665.2,507.1 L664.6,509.4 L662.5,507.1 L669.0,499.2 L671.0,499.8 L671.1,500.7 L670.4,501.7 L665.2,507.1ZM649.8,486.4 L651.6,487.6 L653.2,487.3 L653.5,484.2 L654.1,483.8 L655.2,485.4 L659.1,487.6 L660.4,491.0 L660.5,493.6 L661.2,494.0 L662.0,493.4 L663.2,489.5 L664.5,487.8 L665.2,488.5 L665.1,491.5 L663.8,493.2 L664.1,496.3 L665.8,497.7 L666.7,499.6 L665.0,501.5 L663.2,501.0 L662.2,502.7 L662.5,504.7 L661.0,506.8 L655.1,504.6 L656.4,499.4 L657.8,497.3 L657.7,496.2 L651.3,492.0 L648.5,488.7 L649.8,486.4ZM678.3,495.2 L680.0,497.8 L680.0,501.2 L679.2,501.9 L678.1,500.8 L678.8,498.8 L675.5,494.9 L673.6,494.5 L672.6,495.3 L671.0,498.6 L669.4,498.0 L668.1,491.7 L668.2,488.2 L670.4,488.0 L671.7,487.0 L675.3,493.5 L678.3,495.2ZM637.9,488.6 L637.5,487.5 L638.9,486.4 L640.8,487.4 L641.5,488.8 L642.6,489.4 L643.3,488.4 L643.7,488.7 L643.4,489.7 L644.3,490.5 L645.5,490.7 L646.8,489.1 L647.8,489.5 L650.0,492.6 L648.6,493.5 L647.3,493.4 L643.9,492.2 L640.0,489.1 L637.9,488.6ZM678.0,120.5 L678.4,116.9 L677.8,115.4 L679.4,104.4 L653.3,102.0 L643.9,102.3 L638.7,98.5 L636.6,90.5 L632.3,79.3 L627.8,57.3 L633.2,53.3 L638.1,52.0 L643.9,58.7 L647.1,69.6 L648.2,83.0 L664.8,87.6 L673.3,91.4 L680.0,89.1 L680.0,120.7 L678.0,120.5ZM660.9,26.4 L654.5,24.6 L655.9,19.0 L660.0,20.2 L661.4,16.4 L666.7,18.0 L666.1,21.7 L666.4,24.8 L664.7,25.8 L660.9,26.4Z"/><path class="lu lu-ins" data-lu="ins" d="M54.5,600.9 L72.7,597.4 L73.3,600.9 L54.5,600.9ZM367.9,400.4 L371.3,407.1 L379.6,416.9 L380.5,417.5 L382.1,417.4 L386.9,429.4 L391.5,437.4 L388.0,440.9 L399.2,451.5 L399.4,454.2 L364.7,448.5 L366.5,400.5 L367.9,400.4ZM360.0,365.6 L358.1,368.5 L356.9,367.8 L358.0,365.9 L355.3,364.4 L356.1,363.1 L360.0,365.6ZM372.9,284.7 L376.1,285.4 L376.9,281.7 L378.3,282.0 L377.6,285.6 L380.2,286.2 L381.0,282.5 L382.5,282.8 L381.5,287.5 L379.5,287.0 L379.8,287.7 L379.0,290.3 L377.0,289.9 L377.2,287.3 L377.7,287.5 L377.9,286.6 L375.9,286.2 L375.3,288.8 L371.1,287.8 L371.4,286.6 L373.6,287.0 L374.0,285.3 L372.9,284.7ZM13.8,259.6 L13.4,261.6 L16.8,265.1 L17.3,267.1 L16.8,270.2 L23.5,270.2 L23.2,278.3 L25.7,281.6 L22.5,284.2 L30.6,294.2 L22.0,301.5 L19.6,297.2 L8.2,300.1 L1.0,298.9 L0.0,303.0 L0.0,253.0 L13.8,259.6ZM280.2,258.7 L276.1,266.1 L266.0,260.2 L267.7,249.8 L272.9,250.9 L275.4,243.8 L278.8,244.9 L276.5,251.7 L289.1,257.1 L287.7,261.2 L281.3,258.2 L280.2,258.7ZM370.0,212.2 L369.7,213.4 L374.6,214.6 L368.9,239.3 L333.8,233.8 L339.7,217.2 L349.4,219.5 L350.1,217.2 L350.9,217.4 L354.1,205.7 L373.6,210.4 L372.8,212.8 L370.0,212.2ZM230.2,185.0 L232.6,183.2 L241.0,189.7 L230.1,198.5 L221.3,194.4 L230.2,185.0ZM207.4,135.2 L216.0,132.8 L210.0,138.5 L207.6,139.5 L207.1,141.6 L208.1,142.8 L207.6,150.9 L207.9,158.9 L197.2,161.7 L194.5,135.6 L200.3,136.9 L203.0,136.0 L204.9,136.2 L205.9,137.2 L207.4,135.2ZM238.4,154.7 L235.3,155.1 L230.1,158.5 L229.7,159.7 L210.8,158.8 L209.9,151.9 L210.0,146.6 L212.1,140.0 L214.2,137.2 L218.6,134.4 L221.1,137.9 L224.0,140.2 L226.0,139.9 L229.7,143.8 L233.1,142.9 L234.9,143.4 L236.9,145.2 L241.9,146.0 L243.0,146.8 L242.5,150.5 L238.4,154.7ZM217.8,139.6 L218.1,137.6 L216.8,136.9 L215.7,136.8 L213.8,138.4 L216.3,141.0 L217.8,139.6ZM51.6,73.1 L63.0,63.4 L68.2,75.6 L78.0,69.5 L83.3,81.6 L67.5,88.9 L51.6,73.9 L51.6,73.1ZM219.8,74.0 L212.6,66.8 L214.1,65.0 L221.4,72.3 L219.8,74.0ZM542.6,583.0 L553.5,593.6 L548.2,600.9 L546.1,600.9 L546.7,599.5 L546.3,598.9 L544.6,599.2 L541.8,597.4 L541.4,598.3 L544.1,600.9 L536.0,600.9 L532.4,573.0 L534.6,574.7 L536.1,572.9 L542.6,583.0ZM516.9,478.3 L522.2,473.5 L529.1,470.4 L537.9,477.8 L538.9,480.2 L538.9,483.4 L531.6,491.3 L516.9,478.3ZM461.8,454.0 L456.7,456.8 L457.1,457.5 L455.3,458.2 L454.3,456.6 L455.1,456.1 L452.4,451.4 L454.1,450.4 L456.8,455.1 L460.8,452.4 L461.8,454.0ZM574.6,335.0 L568.6,339.8 L560.9,329.3 L567.0,324.9 L574.6,335.0ZM425.5,305.9 L426.4,307.8 L417.0,311.6 L413.8,310.3 L411.0,311.8 L410.0,309.6 L413.1,308.6 L411.9,306.1 L413.5,305.4 L415.1,308.9 L417.1,309.8 L425.5,305.9ZM529.5,287.3 L529.0,287.9 L525.7,285.1 L526.7,284.0 L530.0,286.7 L533.1,283.0 L537.4,286.4 L534.9,289.4 L534.3,288.9 L533.1,290.3 L529.5,287.3ZM540.8,275.5 L541.9,276.5 L541.1,277.8 L538.7,275.8 L539.4,275.1 L538.3,274.2 L537.8,274.8 L537.0,274.2 L538.9,272.0 L539.6,272.6 L539.3,273.2 L541.3,274.9 L540.8,275.5ZM522.8,221.0 L500.8,202.4 L507.8,196.8 L514.0,193.8 L518.8,195.0 L524.0,197.4 L524.4,198.2 L532.9,201.4 L533.1,200.6 L534.8,200.5 L537.9,197.0 L545.0,199.9 L549.7,194.5 L558.5,192.0 L558.9,192.4 L564.9,185.4 L594.1,210.7 L587.7,218.7 L592.7,223.0 L601.6,230.6 L606.3,225.2 L605.6,224.6 L606.9,223.0 L607.7,223.6 L608.7,223.2 L620.1,233.1 L615.3,238.6 L614.8,238.1 L591.4,265.2 L581.8,266.8 L581.9,267.5 L574.8,268.8 L572.1,266.4 L566.7,272.7 L555.7,263.2 L558.8,259.5 L553.6,254.9 L557.4,250.5 L544.7,239.7 L549.8,233.7 L549.7,232.9 L529.3,215.4 L524.2,221.1 L522.8,221.0ZM455.2,230.9 L451.3,223.8 L453.4,222.5 L454.8,223.9 L453.2,224.9 L456.4,230.1 L455.2,230.9ZM488.1,218.1 L486.3,216.0 L488.0,213.2 L489.1,212.7 L490.1,213.7 L500.0,203.1 L527.8,227.3 L515.8,241.3 L488.1,218.1ZM654.7,195.
380776 L657.0,192.6 L651.5,191.6 L652.4,190.2 L651.8,189.8 L653.5,187.8 L652.3,186.7 L658.8,177.5 L655.0,174.8 L653.9,176.8 L639.6,167.1 L635.7,172.8 L634.0,173.4 L633.0,172.6 L630.5,175.4 L632.9,178.0 L628.3,185.4 L627.1,180.1 L628.1,173.4 L629.2,172.8 L630.1,170.2 L630.3,159.8 L629.9,158.3 L628.7,156.9 L624.6,156.1 L623.3,152.5 L624.7,153.8 L625.4,151.9 L627.0,152.2 L628.3,148.5 L625.7,144.6 L624.2,144.0 L624.0,143.5 L625.7,143.1 L624.0,136.0 L622.2,136.4 L621.0,132.1 L623.6,121.1 L624.4,120.1 L633.7,116.0 L634.9,115.0 L637.4,103.2 L623.8,57.5 L643.2,59.2 L643.3,54.3 L649.4,54.7 L659.1,61.8 L660.7,62.5 L666.1,62.8 L672.6,65.7 L677.1,86.6 L680.0,88.0 L680.0,199.0 L676.6,198.7 L675.2,197.9 L677.0,193.0 L670.5,189.4 L668.6,193.7 L667.0,192.4 L661.3,204.0 L657.8,206.5 L655.2,204.8 L657.7,201.5 L655.9,200.2 L657.6,197.8 L654.7,195.6ZM634.6,147.4 L630.7,148.3 L627.9,153.7 L630.3,156.8 L631.5,161.2 L632.5,160.7 L635.0,161.1 L635.3,160.6 L634.3,159.5 L635.0,157.4 L643.6,150.7 L646.3,150.0 L649.2,150.7 L651.2,153.5 L653.5,152.3 L652.4,150.8 L652.1,148.7 L653.5,146.5 L658.1,145.1 L663.9,140.9 L668.5,136.4 L667.1,135.1 L652.1,142.9 L643.1,146.5 L641.0,146.3 L636.4,143.9 L634.6,144.1 L634.6,147.4ZM472.5,170.8 L494.3,160.4 L513.8,148.5 L516.3,145.8 L519.5,144.0 L521.2,143.4 L522.6,147.7 L533.7,143.7 L547.7,184.3 L537.7,187.7 L532.4,184.3 L530.7,185.8 L526.1,187.6 L523.2,186.6 L519.3,183.4 L517.1,183.2 L506.1,187.9 L505.2,189.9 L503.7,190.1 L503.3,188.8 L502.7,189.1 L501.8,185.4 L499.7,184.7 L491.1,192.2 L491.6,193.2 L490.9,194.1 L476.6,182.2 L471.9,172.5 L472.5,170.8ZM430.1,141.1 L435.6,135.1 L441.0,140.4 L435.4,146.5 L430.1,141.1Z"/><path class="lu lu-com" data-lu="com" d="M4.7,597.1 L9.7,600.9 L1.5,600.9 L4.7,597.1ZM12.7,581.6 L1.7,595.3 L0.0,593.9 L0.0,587.4 L4.5,581.9 L6.1,583.1 L9.2,579.3 L12.7,581.6ZM34.1,537.6 L33.1,539.3 L36.0,540.8 L34.7,543.1 L38.3,545.2 L26.0,563.5 L13.6,580.3 L10.1,578.1 L14.3,571.8 L4.4,564.4 L17.4,546.4 L21.5,544.6 L23.3,542.5 L22.3,540.0 L23.4,536.5 L25.5,533.7 L26.4,533.7 L34.1,537.6ZM143.9,296.9 L145.3,301.2 L146.2,306.6 L146.4,313.6 L147.1,315.4 L133.9,317.0 L121.4,322.2 L115.4,310.9 L111.5,313.1 L94.6,311.8 L95.6,291.6 L94.2,286.4 L88.5,287.4 L83.5,286.7 L58.2,301.8 L56.6,299.5 L49.4,305.6 L43.6,297.7 L41.3,299.0 L34.5,292.1 L23.2,278.3 L23.5,270.2 L32.8,269.4 L33.7,270.2 L41.5,266.8 L40.3,262.6 L49.4,260.4 L48.2,255.2 L54.3,254.6 L55.1,249.9 L64.3,242.9 L69.7,240.0 L84.8,236.4 L106.1,237.6 L115.0,244.6 L115.3,246.2 L114.8,247.1 L116.2,248.8 L117.6,247.7 L120.6,248.2 L124.0,253.6 L127.2,256.5 L130.7,263.1 L136.3,281.5 L139.2,288.8 L143.9,296.9ZM132.0,270.5 L130.5,269.7 L129.8,270.2 L130.4,272.5 L131.0,272.6 L132.2,271.9 L132.0,270.5ZM12.3,219.9 L13.7,214.2 L21.8,210.7 L44.0,215.2 L45.7,217.1 L50.4,219.3 L62.0,220.1 L63.6,221.8 L65.2,222.2 L68.4,229.7 L59.4,241.1 L49.5,227.8 L45.5,225.6 L12.3,219.9ZM122.5,240.9 L103.4,229.6 L101.0,226.1 L100.9,224.2 L102.1,221.6 L104.7,218.8 L109.8,216.4 L154.5,203.3 L160.1,206.3 L162.2,201.6 L169.7,204.8 L170.6,205.7 L171.8,209.3 L171.5,210.2 L169.4,211.8 L150.5,224.9 L122.5,240.9ZM71.7,200.7 L69.9,200.1 L72.5,192.7 L79.7,192.8 L99.1,190.0 L100.2,198.3 L92.6,200.0 L93.9,210.8 L84.0,211.1 L76.7,209.5 L71.0,206.6 L71.7,200.7ZM61.3,199.8 L58.5,199.3 L59.0,196.0 L53.6,195.0 L51.9,202.0 L49.5,202.4 L34.8,201.5 L32.6,199.2 L29.6,198.7 L28.6,194.6 L21.7,192.4 L23.8,183.2 L25.8,178.8 L34.9,183.4 L44.3,186.3 L55.3,189.3 L70.2,192.3 L69.9,200.1 L61.4,199.2 L61.3,199.8ZM65.8,176.8 L67.2,176.4 L69.8,180.4 L70.8,185.3 L70.3,190.0 L56.9,188.6 L58.5,181.4 L65.8,176.8ZM112.0,169.0 L113.3,184.7 L82.0,190.5 L78.4,191.0 L72.8,190.4 L72.6,182.9 L68.0,173.2 L66.9,160.2 L68.6,155.4 L71.9,150.8 L74.2,148.8 L77.7,147.2 L91.7,145.5 L92.2,150.1 L120.0,147.7 L122.2,157.8 L116.4,158.5 L116.9,164.1 L123.0,163.6 L124.4,182.5 L119.5,183.5 L118.1,168.3 L112.0,169.0ZM70.0,154.0 L69.9,155.3 L70.8,155.4 L76.7,155.6 L78.1,154.9 L76.6,152.1 L74.2,150.5 L71.5,151.7 L70.0,154.0ZM266.6,276.1 L271.4,272.5 L280.3,278.0 L284.9,278.0 L285.9,293.4 L280.5,293.6 L266.6,276.1ZM166.1,297.8 L161.4,300.9 L156.9,300.6 L153.7,299.3 L149.2,296.1 L143.1,285.9 L141.4,282.3 L139.8,276.6 L141.6,274.6 L147.0,265.4 L148.5,264.9 L151.7,265.4 L155.6,267.0 L158.0,268.9 L159.7,271.7 L168.7,279.9 L171.7,284.6 L166.1,297.8ZM161.7,275.2 L159.9,274.3 L158.9,278.2 L161.1,279.8 L163.7,277.7 L161.7,275.2ZM159.7,261.4 L160.7,253.7 L150.3,261.3 L149.9,263.5 L143.6,262.2 L138.4,256.9 L140.1,242.5 L142.6,240.2 L139.2,234.2 L149.1,228.9 L179.8,244.6 L180.0,256.1 L176.2,261.4 L170.4,266.5 L167.8,266.6 L159.7,261.4ZM266.2,249.2 L259.3,246.2 L262.8,239.8 L269.6,243.4 L266.2,249.2ZM204.4,229.2 L214.8,236.8 L201.6,255.1 L193.6,250.4 L192.8,248.5 L201.5,230.7 L202.3,229.7 L204.4,229.2ZM254.0,226.0 L272.4,234.6 L269.8,239.4 L260.8,234.0 L251.9,230.2 L253.4,226.2 L254.0,226.0ZM248.5,221.7
38077L249.1,220.1 L247.9,219.7 L247.1,221.0 L231.6,216.8 L236.7,203.4 L238.2,201.6 L232.8,198.3 L242.0,190.7 L232.6,183.2 L267.3,164.6 L265.0,182.1 L261.0,186.6 L270.3,197.8 L270.8,204.7 L268.1,210.8 L271.5,211.6 L275.1,211.0 L275.2,208.0 L278.7,202.1 L275.7,198.1 L271.9,187.8 L273.8,185.8 L277.4,187.3 L286.7,195.5 L289.0,204.7 L279.3,212.7 L277.3,225.4 L261.1,222.8 L261.2,221.7 L257.7,221.2 L257.6,222.3 L261.0,223.0 L260.9,223.5 L277.6,226.0 L277.5,226.4 L297.5,229.4 L297.7,228.5 L305.7,229.8 L306.2,231.2 L305.3,240.7 L281.3,237.1 L273.2,234.0 L248.5,221.7ZM199.3,226.8 L199.7,227.8 L190.4,245.8 L188.7,246.7 L184.3,245.1 L166.7,235.4 L153.5,229.3 L151.3,227.5 L166.0,216.8 L167.0,217.5 L176.5,219.2 L177.3,214.4 L171.7,212.5 L181.0,205.8 L187.2,206.6 L185.7,217.4 L187.6,221.4 L199.3,226.8ZM212.3,213.4 L227.0,217.7 L228.2,218.6 L215.8,235.8 L205.2,228.5 L204.3,226.2 L210.7,214.2 L212.3,213.4ZM207.5,213.3 L201.6,224.7 L199.7,225.2 L190.5,221.7 L188.1,220.1 L187.1,217.7 L188.7,206.6 L194.4,207.9 L207.2,212.1 L207.5,213.3ZM202.1,202.1 L205.6,203.5 L206.4,201.8 L210.3,203.7 L208.7,207.5 L207.7,207.7 L200.8,204.7 L202.1,202.1ZM196.1,204.8 L195.8,206.3 L183.9,204.2 L184.3,201.8 L187.6,202.3 L188.1,200.5 L196.1,204.8ZM152.3,179.9 L157.4,174.2 L164.5,170.9 L206.9,161.9 L208.3,163.7 L210.3,175.8 L209.7,178.5 L208.0,181.4 L203.3,184.9 L158.1,197.7 L147.9,193.0 L147.1,191.5 L147.3,189.7 L152.3,179.9ZM179.8,135.6 L194.3,133.3 L197.2,161.7 L181.6,165.2 L169.3,167.8 L160.3,170.3 L155.6,172.8 L151.5,177.1 L145.2,189.9 L144.0,190.6 L142.6,190.6 L130.7,184.9 L128.5,183.0 L126.3,179.9 L124.5,157.7 L120.4,140.5 L132.3,135.8 L162.5,126.6 L167.7,134.8 L177.7,132.0 L179.8,135.6ZM188.9,138.8 L185.1,138.2 L184.4,140.8 L188.1,141.6 L191.5,141.2 L192.5,138.2 L192.3,137.6 L190.9,137.6 L188.9,138.8ZM174.1,134.2 L171.7,136.1 L172.9,136.3 L174.9,139.2 L176.5,140.2 L177.3,137.7 L175.6,134.7 L174.3,134.7 L174.1,134.2ZM236.4,106.5 L241.2,115.4 L237.5,117.3 L232.8,107.8 L233.0,107.2 L236.4,106.5ZM548.8,532.9 L545.5,538.0 L548.0,543.0 L545.1,544.9 L539.2,541.9 L533.9,534.5 L539.7,530.1 L534.4,525.3 L533.2,517.3 L532.3,516.7 L536.1,511.4 L541.0,508.9 L547.6,515.3 L549.1,523.5 L544.5,528.9 L548.8,532.9ZM526.8,520.5 L525.3,518.9 L528.0,514.7 L532.7,517.4 L534.1,525.0 L526.8,520.5ZM527.9,514.6 L525.2,518.9 L525.7,521.8 L522.8,526.4 L509.3,518.8 L504.4,525.2 L500.2,522.5 L493.2,510.4 L498.3,502.4 L496.1,501.2 L496.9,499.9 L495.0,498.3 L497.5,493.2 L500.5,495.4 L504.1,502.6 L504.1,504.3 L500.2,509.9 L501.4,510.8 L503.4,507.8 L504.2,507.6 L513.8,513.7 L519.7,507.8 L527.9,514.6ZM531.8,387.5 L525.7,384.7 L529.7,370.4 L535.7,365.8 L537.2,367.9 L540.4,365.6 L543.0,369.0 L537.5,373.1 L535.8,375.5 L531.8,387.5ZM587.0,303.8 L595.5,297.8 L597.8,301.0 L589.4,307.2 L587.0,303.8ZM287.4,298.0 L292.3,298.3 L289.0,304.0 L287.3,302.4 L287.4,298.0ZM284.9,300.7 L283.4,302.3 L275.8,302.4 L275.7,297.6 L276.6,294.7 L285.6,294.9 L284.9,300.7ZM375.3,267.9 L388.1,271.5 L387.9,281.4 L380.5,279.3 L380.3,280.1 L372.3,277.7 L375.3,267.9ZM307.2,231.2 L311.8,231.8 L310.8,240.9 L309.2,242.7 L307.2,251.4 L297.3,248.6 L307.3,251.8 L309.3,242.8 L310.9,240.9 L311.9,231.9 L333.2,235.3 L328.9,246.8 L312.4,242.4 L310.2,252.2 L323.4,255.7 L324.9,254.5 L328.6,256.3 L327.7,258.3 L323.9,256.9 L308.2,290.1 L302.6,298.4 L294.1,307.5 L289.1,303.9 L294.3,296.0 L287.6,293.2 L287.1,286.8 L289.5,285.6 L292.0,279.5 L287.1,277.5 L280.3,277.9 L278.7,276.5 L282.3,270.8 L285.1,272.2 L286.7,271.6 L288.0,264.3 L296.4,241.5 L298.5,241.6 L296.4,248.4 L298.7,241.5 L306.3,242.2 L307.2,231.2ZM366.3,264.8 L364.1,269.4 L360.9,268.2 L362.8,263.6 L366.3,264.8ZM531.8,267.9 L530.7,268.1 L517.4,264.8 L517.6,264.1 L515.3,263.1 L515.9,261.1 L516.7,261.3 L517.6,258.8 L520.9,259.8 L521.1,259.2 L522.2,259.4 L522.3,258.9 L523.7,259.3 L529.3,263.7 L529.0,264.5 L539.1,267.3 L538.5,269.0 L534.6,268.1 L534.2,269.5 L532.5,271.5 L531.5,270.8 L532.3,269.5 L531.6,268.8 L531.8,267.9ZM540.6,261.0 L541.7,262.1 L539.2,265.3 L539.5,266.1 L532.7,265.0 L533.7,260.5 L536.9,262.4 L537.5,261.5 L538.4,262.1 L539.2,261.1 L540.1,261.7 L540.6,261.0ZM325.0,254.1 L323.3,255.5 L310.5,252.0 L312.9,242.7 L322.7,245.3 L333.7,250.2 L330.2,257.1 L325.0,254.1ZM277.6,237.8 L286.3,240.3 L283.2,249.1 L278.2,247.1 L278.9,244.8 L275.7,243.7 L277.6,237.8ZM440.2,163.8 L443.9,167.3 L446.5,164.4 L449.4,166.8 L437.8,179.0 L431.2,173.2 L440.2,163.8Z"/><g class="pl" tabindex="0" data-v="Historic downtown" data-k="State House, City Dock and the densest walkable core"><circle class="pl-hit" cx="517.6" cy="253.8" r="12"/><circle class="pl-dot" cx="517.6" cy="253.8" r="4.5"/><text class="pl-t" x="509.6" y="270.8" text-anchor="end">Historic downtown</text></g><g class="pl" tabindex="0" data-v="Naval Academy" data-k="The U.S. Naval Academy, the city's largest institution"><circle class="pl-hit" cx="571.6" cy="230.8" r="12"/><circle class="pl-dot" cx="571.6" cy="230.8" r="4.5"/><text class="pl-t" x="571.6" y="218.8" text-anchor="middle">Naval Academy</text></g><g class="pl" tabindex="0" data-v="St. John's College" data-k="Liberal-arts college beside the historic core"><circle class="pl-hit" cx="505.8" cy="220.6" r="12"/><circle class="pl-dot" cx="505.8" cy="220.6" r="4.5"/><text class="pl-t" x="495.8" y="224.6" text-anchor="end">St. John's College</text></g><g class="pl" tabindex="0" data-v="Eastport" data-k="Residential and maritime neighbourhood across Spa Creek"><circle class="pl-hit" cx="603.9" cy="320.0" r="12"/><circle class="pl-dot" cx="603.9" cy="320.0" r="4.5"/><text class="pl-t" x="611.9" y="334.0" text-anchor="start">Eastport</text></g><g class="pl" tabindex="0" data-v="Medical center" data-k="Regional hospital and medical offices on Jennifer Road"><circle class="pl-hit" cx="226.5" cy="147.6" r="12"/><circle class="pl-dot" cx="226.5" cy="147.6" r="4.5"/><text class="pl-t" x="226.5" y="135.6" text-anchor="middle">Medical center</text></g><g class="pl" tabindex="0" data-v="Annapolis Mall / Parole" data-k="Regional retail and employment node west of the city line"><circle class="pl-hit" cx="139.3" cy="157.0" r="12"/><circle class="pl-dot" cx="139.3" cy="157.0" r="4.5"/><text class="pl-t" x="133.3" y="145.0" text-anchor="middle">Annapolis Mall / Parole</text></g><g class="pl" tabindex="0" data-v="Harbour Center" data-k="Shopping centre on Solomons Island Road"><circle class="pl-hit" cx="156.5" cy="283.5" r="12"/><circle class="pl-dot" cx="156.5" cy="283.5" r="4.5"/><text class="pl-t" x="148.5" y="299.5" text-anchor="middle">Harbour Center</text></g>
38077<g class="pl" tabindex="0" data-v="Forest Drive corridor" data-k="Arterial lined with shopping centres and residential subdivisions"><circle class="pl-hit" cx="332.7" cy="347.4" r="12"/><circle class="pl-dot" cx="332.7" cy="347.4" r="4.5"/><text class="pl-t" x="340.7" y="363.4" text-anchor="start">Forest Drive corridor</text></g><g class="pl" tabindex="0" data-v="West Street" data-k="Commercial corridor linking downtown to Parole"><circle class="pl-hit" cx="266.1" cy="231.1" r="12"/><circle class="pl-dot" cx="266.1" cy="231.1" r="4.5"/><text class="pl-t" x="274.1" y="247.1" text-anchor="start">West Street</text></g><g class="pl" tabindex="0" data-v="NavyâMarine Corps Stadium" data-k="Event venue on Rowe Boulevard"><circle class="pl-hit" cx="408.6" cy="200.4" r="12"/><circle class="pl-dot" cx="408.6" cy="200.4" r="4.5"/><text class="pl-t" x="400.6" y="192.4" text-anchor="end">NavyâMarine Corps Stadium</text></g><g class="scale"><line x1="528.8" y1="583" x2="656" y2="583"/><text x="592.4" y="577" text-anchor="middle">1 mile</text></g></svg> 38078 <figcaption><b>Figure 1 · Land use and destinations</b>Commercial land, institutions and parks; unshaded land is predominantly residential. Go! Timeâs zone extends west past the city line to Parole. Hover a place for detail, or a legend key to isolate one land use.</figcaption> 38079</figure> 38080 38081<p>That shape matters for transit. Trips begin on residential streets, end at a handful of scattered destinations, and spill into evenings and weekends, when hospital shifts, retail jobs and errands carry on after the weekday commute has ended. A fixed route serves a corridor well. It has a harder time serving a pattern like this at every hour.</p> 38082</section> 38083 38084<section class="sec"> 38085<span class="tick"></span> 38086<h2>Five years of on-demand pilots in Maryland</h2> 38087<p>For most of the last half-century, public transit in Maryland meant fixed routes, supplemented by dial-a-ride and ADA paratransit for riders who could not use them. On-demand service for the general public arrived as a series of county pilots. Montgomery Countyâs Ride On Flex zones won a national county innovation award in 2020, and Prince Georgeâs County launched its Link pilot around Fort Washington the same year.<sup class="fn"><a href="#r3">3</a></sup><sup class="fn"><a href="#r4">4</a></sup> The stateâs own microtransit pilot near BWI was postponed by the pandemic.<sup class="fn"><a href="#r5">5</a></sup></p> 38088<p>The pace has picked up since. Howard County opened a microtransit service along the Route 1 corridor in March 2025 with support from a state transit innovation grant,<sup class="fn"><a href="#r6">6</a></sup> and the Maryland Transit Administrationâs regional bus plan identifies four zones around Baltimore for on-demand service.<sup class="fn"><a href="#r7">7</a></sup> National coverage has followed the same arc, from <em>The Washington Post</em> asking in 2018 whether microtransit might help agencies that were losing riders, to <em>Bloomberg CityLab</em> making the case in 2024 for leaving room to innovate.<sup class="fn"><a href="#r8">8</a></sup><sup class="fn"><a href="#r9">9</a></sup> The question agencies now ask is where on-demand service fits, and how to run it well.</p> 38089<p>Annapolis took up the first half of that question in its 2019 Transit Development Plan, which recommended replacing the Orange and Purple routes with an on-demand zone. Go! Time launched in July 2024. After a four-week parallel run, the City retired both routes.<sup class="fn"><a href="#r10">10</a></sup><sup class="fn"><a href="#r11">11</a></sup></p> 38090<blockquote><p>âAnnapolis is a compact city, and we can offer more efficient service to customersâ¦â</p><cite>City of Annapolis Transportation Director, at the launch of Go! Time<sup class="fn"><a href="#r10">10</a></sup></cite></blockquote> 38091</section> 38092 38093<section class="sec"> 38094<!-- When microtransit fits a city (removed from the published text) 38095<span class="tick"></span> 38096<h2>When microtransit fits a city</h2> 38097<p>Transit planners describe the choice as a trade between two goals, ridership and coverage. A fixed route is the most efficient way to move many people along a dense corridor, because one vehicle on a timetable serves everyone waiting along the line. Where demand is thin, or scattered in space and time, the same bus runs with empty seats and each trip becomes expensive. Demand-responsive service exchanges a fixed path for a fixed area, so vehicle-hours follow requests instead of the timetable. Federal technical-assistance guidance recommends it for âless dense and less walkable communitiesâor to any location at less busy times of day.â<sup class="fn"><a href="#r12">12</a></sup></p> 38098<p>In practice the fit comes down to a few measurable conditions: moderate or low demand density, trip ends spread across a zone of a few square miles, hours in which a fixed route cannot justify a useful frequency, and a fixed-route spine that riders can still reach for longer trips. Annapolis meets all four. It is small enough for a single zone, its destinations are dispersed, much of its demand falls in the evening and on Sunday, and three citywide routes still carry the busiest corri
38098dors.</p> 38099<p>We judged the pilot on three questions, which also organise the rest of this post (Figure 2).</p> 38100--> 38101 38102<figure class="diagram"> 38103 <svg class="diag" viewBox="0 0 680 318" role="img" aria-label="Three pillars of a lasting microtransit service: coverage, convenience, cost."><polygon class="ped" points="40,78 340,14 640,78"/><rect class="ent" x="30" y="78" width="620" height="14" rx="2"/><text class="dg-t" x="340" y="64" text-anchor="middle">A microtransit service that lasts</text><rect class="ent" x="30" y="252" width="620" height="12" rx="2"/><a href="#coverage" class="pil" aria-label="Coverage: jump to section"><rect class="col-cap" x="82" y="96" width="96" height="10" rx="2"/><rect class="col-sh" x="92" y="106" width="76" height="140"/><line class="flute" x1="104.7" y1="110" x2="104.7" y2="242"/><line class="flute" x1="117.4" y1="110" x2="117.4" y2="242"/><line class="flute" x1="130.1" y1="110" x2="130.1" y2="242"/><line class="flute" x1="142.8" y1="110" x2="142.8" y2="242"/><line class="flute" x1="155.5" y1="110" x2="155.5" y2="242"/><rect class="col-cap" x="82" y="244" width="96" height="8" rx="2"/><rect class="lbl-bg" x="68" y="150" width="124" height="30" rx="4"/><text class="dg-h" x="130" y="171" text-anchor="middle">Coverage</text><text class="dg-s" x="130" y="288" text-anchor="middle">Where and when</text><text class="dg-s" x="130" y="304" text-anchor="middle">a ride is available</text></a><a href="#convenience" class="pil" aria-label="Convenience: jump to section"><rect class="col-cap" x="292" y="96" width="96" height="10" rx="2"/><rect class="col-sh" x="302" y="106" width="76" height="140"/><line class="flute" x1="314.7" y1="110" x2="314.7" y2="242"/><line class="flute" x1="327.4" y1="110" x2="327.4" y2="242"/><line class="flute" x1="340.1" y1="110" x2="340.1" y2="242"/><line class="flute" x1="352.8" y1="110" x2="352.8" y2="242"/><line class="flute" x1="365.5" y1="110" x2="365.5" y2="242"/><rect class="col-cap" x="292" y="244" width="96" height="8" rx="2"/><rect class="lbl-bg" x="278" y="150" width="124" height="30" rx="4"/><text class="dg-h" x="340" y="171" text-anchor="middle">Convenience</text><text class="dg-s" x="340" y="288" text-anchor="middle">How reliably and how</text><text class="dg-s" x="340" y="304" text-anchor="middle">soon the ride arrives</text></a><a href="#cost" class="pil" aria-label="Cost: jump to section"><rect class="col-cap" x="502" y="96" width="96" height="10" rx="2"/><rect class="col-sh" x="512" y="106" width="76" height="140"/><line class="flute" x1="524.7" y1="110" x2="524.7" y2="242"/><line class="flute" x1="537.4" y1="110" x2="537.4" y2="242"/><line class="flute" x1="550.1" y1="110" x2="550.1" y2="242"/><line class="flute" x1="562.8" y1="110" x2="562.8" y2="242"/><line class="flute" x1="575.5" y1="110" x2="575.5" y2="242"/><rect class="col-cap" x="502" y="244" width="96" height="8" rx="2"/><rect class="lbl-bg" x="488" y="150" width="124" height="30" rx="4"/><text class="dg-h" x="550" y="171" text-anchor="middle">Cost</text><text class="dg-s" x="550" y="288" text-anchor="middle">What each trip costs</text><text class="dg-s" x="550" y="304" text-anchor="middle">the City to provide</text></a></svg> 38104 <figcaption><b>Figure 2 · What we measured</b>Coverage, convenience and cost. Select a pillar to jump to its section.</figcaption> 38105</figure> 38106</section> 38107 38108<section class="sec" id="coverage"> 38109<span class="tick"></span> 38110<h2>Coverage: more of the city, more of the week</h2> 38111<p>Before the pilot, the five fixed routes covered about 4.2 square miles by that rule. With Orange and Purple replaced by Go! Time, the network covers about 5.0. <strong>The change gained close to a square mile of walkable access and gave up effectively none</strong>, because virtual stops sit where riders actually board, and are not spaced along a single line (Figure 3).</p> 38112 38113<figure class="mapfig" id="walkfig"> 38114 <div class="mapbar"> 38115 <div class="grp" role="group" aria-label="View"> 38116 <span class="glab">View</span> 38117 <button class="chip" type="button" data-preset="before">Before the pilot</button> 38118 <button class="chip" type="button" data-preset="pilot">During the pilot</button> 38119 <button class="chip" type="button" data-preset="diff">What changed</button> 38120 </div> 38121 <div class="grp" role="group" aria-label="Layers">
38122 <span class="glab">Layers</span> 38123 <button class="chip" type="button" data-layer="before"><span class="sq" style="--c:#9DB8CC"></span>Before</button> 38124 <button class="chip" type="button" data-layer="pilot"><span class="sq" style="--c:#F2BE6A"></span>Pilot</button> 38125 <button class="chip" type="button" data-layer="gained"><span class="sq" style="--c:#1E6F63"></span>Gained</button> 38126 <button class="chip" type="button" data-layer="lost"><span class="sq" style="--c:#C2570F"></span>Lost</button> 38127 </div> 38128 <div class="grp" role="group" aria-label="Fixed routes"> 38129 <span class="glab">Routes</span> 38130 <button class="chip" type="button" data-route="Red"><span class="sw" style="--c:#C8102E"></span>Red</button> 38131 <button class="chip" type="button" data-route="Green"><span class="sw" style="--c:#2E8B3E"></span>Green</button> 38132 <button class="chip" type="button" data-route="Brown"><span class="sw" style="--c:#8B5A2B"></span>Brown</button> 38133 <button class="chip" type="button" data-route="Orange"><span class="sw" style="--c:#E07B00"></span>Orange</button> 38134 <button class="chip" type="button" data-route="Purple"><span class="sw" style="--c:#6A3FA0"></span>Purple</button> 38135 </div> 38136 </div> 38137 <p class="mapstat" id="walkstat" aria-live="polite"></p> 38138 <svg class="map" id="walkmap" viewBox="0 0 680 601" role="img" aria-label="Ten-minute walkable access to transit, before and during the pilot"><rect class="m-land" x="0" y="0" width="680" height="601"/><path class="m-water" d="M9.9,500.1 L11.6,506.6 L13.9,510.2 L13.1,511.5 L5.8,515.4 L0.0,514.3 L0.0,512.4 L2.1,510.8 L7.4,509.5 L4.4,504.3 L6.0,499.3 L4.6,497.1 L0.0,498.1 L0.0,444.4 L1.4,441.5 L0.8,440.9 L0.0,441.7 L0.0,433.9 L1.9,436.7 L4.0,436.5 L4.8,435.0 L6.6,434.4 L9.1,435.3 L7.1,442.4 L5.3,442.6 L3.6,441.3 L3.4,442.9 L17.9,449.0 L19.7,449.0 L22.5,447.1 L26.9,442.8 L31.2,441.7 L34.4,442.5 L41.1,447.0 L44.4,448.1 L56.2,443.5 L62.0,446.0 L67.1,451.2 L68.0,451.3 L69.3,448.8 L68.6,447.4 L59.2,443.1 L56.9,440.7 L59.7,437.7 L63.7,436.7 L65.2,438.1 L69.6,437.0 L71.3,433.4 L70.6,431.6 L65.3,428.4 L62.2,427.7 L60.7,425.3 L61.2,423.6 L68.3,415.8 L62.2,411.2 L66.0,406.3 L65.5,398.5 L58.8,392.5 L58.8,390.1 L60.2,388.4 L59.8,382.7 L58.0,380.8 L53.2,366.5 L54.9,363.5 L55.2,357.6 L56.7,360.5 L57.0,365.5 L60.7,373.4 L64.3,375.8 L63.4,380.8 L67.0,383.3 L66.1,392.0 L71.5,393.6 L71.1,400.7 L82.6,404.7 L82.4,406.4 L81.1,407.0 L76.3,407.2 L74.3,410.8 L75.8,416.2 L81.2,418.0 L75.8,422.4 L77.7,424.4 L79.0,428.5 L77.4,430.8 L84.7,435.3 L85.5,438.2 L84.6,441.4 L79.8,444.7 L82.6,453.6 L82.1,455.7 L84.2,463.4 L88.2,468.6 L87.8,471.7 L91.0,475.5 L89.2,477.6 L91.5,480.0 L98.0,475.3 L104.1,472.8 L124.0,473.6 L128.6,477.4 L134.8,490.6 L136.5,491.7 L138.9,491.3 L150.4,484.1 L154.8,483.1 L160.6,482.8 L171.6,486.7 L176.5,485.1 L177.1,484.4 L170.5,476.1 L169.0,470.8 L171.4,466.7 L172.6,461.4 L175.7,458.7 L178.0,454.7 L177.7,449.3 L179.8,447.0 L173.8,445.9 L167.8,440.1 L160.4,442.0 L160.1,440.0 L152.4,437.7 L151.9,435.3 L153.0,433.9 L156.3,434.4 L163.2,432.9 L167.9,429.7 L168.4,427.2 L164.2,424.8 L163.6,422.9 L164.6,420.5 L165.7,420.3 L173.6,423.3 L175.7,430.9 L178.5,430.7 L179.2,429.5 L177.9,426.3 L178.4,423.5 L179.9,421.5 L184.4,419.2 L183.8,416.6 L186.4,409.6 L186.7,403.9 L186.8,396.5 L185.3,390.1 L187.4,388.9 L187.4,385.5 L189.7,383.5 L189.7,382.2 L177.5,366.3 L176.4,364.0 L176.5,361.2 L177.5,361.0 L185.5,368.5 L190.6,374.0 L191.0,375.6 L195.9,375.4 L190.5,365.4 L189.2,359.1 L191.5,353.4 L191.2,338.2 L195.8,331.7 L195.7,328.1 L197.1,324.3 L199.4,326.4 L200.1,332.4 L199.8,334.3 L195.6,339.6 L195.3,353.2 L196.1,354.8 L206.9,350.0 L209.7,347.4 L210.6,344.9 L211.9,349.1 L208.7,353.7 L200.1,357.8 L196.6,362.9 L197.0,365.5 L200.8,369.6 L205.0,371.8 L201.0,378.4 L199.3,386.2 L197.7,388.4 L199.1,391.1 L198.4,396.8 L199.5,399.8 L196.2,402.5 L194.9,404.9 L200.2,409.2 L200.1,411.6 L195.3,414.3 L193.4,416.8 L194.9,420.5 L198.2,423.5 L188.9,429.5 L192.3,435.6 L192.5,442.3 L191.3,448.4 L193.6,452.2 L187.9,457.0 L190.4,458.7 L191.5,461.2 L189.9,466.6 L191.4,470.5 L190.3,472.9 L191.9,476.7 L193.6,477.8 L192.6,478.5 L194.4,483.1 L201.0,486.0 L205.2,486.3 L208.4,488.8 L215.0,483.8 L215.2,482.8 L210.9,481.9 L208.4,478.9 L202.8,475.6 L205.4,469.6 L209.7,466.1 L212.8,461.7 L216.7,461.3 L216.6,465.0 L218.4,468.1 L221.7,468.9 L230.0,466.6 L226.9,462.7 L227.5,459.8 L229.4,458.8 L229.1,451.5 L233.2,449.2 L233.7,443.6 L235.5,439.0 L244.5,431.7 L242.5,426.8 L235.4,416.4 L236.6,411.2 L237.9,411.2 L246.6,423.0 L250.8,429.3 L252.1,434.0 L255.8,435.1 L257.9,430.2 L263.2,423.7 L260.6,416.8 L262.3,413.0 L261.2,409.3 L262.0,405.2 L260.4,403.2 L261.7,401.7 L262.9,401.5 L265.2,404.2 L266.4,418.1 L269.6,423.5 L269.3,427.1 L273.4,425.5 L277.3,427.3 L282.3,434.3 L285.4,436.6 L288.6,437.4 L292.3,436.8 L292.5,440.1 L293.6,441.3 L297.4,441.0 L301.8,442.2 L308.4,440.7 L321.0,443.2 L323.8,449.5 L316.9,446.1 L307.0,445.4 L302.0,449.0 L298.2,446.6 L292.5,447.1 L288.0,449.5 L286.7,452.7 L284.2,451.2 L282.6,446.7 L281.8,439.0 L276.2,436.1 L265.2,436.8 L259.0,450.6 L245.7,452.6 L245.0,457.7 L241.2,459.3 L243.8,464.1 L247.8,466.7 L247.2,471.9 L240.5,471.6 L235.5,477.1 L236.8,479.3 L236.2,480.3 L231.9,478.3 L230.7,476.6 L230.5,473.4 L229.7,473.4 L230.3,477.1 L232.2,480.3 L233.6,492.3 L232.6,500.5 L231.7,500.5 L231.1,504.6 L230.1,504.9 L228.4,512.3 L227.9,518.9 L228.3,532.8 L230.1,533.1 L229.5,537.6 L230.6,540.9 L232.3,541.8 L235.5,538.5 L252.3,535.6 L252.4,534.1 L251.6,533.9 L248.5,535.0 L247.9,532.6 L251.2,530.4 L252.4,530.6 L252.9,532.6 L254.2,532.3 L256.7,531.5 L258.4,529.4 L260.8,521.6 L258.7,522.1 L257.6,520.9 L257.6,517.8 L259.0,515.7 L258.1,514.4 L259.4,511.8 L258.8,511.4 L261.0,508.9 L262.9,504.0 L273.6,505.5 L273.8,506.9 L265.4,508.9 L264.1,510.6 L266.1,515.4 L264.9,517.8 L266.4,520.8 L270.5,524.7 L271.6,529.2 L270.6,531.1 L268.8,530.6 L264.4,538.2 L269.5,541.3 L269.1,545.3 L266.0,544.7 L265.9,540.5 L263.2,540.0 L265.1,544.5 L273.1,577.5 L283.7,582.3 L287.1,580.4 L289.7,576.7 L291.5,576.1 L288.2,573.3 L285.3,573.4 L281.6,570.9 L280.4,568.1 L280.3,558.5 L286.4,549.8 L309.2,533.2 L308.4,532.5 L304.5,535.7 L301.2,532.3 L301.2,530.6 L302.0,529.3 L304.2,529.7 L307.1,528.1 L308.6,524.7 L307.3,523.7 L307.3,521.4 L309.2,517.0 L314.6,512.9 L313.4,509.6 L314.8,502.8 L323.6,504.8 L324.0,507.0 L318.2,509.1 L320.3,513.4 L319.5,515.4 L316.5,516.6 L315.1,514.4 L314.5,514.8 L318.1,518.8 L326.9,523.4 L336.4,516.9 L341.9,519.8 L343.4,519.7 L343.9,514.6 L345.9,511.4 L356.7,507.2 L358.6,505.3 L359.5,505.1 L360.1,507.4 L358.3,509.7 L352.1,511.8 L350.4,514.7 L351.4,519.3 L348.7,524.0 L345.5,526.4 L341.3,527.6 L334.9,527.3 L329.7,531.7 L321.7,533.6 L320.2,537.5 L322.2,543.7 L329.3,543.0 L331.5,545.5 L334.1,546.1 L334.4,548.0 L325.4,547.9 L320.3,550.9 L314.8,549.7 L312.7,551.4 L312.6,553.4 L316.2,560.1 L317.9,565.8 L325.0,564.2 L326.7,565.1 L327.4,567.0 L326.6,569.7 L317.9,571.3 L314.9,570.7 L314.5,572.2 L312.1,573.7 L309.5,577.4 L311.8,580.5 L324.6,586.6 L330.6,591.8 L335.0,600.9 L203.0,600.9 L201.5,594.2 L197.1,586.1 L190.8,578.7 L186.8,577.8 L181.4,574.5 L166.8,570.8 L162.8,568.8 L155.2,568.0 L153.7,570.4 L154.9,574.6 L154.0,586.8 L154.8,587.5 L155.0,585.5 L157.7,585.3 L162.0,587.8 L162.5,589.3 L156.8,589.8 L151.6,589.1 L149.5,586.2 L143.8,583.1 L138.0,583.1 L136.2,585.9 L140.4,591.3 L148.0,596.5 L149.6,595.6 L152.6,596.1 L153.1,599.6 L148.8,599.0 L148.1,600.9 L135.0,600.9 L134.2,597.8 L130.5,597.1 L128.5,597.6 L125.5,600.9 L114.7,600.9 L110.6,596.8 L103.9,599.9 L101.6,600.5 L101.2,599.3 L108.6,592.7 L113.5,592.3 L116.8,593.7 L118.1,591.4 L117.9,588.3 L120.1,584.9 L124.7,582.4 L126.8,572.6 L125.2,570.2 L125.9,568.6 L129.7,567.4 L135.4,567.9 L140.0,569.3 L140.8,571.9 L142.4,571.1 L148.1,560.9 L153.7,558.2 L154.6,556.7 L157.0,548.8 L156.5,547.8 L143.3,542.2 L133.9,541.8 L122.4,537.3 L121.0,538.5 L117.7,536.3 L117.9,532.9 L113.6,532.3 L104.2,533.2 L93.1,540.6 L91.2,544.0 L91.0,545.7 L96.5,556.3 L95.6,559.5 L89.8,560.4 L87.3,562.3 L86.0,564.8 L83.3,566.1 L77.1,565.2 L75.2,565.7 L74.6,571.4 L72.2,575.7 L68.1,575.5 L63.2,573.7 L59.7,574.8 L54.9,574.8 L53.5,576.2 L52.6,579.7 L49.2,582.0 L38.2,583.8 L42.5,577.7 L44.7,576.2 L45.2,572.0 L48.2,568.2 L51.5,567.6 L52.6,568.4 L58.9,566.2 L67.7,568.9 L67.6,559.2 L73.6,559.5 L76.8,558.6 L76.4,555.1 L77.9,552.9 L80.3,552.4 L82.2,554.3 L81.3,551.1 L82.5,540.8 L85.4,538.6 L86.0,536.7 L85.0,528.2 L78.6,518.6 L80.5,514.9 L79.0,513.1 L76.9,514.2 L65.6,512.1 L57.0,50
381385.8 L53.0,499.6 L46.3,496.0 L44.5,493.6 L44.5,491.6 L41.7,489.3 L35.9,489.2 L28.6,485.2 L29.1,484.5 L25.7,480.7 L27.1,477.2 L26.2,476.8 L23.6,477.7 L21.2,480.2 L11.5,493.9 L7.4,497.1 L7.7,500.2 L9.9,500.1ZM361.5,595.4 L363.2,591.0 L363.5,582.3 L366.2,580.4 L369.9,579.6 L372.2,577.1 L372.3,574.3 L374.7,573.1 L388.7,576.8 L394.7,583.7 L398.6,584.3 L400.8,586.6 L408.1,587.2 L413.0,584.7 L415.6,584.6 L412.1,589.8 L407.7,592.3 L392.0,589.6 L388.3,584.1 L376.6,580.2 L372.9,590.5 L373.0,596.3 L377.5,597.7 L380.6,600.9 L362.0,600.9 L361.5,595.4ZM75.4,237.8 L68.1,240.4 L66.8,239.5 L70.4,235.8 L73.1,235.7 L75.4,237.8ZM10.0,151.9 L10.5,154.2 L3.3,159.2 L2.5,155.2 L8.2,151.3 L10.0,151.9ZM70.8,152.6 L74.2,150.5 L76.1,151.6 L78.0,155.1 L69.9,155.3 L70.8,152.6ZM0.0,155.0 L2.7,159.4 L0.0,162.4 L0.0,155.0ZM159.9,274.3 L163.7,277.7 L161.5,279.7 L158.9,278.2 L159.9,274.3ZM219.9,170.6 L223.5,170.4 L223.4,169.5 L225.0,169.2 L228.5,170.7 L228.5,172.4 L224.7,178.5 L221.6,178.3 L220.8,177.4 L219.6,173.6 L218.4,173.4 L219.9,170.6ZM261.6,145.1 L267.9,143.5 L271.2,144.7 L276.0,144.3 L279.2,145.9 L279.3,147.3 L278.8,148.4 L273.7,148.3 L262.8,146.3 L261.6,145.1ZM188.9,138.8 L190.4,137.6 L192.5,138.2 L191.5,141.2 L184.4,140.8 L185.1,138.2 L188.9,138.8ZM216.3,141.0 L213.8,138.4 L215.7,136.8 L218.1,137.6 L217.8,139.6 L216.3,141.0ZM174.0,134.2 L175.4,134.5 L177.3,137.7 L176.5,140.2 L171.7,136.1 L174.0,134.2ZM308.4,71.9 L309.8,72.6 L309.1,74.1 L304.1,74.9 L305.8,72.4 L308.4,71.9ZM186.2,30.0 L182.3,29.3 L183.9,25.3 L185.0,25.7 L186.8,22.8 L186.6,24.7 L187.7,25.5 L186.2,30.0ZM359.5,23.1 L355.9,26.2 L354.2,25.4 L352.2,20.6 L349.2,16.6 L345.5,15.1 L342.6,15.1 L340.3,17.6 L338.5,22.9 L336.9,24.2 L330.9,23.1 L329.9,24.3 L326.9,40.8 L324.8,42.8 L323.4,41.8 L323.0,28.7 L320.4,24.9 L318.7,24.2 L310.9,26.2 L310.5,30.3 L309.5,31.5 L306.2,31.4 L304.0,38.5 L300.8,35.6 L298.2,35.1 L297.4,32.8 L294.2,33.3 L302.6,28.5 L303.6,19.6 L305.3,17.4 L312.2,19.0 L317.8,14.1 L322.5,13.1 L327.5,9.8 L332.6,11.5 L335.2,10.4 L336.9,9.0 L338.4,4.1 L342.0,0.0 L481.1,0.0 L485.7,7.9 L489.5,11.6 L493.7,13.9 L506.8,26.6 L508.6,29.3 L509.2,32.4 L511.0,28.8 L528.0,23.1 L532.3,18.5 L532.3,17.2 L529.4,18.3 L528.1,17.4 L532.0,11.7 L533.0,0.0 L538.7,0.0 L542.6,2.1 L540.4,4.6 L539.3,4.5 L538.0,6.8 L539.5,14.3 L541.4,16.2 L548.7,19.3 L553.5,25.6 L551.5,26.1 L548.3,24.8 L539.2,24.2 L536.7,23.0 L534.9,19.7 L535.3,16.9 L534.7,16.8 L534.4,21.6 L531.2,24.6 L533.8,24.7 L536.5,28.5 L546.7,53.7 L557.3,66.7 L560.5,76.2 L560.8,91.5 L561.9,93.7 L562.5,102.3 L559.7,111.3 L556.4,115.9 L557.7,117.8 L558.2,118.6 L564.8,114.7 L569.7,114.2 L583.2,117.3 L586.3,120.1 L587.7,123.1 L600.0,138.3 L602.5,149.9 L603.9,152.2 L613.3,154.4 L621.0,154.5 L626.9,157.4 L628.7,159.3 L630.3,165.4 L630.1,170.2 L628.1,173.4 L627.1,180.1 L628.4,185.8 L632.5,189.3 L645.8,209.7 L648.8,212.6 L653.9,205.3 L656.9,207.4 L652.3,214.2 L657.6,218.0 L660.9,213.0 L662.6,214.1 L659.3,219.1 L664.9,223.0 L670.6,216.0 L680.0,209.6 L680.0,497.8 L677.6,494.5 L675.3,493.5 L671.1,485.9 L660.1,471.6 L656.8,470.2 L651.4,458.7 L651.3,456.2 L640.4,422.5 L641.2,420.9 L637.1,422.0 L634.5,425.1 L634.5,443.2 L631.9,444.2 L625.8,444.3 L624.0,442.7 L623.6,430.2 L624.9,426.3 L633.7,419.4 L639.7,417.6 L637.7,417.1 L635.6,412.0 L635.1,406.9 L637.3,386.8 L634.8,378.0 L630.8,369.3 L633.9,356.5 L624.2,358.4 L624.0,359.6 L623.6,358.4 L622.0,358.9 L621.8,361.1 L619.7,363.0 L618.9,365.4 L615.1,367.7 L613.0,367.6 L607.2,364.0 L606.2,364.5 L606.0,372.0 L603.7,377.1 L600.0,380.8 L593.9,383.9 L595.7,391.6 L595.0,397.7 L599.9,398.2 L600.6,399.3 L599.1,401.4 L597.4,402.0 L594.8,401.1 L593.0,399.6 L593.3,398.2 L590.2,398.9 L586.9,403.0 L585.6,409.6 L586.1,411.6 L583.5,413.5 L578.5,412.6 L567.3,406.4 L567.2,426.5 L563.5,439.0 L566.4,440.9 L561.2,451.1 L559.0,453.9 L555.5,452.0 L545.6,454.7 L543.4,456.9 L535.4,457.7 L536.5,456.0 L535.3,453.1 L537.2,451.4 L540.8,450.3 L542.6,450.8 L545.7,448.4 L551.2,448.9 L553.8,446.0 L557.5,444.3 L554.8,439.7 L552.3,437.9 L548.0,439.7 L546.4,438.8 L541.5,439.7 L540.3,438.8 L541.1,432.4 L539.6,430.0 L539.6,427.7 L544.6,434.3 L551.7,431.4 L556.3,427.9 L556.6,424.9 L559.4,421.6 L557.5,416.2 L557.7,414.4 L559.5,412.9 L557.2,409.4 L556.8,402.9 L559.9,399.3 L566.4,396.7 L560.4,393.8 L551.7,397.0 L550.7,395.9 L551.1,393.9 L559.8,388.7 L570.2,392.2 L577.2,391.9 L576.3,384.7 L577.5,382.7 L583.7,378.4 L584.6,376.6 L584.1,374.9 L578.2,371.0 L574.9,370.1 L568.0,372.6 L566.5,370.0 L563.8,368.6 L557.7,367.5 L558.5,366.0 L562.8,364.3 L564.3,365.6 L568.9,362.3 L570.5,365.1 L573.8,365.6 L576.6,363.0 L582.6,360.2 L593.2,351.1 L592.1,350.1 L592.7,343.2 L594.7,341.4 L600.4,342.5 L601.4,343.5 L606.1,339.8 L611.5,345.1 L613.0,350.5 L617.1,348.9 L617.0,345.8 L618.7,344.3 L617.8,343.2 L619.2,342.0 L620.2,336.3 L624.3,330.9 L630.4,326.8 L633.2,321.7 L634.5,315.1 L632.9,311.5 L627.8,309.0 L625.8,308.7 L624.5,309.9 L617.1,305.7 L616.0,304.1 L617.5,303.0 L612.5,296.7 L608.4,299.7 L604.4,292.8 L603.4,293.6 L600.2,289.7 L599.6,290.1 L596.5,287.4 L599.9,284.9 L597.9,283.0 L595.2,283.4 L592.4,285.2 L591.5,284.1 L588.4,286.4 L588.9,287.7 L583.7,292.0 L585.8,297.1 L582.3,299.7 L579.3,295.7 L578.1,296.6 L581.5,301.4 L578.6,302.4 L579.0,305.0 L576.0,308.3 L576.6,309.3 L574.9,310.4 L575.7,311.7 L571.9,313.7 L569.7,313.5 L567.4,316.2 L566.7,315.4 L562.0,317.6 L547.7,313.7 L544.5,316.2 L541.4,3
3813817.1 L540.2,314.1 L534.5,316.6 L533.7,315.6 L530.0,317.1 L530.2,318.2 L528.3,319.4 L528.1,317.3 L526.8,317.1 L526.4,318.3 L524.7,316.7 L521.8,310.4 L520.1,310.0 L514.3,314.7 L512.9,316.9 L514.1,322.8 L510.3,324.8 L506.8,330.0 L506.5,333.2 L504.9,333.8 L503.5,331.4 L504.6,331.1 L504.7,326.9 L508.1,320.6 L504.8,310.5 L501.1,312.4 L498.6,311.2 L497.0,311.7 L492.9,320.5 L484.7,319.4 L478.2,321.8 L479.0,323.6 L478.3,327.6 L475.7,332.2 L478.7,337.1 L477.5,337.9 L471.6,331.2 L468.3,337.4 L475.1,345.0 L476.1,353.8 L475.6,356.1 L473.1,358.7 L471.2,347.1 L466.3,344.2 L465.1,342.5 L462.8,341.9 L458.6,335.9 L455.4,335.3 L446.2,336.3 L441.5,339.8 L441.4,344.1 L442.5,346.9 L438.6,347.4 L437.3,348.9 L435.6,354.9 L429.0,364.7 L422.9,364.3 L420.3,372.2 L419.9,369.7 L421.4,363.6 L423.0,361.9 L427.6,360.2 L428.0,358.6 L429.0,358.9 L430.1,355.8 L429.2,355.5 L430.1,352.7 L431.4,351.9 L433.2,345.4 L431.8,344.2 L432.3,342.7 L435.2,341.2 L436.1,336.3 L428.6,334.2 L423.3,329.6 L419.4,329.0 L415.9,326.6 L413.3,330.4 L409.4,332.5 L408.8,330.7 L410.8,330.1 L411.6,327.0 L407.5,326.2 L406.2,325.5 L406.5,324.3 L411.4,323.8 L419.6,320.5 L426.9,325.8 L430.5,326.9 L431.7,326.0 L435.8,329.9 L438.1,330.3 L441.0,328.4 L447.8,326.7 L453.6,327.1 L457.6,324.4 L465.9,325.5 L467.8,311.5 L459.3,305.9 L458.9,303.2 L459.9,301.5 L465.9,305.4 L473.1,306.0 L476.1,309.7 L479.7,308.9 L484.2,310.4 L487.6,303.7 L490.1,302.3 L496.2,302.7 L497.3,301.4 L500.3,295.0 L497.2,292.7 L495.9,294.3 L494.3,293.1 L496.9,292.5 L501.8,285.0 L503.9,286.8 L503.2,289.0 L505.3,291.0 L511.0,293.8 L512.4,293.7 L519.4,300.5 L523.2,300.5 L528.0,298.3 L537.3,303.3 L540.8,297.1 L551.1,297.
381380 L556.2,299.7 L558.1,298.5 L555.5,293.4 L555.0,288.5 L557.8,286.5 L555.8,283.8 L557.6,283.4 L557.9,281.7 L549.9,269.8 L546.1,268.1 L545.4,266.1 L546.7,264.4 L560.1,277.6 L559.4,278.6 L563.4,275.2 L560.7,272.8 L562.5,270.9 L564.5,270.9 L566.7,272.7 L572.1,266.4 L574.8,268.8 L591.4,265.2 L614.8,238.1 L615.3,238.6 L620.1,233.1 L608.7,223.2 L606.9,223.0 L605.6,224.6 L606.3,225.2 L601.6,230.6 L592.7,223.0 L587.7,218.7 L594.1,210.7 L564.9,185.4 L558.9,192.4 L549.7,194.5 L545.0,199.9 L537.8,197.0 L534.8,200.5 L532.8,201.3 L516.2,194.0 L511.4,194.6 L501.8,201.5 L500.0,201.7 L492.5,209.9 L486.8,212.2 L484.0,222.0 L481.6,223.2 L478.9,220.8 L473.7,221.6 L469.9,225.2 L468.3,228.5 L465.0,229.4 L461.5,236.1 L453.4,239.0 L451.8,238.4 L445.2,240.1 L444.6,239.1 L446.4,235.8 L452.1,233.0 L456.6,232.8 L462.0,221.7 L466.7,220.0 L469.2,216.4 L463.5,214.2 L461.1,214.3 L457.0,211.5 L455.8,211.8 L454.0,209.4 L459.2,208.6 L468.4,210.0 L473.1,209.6 L478.3,212.6 L479.2,208.3 L483.4,205.0 L482.2,201.0 L476.0,200.8 L473.6,197.9 L470.3,198.7 L463.8,194.6 L464.9,191.8 L466.5,191.4 L469.7,193.8 L474.9,191.8 L478.0,194.2 L485.3,195.2 L489.3,194.2 L490.1,194.9 L491.6,193.2 L491.1,192.2 L499.7,184.7 L501.8,185.4 L503.7,190.1 L505.2,189.9 L506.1,187.9 L517.1,183.2 L519.3,183.4 L523.2,186.6 L526.1,187.6 L532.4,184.3 L537.7,187.7 L547.7,184.3 L533.7,143.7 L522.6,147.7 L521.2,143.4 L521.6,141.4 L519.6,140.0 L515.4,142.7 L509.1,143.1 L498.6,137.3 L496.5,135.0 L495.0,135.3 L496.1,137.4 L495.7,140.1 L494.7,140.8 L490.9,139.5 L485.1,140.2 L482.3,138.4 L480.0,139.8 L477.9,139.5 L478.2,134.9 L479.7,134.0 L486.7,134.5 L489.3,133.8 L491.8,135.0 L496.1,133.4 L501.5,122.7 L502.3,122.7 L503.1,115.9 L500.8,115.0 L500.8,113.1 L503.1,111.7 L510.4,100.7 L509.9,98.5 L505.6,98.0 L505.2,99.1 L498.4,100.1 L490.1,95.4 L488.7,93.1 L489.5,90.5 L484.5,91.4 L476.5,90.0 L475.5,89.5 L475.6,88.1 L469.7,86.4 L468.3,83.9 L464.2,80.8 L455.1,77.3 L451.8,78.0 L450.8,79.1 L452.9,79.5 L450.2,81.6 L448.5,89.0 L440.6,92.7 L432.0,100.2 L429.8,109.1 L431.0,111.7 L428.6,116.6 L429.2,118.4 L432.5,118.2 L433.1,122.1 L423.0,129.9 L422.7,136.3 L421.0,137.2 L418.4,136.9 L408.6,133.4 L406.8,131.9 L405.0,135.4 L404.5,143.2 L402.0,145.2 L394.7,158.1 L392.2,158.1 L390.6,153.6 L384.2,155.6 L380.4,153.6 L378.8,153.9 L375.6,157.1 L375.7,164.6 L373.9,168.2 L371.6,167.0 L371.2,165.7 L369.3,157.3 L370.1,154.7 L365.9,156.5 L363.6,159.5 L361.1,159.3 L359.3,157.7 L360.5,154.5 L359.9,151.9 L356.6,150.0 L351.5,151.3 L345.3,155.1 L340.4,156.4 L338.2,159.7 L330.9,162.8 L327.1,168.2 L325.3,167.7 L324.8,160.9 L320.5,162.2 L315.0,162.0 L311.4,159.4 L304.5,158.1 L301.5,158.7 L298.0,157.4 L291.9,159.6 L289.5,159.4 L288.8,158.5 L291.5,154.9 L299.2,152.2 L310.9,153.7 L312.9,151.3 L318.6,155.3 L330.1,154.7 L335.2,150.7 L336.6,146.8 L341.9,147.1 L345.4,143.9 L345.8,141.1 L343.5,138.4 L340.9,132.6 L341.4,131.9 L345.2,132.2 L350.4,137.5 L355.4,139.1 L363.7,143.8 L372.8,142.3 L374.0,141.3 L374.7,136.4 L379.0,134.0 L380.8,135.0 L383.3,139.1 L388.7,141.2 L392.3,138.0 L394.5,133.7 L394.7,129.8 L396.2,126.9 L401.2,126.7 L407.3,123.6 L409.6,123.6 L412.2,118.8 L412.4,115.0 L415.1,111.7 L416.4,112.0 L416.7,113.6 L417.5,113.2 L415.2,107.6 L409.4,101.1 L409.9,98.5 L411.8,98.4 L413.2,93.7 L418.1,91.7 L418.4,94.3 L419.4,93.8 L415.6,81.3 L413.6,80.3 L413.2,78.6 L416.9,77.6 L419.9,78.0 L421.3,67.0 L423.0,66.3 L425.6,68.7 L424.5,69.1 L424.7,70.3 L426.9,70.0 L429.0,61.1 L430.7,59.0 L433.3,58.4 L437.5,60.1 L438.5,58.8 L440.5,58.4 L439.6,57.1 L428.4,48.5 L421.5,41.9 L415.0,39.2 L405.6,33.3 L405.5,34.8 L409.1,36.1 L408.7,41.4 L403.8,43.7 L403.8,47.4 L401.0,49.5 L394.7,51.2 L391.3,56.8 L387.0,59.3 L386.0,57.4 L388.7,54.8 L389.3,51.4 L389.3,48.0 L388.1,45.8 L388.8,43.9 L389.4,43.4 L393.3,45.4 L394.9,44.7 L398.9,36.9 L401.1,34.2 L403.9,34.1 L406.9,27.3 L413.0,20.7 L409.2,19.4 L405.8,20.1 L402.7,19.1 L396.1,13.3 L389.2,12.6 L378.2,7.7 L375.9,8.5 L361.6,5.2 L357.2,5.5 L355.7,7.7 L359.5,23.1ZM211.1,1.8 L212.4,7.1 L211.4,8.0 L205.4,10.5 L199.8,11.3 L197.2,14.0 L191.0,15.9 L190.3,17.7 L190.3,15.5 L187.5,17.6 L189.5,14.6 L198.9,7.5 L198.8,5.5 L196.5,1.8 L200.6,3.8 L202.7,3.3 L205.6,0.0 L211.9,0.0 L211.1,1.8ZM679.5,556.7 L676.8,555.4 L675.7,556.2 L678.6,562.5 L677.6,564.3 L676.1,564.3 L675.0,562.1 L671.8,560.7 L668.1,553.1 L669.0,549.1 L670.1,548.1 L669.2,544.6 L667.6,543.9 L660.2,546.3 L657.8,548.9 L652.1,551.5 L651.4,549.5 L656.0,546.4 L654.9,541.9 L651.6,541.5 L650.0,542.5 L644.5,540.7 L640.4,543.7 L639.4,543.1 L640.4,540.0 L637.5,537.5 L636.3,538.9 L634.3,539.0 L627.8,536.7
38138L614.6,545.6 L612.1,549.0 L607.0,551.3 L606.6,546.8 L610.1,546.8 L611.5,540.2 L614.2,540.1 L626.4,531.1 L624.1,523.6 L624.8,522.3 L627.0,523.8 L633.1,533.0 L635.7,528.8 L639.7,528.0 L641.1,528.5 L641.0,530.7 L646.4,533.8 L648.3,532.7 L653.0,533.7 L655.0,530.0 L661.0,533.2 L666.9,534.0 L671.6,526.9 L671.5,524.3 L672.8,523.6 L675.1,527.4 L680.0,530.7 L679.5,556.7ZM652.7,467.7 L654.3,468.7 L653.9,471.2 L658.4,473.9 L660.7,478.4 L661.2,486.7 L660.2,487.5 L655.2,485.4 L653.5,482.4 L654.0,477.2 L652.0,474.0 L651.6,470.8 L652.7,467.7ZM635.2,457.5 L638.5,457.6 L642.0,451.9 L645.5,457.3 L648.2,458.7 L645.9,463.0 L642.6,463.6 L641.7,465.2 L642.2,467.9 L640.7,468.6 L632.3,466.1 L627.8,462.9 L628.2,461.2 L635.2,457.5ZM625.7,144.6 L628.3,148.5 L627.0,152.2 L625.4,151.9 L624.7,153.8 L622.0,152.2 L621.1,145.6 L623.7,143.9 L625.7,144.6ZM634.6,144.1 L643.1,146.5 L667.1,135.1 L668.5,136.4 L658.1,145.1 L653.5,146.5 L652.1,148.7 L653.5,152.3 L651.2,153.5 L649.2,150.7 L646.3,150.0 L643.6,150.7 L635.0,157.4 L634.3,159.5 L635.0,161.1 L631.5,161.2 L630.3,156.8 L627.9,153.7 L630.7,148.3 L634.6,147.4 L634.6,144.1Z"/><path class="m-street" d="M694.3,701.8 L692.7,705.0M694.3,701.8 L695.9,702.2 L696.4,701.2 L695.4,691.3M694.3,701.8 L665.1,685.2 L664.7,682.1M692.7,705.0 L694.3,701.8M695.4,691.3 L685.9,685.9M695.4,691.3 L696.4,701.2 L695.9,702.2 L694.3,701.8M695.4,691.3 L697.0,682.7 L690.1,678.8M664.7,682.1 L661.3,680.3M664.7,682.1 L665.1,685.2 L694.3,701.8M664.7,682.1 L668.3,676.2M530.2,348.3 L524.2,350.8M530.2,348.3 L526.8,340.1M530.2,348.3 L532.3,353.8M524.2,350.8 L516.7,353.8M524.2,350.8 L530.2,348.3M526.8,340.1 L530.2,348.3M526.8,340.1 L513.2,345.9M526.8,340.1 L523.4,331.8M532.3,353.8 L530.2,348.3M516.2,354.2 L514.3,349.7M515.8,354.3 L511.2,356.3M516.7,353.8 L524.2,350.8M516.3,354.5 L518.2,359.0M514.3,349.7 L516.2,354.2M514.3,349.7 L512.8,346.0M511.2,356.3 L515.8,354.3M511.2,356.3 L512.6,361.3M512.6,361.3 L511.2,356.3M505.2,358.7 L507.5,357.8M507.5,357.8 L505.2,358.7M101.0,658.7 L95.3,662.9M101.0,658.7 L110.0,671.2M101.0,658.7 L97.6,653.8M95.3,662.9 L101.0,658.7M95.3,662.9 L92.1,662.9 L87.1,669.6M95.3,662.9 L105.2,674.6M110.0,671.2 L121.8,673.9M110.0,671.2 L118.5,682.9M110.0,671.2 L101.0,658.7M110.0,671.2 L114.7,667.9M110.0,671.2 L105.2,674.6M97.6,653.8 L101.0,658.7M97.6,653.8 L100.2,651.2M97.6,653.8 L95.2,655.8M329.1,278.0 L331.9,272.4M329.1,278.0 L333.8,279.9 L332.4,283.5M329.1,278.0 L321.7,293.3M331.9,272.4 L327.5,270.2M331.9,272.4 L336.0,274.1M331.9,272.4 L329.1,278.0M332.4,283.5 L333.8,279.9 L329.1,278.0M321.7,293.3 L317.5,293.0M321.7,293.3 L329.1,278.0M321.7,293.3 L326.9,294.0 L330.7,296.8M1.7,356.6 L-9.2,346.8M1.7,356.6 L-0.7,358.3 L-6.1,356.9 L-11.1,357.6M1.7,356.6 L8.5,364.2 L12.2,371.9M-9.2,346.8 L1.7,356.6M-9.2,346.8 L-11.9,344.3M2.5,356.0 L-8.5,346.0M2.5,356.0 L9.2,363.5 L13.0,371.5M2.5,356.0 L8.1,352.6M-11.1,357.6 L-6.1,356.9 L-0.7,358.3 L1.7,356.6M-11.1,357.6 L-12.3,357.8 L-12.2,359.0 L-10.9,358.7 L-11.1,357.6M-11.1,357.6 L-10.9,358.7 L-12.2,359.0 L-12.3,357.8 L-11.1,357.6M12.2,371.9 L14.7,382.4M12.2,371.9 L8.5,364.2 L1.7,356.6M576.7,42.4 L571.4,33.6M576.7,42.4 L566.2,47.6 L551.4,49.4 L550.8,48.5M577.0,42.9 L581.2,51.8 L583.1,59.6M571.4,33.6 L576.7,42.4M571.4,33.6 L566.1,35.2 L554.0,36.2M571.4,33.6 L555.0,7.1M550.8,48.5 L551.4,49.4 L566.2,47.6 L576.7,42.4M583.1,59.6 L577.4,60.1M583.1,59.6 L584.0,69.4 L582.9,76.4M583.1,59.6 L581.2,51.8 L577.0,42.9M577.4,60.1 L567.7,73.2M577.4,60.1 L583.1,59.6M577.4,60.1 L577.4,75.8M577.4,60.1 L562.2,61.0 L564.6,66.3M582.9,76.4 L577.4,75.8M582.9,76.4 L575.2,104.1M582.9,76.4 L584.0,69.4 L583.1,59.6M528.1,169.7 L525.1,163.9 L524.8,157.3M528.1,169.7 L530.6,175.3 L531.7,183.8M524.8,157.3 L523.8,167.0M524.8,157.3 L526.0,155.6 L525.2,152.4 L520.4,146.8 L509.8,151.0 L507.9,150.2M524.8,157.3 L525.1,163.9 L528.1,169.7M531.7,183.8 L530.6,175.3 L528.1,169.7M531.7,183.8 L530.7,185.6 L526.4,187.4 L518.6,182.7 L511.5,184.9 L508.8,184.0M516.5,176.6 L510.3,173.6 L498.3,163.0 L494.2,163.8M516.5,176.6 L515.5,180.6 L508.8,184.0M129.8,405.0 L137.8,412.3M129.8,405.0 L132.4,398.4M129.4,405.7 L118.9,419.1M137.8,412.3 L129.8,405.0M132.4,398.4 L133.7,394.0M132.4,398.4 L129.8,405.0M118.9,419.1 L124.9,424.3M118.9,419.1 L116.5,421.4M118.9,419.1 L129.4,405.7M124.9,424.3 L118.9,419.1M116.5,421.4 L118.9,419.1M116.5,421.4 L111.7,425.9M303.3,352.4 L310.6,344.1M301.8,351.1 L300.0,353.3M304.2,353.1 L311.4,344.8M304.2,353.1 L305.8,354.5 L302.4,358.7M310.6,344.1 L303.3,352.4M310.6,344.1 L306.7,340.6M310.6,344.1 L313.8,340.2M300.0,353.3 L298.3,355.3M300.0,353.3 L301.8,351.1M300.0,353.3 L295.1,348.7M298.3,355.3 L300.0,353.3M295.1,348.7 L292.9,347.0M295.1,348.7 L300.0,353.3M295.1,348.7 L275.7,369.6M295.1,348.7 L304.7,338.8M299.1,355.9 L301.8,358.3M302.4,358.7 L305.8,354.5 L304.2,353.1M301.8,358.3 L299.1,355.9M101.1,604.0 L106.3,603.5M101.1,604.0 L102.6,607.6 L106.3,603.5M106.3,603.5 L101.1,604.0M106.3,603.5 L102.6,607.6 L101.1,604.0M106.3,603.5 L110.9,598.3M100.9,602.4 L100.7,594.4M110.9,598.3 L106.3,603.5M349.3,82.7 L338.0,70.8M349.3,82.7 L352.4,85.8M338.0,70.8 L332.2,76.4M338.0,70.8 L335.8,68.7M338.0,70.8 L342.2,66.8M338.0,70.8 L349.3,82.7M352.4,85.8 L349.3,82.7M-166.3,332.7 L-161.5,329.6M-166.3,332.7 L-159.6,338.3 L-160.4,343.9M-166.3,332.7 L-173.2,338.5M-161.5,329.6 L-166.3,332.7M-161.5,329.6 L-158.7,327.8M-160.4,343.9 L-159.6,338.3 L-166.3,332.7M-160.4,343.9 L-164.7,343.2M-160.4,343.9 L-154.7,345.9 L-142.2,343.1M-173.2,338.5 L-179.5,342.8M-173.2,338.5 L-166.3,332.7M-164.7,343.2 L-168.3,346.6 L-168.3,354.5 L-166.0,359.8M-164.7,343.2 L-160.4,343.9M-142.2,343.1 L-143.9,346.5M-142.2,343.1 L-137.6,339.5 L-136.4,336.9 L-135.9,333.8 L-137.2,330.6M-142.2,343.1 L-154.7,345.9 L-160.4,343.9M501.1,156.8 L505.6,154.3 L520.7,165.7 L521.6,168.9M501.1,156.8 L513.6,167.5 L511.2,170.4M500.4,156.0 L497.7,157.7M500.4,156.0 L507.9,150.2M521.6,168.9 L520.7,165.7 L505.6,154.3 L501.1,156.8M521.6,168.9 L516.6,175.1M511.2,170.4 L513.6,167.5 L501.1,156.8M511.2,170.4 L516.6,175.1M511.2,170.4 L497.6,160.7 L492.7,162.3M-197.6,-99.5 L-195.5,-93.5 L-195.5,-86.5 L-200.9,-71.4M59.4,599.7 L65.6,598.6M59.4,599.7 L53.5,600.9M65.6,598.6 L70.1,597.8M65.6,598.6 L59.4,599.7M65.6,598.6 L64.2,588.8 L68.9,584.4M53.5,600.9 L53.5,588.6M53.5,600.9 L59.4,599.7M53.5,600.9 L48.2,602.0M285.7,311.5 L289.1,312.8M289.1,312.8 L291.5,312.2M289.1,312.8 L285.7,311.5M631.7,415.4 L634.2,415.9M630.5,415.0 L626.4,413.9M634.2,415.9 L631.7,415.4M584.3,424.4 L580.7,437.8M584.3,424.4 L586.0,419.1 L588.3,417.3M580.7,437.8 L579.9,440.7M580.7,437.8 L584.3,424.4M588.3,417.3 L586.0,419.1 L584.3,424.4M588.3,417.3 L607.7,409.9M686.4,168.9 L685.1,173.9M686.4,168.9 L688.7,164.0M685.1,173.9 L686.4,168.9M685.1,173.9 L680.9,179.3M693.2,184.0 L691.9,182.7 L688.4,186.1M693.2,184.0 L697.9,189.2M688.7,164.0 L680.3,156.7M688.7,164.0 L692.4,159.5M688.7,164.0 L693.4,167.8M688.7,164.0 L686.4,168.9M-70.5,222.6 L-64.8,224.5M-70.5,222.6 L-73.1,230.1M-70.5,222.6 L-68.9,214.3M-64.8,224.5 L-
3813854.6,227.7M-64.8,224.5 L-70.5,222.6M-64.8,224.5 L-62.4,220.0M-73.1,230.1 L-70.5,222.6M-73.1,230.1 L-77.6,242.4M-73.1,230.1 L-61.4,234.0 L-60.6,235.5M-68.9,214.3 L-70.5,222.6M358.4,623.1 L362.5,622.2M358.4,623.1 L357.0,611.4M362.5,622.2 L358.4,623.1M358.7,624.0 L361.0,631.8 L360.3,635.1 L352.6,640.5 L351.4,645.4M357.0,611.4 L358.4,623.1M357.0,611.4 L356.0,606.4M529.3,215.0 L526.8,217.8M535.1,219.9 L540.0,224.3 L542.4,224.8M530.2,214.0 L534.9,208.7M526.8,217.8 L511.3,204.6M526.8,217.8 L529.3,215.0M535.8,219.0 L537.5,217.2M542.4,224.8 L540.0,224.3 L535.1,219.9M88.7,292.4 L88.4,312.6 L90.7,316.8 L96.5,319.3M96.5,319.3 L94.6,324.7 L89.3,329.5M96.5,319.3 L90.7,316.8 L88.4,312.6 L88.7,292.4M96.5,319.3 L104.8,319.3M565.9,251.5 L562.9,248.8M562.9,248.8 L565.9,251.5M554.0,36.2 L566.1,35.2 L571.4,33.6M383.6,27.5 L391.5,30.5M383.6,27.5 L382.1,31.4M391.5,30.5 L383.6,27.5M391.5,30.5 L394.6,23.2 L399.1,25.3 L399.6,28.5M391.5,30.5 L393.1,32.6 L388.9,37.3M382.1,31.4 L383.6,27.5M382.1,31.4 L378.2,42.7M382.1,31.4 L388.9,37.3M399.6,28.5 L399.1,25.3 L394.6,23.2 L391.5,30.5M388.9,37.3 L391.2,39.9M388.9,37.3 L393.1,32.6 L391.5,30.5M388.9,37.3 L382.1,31.4M222.3,196.2 L221.3,198.5M222.3,196.2 L230.4,199.3M221.3,198.5 L222.3,196.2M221.3,198.5 L220.0,201.7M230.4,199.3 L222.3,196.2M351.5,578.4 L357.6,572.9M351.7,579.7 L352.3,583.3M357.6,572.9 L351.5,578.4M357.6,572.9 L364.4,566.7 L369.4,559.0M669.2,188.6 L661.3,204.3M669.2,188.6 L684.3,196.7M669.2,188.6 L671.5,181.1 L670.2,172.8M661.3,204.3 L669.2,188.6M661.3,204.3 L661.3,206.8M684.3,196.7 L688.8,200.3M684.3,196.7 L669.2,188.6M670.2,172.8 L658.2,189.7 L655.9,191.0 L652.6,189.9M670.2,172.8 L680.9,179.3M670.2,172.8 L671.5,181.1 L669.2,188.6M670.2,172.8 L665.8,158.6M718.8,53.5 L723.3,51.9M718.8,53.5 L719.5,56.1M723.3,51.9 L718.8,53.5M718.6,52.7 L717.3,48.8M718.6,52.7 L713.8,52.6 L714.9,56.8M719.5,56.1 L718.8,53.5M719.5,56.1 L714.9,56.8M199.7,40.4 L192.9,37.2 L188.3,37.2 L187.9,38.3M199.7,40.4 L205.3,17.5M199.7,40.4 L211.9,42.0 L216.9,44.4M187.9,38.3 L188.3,37.2 L192.9,37.2 L199.7,40.4M205.3,17.5 L199.7,40.4M216.9,44.4 L218.7,39.9M216.9,44.4 L211.9,42.0 L199.7,40.4M216.9,44.4 L221.2,46.6 L226.1,51.9M593.3,210.6 L565.1,186.1 L559.3,192.7M559.3,192.7 L565.1,186.1 L593.3,210.6M559.3,192.7 L555.0,193.6M-148.3,231.7 L-152.7,235.7 L-157.9,235.9M-148.3,231.7 L-152.1,229.7 L-160.6,228.8M-148.3,231.7 L-139.2,239.3M-157.9,235.9 L-152.7,235.7 L-148.3,231.7M-160.6,228.8 L-162.9,236.1 L-162.7,243.1M-160.6,228.8 L-156.0,215.3M-160.6,228.8 L-152.1,229.7 L-148.3,231.7M-160.6,228.8 L-166.3,225.7M-139.2,239.3 L-141.8,241.6 L-150.2,242.0M-139.2,239.3 L-148.3,231.7M-139.2,239.3 L-136.4,241.6 L-135.5,245.0M-139.2,239.3 L-133.3,236.1 L-125.4,235.8M23.8,694.3 L30.5,690.4M23.8,694.3 L18.7,699.1M24.2,694.9 L24.9,699.1M23.4,693.5 L20.7,688.9M30.5,690.4 L23.8,694.3M30.5,690.4 L34.8,687.9M18.7,699.1 L23.8,694.3M24.9,699.1 L24.2,694.9M24.9,699.1 L19.9,699.9M24.9,699.1 L28.0,698.6M19.9,699.9 L24.9,699.1M28.0,698.6 L24.9,699.1M363.8,514.0 L366.3,521.4 L366.8,528.1M363.8,514.0 L360.3,500.8M366.8,528.1 L356.9,523.2M366.8,528.1 L367.1,532.3M366.8,528.1 L366.3,521.4 L363.8,514.0M360.3,500.8 L363.8,514.0M360.3,500.8 L360.2,488.3 L358.1,473.8M356.9,523.2 L366.8,528.1M367.1,532.3 L366.8,528.1M688.4,186.1 L691.5,189.1M688.4,186.1 L683.8,181.6M688.4,186.1 L691.9,182.7 L693.2,184.0M697.9,189.2 L693.2,184.0M688.8,200.3 L684.3,196.7M690.3,202.1 L691.6,214.4 L693.4,216.9M690.3,202.1 L689.3,205.8 L687.7,207.0M694.0,191.5 L691.5,189.1M696.3,193.5 L697.2,195.6 L698.4,194.3 L697.6,193.2M-92.9,391.6 L-91.1,388.0M-92.9,391.6 L-96.9,393.5 L-101.1,392.6M-91.1,388.0 L-91.3,377.2M-91.1,388.0 L-92.9,391.6M-91.1,388.0 L-86.3,389.3 L-85.7,391.0 L-87.2,393.8M-101.1,392.6 L-96.9,393.5 L-92.9,391.6M-101.1,392.6 L-107.1,389.4M-101.1,392.6 L-103.1,396.5 L-107.0,395.3 L-110.1,392.7 L-107.1,389.4M-91.3,377.2 L-90.1,372.8M-91.3,377.2 L-91.1,388.0M-87.2,393.8 L-85.7,391.0 L-86.3,389.3 L-91.1,388.0M-90.1,372.8 L-91.3,377.2M-90.1,372.8 L-90.2,369.8M-90.2,369.8 L-90.1,372.8M-90.8,368.5 L-94.6,365.1 L-100.9,366.4M-143.9,346.5 L-143.7,349.3M-143.9,346.5 L-142.2,343.1M-137.2,330.6 L-135.9,333.8 L-136.4,336.9 L-137.6,339.5 L-142.2,343.1M-137.2,330.6 L-145.2,319.9M-137.2,330.6 L-131.3,330.1 L-126.2,331.7 L-115.8,338.7 L-106.9,342.1M-130.1,365.4 L-126.7,369.0M-130.1,365.4 L-142.2,352.4M-126.7,369.0 L-120.4,375.9M-126.7,369.0 L-130.1,365.4M-142.2,352.4 L-130.1,365.4M-142.2,352.4 L-143.7,349.3M-142.2,352.4 L-148.3,361.2M-116.2,380.4 L-120.4,375.9M-116.2,380.4 L-107.1,389.4M-116.2,380.4 L-100.9,366.4M-120.4,375.9 L-116.2,380.4M-120.4,375.9 L-126.7,369.0M-107.1,389.4 L-101.1,392.6M-107.1,389.4 L-110.1,392.7 L-107.0,395.3 L-103.1,396.5 L-101.1,392.6M-107.1,389.4 L-116.2,380.4M-100.9,366.4 L-116.2,380.4M-100.9,366.4 L-94.6,365.1 L-90.8,368.5M-22.6,174.7 L-18.6,176.6 L-13.6,177.0M-22.6,174.7 L-33.1,165.5 L-39.6,161.5 L-62.2,157.7M-13.6,177.0 L-2.1,174.7M-13.6,177.0 L-18.6,176.6 L-22.6,174.7M-62.2,157.7 L-39.6,161.5 L-33.1,165.5 L-22.6,174.7M-62.2,157.7 L-69.6,151.6M371.5,266.1 L368.9,265.4M371.5,266.1 L374.9,267.8M371.6,265.6 L372.4,263.1M368.9,265.4 L371.5,266.1M374.9,267.8 L374.0,270.7M374.9,267.8 L371.5,266.1M375.9,252.8 L376.8,247.0M375.9,252.8 L372.4,263.1M376.8,247.0 L377.6,242.7M376.8,247.0 L375.9,252.8M372.4,263.1 L375.9,252.8M372.4,263.1 L371.6,265.6M376.2,252.9 L383.8,254.7M377.6,242.7 L376.8,247.0M376.4,246.9 L368.7,245.7M377.2,247.1 L384.9,248.3M377.1,242.6 L369.3,241.3M378.0,242.7 L385.6,243.9M378.1,240.5 L369.6,239.0M379.0,240.5 L386.9,241.9M378.6,240.1 L384.3,215.6M384.4,215.0 L391.8,220.1M391.8,220.1 L384.4,215.0M391.8,220.1 L394.7,222.1M391.8,220.1 L387.0,241.5M384.3,215.6 L378.6,240.1M435.3,322.9 L432.7,321.7M435.3,322.9 L440.7,324.5 L447.1,323.7M434.6,321.1 L431.8,313.8M434.6,321.1 L444.7,316.9M432.7,321.7 L435.3,322.9M432.7,321.7 L425.9,316.8M447.1,323.7 L444.7,316.9M447.1,323.7 L452.0,321.8M447.1,323.7 L440.7,324.5 L435.3,322.9M431.8,313.8 L430.8,311.5M431.8,313.8 L434.6,321.1M431.8,313.8 L442.0,309.6M444.7,316.9 L434.6,321.1M444.7,316.9 L442.0,309.6M444.7,316.9 L447.1,323.7M444.7,316.9 L449.3,314.9M430.8,311.5 L429.4,3
3813808.1M430.8,311.5 L431.8,313.8M442.0,309.6 L439.6,303.1M442.0,309.6 L444.7,316.9M442.0,309.6 L446.3,308.2M442.0,309.6 L431.8,313.8M429.4,308.1 L430.8,311.5M428.7,308.0 L423.2,314.2M429.5,307.3 L439.6,303.1M428.8,306.9 L426.6,304.2M425.2,302.2 L423.3,299.0M425.2,302.2 L426.6,304.2M425.2,302.2 L431.8,297.3 L437.2,296.2M423.3,299.0 L425.2,302.2M423.3,299.0 L421.5,295.2M426.6,304.2 L425.2,302.2M426.6,304.2 L428.8,306.9M437.2,296.2 L439.6,303.1M437.2,296.2 L431.8,297.3 L425.2,302.2M421.2,294.4 L419.1,290.5 L416.2,291.1M421.7,294.2 L425.9,292.6M421.5,295.2 L423.3,299.0M416.2,291.1 L414.3,288.8M416.2,291.1 L419.1,290.5 L421.2,294.4M82.9,677.7 L88.2,673.0M82.9,677.7 L84.0,681.7M82.9,677.7 L78.8,661.3M88.2,673.0 L82.9,677.7M88.2,673.0 L94.7,680.3M88.2,673.0 L87.1,669.6M84.0,681.7 L93.9,684.4M84.0,681.7 L77.4,680.1M84.0,681.7 L82.5,687.4M84.0,681.7 L82.9,677.7M78.8,661.3 L82.9,677.7M78.8,661.3 L74.6,646.1M78.8,661.3 L84.1,658.9M78.8,661.3 L73.7,664.7M642.1,551.9 L649.8,545.8M642.1,551.9 L637.9,548.6M642.1,551.9 L644.9,556.1 L642.7,563.5M649.8,545.8 L642.1,551.9M637.9,548.6 L630.6,574.0M637.9,548.6 L642.1,551.9M637.9,548.6 L631.6,545.4M642.7,563.5 L646.7,564.8M642.7,563.5 L636.6,578.6M642.7,563.5 L644.9,556.1 L642.1,551.9M646.7,564.8 L642.7,563.5M636.6,578.6 L634.4,584.6M636.6,578.6 L630.6,574.0M636.6,578.6 L642.7,563.5M634.4,584.6 L636.6,578.6M634.4,584.6 L640.1,587.9 L647.5,594.4M634.4,584.6 L626.9,582.3M630.6,574.0 L637.9,548.6M630.6,574.0 L623.7,567.7M630.6,574.0 L636.6,578.6M647.5,594.4 L644.7,597.5M647.5,594.4 L649.7,591.4M647.5,594.4 L655.3,601.6 L662.4,604.3M647.5,594.4 L640.1,587.9 L634.4,584.6M626.9,582.3 L621.6,597.0M626.9,582.3 L634.4,584.6M626.9,582.3 L615.6,578.3M721.6,86.5 L727.3,80.6M721.6,86.5 L714.6,81.3M723.3,87.5 L721.4,89.9 L718.0,91.5M723.3,87.5 L740.5,87.7M727.3,80.6 L737.8,80.3M727.3,80.6 L725.5,75.7M727.3,80.6 L721.6,86.5M714.6,81.3 L718.2,77.8M714.6,81.3 L721.6,86.5M714.6,81.3 L711.7,79.5 L706.0,81.8M737.8,80.3 L727.3,80.6M737.8,80.3 L738.4,76.9M737.8,80.3 L740.5,87.7M725.5,75.7 L727.3,80.6M738.4,76.9 L734.6,72.8M738.4,76.9 L737.8,80.3M738.4,76.9 L745.9,67.1M740.5,87.7 L737.8,80.3M740.5,87.7 L723.3,87.5M575.4,542.8 L569.9,549.0M575.4,542.8 L585.4,551.7M575.4,542.8 L560.1,529.0M569.9,549.0 L566.2,553.2M569.9,549.0 L575.4,542.8M569.9,549.0 L574.8,553.8 L591.0,556.9 L585.4,551.7M569.9,549.0 L555.1,535.5M585.4,551.7 L575.4,542.8M585.4,551.7 L590.7,545.5M585.4,551.7 L591.0,556.9 L574.8,553.8 L569.9,549.0M560.1,529.0 L575.4,542.8M560.1,529.0 L555.1,535.5M560.1,529.0 L565.3,522.7M566.2,553.2 L569.9,549.0M555.1,535.5 L560.1,529.0M555.1,535.5 L569.9,549.0M555.1,535.5 L548.2,541.2M418.6,536.3 L420.5,533.7M420.5,533.7 L418.6,536.3M445.5,270.2 L440.7,257.8M440.7,257.8 L445.5,270.2M4.3,-74.3 L-2.5,-69.2M-2.5,-69.2 L-10.1,-64.3M-2.5,-69.2 L4.3,-74.3M637.9,440.6 L641.1,441.8 L642.4,441.1 L643.5,442.6 L642.8,443.4M637.9,440.6 L638.9,433.9 L637.0,430.8 L637.1,425.4M637.9,440.6 L638.1,445.9M642.8,443.4 L643.5,442.6 L642.4,441.1 L641.1,441.8 L637.9,440.6M642.8,443.4 L642.8,445.0 L638.1,445.9M642.8,443.4 L638.8,442.7M637.1,425.4 L637.0,430.8 L638.9,433.9 L637.9,440.6M638.1,445.9 L637.9,440.6M638.1,445.9 L642.8,445.0 L642.8,443.4M226.6,370.9 L214.6,359.5M226.6,370.9 L233.7,377.1 L234.8,386.8M226.6,370.9 L219.3,380.3 L210.7,378.5M214.6,359.5 L212.5,359.5 L207.9,362.3 L206.2,361.8 L203.1,364.2M214.6,359.5 L226.6,370.9M214.6,359.5 L209.9,358.7 L206.7,361.4M234.8,386.8 L233.7,377.1 L226.6,370.9M234.8,386.8 L227.7,392.9 L223.5,399.9 L217.6,416.7M234.8,386.8 L246.0,386.7 L253.2,384.3 L258.2,379.3M210.7,378.5 L207.4,378.1 L207.0,380.6 L208.2,380.8 L210.7,378.5M210.7,378.5 L208.2,380.8 L207.0,380.6 L207.4,378.1 L210.7,378.5M210.7,378.5 L219.3,380.3 L226.6,370.9M48.5,8.6 L50.6,17.9 L47.4,26.9M48.5,8.6 L36.1,10.6 L32.5,14.2 L31.4,17.3M48.5,8.6 L53.6,4.7M47.4,26.9 L50.6,17.9 L48.5,8.6M31.4,17.3 L27.8,28.5 L24.0,35.6M31.4,17.3 L32.5,14.2 L36.1,10.6 L48.5,8.6M53.6,4.7 L48.5,8.6M53.6,4.7 L56.8,8.4M53.6,4.7 L49.1,0.4M242.4,509.7 L253.3,515.1M242.4,509.7 L243.7,507.3M242.4,509.7 L240.2,509.4 L237.1,515.6 L236.3,515.3M253.3,515.1 L242.4,509.7M253.3,515.1 L260.7,500.2M253.3,515.1 L254.6,524.4 L253.7,525.2 L244.7,524.1M253.3,515.1 L244.7,524.1M243.7,507.3 L242.4,509.7M243.7,507.3 L250.1,495.3M236.3,515.3 L237.1,515.6 L240.2,509.4 L242.4,509.7M234.0,518.8 L235.6,522.4M235.6,522.4 L234.0,518.8M244.7,524.1 L243.3,526.4M244.7,524.1 L253.7,525.2 L254.6,524.4 L253.3,515.1M244.7,524.1 L253.3,515.1M243.3,526.4 L244.7,524.1M243.3,526.4 L240.8,530.6M243.3,526.4 L236.3,523.0M684.0,152.6 L692.4,159.5M684.0,152.6 L687.6,148.4M692.4,159.5 L684.0,152.6M692.4,159.5 L688.7,164.0M692.4,159.5 L695.8,155.4M683.1,153.7 L680.3,156.7M687.6,148.4 L689.5,140.9M687.6,148.4 L684.0,152.6M687.6,148.4 L695.8,155.4M687.6,148.4 L684.3,145.6M695.8,155.4 L692.4,159.5M695.8,155.4 L687.6,148.4M697.2,156.5 L703.8,162.1M523.4,222.3 L528.3,226.6M523.4,222.3 L529.2,215.9 L534.7,220.5M523.0,222.0 L518.5,218.1M523.5,220.8 L503.8,204.5 L507.5,201.4M528.3,226.6 L523.4,222.3M534.7,220.5 L529.4,226.6M534.7,220.5 L541.6,226.5M534.7,220.5 L529.2,215.9 L523.4,222.3M507.5,201.4 L511.3,204.6M507.5,201.4 L510.0,197.3 L512.8,195.3 L518.1,196.2M507.5,201.4 L503.8,204.5 L523.5,220.8M511.3,204.6 L518.1,196.2M511.3,204.6 L52
381386.8,217.8M511.3,204.6 L507.5,201.4M535.2,208.3 L541.0,213.3M534.9,208.7 L530.2,214.0M541.0,213.3 L535.2,208.3M535.0,208.1 L532.1,205.5M277.9,339.8 L273.3,344.7M279.3,341.1 L282.0,343.4M279.3,341.1 L280.9,339.3M273.3,344.7 L277.9,339.8M273.3,344.7 L267.3,351.5M273.3,344.7 L277.5,348.9M282.0,343.4 L279.3,341.1M282.0,343.4 L285.0,339.8M282.0,343.4 L277.5,348.9M280.9,339.3 L279.3,341.1M285.0,339.8 L287.5,342.4M285.0,339.8 L280.1,335.4M285.0,339.8 L282.0,343.4M277.5,348.9 L274.6,352.1M277.5,348.9 L282.0,343.4M277.5,348.9 L273.3,344.7M549.8,243.7 L552.5,240.7M552.5,240.7 L549.8,243.7M549.2,244.3 L536.4,233.6M549.2,244.3 L556.3,250.5 L547.3,251.3M440.3,294.2 L437.0,295.6M440.3,294.2 L446.4,291.6M440.3,294.2 L446.3,308.2M437.0,295.6 L434.9,289.6M437.0,295.6 L440.3,294.2M446.4,291.6 L440.3,294.2M446.4,291.6 L443.7,284.3M446.4,291.6 L452.5,305.6M446.3,308.2 L449.3,314.9M446.3,308.2 L452.5,305.6M446.3,308.2 L440.3,294.2M446.3,308.2 L442.0,309.6M452.0,321.8 L447.1,323.7M452.0,321.8 L458.2,319.3M452.0,321.8 L449.3,314.9M458.2,319.3 L452.0,321.8M458.2,319.3 L455.4,312.3M449.3,314.9 L446.3,308.2M449.3,314.9 L455.4,312.3M449.3,314.9 L444.7,316.9M449.3,314.9 L452.0,321.8M455.4,312.3 L449.3,314.9M455.4,312.3 L454.0,309.0M455.4,312.3 L458.2,319.3M455.4,312.3 L460.3,313.0 L461.9,316.7 L460.6,319.1M452.5,305.6 L446.3,308.2M452.5,305.6 L454.0,309.0M452.5,305.6 L446.4,291.6M-223.5,244.7 L-225.5,247.3M-223.5,244.7 L-226.1,240.5M-223.5,244.7 L-217.2,244.6M-225.5,247.3 L-222.8,248.8M-225.5,247.3 L-223.5,244.7M-226.1,240.5 L-223.5,244.7M-226.1,240.5 L-228.4,244.2M-217.2,244.6 L-215.9,238.2M-217.2,244.6 L-211.7,242.6M-217.2,244.6 L-216.6,248.9 L-213.1,253.8M-217.2,244.6 L-223.5,244.7M612.9,676.0 L617.6,673.3M612.9,676.0 L618.1,680.9 L620.0,687.4M612.9,676.0 L605.6,666.9M617.6,673.3 L628.4,666.8M617.6,673.3 L612.9,676.0M620.0,687.4 L621.8,689.1M620.0,687.4 L618.1,680.9 L612.9,676.0M605.6,666.9 L603.5,664.3M605.6,666.9 L597.5,673.2 L595.9,676.6M605.6,666.9 L612.9,676.0M628.4,666.8 L617.6,673.3M628.4,666.8 L631.4,665.8 L638.5,667.9M638.5,667.9 L642.4,665.5M638.5,667.9 L655.6,677.4M638.5,667.9 L631.4,665.8 L628.4,666.8M642.4,665.5 L638.5,667.9M642.4,665.5 L639.6,654.6M642.4,665.5 L648.9,659.8 L650.5,656.9M655.6,677.4 L661.3,680.3M655.6,677.4 L638.5,667.9M655.6,677.4 L663.2,661.3 L664.0,654.6M661.3,680.3 L664.7,682.1M661.3,680.3 L655.6,677.4M661.3,680.3 L665.1,672.7 L664.5,671.8M664.0,654.6 L659.3,650.1M664.0,654.6 L665.3,649.8M664.0,654.6 L663.2,661.3 L655.6,677.4M664.5,671.8 L665.1,672.7 L661.3,680.3M668.3,676.2 L671.6,668.8M668.3,676.2 L678.7,682.0M668.3,676.2 L664.7,682.1M461.5,296.6 L454.0,309.0M461.5,296.6 L465.1,290.6M461.5,296.6 L446.6,287.7M454.0,309.0 L461.5,296.6M454.0,309.0 L452.5,305.6M454.0,309.0 L455.4,312.3M465.1,290.6 L461.5,296.6M465.1,290.6 L468.7,284.5M465.1,290.6 L455.2,284.7M446.6,287.7 L461.5,296.6M652.6,189.9 L648.1,186.4M652.6,189.9 L648.1,199.0M652.6,189.9 L655.9,191.0 L658.2,189.7 L670.2,172.8M648.1,186.4 L652.6,189.9M648.1,186.4 L650.3,183.4 L641.6,177.0 L637.6,176.6 L637.5,181.2 L648.1,186.4M648.1,186.4 L637.5,181.2 L637.6,176.6 L641.6,177.0 L650.3,183.4 L648.1,186.4M648.1,199.0 L653.3,204.0M648.1,199.0 L652.6,189.9M653.3,204.0 L648.5,211.7M653.3,204.0 L657.4,206.4 L659.4,205.7M653.3,204.0 L648.1,199.0M648.5,211.7 L653.3,204.0M659.4,205.7 L657.4,206.4 L653.3,204.0M661.3,206.8 L667.1,210.8M661.3,206.8 L661.3,204.3M667.1,210.8 L661.3,206.8M667.1,210.8 L668.9,208.1 L673.6,205.5 L675.9,199.3 L680.3,201.3 L681.8,205.2 L681.1,207.3 L667.6,211.3M667.1,210.8 L661.7,218.8 L665.1,221.5 L670.3,214.6 L667.6,211.3M667.6,211.3 L670.3,214.6 L665.1,221.5 L661.7,218.8 L667.1,210.8M667.6,211.3 L681.1,207.3 L681.8,205.2 L680.3,201.3 L675.9,199.3 L673.6,205.5 L668.9,208.1 L667.1,210.8M-81.5,211.9 L-85.3,215.7 L-87.9,216.3 L-89.8,213.6 L-90.2,209.5M-81.5,211.9 L-78.1,214.0 L-73.9,214.0M-81.5,211.9 L-83.7,208.9M-90.2,209.5 L-90.5,206.8M-90.2,209.5 L-83.7,208.9M-90.2,209.5 L-89.8,213.6 L-87.9,216.3 L-85.3,215.7 L-81.5,211.9M-73.9,214.0 L-69.0,213.3M-73.9,214.0 L-74.8,208.2M-73.9,214.0 L-78.1,214.0 L-81.5,211.9M-83.7,208.9 L-90.2,209.5M-83.7,208.9 L-84.4,206.3M-83.7,208.9 L-81.5,211.9M-90.5,206.8 L-90.2,209.5M-97.1,158.1 L-96.1,162.6M-97.1,158.1 L-88.8,156.1 L-78.9,150.6 L-74.8,150.1 L-69.6,151.6M-97.1,158.1 L-101.2,159.1M-96.1,162.6 L-97.1,158.1M-69.6,151.6 L-62.2,157.7M-69.6,151.6 L-74.8,150.1 L-78.9,150.6 L-88.8,156.1 L-97.1,158.1M-101.2,159.1 L-97.1,158.1M485.2,285.2 L472.8,277.8M485.2,285.2 L481.1,292.1M485.2,285.2 L488.7,287.3M472.8,277.8 L485.2,285.2M472.8,277.8 L468.7,284.5M472.8,277.8 L462.7,271.8M472.8,277.8 L473.6,272.6M486.0,283.5 L488.7,278.7M486.0,283.5 L489.6,285.8M481.1,292.1 L485.2,285.2M481.1,292.1 L475.4,288.5M481.1,292.1 L477.4,298.4M481.1,292.1 L494.0,299.8M488.7,287.3 L492.1,290.8M488.7,287.3 L485.2,285.2M492.1,290.8 L488.7,287.3M489.6,285.8 L493.7,287.9 L496.0,284.1M489.6,285.8 L486.0,283.5M488.7,278.7 L486.0,283.5M488.7,278.7 L496.0,284.1M-90.4,-109.2 L-91.7,-116.3M-91.7,-116.3 L-90.4,-109.2M-91.7,-116.3 L-86.8,-116.2 L-80.8,-112.2M-80.8,-112.2 L-83.3,-104.7 L-80.8,-95.0 L-81.6,-90.4M-80.8,-112.2 L-75.0,-109.4 L-63.4,-109.1 L-58.9,-110.8 L-50.9,-116.7M-80.8,-112.2 L-86.8,-116.2 L-91.7,-116.3M540.4,286.9 L543.5,289.6M540.4,286.9 L548.3,278.6M539.0,285.8 L531.0,278.8M543.5,289.6 L552.4,296.7M543.5,289.6 L540.4,286.9M543.5,289.6 L546.1,286.4 L550.4,283.8M548.3,278.6 L540.4,286.9M384.4,399.7 L387.5,399.7M383.9,399.8 L384.4,395.7M383.9,399.8 L378.0,402.0M387.5,399.7 L384.4,399.7M387.5,399.7 L395.9,400.2M387.5,399.7 L388.0,392.9M230.6,25.4 L232.4,30.4M232.4,30.4 L230.6,25.4M233.0,31.1 L234.4,34.5M233.0,31.1 L234.1,23.4M234.4,34.5 L233.0,31.1M234.4,34.5 L235.9,39.4 L235.6,45.2M234.4,34.5 L240.7,29.3M234.1,23.4 L233.2,21.2M234.1,23.4 L233.0,31.1M234.1,23.4 L237.6,20.7 L235.
381381,17.9M505.3,616.0 L510.4,614.9M510.4,614.9 L505.3,616.0M515.5,609.5 L513.2,611.4M515.5,609.5 L513.8,605.9M515.5,609.5 L522.8,617.0 L523.4,620.1M513.2,611.4 L515.5,609.5M513.2,611.4 L511.9,613.4M513.8,605.9 L515.5,609.5M523.4,620.1 L507.8,628.1M523.4,620.1 L531.1,626.1M523.4,620.1 L522.8,617.0 L515.5,609.5M523.4,620.1 L523.4,627.6 L521.5,631.0M392.7,163.9 L408.1,177.4M392.7,163.9 L390.1,168.0M408.1,177.4 L392.7,163.9M408.1,177.4 L403.7,182.3M390.1,168.0 L391.2,171.6M390.1,168.0 L392.7,163.9M390.1,168.0 L387.0,161.3 L381.4,160.8M409.3,176.1 L413.2,172.0M403.7,182.3 L398.4,177.8M403.7,182.3 L397.1,189.5M403.7,182.3 L408.1,177.4M129.0,-98.6 L129.0,-101.5 L131.3,-104.2M129.0,-98.6 L118.5,-98.8M129.0,-98.6 L139.0,-100.6 L143.3,-103.1M131.3,-104.2 L126.3,-109.8M131.3,-104.2 L136.0,-108.8 L137.1,-111.6M131.3,-104.2 L129.0,-101.5 L129.0,-98.6M118.5,-98.8 L112.6,-97.5M118.5,-98.8 L129.0,-98.6M143.3,-103.1 L139.0,-100.6 L129.0,-98.6M143.3,-103.1 L150.2,-108.2 L158.9,-108.3M143.3,-103.1 L145.8,-99.7 L148.1,-88.7M126.3,-109.8 L131.3,-104.2M137.1,-111.6 L136.0,-108.8 L131.3,-104.2M458.5,320.0 L459.6,322.6M459.6,322.6 L458.5,320.0M460.6,319.1 L461.9,316.7 L460.3,313.0 L455.4,312.3M141.5,240.6 L139.0,242.3M141.5,240.6 L139.5,237.1M139.0,242.3 L141.5,240.6M139.0,242.3 L138.1,253.0M139.5,237.1 L141.5,240.6M139.5,237.1 L138.2,234.8M-193.1,128.2 L-191.1,150.2 L-187.6,149.0M-193.1,128.2 L-192.7,121.2 L-187.1,117.5 L-183.9,113.6 L-183.8,106.3M-193.1,128.2 L-198.7,129.1 L-202.7,131.3M-187.6,149.0 L-191.1,150.2 L-193.1,128.2M-183.8,106.3 L-183.9,113.6 L-187.1,117.5 L-192.7,121.2 L-193.1,128.2M-202.7,131.3 L-198.7,129.1 L-193.1,128.2M662.8,566.6 L662.4,563.5M662.8,566.6 L658.1,567.5M662.4,563.5 L662.8,566.6M658.1,567.5 L662.8,566.6M656.8,555.8 L654.5,557.0M656.8,555.8 L662.1,551.6M654.5,557.0 L656.8,555.8M662.1,551.6 L656.8,555.8M92.9,623.3 L97.3,640.1M92.9,623.3 L87.3,624.8M92.9,623.3 L98.3,622.0M97.3,640.1 L92.9,623.3M97.3,640.1 L102.7,638.6M97.3,640.1 L91.6,641.6M97.3,640.1 L100.2,651.2M87.3,624.8 L81.8,626.2M87.3,624.8 L92.9,623.3M87.3,624.8 L91.6,641.6M87.3,624.8 L85.4,617.5M98.3,622.0 L92.9,623.3M98.3,622.0 L100.0,627.8M98.3,622.0 L97.7,618.4M102.7,638.6 L97.3,640.1M102.7,638.6 L105.4,645.0M102.7,638.6 L100.0,627.8M91.6,641.6 L97.3,640.1M91.6,641.6 L85.9,643.1M91.6,641.6 L95.2,655.8M91.6,641.6 L87.3,624.8M100.2,651.2 L97.3,640.1M100.2,651.2 L97.6,653.8M493.8,607.7 L495.6,614.8M493.8,607.7 L502.5,605.5M493.8,607.7 L486.0,609.9M495.6,614.8 L493.8,607.7M502.5,605.5 L505.4,604.8M502.5,605.5 L493.8,607.7M502.5,605.5 L503.9,610.7M486.0,609.9 L484.1,603.2M486.0,609.9 L487.3,614.6M486.0,609.9 L493.8,607.7M500.0,632.4 L507.8,628.1M500.0,632.4 L495.9,616.0M500.0,632.4 L492.8,635.6M507.8,628.1 L523.4,620.1M507.8,628.1 L500.0,632.4M507.8,628.1 L506.6,621.3M495.9,616.0 L500.0,632.4M492.8,635.6 L492.5,642.3M492.8,635.6 L491.3,629.6M492.8,635.6 L500.0,632.4M492.8,635.6 L490.6,629.8M244.1,372.2 L245.8,370.4M244.1,372.2 L240.6,369.0M244.1,372.2 L240.3,377.2M245.8,370.4 L244.1,372.2M245.8,370.4 L248.0,368.1M240.6,369.0 L244.7,364.7M240.6,369.0 L244.1,372.2M240.6,369.0 L238.3,366.9M240.3,377.2 L244.1,372.2M240.3,377.2 L231.0,369.1 L235.0,363.8M240.3,377.2 L243.1,379.0M244.7,364.7 L242.7,362.7M244.7,364.7 L249.5,360.2M244.7,364.7 L240.6,369.0M238.3,366.9 L240.6,369.0M238.3,366.9 L235.0,363.8M235.0,363.8 L236.3,361.0M235.0,363.8 L238.3,366.9M235.0,363.8 L231.0,369.1 L240.3,377.2M236.3,361.0 L235.0,363.8M236.3,361.0 L237.8,357.9M691.2,743.4 L694.1,751.7M691.2,743.4 L699.3,740.9M691.2,743.4 L683.4,746.2M691.2,743.4 L687.4,736.9 L682.8,734.6M694.1,751.7 L697.0,759.9M694.1,751.7 L691.2,743.4M694.1,751.7 L702.5,748.9M699.3,740.9 L702.5,748.9M699.3,740.9 L696.7,733.5M699.3,740.9 L691.2,743.4M699.3,740.9 L706.1,738.5M683.4,746.2 L691.2,743.4M683.4,746.2 L675.3,749.1M683.4,746.2 L686.2,754.4M683.4,746.2 L681.0,739.5 L672.2,741.7M682.8,734.6 L680.5,733.8M682.8,734.6 L695.7,730.1M682.8,734.6 L687.4,736.9 L691.2,743.4M697.0,759.9 L699.7,767.6M697.0,759.9 L694.1,751.7M697.0,759.9 L705.1,757.0M697.0,759.9 L688.9,762.2M702.5,748.9 L705.1,757.0M702.5,748.9 L699.3,740.9M702.5,748.9 L709.5,746.4M702.5,748.9 L694.1,751.7M699.7,767.6 L697.0,759.9M699.7,767.6 L707.8,765.0M699.7,767.6 L691.8,770.1M705.1,757.0 L712.8,754.3M705.1,757.0 L697.0,759.9M705.1,757.0 L707.8,765.0M705.1,757.0 L702.5,748.9M688.9,762.2 L697.0,759.9M688.9,762.2 L680.6,765.1M688.9,762.2 L691.8,770.1M688.9,762.2 L686.2,754.4M707.8,765.0 L710.4,772.7M707.8,765.0 L705.1,757.0M707.8,765.0 L699.7,767.6M707.8,765.0 L716.1,762.3 L714.9,758.1M691.8,770.1 L699.7,767.6M691.8,770.1 L683.2,772.8M691.8,770.1 L688.9,762.2M356.8,162.6 L342.3,175.9M356.8,162.6 L353.5,158.1M356.8,162.6 L360.4,165.6 L360.9,167.2 L359.1,170.0M342.3,175.9 L335.9,170.2M342.3,175.9 L347.6,180.6M342.3,175.9 L356.8,162.6M353.5,158.1 L345.4,163.2M353.5,158.1 L356.8,162.6M353.5,158.1 L355.1,155.1M359.1,170.0 L360.9,167.2 L360.4,165.6 L356.8,162.6M359.1,170.0 L347.6,180.6M335.9,170.2 L342.3,175.9M335.9,170.2 L345.4,163.2M335.9,170.2 L333.7,180.4M347.6,180.6 L342.3,175.9M347.6,180.6 L353.4,186.1M347.6,180.6 L359.1,170.0M347.6,180.6 L337.2,192.4M674.5,767.3 L680.6,765.1M680.6,765.1 L688.9,762.2M680.6,765.1 L674.5,767.3M680.6,765.1 L683.2,772.8M680.6,765.1 L678.1,757.2M683.2,772.8 L691.8,770.1M683.2,772.8 L680.6,765.1M678.1,757.2 L686.2,754.4M678.1,757.2 L680.6,765.1M678.1,757.2 L675.3,749.1M678.1,757.2 L673.0,757.8M686.2,754.4 L688.9,762.2M686.2,754.4 L683.4,746.2M686.2,754.4 L690.0,753.0M686.2,754.4 L678.1,757.2M712.8,754.3 L705.1,757.0M594.4,122.0 L599.0,118.5M594.4,122.0 L591.4,118.4M594.4,122.0 L601.7,127.8 L607.1,139.9M599.0,118.5 L594.4,122.0M599.0,118.5 L604.6,121.9 L610.3,130.4M591.4,118.4 L594.4,122.0M607.1,139.9 L611.8,137.8M607.1,139.9 L607.1,146.6M607.1,139.9 L601.7,127.8 L594.4,122.0M599.1,117.9 L584.3,115.4 L580.1,110.2M600.1,118.0 L604.0,116.9 L613.0,109.4M580.1,110.2 L584.3,115.4 L599.1,117.9M580.1,110.2 L578.1,106.4M107.1,52.7 L106.7,58.7 L102.4,68.7 L106.0,78.0 L108.8,80.5 L112.6,81.4 L119.9,79.9 L128.3,80.6M107.1,52.7 L121.0,52.0M107.1,52.7 L98.2,50.1M128.3,80.6 L119.9,79.9 L112.6,81.4 L108.8,80.5 L106.0,78.0 L102.4,68.7 L106.7,58.7 L107.1,52.7M121.0,52.0 L107.1,52.7M98.2,50.1 L102.5,30.2M98.2,50.1 L107.1,52.7M98.2,50.1 L93.9,55.8 L89.7,59.1M-115.8,645.1 L-125.2,647.3M-115.8,645.1 L-115.1,641.9 L-113.0,639.7 L-105.3,639.4M-115.8,645.1 L-114.7,654.4 L-111.1,666.2M-125.2,647.3 L-132.1,648.8M-125.2,647.3 L-115.8,645.1M-125.2,647.3 L-129.1,634.1M-105.3,639.4 L-102.3,638.4M-105.3,639.4 L-113.0,639.7 L-115.1,641.9 L-115.8,645.1M-111.1,666.2 L-114.7,654.4 L-115.8,645.1M-111.1,666.2 L-115.5,674.9M-111.1,666.2 L-104.6,667.5 L-96.5,673.4M-132.1,648.8 L-125.2,647.3M-129.1,634.1 L-125.2,647.3M-129.1,634.1 L-125.2,625.4M476.8,265.4 L473.5,265.5M476.8,265.4 L476.7,273.0M476.8,265.4 L481.9,264.5M473.5,265.5 L473.5,269.2M473.5,265.5 L476.8,265.4M473.5,265.5 L473.2,262.5M476.7,273.0 L473.6,272.6M476.7,273.0 L476.8,265.4M476.7,273.0 L480.8,274.4M481.9,264.5 L481.5,259.4M481.9,264.5 L476.8,265.4M481.9,264.5 L481.2,273.4M473.6,272.6 L476.7,273.0M473.6,272.6 L473.5,269.2M473.6,272.6 L472.8,277.8M480.8,274.4 L483.4,275.8M480.8,274.4 L476.7,273.0M29.5,371.4 L34.6,371.8M29.5,371.4 L24.4,370.6M29.5,371.4 L30.4,361.0 L28.1,354.8 L31.9,347.5M34.6,371.8 L29.5,371.4M34.6,371.8 L33.9,376.9M34.6,371.8 L41.0,372.6 L46.7,375.7M34.6,371.8 L36.1,364.0 L40.4,362.8 L45.1,364.0 L47.2,365.7 L48.1,369.2 L46.7,375.7M24.4,370.6 L29.5,371.4M24.4,370.6 L24.9,365.6M24.4,370.6 L18.3,3
3813869.7M24.4,370.6 L25.6,378.0 L24.4,379.4 L21.4,379.5 L18.7,377.1 L18.3,369.7M31.9,347.5 L33.4,342.8 L36.7,343.8M31.9,347.5 L28.1,354.8 L30.4,361.0 L29.5,371.4M-19.6,702.1 L-19.1,696.9M-19.6,702.1 L-14.7,702.9M-20.9,702.0 L-25.4,701.3M-20.9,702.0 L-19.9,694.2M-19.8,703.0 L-16.1,703.6M-19.8,703.0 L-20.2,707.0M-19.1,696.9 L-18.3,689.2M-19.1,696.9 L-18.3,701.6 L-14.7,702.9M-19.1,696.9 L-19.6,702.1M-14.7,702.9 L-5.1,704.0M-14.7,702.9 L-18.3,701.6 L-19.1,696.9M-14.7,702.9 L-19.6,702.1M125.8,279.2 L125.0,273.9M125.8,279.2 L117.7,280.9M125.8,279.2 L127.8,286.8 L135.0,297.3M125.0,273.9 L124.2,268.1M125.0,273.9 L125.8,279.2M117.7,280.9 L125.8,279.2M117.7,280.9 L108.7,282.7M135.0,297.3 L127.8,286.8 L125.8,279.2M135.0,297.3 L139.6,304.3M613.2,307.2 L618.4,310.2 L624.0,316.4 L620.7,318.9M612.4,307.7 L606.5,312.0M612.4,307.7 L620.7,318.9M606.5,312.0 L614.8,323.2M606.5,312.0 L597.5,318.9M606.5,312.0 L612.4,307.7M606.5,312.0 L601.1,304.7M620.7,318.9 L614.8,323.2M620.7,318.9 L612.4,307.7M620.7,318.9 L624.0,316.4 L618.4,310.2 L613.2,307.2M614.8,323.2 L619.3,329.2M614.8,323.2 L606.5,312.0M614.8,323.2 L605.8,330.0M614.8,323.2 L620.7,318.9M597.5,318.9 L593.6,321.8M597.5,318.9 L606.5,312.0M597.5,318.9 L605.8,330.0M597.5,318.9 L589.1,307.7M601.1,304.7 L606.1,300.9M601.1,304.7 L598.3,300.9M601.1,304.7 L606.5,312.0M593.6,321.8 L597.5,318.9M605.8,330.0 L598.5,335.3M605.8,330.0 L614.8,323.2M605.8,330.0 L610.3,336.0M605.8,330.0 L597.5,318.9M589.1,307.7 L585.0,310.9M589.1,307.7 L592.7,305.1M589.1,307.7 L597.5,318.9M589.1,307.7 L587.1,305.1M590.3,324.3 L582.9,329.7M590.3,324.3 L592.3,322.7M590.3,324.3 L598.5,335.3M590.3,324.3 L584.2,316.0M582.9,329.7 L575.6,335.1M582.9,329.7 L590.3,324.3M582.9,329.7 L591.2,340.8M582.9,329.7 L580.2,326.2M592.3,322.7 L590.3,324.3M598.5,335.3 L605.8,330.0M598.5,335.3 L595.6,337.5M598.5,335.3 L590.3,324.3M598.5,335.3 L603.1,341.3 L607.8,337.7M584.2,316.0 L590.3,324.3M584.2,316.0 L582.0,313.0M575.6,335.1 L582.9,329.7M575.6,335.1 L567.4,324.0M575.6,335.1 L583.9,346.2M591.2,340.8 L582.9,329.7M591.2,340.8 L583.9,346.2M580.2,326.2 L582.9,329.7M567.4,324.0 L575.6,335.1M567.4,324.0 L563.2,318.3M567.4,324.0 L572.9,319.8M583.9,346.2 L591.2,340.8M583.9,346.2 L575.6,335.1M583.9,346.2 L576.7,351.6M568.7,340.9 L576.7,351.6M557.8,349.2 L564.1,357.7M539.4,363.0 L541.2,365.5M274.6,352.1 L278.0,355.3M274.6,352.1 L271.6,355.5M274.6,352.1 L277.5,348.9M278.0,355.3 L274.6,352.1M278.0,355.3 L275.1,358.7M278.0,355.3 L281.0,352.1M271.6,355.5 L275.1,358.7M271.6,355.5 L274.6,352.1M271.6,355.5 L267.3,351.5M275.1,358.7 L278.2,361.7M275.1,358.7 L271.6,355.5M275.1,358.7 L278.0,355.3M281.0,352.1 L284.3,354.9M281.0,352.1 L278.0,355.3M281.0,352.1 L284.8,347.9 L286.9,347.4M492.4,645.8 L492.3,649.0M492.4,645.8 L492.5,642.3M492.3,649.0 L492.4,645.8M492.5,642.3 L492.4,645.8M492.5,642.3 L492.8,635.6M490.8,645.9 L488.7,647.0M490.8,645.9 L488.2,641.7M521.5,631.0 L531.3,626.2M521.5,631.0 L503.6,640.3M521.5,631.0 L520.7,635.2 L523.2,640.0M521.5,631.0 L523.4,627.6 L523.4,620.1M531.3,626.2 L521.5,631.0M503.6,640.3 L521.5,631.0M523.2,640.0 L505.7,649.6M523.2,640.0 L529.9,635.6M523.2,640.0 L520.7,635.2 L521.5,631.0M531.1,626.1 L523.4,620.1M552.4,296.7 L543.5,289.6M550.4,283.8 L546.1,286.4 L543.5,289.6M531.0,278.8 L538.7,269.5M531.0,278.8 L539.0,285.8M538.7,269.5 L531.0,278.8M530.3,278.2 L526.6,275.9M516.2,267.0 L511.7,272.2M606.7,694.4 L606.1,696.8M606.1,696.8 L606.7,694.4M608.1,701.8 L616.5,700.7M608.1,701.8 L596.3,707.0 L589.1,707.9 L582.3,706.1 L577.1,707.2 L572.1,705.9 L568.6,707.0 L563.9,715.1 L558.9,718.9 L557.7,721.9 L561.2,728.1 L565.7,729.9 L567.6,732.2 L570.3,732.2M616.5,700.7 L622.8,700.1M616.5,700.7 L608.1,701.8M570.3,732.2 L567.6,732.2 L565.7,729.9 L561.2,728.1 L557.7,721.9 L558.9,718.9 L563.9,715.1 L568.6,707.0 L572.1,705.9 L577.1,707.2 L582.3,706.1 L589.1,707.9 L596.3,707.0 L608.1,701.8M603.3,771.5 L599.6,749.0M603.3,771.5 L611.2,771.2M599.6,749.0 L603.3,771.5M599.6,749.0 L600.0,741.6M611.2,771.2 L603.3,771.5M611.2,771.2 L610.7,760.4 L613.5,750.5M285.5,271.8 L285.4,276.2M283.5,270.8 L278.5,268.0M285.7,271.4 L291.8,273.4M285.7,271.4 L286.5,267.3M285.4,276.2 L285.6,279.5M285.4,276.2 L285.5,271.8M27
381387.9,267.7 L275.3,266.2M277.9,267.7 L280.5,263.2M275.3,266.2 L269.2,262.7M275.3,266.2 L277.9,267.7M278.5,268.0 L283.5,270.8M278.5,268.0 L274.8,274.5M280.5,263.2 L277.9,267.7M269.2,262.7 L265.4,260.5M269.2,262.7 L275.3,266.2M269.2,262.7 L259.6,269.1M265.4,260.5 L254.5,257.8M265.4,260.5 L269.2,262.7M265.4,260.5 L266.5,253.9M259.6,269.1 L266.5,277.5M259.6,269.1 L269.2,262.7M259.6,269.1 L255.1,264.7 L251.0,262.8M254.5,257.8 L265.4,260.5M254.5,257.8 L251.0,262.8M254.5,257.8 L255.3,251.2M266.5,253.9 L255.3,251.2M266.5,253.9 L265.4,260.5M251.0,262.8 L254.5,257.8M251.0,262.8 L255.1,264.7 L259.6,269.1M251.0,262.8 L246.6,262.1M255.3,251.2 L254.5,257.8M255.3,251.2 L266.5,253.9M255.3,251.2 L256.6,244.9M541.2,400.6 L539.2,404.2M541.2,400.6 L531.1,395.4M539.2,404.2 L537.0,408.0M539.2,404.2 L541.2,400.6M539.2,404.2 L529.4,401.4M531.1,395.4 L541.2,400.6M531.1,395.4 L527.1,393.5M531.1,395.4 L529.4,401.4M542.5,401.7 L548.0,406.2M537.0,408.0 L539.2,404.2M537.0,408.0 L535.4,412.0M529.4,401.4 L525.3,400.3M529.4,401.4 L539.2,404.2M529.4,401.4 L531.1,395.4M535.4,412.0 L522.9,408.6M535.4,412.0 L537.2,412.8 L536.5,417.1M535.4,412.0 L537.0,408.0M522.9,408.6 L535.4,412.0M522.9,408.6 L518.7,407.4M536.5,417.1 L543.2,420.7M536.5,417.1 L537.2,412.8 L535.4,412.0M543.2,420.7 L536.5,417.1M543.2,420.7 L542.3,425.2 L548.9,429.0M543.2,420.7 L554.5,427.1M531.2,418.8 L525.3,417.3 L525.6,414.2 L521.9,413.1M521.9,413.1 L525.6,414.2 L525.3,417.3 L531.2,418.8M577.4,75.8 L567.7,75.0M577.4,75.8 L577.4,60.1M577.4,75.8 L582.9,76.4M577.4,75.8 L574.2,86.8 L571.8,85.7M575.2,104.1 L578.0,101.2M575.2,104.1 L572.8,107.5M575.2,104.1 L578.1,106.4M575.2,104.1 L582.9,76.4M567.7,75.0 L577.4,75.8M567.7,75.0 L568.0,83.5M571.8,85.7 L568.0,83.5M571.8,85.7 L567.8,85.9 L568.0,83.5M571.8,85.7 L574.2,86.8 L577.4,75.8M568.0,83.5 L567.7,75.0M568.0,83.5 L571.8,85.7M568.0,83.5 L567.8,85.9 L571.8,85.7M567.7,73.2 L577.4,60.1M567.7,73.2 L564.6,66.3M397.6,-71.3 L398.4,-67.5 L397.2,-64.6M397.6,-71.3 L402.0,-75.2M397.2,-64.6 L398.4,-67.5 L397.6,-71.3M402.0,-75.2 L397.6,-71.3M402.0,-75.2 L408.6,-79.1M402.0,-75.2 L396.1,-77.9M-30.8,700.6 L-25.4,701.3M-30.8,700.6 L-29.5,689.3M-30.9,701.3 L-24.5,702.4M-32.9,700.8 L-39.7,699.8M-25.4,701.3 L-30.8,700.6M-25.4,701.3 L-20.9,702.0M-25.4,701.3 L-21.4,700.5 L-19.9,694.2M-29.5,689.3 L-23.2,690.6M-29.5,689.3 L-30.8,700.6M-29.5,689.3 L-27.8,679.8M-71.0,694.9 L-75.0,694.3M-71.0,694.9 L-67.1,692.0M-70.3,695.0 L-65.2,695.7M-75.0,694.3 L-69.8,693.4 L-65.2,690.4M-75.0,694.3 L-71.0,694.9M-67.1,692.0 L-65.2,690.4M-67.1,692.0 L-67.8,694.1 L-65.2,695.7M-67.1,692.0 L-71.0,694.9M-65.2,690.4 L-67.1,692.0M-65.2,690.4 L-62.6,688.5M-65.2,690.4 L-69.8,693.4 L-75.0,694.3M-119.6,695.2 L-120.5,684.8 L-117.5,678.2M-119.6,695.2 L-138.2,696.2M-119.6,695.2 L-112.0,694.2M-117.5,678.2 L-115.5,674.9M-117.5,678.2 L-120.5,684.8 L-119.6,695.2M-138.2,696.2 L-151.3,695.8 L-172.9,690.5 L-184.2,689.2M-138.2,696.2 L-119.6,695.2M-138.2,696.2 L-136.9,691.1M-112.0,694.2 L-119.6,695.2M-223.9,694.9 L-219.4,701.7M-223.9,694.9 L-228.0,688.5M-223.9,694.9 L-228.8,695.0M-223.9,694.9 L-205.0,692.9M-219.4,701.7 L-223.9,694.9M-219.4,701.7 L-216.7,707.3M-228.0,688.5 L-223.9,694.9M-228.0,688.5 L-228.0,681.3M-228.8,695.0 L-223.9,694.9M-205.0,692.9 L-223.9,694.9M-205.0,692.9 L-193.6,689.9 L-184.2,689.2M24.9,365.6 L25.8,363.7 L24.4,362.1 L23.2,363.6 L24.9,365.6M24.9,365.6 L23.2,363.6 L24.4,362.1 L25.8,363.7 L24.9,365.6M24.9,365.6 L24.4,370.6M18.3,369.7 L13.0,371.5M18.3,369.7 L24.4,370.6M18.3,369.7 L18.7,377.1 L21.4,379.5 L24.4,379.4 L25.6,378.0 L24.4,370.6M18.3,369.7 L15.6,362.8M491.3,667.3 L491.7,662.2M491.3,667.3 L494.2,666.0M491.2,668.5 L491.0,671.5M491.2,668.5 L482.8,668.3M491.7,662.2 L491.3,667.3M494.2,666.0 L497.1,664.5M494.2,666.0 L491.3,667.3M482.8,668.3 L483.0,660.0M482.8,668.3 L491.2,668.5M483.0,660.0 L482.8,668.3M483.0,660.0 L482.3,650.3M483.0,660.0 L463.5,659.2M462.2,667.4 L463.5,659.2M462.2,667.4 L463.8,679.1 L466.4,683.0M462.2,667.4 L471.7,668.0M463.5,659.2 L462.2,667.4M463.5,659.2 L464.9,650.3 L466.2,649.6M463.5,659.2 L483.0,660.0M466.4,683.0 L471.4,696.1M466.4,683.0 L463.8,679.1 L462.2,667.4M466.4,683.0 L460.9,686.6M466.4,683.0 L471.1,682.4M471.7,668.0 L475.4,668.1M471.7,668.0 L462.2,667.4M453.3,666.2 L453.7,663.6M453.3,666.2 L449.4,665.8M453.3,666.2 L458.3,666.9M453.7,663.6 L453.3,666.2M453.7,663.6 L454.7,657.9M449.4,665.8 L446.9,665.4M449.4,665.8 L453.3,666.2M458.3,666.9 L453.3,666.2M438.8,663.9 L440.9,656.0M440.9,656.0 L438.8,663.9M440.9,656.0 L441.9,647.2M440.9,656.0 L454.7,657.9M440.4,664.3 L443.9,664.8M607.9,95.9 L611.4,99.4 L615.9,100.7M607.9,95.9 L606.3,91.9 L607.7,83.3M607.9,95.9 L614.2,92.3 L618.2,92.3M607.9,95.9 L602.9,99.9 L597.0,102.5M615.9,100.7 L611.4,99.4 L607.9,95.9M607.7,83.3 L610.3,83.1M607.7,83.3 L597.9,84.0M607.7,83.3 L606.3,91.9 L607.9,95.9M618.2,92.3 L614.2,92.3 L607.9,95.9M597.0,102.5 L602.9,99.9 L607.9,95.9M610.3,83.1 L618.8,82.3M610.3,83.1 L607.7,83.3M610.3,83.1 L609.7,77.4M618.8,82.3 L610.3,83.1M618.8,82.3 L616.3,59.5 L612.6,54.6M618.8,82.3 L623.5,92.9 L622.9,100.8M609.7,77.4 L610.3,83.1M609.7,77.4 L605.3,77.3 L603.2,75.0 L601.6,64.4 L599.8,60.6M609.7,77.4 L608.8,65.5 L611.0,60.0M448.6,249.8 L449.3,244.5M448.6,249.8 L454.6,250.5M449.3,244.5 L448.6,249.8M454.6,250.5 L448.6,249.8M550.4,487.0 L561.
381386,489.8 L564.9,492.6 L569.6,493.6 L563.5,503.2M550.4,487.0 L546.0,485.4 L543.8,483.2M550.4,487.0 L549.5,492.0M550.4,487.0 L551.7,479.6M550.4,487.0 L548.7,491.7M563.5,503.2 L557.4,497.7M563.5,503.2 L569.6,493.6 L564.9,492.6 L561.6,489.8 L550.4,487.0M563.5,503.2 L556.3,511.5 L550.0,506.0M543.8,483.2 L546.0,485.4 L550.4,487.0M549.5,492.0 L550.4,487.0M549.5,492.0 L543.7,500.6M549.5,492.0 L557.4,497.7M551.7,479.6 L545.7,477.5M551.7,479.6 L561.4,481.0M551.7,479.6 L550.4,487.0M548.7,491.7 L542.7,487.7M548.7,491.7 L543.1,500.0M548.7,491.7 L550.4,487.0M579.9,440.7 L579.1,444.1M579.9,440.7 L596.3,444.5 L607.1,445.5M579.9,440.7 L580.7,437.8M579.1,444.1 L578.2,446.9M579.1,444.1 L579.9,440.7M607.1,445.5 L615.5,445.9M607.1,445.5 L596.3,444.5 L579.9,440.7M284.1,324.3 L286.4,326.5M284.1,324.3 L276.6,331.9M284.1,324.3 L279.4,321.7M286.4,326.5 L284.1,324.3M276.6,331.9 L284.1,324.3M279.4,321.7 L284.1,324.3M-128.1,266.6 L-125.0,270.5M-128.1,266.6 L-124.8,263.9 L-122.6,259.9M-125.0,270.5 L-128.1,266.6M-122.6,259.9 L-120.4,252.7M-122.6,259.9 L-109.8,264.7M-122.6,259.9 L-124.8,263.9 L-128.1,266.6M-120.7,275.9 L-123.8,272.1M-120.7,275.9 L-116.0,273.3M-120.7,275.9 L-123.1,279.3 L-125.3,289.6M-123.8,272.1 L-120.7,275.9M-116.0,273.3 L-112.7,270.9M-116.0,273.3 L-120.7,275.9M-125.3,289.6 L-116.2,290.2M-125.3,289.6 L-134.3,288.1M-125.3,289.6 L-123.1,279.3 L-120.7,275.9M-125.3,289.6 L-125.4,299.2M29.8,307.0 L25.2,301.9M29.8,307.0 L23.2,314.5 L33.2,320.2M29.8,307.0 L33.6,306.5 L38.8,311.1M25.2,301.9 L29.8,307.0M33.2,320.2 L34.7,327.1M33.2,320.2 L23.2,314.5 L29.8,307.0M33.2,320.2 L38.8,311.1M38.8,311.1 L41.2,313.1M38.8,311.1 L33.2,320.2M38.8,311.1 L33.6,306.5 L29.8,307.0M34.7,327.1 L35.7,330.9M34.7,327.1 L33.2,320.2M34.7,327.1 L26.4,327.3M381.0,108.3 L391.4,108.8 L399.7,105.8 L406.1,109.4 L405.0,114.5M381.0,108.3 L377.3,112.1M381.0,108.3 L384.8,100.4M405.0,114.5 L406.1,109.4 L399.7,105.8 L391.4,108.8 L381.0,108.3M405.0,114.5 L401.4,122.2 L396.9,125.4M377.3,112.1 L381.0,108.3M377.3,112.1 L362.1,95.9M377.3,112.1 L383.6,118.6M384.8,100.4 L381.0,108.3M384.8,100.4 L393.5,103.6M379.2,107.0 L382.0,104.3M382.0,104.3 L379.2,107.0M285.5,107.5 L288.2,106.7M285.5,107.5 L278.6,110.9M285.5,107.5 L283.9,102.6M288.2,106.7 L285.5,107.5M288.2,106.7 L292.5,104.1
38138M278.6,110.9 L285.5,107.5M278.6,110.9 L274.5,111.9 L274.6,112.5 L277.1,113.9 L278.6,110.9M278.6,110.9 L277.1,113.9 L274.6,112.5 L274.5,111.9 L278.6,110.9M283.9,102.6 L280.4,103.4M283.9,102.6 L283.0,98.4M283.9,102.6 L285.5,107.5M294.5,103.3 L293.3,98.4M294.9,103.3 L299.8,102.4M294.9,103.3 L291.2,110.1M292.5,104.1 L288.2,106.7M293.3,98.4 L296.5,94.3M293.3,98.4 L294.5,103.3M293.3,98.4 L290.8,97.4 L287.6,97.9M299.8,102.4 L294.9,103.3M299.8,102.4 L303.2,105.3M299.8,102.4 L300.2,98.6M291.2,110.1 L290.4,113.4M291.2,110.1 L294.9,103.3M303.2,105.3 L305.7,107.2M303.2,105.3 L299.8,102.4M300.2,98.6 L301.7,96.1 L304.7,95.2 L309.2,97.9M300.2,98.6 L299.8,102.4M303.1,48.6 L300.2,46.5 L297.5,46.3 L292.6,49.7M292.6,49.7 L295.9,53.2M292.6,49.7 L297.5,46.3 L300.2,46.5 L303.1,48.6M292.6,49.7 L289.3,46.6 L287.9,47.2M736.9,66.7 L719.5,72.3M719.5,72.3 L736.9,66.7M719.5,72.3 L722.2,70.3 L722.6,68.2 L720.2,59.0M719.5,72.3 L714.2,73.7M23.4,486.0 L25.5,483.6M23.4,486.0 L17.0,493.8M23.4,486.0 L36.5,494.6M25.5,483.6 L23.4,486.0M17.0,493.8 L23.4,486.0M17.0,493.8 L29.0,504.1M17.0,493.8 L15.2,496.6 L17.0,503.2M36.5,494.6 L29.0,504.1M36.5,494.6 L23.4,486.0M36.8,494.8 L49.3,504.9M29.0,504.1 L24.9,509.2M29.0,504.1 L36.5,494.6M29.0,504.1 L17.0,493.8M29.0,504.1 L42.0,514.6M49.3,504.9 L36.8,494.8M49.3,504.9 L42.0,514.6M49.3,504.9 L55.4,509.4 L50.8,516.5 L47.4,518.3M42.0,514.6 L49.3,504.9M42.0,514.6 L29.0,504.1M47.4,518.3 L41.4,515.4M47.4,518.3 L42.4,529.3M47.4,518.3 L50.8,516.5 L55.4,509.4 L49.3,504.9M18.3,508.5 L17.0,503.2M17.0,503.2 L18.3,508.5M17.0,503.2 L24.9,509.2M17.0,503.2 L15.2,496.6 L17.0,493.8M24.9,509.2 L22.5,512.2M24.9,509.2 L29.0,504.1M24.9,509.2 L17.0,503.2M24.9,509.2 L37.7,519.8M-176.5,237.5 L-172.8,232.9M-176.5,237.5 L-183.6,231.4M-176.5,237.5 L-179.2,240.8M-172.8,232.9 L-176.5,237.5M-172.8,232.9 L-168.7,228.8M-172.8,232.9 L-178.5,226.4M-172.8,232.9 L-168.6,236.7 L-166.8,234.7M-183.6,231.4 L-176.5,237.5M-179.2,240.8 L-176.5,237.5M479.4,240.8 L479.6,236.2M479.4,240.8 L479.0,246.1M479.4,240.8 L474.2,240.8M479.6,236.2 L479.4,240.8M479.6,236.2 L488.3,243.0M479.0,246.1 L479.4,240.8M474.2,240.8 L479.4,240.8M298.3,225.3 L303.4,225.7M296.3,225.0 L282.8,223.1M297.2,224.2 L295.6,218.3M304.1,225.3 L300.6,215.5M304.1,225.3 L306.6,230.0M303.4,225.7 L298.3,225.3M300.6,215.5 L291.6,206.5M300.6,215.5 L304.1,225.3M306.6,230.0 L309.7,230.5M306.6,230.0 L304.1,225.3M229.9,255.1 L222.7,255.4M229.9,255.1 L238.1,254.7M229.9,255.1 L230.4,252.6M222.7,255.4 L229.9,255.1M222.7,255.4 L223.1,262.9M222.7,255.4 L215.3,255.6 L213.4,262.7M238.1,254.7 L240.8,244.8M238.1,254.7 L229.9,255.1M238.1,254.7 L244.6,254.3M230.4,252.6 L229.9,255.1M223.1,262.9 L222.7,255.4M213.4,262.7 L215.3,255.6 L222.7,255.4M401.8,446.8 L399.6,444.9M402.9,447.6 L404.9,449.3M399.6,444.9 L401.8,446.8M406.8,441.5 L411.6,444.2 L424.1,435.8M406.8,441.5 L417.0,433.1M406.7,442.2 L403.5,446.7M424.1,435.8 L428.6,432.5 L429.1,428.7M424.1,435.8 L411.6,444.2 L406.8,441.5M417.0,433.1 L418.3,430.9M417.0,433.1 L406.8,441.5M419.7,427.6 L429.1,428.7M419.7,427.6 L421.4,423.3M429.1,428.7 L419.7,427.6M429.1,428.7 L433.7,428.6 L436.9,426.6M429.1,428.7 L428.6,432.5 L424.1,435.8M419.1,427.1 L416.7,425.4M421.4,423.3 L419.7,427.6M522.1,395.4 L521.1,399.1M522.1,395.4 L523.4,391.6M521.5,395.3 L511.3,392.3M521.1,399.1 L522.1,395.4M521.1,399.1 L525.3,400.3M521.1,399.1 L518.7,407.4M523.4,391.6 L527.1,393.5M523.4,391.6 L522.1,395.4M523.4,391.6 L525.0,385.5M511.3,392.3 L510.6,394.7M511.3,392.3 L514.0,382.3M511.3,392.3 L521.5,395.3M510.6,394.7 L508.5,401.8M510.6,394.7 L511.3,392.3M514.0,382.3 L511.3,392.3M514.0,382.3 L516.6,372.7M514.0,382.3 L524.3,385.2M514.0,382.3 L504.1,378.7M638.8,442.7 L642.8,443.4M-188.7,361.7 L-192.2,365.3M-188.7,361.7 L-184.9,358.2 L-187.5,351.5M-192.2,365.3 L-188.7,361.7M-187.5,351.5 L-184.9,358.2 L-188.7,361.7M371.8,279.5 L370.1,282.8M371.8,279.5 L379.9,281.3M370.1,282.8 L371.8,279.5M371.8,278.5 L373.4,272.3M379.9,281.3 L371.8,279.5M379.9,281.3 L398.0,285.3M366.5,290.1 L369.3,284.4M369.3,284.4 L366.5,290.1M-146.5,215.0 L-141.9,213.0M-146.5,215.0 L-148.7,210.5 L-148.3,206.5 L-144.7,204.3 L-141.4,203.8M-146.5,215.0 L-146.4,218.5M-141.9,213.0 L-146.5,215.0M-141.4,203.8 L-144.7,204.3 L-148.3,206.5 L-148.7,210.5 L-146.5,215.0M-146.4,218.5 L-139.3,217.2 L-127.6,210.4M-146.4,218.5 L-149.2,218.1M-146.4,218.5 L-146.5,215.0M341.3,252.6 L346.1,238.0M341.5,253.3 L345.0,255.0M340.4,252.7 L336.7,250.9M346.2,237.6 L350.4,238.3M346.1,238.0 L341.3,252.6M350.4,238.3 L346.2,237.6M137.7,233.7 L133.4,236.1M137.7,233.7 L147.9,228.1
38138M138.2,234.8 L139.5,237.1M133.4,236.1 L137.7,233.7M147.9,228.1 L137.7,233.7M103.9,259.5 L105.0,264.8M74.2,271.6 L68.4,272.9M51.7,279.0 L48.2,281.6M51.7,279.0 L56.4,276.6M48.2,281.6 L51.7,279.0M52.2,280.1 L54.2,284.4M56.4,276.6 L51.7,279.0M39.3,287.5 L36.6,284.2M39.1,288.6 L30.8,295.2M30.8,295.2 L39.1,288.6M30.8,295.2 L24.2,300.8M30.2,294.5 L24.3,287.2M31.3,296.1 L32.7,299.4 L41.6,307.4M24.2,300.8 L30.8,295.2M23.7,300.1 L19.4,296.0M19.1,305.9 L4.1,303.9M19.1,305.9 L22.4,302.6M19.1,305.9 L10.3,317.4M4.1,303.9 L19.1,305.9M22.4,302.6 L19.1,305.9M10.3,317.4 L7.3,321.6M10.3,317.4 L-4.7,312.7M10.3,317.4 L19.1,305.9M7.3,321.6 L1.7,328.6M7.3,321.6 L10.3,317.4M-4.7,312.7 L-13.9,310.0M-4.7,312.7 L10.3,317.4M8.0,322.1 L11.7,325.8 L13.6,331.6 L18.3,336.7 L21.7,338.0M1.7,328.6 L-0.9,332.1M1.7,328.6 L7.3,321.6M-0.9,332.1 L1.7,328.6M-1.3,332.6 L-5.6,337.5M-26.6,371.2 L-30.6,369.9M-26.6,371.2 L-27.4,374.0M-26.6,371.2 L-24.0,362.7M-30.6,369.9 L-26.6,371.2M-30.6,369.9 L-38.7,365.4M-27.4,374.0 L-26.6,371.2M-27.4,374.0 L-33.1,394.6M-24.0,362.7 L-26.6,371.2M-24.0,362.7 L-19.8,353.4 L-12.4,344.9M-34.6,399.8 L-27.4,401.9M-34.6,399.8 L-35.9,403.0M-34.6,399.8 L-33.1,394.6M-27.4,401.9 L-34.6,399.8M-27.4,401.9 L-32.5,409.5M-35.9,403.0 L-34.6,399.8M-35.9,403.0 L-58.8,461.1M-33.1,394.6 L-34.6,399.8M-33.1,394.6 L-27.4,374.0M-36.9,402.9 L-43.3,415.4M-58.8,461.1 L-35.9,403.0M255.4,105.6 L263.5,119.1 L269.8,124.5M269.8,124.5 L271.3,121.6M269.8,124.5 L276.5,126.2 L278.3,128.8 L277.5,130.8M269.8,124.5 L263.5,119.1 L255.4,105.6M690.7,62.9 L696.8,80.0M696.8,80.0 L690.7,62.9M696.8,80.0 L709.3,75.4M696.8,80.0 L684.6,84.4M709.3,75.4 L714.2,73.7M709.3,75.4 L696.8,80.0M684.6,84.4 L696.8,80.0M619.7,105.1 L623.0,104.5M619.7,105.1 L622.9,100.8M619.7,105.1 L613.0,109.4M623.0,104.5 L622.9,100.8M623.0,104.5 L619.7,105.1M622.9,100.8 L623.0,104.5M622.9,100.8 L619.7,105.1M622.9,100.8 L623.5,92.9 L618.8,82.3M613.0,109.4 L616.9,114.3M613.0,109.4 L619.7,105.1M613.0,109.4 L604.0,116.9 L600.1,118.0M624.2,104.5 L630.0,104.1M624.2,104.5 L626.7,109.4 L625.8,114.7M633.6,103.7 L637.9,103.3M633.6,103.7 L630.0,104.1M633.6,103.7 L632.6,109.0M637.9,103.3 L640.1,105.3M637.9,103.3 L641.0,102.9M637.9,103.3 L633.6,103.7M630.0,104.1 L633.6,103.7M630.0,104.1 L624.2,104.5M632.6,109.0 L633.6,103.7M640.1,105.3 L637.9,103.3M640.1,105.3 L641.0,102.9M640.1,105.3 L644.7,109.4M641.0,102.9 L643.9,102.6M641.0,102.9 L637.9,103.3M641.0,102.9 L640.1,105.3M669.6,103.6 L675.1,104.1M669.6,103.6 L666.6,103.3M669.6,103.6 L671.0,99.0M675.1,104.1 L669.6,103.6M675.1,104.1 L739.3,114.0M666.6,103.3 L669.6,103.6M666.6,103.3 L662.4,102.9M671.0,99.0 L673.8,93.7M671.0,99.0 L669.6,103.6M744.3,122.7 L737.6,125.8M744.3,122.7 L741.8,117.4M737.6,125.8 L744.3,122.7M737.6,125.8 L735.0,127.1 L732.1,130.9M741.8,117.4 L744.3,122.7M741.8,117.4 L740.0,114.7M428.1,525.3 L426.4,523.4M328.9,247.0 L333.1,249.1M329.1,246.5 L332.3,236.7M333.1,249.1 L328.9,247.0M328.1,246.7 L322.3,244.3M323.6,256.3 L324.8,253.7M323.6,256.3 L331.9,260.5M323.6,256.3 L320.9,255.5M323.0,257.7 L318.7,266.4M324.8,253.7 L323.6,256.3M324.8,253.7 L326.3,250.3M331.9,260.5 L327.5,270.2M331.9,260.5 L336.4,251.4M331.9,260.5 L323.6,256.3M331.9,260.5 L340.2,264.5M320.9,255.5 L323.6,256.3M318.7,266.4 L316.2,273.5M318.7,266.4 L323.0,257.7M318.7,266.4 L327.5,270.2M318.7,266.4 L307.7,261.8M316.2,273.5 L315.4,275.9M316.2,273.5 L318.7,266.4M316.2,273.5 L312.6,272.2M316.2,273.5 L320.9,275.6M327.5,270.2 L318.7,266.4M327.5,270.2 L331.9,272.4M327.5,270.2 L331.9,260.5M307.7,261.8 L304.6,260.7M307.7,261.8 L310.1,252.5M307.7,261.8 L318.7,266.4M307.7,261.8 L304.9,269.3M315.4,275.9 L314.4,278.9M315.4,275.9 L316.2,273.5M312.6,272.2 L316.2,273.5M312.6,272.2 L304.9,269.3M320.9,275.6 L316.2,273.5M313.6,281.1 L316.7,282.7M313.7,280.9 L317.0,281.6M316.7,282.7 L313.6,281.1M317.0,281.6 L313.7,280.9M302.0,277.1 L297.7,275.6M302.0,277.1 L304.9,269.3M297.7,275.6 L302.0,277.1M303.2,277.6 L306.9,278.9M304.9,269.3 L312.6,272.2M304.9,269.3 L296.0,266.1M304.9,269.3 L302.0,277.1M304.9,269.3 L307.7,261.8M291.8,273.4 L285.7,271.4M291.8,273.4 L294.4,274.4M286.5,267.3 L285.7,271.4M286.5,267.3 L287.8,263.1M13.0,371.5
38138L18.3,369.7M13.0,371.5 L9.2,363.5 L2.5,356.0M13.0,371.5 L14.7,382.4M14.7,382.4 L8.7,384.3M14.7,382.4 L16.4,386.5M14.7,382.4 L13.0,371.5M14.7,382.4 L12.2,371.9M15.6,362.8 L16.4,360.6 L13.5,360.5 L13.8,362.0 L15.6,362.8M15.6,362.8 L13.8,362.0 L13.5,360.5 L16.4,360.6 L15.6,362.8M15.6,362.8 L18.3,369.7M33.9,376.9 L34.6,371.8M33.9,376.9 L32.7,379.5 L33.4,380.8 L35.3,379.4 L33.9,376.9M33.9,376.9 L35.3,379.4 L33.4,380.8 L32.7,379.5 L33.9,376.9M46.7,375.7 L51.9,381.7M46.7,375.7 L41.0,372.6 L34.6,371.8M46.7,375.7 L48.1,369.2 L47.2,365.7 L45.1,364.0 L40.4,362.8 L36.1,364.0 L34.6,371.8M51.9,381.7 L46.7,375.7M541.2,213.5 L543.3,215.3M540.6,213.8 L538.0,216.7M548.3,219.7 L545.7,222.7M548.0,219.4 L543.3,215.3M545.7,222.7 L548.3,219.7M549.4,218.5 L553.4,213.7M103.6,187.8 L105.4,204.9M103.6,187.8 L107.1,187.1M105.4,204.9 L103.6,187.8M105.4,204.9 L97.2,207.3M105.4,204.9 L111.9,203.1 L112.8,198.9M101.4,188.2 L97.9,188.8M107.1,187.1 L103.6,187.8M97.2,207.3 L96.8,202.6M97.2,207.3 L105.4,204.9M97.2,207.3 L94.3,208.3M112.8,198.9 L111.9,203.1 L105.4,204.9M96.8,202.6 L97.2,207.3M94.3,208.3 L97.2,207.3M462.7,271.8 L472.8,277.8M462.7,271.8 L458.8,278.6M462.7,271.8 L473.5,269.2M458.8,278.6 L450.9,273.8M458.8,278.6 L468.7,284.5M458.8,278.6 L455.2,284.7M458.8,278.6 L462.7,271.8M473.5,269.2 L473.6,272.6M473.5,269.2 L473.5,265.5M473.5,269.2 L462.7,271.8M456.0,172.8 L458.5,170.6M456.0,172.8 L452.6,175.7 L456.4,180.8M456.0,172.8 L459.9,177.1M458.5,170.6 L456.0,172.8M458.5,170.6 L454.6,166.2M458.5,170.6 L463.3,174.0 L470.6,171.4M456.4,180.8 L459.9,177.1M456.4,180.8 L459.9,184.5M456.4,180.8 L452.6,175.7 L456.0,172.8M459.9,177.1 L456.4,180.8M459.9,177.1 L460.8,176.5 L468.4,183.1M459.9,177.1 L456.0,172.8M280.4,103.4 L283.9,102.6M280.4,103.4 L272.9,106.6M283.0,98.4 L283.9,102.6M283.0,98.4 L282.0,94.6M283.0,98.4 L287.6,97.9M280.0,101.9 L278.9,97.5 L277.5,97.7 L278.2,101.3 L280.0,101.9M280.0,101.9 L278.2,101.3 L277.5,97.7 L278.9,97.5 L280.0,101.9M272.9,106.6 L280.4,103.4M272.9,106.6 L270.3,108.5M272.9,106.6 L271.9,103.9M270.3,108.5 L272.9,106.6M271.9,103.9 L270.7,98.8M271.9,103.9 L272.9,106.6M512.0,293.4 L513.7,291.3M513.7,291.3 L518.2,286.0M513.7,291.3 L512.0,293.4M513.7,291.3 L517.1,294.0M518.2,286.0 L513.7,291.3M518.2,286.0 L524.0,290.7M517.1,294.0 L513.7,291.3M519.6,284.5 L514.3,280.1M519.6,284.5 L524.5,278.4M524.0,290.7 L518.2,286.0M524.0,290.7 L526.9,293.0M524.0,290.7 L519.0,296.7M514.3,280.1 L521.5,271.7M514.3,280.1 L519.6,284.5M514.3,280.1 L512.1,282.5M524.5,278.4 L526.6,275.9M524.5,278.4 L519.6,284.5M385.0,100.1 L385.9,97.8M385.0,100.1 L379.4,94.3M385.9,97.8 L385.0,100.1M385.9,97.8 L387.1,93.1M379.4,94.3 L385.0,100.1M492.9,331.3 L491.3,328.5M492.9,331.3 L488.8,333.1M493.8,332.7 L494.8,335.3M493.8,332.7 L496.1,330.4 L500.4,329.0M491.3,328.5 L492.9,331.3M491.3,328.5 L504.7,322.8M488.8,333.1 L484.0,334.9M488.8,333.1 L487.5,330.1 L485.6,329.2 L483.9,323.9M488.8,333.1 L492.9,331.3M484.0,334.9 L488.8,333.1M484.0,334.9 L480.3,325.5M483.9,323.9 L485.6,329.2 L487.5,330.1 L488.8,333.1M-201.5,268.9 L-204.2,274.1M-201.5,268.9 L-200.7,265.0M-201.5,268.9 L-204.2,267.8 L-205.5,265.8M-201.5,268.9 L-195.6,271.4 L-187.1,270.7M-204.2,274.1 L-201.5,268.9M-204.2,274.1 L-206.7,284.3M-204.2,274.1 L-212.3,272.5 L-215.9,275.6 L-214.8,280.4M-200.7,265.0 L-201.5,268.9M-200.7,265.0 L-206.5,262.4 L-211.0,256.7M-205.5,265.8 L-204.2,267.8 L-201.5,268.9M-187.1,270.7 L-195.6,271.4 L-201.5,268.9M218.7,39.9 L216.9,44.4M226.1,51.9 L235.6,45.2M226.1,51.9 L216.7,61.8M226.1,51.9 L221.2,46.6 L216.9,44.4M215.9,237.0 L213.1,240.7M213.1,240.7 L215.9,237.0M193.6,266.4 L190.2,268.8M193.6,266.4 L189.3,263.9M193.6,266.4 L197.1,262.4M190.2,268.8 L193.6,266.4M190.2,268.8 L184.5,272.6M189.3,263.9 L186.1,261.9M189.3,263.9 L193.6,266.4M197.1,262.4 L199.1,259.7M197.1,262.4 L193.6,266.4M180.0,275.7 L177.5,274.7M180.0,275.7 L175.8,279.7M177.5,274.7 L175.8,279.7M177.5,274.7 L180.0,275.7M177.5,274.7 L189.8,252.0M177.5,274.7 L180.6,266.1M175.8,279.7 L177.5,274.7M175.8,279.7 L180.0,275.7M175.3,280.9 L173.0,286.9M175.3,280.9 L176.4,274.3M556.2,339.1 L560.8,345.6M569.4,357.1 L565.7,359.8M569.4,357.1 L573.0,354.5M569.4,357.1 L572.7,361.5 L580.2,356.3M569.4,357.1 L561.5,346.4M565.7,359.8 L564.1,357.7M565.7,359.8 L569.4,357.1M565.7,359.8 L562.1,362.5 L559.3,358.9M573.0,354.5 L569.4,357.1M573.0,354.5 L576.7,351.
381386M580.2,356.3 L582.6,359.5M580.2,356.3 L572.7,361.5 L569.4,357.1M580.2,356.3 L576.7,351.6M561.5,346.4 L569.4,357.1M544.6,317.4 L545.7,320.1M545.7,320.1 L547.4,323.9M545.7,320.1 L544.6,317.4M551.0,332.1 L548.9,327.3M551.0,332.1 L545.2,334.6M551.0,332.1 L555.4,330.7M551.0,332.1 L554.0,339.4M548.9,327.3 L551.0,332.1M548.9,327.3 L547.4,323.9M545.2,334.6 L548.7,342.7M545.2,334.6 L539.4,337.0M545.2,334.6 L551.0,332.1M545.2,334.6 L538.6,319.0 L533.2,321.5M555.4,330.7 L551.0,332.1M555.4,330.7 L559.3,329.6M554.0,339.4 L551.0,332.1M481.5,259.4 L481.9,264.5M481.2,273.4 L481.9,264.5M483.4,275.8 L480.8,274.4M566.4,603.9 L560.5,598.6M567.0,604.6 L571.5,614.6M560.5,598.6 L566.4,603.9M560.5,598.6 L557.4,595.6M569.9,602.1 L572.7,602.0M672.9,138.8 L680.6,143.4M672.9,138.8 L668.1,146.8M672.9,138.8 L675.1,132.5M680.6,143.4 L672.9,138.8M680.6,143.4 L684.3,145.6M668.1,146.8 L672.9,138.8M668.1,146.8 L680.3,156.7M668.1,146.8 L665.7,152.4 L665.8,158.6M675.1,132.5 L672.9,138.8M675.1,132.5 L673.7,129.3 L670.0,126.6M689.5,140.9 L687.6,148.4M684.3,145.6 L687.6,148.4M684.3,145.6 L680.6,143.4M708.6,166.1 L715.9,171.9M708.6,166.1 L701.6,174.5 L696.0,169.9M715.9,171.9 L719.9,175.1M715.9,171.9 L708.6,166.1M696.0,169.9 L693.4,167.8M696.0,169.9 L701.6,174.5 L708.6,166.1M719.9,175.1 L715.9,171.9M703.2,187.6 L697.6,193.2M722.8,177.6 L738.0,192.5 L741.3,194.0 L739.3,204.7 L726.0,209.1 L724.0,211.0 L723.3,214.8 L721.8,215.1 L711.9,206.6M723.9,176.5 L716.7,170.9M723.9,176.5 L729.0,170.9 L731.4,170.6M711.9,206.6 L705.4,200.4M711.9,206.6 L721.8,215.1 L723.3,214.8 L724.0,211.0 L726.0,209.1 L739.3,204.7 L741.3,194.0 L738.0,192.5 L722.8,177.6M93.9,580.5 L104.5,583.9M93.9,580.5 L95.8,573.9M93.9,580.5 L87.2,585.2M93.9,580.5 L91.6,586.5M104.5,583.9 L109.1,585.4M104.5,583.9 L93.9,580.5M104.5,583.9 L102.3,590.1M104.5,583.9 L106.8,577.5M95.8,573.9 L90.2,576.5M95.8,573.9 L106.8,577.5M95.8,573.9 L93.9,580.5M95.8,573.9 L97.7,567.6M87.2,585.2 L83.9,581.6M87.2,585.2 L93.9,580.5M87.2,585.2 L78.2,591.5 L70.2,594.4M91.6,586.5 L102.3,590.1M91.6,586.5 L75.8,596.4M91.6,586.5 L93.9,580.5M109.1,585.4 L111.8,586.3M109.1,585.4 L104.5,583.9M102.3,590.1 L100.7,594.4M102.3,590.1 L104.5,583.9M102.3,590.1 L91.6,586.5M106.8,577.5 L108.9,571.3M106.8,577.5 L104.5,583.9M106.8,577.5 L116.3,580.7M106.8,577.5 L95.8,573.9M111.8,586.3 L115.0,590.0M111.8,586.3 L109.1,585.4M111.8,586.3 L116.3,580.7M115.0,590.0 L111.8,586.3M116.3,580.7 L111.8,586.3M116.3,580.7 L106.8,577.5M116.3,580.7 L118.7,577.8M354.9,51.3 L349.8,56.5M354.9,51.3 L347.0,45.4 L346.6,39.7 L345.0,37.2M354.9,51.3 L360.6,46.1M349.8,56.5 L354.9,51.3M349.8,56.5 L358.3,65.5 L361.3,62.9M349.8,56.5 L346.2,59.9M345.0,37.2 L346.6,39.7 L347.0,45.4 L354.9,51.3M345.0,37.2 L343.9,36.9 L344.3,35.7M360.6,46.1 L363.6,43.3M360.6,46.1 L354.9,51.3M366.2,400.4 L366.3,397.2M366.2,400.4 L369.0,401.2M366.2,400.4 L365.4,424.8M366.3,397.2 L366.2,400.4M366.3,397.2 L366.4,390.5M369.0,401.2 L366.2,400.4M369.0,401.2 L371.5,406.0M365.4,424.8 L362.5,455.2M365.4,424.8 L366.2,400.4M599.8,60.6 L601.6,64.4 L603.2,75.0 L605.3,77.3 L609.7,77.4M599.8,60.6 L597.4,63.7 L593.4,64.0M599.8,60.6 L602.1,57.2 L610.8,56.1 L612.6,54.6M593.4,64.0 L597.4,63.7 L599.8,60.6M593.4,64.0 L588.2,64.8M593.4,64.0 L593.6,84.1M612.6,54.6 L610.8,56.1 L602.1,57.2 L599.8,60.6M612.6,54.6 L619.9,42.1M612.6,54.6 L616.3,59.5 L618.8,82.3M612.6,54.6 L608.6,51.6 L600.0,41.1M611.0,60.0 L608.8,65.5 L609.7,77.4M593.6,84.1 L597.9,84.0M593.6,84.1 L590.3,88.2M593.6,84.1 L593.4,64.0M597.9,84.0 L607.7,83.3M597.9,84.0 L593.6,84.1M597.9,84.0 L598.3,90.0 L601.9,89.5M590.3,88.2 L593.6,84.1M601.9,89.5 L598.3,90.0 L597.9,84.0M311.9,226.1 L307.6,214.1M311.9,226.1 L318.0,213.1M311.6,226.7 L309.7,230.5M307.6,214.1 L311.9,226.1M318.0,213.1 L311.9,226.1M580.5,-48.4 L583.6,-45.4M583.6,-45.4 L586.5,-42.8 L596.3,-41.1M583.6,-45.4 L580.5,-48.4M583.6,-45.4 L575.7,-36.3 L580.4,-30.7 L579.6,-27.9M596.3,-41.1 L604.5,-40.3 L615.4,-35.9M596.3,-41.1 L586.5,-42.8 L583.6,-45.4M596.3,-41.1 L597.6,-50.8 L607.4,-64.6M615.4,-35.9 L604.5,-40.3 L596.3,-41.1M615.4,-35.9 L612.9,-25.8M607.4,-64.6 L611.4,-69.4M607.4,-64.6 L597.6,-50.8 L596.3,-41.1M615.6,-35.8 L630.8,-34.4M612.9,-25.8 L612.2,-20.3M612.9,-25.8 L615.4,-35.9M630.8,-34.4 L630.7,-29.7M630.8,-34.4 L61
381385.6,-35.8M630.8,-34.4 L632.7,-43.8M630.7,-29.7 L630.8,-34.4M632.7,-43.8 L630.8,-34.4M648.1,709.9 L656.8,716.2M648.1,709.9 L645.4,713.9 L636.4,717.0M648.1,709.9 L635.2,701.3M656.8,716.2 L660.0,711.9M656.8,716.2 L669.6,725.9M656.8,716.2 L648.1,709.9M636.4,717.0 L645.4,713.9 L648.1,709.9M635.2,701.3 L629.9,696.4M635.2,701.3 L648.1,709.9M635.2,701.3 L643.1,692.1 L647.8,703.2 L660.0,711.9M-104.1,235.6 L-101.3,239.4M-104.1,235.6 L-106.5,236.9 L-112.0,235.7M-101.3,239.4 L-104.1,235.6M-112.0,235.7 L-106.5,236.9 L-104.1,235.6M-104.8,233.7 L-106.0,227.7M-104.8,233.7 L-101.1,232.7M261.6,88.4 L264.6,94.8M261.6,88.4 L266.1,86.5 L269.4,82.2M261.6,88.4 L256.3,81.4M264.6,94.8 L261.6,88.4M269.4,82.2 L266.1,86.5 L261.6,88.4M256.3,81.4 L260.3,79.1 L265.2,73.2M256.3,81.4 L261.6,88.4M256.3,81.4 L255.3,77.3 L257.0,73.1M199.9,117.0 L203.2,115.6M199.9,117.0 L195.9,118.4M200.1,117.3 L204.6,123.3M203.2,115.6 L206.4,114.4M203.2,115.6 L199.9,117.0M195.9,118.4 L199.9,117.0M195.9,118.4 L193.4,119.0M211.4,127.6 L209.5,128.5 L204.6,123.3M204.6,123.3 L209.5,128.5 L211.4,127.6M204.6,123.3 L200.1,117.3M-120.3,207.5 L-118.1,212.0M-120.3,207.5 L-127.6,210.4M-120.3,207.5 L-106.1,202.2 L-91.2,202.6 L-72.7,199.5M-118.1,212.0 L-113.9,214.7M-118.1,212.0 L-120.3,207.5M-118.1,212.0 L-121.9,213.9M-127.6,210.4 L-120.3,207.5M-127.6,210.4 L-129.0,207.1M-127.6,210.4 L-139.3,217.2 L-146.4,218.5M-72.7,199.5 L-69.0,213.3M-72.7,199.5 L-18.3,204.6 L-8.6,209.1M-72.7,199.5 L-91.2,202.6 L-106.1,202.2 L-120.3,207.5M-113.9,214.7 L-118.1,212.0M-113.9,214.7 L-109.9,216.5 L-107.1,221.0M-113.9,214.7 L-115.0,221.0M-113.9,214.7 L-111.0,210.4 L-106.7,208.4 L-105.5,211.7M-121.9,213.9 L-124.4,214.2M-121.9,213.9 L-118.1,212.0M-121.9,213.9 L-121.3,217.2M-107.1,221.0 L-106.0,227.7M-107.1,221.0 L-109.9,216.5 L-113.9,214.7M-115.0,221.0 L-114.5,224.2M-115.0,221.0 L-113.9,214.7M-115.0,221.0 L-118.6,221.3M-105.5,211.7 L-106.7,208.4 L-111.0,210.4 L-113.9,214.7M-106.0,227.7 L-104.8,233.7M-106.0,227.7 L-107.1,221.0M-106.0,227.7 L-101.1,226.5M-101.1,226.5 L-106.0,227.7M-78.4,316.4 L-85.6,313.7M-85.6,313.7 L-93.7,310.9 L-97.1,308.2M-85.6,313.7 L-78.4,316.4M-85.6,313.7 L-88.0,322.1 L-86.9,325.1 L-79.5,329.5 L-78.0,331.9M-97.1,308.2 L-108.3,296.0M-97.1,308.2 L-93.7,310.9 L-85.6,313.7M-78.0,331.9 L-79.5,329.5 L-86.9,325.1 L-88.0,322.1 L-85.6,313.7M-116.2,290.2 L-125.3,289.6M-116.2,290.2 L-109.2,295.2M-134.3,288.1 L-142.3,286.1M-134.3,288.1 L-125.3,289.6M-125.4,299.2 L-118.5,300.5 L-119.0,304.7M-125.4,299.2 L-125.3,289.6M-125.4,299.2 L-127.0,306.7M383.1,489.4 L383.4,493.5 L388.4,492.7M383.1,489.4 L395.3,487.5M383.1,489.4 L377.7,487.5M388.4,492.7 L383.4,493.5 L383.1,489.4M395.3,487.5 L406.7,493.9M395.3,487.5 L383.1,489.4M377.7,487.5 L383.1,489.4M377.7,487.5 L374.5,484.4 L372.7,479.0M-199.8,237.7 L-193.6,235.5M-199.8,237.7 L-199.7,248.2M-199.8,237.7 L-200.8,232.1M-199.8,237.7 L-209.8,238.6M-193.6,235.5 L-199.8,237.7M-193.6,235.5 L-191.6,238.9M-199.7,248.2 L-199.8,237.7M-200.8,232.1 L-199.4,228.9M-200.8,232.1 L-199.8,237.7M-209.8,238.6 L-215.9,238.2M-209.8,238.6 L-199.8,237.7M399.4,246.1 L392.6,245.0M392.6,245.0 L386.8,244.1M392.6,245.0 L391.8,249.5M392.6,245.0 L399.4,246.1M386.8,244.1 L392.6,245.0M391.8,249.5 L384.9,248.3M391.8,249.5 L392.6,245.0M391.8,249.5 L390.3,257.8M385.6,243.9 L378.0,242.7M385.6,243.9 L384.9,248.3M384.9,248.3 L385.6,243.9M384.9,248.3 L383.8,254.7M384.9,248.3 L377.2,247.1M384.9,248.3 L391.8,249.5M369.3,241.3 L377.1,242.6M369.3,241.3 L368.7,245.7M369.0,241.2 L362.0,240.1M368.7,245.7 L361.1,244.5M368.7,245.7 L376.4,246.9M368.7,245.7 L369.3,241.3M368.7,245.7 L364.7,258.1M361.7,240.1 L361.1,244.5M361.7,240.1 L351.1,238.4M362.0,240.1 L369.0,241.2M361.1,244.5 L368.7,245.7M361.1,244.5 L361.7,240.1M361.1,244.5 L357.0,255.2M351.1,238.4 L361.7,240.1M400.5,244.1 L393.2,242.9M393.2,242.9 L387.2,242.0M393.2,242.9 L400.5,244.1M387.2,242.0 L393.2,242.9M393.3,242.5 L394.4,238.2M386.9,241.9 L379.0,240.5M387.0,241.5 L391.8,220.1M369.6,239.0 L378.1,240.5M369.6,239.0 L371.3,231.5M371.3,231.5 L375.0,215.7M371.3,231.5 L369.6,239.0M325.7,233.0 L331.3,219.8M325.7,233.0 L332.7,234.2M331.3,219.8 L337.2,222.5M331.3,219.8 L334.2,212.4M331.3,219.8 L325.7,233.0M332.7,234.2 L325.7,233.0M319.4,232.1 L326.7,214.6M319.4,232.1 L314.0,231.3M319.4,232.1 L321.7,232.4M326.7,214.6 L328.1,211.1M326.7,214.6 L319.4,232.1M314.0,231.3 L319.4,232.1M321.7,232.4 L319.4,232.1M309.7,23
381380.5 L311.6,226.7M309.7,230.5 L306.6,230.0M578.0,101.2 L575.2,104.1M578.0,101.2 L584.1,90.9 L588.0,77.2M578.0,101.2 L577.0,104.4 L578.1,106.4M572.8,107.5 L575.2,104.1M572.8,107.5 L575.8,105.6 L578.1,106.4M572.8,107.5 L564.5,116.2 L550.4,126.9 L518.9,143.1 L507.9,150.2M578.1,106.4 L580.1,110.2M578.1,106.4 L575.2,104.1M578.1,106.4 L575.8,105.6 L572.8,107.5M578.1,106.4 L577.0,104.4 L578.0,101.2M379.0,529.5 L379.7,534.4 L378.1,543.4M378.1,543.4 L379.7,534.4 L379.0,529.5M378.1,543.4 L371.6,540.9M378.1,543.4 L383.9,543.0 L388.2,540.2M371.6,540.9 L372.6,534.1 L371.1,525.3M371.6,540.9 L368.1,541.2M371.6,540.9 L378.1,543.4M388.2,540.2 L383.9,543.0 L378.1,543.4M108.9,571.3 L106.8,577.5M108.9,571.3 L97.7,567.6M108.9,571.3 L117.7,574.4 L118.7,577.8M97.7,567.6 L108.9,571.3M97.7,567.6 L95.8,573.9M118.7,577.8 L116.3,580.7M118.7,577.8 L117.7,574.4 L108.9,571.3M348.3,204.2 L344.3,205.0M344.3,205.0 L348.3,204.2M349.8,204.2 L355.6,205.6M343.0,197.6 L353.4,186.1M343.0,197.6 L337.2,192.4M343.0,197.6 L348.1,202.1M353.4,186.1 L343.0,197.6M353.4,186.1 L347.6,180.6M353.4,186.1 L359.0,190.9M337.2,192.4 L343.0,197.6M337.2,192.4 L332.7,194.7 L326.9,192.5M337.2,192.4 L347.6,180.6M348.1,202.1 L343.0,197.6M326.9,192.5 L325.3,196.8M326.9,192.5 L333.7,180.4M326.9,192.5 L332.7,194.7 L337.2,192.4M378.2,42.7 L382.1,31.4M378.2,42.7 L382.6,45.8 L384.0,51.2 L383.0,52.8 L380.6,53.5 L376.1,51.4 L372.2,52.3M378.2,42.7 L369.4,38.0M372.2,52.3 L361.3,62.9M372.2,52.3 L363.9,43.0M372.2,52.3 L376.1,51.4 L380.6,53.5 L383.0,52.8 L384.0,51.2 L382.6,45.8 L378.2,42.7M372.2,52.3 L375.2,57.2M369.4,38.0 L378.2,42.7M603.9,645.4 L598.2,645.6M598.2,645.6 L594.0,649.1M598.2,645.6 L603.9,645.4M598.2,645.6 L597.2,643.0M594.0,649.1 L590.7,651.9M594.0,649.1 L598.2,645.6M597.2,643.0 L598.2,645.6M590.7,651.9 L594.0,649.1M590.7,651.9 L603.5,664.3M590.7,651.9 L582.0,637.6M603.5,664.3 L605.6,666.9M603.5,664.3 L590.7,651.9M582.0,637.6 L590.7,651.9M582.0,637.6 L578.2,629.5M582.0,637.6 L584.3,636.7M-30.5,-75.0 L-32.6,-81.4 L-29.3,-88.1 L-34.4,-93.1 L-36.6,-101.7M-30.5,-75.0 L-22.0,-73.2M-30.5,-75.0 L-38.4,-74.6M-36.6,-101.7 L-25.0,-104.3M-36.6,-101.7 L-34.4,-93.1 L-29.3,-88.1 L-32.6,-81.4 L-30.5,-75.0M-22.0,-73.2 L-15.7,-69.7 L-10.1,-64.3M-22.0,-73.2 L-30.5,-75.0M-38.4,-74.6 L-44.4,-74.2M-38.4,-74.6 L-30.5,-75.0M223.2,443.6 L226.0,443.9M223.2,443.6 L209.6,439.2M223.2,443.6 L221.6,449.1 L221.9,456.2 L224.1,459.3M226.0,443.9 L223.2,443.6M209.6,439.2 L223.2,443.6M209.6,439.2 L206.6,446.0M209.6,439.2 L214.3,426.3M224.1,459.3 L221.9,456.2 L221.6,449.1 L223.2,443.6M287.3,192.5 L289.7,203.5M286.6,192.2 L284.0,189.8 L281.6,184.2M287.1,191.4 L284.8,178.8 L276.8,164.9 L279.3,151.2M289.7,203.5 L287.3,192.5M289.7,203.5 L291.6,206.5M280.6,183.6 L275.1,181.1M275.1,181.1 L280.6,183.6M275.1,181.1 L274.0,177.5 L276.7,175.1M281.6,184.2 L284.0,189.8 L286.6,192.2M281.4,183.1 L280.5,178.5 L276.7,175.1M139.2,451.8 L143.4,455.8M139.2,451.8 L127.9,440.8M139.2,451.8 L144.3,447.1 L151.8,446.8M139.2,451.8 L137.7,455.3 L138.7,460.2 L138.1,470.9M143.4,455.8 L139.2,451.8M143.4,455.8 L149.3,460.3 L156.6,460.4M127.9,440.8 L139.2,451.8M127.9,440.8 L119.5,433.1M127.9,440.8 L137.7,431.6M151.8,446.8 L144.3,447.1 L139.2,451.8M138.1,470.9 L138.7,460.2 L137.7,455.3 L139.2,451.8M-155.2,274.2 L-156.9,276.0 L-154.7,279.3M-155.2,274.2 L-145.4,281.6M-155.2,274.2 L-158.4,269.9 L-159.8,264.6M-154.7,279.3 L-157.3,281.4M-154.7,279.3 L-154.0,281.2 L-156.1,283.2 L-157.3,281.4M-154.7,279.3 L-156.9,276.0 L-155.2,274.2M-145.4,281.6 L-142.3,286.1M-145.4,281.6 L-155.2,274.2M-159.8,264.6 L-154.7,264.3M-159.8,264.6 L-158.4,269.9 L-155.2,274.2M-159.8,264.6 L-161.4,253.4M-159.8,264.6 L-164.7,264.9M718.0,91.5 L721.4,89.9 L723.3,87.5M533.5,236.8 L529.4,241.5M533.5,236.8 L536.4,233.6M529.4,241.5 L541.7,252.1M529.4,241.5 L533.5,236.8M529.4,241.5 L526.8,239.5M529.4,241.5 L523.1,248.7M536.4,233.6 L533.5,236.8M536.4,233.6 L542.1,227.0M536.4,233.6 L549.2,244.3M536.4,233.6 L529.2,227.3M454.7,657.9 L453.7,663.6M454.7,657.9 L455.1,654.9M454.7,657.9 L440.9,656.0M455.1,654.9 L454.7,657.9M441.9,647.2 L440.9,656.0M441.9,647.2 L442.6,642.4M441.9,647.2 L447.9,648.1M523.4,331.8 L513.2,336.0M523.4,331.8 L526.4,329.6M523.4,331.8 L526.8,340.1M513.2,336.0 L510.2,337.3M513.2,336.0 L523.4,331.8M526.4,329.6 L523.4,331.8M526.4,329.6 L530.6,326.6M107.6,619.7 L121.8,632.4M107.6,619.7 L111.8,615.4M107.6,619.7 L104.1,624.0M121.8,632.4 L107.6,619.7M121.8,632.4 L124.1,631.4M121.8,632.4 L119.0,633.7M111.8,615.4 L120.1,606.0M111.8,615.4 L107.6,619.7M111.8,615.4 L116.3,619.3M111.8,615.4 L107.6,611.4M104.1,624.0 L107.6,619.7M104.1,624.0 L100.0,627.8M104.1,624.0 L116.2,635.1M124.1,631.4 L126.0,633.9M124.1,631.4 L127.8,629.9M124.1,631.4 L121.8,632.4M119.0,633.7 L121.2,636.9M119.0,633.7 L121.8,632.4M119.0,633.7 L116.2,635.1M537.8,333.0 L539.4,337.0M537.8,333.0 L534.2,324.2M537.4,333.1 L532.8,335.4M539.4,337.0 L537.8,333.0M539.4,337.0 L545.2,334.6M534.2,324.2 L537.8,333.0M534.2,324.2 L533.2,321.5M532.8,335.4 L537.4,333.1M6.2,374.0 L1.7,374.9M6.2,374.0 L3.6,368.0M6.2,374.0 L8.7,384.3M1.7,374.9 L6.2,374.0M3.6,368.0 L6.2,374.0M8.7,384.3 L10.4,389.5M8.7,384.3 L14.7,382.4M8.7,384.3 L6.2,374.0M8.7,384.3 L3.0,384.8 L-3.7,382.2M520.0,316.0 L518.7,313.2M520.0,316.0 L524.5,325.8M520.0,316.0 L518.0,317.6 L517.6,324.9 L512.2,330.1 L511.7,332.3M518.7,313.2 L520.0,316.0M524.5,325.8 L526.2,329.3M524.5,325.8 L520.0,316.0M524.5,325.8 L512.0,332.2M511.7,332.3 L513.2,335.7M511.7,332.3 L512.2,330.1 L517.6,324.9 L518.0,317.6 L520.0,316.0M526.2,329.3 L524.5,325.8M530.6,326.6 L526.4,329.6M530.6,326.6 L533.6,324.6M500.4,467.9 L503.0,460.9M500.4,467.9 L497.1,466.7M500.4,467.9 L498.2,474.0M503.0,460.9 L500.4,467.9M497.1,466.7 L489.1,461.9 L484.8,461.7M497.1,466.7 L494.7,470.3 L492.7,469.8 L485.3,466.2 L484.8,461.7M497.1,466.7 L500.4,467.9M498.2,474.0 L500.4,467.9M484.8,461.7 L489.1,461.9 L497.1,466.7M484.8,461.7 L485.3,466.2 L492.7,469.8 L494.7,470.3 L497.1,466.7M484.8,461.7 L483.0,454.5M483.0,454.5 L484.8,461.7M471.2,245.6 L471.3,242.7M471.1,246.3 L470.9,248.8M470.9,246.0 L465.9,245.7M471.6,246.1 L474.1,246.2M471.3,242.7 L471.2,245.6M253.6,224.9 L248.8,222.7M253.1,226.1 L251.6,229.8M248.8,222.7 L253.6,224.9M249.9,236.6 L246.9,246.8M249.9,236.6 L244.0,235.0M246.9,246.8 L244.6,254.3M246.9,246.8 L249.9,236.6M246.9,246.8 L240.8,244.8M249.9,235.0 L251.6,229.8M244.0,235.0 L240.8,244.8M244.0,235.0 L240.3,234.0M244.0,235.0 L249.9,236.6M244.6,254.3 L243.9,262.2M244.6,254.3 L246.9,246.8M244.6,254.3 L238.1,254.7M244.6,254.3 L250.7,253.8M240.8,244.8 L238.1,254.7M240.8,244.8 L244.0,235.0M240.8,244.8 L246.9,246.8M240.8,244.8 L232.9,242.8M243.9,262.2 L244.6,254.3M243.9,262.2 L240.1,262.4M243.9,262.2 L246.6,262.1M250.7,253.8 L244.6,254.3M240.1,262.4 L237.4,262.6M240.1,262.4 L243.9,262.2M246.6,262.1 L243.9,262.2M246.6,262.1 L251.0,262.8M288.8,314.5 L287.6,318.1 L290.8,321.7M291.5,312.2 L289.1,312.8M290.8,321.7 L287.6,318.1 L288.8,314.5M-202.6,284.9 L-206.7,284.3M-202.6,284.9 L-198.2,285.1M-202.6,284.9 L-203.5,291.4 L-202.3,292.7 L-198.5,292.5 L-197.5,289.6 L-198.2,285.1M-202.6,284.9 L-201.3,279.7 L-201.5,276.8 L-203.3,276.4M-206.7,284.3 L-206.7,288.4M-206.7,284.3 L-202.6,284.9M-206.7,284.3 L-204.2,274.1M-206.7,284.3 L-210.6,283.7 L-214.8,280.4M-198.2,285.1 L-195.1,283.7M-198.2,285.1 L-202.6,284.9M-198.2,285.1 L-197.5,289.6 L-198.5,292.5 L-202.3,292.7 L-203.5,291.4 L-202.6,284.9M-203.3,276.4 L-201.5,276.8 L-201.3,279.7 L-202.6,284.9M489.3,243.8 L491.0,241.7M489.3,243.8 L487.9,247.6M491.0,241.7 L489.3,243.8M491.0,241.7 L496.1,236.3M491.0,241.7 L489.7,233.6 L485.9,226.9M491.0,241.7 L492.1,246.1M488.3,243.0 L479.6,236.2M487.9,247.6 L489.3,243.8M339.5,216.9 L337.2,222.5M339.5,216.9 L343.4,205.7M340.0,217.0 L345.3,218.2M337.2,222.5 L331.3,219.8M337.2,222.5 L339.5,216.9M337.2,222.5 L333.2,232.9M343.4,205.7 L339.5,216.9M345.3,218.2 L340.0,217.0M546.1,223.0 L548.9,224.6M545.4,223.1 L543.3,225.6M497.4,515.9 L498.6,513.2M496.8,517.1 L496.8,519.1 L497.2,517.3M497.2,517.3 L496.8,519.1 L496.8,517.1M491.3,575.1 L493.2,571.6M491.3,575.1 L498.5,576.0M491.3,575.1 L484.6,586.3M490.5,574.8 L484.1,586.0M490.5,574.8 L494.3,566.4M493.2,571.6 L491.3,575.1M493.2,571.6 L494.3,569.0M498.5,576.0 L491.3,575.1M484.6,586.3 L492.7,588.8 L501.5,583.3M484.6,586.3 L491.3,575.1M484.6,586.3 L481.5,592.6M-102.6,267.7
38138L-94.7,270.5M-102.6,267.7 L-109.8,264.7M-102.6,267.7 L-101.2,263.8 L-101.9,261.4M-94.7,270.5 L-102.6,267.7M-94.7,270.5 L-93.3,266.1M-94.7,270.5 L-92.4,272.1M-109.8,264.7 L-102.6,267.7M-109.8,264.7 L-122.6,259.9M-109.8,264.7 L-112.7,270.9M-101.9,261.4 L-101.2,263.8 L-102.6,267.7M-101.9,261.4 L-103.3,260.9 L-104.1,258.6 L-102.6,259.0 L-101.9,261.4M-101.9,261.4 L-102.6,259.0 L-104.1,258.6 L-103.3,260.9 L-101.9,261.4M139.0,680.7 L150.2,681.0M139.0,680.7 L132.8,692.1 L129.2,694.2 L125.9,694.0M139.0,680.7 L133.7,678.8M150.2,681.0 L139.0,680.7M125.9,694.0 L133.7,678.8M125.9,694.0 L120.8,691.0M125.9,694.0 L129.2,694.2 L132.8,692.1 L139.0,680.7M133.7,678.8 L125.9,694.0M133.7,678.8 L127.6,678.1M133.7,678.8 L139.0,680.7M494.3,408.9 L491.1,407.9M542.1,227.0 L536.4,233.6M542.4,227.3 L549.6,233.7M541.6,226.5 L534.7,220.5M543.3,225.6 L545.4,223.1M433.5,282.7 L424.4,284.5M433.5,282.7 L434.4,287.3M424.4,284.5 L433.5,282.7M434.4,287.3 L433.5,282.7M259.3,319.1 L264.3,322.6 L263.1,324.4M259.3,319.1 L264.5,312.6 L268.5,313.2M263.1,324.4 L264.3,322.6 L259.3,319.1M268.5,313.2 L268.0,316.4 L273.1,316.0M268.5,313.2 L264.5,312.6 L259.3,319.1M671.6,668.8 L668.3,676.2M671.6,668.8 L682.8,674.6M671.7,668.5 L673.4,664.9M671.7,668.5 L668.0,666.6 L674.9,652.4M682.8,674.6 L678.7,682.0M682.8,674.6 L690.1,678.8M682.8,674.6 L671.6,668.8M682.8,674.6 L685.9,669.1M678.7,682.0 L682.8,674.6M678.7,682.0 L685.9,685.9M678.7,682.0 L668.3,676.2M690.1,678.8 L685.9,685.9M690.1,678.8 L682.8,674.6M690.1,678.8 L697.0,682.7 L695.4,691.3M685.9,669.1 L682.8,674.6M685.9,685.9 L690.1,678.8M685.9,685.9 L695.4,691.3M685.9,685.9 L678.7,682.0M233.2,21.2 L235.1,17.9M233.2,21.2 L230.9,17.9 L229.7,9.8M233.2,21.2 L234.1,23.4M235.1,17.9 L233.2,21.2M235.1,17.9 L237.2,11.5 L238.6,10.3M235.1,17.9 L237.6,20.7 L234.1,23.4M229.7,9.8 L233.0,5.9M229.7,9.8 L230.9,17.9 L233.2,21.2M238.6,10.3 L237.2,11.5 L235.1,17.9M392.6,416.5 L389.8,415.3M392.6,416.5 L393.5,419.3M392.7,415.7 L394.2,412.4 L396.9,410.9M389.8,415.3 L388.2,414.6 L387.7,415.4 L388.6,416.0 L389.8,415.3M389.8,415.3 L388.6,416.0 L387.7,415.4 L388.2,414.6 L389.8,415.3M389.8,415.3 L392.6,416.5M393.5,419.3 L395.4,424.5M393.5,419.3 L392.6,416.5M393.5,419.3 L390.3,422.5 L388.9,421.8M617.0,337.4 L613.3,340.1M613.3,340.1 L617.0,337.4M613.3,340.1 L610.3,336.0M613.3,340.1 L616.9,344.8M610.3,336.0 L613.3,340.1M610.3,336.0 L607.8,337.7M610.3,336.0 L615.5,332.1M610.3,336.0 L605.8,330.0M616.9,344.8 L613.3,340.1M394.8,291.8 L382.6,289.3M394.8,291.8 L391.7,296.1M394.8,291.8 L400.3,287.5M382.6,289.3 L394.8,291.8M391.7,296.1 L382.7,294.2M391.7,296.1 L389.9,300.4M391.7,296.1 L394.8,291.8M400.3,287.5 L403.2,291.5M400.3,287.5 L402.2,286.2M400.3,287.5 L394.8,291.8M395.9,400.2 L396.3,395.0M395.9,400.2 L387.5,399.7M395.9,400.2 L403.5,399.5M395.9,400.2 L395.5,406.7 L396.7,410.3M396.3,395.
381380 L395.9,400.2M403.5,399.5 L395.9,400.2M403.5,399.5 L403.2,397.9 L405.9,395.3 L407.8,396.5M396.7,410.3 L395.5,406.7 L395.9,400.2M282.3,317.3 L279.2,320.8M279.2,320.8 L282.3,317.3M627.7,605.2 L638.0,610.9M627.7,605.2 L626.9,608.0M627.7,605.2 L630.5,601.1 L633.9,599.1M638.0,610.9 L627.7,605.2M638.0,610.9 L640.2,606.6M638.0,610.9 L636.4,614.1M626.9,608.0 L628.3,615.3 L631.5,619.4 L634.0,620.5M626.9,608.0 L627.7,605.2M633.9,599.1 L630.5,601.1 L627.7,605.2M633.9,599.1 L640.1,598.6M633.9,599.1 L634.1,590.3M640.2,606.6 L638.0,610.9M636.4,614.1 L638.0,610.9M-198.5,265.3 L-198.6,262.4M-198.5,265.3 L-193.3,264.4 L-181.5,259.4M-198.6,262.4 L-198.5,265.3M-198.6,262.4 L-198.8,260.5 L-200.8,260.1 L-200.8,261.2 L-198.6,262.4M-198.6,262.4 L-200.8,261.2 L-200.8,260.1 L-198.8,260.5 L-198.6,262.4M-181.5,259.4 L-176.7,258.7M-181.5,259.4 L-193.3,264.4 L-198.5,265.3M103.3,21.1 L102.5,30.2M103.3,21.1 L101.1,20.6M103.3,21.1 L109.4,22.2M103.3,21.1 L104.8,13.1 L108.9,10.3M102.5,30.2 L103.3,21.1M102.5,30.2 L98.2,50.1M102.5,30.2 L92.5,42.5M101.1,20.6 L103.3,21.1M101.1,20.6 L101.4,16.0 L99.5,12.7M101.1,20.6 L97.1,19.1M109.4,22.2 L103.3,21.1M108.9,10.3 L114.7,7.3M108.9,10.3 L106.8,5.9M108.9,10.3 L104.8,13.1 L103.3,21.1M59.9,687.7 L60.7,683.8M59.9,687.7 L81.2,693.1M59.5,689.7 L58.8,692.7M60.7,683.8 L59.9,687.7M81.2,693.1 L98.0,697.3M81.2,693.1 L79.9,698.7M81.2,693.1 L82.5,687.4M81.2,693.1 L59.9,687.7M98.0,697.3 L81.2,693.1M98.0,697.3 L96.5,702.9M98.0,697.3 L116.6,701.6M98.0,697.3 L99.5,691.6M79.9,698.7 L96.5,702.9M79.9,698.7 L78.0,704.4M79.9,698.7 L81.2,693.1M79.9,698.7 L58.7,693.2M82.5,687.4 L99.5,691.6M82.5,687.4 L61.0,682.1M82.5,687.4 L81.2,693.1M82.5,687.4 L84.0,681.7M96.5,702.9 L98.0,697.3M96.5,702.9 L118.4,708.5M96.5,702.9 L79.9,698.7M96.5,702.9 L95.1,708.6M116.6,701.6 L98.0,697.3M116.6,701.6 L118.7,703.5 L118.4,708.5M116.6,701.6 L107.8,694.2 L99.5,691.6M99.5,691.6 L82.5,687.4M99.5,691.6 L98.0,697.3M99.5,691.6 L107.8,694.2 L116.6,701.6M99.5,691.6 L93.9,684.4M118.4,708.5 L96.5,702.9M118.4,708.5 L119.3,715.7 L117.7,717.2 L111.4,712.1 L95.1,708.6M118.4,708.5 L118.7,703.5 L116.6,701.6M16.4,386.5 L14.7,382.4M16.4,386.5 L20.0,392.3M-65.4,656.4 L-61.5,653.8M-65.4,656.4 L-60.4,664.5M-65.4,656.4 L-68.5,650.6 L-67.9,644.9M-61.5,653.8 L-65.4,656.4M-60.4,664.5 L-65.4,656.4M-60.4,664.5 L-57.2,668.3 L-54.0,668.4M-60.4,664.5 L-52.8,657.9M-67.9,644.9 L-68.5,650.6 L-65.4,656.4M-217.6,254.0 L-214.9,257.1M-214.9,257.1 L-217.6,254.0M-214.9,257.1 L-217.2,260.9M-213.2,258.1 L-211.0,256.7M-213.2,258.1 L-212.3,260.6M-217.2,260.9 L-214.9,257.1M-217.2,260.9 L-217.8,262.4 L-218.9,262.4 L-218.2,260.6 L-217.2,260.9M-217.2,260.9 L-218.2,260.6 L-218.9,262.4 L-217.8,262.4 L-217.2,260.9M-211.0,256.7 L-213.2,258.1M-211.0,256.7 L-213.1,253.8M-211.0,256.7 L-206.5,262.4 L-200.7,265.0M-211.0,256.7 L-208.7,255.2 L-205.7,257.3M-212.3,260.6 L-213.2,258.1M-212.3,260.6 L-212.4,262.4 L-210.9,262.7 L-211.0,261.8 L-212.3,260.6M-212.3,260.6 L-211.0,261.8 L-210.9,262.7 L-212.4,262.4 L-212.3,260.6M-213.1,253.8 L-211.0,256.7M-213.1,253.8 L-211.0,252.0M-213.1,253.8 L-216.6,248.9 L-217.2,244.6M-205.7,257.3 L-208.7,255.2 L-211.0,256.7M435.8,472.8 L441.2,469.3M479.0,504.8 L477.8,507.7M479.0,504.8 L487.5,507.8M479.0,504.8 L470.6,501.4 L459.6,494.0M477.8,507.7 L479.0,504.8M477.8,507.7 L476.0,512.1M477.8,507.7 L474.9,506.9 L472.9,512.5M487.5,507.8 L492.4,510.2M487.5,507.8 L479.0,504.8M459.6,494.0 L455.7,490.8M459.6,494.0 L457.8,496.4M459.6,494.0 L470.6,501.4 L479.0,504.8M492.4,510.2 L492.0,512.2 L493.0,512.8 L493.7,512.0 L492.4,510.2M492.4,510.2 L493.7,512.0 L493.0,512.8 L492.0,512.2 L492.4,510.2M492.4,510.2 L487.5,507.8M231.6,231.5 L234.3,221.9M231.6,231.5 L225.7,229.9M231.6,231.5 L235.9,232.7M234.3,221.9 L231.6,231.5M225.7,229.9 L231.6,231.5M235.9,232.7 L233.6,240.8M235.9,232.7 L231.6,231.5M235.9,232.7 L240.3,234.0M-46.2,570.4 L-43.0,577.1M-43.0,577.1 L-39.1,580.2M-43.0,577.1 L-44.8,579.6M-43.0,577.1 L-46.2,570.4M-39.1,580.2 L-43.0,577.1M-39.1,580.2 L-37.3,581.7M-44.8,579.6 L-44.0,584.9M-44.8,579.6 L-48.5,579.1 L-48.4,582.0 L-44.0,584.9M-44.8,579.6 L-43.0,577.1M-44.0,584.9 L-44.8,579.6M-44.0,584.9 L-48.4,582.0 L-48.5,579.1 L-44.8,579.6M-44.6,587.0 L-52.5,585.3M-42.9,587.8 L-39.3,590.7M503.7,581.9 L502.0,579.6M503.7,581.9 L501.5,583.3M502.0,579.6 L503.7,581.9M501.5,583.3 L503.7,581.9M501.5,583.3 L492.7,588.8 L484.6,586.3M512.6,595.0 L512.5,597.9M512.6,595.0 L515.6,596.5 L518.3,595.9M512.5,597.9 L512.6,595.0M518.3,595.9 L515.6,596.5 L512.6,595.0M512.4,603.0 L512.3,599.7M510.6,603.5 L508.0,604.2M512.3,599.7 L512.4,603.0M536.7,630.9 L534.7,632.3M537.0,631.9 L537.7,635.3M535.1,629.5 L533.1,627.6M534.7,632.3 L536.7,630.9M537.0,630.7 L539.1,629.1M531.0,649.2 L536.6,662.1 L537.9,671.4M531.0,649.2 L536.3,639.7M531.0,649.2 L526.1,649.2M537.9,671.4 L536.6,662.1 L531.0,649.2M536.3,639.7 L531.0,649.2M526.1,649.2 L518.3,653.5M526.1,649.2 L525.0,645.5M526.1,649.2 L531.0,649.2M-31.8,659.4 L-41.7,646.9M-31.8,659.4 L-41.7,669.0M-31.8,659.4 L-25.5,653.1M-41.7,646.9 L-31.8,659.4M-41.7,646.9 L-52.8,657.9M-4
381381.7,646.9 L-28.6,634.1M-41.7,669.0 L-52.8,657.9M-41.7,669.0 L-31.8,659.4M-41.7,669.0 L-56.1,683.0M-25.5,653.1 L-23.8,651.5M-25.5,653.1 L-31.8,659.4M-42.8,645.6 L-46.4,641.7M-52.8,657.9 L-41.7,669.0M-52.8,657.9 L-41.7,646.9M-52.8,657.9 L-60.4,664.5M-28.6,634.1 L-41.7,646.9M-28.6,634.1 L-36.8,624.6M-28.6,634.1 L-20.3,625.7M-50.1,642.3 L-46.4,641.7M-46.4,641.7 L-50.1,642.3M-46.4,641.7 L-42.8,645.6M395.0,-71.5 L387.7,-74.0 L383.8,-73.9 L374.1,-70.2 L375.7,-64.8M395.0,-71.5 L388.5,-77.4 L379.4,-77.4 L375.1,-83.4 L376.8,-85.1 L387.7,-84.9M375.7,-64.8 L374.1,-70.2 L383.8,-73.9 L387.7,-74.0 L395.0,-71.5M387.7,-84.9 L387.4,-88.3 L384.8,-91.9M387.7,-84.9 L391.6,-83.8M387.7,-84.9 L376.8,-85.1 L375.1,-83.4 L379.4,-77.4 L388.5,-77.4 L395.0,-71.5M528.6,521.5 L531.7,516.8M548.2,541.2 L555.1,535.5M621.6,597.0 L626.9,582.3M615.6,578.3 L611.4,576.8M615.6,578.3 L626.9,582.3M644.7,597.5 L647.5,594.4M644.7,597.5 L640.1,598.6M644.7,597.5 L649.6,608.5M649.7,591.4 L647.5,594.4M662.4,604.3 L662.8,601.2M662.4,604.3 L655.3,601.6 L647.5,594.4M662.8,601.2 L663.6,598.5M662.8,601.2 L662.4,604.3M664.0,604.6 L669.9,605.7M669.9,605.7 L687.2,608.9M669.9,605.7 L664.0,604.6M669.9,605.7 L700.6,640.9M687.2,608.9 L669.9,605.7M687.2,608.9 L717.3,643.7M687.2,608.9 L704.3,612.1M700.6,640.9 L712.3,654.5M700.6,640.9 L669.9,605.7M30.4,639.4 L42.3,636.4M30.4,639.4 L35.3,644.1M30.4,639.4 L39.9,626.9M42.3,636.4 L30.4,639.4M42.3,636.4 L47.8,635.0M42.3,636.4 L43.7,642.0M42.3,636.4 L39.9,626.9M35.3,644.1 L40.6,648.6M35.3,644.1 L43.7,642.0M35.3,644.1 L30.4,639.4M39.9,626.9 L44.4,621.2M39.9,626.9 L42.3,636.4M39.9,626.9 L30.4,639.4M40.6,648.6 L46.4,653.4M40.6,648.6 L35.3,644.1M40.6,648.6 L56.6,644.8M43.7,642.0 L42.3,636.4M43.7,642.0 L35.3,644.1M43.7,642.0 L55.1,639.0M46.4,653.4 L51.7,657.9M46.4,653.4 L40.6,648.6M46.4,653.4 L58.0,650.3M56.6,644.8 L40.6,648.6M56.6,644.8 L55.1,639.0M51.7,657.9 L58.1,663.2M51.7,657.9 L46.4,653.4M51.7,657.9 L59.4,655.7M58.0,650.3 L63.9,648.8M58.0,650.3 L46.4,653.4M58.0,650.3 L59.4,655.7M58.0,650.3 L56.8,645.5M58.1,663.2 L51.7,657.9M58.1,663.2 L61.9,665.4M59.4,655.7 L61.1,662.2M59.4,655.7 L58.0,650.3M59.4,655.7 L65.0,654.2M59.4,655.7 L51.7,657.9M61.9,665.4 L61.1,662.2M61.9,665.4 L58.1,663.2M62.4,667.6 L63.3,671.6M61.1,662.2 L61.9,665.4M61.1,662.2 L59.4,655.7M40.4,64.4 L50.1,73.6M40.4,64.4 L37.2,68.4 L36.8,78.8M40.4,64.4 L35.7,60.3 L30.8,63.7M50.1,73.6 L40.4,64.4M50.1,73.6 L54.3,67.8 L55.2,61.9M50.1,73.6 L55.0,78.2M36.8,78.8 L37.2,68.4 L40.4,64.4M30.8,63.7 L35.7,60.3 L40.4,64.4M55.2,61.9 L54.3,67.8 L50.1,73.6M55.0,78.2 L65.0,87.8M55.0,78.2 L50.1,73.6M65.0,87.8 L59.2,93.8M65.0,87.8 L55.0,78.2M65.0,87.8 L70.1,92.7M59.2,93.8 L65.0,87.8M59.2,93.8 L44.3,79.5M59.2,93.8 L53.8,98.6 L41.4,97.3M70.1,92.7 L75.2,97.5M70.1,92.7 L65.8,97.3M70.1,92.7 L65.0,87.8M75.2,97.5 L70.1,92.7M65.8,97.3 L70.1,92.7M76.0,98.0 L75.5,99.4 L77.6,104.4 L82.9,105.2 L87.8,108.7M76.0,98.0 L82.2,95.7M87.8,108.7 L68.2,115.2M87.8,108.7 L90.5,109.7 L97.3,108.2M87.8,108.7 L82.9,105.2 L77.6,104.4 L75.5,99.4 L76.0,98.0M82.2,95.7 L85.2,94.3M82.2,95.7 L76.0,98.0M68.2,115.2 L66.9,112.6M68.2,115.2 L87.8,108.7M68.2,115.2 L52.2,120.8 L50.5,120.2M97.3,108.2 L90.5,109.7 L87.8,108.7M97.3,108.2 L89.3,92.3M97.3,108.2 L101.0,114.1M532.1,205.5 L535.0,208.1M532.1,205.5 L526.9,201.2M526.9,201.2 L532.1,205.5M526.9,201.2 L523.2,198.1M777.3,590.5 L781.2,587.2M777.3,590.5 L773.1,594.1M777.3,590.5 L748.6,557.7M781.2,587.2 L774.9,579.6M781.2,587.2 L783.1,585.6M781.2,587.2 L777.3,590.5M773.1,594.1 L777.3,590.5M773.1,594.1 L769.7,597.1M748.6,557.7 L777.3,590.5M748.6,557.7 L746.3,569.9M748.6,557.7 L743.6,550.1M746.3,569.9 L769.7,597.1M746.3,569.9 L745.9,573.4M746.3,569.9 L748.6,557.7M743.6,550.1 L750.2,544.3M743.6,550.1 L748.6,557.7M743.6,550.1 L725.5,530.6M17.0,44.7 L20.8,48.0M17.0,44.7 L14.3,47.0 L8.0,48.6M17.0,44.7 L24.0,35.6M20.8,48.0 L17.0,44.7M8.0,48.6 L-6.2,42.9M8.0,48.6 L7.1,55.2 L5.3,58.4 L-2.8,61.4M8.0,48.6 L14.3,47.0 L17.0,44.7M24.0,35.6 L17.0,44.7M24.0,35.6 L27.8,28.5 L31.4,17.3M24.0,35.6 L30.0,39.5 L32.9,43.2M361.3,62.9 L372.2,52.3M361.3,62.9 L358.3,65.5 L349.8,56.5M361.3,62.9 L365.6,67.3 L375.2,57.2M346.2,59.9 L349.8,56.5M346.2,59.9 L344.6,62.2M377.9,86.3 L373.4,81.8M373.4,81.8 L377.9,86.3M373.4,81.8 L384.5,70.9 L390.2,67.5 L398.8,56.0M373.4,81.8 L370.3,78.5M398.8,56.0 L390.2,67.5 L384.5,70.9 L373.4,81.8M370.3,78.5 L373.4,81.8M370.3,78.5 L368.1,78.6 L356.2,89.7M-3.7,382.2 L-5.1,384.4M-3.7,382.2 L-11.2,375.9 L-17.4,376.1 L-22.5,381.1 L-24.0,389.5M-3.7,382.2 L3.0,384.8 L8.7,384.3M-5.1,384.4 L-3.7,382.2M-24.0,389.5 L-22.5,381.1 L-17.4,376.1 L-11.2,375.9 L-3.7,382.2M260.7,500.2 L253.3,515.1M260.7,500.2 L263.3,495.4M260.7,500.2 L243.4,491.4M-193.4,210.3 L-200.8,211.7M-193.4,210.3 L-181.6,212.8M-193.5,209.8 L-193.5,205.2M-200.8,211.7 L-202.4,206.5M-200.8,211.7 L-209.2,216.2M-200.8,211.7 L-193.4,210.3M-181.6,212.8 L-183.0,218.5M-181.6,212.8 L-193.4,210.3M-181.6,212.8 L-173.6,215.5 L-171.4,217.7M489.0,164.2 L487.3,166.8M489.0,164.2 L493.6,168.5M489.0,164.2 L492.7,162.3M487.3,166.8 L491.8,170.7M487.3,166.8 L489.0,164.2M493.6,168.5 L491.8,170.7M493.6,168.5 L496.2,165.4M493.6,168.5 L489.0,164.2M492.7,162.3 L497.6,160.7 L511.2,170.4M492.7,162.3 L489.0,164.2M491.8,170.7 L487.3,166.8M491.8,170.7 L493.6,168.5M491.8,170.7 L494.9,173.7M496.2,165.4 L494.2,163.8M496.2,165.4 L493.6,168.5M496.2,165.4 L497.8,165.3 L502.3,168.6 L502.5,171.7 L504.7,174.8M543.8,369.0 L541.5,365.9M543.8,369.0 L540.3,371.5M543.8,369.0 L548.2,372.7M541.5,365.9 L543.8,369.0M540.3,371.5 L543.8,369.0M540.3,371.5 L536.4,375.8 L534.4,382.8M548.2,372.7 L553.8,374.8M548.2,372.7 L543.8,369.0M553.8,374.8 L548.2,372.7M553.8,374.8 L555.6,373.0 L560.9,375.3 L562.6,378.3M553.8,374.8 L562.4,378.7M577.4,472.5 L577.9,477.1M577.4,472.5 L576.8,465.6M578.6,472.4 L580.2,476.4 L583.2,477.3 L584.0,475.3M578.6,472.4 L578.7,468.6 L579.8,467.5 L584.6,468.6 L584.7,470.1M577.9,477.1 L584.0,478.2 L585.1,475.4M577.9,477.1 L577.4,472.5M576.8,465.6 L586.7,467.9M576.8,465.6 L577.4,472.5M576.8,465.6 L575.9,458.3M584.0,475.3 L583.2,477.3 L580.2,476.4 L578.6,472.4M584.7,470.1 L584.6,468.6 L579.8,467.5 L578.7,468.6 L578.6,472.4M41.2,313.1 L38.8,311.1M35.7,330.9 L34.7,327.1M26.4,327.3 L34.7,327.1M-25.6,350.8 L-30.5,349.2M-25.6,350.8 L-28.6,357.7M-25.6,350.8 L-22.1,347.4 L-20.3,342.2M-30.5,349.2 L-25.6,350.8M-28.6,357.7 L-25.6,350.8M-20.3,342.2 L-21.0,338.9M-20.3,342.2 L-32.7,342.5 L-46.4,335.6M-20.3,342.2 L-14.5,342.3M-20.3,342.2 L-22.1,347.4 L-25.6,350.8M75.2,2.5 L78.5,6.6M75.2,2.5 L82.8,-7.4M75.2,2.5 L69.3,3.9 L63.7,1.8M78.5,6.6 L75.2,2.5M82.8,-7.4 L75.2,2.5M63.7,1.8 L65.3,-4.7 L62.9,-14.2M63.7,1.8 L56.8,8.4M63.7,1.8 L69.3,3.9 L75.2,2.5M313.4,328.6 L306.1,321.6M313.4,328.6 L319.4,333.7M306.1,321.6 L303.9,319.2M306.1,321.6 L313.4,328.6M319.4,333.7 L321.3,332.1M319.4,333.7 L313.4,328.6M304.7,338.8 L310.4,332.8M304.7,338.8 L295.1,348.7M304.7,338.8 L306.7,340.6M310.4,332.8 L304.7,338.8M306.7,340.6 L310.6,344.1M306.7,340.6 L304.7,338.8M292.9,347.0 L295.1,348.7M292.9,347.0 L294.9,344.6M292.9,347.0 L289.8,344.4M275.7,369.6 L274.2,371.5M275.7,369.6 L295.1,348.7M258.6,396.0 L256.4,401.4 L249.0,410.1 L254.3,418.8M258.6,396.0 L266.1,402.1M258.6,396.0 L261.9,384.1M254.3,418.8 L257.5,424.1 L253.9,428.2M254.3,418.8 L249.0,410.1 L256.4,401.4 L258.6,396.0M266.1,402.1 L270.3,404.4 L269.0,408.1M266.1,402.1 L258.6,396.0M261.9,384.1 L262.1,380.3M261.9,384.1 L258.6,396.0M294.9,344.6 L296.0,343.5 L294.7,342.5 L293.7,343.5 L294.9,344.6M294.9,344.6 L293.7,343.5 L294.7,342.5 L296.0,343.5 L294.9,344.6M294.9,344.6 L292.9,347.0M289.8,344.4 L287.5,342.4M289.8,344.4 L286.9,347.4M289.8,344.4 L292.9,347.0M336.0,274.1 L331.9,272.4M336.0,274.1 L340.2,264.5M336.0,274.1 L337.1,275.5 L336.5,278.7M340.2,264.5 L336.0,274.1M340.2,264.5 L344.7,255.6M340.2,264.5 L331.9,260.5M336.5,278.7 L337.1,275.5 L336.0,274.1M304.6,260.7 L302.4,259.9M304.6,260.7 L307.7,261.8M310.1,252.5 L307.7,261.8M310.1,252.5 L311.5,246.8M310.1,252.5 L306.6,251.5M310.1,252.5 L314.4,253.7M290.5,255.6 L294.1,256.8M290.5,255.6 L287.8,263.1M290.5,255.6 L293.6,247.8M294.1,256.8 L290.5,255.6M294.1,256.8 L301.9,259.7M287.8,263.1 L286.5,267.3M287.8,263.1 L290.5,255.6M287.8,263.1 L296.0,266.1M293.6,247.8 L296.0,248.5M293.6,247.8 L290.5,255.6M293.6,247.8 L296.0,241.7M362.9,286.5 L354.5,283.1M354.5,283.1 L362.9,286.5M354.5,283.1 L350.9,292.1M354.5,283.1 L358.6,272.9M350.9,292.1 L359.0,295.3M350.9,292.1 L354.5,283.1M358.6,272.9 L354.5,283.1M358.6,272.9 L362.0,265.0M358.6,272.9 L350.9,270.1M358.6,272.9 L365.1,275.6M42.4,529.3 L34.2,524.5M42.4,529.3 L48.2,532.7M42.4,529.3 L47.4,518.3M34.2,524.5 L42.4,529.3M34.2,524.5 L37.7,519.8M34.2,524.5 L21.3,517.3M48.2,532.7 L42.4,529.3M48.2,532.7 L53.1,525.4M37.7,519.8 L24.9,509.2M37.7,519.8 L34.2,524.5M37.7,519.8 L41.4,515.4M21.3,517.3 L34.2,524.5M548.2,236.0 L550.4,233.4M550.4,233.4 L548.2,236.0M552.9,240.2 L558.1,233.4M558.1,233.4 L552.9,240.2M558.1,233.4 L556.3,230.6M325.9,476.7 L320.1,497.7M325.9,476.7 L334.5,479.2M325.9,476.7 L311.9,474.4M320.1,497.7 L325.9,476.7M334.5,479.2 L325.9,476.7M311.9,474.4 L308.8,474.1M311.9,474.4 L308.7,480.7M311.9,474.4 L325.9,476.7M495.4,107.9 L483.0,104.2M495.4,107.9 L493.2,116.5M495.4,107.9 L500.0,102.1M483.0,104.2 L484.1,100.9M483.0,104.2 L476.9,111.0M483.0,104.2 L495.4,107.9M493.2,116.5 L487.1,113.5M493.2,116.5 L493.2,120.6 L491.2,123.0M493.2,116.5 L495.4,107.9M500.0,102.1 L495.4,107.9M534.1,513.4 L537.4,508.7M534.1,513.4 L531.7,516.8M537.4,508.7 L534.1,513.4M531.7,516.8 L534.1,513.4M531.7,516.8 L528.6,521.5M533.4,512.9 L531.1,516.4M533.4,512.9 L536.8,508.2M507.0,277.8 L502.3,273.6M507.0,277.8 L512.1,282.5M507.0,277.8 L511.7,272.2M507.0,277.8 L501.2,284.7 L497.5,281.9M502.3,273.6 L507.0,277.8M502.3,273.6 L504.5,270.9M502.3,273.6 L499.6,278.2M512.1,282.5 L507.0,277.8M512.1,282.5 L505.3,290.3M512.1,282.5 L514.3,280.1M511.7,272.2 L516.2,267.0M511.7,272.2 L507.0,277.8M497.5,281.9 L496.0,284.1M497.5,281.9 L501.2,284.7 L507.0,277.8M497.5,281.9 L499.6,278.2M511.3,272.0 L507.9,269.2M446.0,222.3 L440.7,219.5M446.0,222.3 L441.6,226.5 L438.2,226.5M446.0,222.3 L449.0,218.7 L449.9,215.3 L446.4,214.7M440.7,219.5 L437.3,218.8M440.7,219.5 L442.7,211.0M440.7,219.5 L446.0,222.3M438.2,226.5 L435.3,225.9M438.2,226.5 L441.6,226.5 L446.0,222.3M446.4,214.7 L449.9,215.3 L449.0,218.7 L446.0,222.3M437.3,218.8 L432.0,217.5M437.3,218.8 L440.7,219.5M442.7,211.0 L440.7,219.5M419.6,214.6 L419.0,217.4M419.6,214.6 L432.0,217.5M419.6,214.6 L420.5,210.8M419.0,217.4 L418.0,222.0M419.0,217.4 L419.6,214.6M432.0,217.5 L437.3,218.8M432.0,217.5 L419.6,214.6M420.5,210.8 L421.2,208.3M420.5,210.8 L419.6,214.6M100.7,594.4 L102.3,590.1M100.7,594.4 L100.9,602.4M100.7,594.4 L91.6,593.5M91.6,593.5 L100.7,594.4M40.9,-28.1 L30.5,-15.5M40.9,-28.1 L36.1,-31.8M40.9,-28.1 L44.6,-32.5 L45.9,-37.7M30.5,-15.5 L40.9,-28.1M30.5,-15.5 L27.3,-18.3M30.5,-15.5 L49.1,0.4M36.1,-31.8 L40.9,-28.1M45.9,-37.7 L44.6,-32.5 L40.9,-28.1M472.8,415.4 L469.2,417.8M472.8,415.4 L475.3,419.5 L474.7,423.5M472.8,415.4 L477.6,412.0M469.2,417.8 L463.3,422.0M469.2,417.8 L472.8,415.4M469.2,417.8 L461.1,405.9M474.7,423.5 L475.4,427.7 L477.9,430.1M474.7,423.5 L475.3,419.5 L472.8,415.4M477.6,412.0 L472.8,415.4M-222.8,248.8 L-220.4,247.4 L-219.9,248.4 L-221.4,249.7M-222.8,248.8 L-223.7,251.9 L-222.3,251.8 L-221.4,249.7M-222.8,248.8 L-225.5,247.3M545.2,394.9 L534.4,389.7M534.4,389.7 L545.2,394.9M525.0,385.5 L523.4,391.6M524.3,385.2 L514.0,382.3M516.6,372.7 L514.0,382.3M504.1,378.7 L514.0,382.3M451.3,713.0 L450.8,710.3M451.3,713.0 L454.7,710.6M451.4,713.8 L451.8,716.2M450.8,710.3 L451.3,713.0M454.7,710.6 L451.3,713.0M450.9,725.5 L450.4,729.0M450.9,725.5 L453.5,724.2M450.4,729.0 L450.9,725.5M453.5,724.2 L456.8,722.0M453.5,724.2 L450.9,725.5M290.8,171.7 L285.4,169.1M290.8,171.7 L290.7,176.2 L293.6,186.5M290.8,171.7 L295.2,167.9 L307.8,167.8M285.4,169.1 L290.8,171.7M293.6,186.5 L309.0,186.6M293.6,186.5 L290.7,176.2 L290.8,171.7M293.6,186.5 L292.6,188.0 L293.7,190.7 L299.1,194.6M307.8,167.8 L308.8,176.5M307.8,167.8 L295.2,167.9 L290.8,171.7M307.8,167.8 L314.1,168.0 L316.0,170.0 L317.7,183.7 L316.2,188.7M579.6,-27.9 L580.4,-30.7 L575.7,-36.3 L583.6,-45.4M579.6,-27.9 L576.7,-28.9 L567.7,-28.1M579.6,-27.9 L582.7,-26.6M579.3,-26.8 L582.4,-25.3M579.3,-26.8 L577.6,-20.8 L577.9,-14.6 L584.0,-8.9M579.3,-26.8 L571.7,-27.8 L568.2,-27.0M582.4,-25.3 L585.0,-24.1M582.4,-25.3 L579.3,-26.8M584.0,-8.9 L581.6,-6.5M584.0,-8.9 L587.3,-8.2M584.0,-8.9 L577.9,-14.6 L577.6,-20.8 L579.3,-26.8M568.2,-27.0 L569.3,-21.7 L568.9,-9.4M568.2,-27.0 L571.7,-27.8 L579.3,-26.8M581.6,-6.5 L584.0,-8.9M587.3,-8.2 L584.0,-8.9M13.8,105.5 L20.4,98.8M13.8,105.5 L17.8,109.9M13.8,105.5 L6.6,112.6 L5.9,118.3M20.4,98.8 L25.9,93.5M20.4,98.8 L13.8,105.5M20.4,98.8 L26.2,104.9M17.8,109.9 L13.8,105.5M5.9,118.3 L6.6,127.2M5.9,118.3 L6.6,112.6 L13.8,105.5M5.9,118.3 L10.7,118.6 L15.8,121.4 L22.5,120.5M589.9,455.7 L576.9,452.6M589.9,455.7 L588.8,460.7M589.9,455.7 L590.7,450.0 L578.2,446.9M576.9,452.6 L589.9,455.7M576.9,452.6 L576.3,455.5M576.9,452.6 L577.8,448.7M576.9,452.6 L569.1,451.9M588.8,460.7 L593.9,461.9M588.8,460.7 L575.9,458.3M588.8,460.7 L589.9,455.7M578.2,446.9 L579.1,444.1M578.2,446.9 L590.7,450.0 L589.9,455.7M576.3,455.5 L576.9,452.6M577.8,448.7 L576.9,452.6M569.1,451.9 L576.9,452.6M569.1,451.9 L568.6,451.0 L567.8,451.6 L568.3,452.4 L569.1,451.9M569.1,451.9 L568.3,452.4 L567.8,451.6 L568.6,451.0 L569.1,451.9M264.7,337.2 L269.2,341.2M264.7,337.2 L268.4,333.0M264.7,337.2 L260.7,335.0M269.2,341.2 L264.7,337.2M269.2,341.2 L271.3,343.0M269.2,341.2 L273.3,336.9M268.4,333.0 L264.7,337.2M260.7,335.0 L257.4,334.5M260.7,335.0 L264.7,337.2M260.7,335.0 L261.3,332.7 L265.0,328.6M239.4,328.4 L247.3,331.5M239.4,328.4 L237.5,335.2M239.4,328.4 L241.5,320.7M425.9,292.6 L420.4,285.4M425.9,292.6 L421.7,294.2M425.9,292.6 L434.7,289.1M420.4,285.4 L425.9,292.6M434.7,289.1 L425.9,292.6M434.7,289.1 L436.5,287.0M312.6,96.1 L314.0,98.6M312.6,96.1 L311.0,94.3M314.0,98.6 L314.4,101.1M314.0,98.6 L312.6,96.1M311.0,94.3 L312.6,96.1M314.4,101.1 L313.0,106.3M314.4,101.1 L314.0,98.6M677.5,523.0 L66
381385.1,511.1M677.5,523.0 L682.7,530.3M677.5,523.0 L679.9,522.2 L684.3,517.0 L689.6,516.3 L697.0,523.2M665.1,511.1 L677.5,523.0M665.1,511.1 L666.0,507.4 L672.3,501.2 L671.6,499.2 L668.9,498.2M682.7,530.3 L677.5,523.0M697.0,523.2 L697.9,525.5 L698.5,525.2 L698.3,524.4 L697.0,523.2M697.0,523.2 L698.3,524.4 L698.5,525.2 L697.9,525.5 L697.0,523.2M697.0,523.2 L689.6,516.3 L684.3,517.0 L679.9,522.2 L677.5,523.0M649.6,608.5 L653.4,607.8M649.6,608.5 L644.7,597.5M649.6,608.5 L648.8,614.4 L644.8,619.4M653.4,607.8 L649.6,608.5M644.8,619.4 L648.8,614.4 L649.6,608.5M644.8,619.4 L638.9,621.3M516.6,175.1 L521.6,168.9M516.6,175.1 L511.2,170.4M518.3,653.5 L526.1,649.2M518.3,653.5 L509.9,658.0M518.3,653.5 L524.5,664.4M509.9,658.0 L518.3,653.5M509.9,658.0 L499.3,663.4M509.9,658.0 L505.7,649.6M509.9,658.0 L513.8,666.2M524.5,664.4 L518.3,653.5M75.9,-32.7 L81.8,-34.3 L96.5,-43.5M75.9,-32.7 L68.3,-32.1 L62.8,-28.4 L60.5,-22.8 L62.9,-14.2M75.9,-32.7 L75.4,-38.5 L72.8,-43.6M96.5,-43.5 L81.8,-34.3 L75.9,-32.7M62.9,-14.2 L68.7,-16.1M62.9,-14.2 L60.5,-22.8 L62.8,-28.4 L68.3,-32.1 L75.9,-32.7M62.9,-14.2 L65.3,-4.7 L63.7,1.8M72.8,-43.6 L75.4,-38.5 L75.9,-32.7M68.7,-16.1 L62.9,-14.2M56.8,8.4 L63.7,1.8M56.8,8.4 L62.6,17.2 L67.6,28.1M56.8,8.4 L53.6,4.7M67.6,28.1 L71.6,43.3M67.6,28.1 L62.6,17.2 L56.8,8.4M430.1,549.1 L434.8,548.8M434.8,548.8 L438.0,548.6M434.8,548.8 L430.1,549.1M438.0,548.6 L441.6,548.3M438.0,548.6 L434.8,548.8M438.0,548.6 L438.1,545.8M438.0,548.6 L438.4,553.3M441.6,548.3 L438.0,548.6M438.1,545.8 L438.0,548.6M438.1,545.8 L438.8,542.5M438.4,553.3 L438.0,548.6M516.9,243.1 L517.9,248.6M515.9,242.0 L506.7,234.4M515.9,242.0 L511.5,247.1M518.0,239.9 L521.9,235.4M518.0,249.0 L522.7,249.1M518.0,249.0 L515.5,250.8M517.9,248.6 L516.9,243.1M522.7,249.1 L518.0,249.0M515.5,250.8 L518.0,249.0M54.9,614.5 L48.9,613.7M55.0,614.8 L59.4,632.0M55.3,614.6 L60.9,615.1M48.9,613.7 L54.9,614.5M59.4,632.0 L63.9,648.8M59.4,632.0 L55.0,614.8M59.4,632.0 L53.7,633.5M59.4,632.0 L64.9,630.6M63.9,648.8 L59.4,632.0M63.9,648.8 L69.4,647.4M63.9,648.8 L58.0,650.3M53.7,633.5 L54.6,636.9M53.7,633.5 L51.9,626.6M53.7,633.5 L59.4,632.0M64.9,630.6 L69.4,647.4M64.9,630.6 L61.0,615.3M64.9,630.6 L59.4,632.0M64.9,630.6 L70.5,629.2M69.4,647.4 L73.7,664.7M69.4,647.4 L64.9,630.6M69.4,647.4 L74.6,646.1M69.4,647.4 L63.9,648.8M71.3,678.5 L77.4,680.1M71.3,678.5 L68.6,668.1M71.3,678.5 L62.3,676.2M77.4,680.1 L73.7,664.7M77.4,680.1 L84.0,681.7M77.4,680.1 L71.3,678.5M68.6,668.1 L73.7,664.7M68.6,668.1 L71.3,678.5M68.6,668.1 L67.7,664.4M62.3,676.2 L61.0,682.1M62.3,676.2 L62.9,673.4M62.3,676.2 L71.3,678.5M676.5,576.5 L677.0,578.9M677.0,578.9 L676.5,576.5M677.0,578.9 L676.8,582.0M276.0,315.7 L279.5,310.3 L281.7,310.0 L282.9,311.1M276.0,315.7 L270.2,313.1M276.0,315.7 L278.2,320.7M282.9,311.1 L281.7,310.0 L279.5,310.3 L276.0,315.7M270.2,313.1 L269.9,309.6M270.2,313.1 L276.0,315.7M278.2,320.7 L276.0,315.7M179.3,-111.7 L173.2,-107.5M173.2,-107.5 L168.3,-106.8 L158.9,-108.3M173.2,-107.5 L179.3,-111.7M173.2,-107.5 L175.2,-103.0 L179.4,-102.7M158.9,-108.3 L150.2,-108.2 L143.3,-103.1M158.9,-108.3 L168.3,-106.8 L173.2,-107.5M179.4,-102.7 L175.2,-103.0 L173.2,-107.5M148.1,-88.7 L145.8,-99.7 L143.3,-103.1M102.1,-87.9 L94.2,-82.8M102.1,-87.9 L109.5,-95.7M102.1,-87.9 L108.5,-83.2 L119.2,-82.5 L122.8,-80.3 L124.1,-78.6 L120.5,-74.7 L118.4,-69.7M94.2,-82.8 L86.2,-81.9M94.2,-82.8 L102.1,-87.9M109.5,-95.7 L102.1,-87.9M109.5,-95.7 L112.6,-97.5M118.4,-69.7 L120.5,-74.7 L124.1,-78.6 L122.8,-80.3 L119.2,-82.5 L108.5,-83.2 L102.1,-87.9M86.2,-81.9 L79.4,-84.1M86.2,-81.9 L94.2,-82.8M86.2,-81.9 L87.6,-72.8M79.4,-84.1 L71.7,-88.0M79.4,-84.1 L86.2,-81.9M79.4,-84.1 L82.5,-90.2M87.6,-72.8 L86.2,-81.9M71.7,-88.0 L67.7,-88.3M71.7,-88.0 L79.4,-84.1M82.5,-90.2 L79.4,-84.1M67.7,-88.3 L71.7,-88.0M67.7,-88.3 L64.9,-95.0M67.7,-88.3 L56.5,-75.7M64.9,-95.0 L67.7,-88.3M56.5,-75.7 L52.3,-73.3 L29.5,-72.7M56.5,-75.7 L67.7,-88.3M56.5,-75.7 L61.8,-70.0 L71.0,-66.4M29.5,-72.7 L23.4,-73.5 L17.6,-79.1M29.5,-72.7 L52.3,-73.3 L56.5,-75.7M29.5,-72.7 L26.0,-59.9 L27.8,-56.0 L31.3,-55.7M71.0,-66.4 L61.8,-70.0 L56.5,-75.7M17.6,-79.1 L15.8,-81.4M17.6,-79.1 L23.4,-73.5 L29.5,-72.7M31.3,-55.7 L27.8,-56.0 L26.0,-59.9 L29.5,-72.7M15.8,-81.4 L17.6,-79.1M15.8,-81.4 L8.8,-77.7M17.6,-82.9 L21.7,-87.4 L22.7,-90.6M8.8,-77.7 L15.8,-81.4M512.8,346.0 L514.3,349.7M512.8,346.0 L509.5,338.3M513.2,345.9 L526.8,340.1M509.5,338.3 L512.8,346.0M361.9,310.0 L366.7,312.6M361.9,310.0 L360.6,312.6 L360.4,318.3M361.9,310.0 L354.4,307.3M366.7,312.6 L361.9,310.0M360.4,318.3 L360.6,312.6 L361.9,310.0M354.4,307.3 L351.5,319.4 L343.3,322.0 L337.0,322.1M354.4,307.3 L337.8,307.0M354.4,307.3 L361.9,310.0M523.2,14.9 L531.7,2.4 L534.4,-16.5M534.4,-16.5 L531.7,2.4 L523.2,14.9M534.4,-16.5 L530.2,-16.3 L525.6,-18.7 L513.9,-40.2M534.4,-16.5 L538.9,-19.3M-166.6,264.6 L-167.9,267.3 L-170.1,268.4 L-174.0,267.6M-166.6,264.6 L-171.6,261.3M-164.7,264.9 L-159.8,264.6M-174.0,267.6 L-170.1,268.4 L-167.9,267.3 L-166.6,264.6M-171.6,261.3 L-166.6,264.6M-171.6,261.3 L-176.7,258.7M257.0,358.7 L252.4,357.2M257.0,358.7 L254.8,361.3M257.0,358.7 L260.3,360.3M257.0,358.7 L258.1,355.1M252.4,357.2 L248.9,356.1M252.4,357.2 L257.0,358.7M252.4,357.2 L254.8,361.3M254.8,3
3813861.3 L252.6,363.4M254.8,361.3 L257.0,358.7M254.8,361.3 L252.4,357.2M260.3,360.3 L266.5,366.1M260.3,360.3 L257.0,358.7M258.1,355.1 L257.0,358.7M252.6,363.4 L248.0,368.1M252.6,363.4 L254.8,361.3M252.6,363.4 L249.5,360.2M252.6,363.4 L254.8,365.6M248.0,368.1 L245.8,370.4M248.0,368.1 L252.6,363.4M248.0,368.1 L253.6,373.8M249.5,360.2 L244.7,364.7M249.5,360.2 L247.4,358.0M249.5,360.2 L252.6,363.4M254.8,365.6 L252.6,363.4M254.8,365.6 L260.9,371.7M253.6,373.8 L251.4,376.0M253.6,373.8 L248.0,368.1M253.6,373.8 L258.5,378.9M243.1,379.0 L249.4,377.9 L251.4,376.0M243.1,379.0 L240.3,377.2M-32.1,581.8 L-34.1,584.3M-32.1,581.8 L-34.6,572.2M-32.1,581.8 L-27.4,575.6 L-33.6,572.7M-34.1,584.3 L-39.3,590.7M-34.1,584.3 L-32.1,581.8M-34.1,584.3 L-37.3,581.7M-34.1,584.3 L-21.7,594.2M-34.6,572.2 L-32.1,581.8M-33.6,572.7 L-27.4,575.6 L-32.1,581.8M-39.3,590.7 L-34.1,584.3M-39.3,590.7 L-42.9,587.8M-39.3,590.7 L-33.3,595.3M-37.3,581.7 L-39.1,580.2M-37.3,581.7 L-34.1,584.3M-21.7,594.2 L-26.9,600.4M-21.7,594.2 L-34.1,584.3M-21.7,594.2 L-12.7,582.5M-33.3,595.3 L-37.6,600.9M-33.3,595.3 L-39.3,590.7M-33.3,595.3 L-26.9,600.4M-24.5,721.9 L-22.9,718.1M-24.5,721.9 L-13.4,716.2M-22.9,718.1 L-24.5,721.9M-22.9,718.1 L-20.9,713.4 L-20.2,707.0M-22.9,718.1 L-21.3,705.7M-13.4,716.2 L-6.6,712.3M-13.4,716.2 L-24.5,721.9M-215.0,220.1 L-218.2,216.3M-215.0,220.1 L-209.5,224.9M-215.0,220.1 L-217.5,223.5M-215.0,220.1 L-209.2,216.2M-218.2,216.3 L-215.0,220.1M-209.5,224.9 L-215.0,220.1M-217.5,223.5 L-224.1,223.7M-217.5,223.5 L-215.9,238.2M-217.5,223.5 L-215.0,220.1M-209.2,216.2 L-205.4,219.3 L-198.3,219.3M-209.2,216.2 L-215.0,220.1M-209.2,216.2 L-200.8,211.7M-209.2,216.2 L-213.6,207.6M200.4,199.0 L203.2,200.3M199.9,200.1 L198.1,204.2M201.0,197.7 L202.6,193.9 L213.3,198.4 L211.3,202.9M203.2,200.3 L207.4,202.1M203.2,200.3 L200.4,199.0M198.1,204.2 L199.9,200.1M198.1,204.2 L194.1,202.7M194.1,202.7 L191.5,201.3M194.1,202.7 L198.1,204.2M660.0,711.9 L656.8,716.2M660.0,711.9 L676.8,724.7 L695.3,718.4M660.0,711.9 L647.8,703.2 L643.1,692.1 L635.2,701.3M669.6,725.9 L676.3,731.1M669.6,725.9 L656.8,716.2M669.6,725.9 L667.3,729.2 L663.2,731.6M695.3,718.4 L696.5,723.9M695.3,718.4 L676.8,724.7 L660.0,711.9M695.3,718.4 L694.6,711.3M588.0,596.3 L593.7,600.9M588.0,596.3 L587.7,592.3 L589.9,586.6 L592.5,581.0 L594.9,578.9M593.7,600.9 L588.0,596.3M594.9,578.9 L593.3,577.1M594.9,578.9 L592.5,581.0 L589.9,586.6 L587.7,592.3 L588.0,596.3M594.9,578.9 L599.1,573.3M141.5,644.9 L145.6,641.8M141.5,644.9 L146.8,653.7M141.5,644.9 L136.9,638.8M145.6,641.8 L141.5,644.9M145.6,641.8 L148.3,645.0M145.6,641.8 L135.5,627.2M145.6,641.8 L150.5,638.9M146.8,653.7 L142.2,657.0M146.8,653.7 L153.9,662.9M146.8,653.7 L141.5,644.9M136.9,638.8 L141.5,644.9M136.9,638.8 L129.8,629.3M136.9,638.8 L132.0,642.4M148.3,645.0 L155.0,654.7M148.3,645.0 L155.4,644.5 L157.8,646.4 L159.3,650.9 L155.0,654.7M148.3,645.0 L145.6,641.8M135.5,627.2 L145.6,641.8M135.5,627.2 L140.9,625.0M150.5,638.9 L140.9,625.0M150.5,638.9 L145.6,641.8M150.5,638.9 L156.4,635.2M391.6,-83.8 L389.7,-81.4 L386.5,-81.9M391.6,-83.8 L406.9,-80.3M391.6,-83.8 L387.7,-84.9M386.5,-81.9 L389.7,-81.4 L391.6,-83.8M406.9,-80.3 L407.1,-84.8M406.9,-80.3 L391.6,-83.8M384.8,-91.9 L387.4,-88.3 L387.7,-84.9M717.3,643.7 L687.2,608.9M717.3,643.7 L722.7,650.0M704.3,612.1 L720.2,614.8M704.3,612.1 L687.2,608.9M704.3,612.1 L730.1,641.9M720.2,614.8 L704.3,612.1M720.2,614.8 L721.8,607.3M730.1,641.9 L738.0,634.5M730.1,641.9 L722.7,650.0M730.1,641.9 L704.3,612.1M721.4,615.2 L737.2,618.1M721.4,615.2 L728.8,623.8M721.8,607.3 L719.5,603.4 L713.9,601.2 L711.9,594.3M721.8,607.3 L720.2,614.8M721.8,607.3 L725.4,603.5M752.1,617.5 L757.3,616.9M752.1,617.5 L749.8,614.7M752.1,617.5 L737.2,618.1M752.1,617.5 L753.7,619.9M757.3,616.9 L752.1,617.5M757.3,616.9 L762.4,612.8M757.3,616.9 L753.7,619.9M749.8,614.7 L743.7,607.7M749.8,614.7 L752.1,617.5M749.8,614.7 L758.0,607.5M737.2,618.1 L752.1,617.5M737.2,618.1 L721.4,615.2M753.7,619.9 L757.3,616.9M753.7,619.9 L752.1,617.5M753.7,619.9 L738.0,634.5M762.4,612.8 L774.5,602.8M762.4,612.8 L757.3,616.9M762.4,612.8 L758.0,607.5M378.2,210.9 L383.5,214.4M376.3,210.4 L375.0,215.7M376.3,210.4 L371.6,209.3M383.5,214.4 L378.2,210.9M378.7,210.2 L386.7,201.
381381M386.7,201.1 L381.7,196.6M386.7,201.1 L393.5,193.6M386.7,201.1 L378.7,210.2M381.7,196.6 L386.7,201.1M381.7,196.6 L376.6,192.0M381.7,196.6 L392.0,184.9M381.7,196.6 L373.8,205.3M393.5,193.6 L386.7,201.1M397.1,189.5 L392.0,184.9M397.1,189.5 L403.7,182.3M397.1,189.5 L393.8,193.2M392.0,184.9 L397.1,189.5M392.0,184.9 L387.0,180.4M392.0,184.9 L398.4,177.8M392.0,184.9 L381.7,196.6M393.8,193.2 L397.1,189.5M398.4,177.8 L391.2,171.6M398.4,177.8 L392.0,184.9M398.4,177.8 L403.7,182.3M417.6,167.3 L414.3,170.9M417.6,167.3 L413.5,164.0M414.3,170.9 L417.6,167.3M413.5,164.0 L417.6,167.3M413.5,164.0 L405.6,160.7 L401.3,155.7M419.8,167.1 L423.4,170.0M417.7,165.4 L367.2,118.9 L317.0,92.7 L311.3,91.1M494.2,163.8 L496.2,165.4M494.2,163.8 L498.3,163.0 L510.3,173.6 L516.5,176.6M508.8,184.0 L511.5,184.9 L518.6,182.7 L526.4,187.4 L530.7,185.6 L531.7,183.8M508.8,184.0 L515.5,180.6 L516.5,176.6M126.0,633.9 L132.0,642.4M126.0,633.9 L124.1,631.4M127.8,629.9 L120.4,623.1M127.8,629.9 L124.1,631.4M132.0,642.4 L142.2,657.0M132.0,642.4 L126.0,633.9M132.0,642.4 L136.9,638.8M132.0,642.4 L127.2,645.7M142.2,657.0 L132.0,642.4M142.2,657.0 L146.8,653.7M142.2,657.0 L137.6,660.0M142.2,657.0 L151.0,669.7M127.2,645.7 L137.6,660.0M127.2,645.7 L121.2,636.9M127.2,645.7 L132.0,642.4M127.2,645.7 L122.4,649.2M137.6,660.0 L142.2,657.0M137.6,660.0 L138.8,662.4M137.6,660.0 L127.2,645.7M151.0,669.7 L142.2,657.0M151.0,669.7 L144.1,669.2 L138.8,662.4M151.0,669.7 L154.1,667.9 L153.9,662.9M478.8,126.0 L474.5,122.3M478.8,126.0 L482.8,125.8M474.5,122.3 L468.8,128.2M474.5,122.3 L465.7,115.2M474.5,122.3 L478.8,126.0M482.8,125.8 L478.8,126.0M482.8,125.8 L486.8,123.4 L491.2,123.0M246.1,356.6 L248.9,356.1M246.1,356.6 L243.1,353.7 L241.2,353.7M247.4,358.0 L249.5,360.2M248.9,356.1 L252.4,357.2M248.9,356.1 L246.1,356.6M241.2,353.7 L239.7,353.1 L239.7,354.8M241.2,353.7 L243.1,353.7 L246.1,356.6M711.9,594.3 L705.9,583.0 L705.5,579.6M711.9,594.3 L713.9,601.2 L719.5,603.4 L721.8,607.3M725.4,603.5 L728.5,606.9M725.4,603.5 L721.8,607.3M725.4,603.5 L736.9,600.0M694.4,554.8 L705.7,573.5 L705.5,579.6M705.5,579.6 L705.7,573.5 L694.4,554.8M705.5,579.6 L705.9,583.0 L711.9,594.3M705.5,579.6 L701.5,580.6 L698.2,579.4M305.7,107.2 L303.2,105.3M305.7,107.2 L309.4,110.1M305.7,107.2 L308.4,104.3M309.4,110.1 L313.0,106.3M309.4,110.1 L305.7,107.2M309.4,110.1 L311.9,115.4M308.4,104.3 L305.7,107.2M308.4,104.3 L310.2,100.1 L309.2,97.9M29.7,-100.3 L38.0,-97.1M29.7,-100.3 L24.0,-95.4 L22.7,-90.6M29.7,-100.3 L37.0,-112.0M38.0,-97.1 L42.7,-98.5M38.0,-97.1 L29.7,-100.3M22.7,-90.6 L29.8,-90.8M22.7,-90.6 L21.7,-87.4 L17.6,-82.9M22.7,-90.6 L24.0,-95.4 L29.7,-100.3M37.0,-112.0 L29.7,-100.3M465.9,245.7 L462.9,245.4M465.9,245.7 L470.9,246.0M466.0,245.3 L466.2,242.1M462.9,245.4 L465.9,245.7M462.9,245.4 L455.4,244.6M466.2,242.1 L466.0,245.3M398.0,279.1 L398.0,285.3M398.0,285.3 L398.0,279.1M398.0,285.3 L402.2,286.2M398.0,285.3 L379.9,281.3M402.2,286.2 L398.0,285.3M402.2,286.2 L400.3,287.5M402.2,286.2 L405.1,284.7M258.5,378.9 L253.6,373.8M258.5,378.9 L262.1,380.3M258.2,379.3 L253.2,384.3 L246.0,386.7 L234.8,386.8M262.1,380.3 L261.9,384.1M262.1,380.3 L258.5,378.9M206.6,446.0 L209.6,439.2M214.3,426.3 L209.6,439.2M214.3,426.3 L217.4,417.5M-20.3,625.7 L-24.1,622.4M-20.3,625.7 L-28.6,634.1M-24.1,622.4 L-43.0,607.7M-24.1,622.4 L-20.3,625.7M-24.1,622.4 L-19.1,615.4M-43.0,607.7 L-24.1,622.4M-43.0,607.7 L-37.6,600.9M-43.0,607.7 L-49.1,616.3M-19.1,615.4 L-37.6,600.9M-19.1,615.4 L-24.1,622.4M-19.1,615.4 L-14.7,609.7M-37.6,600.9 L-43.0,607.7M-37.6,600.9 L-33.3,595.3M-37.6,600.9 L-19.1,615.4M-37.6,600.9 L-49.7,593.4 L-44.1,587.8M-49.1,616.3 L-59.0,610.9M-49.1,616.3 L-43.0,607.7M-49.1,616.3 L-36.8,624.6M371.1,525.3 L372.6,534.1 L371.6,540.9M368.1,541.2 L371.6,540.9M368.1,541.2 L367.3,533.5M284.4,-17.2 L280.6,-10.5M280.6,-10.5 L275.2,-4.3 L272.8,1.3M280.6,-10.5 L284.4,-17.2M280.6,-10.5 L274.5,-14.2 L268.8,-21.3M272.8,1.3 L275.2,-4.3 L280.6,-10.5M272.8,1.3 L283.4,2.1 L289.6,4.3M268.8,-21.3 L274.5,-14.2 L280.6,-10.5M272.2,1.9 L267.9,4.7M289.6,4.3 L295.2,2.2 L305.2,3.4 L328.2,1.3 L333.4,-0.9 L339.5,-7.0M289.6,4.3 L283.4,2.1 L272.8,1.3M238.8,42.7 L235.6,45.2M238.8,42.7 L261.0,14.2M238.8,42.7 L245.3,49.7 L250.3,51.2M235.6,45.2 L226.1,51.9M235.6,45.2 L238.8,42.7M235.6,45.2 L235.9,39.4 L234.4,34.5M261.0,14.2 L238.8,42.7M261.0,14.2 L263.6,10.4M261.0,14.2 L263.1,16.1 L263.7,18.6 L258.5,30.7 L259.0,36.0M250.3,51.2 L253.9,55.0M250.3,51.2 L245.3,49.7 L238.8,42.7M216.7,61.8 L208.6,72.5M216.7,61.8 L226.1,51.9M207.3,79.9 L213.3,93.5M207.3,79.9 L208.6,72.5M207.3,79.9 L202.0,75.8 L198.5,75.1 L196.4,70.6M213.3,93.5 L207.3,79.9M213.3,93.5 L221.8,90.0 L225.3,86.3M208.6,72.5 L207.3,79.9M208.6,72.5 L216.7,61.8M196.4,70.6 L198.5,75.1 L202.0,75.8 L207.3,79.9M196.4,70.6 L193.0,67.0M213.6,94.3 L217.4,103.7M225.3,86.3 L219.9,81.8M225.3,86.3 L229.5,79.9M225.3,86.3 L221.8,90.0 L213.3,93.5M399.6,296.4 L398.5,294.6 L403.2,291.5M403.2,291.5 L400.3,287.5M403.2,291.5 L398.5,294.6 L399.6,296.4M403.2,291.5 L407.7,288.5 L405.3,285.1M-115.5,674.9 L-117.5,678.2M-115.5,674.9 L-111.1,666.2M-96.5,673.4 L-94.0,664.9M-96.5,673.4 L-90.3,675.0 L-83.7,674.9 L-78.5,672.0 L-76.0,668.3M-96.5,673.4 L-104.6,667.5 L-111.1,666.2M372.7,479.0 L374.5,484.4 L377.7,487.5M372.7,479.0 L373.7,469.1M371.1,479.4 L368.2,481.3 L366.6,479.1 L369.8,477.0 L371.1,479.4M371.1,479.4 L369.8,477.0 L366.6,479.1 L368.2,481.3 L371.1,479.4M373.7,469.1 L372.7,479.0M373.7,469.1 L373.3,461.8 L369.9,457.9 L367.3,456.9M373.7,469.1 L370.3,469.6M240.3,234.0 L235.9,232.7M240.3,234.0 L244.0,235.0M232.9,242.8 L231.4,249.1M232.9,242.8 L240.8,244.8M496.0,284.1 L497.5,281.9M496.0,284.1 L488.7,278.7M496.0,284.1 L493.7,287.9 L489.6,285.8M504.5,270.9 L502.3,273.6M504.5,270.9 L505.7,268.4M500.5,272.2 L495.9,268.2M499.6,278.2 L492.3,273.1M499.6,278.2 L502.3,273.6M499.6,278.2 L497.5,281.9M505.7,268.4 L505.1,261.1M505.7,268.4 L504.5,270.9M505.1,261.1 L505.7,268.4M505.0,260.1 L508.2,259.0M508.2,259.0 L508.8,256.3M508.2,259.0 L505.0,260.1M503.3,259.6 L501.9,257.5M485.3,164.2 L489.1,162.3M485.3,164.2 L486.9,166.4M485.3,164.2 L470.6,171.4M489.1,162.3 L485.3,164.2M489.1,162.3 L497.7,157.7M486.9,166.4 L485.3,164.2M484.3,162.5 L480.9,161.5 L473.5,168.1 L471.4,166.3M470.6,171.4 L475.8,182.1M470.6,171.4 L485.3,164.2M470.6,171.4 L463.3,174.0 L458.5,170.6M486.3,167.2 L476.0,179.3M494.9,173.7 L498.3,176.6M494.9,173.7 L491.8,170.7M498.3,176.6 L502.6,180.3M498.3,176.6 L494.9,173.7M502.6,180.3 L505.7,183.0M502.6,180.3 L498.3,176.6M505.7,183.0 L507.9,184.9M505.7,183.0 L502.6,180.3M505.7,183.0 L506.0,179.5M507.9,184.9 L505.7,183.0M507.9,184.9 L520.4,195.7M506.0,179.5 L505.7,183.0M506.0,179.5 L504.7,174.8M506.0,179.5 L508.5,178.1M520.4,195.7 L523.2,198.1M520.4,195.7 L507.9,184.9M523.2,198.1 L52
381386.9,201.2M523.2,198.1 L520.4,195.7M523.2,198.1 L519.3,196.6M519.3,196.6 L523.2,198.1M97.0,566.1 L83.9,573.3 L80.0,577.4M97.0,566.1 L100.7,558.0M504.7,174.8 L499.8,174.8M504.7,174.8 L506.0,179.5M504.7,174.8 L508.5,178.1M504.7,174.8 L502.5,171.7 L502.3,168.6 L497.8,165.3 L496.2,165.4M499.8,174.8 L504.7,174.8M508.5,178.1 L506.0,179.5M508.5,178.1 L504.7,174.8M508.6,338.0 L506.4,339.1M510.2,337.3 L513.2,336.0M514.0,349.8 L509.8,351.5M519.6,362.0 L518.2,359.0M519.6,362.0 L518.9,364.5M518.2,359.0 L519.6,362.0M518.2,359.0 L516.3,354.5M518.9,364.5 L519.6,362.0M529.7,365.2 L524.4,363.7M620.5,450.9 L623.5,451.8M620.5,450.9 L616.8,449.2M620.7,449.9 L617.0,447.8 L616.6,443.8M620.7,449.9 L621.3,447.7 L618.6,444.0M623.5,451.8 L620.5,450.9M623.5,451.8 L625.0,445.9M623.5,451.8 L628.3,453.0M616.8,449.2 L620.5,450.9M541.7,252.1 L547.3,251.3M541.7,252.1 L534.0,253.2M541.7,252.1 L529.4,241.5M541.7,252.1 L548.9,258.2M547.3,251.3 L541.7,252.1M547.3,251.3 L556.3,250.5 L549.2,244.3M534.0,253.2 L541.7,252.1M534.0,253.2 L531.5,253.6M534.0,253.2 L543.8,258.3M548.9,258.2 L541.7,252.1M531.5,253.6 L540.4,260.6M531.5,253.6 L534.0,253.2M531.5,253.6 L526.1,254.3M543.8,258.3 L534.0,253.2M540.4,260.6 L531.5,253.6M526.1,254.3 L531.5,253.6M525.5,254.4 L523.0,258.6M525.5,254.0 L523.0,249.3M523.0,258.6 L525.5,254.4M-168.7,228.8 L-163.9,232.9M-168.7,228.8 L-172.8,232.9M-168.7,228.8 L-166.3,225.7M-168.7,228.8 L-172.1,225.6 L-174.6,220.8M-178.5,226.4 L-172.8,232.9M-166.8,234.7 L-168.6,236.7 L-172.8,232.9M345.4,163.2 L335.9,170.2M345.4,163.2 L353.5,158.1M333.7,180.4 L336.5,182.1M333.7,180.4 L326.9,192.5M333.7,180.4 L335.9,170.2M127.9,-9.0 L129.5,-5.4 L133.1,-4.7M127.9,-9.0 L142.1,-22.8M127.9,-9.0 L121.0,-4.8M133.1,-4.7 L129.5,-5.4 L127.9,-9.0M142.1,-22.8 L147.4,-28.5M142.1,-22.8 L127.9,-9.0M121.0,-4.8 L112.7,-10.1 L111.2,-14.6M121.0,-4.8 L127.9,-9.0M121.0,-4.8 L117.9,5.6M95.1,708.6 L78.0,704.4M95.1,708.6 L96.5,702.9M95.1,708.6 L111.4,712.1 L117.7,717.2 L119.3,715.7 L118.4,708.5M436.9,426.6 L444.0,421.8M436.9,426.6 L435.1,424.0M436.9,426.6 L433.7,428.6 L429.1,428.7M444.0,421.8 L450.5,417.2M444.0,421.8 L436.9,426.6M444.0,421.8 L442.0,419.0M435.1,424.0 L436.9,426.6M450.5,417.2 L444.0,421.8M450.5,417.2 L454.9,413.7 L456.2,410.0M450.5,417.2 L448.5,415.3M450.5,417.2 L454.4,421.3 L460.2,417.6M442.0,419.0 L444.0,421.8M456.2,410.0 L456.6,404.9M456.2,410.0 L459.3,410.7M456.2,410.0 L454.9,413.7 L450.5,417.2M448.5,415.3 L444.9,413.1M448.5,415.3 L450.5,417.2M460.2,417.6 L463.3,422.0M460.2,417.6 L454.4,421.3 L450.5,417.2M460.2,417.6 L462.9,415.0M456.6,404.9 L456.2,410.0M456.6,404.9 L452.0,404.7M459.3,410.7 L456.2,410.0M452.0,404.7 L456.6,404.9M452.0,404.7 L444.3,404.4M452.0,404.7 L452.1,400.5M34.9,402.1 L34.7,396.5M34.7,396.5 L35.7,393.2M34.7,396.5 L32.7,396.9 L31.9,395.0 L34.3,392.6 L35.7,393.2M34.7,396.5 L34.9,402.1M33.8,402.5 L27.1,399.0 L20.0,392.3M35.4,402.7 L38.1,404.0M35.7,393.2 L38.5,390.2M35.7,393.2 L34.7,396.5M35.7,393.2 L34.3,392.6 L31.9,395.0 L32.7,396.9 L34.7,396.5M558.2,-37.6 L562.8,-44.7M558.2,-37.6 L553.3,-40.6M558.2,-37.6 L564.0,-34.2 L567.7,-28.1M562.8,-44.7 L558.2,-37.6M562.8,-44.7 L565.2,-47.8M553.3,-40.6 L558.2,-37.6M553.3,-40.6 L550.2,-42.5M553.3,-40.6 L549.9,-36.4 L546.4,-35.3M567.7,-28.1 L564.0,-34.2 L558.2,-37.6M567.7,-28.1 L576.7,-28.9 L579.6,-27.9M482.3,650.3 L484.9,648.9M482.3,650.3 L480.2,647.9M482.3,650.3 L483.0,660.0M484.9,648.9 L482.3,650.3M480.2,647.9 L482.3,650.3M466.2,649.6 L464.9,650.3 L463.5,659.2M471.4,696.1 L473.9,703.8M471.4,696.1 L466.4,683.0M471.4,696.1 L460.3,699.8M471.4,696.1 L490.0,690.0M460.9,686.6 L466.4,683.0M471.1,682.4 L470.8,674.1M471.1,682.4 L476.0,682.8M471.1,682.4 L466.4,683.0M473.9,703.8 L471.4,696.1M473.9,703.8 L455.4,710.1M473.9,703.8 L489.6,699.0M460.3,699.8 L457.3,700.7M460.3,699.8 L471.4,696.1M490.0,690.0 L489.7,697.0M490.0,690.0 L490.3,686.9M490.0,690.0 L471.4,696.1M455.4,710.1 L473.9,703.8M455.4,710.1 L455.7,702.1M489.6,699.0 L473.9,703.8M489.6,699.0 L489.7,706.6M683.8,181.6 L688.4,186.1M683.8,181.6 L680.2,185.4 L683.2,188.5M683.8,181.6 L680.9,179.3M683.2,188.5 L686.8,194.0M683.2,188.5 L680.2,185.4 L683.8,181.6M683.2,188.5 L683.1,192.1 L684.8,195.9M680.9,179.3 L676.9,182.7M680.9,179.3 L685.1,173.9M680.9,179.3 L683.8,181.6M680.9,179.3 L670.2,172.8M686.8,194.0 L691.5,189.1M686.8,194.0 L683.2,188.5M686.8,194.0 L684.8,195.9M691.5,189.1 L686.8,194.0M691.5,189.1 L694.0,191.5M691.5,189.1 L688.4,186.1M684.8,195.9 L686.8,194.0M684.8,195.9 L683.1,192.1 L683.2,188.5M317.5,293.0 L321.7,293.3M317.5,293.0 L313.4,292.0M330.7,296.8 L326.9,294.0 L321.7,293.3M505.3,290.3 L512.1,282.5M521.5,271.7 L514.3,280.1M523.4,266.1 L524.2,263.5M523.4,266.1 L522.1,270.7M524.2,263.5 L523.4,266.1M522.1,270.7 L523.4,266.1M-81.6,-90.4 L-70.6,-82.8 L-61.6,-85.8M-81.6,-90.4 L-80.8,-95.0 L-83.3,-104.7 L-80.8,-112.2M-81.6,-90.4 L-84.0,-87.1M-81.6,-90.4 L-84.0,-87.1M-61.6,-85.8 L-52.6,-85.4 L-47.0,-88.6 L-45.0,-93.5 L-46.9,-104.0M-61.6,-85.8 L-70.6,-82.8 L-81.6,-90.4M-84.0,-87.1 L-74.4,-81.4 L-63.9,-77.1M-84.0,-87.1 L-111.0,-106.0M-84.0,-87.1 L-81.6,-90.4M-84.0,-87.1 L-81.6,-90.4M-61.7,-87.8 L-62.2,-92.4M-46.9,-104.0 L-45.0,-93.5 L-47.0,-88.6 L-52.6,-85.4 L-61.6,-85.8M-62.2,-92.4 L-61.7,-87.8M475.8,182.1 L481.2,186.7M475.8,182.1 L470.6,171.4M474.5,183.4 L472.1,186.0M481.2,186.7 L475.8,182.1M481.2,186.7 L488.7,193.1M25.9,93.5 L20.4,98.8M25.9,93.5 L31.3,92.4 L37.8,95.4M25.9,93.5 L22.4,88.1 L17.4,84.4M37.8,95.4 L31.3,92.4 L25.9,93.5M37.8,95.4 L41.4,97.3M37.8,95.4 L39.3,87.2M17.4,84.4 L19.1,77.6M17.4,84.4 L9.4,83.8M17.4,84.4 L22.4,88.1 L25.9,93.5M26.2,104.9 L20.4,98.8M26.2,104.9 L28.5,108.4 L28.2,112.7 L22.5,120.5M26.2,104.9 L30.8,101.1M44.3,79.5 L59.2,93.8M41.4,97.3 L37.8,95.4M41.4,97.3 L53.8,98.6 L59.2,93.8M39.3,87.2 L37.8,95.4M6.6,127.2 L5.9,118.3M22.5,120.5 L24.2,122.6M22.5,120.5 L28.2,112.7 L28.5,108.4 L26.2,104.9M22.5,120.5 L15.8,121.4 L10.7,118.6 L5.9,118.3M-21.0,338.9 L-20.3,342.2M-46.4,335.6 L-32.7,342.5 L-20.3,342.2M-14.5,342.3 L-20.3,342.2M-14.5,342.3 L-12.6,343.8M-14.5,342.3 L-11.9,343.2M16.1,277.2 L20.0,282.0M16.1,277.2 L12.8,274.6 L8.9,275.3M20.0,282.0 L16.1,277.2M8.9,275.3 L12.8,274.6 L16.1,277.2M8.9,275.3 L-1.3,283.2M512.8,370.9 L511.5,374.9M119.6,333.0 L112.4,334.8 L108.8,340.9M119.6,333.0 L118.2,328.7M119.6,333.0 L122.2,344.0M108.8,340.9 L112.4,334.8 L119.6,333.0M118.2,328.7 L121.8,327.0M118.2,328.7 L113.2,320.6 L107.9,319.3M118.2,328.7 L119.6,333.0M122.2,344.0 L111.6,349.9 L108.1,353.4M122.2,344.0 L128.1,341.0 L131.5,336.4M122.2,344.0 L119.6,333.0M122.2,344.0 L128.6,359.2 L127.1,365.1 L124.0,369.8M489.8,326.1 L490.4,324.5 L496.5,321.4 L497.4,319.8M497.4,319.8 L500.3,316.4 L503.9,317.3 L499.1,320.1 L497.4,319.8M497.4,319.8 L499.1,320.1 L503.9,317.3 L500.3,316.4 L497.4,319.8M497.4,319.8 L49
381386.5,321.4 L490.4,324.5 L489.8,326.1M504.7,322.8 L491.3,328.5M494.8,335.3 L489.4,337.5M494.8,335.3 L493.8,332.7M489.4,337.5 L494.8,335.3M495.1,335.9 L499.2,334.7M495.1,335.9 L498.1,342.6M498.1,342.6 L492.7,344.9M498.1,342.6 L504.2,339.9M498.1,342.6 L495.1,335.9M498.1,342.9 L500.7,348.7M492.7,344.9 L490.2,345.9M492.7,344.9 L498.1,342.6M504.2,339.9 L498.1,342.6M500.7,348.7 L506.9,346.3M500.7,348.7 L497.9,350.0M500.7,348.7 L498.1,342.9M506.9,346.3 L500.7,348.7M497.9,350.0 L500.7,348.7M497.9,350.0 L493.1,351.6 L491.3,348.9M495.7,404.0 L490.7,403.6 L491.1,407.9M-130.5,632.9 L-134.3,625.6M-125.2,625.4 L-129.1,634.1M73.3,616.1 L79.3,616.7M73.3,616.1 L67.0,615.6M73.4,616.3 L76.1,627.7M79.3,616.7 L85.3,617.1M79.3,616.7 L73.3,616.1M67.0,615.6 L73.3,616.1M67.0,615.6 L60.9,615.1M76.1,627.7 L80.4,644.6M76.1,627.7 L73.4,616.3M76.1,627.7 L70.5,629.2M76.1,627.7 L81.8,626.2M80.4,644.6 L84.1,658.9M80.4,644.6 L76.1,627.7M80.4,644.6 L85.9,643.1M80.4,644.6 L74.6,646.1M70.5,629.2 L64.9,630.6M70.5,629.2 L76.1,627.7M70.5,629.2 L74.6,646.1M70.5,629.2 L67.1,615.9M81.8,626.2 L85.9,643.1M81.8,626.2 L79.3,616.9M81.8,626.2 L76.1,627.7M81.8,626.2 L87.3,624.8M84.1,658.9 L87.1,669.6M84.1,658.9 L80.4,644.6M84.1,658.9 L89.8,657.5M84.1,658.9 L78.8,661.3M85.9,643.1 L91.6,641.6M85.9,643.1 L80.4,644.6M85.9,643.1 L89.8,657.5M85.9,643.1 L81.8,626.2M74.6,646.1 L80.4,644.6M74.6,646.1 L69.4,647.4M74.6,646.1 L78.8,661.3M74.6,646.1 L70.5,629.2M87.1,669.6 L84.1,658.9M87.1,669.6 L92.1,662.9 L95.3,662.9M87.1,669.6 L88.2,673.0M89.8,657.5 L85.9,643.1M89.8,657.5 L84.1,658.9M89.8,657.5 L95.2,655.8M175.8,598.6 L188.5,610.2M175.8,598.6 L184.0,590.6M175.8,598.6 L166.3,606.9M188.5,610.2 L195.7,616.4M188.5,610.2 L175.8,598.6M184.0,590.6 L189.4,594.1 L195.8,594.1M184.0,590.6 L175.8,598.6M166.3,606.9 L163.6,609.3M166.3,606.9 L164.1,603.6 L166.8,601.0 L166.7,599.0 L159.5,594.6 L148.3,591.4 L141.9,586.8M166.3,606.9 L175.8,598.6M197.9,618.4 L195.7,616.4M381.8,323.6 L384.1,325.8M381.8,323.6 L379.2,331.1M381.8,323.6 L389.9,300.4M384.1,325.8 L381.8,323.6M384.1,325.8 L391.1,332.0M379.2,331.1 L381.8,323.6M379.2,331.1 L383.9,333.9M379.2,331.1 L371.5,343.0M389.9,300.4 L381.8,323.6M389.9,300.4 L391.7,296.1M396.9,336.3 L394.2,334.7M396.9,336.3 L403.9,337.6 L409.3,333.2 L415.6,334.4M396.9,336.3 L396.7,343.2M394.2,334.7 L396.9,336.3M415.6,334.4 L409.3,333.2 L403.9,337.6 L396.9,336.3M396.7,343.2 L393.3,344.2M396.7,343.2 L397.5,348.8 L405.9,355.3M396.7,343.2 L396.9,336.3M393.3,344.2 L396.7,343.2M405.9,355.3 L408.1,356.5M405.9,355.3 L397.5,348.8 L396.7,343.2M408.1,356.5 L413.7,341.2M408.1,356.5 L405.9,355.3M408.1,356.5 L405.8,360.7M408.1,356.5 L414.4,358.4M413.7,341.2 L408.1,356.5M413.7,341.2 L416.1,334.5M405.8,360.7 L403.1,365.1M405.8,360.7 L408.1,356.5M414.4,358.4 L413.8,364.5M414.4,358.4 L420.7,355.8M414.4,358.4 L408.1,356.5M565.3,522.7 L560.1,529.0M565.3,522.7 L573.1,529.5M565.3,522.7 L574.0,511.3 L585.4,492.1 L590.4,489.2 L602.0,487.0M590.7,545.5 L585.4,551.7M590.7,545.5 L573.1,529.5M590.7,545.5 L597.1,550.8M469.1,629.8 L467.5,633.4M469.1,629.8 L471.8,631.1M467.5,633.4 L469.1,629.8M471.8,631.1 L469.1,629.8M456.9,630.1 L453.7,630.4M456.9,629.2 L456.7,626.8M453.7,630.4 L456.9,630.1M453.7,630.4 L448.1,630.8 L442.6,637.1M446.7,170.6 L443.0,167.4M446.7,170.6 L443.2,174.6M446.7,170.6 L449.1,174.0M446.7,170.6 L448.5,168.7M443.0,167.4 L446.7,170.6M443.2,174.6 L446.7,170.6M443.2,174.6 L438.0,180.3M449.1,174.0 L446.7,170.6M449.1,174.0 L450.3,183.1M448.5,168.7 L446.7,170.6M436.9,161.5 L434.3,159.0M436.9,161.5 L439.2,163.7M436.9,161.5 L443.3,154.8M436.9,161.5 L432.2,166.4M434.3,159.0 L428.7,153.8M434.3,159.0 L436.9,161.5M439.2,163.7 L436.9,161.5M443.3,154.8 L445.8,157.3M443.3,154.8 L440.7,152.3M443.3,154.8 L436.9,161.5M443.3,154.8 L445.4,152.6M432.2,166.4 L428.7,169.9M432.2,166.4 L436.9,161.5M428.7,153.8 L426.1,151.2M428.7,153.8 L434.3,159.0M428.7,153.8 L430.6,151.8M428.7,153.8 L426.3,156.3M426.1,151.2 L428.7,153.8M430.6,151.8 L435.2,147.1M430.6,151.8 L428.7,153.8M426.3,156.3 L428.7,153.8M426.3,156.3 L422.9,159.9M422.7,147.8 L413.5,138.9M422.7,147.8 L424.6,149.7M422.7,147.8 L418.0,152.7M422.7,147.8 L425.3,145.0M413.5,138.9 L422.7,147.8M413.5,138.9 L396.9,125.4M413.5,138.9 L408.1,144.8M424.6,149.7 L422.7,147.8M418.0,152.7 L415.7,155.0M418.0,152.7 L422.7,147.8M425.3,145.0 L422.7,147.8M425.3,145.0 L429.0,141.1M396.9,125.4 L390.9,122.6M396.9,125.4 L401.4,122.2 L405.0,114.5M396.9,125.4 L413.5,138.9M408.1,144.8 L413.5,138.9M390.9,122.6 L385.1,119.7M390.9,122.6 L396.9,125.4M390.9,122.6 L390.5,126.9 L388.1,132.9M385.1,119.7 L390.9,122.6M385.1,119.7 L385.5,128.8 L388.1,132.9M383.6,118.6 L377.3,112.1M388.1,132.9 L390.5,126.9 L390.9,122.6M388.1,132.9 L390.8,137.0 L390.3,138.6 L388.1,139.6 L384.8,138.3 L379.9,132.3 L371.9,132.8 L367.4,129.0M388.1,132.9 L385.5,128.8 L385.1,119.7M362.1,95.9 L377.3,112.1M360.6,97.3 L359.4,100.3 L363.0,104.1M356.2,89.7 L354.0,87.5M356.2,89.7 L368.1,78.6 L370.3,78.5M354.0,87.5 L356.2,89.7M357.1,90.6 L359.7,93.5M332.2,76.4 L328.0,80.3M332.2,76.4 L338.0,70.8M335.8,68.7 L334.1,67.0M335.8,68.7 L338.0,70.8M342.2,66.8 L344.6,62.2M342.2,66.8 L338.0,70.8M323.2,55.0 L328.8,61.1M323.2,55.0 L318.9,60.4M328.8,61.1 L323.2,55.0M328.8,61.1 L334.1,67.0M318.9,60.4 L323.2,55.0M323.3,52.3 L318.8,47.7 L318.7,39.8M318.7,39.8 L317.9,36.5M318.7,39.8 L318.8,47.7 L323.3,52.3M324.9,53.1 L327.4,50.7M478.4,501.1 L480.0,497.5M478.4,501.1 L476.5,502.0 L470.6,498.3M478.4,501.1 L482.6,502.5 L483.3,504.5 L488.3,505.5M480.0,497.5 L478.4,501.1M470.6,498.3 L476.5,502.0 L478.4,501.1M488.3,505.5 L489.3,506.0 L489.7,505.2 L488.8,504.6 L488.3,505.5M488.3,505.5 L488.8,504.6 L489.7,505.2 L489.3,506.0 L488.3,505.5M488.3,505.5 L483.3,504.5 L482.6,502.5 L478.4,501.1M527.1,393.5 L531.1,395.4M527.1,393.5 L523.4,391.6M527.1,393.5 L525.3,400.3M111.7,425.9 L119.5,433.1M111.7,425.9 L116.5,421.4M111.7,425.9 L103.2,436.0 L99.5,442.8M119.5,433.1 L127.9,440.8M119.5,433.1 L111.7,425.9M99.5,442.8 L101.9,445.2 L100.7,452.2M99.5,442.8 L90.2,462.6 L53.9,526.6M99.5,442.8 L103.2,436.0 L111.7,425.9M137.7,431.6 L140.2,430.7M137.7,431.6 L127.9,440.8M156.6,460.4 L167.2,449.7 L170.2,451.2M156.6,460.4 L149.3,460.3 L143.4,455.8M156.6,460.4 L160.2,468.4M170.2,451.2 L167.2,449.7 L156.6,460.4M160.2,468.4 L155.2,472.8M160.2,468.4 L165.1,472.7 L165.0,476.0 L168.3,481.4 L170.9,482.1M160.2,468.4 L156.6,460.4M650.5,656.9 L644.0,649.6 L642.0,645.4 L643.7,641.2 L648.0,640.1M650.5,656.9 L652.2,653.1 L656.8,648.7M650.5,656.9 L648.9,659.8 L642.4,665.5M648.0,640.1 L654.3,646.5M648.0,640.1 L653.9,641.1 L654.3,646.5M648.0,640.1 L643.7,641.2 L642.0,645.4 L644.0,649.6 L650.5,656.9M656.8,648.7 L659.3,650.1M656.8,648.7 L654.3,646.5M656.8,648.7 L652.2,653.1 L650.5,656.9M654.3,646.5 L656.8,648.7M654.3,646.5 L648.0,640.1M654.3,646.5 L653.9,641.1 L648.0,640.1M659.3,650.1 L656.8,648.7M659.3,650.1 L664.0,654.6M659.3,650.1 L665.3,649.8M665.3,649.8 L659.3,650.1M665.3,649.8 L664.0,654.6M412.0,92.2 L405.2,85.1M405.2,85.1 L412.0,92.2M405.2,85.1 L409.3,85.8 L415.5,90.9M415.5,90.9 L409.3,85.8 L405.2,85.1M396.2,76.1 L399.2,79.1M396.2,76.1 L389.9,82.0M396.2,76.1 L404.4,68.2M399.2,79.1 L396.2,76.1M389.9,82.0 L396.2,76.1M389.9,82.0 L401.2,94.0M389.9,82.0 L384.3,87.7M404.4,68.2 L396.2,76.1M404.4,68.2 L407.8,64.9M542.1,262.5 L539.8,266.0M341.0,294.5 L342.8,290.2M340.6,294.3 L329.3,289.7M342.8,290.2 L350.4,293.2M342.8,290.2 L341.0,294.5M342.8,290.2 L350.9,270.1M329.3,289.7 L340.6,294.3M525.3,400.3 L529.4,401.4M525.3,400.3 L527.1,393.5M525.3,400.3 L521.1,399.1M518.7,407.4 L517.8,410.5M518.7,407.4 L522.9,408.6M518.7,407.4 L521.1,399.1M303.3,379.4 L304.3,382.3 L306.9,384.2M303.3,379.4 L300.0,379.5M303.3,379.4 L307.2,377.2M306.9,384.2 L304.1,388.0 L302.4,387.4M306.9,384.2 L304.3,382.3 L303.3,379.4M300.0,379.5 L303.3,379.4M307.2,377.2 L303.3,379.4M405.1,284.7 L402.2,286.2M405.1,284.7 L409.4,282.5M405.3,285.1 L407.7,288.5 L403.2,291.5M409.4,282.5 L405.1,284.7M83.9,581.6 L87.2,585.2M83.9,581.6 L80.0,577.4M83.9,581.6 L90.2,576.5M83.9,581.6 L77.8,585.9 L69.5,589.1M80.0,577.4 L83.9,581.6M80.0,577.4 L77.6,580.0 L72.3,582.5M80.0,577.4 L83.9,573.3 L97.0,566.1M90.2,576.5 L95.8,573.9M90.2,576.5 L83.9,581.6M69.5,589.1 L70.2,594.4M69.5,589.1 L68.9,584.4M69.5,589.1 L77.8,585.9 L83.9,581.6M695.7,730.1 L696.7,733.5M695.7,730.1 L682.8,734.6M695.7,730.1 L697.0,728.9 L696.5,723.9M696.7,733.5 L699.3,740.9M696.7,733.5 L695.7,730.1M696.7,733.5 L700.6,732.5M696.5,723.9 L676.3,731.1M696.5,723.9 L695.3,718.4M696.5,723.9 L697.0,728.9 L695.7,730.1M700.6,732.5 L696.7,733.5M706.1,738.5 L699.3,740.9M709.5,746.4 L702.5,748.9M710.4,772.7 L707.8,765.0M710.4,772.7 L716.7,770.8M714.9,758.1 L716.1,762.3 L707.8,765.0M716.7,770.8 L710.4,772.7M398.3,533.4 L402.0,532.7M398.3,533.4 L392.7,536.0M402.0,532.7 L398.3,533.4M402.0,532.7 L408.4,530.2 L411.
381380,524.5 L411.6,518.9M392.7,536.0 L390.6,538.0M392.7,536.0 L394.0,538.2M392.7,536.0 L398.3,533.4M483.1,309.0 L474.2,303.8 L477.4,298.4M477.4,298.4 L481.1,292.1M477.4,298.4 L487.1,304.1M477.4,298.4 L474.2,303.8 L483.1,309.0M-213.1,155.5 L-210.1,147.1 L-211.4,134.6M-213.1,155.5 L-189.1,166.8 L-178.6,167.9M-211.4,134.6 L-206.9,133.7M-211.4,134.6 L-210.1,147.1 L-213.1,155.5M-178.6,167.9 L-155.3,167.7M-178.6,167.9 L-189.1,166.8 L-213.1,155.5M-137.1,165.7 L-127.2,164.7M-137.1,165.7 L-155.3,167.7M-137.1,165.7 L-136.7,169.5 L-138.1,169.5M-127.2,164.7 L-124.8,164.5M-127.2,164.7 L-137.1,165.7M-127.2,164.7 L-126.9,161.4M-155.3,167.7 L-137.1,165.7M-155.3,167.7 L-178.6,167.9M-138.1,169.5 L-136.7,169.5 L-137.1,165.7M-124.8,164.5 L-121.2,164.1M-124.8,164.5 L-127.2,164.7M-126.9,161.4 L-127.2,164.7M-126.9,161.4 L-126.4,156.1M-127.4,166.8 L-128.0,170.3M-112.8,162.5 L-113.2,169.7M-113.2,169.7 L-112.8,162.5M-111.1,161.9 L-103.3,159.6M-113.7,162.7 L-119.9,163.9M41.0,184.5 L48.2,186.7M41.0,184.5 L39.4,189.1M41.0,184.5 L33.1,181.8M48.2,186.7 L51.7,187.7M48.2,186.7 L41.0,184.5M39.4,189.1 L41.0,184.5M33.1,181.8 L41.0,184.5M33.1,181.8 L27.4,178.6 L19.4,177.7M51.7,187.7 L54.7,188.5M51.7,187.7 L48.2,186.7M54.7,188.5 L53.5,192.9M54.7,188.5 L51.7,187.7M54.7,188.5 L60.9,189.7M53.5,192.9 L54.7,188.5M60.9,189.7 L54.7,188.5M115.9,185.3 L114.4,172.3M115.9,185.3 L112.9,185.8M115.9,185.3 L120.6,184.2M114.4,172.3 L115.9,185.3M112.9,185.8 L115.9,185.3M120.6,184.2 L115.9,185.3M123.6,183.6 L125.2,177.9M123.6,183.6 L126.7,182.3M122.4,183.9 L130.0,186.4M125.2,177.9 L123.6,183.6M125.2,177.9 L126.7,182.3M125.2,177.9 L124.9,175.2M126.7,182.3 L130.0,186.4M126.7,182.3 L123.6,183.6M126.7,182.3 L125.2,177.9M588.2,64.8 L593.4,64.0M588.2,64.8 L585.7,55.4 L581.2,46.5M588.2,64.8 L588.0,77.2M121.8,673.9 L110.0,671.2M121.8,673.9 L121.8,668.1M122.4,675.9 L118.5,682.9M122.4,675.9 L127.6,678.1M121.8,668.1 L119.3,664.7M121.8,668.1 L121.8,673.9M121.8,668.1 L124.2,668.1 L131.0,671.9 L136.9,671.2 L137.7,669.5 L136.7,668.1 L130.5,664.2M118.5,682.9 L110.0,671.2M118.5,682.9 L122.4,675.9M118.5,682.9 L116.3,687.0M114.7,667.9 L119.3,664.7M114.7,667.9 L110.0,671.2M114.7,667.9 L101.7,649.6M105.2,674.6 L110.0,671.2M105.2,674.6 L95.3,662.9M105.2,674.6 L112.7,685.1 L116.3,687.0M95.2,655.8 L91.6,641.6M95.2,655.8 L97.6,653.8M95.2,655.8 L89.8,657.5M116.3,687.0 L118.5,682.9M116.3,687.0 L112.7,685.1 L105.2,674.6M116.3,687.0 L120.8,691.0M-8.5,613.9 L-9.1,619.4M-9.6,613.7 L-10.2,618.6M-8.0,612.6 L-6.6,609.5M-9.1,619.4 L-9.3,621.8M-9.1,619.4 L-8.5,613.9M-14.7,609.7 L-19.1,615.4M-16.1,608.7 L-23.9,602.7M-13.5,610.7 L-10.0,613.0M-13.5,610.7 L-11.5,612.8M-26.9,600.4 L-21.7,594.2M-26.9,600.4 L-33.3,595.3M-26.9,600.4 L-23.9,602.7M-23.9,602.7 L-26.9,600.4M-23.9,602.7 L-16.1,608.7M-44.1,587.8 L-49.7,593.4 L-37.6,600.9M-52.5,585.3 L-51.6,577.1M-52.5,585.3 L-44.6,587.0M-52.5,585.3 L-58.3,583.3 L-61.9,584.7 L-70.1,591.0M-51.6,577.1 L-52.5,585.3M-70.1,591.0 L-61.9,584.7 L-58.3,583.3 L-52.5,585.3M501.5,229.9 L506.7,234.4M501.5,229.9 L498.9,227.5M501.3,230.2 L497.0,235.2M506.7,234.4 L501.5,229.9M506.7,234.4 L515.9,242.0M498.9,227.5 L501.5,229.9M496.6,235.6 L488.5,228.6 L465.5,203.2 L455.3,194.1M497.0,235.2 L501.3,230.2M496.1,236.3 L491.0,241.7M496.1,236.3 L485.9,226.9M455.3,194.1 L465.5,203.2 L488.5,228.6 L496.6,235.6M487.0,247.4 L481.5,246.8M487.5,248.6 L486.5,251.8M486.5,251.8 L487.5,248.6M484.5,257.9 L485.8,253.9M485.6,259.0 L490.6,263.5M478.8,97.7 L484.1,100.9M484.1,100.9 L478.8,97.7M484.1,100.9 L483.0,104.2M484.1,100.9 L485.3,97.3M485.3,97.3 L484.1,100.9M533.8,430.9 L533.9,427.2 L532.4,426.1 L526.7,427.1 L522.7,425.8M533.8,430.9 L528.7,434.3 L526.7,437.7M522.7,425.8 L520.8,429.3M522.7,425.8 L515.5,421.8M522.7,425.8 L526.7,427.1 L532.4,426.1 L533.9,427.2 L533.8,430.9M526.7,437.7 L511.4,433.6M526.7,437.7 L531.7,439.5 L538.9,445.2M526.7,437.7 L528.7,434.3 L533.8,430.9M-198.3,219.3 L-205.4,219.3 L-209.2,216.2M-213.6,207.6 L-209.2,216.2M12.0,639.5 L9.6,637.6 L11.9,634.3M11.9,634.3 L9.6,637.6 L12.0,639.5M654.5,519.8 L652.1,521.7M654.5,519.8 L655.6,521.5 L659.8,522.3M654.5,519.8 L662.1,513.7 L664.6,510.2M652.1,521.7 L646.5,521.1M652.1,521.7 L654.5,519.8M652.1,521.7 L652.8,525.6M659.8,522.3 L655.6,521.5 L654.5,519.8M659.8,522.3 L660.5,526.2 L664.3,527.2M659.8,522.3 L664.2,523.0 L66
381385.2,524.9 L664.3,527.2M664.6,510.2 L661.4,507.4M664.6,510.2 L662.1,513.7 L654.5,519.8M664.3,527.2 L665.2,524.9 L664.2,523.0 L659.8,522.3M664.3,527.2 L660.5,526.2 L659.8,522.3M475.0,159.9 L473.1,163.2M473.1,163.2 L475.0,159.9M473.1,163.2 L471.4,166.3M476.9,159.1 L479.8,157.6 L479.2,154.7M475.4,157.6 L477.1,155.0 L479.2,154.7M15.0,679.1 L19.3,686.3M14.7,678.6 L11.9,674.6M19.3,686.3 L15.0,679.1M19.3,686.3 L20.7,688.9M1.5,668.4 L6.2,670.1 L11.9,674.6M1.0,667.5 L2.1,662.1M-13.8,666.1 L-5.9,667.4M-14.5,665.3 L-11.3,642.3M-14.9,667.2 L-17.2,679.8M499.3,663.4 L509.9,658.0M505.7,649.6 L509.9,658.0M505.7,649.6 L523.2,640.0M513.8,666.2 L509.9,658.0M513.8,666.2 L520.6,673.4M513.8,666.2 L493.9,676.8 L490.7,677.2M525.0,645.5 L526.1,649.2M537.9,302.1 L526.9,293.0M526.9,293.0 L524.0,290.7M526.9,293.0 L537.9,302.1M519.0,296.7 L524.0,290.7M519.0,296.7 L521.0,298.3 L523.0,296.2 L525.1,298.1M-17.9,410.8 L-15.6,411.5M-17.9,410.8 L-21.0,415.3 L-20.6,418.8M-17.9,410.8 L-15.2,416.2 L-16.1,419.8M-17.9,410.8 L-22.7,407.1 L-24.7,403.4M-15.6,411.5 L-17.9,410.8M-20.6,418.8 L-21.0,415.3 L-17.9,410.8M-20.6,418.8 L-21.1,419.7 L-20.2,420.3 L-19.5,419.3 L-20.6,418.8M-20.6,418.8 L-19.5,419.3 L-20.2,420.3 L-21.1,419.7 L-20.6,418.8M-16.1,419.8 L-15.0,425.8 L-15.7,431.5M-16.1,419.8 L-15.2,416.2 L-17.9,410.8M-24.7,403.4 L-22.7,407.1 L-17.9,410.8M56.8,645.5 L58.0,650.3M55.1,639.0 L56.6,644.8M55.1,639.0 L43.7,642.0M668.0,750.3 L665.5,743.9M665.5,743.9 L668.0,750.3M665.5,743.9 L672.2,741.7M665.5,743.9 L657.5,746.7 L658.7,750.1M672.2,741.7 L665.5,743.9M672.2,741.7 L675.3,749.1M672.2,741.7 L681.0,739.5 L683.4,746.2M658.7,750.1 L657.5,746.7 L665.5,743.9M-200.9,-71.4 L-200.6,-64.9M-200.9,-71.4 L-195.5,-86.5 L-195.5,-93.5 L-197.6,-99.5M-200.9,-71.4 L-212.6,-70.4M-200.6,-64.9 L-200.9,-71.4M-200.6,-64.9 L-196.9,-46.9M-212.6,-70.4 L-200.9,-71.4M309.0,186.6 L308.8,176.5M309.0,186.6 L293.6,186.5M309.0,186.6 L316.2,188.7M308.8,176.5 L307.8,167.8M308.8,176.5 L309.0,186.6M308.8,176.5 L300.4,177.2M316.2,188.7 L309.0,186.6M316.2,188.7 L317.7,183.7 L316.0,170.0 L314.1,168.0 L307.8,167.8M316.2,188.7 L306.6,198.8M300.4,177.2 L308.8,176.5M309.2,97.9 L310.2,100.1 L308.4,104.3M309.2,97.9 L304.7,95.2 L301.7,96.1 L300.2,98.6M160.7,348.5 L161.9,346.5M160.7,348.5 L157.7,351.5 L150.2,345.9M160.7,348.5 L168.5,354.2 L173.2,354.9M161.9,346.5 L165.4,339.6M161.9,346.5 L160.7,348.5M161.9,346.5 L156.6,344.0M150.2,345.9 L157.7,351.5 L160.7,348.5M150.2,345.9 L144.1,361.5M150.2,345.9 L156.1,331.9M173.2,354.9 L168.5,354.2 L160.7,348.5M149.4,345.5 L143.0,362.5M149.4,345.5 L143.7,343.2 L141.6,341.0M149.4,345.5 L142.2,340.5M149.4,345.5 L157.5,324.3M144.1,361.5 L150.2,345.9M144.1,361.5 L139.3,375.1M144.1,361.5 L149.8,363.7M156.1,331.9 L159.0,333.4M156.1,331.9 L150.2,345.9M156.1,331.9 L158.7,324.8M412.7,391.1 L407.8,396.5M412.7,391.1 L418.7,395.5M412.7,391.1 L407.9,387.6M407.8,396.5 L412.7,391.1M407.8,396.5 L405.2,398.7M407.8,396.5 L405.9,395.3 L403.2,397.9 L403.5,399.5M418.7,395.5 L412.7,391.1M407.9,387.6 L405.0,391.2M407.9,387.6 L404.0,384.4M407.9,387.6 L412.7,391.1M405.2,398.7 L407.8,396.5M388.0,392.9 L387.5,399.7M384.4,395.7 L383.9,399.8M384.4,395.7 L380.2,395.9 L377.6,390.4 L382.5,386.7M384.4,395.7 L384.4,390.4 L382.5,386.7M378.0,402.0 L383.9,399.8M377.2,400.3 L375.7,397.5M606.1,300.9 L601.1,304.7M598.3,300.9 L601.1,304.7M598.3,300.9 L592.7,305.1M598.3,300.9 L595.9,297.7M598.3,300.9 L603.4,297.1M500.4,329.0 L496.1,330.4 L493.8,332.7M24.2,122.6 L22.5,120.5M30.8,101.1 L26.2,104.9M495.5,549.2 L497.9,549.4M494.3,566.4 L496.8,566.5M494.3,566.4 L494.3,569.0M494.3,566.4 L490.5,574.8M496.8,566.5 L494.3,566.4M494.3,569.0 L494.3,566.4M494.3,569.0 L493.2,571.6M484.1,586.0 L480.9,592.6M484.1,586.0 L490.5,574.8M481.5,592.6 L483.3,599.7M481.5,592.6 L484.6,586.3M483.3,599.7 L481.5,592.6M483.3,599.7 L484.1,603.2M483.3,599.7 L490.8,597.8M482.6,599.8 L483.4,603.4M482.6,599.8 L480.9,592.6M484.1,603.2 L486.0,609.9M484.1,603.2 L483.3,599.7M490.8,597.8 L483.3,599.7M485.4,610.1 L483.4,603.4M487.3,614.6 L486.0,609.9M487.3,614.6 L488.0,617.3M491.3,629.6 L488.5,619.0M491.3,629.6 L492.8,635.6M490.6,629.8 L472.3,622.2M490.6,629.8 L492.8,635.6M490.6,629.8 L487.9,619.1M492.0,656.0 L504.5,650.3M504.5,650.3 L492.0,656.0M490.7,677.2 L493.9,676.8 L513.8,666.2M490.7,677.2 L490.3,684.3M490.7,677.2 L490.9,674.2M490.3,684.3 L490.7,677.2M490.9,674.2 L491.0,671.5M490.9,674.2 L490.7,677.2M490.4,686.5 L499.1,684.8 L520.6,673.4M488.8,684.1 L478.4,683.1
38138M490.3,686.9 L490.0,690.0M520.6,673.4 L513.8,666.2M520.6,673.4 L525.6,678.8 L525.7,680.6M520.6,673.4 L499.1,684.8 L490.4,686.5M489.7,697.0 L490.0,690.0M489.7,706.6 L482.9,709.0M489.7,706.6 L492.2,706.3M489.7,706.6 L489.6,699.0M482.9,709.0 L489.7,706.6M492.2,706.3 L489.7,706.6M693.4,216.9 L697.6,218.5M693.4,216.9 L691.6,214.4 L690.3,202.1M693.4,216.9 L692.7,218.1 L687.7,207.0M687.7,207.0 L687.0,205.9 L685.1,206.2 L684.3,201.8 L682.1,202.3 L682.7,206.8 L673.9,212.9M687.7,207.0 L689.3,205.8 L690.3,202.1M687.7,207.0 L692.7,218.1 L693.4,216.9M697.6,218.5 L701.4,219.9M697.6,218.5 L693.4,216.9M708.9,222.7 L704.9,221.2M284.3,354.9 L281.0,352.1M284.3,354.9 L288.8,350.0M284.3,354.9 L278.2,361.7M288.8,350.0 L290.8,347.7M288.8,350.0 L284.3,354.9M288.8,350.0 L286.9,347.4M278.2,361.7 L275.1,358.7M278.2,361.7 L276.2,363.9M278.2,361.7 L284.3,354.9M267.3,351.5 L273.3,344.7M267.3,351.5 L271.6,355.5M267.3,351.5 L265.5,350.1 L264.2,351.5M471.1,143.9 L472.4,147.3M471.1,143.9 L462.3,135.0M471.1,143.9 L473.6,141.1M472.4,147.3 L471.1,143.9M472.4,147.3 L471.2,148.0 L472.7,147.9M462.3,135.0 L456.1,141.5M462.3,135.0 L468.7,128.3M462.3,135.0 L454.3,127.2M462.3,135.0 L471.1,143.9M473.6,141.1 L471.1,143.9M495.9,156.6 L495.5,154.1M495.5,154.1 L495.9,156.6M495.5,154.1 L495.0,148.7 L503.9,147.1M497.7,157.7 L500.4,156.0M497.7,157.7 L489.1,162.3M494.2,155.5 L483.0,145.0 L472.7,147.9M350.4,293.2 L342.8,290.2M350.4,293.2 L348.8,297.5M348.8,297.5 L350.4,293.2M350.9,270.1 L342.8,290.2M350.9,270.1 L352.9,264.8M350.9,270.1 L358.6,272.9M359.0,295.3 L350.9,292.1M19.1,77.6 L17.4,84.4M9.4,83.8 L17.4,84.4M9.4,83.8 L8.5,81.1M9.4,83.8 L8.6,88.7M629.9,696.4 L635.2,701.3M49.3,615.9 L50.8,622.5M49.3,615.9 L46.8,617.9M48.4,612.5 L46.0,609.1M44.4,621.2 L39.9,626.9M44.4,621.2 L46.8,617.9M44.4,621.2 L47.8,635.0M46.8,617.9 L44.4,621.2M46.8,617.9 L49.3,615.9M47.8,635.0 L42.3,636.4M47.8,635.0 L52.7,633.7M47.8,635.0 L44.4,621.2M506.6,621.3 L507.8,628.1M337.0,322.1 L336.4,328.6 L338.2,333.8M337.0,322.1 L331.4,319.4M337.0,322.1 L343.3,322.0 L351.5,319.4 L354.4,307.3M338.2,333.8 L342.1,337.9M338.2,333.8 L336.4,328.6 L337.0,322.1M331.4,319.4 L335.9,313.3M331.4,319.4 L325.2,327.7M331.4,319.4 L322.8,315.6 L320.9,313.4 L321.1,311.5 L325.9,307.6 L337.8,307.0M331.4,319.4 L337.0,322.1M342.1,337.9 L345.3,340.3M342.1,337.9 L345.1,331.1M342.1,337.9 L338.2,333.8M345.3,340.3 L350.3,344.0M345.3,340.3 L344.7,342.1 L346.9,345.8 L350.3,344.0M345.3,340.3 L342.1,337.9M345.1,331.1 L347.6,330.0M345.1,331.1 L342.1,337.9M345.1,331.1 L353.9,340.1 L350.7,344.2M350.7,344.2 L352.3,346.5M350.7,344.2 L353.9,340.1 L345.1,331.1M350.3,344.0 L345.3,340.3M350.3,344.0 L346.9,345.8 L344.7,342.1 L345.3,340.3M352.3,346.5 L352.4,349.3M352.3,346.5 L350.7,344.2M352.3,346.5 L355.2,347.6M352.4,349.3 L352.3,346.5M352.4,349.3 L360.9,352.4M360.9,352.4 L352.4,349.3M577.8,478.5 L588.0,480.3M577.8,478.5 L575.3,485.7M588.0,480.3 L593.3,481.6M588.0,480.3 L577.8,478.5M575.3,485.7 L571.1,484.2M575.3,485.7 L567.4,501.0 L555.7,516.2M575.3,485.7 L577.8,478.5M593.3,481.6 L598.0,482.6M593.3,481.6 L588.0,480.3M587.6,482.0 L586.0,487.6M598.0,482.6 L593.3,481.6M599.7,483.0 L602.5,475.1M602.5,475.1 L599.7,483.0M513.2,335.7 L511.7,332.3M639.3,729.4 L639.6,727.0 L646.1,720.8 L652.4,724.3 L660.2,730.8 L663.2,731.6M663.2,731.6 L660.2,730.8 L652.4,724.3 L646.1,720.8 L639.6,727.0 L639.3,729.4M663.2,731.6 L651.5,735.6 L652.8,741.4 L654.8,742.9M663.2,731.6 L667.3,729.2 L669.6,725.9M654.8,742.9 L652.8,741.4 L651.5,735.6 L663.2,731.6M654.8,742.9 L680.5,733.8M116.3,619.3 L127.7,606.5M116.3,619.3 L120.4,623.1M116.3,619.3 L111.8,615.4M127.7,606.5 L116.3,619.3M127.7,606.5 L131.0,609.2M127.7,606.5 L124.8,603.4M120.4,623.1 L124.3,619.0M120.4,623.1 L127.8,629.9M120.4,623.1 L116.3,619.3M131.0,609.2 L127.7,606.5M131.0,609.2 L129.8,613.3 L126.1,617.0M131.0,609.2 L132.6,604.6M124.8,603.4 L120.1,606.0M124.8,603.4 L127.7,606.5M124.8,603.4 L130.5,599.7 L133.2,602.6M-218.8,68.1 L-213.0,63.1M-218.8,68.1 L-217.7,72.9M-213.0,63.1 L-218.8,68.1M-217.7,72.9 L-212.7,72.9 L-206.4,70.6M-217.7,72.9 L-218.8,68.1M-217.7,72.9 L-219.8,79.5M611.4,-69.4 L607.4,-64.6M180.9,121.3 L185.8,120.4M180.9,121.3 L170.3,123.7M181.1,121.7 L183.8,131.8M185.8,120.4 L191.6,119.4M185.8,120.4 L180.9,121.3M170.3,123.7 L180.9,121.3M170.3,123.7 L159.7,126.8M183.8,131.8 L181.1,121.7M447.9,133.9 L456.1,141.5M447.9,133.9 L445.2,131.3M447.9,133.9 L452.8,128.6M456.1,141.5 L447.9,133.9M456.1,141.5 L462.3,135.0M456.1,141.5 L463.3,148.1M456.1,141.5 L449.6,148.3M445.2,131.3 L447.9,133.9M452.8,128.6 L447.9,133.9M441.6,127.9 L439.5,130.1M441.6,127.9 L444.4,124.9M439.5,130.1 L441.6,127.9M444.4,124.9 L441.6,127.9M444.4,124.9 L447.9,121.2M-85.9,181.2 L-86.7,177.1M-86.7,177.1 L-85.9,181.2M-86.7,177.1 L-88.4,170.8M-86.7,177.1 L-90.7,178.8 L-98.3,185.5M-88.4,170.8 L-86.7,177.1M-98.3,185.5 L-96.4,188.6M-98.3,185.5 L-90.7,178.8 L-86.7,177.1M-98.3,185.5 L-103.1,180.7M60.9,615.1 L67.0,615.6M60.9,615.1 L55.3,614.6M61.0,615.3 L64.9,630.6M73.7,664.7 L77.4,680.1M73.7,664.7 L69.4,647.4M73.7,664.7 L68.6,668.1M73.7,664.7 L78.8,661.3M-30.8,679.1 L-27.8,679.8M-27.8,679.8 L-30.8,679.1M-27.8,679.8 L-24.0,673.6M-27.8,679.8 L-29.5,689.3M-27.8,679.8 L-18.5,682.0M-24.0,673.6 L-27.8,679.8M-18.5,682.0 L-17.5,675.2M-18.5,682.0 L-27.8,679.8M-18.5,682.0 L-19.9,694.2M648.1,8.4 L644.3,3.0M648.1,8.4 L655.0,3.4M648.1,8.4 L644.3,11.1M644.3,3.0 L648.1,8.4M655.0,3.4 L660.9,-1.0M655.0,3.4 L648.1,8.4M655.0,3.4 L650.3,-3.9M644.3,11.1 L651.8,13.4M644.3,11.1 L648.1,8.4M644.3,11.1 L641.9,12.9M75.6,761.6 L74.3,757.3 L63.7,746.1M75.6,761.6 L81.2,760.4M63.7,746.1 L67.2,742.9M63.7,746.1 L74.3,757.3 L75.6,761.6M63.7,746.1 L58.8,739.1 L58.3,736.8 L59.3,734.3M63.7,746.1 L60.3,748.3M63.7,746.1 L60.6,748.9M81.2,760.4 L82.0,760.8 L82.5,759.5 L81.8,759.1 L81.2,760.4M81.2,760.4 L81.8,759.1 L82.5,759.5 L82.0,760.8 L81.2,760.4M81.2,760.4 L75.6,761.6M668.9,498.2 L661.4,507.4M668.9,498.2 L671.6,499.2 L672.3,501.2 L666.0,507.4 L665.1,511.1M668.9,498.2 L667.7,488.6 L663.3,480.1M661.4,507.4 L668.9,498.2M661.4,507.4 L664.6,510.2M661.4,507.4 L654.5,504.9 L652.3,501.8 L652.4,499.5M663.3,480.1 L667.7,488.6 L668.9,498.2M465.7,115.2 L460.3,120.8M465.7,115.2 L474.5,122.3M460.3,120.8 L465.7,115.2M460.3,120.8 L453.3,115.5M460.3,120.8 L454.3,127.2M460.3,120.8 L468.7,128.3M418.5,164.4 L401.4,150.2 L373.2,121.6 L367.0,116.9 L353.0,109.5M420.5,166.0 L438.0,180.3M420.4,162.7 L413.5,157.3M420.4,162.7 L423.0,165.0M420.4,162.7 L422.9,159.9M413.5,157.3 L415.7,155.0M413.5,157.3 L420.4,162.7M413.5,157.3 L407.1,152.1M423.0,165.0 L420.4,162.7M422.9,159.9 L426.3,156.3M422.9,159.9 L420.4,162.7M435.2,147.1 L429.0,141.1M435.2,147.1 L438.7,150.4M435.2,147.1 L430.6,151.8M435.2,147.1 L438.4,143.7M429.0,141.1 L435.2,147.1M429.0,141.1 L424.5,136.8M429.0,141.1 L425.3,145.0M429.0,141.1 L435.4,134.6M438.7,150.4 L440.7,152.3M438.7,150.4 L435.2,147.1M438.4,143.7 L441.5,140.5M438.4,143.7 L435.2,147.1M441.5,140.5 L449.6,148.3M441.5,140.5 L437.0,136.1M441.5,140.5 L438.4,143.7M441.5,140.5 L444.0,137.9M449.6,148.3 L441.5,140.5M449.6,148.3 L452.4,150.9M449.6,148.3 L446.5,151.5M449.6,148.3 L456.1,141.5M437.0,136.1 L441.5,140.5M444.0,137.9 L441.5,140.5M454.3,127.2 L450.2,123.3M454.3,127.2 L462.3,135.0M454.3,127.2 L460.3,120.8M450.2,123.3 L447.9,121.2M450.2,123.3 L454.3,127.2M453.3,115.5 L438.8,107.5M453.3,115.5 L447.9,121.2M453.3,115.5 L460.3,120.8M468.7,128.3 L462.3,135.0M468.7,128.3 L460.3,120.8M489.0,278.3 L491.4,274.0M488.3,278.5 L484.5,276.4M484.5,276.4 L488.3,278.5M484.8,276.1 L486.1,273.7M-163.9,232.9 L-168.7,228.8M-166.3,225.7 L-168.7,228.8M-166.3,225.7 L-162.4,220.7 L-168.4,218.7M-166.3,225.7 L-160.6,228.8M-174.6,220.8 L-172.1,225.6 L-168.7,228.8M557.4,595.6 L560.5,598.6M557.4,595.6 L553.6,592.4M553.6,592.4 L557.4,595.6M553.6,592.4 L549.3,588.5M562.4,590.2 L564.1,588.3M560.7,592.2 L558.7,594.2M256.0,488.9 L253.9,487.5M256.0,488.9 L259.7,484.5 L261.1,478.5M256.0,488.9 L263.6,494.7M253.9,487.5 L256.0,488.9M253.9,487.5 L250.3,485.6M261.1,478.5 L259.7,484.5 L256.0,488.9M263.6,494.7 L270.9,485.7 L290.1,481.5M263.6,494.7 L256.0,488.9M96.5,339.3 L89.3,329.5M96.5,339.3 L100.1,336.4 L107.9,321.9M96.5,339.3 L108.1,353.4M89.3,329.5 L96.5,339.3M89.3,329.5 L84.3,333.0 L80.3,339.9M89.3,329.5 L94.6,324.7 L96.5,319.3M89.3,329.5 L78.5,317.5 L76.9,314.3 L76.9,310.0M107.9,321.9 L100.1,336.4 L96.5,339.3M107.9,321.9 L107.9,319.3M108.1,353.4 L114.8,360.5M108.1,353.4 L111.6,349.9 L122.2,344.0M108.1,353.4 L104.7,356.2 L102.4,355.0 L100.6,351.9 L97.0,355.0 L98.0,357.6M108.1,353.4 L96.5,339.3M-202.4,206.5 L-200.8,211.7M387.1,507.1 L391.6,509.0M391.6,509.0 L400.9,516.4 L411.6,518.9M391.6,509.0 L387.1,507.1M391.6,509.0 L399.2,501.9 L403.4,501.8 L409.0,503.8 L411.9,503.3M411.6,518.9 L420.3,520.3M411.6,518.9 L412.3,511.5M411.6,518.9 L400.9,516.4 L391.6,509.0M411.6,518.9 L411.0,524.5 L408.4,530.2 L402.0,532.7M411.9,503.3 L411.2,500.9M411.9,503.3 L414.7,501.2 L414.1,500.0 L411.2,500.9M411.9,503.3 L412.3,511.5M411.9,503.3 L409.0,503.8 L403.4,501.8 L399.2,501.9 L391.6,509.0M420.3,520.3 L411.6,518.9M412.3,511.5 L411.6,518.9M412.3,511.5 L411.9,503.3M412.3,511.5 L402.2,509.3M511.5,247.1 L515.9,242.0M496.1,225.0 L493.0,222.7M496.6,225.5 L495.0,227.4M493.0,222.7 L490.8,220.7M493.0,222.7 L496.1,225.0M124.3,619.0 L126.8,620.9M124.3,619.0 L126.1,61
381387.0M124.3,619.0 L120.4,623.1M126.8,620.9 L124.3,619.0M126.8,620.9 L129.2,623.1M126.8,620.9 L126.1,617.0M126.1,617.0 L124.3,619.0M126.1,617.0 L126.8,620.9M126.1,617.0 L129.8,613.3 L131.0,609.2M129.2,623.1 L126.8,620.9M129.2,623.1 L133.7,627.9M129.2,623.1 L139.9,617.9M117.9,5.6 L114.7,7.3M117.9,5.6 L130.8,15.5 L139.9,15.9M117.9,5.6 L121.0,-4.8M114.7,7.3 L117.9,5.6M114.7,7.3 L108.9,10.3M139.9,15.9 L147.1,12.3M139.9,15.9 L130.8,15.5 L117.9,5.6M139.9,15.9 L141.0,24.1M147.1,12.3 L155.5,3.6M147.1,12.3 L139.9,15.9M147.1,12.3 L155.4,18.8 L164.9,20.6M141.0,24.1 L139.9,15.9M155.5,3.6 L164.2,2.0 L171.5,4.3M155.5,3.6 L147.1,12.3M155.5,3.6 L153.6,-0.1M164.9,20.6 L155.4,18.8 L147.1,12.3M171.5,4.3 L178.4,5.9M171.5,4.3 L164.2,2.0 L155.5,3.6M153.6,-0.1 L155.5,3.6M359.0,190.9 L353.4,186.1M359.0,190.9 L349.3,201.9M359.0,190.9 L368.4,182.7 L372.5,186.4M525.1,298.1 L523.0,296.2 L521.0,298.3 L519.0,296.7M409.8,283.0 L412.7,286.8M382.7,294.2 L391.7,296.1M371.5,343.0 L368.0,340.8M371.5,343.0 L379.2,331.1M371.5,343.0 L366.6,351.2M368.0,340.8 L361.9,339.4M368.0,340.8 L371.5,343.0M366.6,351.2 L371.5,343.0M366.6,351.7 L366.1,356.7M366.6,351.7 L365.5,354.2 L363.4,354.4M366.1,356.7 L363.4,354.4M366.1,356.7 L366.6,351.7M366.1,356.7 L366.1,360.9M366.1,356.7 L371.9,361.3M363.4,354.4 L366.1,356.7M363.4,354.4 L365.5,354.2 L366.6,351.7M366.1,360.9 L366.1,356.7M366.1,360.9 L366.4,372.3M371.9,361.3 L366.1,356.7M366.4,372.3 L366.5,378.7M366.4,372.3 L370.6,373.8M366.4,372.3 L366.1,360.9M366.5,378.7 L366.4,372.3M366.5,378.7 L363.6,379.1M370.6,373.8 L366.4,372.3M366.5,382.5 L363.6,379.1M366.5,382.5 L368.5,385.6M366.5,384.5 L366.5,387.1M363.6,379.1 L360.6,375.7M363.6,379.1 L366.5,378.7M363.6,379.1 L366.5,382.5M368.5,385.6 L366.5,382.5M362.5,455.2 L367.3,456.9M362.5,455.2 L358.9,469.9M362.5,455.2 L365.4,424.8M367.3,456.9 L362.5,455.2M367.3,456.9 L369.9,457.9 L373.3,461.8 L373.7,469.1M367.3,456.9 L367.0,458.5 L369.3,462.1M358.9,469.9 L357.3,471.8M358.9,469.9 L362.5,455.2M358.9,469.9 L358.1,473.8M357.3,471.8 L358.9,469.9M27.3,-18.3 L30.5,-15.5M27.3,-18.3 L25.4,-19.8M49.1,0.4 L53.6,4.7M49.1,0.4 L30.5,-15.5M-192.4,234.3 L-189.8,229.5 L-193.1,227.9M-191.6,238.9 L-191.8,244.4M-191.6,238.9 L-193.6,235.5M538.9,445.2 L531.7,439.5 L526.7,437.7M538.9,445.2 L531.3,447.8 L509.1,441.6M538.9,445.2 L551.4,442.7M509.1,441.6 L507.0,449.0M509.1,441.6 L531.3,447.8 L538.9,445.2M551.4,442.7 L538.9,445.2M511.4,433.6 L509.7,439.4M511.4,433.6 L512.2,430.5M511.4,433.6 L526.7,437.7M509.7,439.4 L511.4,433.6M509.7,439.4 L502.4,437.4M512.2,430.5 L511.4,433.6M512.2,430.5 L514.6,422.2M512.2,430.5 L507.3,429.3M-224.9,637.2 L-214.6,639.0M-224.9,637.2 L-227.1,654.2M-224.9,637.2 L-229.1,628.0M-214.6,639.0 L-224.9,637.2M-214.6,639.0 L-213.5,633.3M-214.6,639.0 L-189.4,645.1 L-185.8,642.9M-227.1,654.2 L-228.9,674.5M-227.1,654.2 L-224.9,637.2M-229.1,628.0 L-224.9,637.2M-229.1,628.0 L-233.2,623.2M410.7,-107.6 L413.1,-100.2M410.7,-107.6 L402.3,-98.5M413.1,-100.2 L410.7,-107.6M413.1,-100.2 L411.6,-96.0 L405.6,-95.0M402.3,-98.5 L399.5,-95.8M402.3,-98.5 L410.7,-107.6M402.3,-98.5 L405.6,-95.0M402.3,-98.5 L398.4,-104.6M405.6,-95.0 L411.6,-96.0 L413.1,-100.2M405.6,-95.0 L406.9,-90.5M405.6,-95.0 L402.3,-98.5M525.8,681.3 L526.1,689.8 L524.0,692.7 L507.7,701.5 L492.4,706.3M525.8,681.3 L508.8,690.3M525.7,680.6 L525.6,678.8 L520.6,673.4M492.4,706.3 L507.7,701.5 L524.0,692.7 L526.1,689.8 L525.8,681.3M508.8,690.3 L525.8,681.3M505.4,604.8 L502.5,605.5M503.9,610.7 L502.5,605.5M450.9,273.8 L458.8,278.6M468.7,284.5 L465.1,290.6M468.7,284.5 L472.8,277.8M468.7,284.5 L458.8,278.6M468.7,284.5 L475.4,288.5M455.2,284.7 L465.1,290.6M455.2,284.7 L458.8,278.6M455.2,284.7 L442.5,277.4M442.5,277.4 L455.2,284.7M614.0,521.1 L618.4,527.9M614.0,521.1 L608.5,523.6 L606.1,528.8M614.0,521.1 L620.0,520.6 L627.5,515.8 L636.6,520.9M618.4,527.9 L614.0,521.1M606.1,528.8 L614.0,531.0M606.1,528.8 L605.3,533.8 L601.2,536.6M606.1,528.8 L608.5,523.6 L614.0,521.1M636.6,520.9 L627.5,515.8 L620.0,520.6 L614.0,521.1M636.6,520.9 L646.5,521.1M636.6,520.9 L632.7,525.3 L628.1,519.7M614.0,531.0 L606.1,528.8M614.0,531.0 L616.8,531.0 L618.4,528.8M601.2,536.6 L607.1,541.9M601.2,536.6 L605.3,533.8 L606.1,528.8M601.2,536.6 L581.9,528.9 L573.1,529.5M89.3,92.3 L87.1,93.4M89.3,92.3 L97.3,108.2M89.3,92.3 L84.3,82.0M87.1,93.4 L89.3,92.3M84.3,82.0 L89.3,92.3M84.3,82.0 L78.2,68.3M665.8,158.6 L657.9,162.7M665.8,158.6 L670.2,172.8M665.8,158.6 L665.7,152.4 L668.1,146.8M150.1,243.4 L143.8,242.3M143.8,242.3 L150.1,243.4M491.2,-67.5 L480.9,-62.1M491.2,-67.5 L487.4,-73.7M491.2,-67.5 L495.1,-68.3 L498.1,-66.4 L501.5,-56.7 L513.9,-40.2M491.2,-67.5 L499.6,-56.1 L500.2,-52.2M480.9,-62.1 L491.2,-67.5M487.4,-73.7 L491.2,-67.5M487.4,-73.7 L478.6,-85.9 L475.0,-86.9 L469.5,-85.9M
38138513.9,-40.2 L508.3,-39.6M513.9,-40.2 L501.5,-56.7 L498.1,-66.4 L495.1,-68.3 L491.2,-67.5M513.9,-40.2 L525.6,-18.7 L530.2,-16.3 L534.4,-16.5M500.2,-52.2 L498.1,-48.9 L487.5,-43.6 L475.4,-39.8M500.2,-52.2 L499.6,-56.1 L491.2,-67.5M639.6,654.6 L642.4,665.5M487.1,304.1 L477.4,298.4M390.6,538.0 L392.7,536.0M394.0,538.2 L392.7,536.0M368.1,542.1 L369.4,559.0M367.3,533.5 L368.1,541.2M369.3,462.1 L367.0,458.5 L367.3,456.9M370.3,469.6 L368.9,467.5 L366.6,469.0 L368.2,471.1 L370.3,469.6M370.3,469.6 L368.2,471.1 L366.6,469.0 L368.9,467.5 L370.3,469.6M370.3,469.6 L373.7,469.1M376.7,489.0 L373.4,491.1 L374.9,493.2 L378.0,491.3 L376.7,489.0M376.7,489.0 L378.0,491.3 L374.9,493.2 L373.4,491.1 L376.7,489.0M394.9,489.7 L395.5,492.4 L393.5,492.9 L392.8,490.1 L394.9,489.7M394.9,489.7 L392.8,490.1 L393.5,492.9 L395.5,492.4 L394.9,489.7M406.7,493.9 L411.2,500.9M406.7,493.9 L395.3,487.5M406.7,493.9 L409.3,492.1 L414.4,491.1 L420.3,493.6M411.2,500.9 L411.9,503.3M411.2,500.9 L414.1,500.0 L414.7,501.2 L411.9,503.3M411.2,500.9 L406.7,493.9M420.3,493.6 L423.0,490.6M420.3,493.6 L422.1,495.9M420.3,493.6 L414.4,491.1 L409.3,492.1 L406.7,493.9M402.2,509.3 L412.3,511.5M649.6,581.6 L652.5,580.9M649.8,582.6 L650.7,586.5M652.5,580.9 L649.6,581.6M652.5,580.9 L656.9,581.0M650.7,586.5 L649.8,582.6M648.8,586.5 L646.1,585.7M663.6,598.5 L662.8,601.2M663.6,598.5 L660.2,596.7M664.6,597.3 L666.3,595.4M660.2,596.7 L663.6,598.5M669.5,592.5 L667.5,589.7M667.5,589.7 L669.5,592.5M575.7,589.5 L578.2,587.3M578.2,587.3 L575.7,589.5M605.0,379.2 L607.7,380.2M607.7,380.2 L610.9,381.7M607.7,380.2 L605.0,379.2M610.9,381.7 L618.7,382.7M610.9,381.7 L607.7,380.2M610.9,381.7 L610.3,385.3M618.7,382.7 L610.9,381.7M618.7,382.7 L617.7,390.0M618.7,382.7 L620.9,366.6 L622.5,363.4 L625.0,362.1M610.3,385.3 L609.9,388.7M610.3,385.3 L610.9,381.7M617.7,390.0 L618.7,382.7M617.7,390.0 L609.9,388.7M617.7,390.0 L616.3,401.4M625.0,362.1 L622.5,363.4 L620.9,366.6 L618.7,382.7M462.5,105.7 L465.6,100.9M462.5,105.7 L467.8,110.6M465.6,100.9 L464.5,98.8M465.6,100.9 L462.5,105.7M465.6,100.9 L468.9,99.2 L471.6,99.4M467.8,110.6 L462.5,105.7M445.6,98.8 L448.2,100.3M445.6,98.8 L438.8,107.5M448.2,100.3 L445.6,98.8M448.2,100.3 L461.1,105.6M438.8,107.5 L453.3,115.5M438.8,107.5 L437.6,111.3 L438.7,114.4 L437.3,115.9M438.8,107.5 L445.6,98.8M233.6,240.8 L235.9,232.7M233.6,240.8 L222.6,237.3M222.6,237.3 L233.6,240.8M231.4,249.1 L230.6,251.9M231.4,249.1 L232.9,242.8M443.5,235.5 L439.5,234.6M443.5,235.5 L442.7,238.3M439.5,234.6 L443.5,235.5M442.7,238.3 L443.5,235.5M-1.1,602.4 L1.9,598.6M-1.1,602.4 L-4.3,606.4M-1.1,602.4 L1.0,597.5M1.9,598.6 L4.3,595.6M1.9,598.6 L-1.1,602.4M-4.3,606.4 L-1.1,602.4M1.0,597.5 L-1.1,602.4M707.0,17.5 L707.6,24.6M707.0,17.5 L710.8,17.2M707.6,24.6 L707.0,17.5M710.8,17.2 L720.6,15.8M710.8,17.2 L707.0,17.5M-112.1,179.6 L-113.0,188.7M-112.1,179.6 L-107.5,181.1 L-103.1,180.7M-112.1,179.6 L-129.5,172.5M-113.0,188.7 L-112.1,179.6M-113.0,188.7 L-104.0,189.9 L-96.4,188.6M-113.0,188.7 L-127.2,189.3M-103.1,180.7 L-101.7,177.3 L-102.2,174.3M-103.1,180.7 L-107.5,181.1 L-112.1,179.6M-103.1,180.7 L-98.3,185.5M-129.5,172.5 L-134.1,178.7M-129.5,172.5 L-128.0,170.3M-129.5,172.5 L-112.1,179.6M-96.4,188.6 L-98.3,185.5M-96.4,188.6 L-86.7,187.6M-96.4,188.6 L-104.0,189.9 L-113.0,188.7M-127.2,189.3 L-113.0,188.7M-127.2,189.3 L-136.0,189.4 L-140.5,187.6M-127.2,189.3 L-128.9,183.0M390.3,257.8 L383.8,254.7M390.3,257.8 L393.3,260.8M390.3,257.8 L391.8,249.5M383.8,254.7 L390.3,257.8M383.8,254.7 L384.9,248.3M383.8,254.7 L379.5,268.0M383.8,254.7 L376.2,252.9M393.3,260.8 L390.3,257.8M393.3,260.8 L391.0,271.3M393.3,260.8 L402.1,260.9M379.5,268.0 L383.8,254.7M229.5,79.9 L237.1,80.8 L241.3,79.2M229.5,79.9 L228.1,72.3M229.5,79.9 L225.3,86.3M241.3,79.2 L237.1,80.8 L229.5,79.9M228.1,72.3 L235.8,67.9M228.1,72.3 L225.4,66.7 L226.4,60.8M228.1,72.3 L229.5,79.9M89.7,59.1 L81.5,65.6M89.7,59.1 L87.9,55.7M89.7,59.1 L93.9,55.8 L98.2,50.1M375.2,57.2 L365.6,67.3 L361.3,62.9M375.2,57.2 L384.0,58.9 L388.4,57.6M375.2,57.2 L372.2,52.3M26.8,403.1 L23.9,414.1M23.9,414.1 L21.3,423.4M23.9,414.1 L26.8,403.1M21.3,423.4 L17.9,431.7M21.3,423.4 L23.9,414.1M21.3,423.4 L12.3,421.4M21.3,423.4 L24.1,424.4 L30.0,432.5 L36.0,436.4M17.9,431.7 L11.9,441.7M17.9,431.7 L21.3,423.4M17.9,431.7 L21.2,434.4 L22.2,441.6 L19.4,444.1M12.3,421.4 L21.3,423.4M12.3,421.4 L13.5,416.8 L12.9,413.5 L10.7,411.5M12.3,421.4 L11.5,423.4 L3.1,430.1M36.0,436.4 L30.0,432.5 L24.1,424.4 L21.3,423.4M36.0,436.4 L45.5,441.5 L53.1,440.7M36.0,436.4 L42.3,427.6M11.9,441.7 L17.9,431.7M19.4,444.1 L22.2,441.6 L21.2,434.4 L17.9,431.7M-212.6,134.7 L-217.0,135.4M-212.6,134.7 L-213.8,126.7M-206.9,133.7 L-204.6,132.7M-206.9,133.7 L-211.4,134.6M242.7,362.7 L244.7,364.7M242.7,362.7 L237.8,357.9M237.8,357.9 L236.3,361.0M237.8,357.9 L242.7,362.7M237.8,357.9 L239.7,354.8M239.7,354.8 L237.8,357.9M239.7,354.8 L239.7,353.1 L241.2,353.7M442.6,642.4 L441.9,647.2M447.9,648.1 L452.0,648.6M447.9,648.1 L441.9,647.2M447.9,648.1 L448.2,645.0M436.1,673.8 L437.6,668.5M436.1,673.8 L441.2,674.9 L442.9,678.4M436.0,674.4 L435.1,679.0M437.6,668.5 L436.1,673.8M442.9,678.4 L441.2,674.9 L436.1,673.8M435.1,679.0 L436.0,674.4M435.1,679.0 L440.5,686.0M435.1,679.0 L433.0,689.5 L438.6,690.8M440.5,686.0 L435.1,679.0M438.6,690.8 L433.0,689.5 L435.1,679.0M552.2,2.4 L555.0,7.1M552.2,2.4 L544.1,7.4 L545.9,12.6M552.2,2.4 L538.9,-19.3M553.6,1.5 L540.3,-20.2M553.6,1.5 L556.5,6.2M555.0,7.1 L552.2,2.4M555.0,7.1 L571.4,33.6M545.9,12.6 L544.1,7.4 L552.2,2.4M538.9,-19.3 L536.8,-22.8M538.9,-19.3 L552.2,2.4M538.9,-19.3 L534.4,-16.5M568.7,-0.7 L568.9,-9.4M568.7,-0.7 L556.9,-0.6 L555.8,0.6 L556.5,6.2M568.7,-0.7 L569.9,10.0 L572.5,14.5 L578.6,18.4M568.9,-9.4 L568.7,-0.7M568.9,-9.4 L569.3,-21.7 L568.2,-27.0M556.5,6.2 L553.6,1.5M556.5,6.2 L572.8,33.0M556.5,6.2 L555.8,0.6 L556.9,-0.6 L568.7,-0.7M578.6,18.4 L586.5,24.4M578.6,18.4 L572.5,
3813814.5 L569.9,10.0 L568.7,-0.7M452.7,164.1 L454.6,166.2M452.7,164.1 L445.8,157.3M452.7,164.1 L450.1,167.0M454.6,166.2 L452.7,164.1M454.6,166.2 L452.4,165.5 L450.1,167.0M454.6,166.2 L458.5,170.6M445.8,157.3 L443.3,154.8M445.8,157.3 L452.7,164.1M450.1,167.0 L452.4,165.5 L454.6,166.2M450.1,167.0 L452.7,164.1M440.7,152.3 L443.3,154.8M440.7,152.3 L438.7,150.4M445.4,152.6 L443.3,154.8M424.5,136.8 L429.0,141.1M435.4,134.6 L437.9,131.8M435.4,134.6 L429.0,141.1M563.2,318.3 L567.4,324.0M567.0,324.3 L562.0,328.0M572.9,319.8 L567.4,324.0M576.7,351.6 L573.0,354.5M576.7,351.6 L568.7,340.9M576.7,351.6 L580.2,356.3M576.7,351.6 L583.9,346.2M305.5,241.5 L302.5,241.3M306.7,231.3 L306.4,235.2M291.6,206.5 L289.7,203.5M291.6,206.5 L300.6,215.5M289.1,204.0 L285.0,207.0M243.1,127.3 L239.3,122.2M243.1,127.3 L249.0,130.1 L257.7,130.1M239.3,122.2 L235.5,115.1M239.3,122.2 L243.1,127.3M257.7,130.1 L249.0,130.1 L243.1,127.3M257.7,130.1 L265.0,129.8M241.2,121.2 L243.9,119.8M235.5,115.1 L233.7,111.7M235.5,115.1 L232.1,116.9M235.5,115.1 L239.3,122.2M437.3,115.9 L438.7,114.4 L437.6,111.3 L438.8,107.5M100.0,627.8 L104.1,624.0M100.0,627.8 L111.1,638.4M100.0,627.8 L102.7,638.6M100.0,627.8 L98.3,622.0M111.1,638.4 L100.0,627.8M111.1,638.4 L109.1,640.2M111.1,638.4 L113.7,636.5M116.2,635.1 L104.1,624.0M116.2,635.1 L119.0,633.7M116.2,635.1 L113.7,636.5M120.1,606.0 L111.8,615.4M120.1,606.0 L124.8,603.4M120.1,606.0 L113.3,605.4 L107.6,611.4M107.6,611.4 L111.8,615.4M107.6,611.4 L113.3,605.4 L120.1,606.0M107.6,611.4 L102.9,616.9 L97.7,618.0M537.5,217.2 L535.8,219.0M538.0,216.7 L540.6,213.8M533.2,321.5 L532.2,318.6M533.2,321.5 L538.6,319.0 L545.2,334.6M533.2,321.5 L534.2,324.2M532.2,318.6 L533.2,321.5M184.3,589.9 L183.1,587.7 L175.9,584.0M195.8,594.1 L189.4,594.1 L184.0,590.6M609.9,388.7 L617.7,390.0M609.9,388.7 L607.3,388.2M609.9,388.7 L610.3,385.3M616.3,401.4 L615.2,406.7M616.3,401.4 L617.7,390.0M109.1,640.2 L111.1,638.4M109.1,640.2 L105.4,645.0M109.1,640.2 L124.1,661.2M105.4,645.0 L119.3,664.7M105.4,645.0 L102.7,638.6M105.4,645.0 L109.1,640.2M105.4,645.0 L101.7,649.6M124.1,661.2 L130.5,664.2M124.1,661.2 L119.3,664.7M124.1,661.2 L109.1,640.2M130.5,664.2 L124.1,661.2M130.5,664.2 L136.7,668.1 L137.7,669.5 L136.9,671.2 L131.0,671.9 L124.2,668.1 L121.8,668.1M130.5,664.2 L131.3,661.6M119.3,664.7 L124.1,661.2M119.3,664.7 L114.7,667.9M119.3,664.7 L105.4,645.0M119.3,664.7 L121.8,668.1M131.3,661.6 L122.4,649.2M131.3,661.6 L130.5,664.2M131.3,661.6 L138.8,662.4M183.9,278.0 L184.9,283.4M183.9,278.0 L185.4,276.8 L184.5,272.6M184.9,283.4 L183.9,278.0M184.5,272.6 L190.2,268.8M184.5,272.6 L185.4,276.8 L183.9,278.0M184.5,272.6 L182.3,269.1 L184.0,265.8M181.7,274.6 L184.2,272.9M-145.2,319.9 L-137.2,330.6M-145.2,319.9 L-144.5,313.1M-145.2,319.9 L-153.8,324.0 L-158.7,327.8M-144.5,313.1 L-149.5,312.1M-144.5,313.1 L-145.2,319.9M-144.5,313.1 L-142.2,303.5M-158.7,327.8 L-161.5,329.6M-158.7,327.8 L-153.8,324.0 L-145.2,319.9M-179.5,342.8 L-184.2,346.6M-179.5,342.8 L-173.2,338.5M-184.2,346.6 L-179.5,342.8M-184.2,346.6 L-186.9,349.3M-184.2,346.6 L-191.3,328.8M-186.9,349.3 L-184.2,346.6M-191.3,328.8 L-184.2,346.6M-150.2,242.0 L-141.8,241.6 L-139.2,239.3M-135.5,245.0 L-136.4,241.6 L-139.2,239.3M-125.4,235.8 L-133.3,236.1 L-139.2,239.3M625.0,445.9 L629.7,446.2M625.0,445.9 L623.5,451.8M628.3,453.0 L633.4,452.7 L635.2,450.8M628.3,453.0 L623.5,451.8M637.6,447.5 L636.1,447.1 L632.0,451.7 L628.6,451.6M628.6,451.6 L625.4,450.8M628.6,451.6 L632.0,451.7 L636.1,447.1 L637.6,447.5M646.5,521.1 L652.1,521.7M646.5,521.1 L645.9,528.3M646.5,521.1 L636.6,520.9M652.8,525.6 L652.1,521.7M645.9,528.3 L646.5,521.1M628.1,519.7 L632.7,525.3 L636.6,520.9M607.1,541.9 L601.2,536.6M573.1,529.5 L590.7,545.5M573.1,529.5 L565.3,522.7M573.1,529.5 L581.9,528.9 L601.2,536.6M-166.3,-10.1 L-162.0,-7.7M-166.3,-10.1 L-170.6,-12.6M-162.0,-7.7 L-166.3,-10.1M-162.0,-7.7 L-155.5,-3.6M-170.6,-12.6 L-166.3,-10.1M-170.6,-12.6 L-177.0,-16.2M565.7,617.7 L562.0,611.8M565.7,617.7 L557.6,624.5M565.7,617.7 L571.5,614.6M562.0,611.8 L565.7,617.7M557.6,624.5 L552.8,628.6M557.6,624.5 L565.7,617.7M557.6,624.5 L550.7,617.5 L541.3,616.3M571.5,614.6 L574.1,620.5M571.5,614.6 L565.7,617.7M571.5,614.6 L567.0,604.6M552.8,628.6 L557.6,624.5M541.3,616.3 L550.7,617.5 L557.6,624.5M-142.3,286.1 L-141.0,290.8M-142.3,286.1 L-145.4,281.6M-142.3,286.1 L-134.3,288.1M-120.4,252.7 L-122.6,259.9M-120.4,252.7 L-119.6,251.5 L-116.9,252.6 L-117.8,253.5 L-120.4,252.7M-120.4,252.7 L-117.8,253.5 L-116.9,252.6 L-119.6,251.5 L-120.4,252.7M268.9,326.2 L274.8,325.3 L278.2,322.1M278.2,322.1 L274.8,325.3 L268.9,326.2M478.3,449.7 L473.6,452.7M478.3,449.7 L477.0,444.8M478.3,449.7 L482.1,448.2M473.6,452.7 L467.9,456.0M473.6,452.7 L478.3,449.7M473.6,452.7 L481.9,465.2M477.0,444.8 L476.2,439.6 L463.3,422.0M477.0,444.8 L478.3,449.7M477.0,444.8 L472.7,445.0 L469.4,443.7M482.1,448.2 L478.3,449.7M467.9,456.0 L462.7,459.1M467.9,456.0 L473.6,452.7M481.9,465.2 L473.6,452.7M462.7,459.1 L467.9,456.0M462.7,459.1 L456.9,462.2M463.4,460.4 L466.0,469.4M456.9,462.2 L462.7,459.1M456.5,462.3 L452.1,462.2 L449.7,460.3M449.7,460.3 L447.5,457.0M449.7,460.3 L452.1,462.2 L456.5,462.3M449.7,460.3 L447.4,462.6 L448.2,464.0 L445.6,465.8 L447.3,468.2M447.5,457.0 L442.2,449.7M447.5,457.0 L449.7,460.3M447.5,457.0 L430.9,469.0M447.3,468.2 L445.6,465.8 L448.2,464.0 L447.4,462.6 L449.7,460.3M442.2,449.7 L447.5,457.0M442.2,449.7 L436.3,453.7M430.9,469.0 L447.5,457.0M441.9,449.4 L436.3,441.1M436.3,453.7 L423.2,462.7M436.3,453.7 L442.2,449.7M614.9,442.7 L615.5,445.9M614.9,442.7 L614.8,437.7M616.3,442.3 L621.3,441.5 L621.6,440.5M61
381385.5,445.9 L607.1,445.5M615.5,445.9 L614.9,442.7M614.8,437.7 L616.0,424.5M614.8,437.7 L614.9,442.7M616.3,437.8 L618.3,434.1M616.0,424.5 L616.0,419.5M616.0,424.5 L614.8,437.7M-54.6,227.7 L-64.8,224.5M-54.6,227.7 L-45.6,225.2 L-42.5,217.9M-54.6,227.7 L-55.3,219.0 L-54.5,216.0M-62.4,220.0 L-64.8,224.5M336.5,182.1 L333.7,180.4M337.4,350.3 L341.8,350.0M337.4,350.3 L340.3,353.2M335.7,350.4 L349.9,363.3M336.1,349.0 L320.6,334.8M341.8,350.0 L340.0,351.4 L340.3,353.2M341.8,350.0 L351.2,349.2M341.8,350.0 L337.4,350.3M340.3,353.2 L340.0,351.4 L341.8,350.0M340.3,353.2 L349.9,363.3M340.3,353.2 L337.4,350.3M380.2,366.3 L383.2,360.9M380.2,366.3 L384.5,368.8M380.2,366.3 L373.2,362.1M383.2,360.9 L380.2,366.3M383.2,360.9 L384.7,355.2 L388.1,351.4M384.5,368.8 L387.0,370.2M384.5,368.8 L379.8,376.6M384.5,368.8 L380.2,366.3M373.2,362.1 L380.2,366.3M387.0,370.2 L384.5,368.8M387.0,370.2 L390.4,365.5M387.0,370.2 L392.5,374.8M379.8,376.6 L384.5,368.8M379.8,376.6 L382.5,382.2 L385.1,383.6 L387.6,383.3 L395.5,377.3M392.5,374.8 L395.5,377.3M392.5,374.8 L399.7,369.1M392.5,374.8 L387.0,370.2M395.5,377.3 L392.5,374.8M395.5,377.3 L387.6,383.3 L385.1,383.6 L382.5,382.2 L379.8,376.6M395.5,377.3 L404.0,384.4M399.7,369.1 L392.5,374.8M399.7,369.1 L403.1,365.1M404.0,384.4 L395.5,377.3M404.0,384.4 L407.9,387.6M405.0,391.2 L407.9,387.6M444.3,404.4 L452.0,404.7M444.3,404.4 L441.3,409.1M444.3,404.4 L433.0,403.0M441.3,409.1 L444.3,404.4M441.3,409.1 L444.9,413.1M433.0,403.0 L427.5,407.8M433.0,403.0 L444.3,404.4M452.1,400.5 L452.0,404.7M477.3,409.9 L476.9,403.3 L475.1,398.0M750.2,544.3 L743.6,550.1M750.2,544.3 L744.0,538.7 L742.2,527.5 L739.1,523.6M750.2,544.3 L753.7,551.2 L760.8,558.0 L767.7,568.8 L774.0,575.0 L781.3,578.0 L786.3,582.7M725.5,530.6 L722.1,533.4M725.5,530.6 L735.6,521.9 L739.1,523.6M725.5,530.6 L743.6,550.1M739.1,523.6 L735.6,521.9 L725.5,530.6M739.1,523.6 L742.2,527.5 L744.0,538.7 L750.2,544.3M786.3,582.7 L789.7,586.9 L789.1,591.0 L774.5,602.8M786.3,582.7 L783.1,585.6M786.3,582.7 L781.3,578.0 L774.0,575.0 L767.7,568.8 L760.8,558.0 L753.7,551.2 L750.2,544.3M106.8,5.9 L108.9,10.3M-149.4,250.5 L-149.4,257.5M-149.4,250.5 L-143.1,251.0 L-142.8,257.5 L-149.4,257.5M-149.4,250.5 L-155.6,250.4M-149.4,257.5 L-149.2,263.8M-149.4,257.5 L-149.4,250.5M-149.4,257.5 L-142.8,257.5 L-143.1,251.0 L-149.4,250.5M-155.6,250.4 L-154.7,264.3M-155.6,250.4 L-149.4,250.5M-149.2,263.8 L-149.4,257.5M-149.2,263.8 L-154.7,264.3M-149.2,263.8 L-148.6,267.6 L-145.9,269.5M267.8,346.1 L263.1,341.7M263.1,341.7 L267.8,346.1M-42.5,217.9 L-45.6,225.2 L-54.6,227.7M-54.5,216.0 L-55.3,219.0 L-54.6,227.7M124.0,369.8 L114.8,360.5M124.0,369.8 L126.3,372.2M124.0,369.8 L127.1,365.1 L128.6,359.2 L122.2,344.0M124.0,369.8 L121.1,372.7M114.8,360.5 L108.1,353.4M114.8,360.5 L124.0,369.8M114.8,360.5 L118.2,356.4M126.3,372.2 L124.0,369.8M126.3,372.2 L129.2,375.2M121.1,372.7 L119.2,374.6M121.1,372.7 L124.0,369.8M131.5,336.4 L128.1,341.0 L122.2,344.0M-213.5,633.3 L-212.9,629.3M-213.5,633.3 L-214.6,639.0M-185.8,642.9 L-189.4,645.1 L-214.6,639.0M468.4,183.1 L470.6,184.9M468.4,183.1 L466.0,185.9M468.4,183.1 L460.8,176.5 L459.9,177.1M470.6,184.9 L468.4,183.1M466.0,185.9 L468.4,183.1M466.0,185.9 L463.7,188.2 L459.9,184.5M280.1,335.4 L285.0,339.8M287.5,342.4 L289.8,344.4M287.5,342.4 L285.0,339.8M287.5,342.4 L290.2,339.6 L291.0,340.3M465.4,637.6 L463.0,638.4M465.4,637.6 L468.2,638.9M465.4,637.6 L462.4,640.2M465.4,637.6 L466.6,635.3M463.0,638.4 L465.4,637.6M468.2,638.9 L465.4,637.6M462.4,640.2 L460.7,642.0M462.4,640.2 L465.4,637.6M466.6,635.3 L465.4,637.6M452.0,648.6 L447.9,648.1M448.2,645.0 L447.9,648.1M208.4,-52.5 L209.9,-38.1M-15.7,431.5 L-20.2,428.3M-15.7,431.5 L-15.0,425.8 L-16.1,419.8M-15.7,432.0 L-15.5,435.6M-20.2,428.3 L-15.7,431.5M-10.4,444.8 L-9.6,454.8M-10.4,444.8 L-15.5,435.6M-10.4,444.8 L-5.0,446.9M-9.6,454.8 L-10.4,444.8M-15.5,435.6 L-15.7,432.0M-15.5,435.6 L-10.4,444.8M-5.0,446.9 L-10.4,444.8M378.3,553.0 L377.2,561.7M377.2,561.7 L378.3,553.0M377.2,561.7 L369.4,559.0M379.1,562.3 L385.7,564.2M379.1,562.3 L377.8,568.5 L374.2,568.0M369.4,559.0 L352.8,551.4M369.4,559.0 L377.2,561.7M369.4,559.0 L368.1,542.1M369.4,559.0 L364.4,566.7 L357.6,572.9M66.9,112.6 L68.2,115.2M66.9,112.6 L66.0,111.3 L65.1,111.4 L65.4,112.3 L66.9,112.6M66.9,112.6 L65.4,112.3 L65.1,111.4 L66.0,111.3 L66.9,112.6M50.5,120.2 L52.2,120.8 L68.2,115.2M495.5,482.2 L496.6,478.5M495.5,482.2 L495.8,485.0M493.8,481.5 L489.1,479.4M496.6,478.5 L495.5,482.2M495.8,485.0 L499.9,493.0M495.8,485.0 L495.5,482.2M478.1,475.9 L478.1,480.6M478.1,475.9 L466.0,475.9M478.1,475.9 L489.1,479.4M478.1,480.6 L478.1,483.7M478.1,480.6 L478.1,475.9M478.1,480.6 L486.1,487.5M466.0,475.9 L466.0,469.4M466.0,475.9 L440.3,476.5M466.0,475.9 L478.1,475.9M489.1,479.4 L493.8,481.5M489.1,479.4 L478.1,475.9M466.
381380,469.4 L457.7,469.4M466.0,469.4 L466.0,475.9M466.0,469.4 L463.4,460.4M466.0,469.4 L469.6,469.1M440.3,476.5 L466.0,475.9M8.5,81.1 L9.4,83.8M8.6,88.7 L9.4,83.8M15.3,-28.5 L18.7,-25.5M15.3,-28.5 L13.4,-30.1M15.3,-28.5 L21.5,-36.8M18.7,-25.5 L15.3,-28.5M18.7,-25.5 L25.4,-19.8M13.4,-30.1 L15.3,-28.5M13.4,-30.1 L6.3,-36.1M21.5,-36.8 L15.3,-28.5M457.7,469.4 L466.0,469.4M469.6,469.1 L471.6,467.6 L471.7,459.6M469.6,469.1 L466.0,469.4M154.9,616.9 L169.2,631.5M154.9,616.9 L159.4,613.2M154.9,616.9 L146.2,608.2M154.9,616.9 L150.3,620.4M169.2,631.5 L154.9,616.9M169.2,631.5 L163.3,633.7M169.2,631.5 L174.3,632.4 L177.0,631.3M159.4,613.2 L177.0,631.3M159.4,613.2 L163.6,609.3M159.4,613.2 L154.9,616.9M159.4,613.2 L149.0,602.7M146.2,608.2 L154.9,616.9M146.2,608.2 L149.0,602.7M146.2,608.2 L143.3,613.5M150.3,620.4 L157.1,627.3M150.3,620.4 L143.3,613.5M150.3,620.4 L154.9,616.9M150.3,620.4 L144.9,623.1M163.3,633.7 L157.1,627.3M163.3,633.7 L156.4,635.2M163.3,633.7 L169.2,631.5M177.0,631.3 L159.4,613.2M177.0,631.3 L174.3,632.4 L169.2,631.5M177.0,631.3 L178.1,629.2 L177.0,623.4M61.0,682.1 L82.5,687.4M61.0,682.1 L62.3,676.2M62.9,673.4 L62.3,676.2M93.9,684.4 L84.0,681.7M93.9,684.4 L99.5,691.6M93.9,684.4 L94.7,680.3M94.7,680.3 L93.9,684.4M94.7,680.3 L88.2,673.0M15.3,582.3 L18.1,578.8M18.1,578.8 L20.7,575.6M18.1,578.8 L15.3,582.3M14.6,583.1 L13.0,585.0M16.1,583.1 L17.9,584.6M14.2,581.5 L17.1,578.0M40.2,603.9 L34.1,598.7M40.2,603.9 L45.8,602.4M41.1,604.8 L43.6,606.9M34.1,598.7 L40.2,603.9M34.1,598.7 L28.1,593.5M39.5,604.6 L37.4,607.1M45.8,602.4 L48.2,602.0M45.8,602.4 L40.2,603.9M54.6,636.9 L53.7,633.5M51.9,626.6 L53.7,633.5M51.9,626.6 L50.8,622.5M52.7,633.7 L47.8,635.0M65.0,654.2 L59.4,655.7M65.0,654.2 L67.7,664.4M58.7,693.2 L79.9,698.7M58.7,693.2 L57.6,699.2M58.8,692.7 L59.5,689.7M57.6,699.2 L78.0,704.4M57.6,699.2 L54.1,721.6M57.6,699.2 L58.7,693.2M68.9,584.4 L69.5,589.1M68.9,584.4 L72.3,582.5M68.9,584.4 L64.2,588.8 L65.6,598.6M68.7,582.1 L72.3,582.5M68.7,582.1 L68.2,575.9M68.7,582.1 L62.9,582.0M72.3,582.5 L68.7,582.1M72.3,582.5 L77.6,580.0 L80.0,577.4M72.3,582.5 L68.9,584.4M-214.8,280.4 L-210.6,283.7 L-206.7,284.3M-214.8,280.4 L-215.9,275.6 L-212.3,272.5 L-204.2,274.1M-214.8,280.4 L-211.2,278.9 L-208.0,279.4M-206.7,288.4 L-206.0,293.1M-206.7,288.4 L-206.7,284.3M-206.7,288.4 L-217.5,289.4M-206.0,293.1 L-205.7,298.8M-206.0,293.1 L-206.7,288.4M-206.0,293.1 L-209.1,293.8M-217.5,289.4 L-206.7,288.4M-217.5,289.4 L-219.2,290.7 L-218.9,292.6 L-217.1,294.0M-205.7,298.8 L-206.0,293.1M-205.7,298.8 L-207.1,306.6M-205.7,298.8 L-214.7,300.2M-209.1,293.8 L-206.0,293.1M-209.1,293.8 L-211.6,294.2M-207.1,306.6 L-209.5,308.6M-207.1,306.6 L-205.7,298.8M-214.7,300.2 L-205.7,298.8M-209.5,308.6 L-207.1,306.6M370.4,36.8 L367.8,35.1M370.4,36.8 L374.2,27.4 L370.8,25.1M367.8,35.1 L370.4,36.8M370.8,25.1 L371.9,20.3M370.8,25.1 L367.8,24.4M370.8,25.1 L374.2,27.4 L370.4,36.8M258.7,207.5 L255.4,211.5M259.3,207.6 L262.6,210.2M255.4,211.5 L258.7,207.5M677.5,88.3 L683.6,84.7M677.5,88.3 L673.8,93.7M677.5,88.3 L684.3,86.2M683.6,84.7 L677.5,88.3M673.8,93.7 L677.5,88.3M673.8,93.7 L671.0,99.0M684.3,86.2 L693.9,85.6 L706.0,81.8M684.3,86.2 L677.5,88.3M720.2,59.0 L722.6,68.2 L722.2,70.3 L719.5,72.3M714.2,73.7 L719.5,72.3M714.2,73.7 L709.3,75.4M714.9,56.8 L713.8,52.6 L718.6,52.7M714.9,56.8 L719.5,56.1M-11.1,640.9 L-10.4,633.7M-11.3,642.3 L-14.5,665.3M-10.4,633.7 L-10.2,631.1M-10.4,633.7 L-11.1,640.9M-12.1,640.8 L-11.5,635.3M-17.4,645.2 L-27.2,635.6M-17.4,645.2 L-15.2,642.9M-27.2,635.6 L-17.4,645.2M-15.2,642.9 L-17.4,645.2M-23.8,651.5 L-25.5,653.1M-56.1,683.0 L-62.6,688.5M-56.1,683.0 L-41.7,669.0M-63.9,-77.1 L-53.1,-73.5M-63.9,-77.1 L-74.4,-81.4 L-84.0,-87.1M-53.1,-73.5 L-48.3,-71.9M-53.1,-73.5 L-53.8,-70.5 L-51.3,-69.3M-53.1,-73.5 L-63.9,-77.1M-78.1,-57.0 L-83.3,-61.6M-83.3,-61.6 L-78.1,-57.0M-147.3,-4.9 L-152.4,-4.2M-147.3,-4.9 L-145.4,-0.3M-147.3,-4.9 L-150.0,-8.7M-152.4,-4.2 L-147.3,-4.9M-152.4,-4.2 L-155.5,-3.6M-152.4,-4.2 L-158.9,-9.5M-145.4,-0.3 L-148.1,0.6M-145.4,-0.3 L-147.3,-4.9M-145.4,-0.3 L-139.9,-3.5 L-136.4,-10.3M-150.0,-8.7 L-154.3,-12.0M-150.0,-8.7 L-150.6,-15.0 L-152.1,-15.0 L-154.3,-12.0M-150.0,-8.7 L-147.3,-4.9M282.0,94.6 L283.0,98.4M287.6,97.9 L283.0,98.4M287.6,97.9 L290.8,97.4 L293.3,98.4M201.5,226.8 L202.7,224.5M201.5,226.8 L198.8,225.5 L2
3813800.2,225.5M202.7,224.5 L208.3,213.6M202.7,224.5 L201.5,226.8M202.7,224.5 L200.2,225.5M200.2,225.5 L198.8,225.5 L201.5,226.8M200.2,225.5 L202.7,224.5M187.9,205.8 L187.6,209.8M189.1,206.0 L187.6,209.8M187.6,209.8 L189.1,206.0M187.6,209.8 L187.9,205.8M197.6,-78.8 L188.9,-76.5M188.9,-76.5 L197.6,-78.8M188.9,-76.5 L188.7,-69.4M188.0,-76.2 L184.8,-75.2M188.7,-69.4 L188.9,-76.5M184.8,-75.2 L188.0,-76.2M211.0,203.6 L207.4,202.1M211.0,203.6 L208.5,208.3 L206.8,207.6M207.4,202.1 L203.2,200.3M207.4,202.1 L211.0,203.6M211.3,202.9 L213.3,198.4 L202.6,193.9 L201.0,197.7M206.8,207.6 L208.5,208.3 L211.0,203.6M256.6,244.9 L255.3,251.2M256.6,244.9 L258.3,240.7M-156.0,215.3 L-160.6,228.8M-156.0,215.3 L-151.7,203.3 L-140.5,187.6M-156.0,215.3 L-149.2,218.1M-140.5,187.6 L-134.1,178.7M-140.5,187.6 L-151.7,203.3 L-156.0,215.3M-140.5,187.6 L-136.0,189.4 L-127.2,189.3M-140.5,187.6 L-147.1,183.9 L-155.2,184.5M-149.2,218.1 L-146.4,218.5M-149.2,218.1 L-156.0,215.3M-162.7,243.1 L-161.4,253.4M-162.7,243.1 L-162.9,236.1 L-160.6,228.8M-161.4,253.4 L-162.7,243.1M-161.4,253.4 L-159.8,264.6M-161.4,253.4 L-164.9,253.4 L-169.1,247.7M-169.1,247.7 L-169.4,245.7 L-166.2,245.6 L-166.5,246.9 L-169.1,247.7M-169.1,247.7 L-166.5,246.9 L-166.2,245.6 L-169.4,245.7 L-169.1,247.7M-169.1,247.7 L-164.9,253.4 L-161.4,253.4M-154.7,264.3 L-149.2,263.8M-154.7,264.3 L-159.8,264.6M-154.7,264.3 L-155.6,250.4M-141.0,290.8 L-142.3,286.1M-141.0,290.8 L-145.0,292.2M-141.0,290.8 L-140.7,297.1 L-142.2,303.5M511.7,575.5 L516.7,572.1M511.7,575.5 L513.0,577.5M516.7,572.1 L526.1,565.5M516.7,572.1 L511.7,575.5M513.0,577.5 L511.7,575.5M526.1,565.5 L516.7,572.1M526.1,565.5 L519.1,560.4M526.1,565.5 L528.0,574.4M519.1,560.4 L510.6,564.4M519.1,560.4 L526.1,565.5M519.1,560.4 L515.7,553.7 L505.2,549.9M528.0,574.4 L526.1,565.5M189.8,252.0 L191.5,248.8M189.8,252.0 L177.5,274.7M180.6,266.1 L176.4,274.3M180.6,266.1 L183.2,261.3M180.6,266.1 L177.5,274.7M235.8,67.9 L228.1,72.3M226.4,60.8 L225.4,66.7 L228.1,72.3M337.8,307.0 L337.9,303.5M337.8,307.0 L325.9,307.6 L321.1,311.5 L320.9,313.4 L322.8,315.6 L331.4,319.4M337.8,307.0 L354.4,307.3M337.8,307.0 L335.9,313.3M337.9,303.5 L337.8,307.0M335.9,313.3 L331.4,319.4M335.9,313.3 L340.2,315.0 L345.1,313.8M335.9,313.3 L337.8,307.0M325.2,327.7 L331.4,319.4M325.2,327.7 L321.7,331.6M-59.0,610.9 L-49.1,616.3M-59.0,610.9 L-73.9,600.6M-59.0,610.9 L-62.0,616.0M-36.8,624.6 L-46.4,634.7M-36.8,624.6 L-49.1,616.3M-36.8,624.6 L-28.6,634.1M505.2,455.0 L503.1,460.5M505.2,455.0 L499.6,452.5 L499.2,447.8 L497.9,445.7 L493.6,445.1M505.2,455.0 L507.0,449.0M503.1,460.5 L505.2,455.0M493.6,445.1 L487.1,442.7M493.6,445.1 L497.9,445.7 L499.2,447.8 L499.6,452.5 L505.2,455.0M493.6,445.1 L491.7,449.2M507.0,449.0 L509.1,441.6M507.0,449.0 L505.2,455.0M487.1,442.7 L493.6,445.1M487.1,442.7 L486.7,443.6 L485.6,443.1 L486.1,442.2 L487.1,442.7M487.1,442.7 L486.1,442.2 L485.6,443.1 L486.7,443.6 L487.1,442.7M491.7,449.2 L493.6,445.1M140.9,625.0 L150.5,638.9M140.9,625.0 L135.5,627.2M140.9,625.0 L144.9,623.1M133.7,627.9 L129.8,629.3M133.7,627.9 L129.2,623.1M155.0,654.7 L148.3,645.0M155.0,654.7 L159.3,650.9 L157.8,646.4 L155.4,644.5 L148.3,645.0M155.0,654.7 L153.9,662.9M455.7,702.1 L455.4,710.1M-155.5,-3.6 L-152.4,-4.2M-155.5,-3.6 L-153.0,1.6M-155.5,-3.6 L-162.0,-7.7M-153.0,1.6 L-152.4,3.9M-153.0,1.6 L-155.5,-3.6M-135.6,79.9 L-143.3,78.8M-135.6,79.9 L-136.9,90.6M-135.9,78.5 L-149.9,36.8 L-151.2,23.9M-143.3,78.8 L-135.6,79.9M-143.3,78.8 L-149.2,76.9M-136.9,90.6 L-138.1,96.4M-136.9,90.6 L-135.
381386,79.9M-138.3,100.1 L-146.0,97.3 L-152.6,93.1M-138.3,100.1 L-138.3,109.7M-138.3,100.1 L-138.1,96.4M-152.6,93.1 L-155.8,91.4M-152.6,93.1 L-146.0,97.3 L-138.3,100.1M-138.3,109.7 L-149.8,106.5 L-160.9,100.4M-138.3,109.7 L-138.3,100.1M-138.1,96.4 L-138.3,100.1M-138.1,96.4 L-136.9,90.6M-138.3,111.0 L-138.4,127.4M-160.9,100.4 L-155.8,91.4M-160.9,100.4 L-167.3,96.7M-160.9,100.4 L-149.8,106.5 L-138.3,109.7M-138.4,127.4 L-145.9,126.4M-138.4,127.4 L-137.8,135.8M-138.4,127.4 L-138.3,111.0M-145.9,126.4 L-149.4,124.8 L-156.7,117.7M-145.9,126.4 L-138.4,127.4M-137.8,135.8 L-130.5,133.8M-137.8,135.8 L-138.4,127.4M571.1,484.2 L569.2,488.3M571.1,484.2 L575.3,485.7M571.1,484.2 L568.6,479.6M569.2,488.3 L571.1,484.2M568.6,479.6 L561.4,481.0M568.6,479.6 L573.2,477.9 L572.9,474.5M568.6,479.6 L566.8,467.9M568.6,479.6 L571.1,484.2M476.9,111.0 L469.3,112.1M476.9,111.0 L483.0,104.2M476.9,111.0 L481.2,116.0M469.3,112.1 L476.9,111.0M481.2,116.0 L476.9,111.0M464.5,98.8 L465.6,100.9M471.6,99.4 L468.9,99.2 L465.6,100.9M463.9,97.7 L467.9,89.8M462.7,96.2 L461.1,94.1M467.9,89.8 L463.9,97.7M457.9,85.2 L458.8,87.9M458.8,87.9 L457.9,85.2M458.8,87.9 L459.8,91.0M422.1,509.1 L422.5,506.6M-173.1,205.4 L-168.3,205.3 L-166.6,207.0M-173.1,205.4 L-179.4,206.5M-173.1,206.3 L-173.1,210.6M-166.6,207.0 L-166.4,209.8M-166.6,207.0 L-168.3,205.3 L-173.1,205.4M-179.4,206.5 L-181.4,212.1M-179.4,206.5 L-182.4,205.7 L-181.6,209.0M-179.4,206.5 L-173.1,205.4M273.1,316.0 L268.0,316.4 L268.5,313.2M118.2,356.4 L114.8,360.5M159.0,333.4 L156.1,331.9M159.0,333.4 L161.0,334.7M159.0,333.4 L161.9,326.2M158.7,324.8 L160.4,320.5M158.7,324.8 L161.9,326.2M158.7,324.8 L156.1,331.9M161.0,334.7 L159.0,333.4M161.0,334.7 L165.4,339.6M161.0,334.7 L164.4,331.1M165.4,339.6 L161.0,334.7M165.4,339.6 L161.9,346.5M164.4,331.1 L161.0,334.7M164.4,331.1 L167.5,330.4 L178.4,340.2 L178.5,342.5 L176.9,344.2M166.4,340.2 L173.5,345.5 L175.4,345.7 L176.9,344.2M176.9,344.2 L175.4,345.7 L173.5,345.5 L166.4,340.2M176.9,344.2 L182.0,349.2 L183.4,357.0M176.9,344.2 L178.5,342.5 L178.4,340.2 L167.5,330.4 L164.4,331.1M183.4,357.0 L182.0,349.2 L176.9,344.2M183.4,357.0 L184.7,359.5M127.6,678.1 L120.8,691.0M127.6,678.1 L133.7,678.8M127.6,678.1 L122.4,675.9M120.8,691.0 L127.6,678.1M120.8,691.0 L116.3,687.0M120.8,691.0 L125.9,694.0M363.9,43.0 L369.3,38.0M363.9,43.0 L372.2,52.3M369.3,38.0 L363.9,43.0M363.6,43.3 L360.6,46.1M371.9,20.3 L370.8,25.1M371.9,20.3 L372.8,13.0M367.8,24.4 L370.8,25.1M352.8,551.4 L369.4,559.0M352.8,551.4 L335.9,543.1 L333.6,536.8 L328.8,539.3M385.7,564.2 L379.1,562.3M385.7,564.2 L393.0,566.9M385.7,564.2 L387.5,559.0 L391.0,557.0M374.2,568.0 L377.8,568.5 L379.1,562.3M393.0,566.9 L407.1,572.1M393.0,566.9 L385.7,564.2M391.0,557.0 L387.5,559.0 L385.7,564.2M407.1,572.1 L411.6,571.8M407.1,572.1 L393.0,566.9M407.1,572.1 L405.1,578.5 L405.9,580.4M411.6,571.8 L407.1,572.1M411.6,571.8 L424.5,571.0M411.6,571.8 L416.3,554.1M405.9,580.4 L413.5,579.6 L415.2,578.2M405.9,580.4 L405.1,578.5 L407.1,572.1M424.5,571.0 L411.6,571.8M424.5,571.0 L425.6,566.0M416.3,554.1 L411.6,571.8M425.2,570.9 L431.1,570.5 L433.7,569.1M425.2,570.9 L425.6,566.0M425.6,566.0 L425.2,570.9M425.6,566.0 L424.5,571.0M434.2,568.7 L436.1,567.0M434.2,568.7 L435.4,572.1M433.7,569.1 L431.1,570.5 L425.2,570.9M436.1,567.0 L434.2,568.7M435.4,572.1 L434.2,568.7M593.3,577.1 L594.9,578.9M599.1,573.3 L594.9,578.9M599.1,573.3 L606.0,574.9M111.2,-14.6 L112.7,-10.1 L121.0,-4.8M738.0,634.5 L728.8,623.8M738.0,634.5 L753.7,619.9M738.0,634.5 L730.1,641.9M743.7,607.7 L736.9,600.0M743.7,607.7 L749.8,614.7M758.0,607.5 L762.4,612.8M758.0,607.5 L764.0,602.0M758.0,607.5 L749.8,614.7M758.0,607.5 L744.8,592.7M736.9,600.0 L743.7,607.7M736.9,600.0 L725.4,603.5M736.9,600.0 L744.8,592.7M744.8,592.7 L758.0,607.5M744.8,592.7 L736.9,600.0M744.8,592.7 L746.4,589.9M-212.9,629.3 L-213.5,633.3M291.0,340.3 L290.2,339.6 L287.5,342.4M70.2,594.4 L70.1,597.8M70.2,594.4 L69.5,589.1M70.2,594.4 L78.2,591.5 L87.2,585.2M475.8,614.3 L477.7,611.2M475.8,614.3 L473.8,618.8M475.8,614.3 L467.1,608.4M475.8,614.3 L485.0,618.4M477.7,611.2 L475.8,614.3M473.8,618.8 L472.3,622.2M473.8,618.8 L475.8,614.3M467.1,608.4 L475.8,614.3M467.1,608.4 L460.3,616.4M467.1,608.4 L480.9,592.6M485.0,618.4 L475.8,614.3M485.0,618.4 L487.9,619.1M472.3,622.2 L470.9,625.8M472.3,622.2 L473.8,618.8M472.3,622.2 L490.6,629.8M470.9,625.8 L472.3,622.2M456.2,649.2 L452.8,648.7M456.6,648.1 L458.3,644.4M452.8,648.7 L456.2,649.2M459.6,687.3 L459.9,694.1M459.0,686.2 L452.8,674.0M459.9,694.1 L457.3,700.7M459.9,694.1 L459.6,687.3M457.3,700.7 L460.3,699.8M457.3,700.7 L459.9,694.1M-111.0,-106.0 L-84.0,-87.1M-50.9,-116.7 L-58.9,-110.8 L-63.4,-109.1 L-75.0,-109.4 L-80.8,-112.2M10.7,411.5 L6.6,410.4 L-3.0,415.2 L-7.7,415.0 L-14.1,411.9M10.7,411.5 L12.9,413.5 L13.5,416.8 L12.3,421.4M3.1,430.1 L11.5,423.4 L12.3,421.4M-14.1,411.9 L-7.7,415.0 L-3.0,415.2 L6.6,410.4 L10.7,411.5M-13.8,410.5 L-8.8,406.1 L-8.6,399.4 L-6.6,395.9M53.1,440.7 L45.5,441.5 L36.0,436.4M42.3,427.6 L33.7,420.8M42.3,427.6 L36.0,436.4M42.3,427.6 L67.3,434.3M564.6,66.3 L567.7,73.2M564.6,66.3 L562.2,61.0 L577.4,60.1M347.6,330.0 L345.1,331.1M193.1,280.4 L201.1,286.9M193.1,280.4 L188.7,285.4 L196.7,292.4M193.1,280.4 L187.5,275.0 L189.8,272.1M201.1,286.9 L193.1,280.4M196.7,292.4 L188.7,285.4 L193.1,280.4M189.8,272.1 L191.3,270.1M189.8,272.1 L187.5,275.0 L193.1,280.4M186.1,261.9 L189.3,263.9M597.1,550.8 L590.7,545.5M444.5,255.9 L444.1,253.6M444.1,253.6 L444.5,255.9M-0.3,637.4 L3.6,637.8 L3.4,639.3 L-0.6,638.9M-0.3,637.4 L1.0,628.8 L2.8,627.9 L4.6,628.6M-0.6,638.9 L3.4,639.3 L3.6,637.8 L-0.3,637.4M-0.
381386,638.9 L-1.4,647.5 L3.2,651.5M4.6,628.6 L2.8,627.9 L1.0,628.8 L-0.3,637.4M3.2,651.5 L-1.4,647.5 L-0.6,638.9M561.4,481.0 L561.2,477.8 L558.9,474.5M561.4,481.0 L551.7,479.6M561.4,481.0 L568.6,479.6M558.9,474.5 L561.2,477.8 L561.4,481.0M475.4,288.5 L468.7,284.5M475.4,288.5 L481.1,292.1M475.4,288.5 L466.0,303.9M494.0,299.8 L496.1,296.0M494.0,299.8 L481.1,292.1M494.0,299.8 L497.0,301.6M495.3,268.2 L492.0,272.9M495.2,267.6 L493.1,265.7M495.9,268.2 L500.5,272.2M502.7,260.2 L500.2,263.0M501.9,257.5 L503.3,259.6M501.9,257.5 L503.3,255.2M531.1,516.4 L533.4,512.9M531.1,516.4 L527.9,521.1M537.8,508.3 L543.7,500.6M536.8,508.2 L533.7,506.0M536.8,508.2 L533.4,512.9M543.7,500.6 L550.0,506.0M543.7,500.6 L549.5,492.0M543.7,500.6 L537.8,508.3M550.0,506.0 L543.7,500.6M550.0,506.0 L556.3,511.5 L563.5,503.2M543.1,500.0 L540.1,497.7M543.1,500.0 L537.0,507.8M543.1,500.0 L548.7,491.7M557.4,497.7 L563.5,503.2M557.4,497.7 L549.5,492.0M545.7,477.5 L546.2,466.3 L544.2,463.9M545.7,477.5 L536.7,472.7 L530.9,467.0M545.7,477.5 L551.7,479.6M479.5,260.1 L476.2,261.0M476.2,261.0 L479.5,260.1M473.2,262.5 L473.5,265.5M472.4,262.0 L463.8,264.4M463.8,264.4 L472.4,262.0M391.0,271.3 L393.3,260.8M362.9,262.8 L364.0,259.9M362.2,263.1 L355.3,260.2M355.3,260.2 L362.2,263.1M355.5,259.7 L357.0,255.2M345.0,255.0 L347.6,256.3M345.0,255.0 L341.5,253.3M344.7,255.6 L340.2,264.5M347.6,256.3 L350.3,257.6M347.6,256.3 L345.0,255.0M336.7,250.9 L340.4,252.7M336.7,250.9 L333.9,249.5M336.4,251.4 L331.9,260.5M333.9,249.5 L336.7,250.9M333.9,248.7 L337.0,240.1M312.7,242.0 L315.6,242.6M312.7,242.0 L310.0,241.6M312.6,242.7 L311.5,246.8M315.6,242.6 L312.7,242.0M310.0,241.6 L312.7,242.0M296.0,241.7 L293.6,247.8M295.9,240.4 L29
381381.4,239.7M270.7,233.4 L267.8,232.0M270.3,234.2 L266.8,240.2M267.8,232.0 L270.7,233.4M263.0,230.4 L261.6,233.4M514.6,422.2 L512.2,430.5M507.3,429.3 L512.2,430.5M-158.9,-9.5 L-152.4,-4.2M-154.3,-12.0 L-150.0,-8.7M-154.3,-12.0 L-152.1,-15.0 L-150.6,-15.0 L-150.0,-8.7M-154.3,-12.0 L-163.2,-16.1M-163.2,-16.1 L-165.3,-12.0M-163.2,-16.1 L-170.5,-20.0M-163.2,-16.1 L-154.3,-12.0M-163.2,-16.1 L-159.7,-21.0 L-155.6,-24.3M-165.3,-12.0 L-163.2,-16.1M-170.5,-20.0 L-163.2,-16.1M-155.6,-24.3 L-159.7,-21.0 L-163.2,-16.1M-69.0,213.3 L-72.7,199.5M-69.0,213.3 L-73.9,214.0M-69.0,213.3 L-62.1,210.6M-74.8,208.2 L-75.3,205.6 L-76.1,205.5 L-76.1,208.1 L-74.8,208.2M-74.8,208.2 L-76.1,208.1 L-76.1,205.5 L-75.3,205.6 L-74.8,208.2M-74.8,208.2 L-73.9,214.0M517.8,410.5 L518.7,407.4M505.4,566.2 L507.1,568.6M505.4,566.2 L510.6,564.4M505.4,566.2 L502.0,566.7M507.1,568.6 L509.8,572.9M507.1,568.6 L505.4,566.2M510.6,564.4 L519.1,560.4M510.6,564.4 L505.4,566.2M502.0,566.7 L505.4,566.2M505.2,549.9 L499.8,549.5M505.2,549.9 L505.3,560.6M505.2,549.9 L515.7,553.7 L519.1,560.4M403.1,365.1 L405.6,368.3M403.1,365.1 L399.7,369.1M403.1,365.1 L405.8,360.7M405.6,368.3 L403.1,365.1M405.6,368.3 L406.1,369.8 L410.5,372.0 L410.6,370.8 L405.6,368.3M405.6,368.3 L410.6,370.8 L410.5,372.0 L406.1,369.8 L405.6,368.3M680.3,156.7 L683.1,153.7M680.3,156.7 L688.7,164.0M680.3,156.7 L668.1,146.8M402.1,260.9 L401.8,253.6M402.1,260.9 L393.3,260.8M402.1,260.9 L402.5,270.7M401.8,253.6 L402.1,260.9M402.5,270.7 L402.1,260.9M156.6,344.0 L161.9,346.5M238.6,223.2 L246.5,225.3M246.5,225.3 L238.6,223.2M491.1,407.9 L494.3,408.9M491.1,407.9 L490.7,403.6 L495.7,404.0M491.1,407.9 L489.9,410.8 L489.0,410.5M489.0,410.5 L489.9,410.8 L491.1,407.9M629.7,446.2 L625.0,445.9M631.6,545.4 L623.7,567.7M631.6,545.4 L637.9,548.6M623.7,567.7 L630.6,574.0M623.7,567.7 L631.6,545.4M623.7,567.7 L618.2,562.9 L617.5,558.7 L621.0,548.3 L629.0,544.9M657.9,162.7 L654.8,163.1M657.9,162.7 L653.1,172.6M657.9,162.7 L665.8,158.6M654.8,163.1 L657.9,162.7M654.8,163.1 L646.5,166.2 L640.4,166.3 L636.1,168.9 L632.2,168.9M653.1,172.6 L657.9,162.7M144.9,623.1 L156.4,635.2M144.9,623.1 L139.9,617.9M144.9,623.1 L150.3,620.4M144.9,623.1 L140.9,625.0M156.4,635.2 L144.9,623.1M156.4,635.2 L150.5,638.9M156.4,635.2 L163.3,633.7M139.9,617.9 L144.9,623.1M139.9,617.9 L143.3,613.5M139.9,617.9 L129.2,623.1M80.3,339.9 L81.8,349.6M80.3,339.9 L84.3,333.0 L89.3,329.5M80.3,339.9 L74.6,338.3 L70.2,333.9M76.9,310.0 L70.1,309.6M76.9,310.0 L79.4,302.3 L74.6,300.9M76.9,310.0 L76.9,314.3 L78.5,317.5 L89.3,329.5M468.8,128.2 L474.5,122.3M447.9,121.2 L450.2,123.3M447.9,121.2 L444.4,124.9M447.9,121.2 L453.3,115.5M629.0,544.9 L621.0,548.3 L617.5,558.7 L618.2,562.9 L623.7,567.7M518.1,196.2 L511.3,204.6M518.1,196.2 L512.8,195.3 L510.0,197.3 L507.5,201.4M622.8,700.1 L625.8,713.8M622.8,700.1 L621.2,693.1M622.8,700.1 L616.5,700.7M625.8,713.8 L622.8,700.1M625.8,713.8 L625.8,720.0 L620.9,727.8 L613.5,750.5M621.2,693.1 L622.8,700.1M621.2,693.1 L620.5,689.7M446.3,-81.4 L459.5,-84.8M446.3,-81.4 L450.1,-77.9 L450.1,-73.8M445.8,-81.2 L440.4,-79.6M459.5,-84.8 L469.5,-85.9M459.5,-84.8 L446.3,-81.4M450.1,-73.8 L450.1,-77.9 L446.3,-81.4M426.5,560.1 L430.1,560.1M426.5,560.1 L425.2,555.3M426.5,560.1 L426.2,563.2M430.1,560.1 L426.5,560.1M425.2,555.3 L426.5,560.1M426.2,563.2 L426.5,560.1M421.9,549.8 L420.4,547.0M420.4,547.0 L418.5,544.2M420.4,547.0 L421.9,549.8M420.7,550.5 L418.7,552.5M418.5,544.2 L420.4,547.0M502.4,437.4 L503.5,432.3 L497.0,430.1M502.4,437.4 L500.4,442.2 L494.3,440.7M502.4,437.4 L509.7,439.4M497.0,430.1 L489.2,428.0M497.0,430.1 L503.5,432.3 L502.4,437.4M494.3,440.7 L500.4,442.2 L502.4,437.4M494.3,440.7 L485.6,438.4M617.7,429.1 L618.3,434.1M618.3,434.1 L616.3,437.8M618.3,434.1 L617.7,429.1M382.5,386.7 L377.6,381.7M382.5,386.7 L377.6,390.4 L380.2,395.9 L384.4,395.7M382.5,386.7 L384.4,390.4 L384.4,395.7M377.6,381.7 L375.7,384.0M377.6,381.7 L382.5,386.7M377.6,381.7 L374.2,379.8M191.0,-30.4 L187.9,-29.7M191.0,-30.4 L197.4,-6.4M191.0,-30.4 L198.8,-32.5M187.9,-29.7 L191.0,-30.4M187.9,-29.7 L177.1,-28.3M197.4,-6.4 L191.0,-30.4M198.8,-32.5 L202.5,-34.2M198.8,-32.5 L205.2,-17.2 L208.4,-15.6 L211.3,-15.9 L213.6,-17.9M198.8,-32.5 L191.0,-30.4M163.6,609.3 L166.3,606.9M163.6,609.3 L159.4,613.2M163.6,609.3 L177.0,623.4M163.6,609.3 L157.3,602.8 L151.7,601.9 L149.0,602.7M149.0,602.7 L159.4,613.2M149.0,602.7 L151.7,601.9 L157.3,602.8 L163.6,609.3M149.0,602.7 L146.2,608.2M177.0,623.4 L178.1,629.2 L177.0,631.3M177.0,623.4 L163.6,609.3M137.6,-61.4 L141.1,-53.8 L141.1,-49.5M141.1,-49.5 L147.7,-48.2M141.1,-49.5 L141.1,-53.8 L137.6,-61.4M141.1,-49.5 L130.3,-48.8M147.7,-48.2 L141.1,-49.5M147.7,-48.2 L156.9,-52.6M147.7,-48.2 L149.6,-44.6M130.3,-48.8 L120.0,-42.5M130.3,-48.8 L141.1,-49.5M652.4,499.5 L650.7,492.1M652.4,499.5 L652.3,501.8 L654.5,504.9 L661.4,507.4M270.2,107.3 L268.5,100.2M268.5,100.2 L267.9,97.8M268.5,100.2 L270.2,107.3M660.9,-1.0 L666.0,-4.9M660.9,-1.0 L655.0,3.4M650.3,-3.9 L655.0,3.4M-23.2,690.6 L-29.5,689.3M-224.1,223.7 L-217.5,223.5M-215.9,238.2 L-217.2,244.6M-215.9,238.2 L-209.8,238.6M-215.9,238.2 L-217.5,223.5M551.7,-53.8 L548.3,-53.9 L546.1,-51.7 L541.2,-52.1 L539.7,-54.2 L540.1,-61.3M551.7,-53.8 L556.3,-54.9 L562.5,-63.0M551.7,-53.8 L549.5,-43.7M551.7,-53.8 L558.0,-68.6 L557.4,-74.2M540.1,-61.3 L539.7,-54.2 L541.2,-52.1 L546.1,-51.7 L548.3,-53.9 L551.7,-53.8M562.5,-63.0 L556.3,-54.9 L551.7,-53.8M549.5,-43.7 L551.7,-53.8M557.4,-74.2 L558.0,-68.6 L551.7,-53.8M418.0,222.0 L416.3,229.5M418.0,222.0 L419.0,217.4M418.0,222.0 L435.3,225.9M416.3,229.5 L418.0,222.0M416.3,229.5 L415.6,232.8M435.3,225.9 L438.2,226.5M435.3,225.9 L418.0,222.0M46.4,399.9 L48.3,398.1 L55.9,400.6 L56.5,401.8 L52.2,404.2 L47.0,402.2M47.0,402.2 L52.2,404.2 L56.5,401.8 L55.9,400.6 L48.3,398.1 L46.4,399.9M39.9,404.6 L38.7,409.3 L39.3,411.6 L43.6,414.2M39.9,404.6 L43.1,400.2M38.1,404.0 L35.2,403.4M38.1,404.0 L35.4,402.7M43.6,414.2 L39.3,411.6 L38.7,409.3 L39.9,404.6M43.1,400.2 L39.9,404.6M336.0,42.8 L342.1,49.4M336.0,42.8 L329.0,49.3M342.1,49.4 L336.0,42.8M329.0,49.3 L336.0,42.8M722.7,650.0 L717.3,643.7M722.7,650.0 L730.1,641.9M722.7,650.0 L715.7,657.5 L712.3,654.5M712.3,654.5 L715.7,657.5 L722.7,650.0M712.3,654.5 L700.6,640.9M728.8,623.8 L738.0,634.5M728.8,623.8 L721.4,615.2M774.5,602.8 L762.4,612.8M774.5,602.8 L789.1,591.0 L789.7,586.9 L786.3,582.7M774.5,602.8 L769.7,597.1M769.7,597.1 L773.1,594.1M769.7,597.1 L764.0,602.0M769.7,597.1 L746.3,569.9M769.7,597.1 L774.5,602.8M783.1,585.6 L781.2,587.2M783.1,585.6 L786.3,582.7M362.0,265.0 L358.6,272.9M365.1,275.6 L358.6,272.9M462.9,245.7 L462.7,250.4M463.0,245.0 L463.5,238.8M455.4,244.6 L462.9,245.4M463.5,238.8 L463.0,245.0M463.5,238.8 L456.5,241.0 L455.1,244.2M455.1,244.2 L456.5,241.0 L463.5,238.8M296.0,248.5 L293.6,247.8M296.0,266.1 L304.9,269.3M296.0,266.1 L287.8,263.1M286.4,288.0 L286.5,290.4M285.8,299.1 L284.5,301.8 L280.6,302.9M285.8,299.1 L285.2,303.9M285.8,299.1 L286.6,294.1M280.6,302.9 L285.2,303.9M280.6,302.9 L284.5,301.8 L285.8,299.1M280.6,302.9 L237.8,304.2 L215.2,313.4 L204.5,314.0 L194.2,313.3 L186.3,311.2 L182.3,307.4 L177.9,299.4 L172.3,295.9M285.2,303.9 L280.6,302.9M285.2,303.9 L285.8,299.1M285.2,303.9 L286.8,299.3M285.2,303.9 L290.3,305.8M286.6,294.1 L282.7,294.1M286.6,294.1 L285.8,299.1M286.6,294.1 L286.9,297.0M443.7,284.3 L436.5,287.0M443.7,284.3 L441.7,277.6M443.7,284.3 L446.4,291.6M436.5,287.0 L443.7,284.3M436.5,287.0 L434.7,289.1M441.7,277.6 L443.7,284.3M-84.4,206.3 L-83.7,208.9M34.2,668.7 L37.9,675.3M3.5,651.7 L5.5,653.4M3.8,651.3 L8.5,643.9M5.5,653.4 L3.5,651.7M-183.0,218.5 L-186.5,218.2M-183.0,218.5 L-181.6,212.8M-183.0,218.5 L-183.0,223.8M-186.5,218.2 L-183.0,218.5M-183.0,223.8 L-183.0,218.5M675.3,749.1 L683.4,746.2M675.3,749.1 L671.7,750.3M675.3,749.1 L678.1,757.2M675.3,749.1 L672.2,741.7M671.7,750.3 L675.3,749.1M425.9,316.8 L423.2,314.2M425.9,316.8 L432.7,321.7M53.5,588.6 L53.5,600.9M53.5,588.6 L57.0,584.4 L62.9,582.0M48.2,602.0 L45.8,602.4M48.2,602.0 L53.5,600.9M68.2,575.9 L68.7,582.1M62.9,582.0 L57.0,584.4 L53.5,588.6M62.9,582.0 L68.7,582.1M100.7,558.0 L97.0,566.1M100.7,558.0 L95.4,546.4 L96.3,544.9 L99.1,544.4M100.7,558.0 L102.3,552.0 L99.1,544.4M99.1,544.4 L96.3,544.9 L95.4,546.4 L100.7,558.0M99.1,544.4 L102.3,552.0 L100.7,558.0M437.9,131.8 L435.4,134.6M434.0,133.5 L424.3,129.1M415.7,155.0 L413.5,157.3M415.7,155.0 L418.0,152.7M407.1,152.1 L404.8,150.0M407.1,152.1 L413.5,157.3M613.5,750.5 L610.7,760.4 L611.2,771.2M613.5,750.5 L620.9,727.8 L625.8,720.0 L625.8,713.8M-181.4,212.1 L-179.4,206.5M-171.4,217.7 L-173.6,215.5 L-181.6,212.8M-171.4,217.7 L-166.6,225.3M529.2,227.3 L536.4,233.6M529.4,226.6 L534.7,220.5M528.7,227.5 L524.9,232.0M488.7,193.1 L481.2,186.7M488.7,193.1 L514.7,214.9M489.3,191.4 L476.7,181.3 L476.0,179.3M489.3,191.4 L496.2,186.8 L501.0,181.8M514.7,214.9 L518.5,218.1M514.7,214.9 L488.7,193.1M-208.0,279.4 L-211.2,278.9 L-214.8,280.4M487.1,113.5 L493.2,116.5M491.2,123.0 L492.8,125.4M491.2,123.0 L493.2,120.6 L493.2,116.5M491.2,123.0 L486.8,123.4 L482.8,125.8M227.2,-1.6 L233.0,5.9M227.2,-1.6 L227.9,-3.5 L230.4,-3.2 L235.9,3.1M233.0,5.9 L227.2,-1.6M233.0,5.9 L235.9,3.1M233.0,5.9 L229.7,9.8M235.9,3.1 L233.0,5.9M235.9,3.1 L230.4,-3.2 L227.9,-3.5 L227.2,-1.6M463.3,148.1 L456.1,141.5M365.1,126.4 L360.2,131.3M365.1,126.4 L362.9,123.8M360.2,131.3 L365.1,126.4M360.2,131.3 L362.8,137.3M362.9,123.8 L365.1,126.4M362.9,123.8 L353.1,132.8M365.6,126.9 L367.4,129.0M362.8,137.3 L360.2,131.3M222.9,123.8 L220.8,111.3M222.9,123.8 L220.4,130.4 L210.5,141.1M220.8,111.3 L222.9,123.8M210.5,141.1 L220.4,130.4 L222.9,123.8M723.7,44.8 L716.5,45.9 L717.3,48.8M717.3,48.8 L718.6,52.7M717.3,48.8 L716.5,45.9 L723.7,44.8M394.7,222.1 L391.8,220.1M394.7,222.1 L400.4,225.9M638.5,469.8 L644.3,468.7M638.5,469.8 L644.9,476.6M638.5,469.8 L633.3,468.6 L622.0,472.9 L618.5,476.2 L616.9,481.7M644.3,468.7 L646.0,468.7 L646.3,467.1M644.3,468.7 L646.3,467.1M644.3,468.7 L638.5,469.8M644.9,476.6 L647.5,477.8 L649.1,480.7 L649.1,486.4 L647.7,488.7M644.9,476.6 L638.5,469.8M616.9,481.7 L618.5,476.2 L622.0,472.9 L633.3,468.6 L638.5,469.8M616.9,481.7 L610.7,483.0 L602.0,487.0M616.9,481.7 L636.4,481.8 L640.3,483.2 L647.7,488.7M646.3,467.1 L644.3,468.7M646.3,467.1 L646.0,468.7 L644.3,468.7M219.9,81.8 L225.3,86.3M-106.9,342.1 L-109.5,348.5M-106.9,342.1 L-101.5,346.1M-106.9,342.1 L-115.8,338.7 L-126.2,331.7 L-131.3,330.1 L-137.2,330.6M-134.1,178.7 L-140.5,187.6M-134.1,178.7 L-129.5,172.5M-134.1,178.7 L-136.8,176.4M-128.0,170.3 L-129.5,172.5M-128.0,170.3 L-127.4,166.8M-136.8,176.4 L-134.1,178.7M-155.2,184.5 L-157.0,177.3M-155.2,184.5 L-162.6,186.0M-155.2,184.5 L-147.1,183.9 L-140.5,187.6M298.6,380.5 L298.6,384.5 L302.4,387.4M302.4,387.4 L298.6,384.5 L298.6,380.5M302.4,387.4 L304.1,388.0 L306.9,384.2M263.3,495.4 L260.7,500.2M290.1,481.5 L302.1,477.4M290.1,481.5 L270.9,485.7 L263.6,494.7M290.1,481.5 L285.6,474.4M302.1,477.4 L290.1,481.5M285.6,474.4 L290.1,481.5M285.6,474.4 L283.6,471.2 L275.6,465.2M308.8,474.1 L311.9,474.4M308.8,474.1 L303.3,476.6M308.7,480.7 L311.9,474.4M308.7,480.7 L300.1,498.1M352.8,474.3 L346.7,476.3M352.8,474.3 L353.7,482.2 L351.8,504.9 L348.9,506.8M353.4,474.0 L355.7,472.9M346.7,476.3 L352.8,474.3M346.7,476.3 L343.1,477.5M348.9,506.8 L351.8,504.9 L353.7,482.2 L352.8,474.3M113.7,636.5 L122.4,649.2M113.7,636.5 L116.2,635.1M113.7,636.5 L111.1,638.4M307.6,126.3 L310.6,125.3M310.6,125.3 L307.8,122.4M310.6,125.3 L307.6,126.3M310.6,125.3 L314.4,127.9M548.9,429.0 L542.3,425.2 L543.2,420.7M-206.4,70.6 L-212.7,72.9 L-217.7,72.9M-219.8,79.5 L-219.8,83.7M-219.8,79.5 L-217.7,72.9M-219.8,79.5 L-220.9,83.7M460.3,616.4 L457.9,619.4M460.3,616.4 L467.1,608.4M480.9,592.6 L467.1,608.4M480.9,592.6 L484.1,586.0M480.9,592.6 L482.6,599.8M202.5,-34.2 L198.8,-32.5M202.5,-34.2 L209.9,-38.1M213.6,-17.9 L211.3,-15.9 L208.4,-15.6 L205.2,-17.2 L198.8,-32.5M177.1,-28.3 L187.9,-29.7M177.1,-28.3 L160.5,-35.1M177.1,-28.3 L172.1,-22.5M160.5,-35.1 L157.8,-35.8M160.5,-35.1 L177.1,-28.3M172.1,-22.5 L168.5,-18.7M172.1,-22.5 L177.1,-28.3M157.8,-35.8 L160.5,-35.1M154.5,-35.0 L149.6,-44.6M154.5,-35.0 L157.3,-35.8M154.0,-34.7 L151.2,-32.3M149.6,-44.6 L154.5,-35.0M149.6,-44.6 L147.7,-48.2M157.3,-35.8 L154.5,-35.0M92.5,42.5 L102.5,30.2M92.5,42.5 L86.4,50.7 L87.9,55.7M92.5,42.5 L85.5,36.5M81.5,65.6 L89.7,59.1M81.5,65.6 L78.2,68.3M87.9,55.7 L89.7,59.1M87.9,55.7 L86.4,50.7 L92.5,42.5M722.1,533.4 L725.5,530.6M774.9,579.6 L781.2,587.2M544.2,463.9 L546.2,466.3 L545.7,477.5M544.2,463.9 L533.2,465.5 L530.9,467.0M530.9,467.0 L533.2,465.5 L544.2,463.9M530.9,467.0 L536.7,472.7 L545.7,477.5M572.9,474.5 L573.2,477.9 L568.6,479.6M566.8,467.9 L568.6,479.6M566.8,467.9 L571.6,466.5M718.2,77.8 L714.6,81.3M706.0,81.8 L710.5,89.7M706.0,81.8 L711.7,79.5 L714.6,81.3M706.0,81.8 L693.9,85.6 L684.3,86.2M520.8,429.3 L522.7,425.8M515.5,421.8 L522.7,425.8M515.1,420.8 L516.6,415.5M463.3,422.0 L460.2,417.6M463.3,422.0 L456.3,426.9M463.3,422.0 L469.2,417.8M463.3,422.0 L476.2,439.6 L477.0,444.8M461.1,405.9 L469.2,417.8M456.3,426.9 L449.9,431.2M456.3,426.9 L463.3,422.0M456.3,426.9 L469.4,443.7M449.9,431.2 L451.6,433.9M449.9,431.2 L443.9,435.4M449.9,431.2 L456.3,426.9M469.4,443.7 L472.7,445.0 L477.0,444.8M469.4,443.7 L456.3,426.9M451.6,433.9 L449.9,431.2M443.9,435.4 L449.9,431.2M651.8,13.4 L661.9,16.3M651.8,13.4 L644.3,11.1M641.9,12.9 L644.3,11.1M641.9,12.9 L631.1,21.8 L624.9,31.9M72
381381.6,15.3 L724.1,14.1 L726.7,15.0M720.6,15.8 L710.8,17.2M75.8,596.4 L91.6,586.5M75.8,596.4 L70.1,597.8M-48.3,-71.9 L-53.1,-73.5M-48.3,-71.9 L-45.4,-74.1M-48.3,-71.9 L-27.0,-62.9 L-9.3,-49.5M-45.4,-74.1 L-48.3,-71.9M-9.3,-49.5 L1.7,-40.1M-9.3,-49.5 L-12.6,-45.3M-9.3,-49.5 L-27.0,-62.9 L-48.3,-71.9M1.7,-40.1 L3.9,-38.2M1.7,-40.1 L-9.3,-49.5M3.9,-38.2 L1.7,-40.1M3.9,-38.2 L6.3,-36.1M2.3,-41.4 L6.3,-36.1M2.3,-41.4 L-1.0,-45.5M71.6,43.3 L75.0,58.0M71.6,43.3 L67.6,28.1M381.9,175.8 L387.0,180.4M381.9,175.8 L372.5,186.4M381.9,175.8 L381.8,169.7 L379.5,166.4 L379.9,162.4 L381.4,160.8M387.0,180.4 L392.0,184.9M387.0,180.4 L381.9,175.8M387.0,180.4 L376.6,192.0M387.0,180.4 L391.2,171.6M372.5,186.4 L381.9,175.8M372.5,186.4 L361.4,199.1M372.5,186.4 L376.6,192.0M372.5,186.4 L368.4,182.7 L359.0,190.9M381.4,160.8 L387.0,161.3 L390.1,168.0M381.4,160.8 L379.9,162.4 L379.5,166.4 L381.8,169.7 L381.9,175.8M376.6,192.0 L381.7,196.6M376.6,192.0 L387.0,180.4M376.6,192.0 L366.3,203.6M376.6,192.0 L372.5,186.4M391.2,171.6 L398.4,177.8M391.2,171.6 L390.1,168.0M391.2,171.6 L387.0,180.4M409.1,415.0 L413.1,414.8M409.1,415.0 L406.7,416.6 L408.9,420.7M409.1,415.0 L403.2,410.5M413.1,414.8 L409.1,415.0M413.1,414.8 L415.0,417.8 L416.7,416.3M413.1,414.8 L414.7,412.7M408.9,420.7 L406.7,416.6 L409.1,415.0M408.9,420.7 L406.6,422.5 L407.8,424.2 L410.0,422.5 L408.9,420.7M408.9,420.7 L410.0,422.5 L407.8,424.2 L406.6,422.5 L408.9,420.7M403.2,410.5 L403.2,408.2 L400.3,405.0M403.2,410.5 L396.9,410.9M403.2,410.5 L409.1,415.0M-94.4,622.5 L-97.6,625.3M-97.6,625.3 L-94.4,622.5M-97.6,625.3 L-100.5,636.2 L-102.3,638.4M407.1,547.8 L407.1,550.2M407.1,550.2 L407.1,547.8M349.3,201.9 L359.0,190.9M449.3,375.7 L457.7,377.8M676.9,182.7 L680.9,179.3M-155.8,91.4 L-160.9,100.4M-155.8,91.4 L-152.6,93.1M-155.8,91.4 L-163.0,87.5M-163.0,87.5 L-171.9,82.7M-163.0,87.5 L-155.8,91.4M-167.3,96.7 L-160.9,100.4M521.9,235.4 L518.0,239.9M521.9,235.4 L526.8,239.5M521.9,235.4 L524.9,232.0M526.8,239.5 L521.9,235.4M526.8,239.5 L529.4,241.5M524.9,232.0 L521.9,235.4M524.9,232.0 L528.7,227.5M-134.3,625.6 L-130.5,632.9M70.1,597.8 L70.2,594.4M70.1,597.8 L65.6,598.6M70.1,597.8 L75.8,596.4M79.3,616.9 L81.8,626.2M85.3,617.1 L79.3,616.7M85.3,617.1 L97.7,618.0M406.9,-90.5 L407.1,-84.8M406.9,-90.5 L405.6,-95.0M-145.9,269.5 L-148.6,267.6 L-149.2,263.8M-145.9,269.5 L-149.0,273.5 L-147.9,274.4M324.7,275.4 L323.0,274.7 L320.7,278.6 L318.5,279.8M318.5,279.8 L320.7,278.6 L323.0,274.7 L324.7,275.4M274.8,274.5 L278.5,268.0M439.6,303.1 L437.2,296.2M439.6,303.1 L442.0,309.6M439.6,303.1 L429.5,307.3M434.9,289.6 L437.0,295.6M-166.6,225.3 L-171.4,217.7M-168.4,218.7 L-162.4,220.7 L-166.3,225.7M414.7,412.7 L412.3,410.8M414.7,412.7 L413.1,414.8M414.7,412.7 L416.8,408.6M412.3,410.8 L414.7,412.7M416.8,408.6 L413.9,406.4M416.8,408.6 L418.8,410.0M416.8,408.6 L414.7,412.7M416.8,408.6 L420.0,406.1M-10.1,-64.3 L-15.7,-69.7 L-22.0,-73.2M-10.1,-64.3 L-2.5,-69.2M-9.4,-63.3 L-5.5,-54.7M300.1,498.1 L308.7,480.7M299.4,499.5 L295.9,506.8M401.2,94.0 L389.9,82.0M384.3,87.7 L389.9,82.0M523.1,248.7 L529.4,241.5M523.0,249.3 L525.5,254.0M250.3,485.6 L253.9,487.5M251.4,376.0 L253.6,373.8M251.4,376.0 L249.4,377.9 L243.1,379.0M325.3,196.8 L326.9,192.5M325.3,196.8 L320.8,196.9 L316.0,200.5M325.3,196.8 L330.0,201.5M413.9,59.3 L408.9,64.0M413.9,59.3 L417.8,63.5 L415.2,64.8M408.9,64.0 L413.9,59.3M408.9,64.0 L415.4,70.4M415.2,64.8 L417.8,63.5 L413.9,59.3M407.8,64.9 L404.4,68.2M415.4,70.4 L408.9,64.0M384.8,88.6 L387.1,93.1M387.1,93.1 L385.9,97.8M387.1,93.1 L384.8,88.6M674.9,-81.7 L668.2,-78.2M674.9,-81.7 L687.9,-90.7M674.9,-81.7 L679.4,-74.6M668.2,-78.2 L674.9,-81.7M687.9,-90.7 L689.7,-92.6M687.9,-90.7 L674.9,-81.7M679.4,-74.6 L674.9,-81.7M679.4,-74.6 L673.8,-72.5M-112.7,270.9 L-109.8,264.7M-112.7,270.9 L-116.0,273.3M734.6,72.8 L738.4,76.9M745.9,67.1 L738.4,76.9M306.6,198.8 L299.1,194.6M306.6,198.8 L316.2,188.7M306.6,198.8 L309.6,200.4 L316.0,200.5M299.1,194.6 L306.6,198.8M299.1,194.6 L297.3,197.7 L294.7,198.8M299.1,194.6 L293.7,190.7 L292.6,188.0 L293.6,186.5M-129.0,207.1 L-127.6,210.4M-129.0,207.1 L-114.4,200.9M-129.0,207.1 L-131.1,204.3M-8.6,209.1 L9.1,219.9M-8.6,209.1 L-18.3,204.6 L-72.7,199.5M25.9,223.1 L31.1,223.9M25.9,223.1 L22.4,222.4M31.1,223.9 L25.9,223.1M22.4,222.4 L25.9,223.1M22.4,222.4 L19.2,221.9M31.3,224.0 L36.1,224.7M36.1,224.7 L31.3,224.0M36.1,224.7 L42.1,225.8 L48.5,229.3M677.2,-11.9 L683.2,-6.6M677.2,-11.9 L680.2,-18.0 L680.6,-25.8M683.2,-6.6 L677.2,-11.9M683.2,-6.6 L687.9,-4.4 L703.6,-6.2 L707.5,-9.8 L706.6,-13.4M676.0,-11.5 L670.3,-7.8M680.6,-25.8 L680.2,-18.0 L677.2,-11.9M680.6,-25.8 L678.6,-28.2 L676.7,-35.1M703.7,-15.8 L706.6,-13.4M706.6,-13.4 L703.7,-15.8M706.6,-13.4 L707.5,-9.8 L703.6,-6.2 L687.9,-4.4 L683.2,-6.6M449.6,241.2 L449.4,243.8M449.4,243.8 L449.6,241.2M449.5,244.2 L454.7,244.6M673.9,212.9 L682.7,206.8 L682.1,202.3 L684.3,201.8 L685.1,206.2 L687.0,205.9 L687.7,207.0M478.1,483.7 L478.7,486.2M478.1,483.7 L478.1,480.6M478.1,483.7 L474.1,482.8M478.7,486.2 L478.1,483.7M478.7,486.2 L481.1,493.6 L480.6,495.8M478.7,486.2 L483.7,492.9M474.1,482.8 L470.2,482.7M474.1,482.8 L478.1,483.7M465.6,482.6 L469.0,482.7M469.0,482.7 L465.6,482.6M548.3,344.0 L553.5,351.1M559.3,358.9 L555.7,361.7M559.3,358.9 L554.0,351.9M559.3,358.9 L562.1,362.5 L565.7,359.8M555.7,361.7 L546.8,368.1 L544.1,364.9 L553.0,357.9M555.7,361.7 L559.3,358.9M554.0,351.9 L559.3,358.9M548.7,342.7 L545.2,334.6M361.4,199.1 L372.5,186.4M361.4,199.1 L357.0,204.7M366.3,203.6 L376.6,192.0M366.3,203.6 L364.7,206.7M373.8,205.3 L381.7,196.6M373.8,205.3 L371.9,208.5M138.8,662.4 L137.6,660.0M138.8,662.4 L131.3,661.6M138.8,662.4 L144.1,669.2 L151.0,669.7M153.9,662.9 L146.8,653.7M153.9,662.9 L154.1,667.9 L151.
381380,669.7M153.9,662.9 L155.0,654.7M22.5,512.2 L24.9,509.2M428.7,169.9 L426.4,167.9M428.7,169.9 L432.2,166.4M426.4,167.9 L428.7,169.9M10.4,389.5 L8.7,384.3M478.8,257.4 L478.9,248.7M478.9,248.7 L475.3,248.5 L474.1,246.5M478.9,248.7 L478.8,257.4M583.1,299.8 L585.0,302.2M585.0,302.2 L583.1,299.8M585.0,310.9 L582.0,313.0M585.0,310.9 L589.1,307.7M592.7,305.1 L589.1,307.7M592.7,305.1 L598.3,300.9M587.1,305.1 L585.5,303.0M587.1,305.1 L589.1,307.7M607.8,337.7 L610.3,336.0M607.8,337.7 L603.1,341.3 L598.5,335.3M615.5,332.1 L610.3,336.0M615.5,332.1 L619.3,329.2M-128.9,183.0 L-127.2,189.3M-86.7,187.6 L-96.4,188.6M499.8,549.5 L505.2,549.9M505.3,560.6 L505.2,549.9M350.6,365.3 L317.9,401.3 L305.5,394.0 L286.9,410.6 L279.3,419.7 L287.0,427.4 L284.3,431.0M351.9,365.7 L357.9,372.5M349.9,363.3 L340.3,353.2M349.9,363.3 L335.7,350.4M284.3,431.0 L287.0,427.4 L279.3,419.7 L286.9,410.6 L305.5,394.0 L317.9,401.3 L350.6,365.3M540.4,339.4 L542.2,344.0M540.0,339.6 L535.7,343.2M542.2,344.0 L543.4,346.5M542.2,344.0 L540.4,339.4M535.7,343.2 L540.0,339.6M474.1,246.5 L475.3,248.5 L478.9,248.7M-54.0,668.4 L-57.2,668.3 L-60.4,664.5M674.9,652.4 L668.0,666.6 L671.7,668.5M-221.4,249.7 L-222.3,251.8 L-223.7,251.9 L-222.8,248.8M-221.4,249.7 L-219.9,248.4 L-220.4,247.4 L-222.8,248.8M492.8,125.4 L491.2,123.0M657.9,581.0 L658.7,578.2M656.9,581.0 L652.5,580.9M658.7,578.2 L657.9,581.0M97.7,618.4 L98.3,622.0M85.4,617.5 L87.3,624.8M67.1,615.9 L70.5,629.2M-47.5,360.3 L-44.6,362.0M-47.5,360.3 L-50.8,366.7M-47.5,360.3 L-52.2,351.6M-44.6,362.0 L-47.5,360.3M-44.6,362.0 L-41.9,363.6M-50.8,366.7 L-47.5,360.3M-50.8,366.7 L-52.1,369.4 L-50.8,376.8 L-51.8,379.8 L-55.5,383.7 L-58.4,384.7M-52.2,351.6 L-53.1,348.4M-52.2,351.6 L-47.5,360.3M-53.1,348.4 L-52.2,351.6M157.1,627.3 L163.3,633.7M157.1,627.3 L150.3,620.4M143.3,613.5 L150.3,620.4M143.3,613.5 L146.2,608.2M143.3,613.5 L139.9,617.9M337.0,240.1 L333.9,248.7M97.7,618.0 L102.9,616.9 L107.6,611.4M97.7,618.0 L85.3,617.1M680.5,733.8 L682.8,734.6M680.5,733.8 L654.8,742.9M680.5,733.8 L676.3,731.1M676.3,731.1 L696.5,723.9M676.3,731.1 L669.6,725.9M676.3,731.1 L680.5,733.8M121.2,636.9 L127.2,645.7M121.2,636.9 L119.0,633.7M129.8,629.3 L136.9,638.8M129.8,629.3 L133.7,627.9M101.7,649.6 L114.7,667.9M101.7,649.6 L105.4,645.0M141.9,586.8 L148.3,591.4 L159.5,594.6 L166.7,599.0 L166.8,601.0 L164.1,603.6 L166.3,606.9M35.8,689.7 L41.7,686.5 L44.4,691.3 L41.3,693.7 L37.5,693.2 L35.2,690.5 L35.8,689.7M35.8,689.7 L35.2,690.5 L37.5,693.2 L41.3,693.7 L44.4,691.3 L41.7,686.5 L35.8,689.7M745.9,573.4 L735.0,574.0M745.9,573.4 L746.3,569.9M735.0,574.0 L745.9,573.4M356.7,205.8 L363.8,207.5M357.0,204.7 L361.4,199.1M355.6,205.6 L349.8,204.2M363.8,207.5 L356.7,205.8M364.7,258.1 L368.7,245.7M357.0,255.2 L361.1,244.5M357.0,255.2 L355.5,259.7M611.8,137.8 L607.1,139.9M611.8,137.8 L610.3,130.4M607.1,146.6 L607.1,139.9M-215.1,169.2 L-212.7,175.8 L-204.0,180.4 L-201.3,184.5M-201.3,184.5 L-201.2,187.6M-201.3,184.5 L-204.0,180.4 L-212.7,175.8 L-215.1,169.2M-201.2,187.6 L-201.3,184.5M-201.2,187.6 L-197.8,187.8M-197.8,187.8 L-201.2,187.6M-197.8,187.8 L-174.5,187.1M195.7,117.3 L193.1,118.1M195.7,117.3 L198.9,116.3M193.1,118.1 L187.9,119.1M193.1,118.1 L195.7,117.3M198.9,116.3 L195.7,117.3M196.0,118.9 L200.5,125.6M193.4,119.0 L195.9,118.4M200.5,125.6 L203.1,128.7M200.5,125.6 L197.8,128.0M200.5,125.6 L196.0,118.9M203.1,128.7 L200.5,125.6M197.8,128.0 L200.5,125.6M316.0,200.5 L309.6,200.4 L306.6,198.8M316.0,200.5 L320.8,196.9 L325.3,196.8M330.0,201.5 L325.3,196.8M330.0,201.5 L332.5,203.8 L343.4,205.3M624.9,31.9 L631.1,21.8 L641.9,12.9M624.9,31.9 L622.4,37.4M622.4,37.4 L624.9,31.9M666.0,-4.9 L670.3,-7.8M666.0,-4.9 L660.9,-1.0M666.0,-4.9 L657.1,-12.7 L660.4,-19.2M670.3,-7.8 L666.0,-4.9M670.3,-7.8 L676.0,-11.5M660.4,-19.2 L657.1,-12.7 L666.0,-4.9M63.8,368.1 L84.0,381.3 L86.2,384.4M86.2,384.4 L84.0,381.3 L63.8,368.1M309.2,299.3 L304.6,295.7M309.2,299.3 L315.2,303.8M309.2,299.3 L306.2,302.8 L300.0,306.2M304.6,295.7 L309.2,299.3M315.2,303.8 L309.2,299.3M300.0,306.2 L297.7,304.0M300.0,306.2 L302.4,308.1 L307.5,309.0 L309.9,307.3M300.0,306.2 L306.2,302.8 L309.2,299.3M300.0,306.2 L295.0,309.5M371.6,209.3 L376.3,210.4M371.9,208.5 L373.8,205.3M370.1,209.0 L365.0,207.8M399.5,-95.8 L402.3,-98.5M399.5,-95.8 L401.4,-93.5M399.5,-95.8 L396.6,-99.2M398.4,-104.6 L401.1,-106.2 L398.9,-109.5 L397.9,-108.5 L398.4,-104.6M398.4,-104.6 L397.9,-108.5 L398.9,-109.5 L401.1,-106.2 L398.4,-104.6M398.4,-104.6 L402.3,-98.5M401.4,-93.5 L399.5,-95.8M396.6,-99.2 L399.5,-95.8M474.6,396.9 L473.5,396.3 L473.4,395.6 L474.4,395.7 L474.6,396.9M474.6,396.9 L474.4,395.7 L473.4,395.6 L473.5,396.3 L474.6,396.9M475.1,398.0 L476.9,403.3 L477.3,409.9M490.6,263.5 L485.6,259.0M388.4,57.6 L384.0,58.9 L375.2,57.2M615.2,406.7 L616.3,401.4M615.2,406.7 L609.2,409.3M609.2,409.3 L615.2,406.7M424.0,405.3 L426.4,403.3M424.0,405.3 L423.3,404.4 L426.4,403.3M424.0,405.3 L420.7,406.0M426.4,403.3 L424.0,405.3M426.4,403.3 L423.3,404.4 L424.0,405.3M426.4,403.3 L427.1,400.8M420.7,406.0 L424.0,405.3M420.0,406.1 L419.0,402.5 L419.8,401.3M420.0,406.1 L416.8,408.6M419.8,401.3 L419.0,402.5 L420.0,406.1M540.1,497.7 L543.1,500.0M276.2,363.9 L278.2,361.7M264.2,351.5
38138L265.5,350.1 L267.3,351.5M542.7,487.7 L540.4,490.4M542.7,487.7 L548.7,491.7M542.7,487.7 L539.2,484.7 L533.1,491.1 L535.4,493.2M540.4,490.4 L542.7,487.7M535.4,493.2 L533.1,491.1 L539.2,484.7 L542.7,487.7M333.2,232.9 L337.2,222.5M334.2,212.4 L331.3,219.8M375.7,384.0 L377.6,381.7M374.2,379.8 L377.6,381.7M441.4,276.8 L440.1,273.3M440.1,273.3 L441.4,276.8M764.0,602.0 L769.7,597.1M764.0,602.0 L757.0,593.6M764.0,602.0 L758.0,607.5M757.0,593.6 L764.0,602.0M332.3,236.7 L329.1,246.5M33.7,420.8 L42.3,427.6M67.3,434.3 L42.3,427.6M-93.3,266.1 L-94.7,270.5M-92.4,272.1 L-94.7,270.5M-213.8,126.7 L-212.6,134.7M320.4,352.4 L323.8,348.5M320.4,352.4 L318.3,355.6 L318.5,358.4M318.7,350.8 L311.4,344.8M323.8,348.5 L320.4,352.4M323.8,348.5 L327.6,344.3M318.5,358.4 L321.7,358.4 L325.8,361.5 L320.5,368.2 L317.1,365.2M318.5,358.4 L314.4,362.9 L317.1,365.2M318.5,358.4 L319.0,361.6 L317.1,365.2M318.5,358.4 L318.3,355.6 L320.4,352.4M317.1,365.2 L320.5,368.2 L325.8,361.5 L321.7,358.4 L318.5,358.4M317.1,365.2 L314.4,362.9 L318.5,358.4M317.1,365.2 L319.0,361.6 L318.5,358.4M317.1,365.2 L312.8,371.1M312.8,371.1 L307.8,376.7M312.8,371.1 L317.1,365.2M265.2,73.2 L260.3,79.1 L256.3,81.4M257.0,73.1 L255.3,77.3 L256.3,81.4M694.6,711.3 L695.3,718.4M304.4,118.9 L306.8,121.5M304.4,118.9 L304.4,118.1 L300.4,114.6 L300.0,115.7 L304.4,118.9M304.4,118.9 L300.0,115.7 L300.4,114.6 L304.4,118.1 L304.4,118.9M306.8,121.5 L304.4,118.9M306.8,121.5 L303.5,124.4M306.8,121.5 L309.9,118.1 L310.3,115.5M-209.7,86.3 L-210.1,82.8M-209.7,86.3 L-209.2,97.5 L-212.9,105.0M-210.1,82.8 L-209.7,86.3M-210.1,82.8 L-219.8,83.7M-210.1,82.8 L-203.3,82.2M-212.9,105.0 L-209.2,97.5 L-209.7,86.3M452.4,150.9 L449.6,148.3M452.4,150.9 L457.1,155.2M446.5,151.5 L449.6,148.3M246.5,262.7 L246.4,266.9 L248.2,272.9M248.2,272.9 L252.9,273.0M248.2,272.9 L246.4,266.9 L246.5,262.7M248.2,272.9 L238.6,272.8M252.9,273.0 L248.2,272.9M252.9,273.0 L259.1,269.4M238.6,272.8 L234.7,268.5M238.6,272.8 L248.2,272.9M414.3,288.8 L416.2,291.1M414.3,288.8 L412.7,286.8M536.3,482.2 L537.5,482.3 L537.1,483.7 L531.0,489.2M531.0,489.2 L537.1,483.7 L537.5,482.3 L536.3,482.2M-62.1,210.6 L-69.0,213.3M-109.5,348.5 L-106.9,342.1M-101.5,346.1 L-99.7,348.4M-101.5,346.1 L-106.9,342.1M619.9,42.1 L621.9,38.3M619.9,42.1 L625.6,44.7 L632.4,44.3 L647.7,32.9 L664.4,33.7M619.9,42.1 L612.6,54.6M619.9,42.1 L613.2,38.5 L610.0,30.3M600.0,41.1 L608.6,51.6 L612.6,54.6M600.0,41.1 L587.6,25.8M616.9,114.3 L613.0,109.4M616.9,114.3 L617.6,118.7 L616.1,122.4 L613.8,127.1 L610.3,130.4M560.7,329.6 L563.6,333.8M559.3,329.6 L555.4,330.7M563.6,333.8 L560.7,329.6M582.6,359.5 L580.2,356.3M-102.2,174.3 L-101.7,177.3 L-103.1,180.7M595.9,297.7 L598.3,300.9M595.9,297.7 L593.7,294.8M603.4,297.1 L605.4,299.7M603.4,297.1 L598.3,300.9M619.3,329.2 L614.8,323.2M619.3,329.2 L615.5,332.1M619.3,329.2 L627.1,323.3 L630.5,313.5 L629.0,313.0M629.0,313.0 L630.5,313.5 L627.1,323.3 L619.3,329.2M496.1,296.0 L494.0,299.8M497.0,301.6 L494.0,299.8M344.3,35.7 L343.9,36.9 L345.0,37.2M344.3,35.7 L345.7,27.2M540.3,-20.2 L553.6,1.5M540.3,-20.2 L527.1,-41.8 L523.8,-55.0M536.8,-22.8 L538.9,-19.3M536.8,-22.8 L531.5,-31.0M515.4,256.3 L517.7,258.3M508.8,256.3 L508.2,259.0M508.8,256.3 L506.7,254.8 L503.3,255.2M509.4,256.3 L513.2,256.3M503.3,255.2 L501.9,257.5M503.3,255.2 L506.7,254.8 L508.8,256.3M85.5,36.5 L92.5,42.5M363.0,104.1 L359.4,100.3 L360.6,97.3M329.7,201.7 L323.2,205.9M343.4,205.3 L332.5,203.8 L330.0,201.5M323.2,205.9 L329.7,201.7M423.2,314.2 L425.9,316.8M423.2,314.2 L428.7,308.0M664.4,33.7 L663.2,39.5M664.4,33.7 L677.0,34.1 L688.9,28.5 L693.2,30.5 L693.8,33.6 L692.5,38.2M664.4,33.7 L647.7,32.9 L632.4,44.3 L625.6,44.7 L619.9,42.1M663.2,39.5 L659.7,42.5 L657.9,42.2M663.2,39.5 L664.4,33.7M692.5,38.2 L693.8,33.6 L693.2,30.5 L688.9,28.5 L677.0,34.1 L664.4,33.7M99.5,12.7 L101.4,16.0 L101.1,20.6M97.1,19.1 L101.1,20.6M525.8,585.6 L529.4,586.1M525.8,585.6 L524.2,589.1M529.4,586.1 L525.8,585.6M524.2,589.1 L525.8,585.6M556.7,264.7 L562.6,269.7M555.9,264.2 L552.8,261.5M574.1,620.5 L555.1,636.7M574.1,620.5 L575.2,622.8M574.1,620.5 L571.5,614.6M555.1,636.7 L574.1,620.5M575.2,622.8 L577.6,628.4M575.2,622.8 L574.1,620.5M595.9,676.6 L597.5,673.2 L605.6,666.9M620.5,689.7 L621.2,693.1M621.8,689.1 L620.0,687.4M488.2,395.9 L489.6,390.8M137.8,133.5 L131.9,135.4M140.0,132.9 L150.9,129.6M459.8,484.7 L453.1,482.5 L450.5,484.1M450.5,484.1 L453.1,482.5 L459.8,484.7M49.3,533.4 L52.3,529.1M49.3,533.4 L53.1,535.0 L55.6,532.7M52.3,529.1 L49.3,533.4M52.3,529.1 L53.9,526.6M52.3,529.1 L55.8,529.7 L55.6,532.7M48.5,534.5 L45.1,539.1M55.6,532.7 L57.6,529.5M55.6,532.7 L55.8,529.7 L52.3,529.1M55.6,532.7 L53.1,535.0 L49.3,533.4M-6.2,42.9 L8.0,48.6M-2.8,61.4 L5.3,58.4 L7.1,55.2 L8.0,48.6M555.7,516.2 L549.3,523.3M555.7,516.2 L567.4,501.0 L575.3,485.7M571.6,466.5 L566.8,467.9M-12.7,582.5 L-21.7,594.2M-12.7,582.5 L-21.8,578.7M364.7,206.7 L366.3,203.6M365.0,207.8 L370.1,209.0M-211.7,242.6 L-217.2,244.6M690.0,753.0 L686.2,754.4M471.7,459.6 L471.6,467.6 L469.6,469.1M535.9,339.1 L539.3,337.9M539.3,337.9 L535.9,339.1M122.4,649.2 L131.3,661.6M122.4,649.2 L113.7,636.5M122.4,649.2 L127.2,645.7M416.1,334.5 L413.7,341.2M4
3813816.1,334.5 L427.1,338.6M427.1,338.6 L421.7,353.0M427.1,338.6 L430.3,339.1M427.1,338.6 L416.1,334.5M353.7,593.6 L354.3,597.3M353.7,593.6 L343.1,605.5 L344.3,610.1M353.7,593.6 L353.2,588.3M354.3,597.3 L354.8,599.7M354.3,597.3 L353.7,593.6M344.3,610.1 L343.1,605.5 L353.7,593.6M353.2,588.3 L353.7,593.6M353.2,588.3 L352.7,585.5M174.2,-62.5 L172.2,-72.0M174.2,-62.5 L156.9,-52.6M174.2,-62.5 L182.7,-62.7 L188.2,-67.9M172.2,-72.0 L174.2,-62.5M172.2,-72.0 L170.8,-75.7 L158.5,-69.3M156.9,-52.6 L147.7,-48.2M156.9,-52.6 L174.2,-62.5M156.9,-52.6 L152.8,-70.5 L156.6,-74.1M188.2,-67.9 L182.7,-62.7 L174.2,-62.5M529.9,635.6 L532.8,633.7M529.9,635.6 L523.2,640.0M396.9,410.9 L401.0,416.2 L401.3,418.3M396.9,410.9 L394.2,412.4 L392.7,415.7M396.9,410.9 L403.2,410.5M401.3,418.3 L401.0,416.2 L396.9,410.9M-181.6,209.0 L-182.4,205.7 L-179.4,206.5M345.1,313.8 L340.2,315.0 L335.9,313.3M-35.2,571.0 L-45.1,565.7 L-47.4,561.7M353.1,132.8 L362.9,123.8M523.8,167.0 L524.8,157.3M507.9,150.2 L509.8,151.0 L520.4,146.8 L525.2,152.4 L526.0,155.6 L524.8,157.3M507.9,150.2 L518.9,143.1 L550.4,126.9 L564.5,116.2 L572.8,107.5M507.9,150.2 L500.4,156.0M259.1,269.4 L252.9,273.0M266.5,277.5 L259.6,269.1M266.5,277.5 L268.5,279.9M-219.8,83.7 L-210.1,82.8M-219.8,83.7 L-219.8,79.5M-203.3,82.2 L-210.1,82.8M-203.3,82.2 L-176.7,81.8M462.9,415.0 L460.2,417.6M270.7,98.8 L271.9,103.9M-46.4,634.7 L-36.8,624.6M401.3,155.7 L405.6,160.7 L413.5,164.0M631.3,-14.3 L627.3,-16.1 L611.6,-16.1M631.3,-14.3 L624.8,-7.6 L623.0,-2.8 L625.8,10.6M631.3,-14.3 L644.2,-28.7 L646.3,-36.1 L646.2,-41.7M611.6,-16.1 L612.2,-20.3M611.6,-16.1 L627.3,-16.1 L631.3,-14.3M611.6,-16.1 L607.7,-8.9 L605.0,-7.0 L602.0,-5.6 L596.0,-6.6M625.8,10.6 L623.0,-2.8 L624.8,-7.6 L631.3,-14.3M646.2,-41.7 L646.3,-36.1 L644.2,-28.7 L631.3,-14.3M646.2,-41.7 L647.0,-47.0 L656.0,-60.8M621.9,38.3 L619.9,42.1M610.0,30.3 L613.2,38.5 L619.9,42.1M604.3,613.8 L601.8,614.4M157.5,324.3 L168.3,295.1M157.5,324.3 L149.4,345.5M160.4,320.5 L158.7,324.8M160.4,320.5 L163.0,316.4 L166.6,314.4 L211.8,315.8 L217.8,314.3 L235.9,306.4 L253.4,305.0M160.4,320.5 L170.0,295.1M161.9,326.2 L159.0,333.4M161.9,326.2 L158.7,324.8M42.3,543.2 L40.7,545.4M42.9,543.6 L47.3,546.3M42.7,542.5 L44.5,540.0M42.7,542.5 L44.8,537.4M40.7,545.4 L42.3,543.2M32.7,556.7 L35.9,552.0M31.0,559.1 L28.8,562.6M472.1,186.0 L474.5,183.4M470.8,674.1 L471.1,682.4M476.0,682.8 L471.1,682.4M423.0,490.6 L420.3,493.6M422.1,495.9 L420.3,493.6M650.7,113.5 L654.2,115.8M650.7,113.5 L644.7,109.4M654.2,115.8 L658.3,118.6M654.2,115.8 L650.7,113.5M644.7,109.4 L650.7,113.5M644.7,109.4 L640.1,105.3M670.0,126.6 L664.1,122.6M670.0,126.6 L673.7,129.3 L675.1,132.5M-73.9,600.6 L-79.7,599.6 L-83.7,597.0M-73.9,600.6 L-59.0,610.9M-62.0,616.0 L-59.0,610.9M289.3,325.4 L294.1,329.6M224.6,124.1 L224.0,121.2 L225.7,117.1 L224.3,111.3 L228.7,110.4 L232.1,116.9M224.6,124.1 L225.1,130.1 L224.7,130.1 L222.7,129.2 L224.6,124.1M224.6,124.1 L222.7,129.2 L224.7,130.1 L225.1,130.1 L224.6,124.1M232.1,116.9 L234.2,120.2M232.1,116.9 L228.7,110.4 L224.3,111.3 L225.7,117.1 L224.0,121.2 L224.6,124.1M232.1,116.9 L235.5,115.1M234.2,120.2 L232.1,116.9M438.2,234.3 L432.4,233.0M438.2,234.3 L443.0,228.4M432.4,233.0 L433.7,226.8M432.4,233.0 L438.2,234.3M443.0,228.4 L438.2,234.3M486.1,487.5 L478.1,480.6M480.6,495.8 L481.1,493.6 L478.7,486.2M483.7,492.9 L478.7,486.2M746.4,589.9 L744.8,592.7M746.4,589.9 L748.3,584.8M41.4,515.4 L47.4,518.3M41.4,515.4 L37.7,519.8M277.5,60.3 L290.3,73.9 L292.0,77.5M292.0,77.5 L292.5,87.5M292.0,77.5 L290.3,73.9 L277.5,60.3M457.1,155.2 L452.4,150.9M602.0,487.0 L590.4,489.2 L585.4,492.1 L574.0,511.3 L565.3,522.7M602.0,487.0 L610.7,483.0 L616.9,481.7M647.7,488.7 L650.7,492.1M647.7,488.7 L649.1,486.4 L649.1,480.7 L647.5,477.8 L644.9,476.6M647.7,488.7 L640.3,483.2 L636.4,481.8 L616.9,481.7M650.7,492.1 L647.7,488.7M650.7,492.1 L652.4,499.5M673.0,757.8 L678.1,757.2M296.5,94.3 L293.3,98.4M562.6,269.7 L556.7,264.7M-166.4,209.8 L-166.6,207.0M-166.4,209.8 L-166.5,213.4 L-170.9,217.3M-165.9,209.8 L-160.5,209.0M-170.9,217.3 L-166.5,213.4 L-166.4,209.8M320.2,334.3 L321.3,332.1M320.6,334.8 L336.1,349.0M321.3,332.1 L319.4,333.7M321.3,332.1 L320.2,334.3M311.4,344.8 L314.6,340.9M311.4,344.8 L304.2,353.1M311.4,344.8 L318.7,350.8M314.6,340.9 L311.4,344.8M314.6,340.9 L317.8,337.1M352.9,264.8 L350.9,270.1M352.9,264.8 L354.5,260.5M413.9,406.4 L416.8,408.6M418.8,410.0 L416.8,408.6M-66.7,674.9 L-70.6,670.2M-70.6,670.2 L-66.7,674.9M-70.6,670.2 L-76.0,668.3M-114.4,200.9 L-129.0,207.1M-131.1,204.3 L-129.0,207.1M341.0,509.0 L344.0,481.9 L343.1,477.5M343.1,477.5 L335.5,479.5M343.1,477.5 L346.7,476.3M343.1,477.5 L344.0,481.9 L341.0,509.0M564.1,357.7 L565.7,359.8M564.1,357.7 L557.8,349.2M466.0,303.9 L475.4,288.5M710.5,89.7 L706.0,81.8M640.1,598.6 L633.9,599.1M640.1,598.6 L644.7,597.5M634.1,590.3 L633.9,599.1M638.9,621.3 L644.8,619.4M638.9,621.3 L634.0,620.5M250.1,495.3 L243.7,507.3M44.0,292.9 L45.7,295.0M44.0,292.9 L41.3,289.8M44.0,292.9 L41.0,295.4M45.7,295.0 L44.0,292.9M41.3,289.8 L44.0,292.9M41.0,295.4 L44.0,292.9M44.6,292.4 L41.9,289.2M44.6,292.4 L46.3,294.5M285.0,207.0 L289.1,204.0M285.0,207.0 L277.5,212.5M277.5,212.5 L285.0,207.0M277.5,212.5 L273.2,214.4M78.0,704.4 L57.6,699.2M78.0,704.4 L95.1,708.6M78.0,704.4 L79.9,698.7M-211.0,252.0 L-213.1,253.8M-211.0,252.0 L-213.0,248.4 L-211.6,247.7 L-209.6,251.1 L-211.0,252.0M-211.0,252.0 L-209.6,251.1 L-211.6,247.7 L-213.0,248.4 L-211.0,252.0M-176.7,258.7 L-171.6,261.3M-176.7,258.7 L-181.5,259.4M-176.7,258.7 L-176.4,253.5 L-178.5,251.5 L-180.8,251.8M-180.8,251.8 L-178.5,251.5 L-176.4,253.5 L-176.7,258.7M618.6,631.8 L617.3,629.8M617.3,629.8 L618.6,631.8M269.9,309.6 L270.2,313.1M269.9,309.6 L274.4,309.8M269.9,309.6 L266.3,309.7 L265.4,311.0M554.5,427.1 L543.2,420.7M517.4,412.0 L516.6,415.5M517.4,412.0 L521.5,413.1M516.6,415.5 L515.1,420.8M516.6,415.5 L517.4,412.0M521.5,413.1 L517.4,412.0M508.5,401.8 L510.6,394.7M156.6,-74.1 L152.8,-70.5 L156.9,-52.6M120.0,-42.5 L130.3,-48.8M423.2,462.7 L436.3,453.7M697.6,193.2 L703.2,187.6M697.6,193.2 L698.4,194.3 L697.2,195.6 L696.3,193.5M457.9,619.4 L460.3,616.4M395.4,424.5 L393.5,419.3M395.4,424.5 L398.7,424.8 L402.0,427.1M395.4,424.5 L393.0,428.8M402.0,427.1 L398.7,424.8 L395.4,424.5M393.0,428.8 L392.1,427.5 L393.5,425.2M393.0,428.8 L395.4,424.5M393.0,428.8 L389.8,431.2M415.3,236.1 L406.2,229.9M415.3,237.1 L416.0,242.8M406.2,229.9 L415.3,236.1M400.4,225.9 L403.5,228.0M400.4,225.9 L394.7,222.1M400.4,225.9 L397.6,232.1M403.5,228.0 L400.4,225.9M397.6,232.1 L400.4,225.9M316.0,200.8 L315.0,207.6M294.7,198.8 L297.3,197.7 L299.1,194.6M607.7,409.9 L588.3,417.3M240.7,29.3 L234.4,34.5M236.9,1.0 L237.8,-2.1 L236.0,-3.7 L235.3,-2.7 L236.9,1.0M236.9,1.0 L235.3,-2.7 L236.0,-3.7 L237.8,-2.1 L236.9,1.0M402.4,-60.5 L401.8,-59.5 L402.2,-58.7 L402.6,-59.4 L402.4,-60.5M402.4,-60.5 L402.6,-59.4 L402.2,-58.7 L401.8,-59.5 L402.4,-60.5M402.4,-60.5 L404.0,-69.4 L408.7,-75.7 L408.6,-79.1M408.6,-79.1 L402.0,-75.2M408.6,-79.1 L408.7,-75.7 L404.0,-69.4 L402.4,-60.5M612.2,-20.3 L612.9,-25.8M612.2,-20.3 L611.6,-16.1M596.0,-6.6 L594.6,-3.2M596.0,-6.6 L602.0,-5.6 L605.0,-7.0 L607.7,-8.9 L611.6,-16.1M596.0,-6.6 L596.5,-9.8 L592.2,-17.5M-220.9,83.7 L-219.8,79.5M278.9,202.9 L276.0,209.1 L277.2,212.1M277.2,212.1 L276.0,209.1 L278.9,202.9M572.8,33.0 L556.5,6.2M47.3,546.3 L42.9,543.6M605.4,299.7 L603.4,297.1M582.0,313.0 L585.0,310.9M582.0,313.0 L584.2,316.0M582.0,313.0 L574.6,318.7M574.6,318.7 L582.0,313.0M574.6,318.7 L572.5,315.8M581.1,311.9 L577.9,307.7M575.2,319.4 L576.7,321.5M572.5,315.8 L574.6,318.7M610.3,130.4 L613.8,127.1 L616.1,122.4 L617.6,118.7 L616.9,114.3M610.3,130.4 L611.8,137.8M610.3,130.4 L604.6,121.9 L599.0,118.5M311.5,246.8 L310.1,252.5M311.5,246.8 L312.6,242.7M306.6,251.5 L310.1,252.5M306.6,251.5 L298.2,249.1M314.4,253.7 L310.1,252.5M247.6,116.0 L250.5,117.1M247.6,116.0 L243.9,119.8M247.6,116.0 L248.6,111.9 L246.5,103.0M250.5,117.1 L247.6,116.0M243.9,119.8 L241.2,121.2M243.9,119.8 L239.6,111.6M243.9,119.8 L247.6,116.0M246.5,103.0 L242.3,104.1M246.5,103.0 L248.6,111.9 L247.6,116.0M246.5,103.0 L254.8,100.7M239.6,111.6 L243.9,119.8M594.6,-3.2 L596.0,-6.6M592.2,-17.5 L596.5,-9.8 L596.0,-6.6M592.2,-17.5 L589.5,-21.3M416.7,416.3 L415.0,417.8 L413.1,414.8M297.7,304.0 L300.0,306.2M309.9,307.3 L307.5,309.0 L302.4,308.1 L300.0,306.2M295.0,309.5 L299.0,313.9M295.0,309.5 L300.0,306.2M295.0,309.5 L290.3,305.8M299.0,313.9 L295.0,309.5M298.1,314.9 L293.7,310.2M299.9,314.9 L301.9,317.1M280.1,294.1 L276.9,294.1M280.1,294.1 L276.3,289.6M276.9,294.1 L280.1,294.1M276.9,294.1 L277.0,298.4M276.9,294.1 L225.3,294.9M281.0,294.1 L282.1,296.9M276.3,289.6 L273.2,285.7M276.3,289.6 L280.1,294.1M-124.4,214.2 L-121.9,213.9M607.3,388.2 L609.9,388.7M98.0,357.6 L97.0,355.0 L100.6,351.9 L102.4,355.0 L104.7,356.2 L108.1,353.4M426.6,195.1 L423.7,200.8M426.8,194.7 L428.3,192.1M423.7,200.8 L421.2,208.3M423.7,200.8 L426.6,195.1M454.5,195.1 L450.9,199.2M454.5,195.1 L467.3,206.3 L485.9,226.9M450.9,199.2 L454.5,195.1M450.9,199.2 L449.0,200.7 L438.5,202.2 L433.8,200.9M453.9,194.7 L437.3,181.1M485.9,226.9 L49
381386.1,236.3M485.9,226.9 L467.3,206.3 L454.5,195.1M485.9,226.9 L489.7,233.6 L491.0,241.7M575.9,458.3 L588.8,460.7M575.9,458.3 L576.8,465.6M593.9,461.9 L599.6,463.2M593.9,461.9 L588.8,460.7M415.7,237.1 L428.6,239.7M416.0,242.8 L416.1,247.6M416.0,242.8 L415.3,237.1M598.5,478.4 L585.1,475.4M585.1,475.4 L598.5,478.4M585.1,475.4 L586.7,467.9M585.1,475.4 L584.0,478.2 L577.9,477.1M693.4,167.8 L696.0,169.9M693.4,167.8 L688.7,164.0M553.0,357.9 L544.1,364.9 L546.8,368.1 L555.7,361.7M507.9,269.2 L511.3,272.0M-157.0,177.3 L-155.2,184.5M-162.6,186.0 L-174.5,187.1M-162.6,186.0 L-155.2,184.5M427.1,400.8 L426.4,403.3M427.1,400.8 L419.9,396.4M427.1,400.8 L431.8,402.6M478.5,246.5 L474.1,246.2M455.0,245.0 L454.7,249.7M454.7,244.6 L449.5,244.2M32.9,43.2 L30.0,39.5 L24.0,35.6M415.3,242.9 L411.6,243.1 L410.1,242.0M416.1,247.6 L416.0,242.8M416.8,229.5 L419.6,230.2M415.6,232.8 L416.3,229.5M437.3,181.1 L433.3,185.6M437.3,181.1 L453.9,194.7M437.3,181.1 L433.2,177.8M438.0,180.3 L454.8,193.7M438.0,180.3 L420.5,166.0M438.0,180.3 L443.2,174.6M433.3,185.6 L437.3,181.1M433.3,185.6 L429.3,190.7M433.2,177.8 L430.8,175.9M433.2,177.8 L437.3,181.1M274.4,309.8 L269.9,309.6M265.4,311.0 L266.3,309.7 L269.9,309.6M586.7,467.9 L601.3,471.2M586.7,467.9 L576.8,465.6M586.7,467.9 L585.1,475.4M555.1,515.7 L543.0,505.0M549.3,523.3 L555.7,516.2M404.6,547.4 L401.9,546.2M728.5,606.9 L725.4,603.5M-172.8,65.8 L-161.3,72.0M-161.3,72.0 L-172.8,65.8M478.8,351.2 L485.7,347.9M485.7,347.9 L478.8,351.2M42.4,683.6 L50.5,678.9M41.9,682.7 L37.9,675.3M50.5,678.9 L42.4,683.6M315.0,207.6 L316.0,200.8M168.5,-18.7 L172.1,-22.5M-144.8,270.3 L-143.4,264.4M-144.8,270.3 L-147.9,274.4M-147.9,274.4 L-144.8,270.3M-147.9,274.4 L-149.0,273.5 L-145.9,269.5M-143.4,264.4 L-144.8,270.3M-54.9,302.7 L-50.1,304.6 L-28.2,299.2M-28.2,299.2 L-50.1,304.6 L-54.9,302.7M-28.2,299.2 L-24.6,300.1 L-19.7,305.8M543.4,346.5 L542.2,344.0M-156.7,117.7 L-159.2,115.4M-156.7,117.7 L-149.4,124.8 L-145.9,126.4M-156.7,117.7 L-162.4,124.0 L-165.8,133.1M-159.2,115.4 L-156.7,117.7M-159.2,115.4 L-163.2,112.0 L-170.8,109.4M-165.8,133.1 L-173.2,141.0M-165.8,133.1 L-162.4,124.0 L-156.7,117.7M-170.8,109.4 L-163.2,112.0 L-159.2,115.4M444.9,413.1 L448.5,415.3M444.9,413.1 L441.3,409.1M-99.7,348.4 L-101.5,346.1M270.5,449.5 L269.6,451.6 L275.6,465.2M270.5,449.5 L273.4,448.2 L273.7,445.5 L271.0,445.2 L270.5,449.5M270.5,449.5 L271.0,445.2 L273.7,445.5 L273.4,448.2 L270.5,449.5M275.6,465.2 L283.6,471.2 L285.6,474.4M275.6,465.2 L269.6,451.6 L270.5,449.5M275.6,465.2 L273.7,469.0 L271.4,469.6 L252.8,461.3 L249.6,455.3M720.9,26.8 L725.0,21.1 L726.7,15.0M726.7,15.0 L730.7,17.6M726.7,15.0 L724.1,14.1 L721.6,15.3M726.7,15.0 L725.0,21.1 L720.9,26.8M601.3,471.2 L586.7,467.9M162.6,324.2 L164.7,321.6M585.0,-24.1 L582.4,-25.3M585.0,-24.1 L589.5,-21.3M582.7,-26.6 L585.4,-25.4M582.7,-26.6 L579.6,-27.9M421.7,353.0 L427.1,338.6M430.3,339.1 L427.1,338.6M-195.1,283.7 L-198.2,285.1M-195.1,283.7 L-194.1,280.7 L-191.4,280.5M-195.1,283.7 L-192.1,287.2M-192.1,326.9 L-193.6,325.0 L-197.0,326.2M-197.0,326.2 L-193.6,325.0 L-192.1,326.9M442.6,238.6 L444.6,241.4M444.6,241.4 L442.6,238.6M444.6,241.4 L446.5,243.7M351.4,645.4 L352.6,640.5 L360.3,635.1 L361.0,631.8 L358.7,624.0M351.4,645.4 L352.3,646.2 L351.5,646.9 L350.7,646.2 L351.4,645.4M351.4,645.4 L350.7,646.2 L351.5,646.9 L352.3,646.2 L351.4,645.4M276.7,175.1 L274.0,177.5 L275.1,181.1M276.7,175.1 L280.5,178.5 L281.4,183.1M595.6,337.5 L598.5,335.3M595.6,337.5 L592.9,339.5M592.9,339.5 L595.6,337.5M328.1,211.1 L326.7,214.6M129.7,130.1 L131.0,132.6M327.8,511.4 L329.6,509.8M329.6,509.8 L327.8,511.4M329.6,509.8 L330.6,506.4M433.7,226.8 L432.4,233.0M547.8,645.6 L548.3,648.1M548.3,648.1 L547.8,645.6M-191.4,280.5 L-194.1,280.7 L-195.1,283.7M-192.1,287.2 L-195.1,283.7M-114.5,224.2 L-115.0,221.0M108.7,282.7 L117.7,280.9M108.7,282.7 L107.8,278.1M108.7,282.7 L102.1,284.0M109.2,284.8 L110.0,288.5M107.8,278.1 L108.7,282.7M107.8,278.1 L107.2,275.7M102.1,284.0 L108.7,282.7M102.1,284.0 L90.6,286.5 L82.3,284.5M415.2,578.2 L413.5,579.6 L405.9,580.4M391.2,39.9 L388.9,37.3M543.0,505.0 L555.1,515.7M111.8,297.1 L112.9,303.1M111.8,297.1 L113.8,302.8M112.9,303.1 L118.1,307.9 L125.2,308.3M112.9,303.1 L111.8,297.1M113.8,302.8 L111.8,297.1M113.8,302.8 L118.1,306.9 L125.0,307.4M626.4,413.9 L630.5,415.0M626.4,413.9 L620.4,409.6M626.4,413.9 L622.7,418.6M620.4,409.6 L626.4,413.9M622.7,418.6 L626.4,413.9M586.0,487.6 L587.6,482.0M216.2,295.2 L225.3,294.9M225.3,294.9 L216.2,295.2M225.3,294.9 L276.9,294.1M11.7,612.9 L0.0,603.3M30.3,609.9 L34.9,608.4M22.9,608.0 L21.2,610.1M10.1,624.4 L12.8,621.1M12.8,621.1 L10.1,624.4M28.9,615.1 L25.6,619.2M25.6,619.2 L28.9,615.1M29.1,615.3 L32.7,618.2M17.0,629.8 L19.2,627.1M19.2,627.1 L17.0,629.8M-65.2,695.7 L-67.8,694.1 L-67.1,692.0M-65.2,695.7 L-70.3,695.0M-65.2,695.7 L-61.4,696.3M-61.4,696.3 L-65.2,695.7M-61.4,696.3 L-49.6,698.0M-92.1,692.0 L-110.4,693.9M-92.1,692.0 L-87.7,692.5M-110.4,693.9 L-92.1,692.0M-87.7,692.5 L-92.1,692.0M20.6,606.1 L18.7,608.2M59.3,734.3 L50.8,728.6M59.3,734.3 L58.3,736.8 L58.8,739.1 L63.7,746.1M59.3,734.3 L69.0,739.0M50.8,728.6 L59.3,734.3M69.0,739.0 L76.1,742.0 L78.1,744.5 L77.1,749.7 L67.2,742.9M69.0,739.0 L67.2,742.9M69.0,739.0 L59.3,734.3M67.2,742.9 L63.7,746.1M67.2,742.9 L69.0,739.0M67.2,742.9 L77.1,749.7 L78.1,744.5 L76.1,742.0 L69.0,739.0M60.3,748.3 L63.7,746.1M60.3,748.3 L45.8,730.4M60.6,748.9 L63.7,746.1M45.8,730.4 L60.3,748.3M15.3,707.1 L21.6,709.1 L32.3,715.1 L45.1,729.5M15.3,707.1 L2.4,704.9M15.3,707.1 L4.9,706.3M15.7,706.1 L18.3,699.5M45.1,729.5 L32.3,715.1 L21.6,709.1 L15.3,707.1M2.4,704.9 L-1.9,704.4M2.4,704.9 L15.3,707.1M4.9,706.3 L1.5,705.9M4.9,706.3 L0.1,708.3M4.9,706.3 L15.3,707.1M0.1,708.3 L-3.0,710.2M0.1,708.3 L4.9,706.3M0.1,708.3 L1.5,705.9M-3.0,710.2 L-6.6,712.3M-3.0,710.2 L0.1,708.3M1.5,705.9 L4.9,706.3M1.5,705.9 L-2.8,705.4M1.5,705.9 L0.1,708.3M-2.8,705.4 L1.5,705.9M-2.8,705.4 L-16.1,703.6M-1.9,704.4 L-5.1,704.0M-1.9,704.4 L2.4,704.9M34.8,687.9 L30.5,690.4M46.7,729.7 L53.7,722.9M-20.2,707.0 L-20.9,713.4 L-22.9,718.1M-20.2,707.0 L-19.8,703.0M-20.2,707.0 L-18.4,704.2 L-16.1,703.6M-21.3,705.7 L-21.0,702.9M-21.3,705.7 L-22.3,703.4 L-24.5,702.4M-21.3,705.7 L-22.9,718.1M-21.0,702.9 L-21.3,705.7M-21.0,702.9 L-24.5,702.4M-19.9,694.2 L-21.4,700.5 L-25.4,701.3M-19.9,694.2 L-20.9,702.0M-19.9,694.2 L-18.5,682.0M-17.5,675.2 L-18.5,682.0M-15.9,665.1 L-14.2,655.3M-16.2,667.0 L-17.2,673.1M-16.1,703.6 L-19.8,703.0M-16.1,703.6 L-2.8,705.4M-16.1,703.6 L-18.4,704.2 L-20.2,707.0M-24.5,702.4 L-30.9,701.3M-24.5,702.4 L-21.0,702.9M-24.5,702.4 L-22.3,703.4 L-21.3,705.7M-39.7,699.8 L-32.9,700.8M-39.7,699.8 L-49.6,698.0M-13.4,650.3 L-13.0,647.1M-13.4,650.3 L-14.2,655.3M-13.0,647.1 L-13.4,650.3M-13.0,647.1 L-12.3,642.3M-14.2,655.3 L-15.9,665.1M-14.2,655.3 L-13.4,650.3M-12.3,642.3 L-13.0,647.1M-12.7,640.9 L-14.7,642.4M-11.5,635.3 L-11.0,627.2M-11.5,635.3 L-12.1,640.8M-14.7,642.4 L-13.0,639.7M-14.7,642.4 L-12.7,640.9M-13.0,639.7 L-14.7,642.4M-11.7,636.0 L-12.8,639.4M-11.0,627.2 L-11.5,635.3M-11.0,627.2 L-10.4,621.3M19.5,575.1 L21.0,573.0M21.0,573.0 L19.5,575.1M21.7,574.1 L23.3,571.8M23.3,571.8 L2
381386.7,566.0M23.3,571.8 L21.7,574.1M20.7,575.6 L18.1,578.8M34.8,551.4 L27.0,563.2M35.2,550.8 L41.9,541.3M35.9,552.0 L38.3,548.8M35.9,552.0 L32.7,556.7M27.0,563.2 L25.5,565.6M27.0,563.2 L34.8,551.4M47.4,533.8 L45.8,536.1M53.1,525.4 L48.2,532.7M53.1,525.4 L92.0,457.0M53.9,526.6 L52.3,529.1M53.9,526.6 L57.6,529.5M53.9,526.6 L90.2,462.6 L99.5,442.8M92.0,457.0 L53.1,525.4M92.0,457.0 L98.6,442.3M100.4,438.4 L98.6,442.3M100.4,438.4 L87.6,433.1M100.4,438.4 L107.8,428.9M98.6,442.3 L100.4,438.4M98.6,442.3 L92.0,457.0M87.6,433.1 L100.4,438.4M107.8,428.9 L100.4,438.4M100.7,452.2 L100.2,464.1M100.7,452.2 L101.9,445.2 L99.5,442.8M100.2,464.1 L100.7,452.2M134.8,386.6 L136.4,381.0M134.8,386.6 L126.4,388.5M134.8,386.6 L128.4,405.1M136.4,381.0 L134.8,386.6M136.4,381.0 L135.8,385.9M136.4,381.0 L129.2,375.2M136.4,381.0 L139.3,375.1M136.4,381.0 L143.0,362.5M126.4,388.5 L106.2,395.7M126.4,388.5 L134.8,386.6M128.4,405.1 L123.3,412.8 L117.0,419.5M128.4,405.1 L134.8,386.6M135.8,385.9 L139.3,375.1M135.8,385.9 L136.4,381.0M135.8,385.9 L133.9,393.5M129.2,375.2 L126.3,372.2M129.2,375.2 L136.4,381.0M139.3,375.1 L144.1,361.5M139.3,375.1 L135.8,385.9M139.3,375.1 L136.4,381.0M143.0,362.5 L149.4,345.5M143.0,362.5 L136.4,381.0M141.6,341.0 L139.0,343.3M141.6,341.0 L143.7,343.2 L149.4,345.5M141.6,341.0 L139.1,335.1 L140.0,322.5M142.2,340.5 L139.9,333.3 L140.8,322.6M142.2,340.5 L149.4,345.5M139.6,304.3 L135.0,297.3M139.6,304.3 L139.6,306.9 L137.7,310.2M137.7,310.2 L139.6,306.9 L139.6,304.3M137.3,310.5 L132.4,307.6 L125.0,307.4M137.3,310.5 L140.7,315.9 L140.8,322.6M136.9,311.2 L139.6,315.6 L140.0,322.5M136.9,311.2 L131.3,308.1 L125.2,308.3M125.0,307.4 L118.1,306.9 L113.8,302.8M125.0,307.4 L132.4,307.6 L137.3,310.5M140.8,322.6 L140.7,315.9 L137.3,310.5M140.8,322.6 L139.9,333.3 L142.2,340.5M140.0,322.5 L139.1,335.1 L141.6,341.0M140.0,322.5 L139.6,315.6 L136.9,311.2M140.0,322.5 L136.5,321.9M125.2,308.3 L131.3,308.1 L136.9,311.2M125.2,308.3 L118.1,307.9 L112.9,303.1M168.3,295.1 L157.5,324.3M170.0,295.1 L171.0,292.2M170.0,295.1 L160.4,320.5M170.0,295.1 L172.3,295.9M168.5,294.5 L170.1,290.6M171.0,292.2 L173.0,286.9M171.0,292.2 L170.0,295.1M171.0,292.2 L172.3,295.9M172.3,295.9 L171.0,292.2M172.3,295.9 L170.0,295.1M172.3,295.9 L177.9,299.4 L182.3,307.4 L186.3,311.2 L194.2,313.3 L204.5,314.0 L215.2,313.4 L237.8,304.2 L280.6,302.9M165.9,293.2 L168.3,293.0 L170.1,290.6M170.1,290.6 L168.5,294.5M170.1,290.6 L176.4,274.3M170.1,290.6 L168.3,293.0 L165.9,293.2M138.1,253.0 L139.0,242.3M138.1,253.0 L137.9,254.3 L136.7,254.1 L136.7,253.1 L138.1,253.0M138.1,253.0 L136.7,253.1 L136.7,254.1 L137.9,254.3 L138.1,253.0M523.8,-55.0 L527.1,-41.8 L540.3,-20.2M531.5,-31.0 L536.8,-22.8M581.2,46.5 L578.4,42.0M581.2,46.5 L585.7,55.4 L588.2,64.8M578.4,42.0 L573.8,34.6M578.4,42.0 L581.2,46.5M588.0,77.2 L585.5,76.8M588.0,77.2 L588.2,64.8M588.0,77.2 L584.1,90.9 L578.0,101.2M108.5,428.2 L117.0,419.5M-152.4,3.9 L-153.0,1.6M-152.4,3.9 L-152.1,10.5M-152.1,10.5 L-151.7,20.1M-152.1,10.5 L-152.4,3.9M382.0,416.7 L380.4,416.9 L376.6,413.0M382.9,416.3 L384.0,419.5M382.9,416.3 L380.1,407.4M376.6,413.0 L374.4,410.1M376.6,413.0 L380.4,416.9 L382.0,416.7M295.9,53.2 L302.3,59.9M295.9,53.2 L292.6,49.7M287.9,47.2 L289.3,46.6 L292.6,49.7M324.7,83.3 L318.9,77.3M324.7,83.3 L340.5,100.3 L345.8,99.8 L350.6,103.0M324.7,83.3 L317.6,85.2 L316.4,79.8M324.7,83.3 L328.0,80.3M318.9,77.3 L324.7,83.3M318.9,77.3 L309.3,67.2M350.6,103.0 L345.8,99.8 L340.5,100.3 L324.7,83.3M316.4,79.8 L317.6,85.2 L324.7,83.3M328.0,80.3 L332.2,76.4M328.0,80.3 L324.7,83.3M310.0,89.6 L302.0,89.3 L292.7,91.6M292.7,91.6 L292.5,87.5M292.7,91.6 L302.0,89.3 L310.0,89.6M292.7,91.6 L303.8,90.5 L311.3,91.1M353.0,109.5 L367.0,116.9 L373.2,121.6 L401.4,150.2 L418.5,164.4M292.5,87.5 L292.7,91.6M292.5,87.5 L292.0,77.5M311.3,91.1 L317.0,92.7 L367.2,118.9 L417.7,165.4M311.3,91.1 L303.8,90.5 L292.7,91.6M211.2,211.2 L212.4,208.9M553.4,213.7 L549.4,218.5M503.9,147.1 L495.0,148.7 L495.5,154.1M503.9,147.1 L505.8,147.7 L506.5,146.2 L504.8,145.7 L503.9,147.1M503.9,147.1 L504.8,145.7 L506.5,146.2 L505.8,147.7 L503.9,147.1M523.0,602.5 L521.5,600.5M521.5,600.5 L523.0,602.5M538.6,576.0 L540.8,577.2M538.6,576.0 L537.2,573.6M540.8,577.2 L541.9,579.7M540.8,577.2 L538.6,576.0M537.2,573.6 L538.6,576.0M537.2,573.6 L523.0,550.2 L509.1,536.6M442.6,637.1 L448.1,630.8 L453.7,630.4M482.2,709.3 L464.1,717.0M491.0,671.5 L490.9,674.2M491.0,671.5 L491.2,668.5M550.2,-42.5 L553.3,-40.6M586.0,3.4 L590.3,2.1 L593.7,-1.8M593.7,-1.8 L590.3,2.1 L586.0,3.4M517.7,258.3 L521.3,259.0M517.7,258.3 L515.4,256.3M521.3,259.0 L517.7,258.3M454.8,193.7 L438.0,180.3M119.1,245.3 L113.4,249.3M119.1,245.3 L127.7,239.3M119.1,245.3 L112.2,251.5M113.4,249.3 L119.1,245.3M127.7,239.3 L119.1,245.3M112.2,251.5 L119.1,245.3M112.2,251.5 L108.5,254.6M285.0,305.3 L293.7,310.2M285.0,305.3 L253.4,305.0M293.7,310.2 L285.0,305.3M293.7,310.2 L298.1,314.9M253.4,305.0 L285.0,305.3M253.4,305.0 L235.9,306.4 L217.8,314.3 L211.8,315.8 L166.6,314.4 L163.0,316.4 L160.4,320.5M286.8,299.3 L287.1,303.2 L290.3,305.8M286.8,299.3 L285.2,303.9M290.3,305.8 L287.1,303.2 L286.8,299.3M290.3,305.8 L285.2,303.9M290.3,305.8 L295.0,309.5M106.6,254.8 L109.4,252.5M106.6,254.8 L103.7,257.5M109.4,252.5 L106.6,254.8M109.4,252.5 L111.7,250.7M103.7,257.5 L106.6,254.8M467.9,-34.5 L462.2,-31.5M467.9,-34.5 L475.4,-39.8M462.2,-31.5 L457.8,-26.3M462.2,-31.5 L467.9,-34.5M475.4,-39.8 L467.9,-34.5M475.4,-39.8 L487.5,-43.6 L498.1,-48.9 L500.2,-52.2M45
381387.8,-26.3 L462.2,-31.5M508.3,-39.6 L513.9,-40.2M508.3,-39.6 L493.1,-38.9M508.3,-39.6 L511.2,-29.5 L508.4,-25.1 L509.3,-17.6 L508.0,-4.4 L503.4,-3.9 L497.7,0.2M465.6,-18.3 L462.8,-21.5 L464.5,-24.7 L471.0,-29.6 L478.6,-32.6M478.6,-32.6 L481.6,-34.4M478.6,-32.6 L471.0,-29.6 L464.5,-24.7 L462.8,-21.5 L465.6,-18.3M481.6,-34.4 L493.1,-38.9M481.6,-34.4 L478.6,-32.6M493.1,-38.9 L508.3,-39.6M493.1,-38.9 L481.6,-34.4M497.7,0.2 L503.4,-3.9 L508.0,-4.4 L509.3,-17.6 L508.4,-25.1 L511.2,-29.5 L508.3,-39.6M78.2,68.3 L81.5,65.6M78.2,68.3 L84.3,82.0M78.2,68.3 L75.0,58.0M75.0,58.0 L78.2,68.3M75.0,58.0 L71.6,43.3M103.2,117.7 L105.4,121.2M103.2,117.7 L106.2,115.8M103.2,117.7 L101.0,114.1M105.4,121.2 L103.2,117.7M105.4,121.2 L108.8,126.4M106.2,115.8 L112.0,111.4 L109.1,107.7M106.2,115.8 L103.2,117.7M101.0,114.1 L97.3,108.2M101.0,114.1 L103.2,117.7M106.0,102.2 L107.1,104.8M107.1,104.8 L106.0,102.2M111.3,130.0 L109.9,128.0M111.3,130.0 L114.5,134.0M109.9,128.0 L111.3,130.0M114.5,134.0 L118.8,140.1M114.5,134.0 L111.3,130.0M118.8,140.1 L115.3,135.8M118.8,140.1 L114.5,134.0M119.6,139.3 L132.0,134.4M117.5,140.6 L113.6,141.8M119.9,139.9 L131.9,135.4M115.3,135.8 L118.8,140.1M122.2,151.4 L120.7,145.1M122.2,151.4 L123.5,159.4M120.7,145.1 L122.2,151.4M123.5,159.4 L122.2,151.4M124.9,175.2 L125.2,177.9M124.9,173.8 L124.1,165.4M130.0,186.4 L122.4,183.9M130.0,186.4 L126.7,182.3M277.5,130.8 L278.3,128.8 L276.5,126.2 L269.8,124.5M277.5,130.8 L273.6,129.4 L265.0,129.8M277.5,130.8 L280.9,134.5 L283.2,141.1 L282.7,144.7 L279.3,151.2M265.0,129.8 L273.6,129.4 L277.5,130.8M265.0,129.8 L257.7,130.1M279.3,151.2 L276.8,164.9 L284.8,178.8 L287.1,191.4M279.3,151.2 L282.7,144.7 L283.2,141.1 L280.9,134.5 L277.5,130.8M279.3,151.2 L261.3,151.8M261.3,151.8 L252.5,155.8M261.3,151.8 L279.3,151.2M252.5,155.8 L261.3,151.8M247.5,158.2 L250.5,156.8M246.5,158.7 L235.9,161.1 L220.8,159.9M250.5,156.8 L247.5,158.2M156.3,173.7 L163.2,170.3M155.8,174.6 L150.0,183.5M163.2,170.3 L171.5,168.4M163.2,170.3 L156.3,173.7M170.7,203.8 L172.2,207.4M170.7,203.8 L179.7,205.0M172.2,207.4 L170.7,203.8M172.2,207.4 L170.9,211.7M172.2,207.4 L173.0,210.2M169.6,203.4 L163.4,201.2 L165.5,202.5M179.7,205.0 L173.0,210.2M179.7,205.0 L170.7,203.8M162.6,235.2 L159.0,233.4M149.8,228.6 L157.3,232.6M150.5,228.2 L163.0,234.4M157.3,232.6 L149.8,228.6M148.1,226.9 L142.9,222.3M150.0,226.9 L153.2,223.5M181.1,205.1 L184.6,205.3M180.3,205.7 L175.4,209.3M173.0,210.2 L170.9,211.7M173.0,210.2 L179.7,205.0M173.0,210.2 L172.2,207.4M170.9,211.7 L168.0,213.9M170.9,211.7 L173.0,210.2M170.9,211.7 L172.2,207.4M172.1,211.4 L168.0,213.9M168.0,213.9 L172.1,211.4M168.0,213.9 L170.9,211.7M184.6,205.3 L181.1,205.1M206.0,207.2 L202.1,205.6M206.0,209.6 L196.7,207.4M233.7,111.7 L235.5,115.1M233.7,111.7 L231.0,107.9M209.7,140.9 L218.9,130.9 L221.4,126.1 L222.2,120.3 L220.0,111.6M209.3,142.1 L208.2,150.9M220.0,111.6 L222.2,120.3 L221.4,126.1 L218.9,130.9 L209.7,140.9M208.2,150.9 L208.9,158.8M208.2,150.9 L209.3,142.1M208.9,158.8 L208.2,150.9M209.3,161.1 L209.9,164.5M208.3,160.2 L198.2,162.3M210.1,142.2 L209.1,148.8 L210.0,158.7M210.9,163.3 L210.4,160.9M210.9,163.3 L218.2,193.1 L217.5,199.0 L212.4,208.9M211.7,161.3 L214.4,159.6M210.4,160.9 L210.9,163.3M212.4,208.9 L211.2,211.2M212.4,208.9 L213.4,211.8M212.4,208.9 L217.5,199.0 L218.2,193.1 L210.9,163.3M214.4,159.6 L211.7,161.3M214.4,159.6 L210.9,159.8M214.9,159.6 L219.7,159.8M210.9,159.8 L214.4,159.6M210.0,158.7 L209.1,148.8 L210.1,142.2M209.9,164.5 L209.3,161.1M209.9,164.5 L207.6,161.3 L198.2,162.3M209.9,164.5 L217.5,194.5 L210.9,208.8M198.2,162.3 L207.6,161.3 L209.9,164.5M198.2,162.3 L208.3,160.2M198.2,162.3 L188.5,164.5M210.9,208.8 L217.5,194.5 L209.9,164.5M210.9,208.8 L207.3,210.0M731.4,170.6 L729.0,170.9 L723.9,176.5M632.2,168.9 L636.1,168.9 L640.4,166.3 L646.5,166.2 L654.8,163.1M-226.7,238.9 L-222.3,238.8M-228.4,244.2 L-226.1,240.5M-191.8,244.4 L-191.6,238.9M-199.4,228.9 L-200.8,232.1M413.5,273.7 L413.5,277.7M426.0,276.3 L423.9,277.5M423.9,277.5 L419.1,279.0M423.9,277.5 L426.0,276.3M492.1,246.1 L491.0,241.7M183.2,261.3 L180.6,266.1M183.2,261.3 L187.9,253.3M187.9,253.3 L188.3,249.8 L186.6,247.6M187.9,253.3 L189.9,249.7 L186.6,247.6M187.9,253.3 L183.2,261.3M176.4,274.3 L180.6,266.1M176.4,274.3 L170.1,290.6M176.4,274.3 L175.3,280.9M178.4,5.9 L171.5,4.3M140.3,59.5 L134.2,55.5 L122.0,52.3M122.0,52.3 L134.2,55.5 L140.3,59.5M131.9,135.4 L137.8,133.5M131.9,135.4 L119.9,139.9M132.0,134.4 L119.6,139.3M150.9,129.6 L140.0,132.9M153.2,128.9 L158.6,127.1M159.7,126.8 L170.3,123.7M159.5,125.9 L177.3,121.1M158.6,127.1 L153.2,128.9M206.4,114.4 L203.2,115.6M206.4,114.4 L208.7,113.8M208.7,113.8 L206.4,114.4M232.3,107.0 L236.3,105.7M232.0,107.7 L233.6,110.7M236.3,105.7 L240.1,104.6M236.3,105.7 L232.3,107.0M240.1,104.6 L236.3,105.7M242.3,104.1 L246.5,103.0M254.8,100.7 L257.9,99.9M254.8,100.7 L246.5,103.0M254.8,100.7 L242.1,103.0M261.9,98.8 L264.6,98.0M261.9,98.8 L257.9,99.9M264.6,98.0 L261.9,98.8M257.9,99.9 L261.9,98.8M257.9,99.9 L254.8,100.7M266.
381380,97.6 L267.7,96.9 L267.9,97.8M267.9,97.8 L268.5,100.2M267.9,97.8 L267.7,96.9 L266.0,97.6M231.9,106.0 L242.1,103.0M187.9,119.1 L193.1,118.1M186.1,119.5 L177.3,121.1M177.3,121.1 L159.5,125.9M177.3,121.1 L186.1,119.5M177.1,120.6 L174.9,113.9M158.5,126.1 L152.6,127.9M152.6,127.9 L158.5,126.1M150.7,128.6 L139.8,132.0M139.8,132.0 L150.7,128.6M137.9,132.6 L134.3,133.7M134.3,133.7 L137.9,132.6M390.4,365.5 L387.0,370.2M413.8,364.5 L414.4,358.4M420.7,355.8 L414.4,358.4M420.7,355.8 L431.2,362.2M431.2,362.2 L420.7,355.8M431.2,362.2 L439.9,363.3M464.0,378.7 L458.3,377.9M458.3,377.9 L464.0,378.7M463.0,388.6 L459.0,386.9M463.0,388.6 L463.2,389.6 L464.2,389.3 L464.0,388.4 L463.0,388.6M463.0,388.6 L464.0,388.4 L464.2,389.3 L463.2,389.6 L463.0,388.6M459.0,386.9 L463.0,388.6M459.0,386.9 L452.8,385.9M448.3,385.8 L446.5,379.7 L447.4,374.9M449.0,385.8 L452.8,385.9M447.4,374.9 L446.5,379.7 L448.3,385.8M447.4,374.9 L456.5,358.1M447.4,374.9 L444.6,370.3M464.1,345.3 L457.7,356.5M457.7,356.5 L464.1,345.3M456.5,358.1 L447.4,374.9M444.6,370.3 L442.1,366.1M444.6,370.3 L447.4,374.9M439.9,363.3 L431.2,362.2M440.5,363.9 L442.1,366.1M461.6,358.3 L466.4,354.5M383.9,333.9 L379.2,331.1M383.9,333.9 L384.2,334.9 L385.1,334.5 L384.8,333.8 L383.9,333.9M383.9,333.9 L384.8,333.8 L385.1,334.5 L384.2,334.9 L383.9,333.9M504.6,502.0 L504.0,505.6M504.0,501.0 L502.9,498.9M505.8,503.7 L508.7,509.4 L506.5,508.2M504.0,505.6 L504.6,502.0M385.7,479.7 L384.6,480.4 L385.4,481.5 L386.5,480.6 L385.7,479.7M385.7,479.7 L386.5,480.6 L385.4,481.5 L384.6,480.4 L385.7,479.7M386.8,477.7 L390.7,473.7M448.7,486.8 L455.7,490.8M448.7,486.8 L440.5,480.4M455.7,490.8 L459.6,494.0M455.7,490.8 L448.7,486.8M440.5,480.4 L448.7,486.8M384.0,419.5 L389.1,431.8M384.0,419.5 L382.9,416.3M380.1,407.4 L382.9,416.3M389.1,431.8 L384.0,419.5M389.8,431.2 L393.0,428.8M393.2,429.0 L394.6,431.2M393.5,425.2 L392.1,427.5 L393.0,428.8M418.3,430.9 L417.0,433.1M388.9,421.8 L390.3,422.5 L393.5,419.3M419.9,396.4 L427.1,400.8M431.8,402.6 L427.5,407.8M431.8,402.6 L427.1,400.8M441.2,469.3 L435.8,472.8M400.3,405.0 L403.2,408.2 L403.2,410.5M-193.5,205.2 L-193.5,209.8M-151.7,20.1 L-152.1,10.5M-151.7,20.8 L-151.2,23.9M-151.2,23.9 L-149.9,36.8 L-135.9,78.5M-151.2,23.9 L-151.7,20.8M625.4,450.8 L628.6,451.6M635.2,450.8 L633.4,452.7 L628.3,453.0M633.3,683.6 L635.2,684.4 L634.9,687.4 L628.4,694.9M628.4,694.9 L625.4,692.3M628.4,694.9 L634.9,687.4 L635.2,684.4 L633.3,683.6M625.4,692.3 L628.4,694.9M625.4,692.3 L623.6,690.6M566.4,585.9 L568.6,583.5M566.4,585.9 L569.0,588.3M568.6,583.5 L566.4,585.9M569.0,588.3 L566.4,585.9M-5.1,704.0 L-14.7,702.9M-5.1,704.0 L-1.9,704.4M-18.3,689.2 L-19.1,696.9M-18.3,689.2 L-17.2,679.8M207.3,210.0 L210.9,208.8M207.3,210.0 L209.9,210.8M209.9,210.8 L207.3,210.0M213.4,211.8 L212.4,208.9M228.5,218.2 L228.9,219.3 L230.6,219.0M230.6,219.0 L228.9,219.3 L228.5,218.2M206.9,211.0 L208.3,213.6M208.3,213.6 L202.7,224.5M208.3,213.6 L206.9,211.0M173.0,286.9 L175.3,280.9M173.0,286.9 L171.0,292.2M429.3,190.7 L433.3,185.6M262.6,210.2 L259.3,207.6M307.8,122.4 L310.6,125.3M307.8,122.4 L304.5,124.9 L301.1,125.5M307.8,122.4 L311.1,118.8 L311.9,115.4M301.1,125.5 L297.8,125.4M301.1,125.5 L304.5,124.9 L307.8,122.4M311.9,115.4 L311.1,118.8 L307.8,122.4M311.9,115.4 L309.4,110.1M427.3,173.2 L423.4,170.0M427.3,173.2 L430.8,175.9M423.4,170.0 L427.3,173.2M423.4,170.0 L419.8,167.1M430.8,175.9 L433.2,177.8M430.8,175.9 L427.3,173.2M313.0,106.3 L309.4,110.1M313.0,106.3 L314.4,101.1M314.6,107.2 L317.1,108.7M297.8,125.4 L301.1,125.5M297.8,125.4 L295.0,125.6 L293.5,127.9M303.5,124.4 L306.8,121.5M310.3,115.5 L308.0,111.6M310.3,115.5 L309.9,118.1 L306.8,121.5M375.0,215.7 L376.3,210.4M375.0,215.7 L371.3,231.5M315.0,121.2 L314.8,121.8 L315.9,122.6 L316.3,121.8 L315.0,121.2M315.0,121.2 L316.3,121.8 L315.9,122.6 L314.8,121.8 L315.0,121.2M315.0,121.2 L316.1,116.9 L313.0,115.3M313.0,115.3 L316.1,116.9 L315.0,121.2M313.0,115.3 L312.2,111.3M293.5,127.9 L295.0,125.6 L297.8,125.4M290.4,113.4 L291.2,110.1M364.0,259.9 L362.9,262.8M308.0,111.6 L310.3,115.5M282.7,223.1 L282.4,221.2 L284.7,219.0M282.7,223.1 L281.1,222.7 L281.3,218.3M282.8,223.1 L296.3,225.0M284.7,219.0 L282.4,221.2 L282.7,223.1M281.3,218.3 L281.1,222.7 L282.7,223.1M314.4,127.9 L310.6,125.3M334.1,67.0 L328.8,61.1M334.1,67.0 L335.8,68.7M428.3,192.1 L426.8,194.7M421.2,208.3 L420.5,210.8M421.2,208.3 L423.7,200.8M413.5,280.5 L413.5,277.7M469.5,-85.9 L475.0,-86.9 L478.6,-85.9 L487.4,-73.7M469.5,-85.9 L459.5,-84.8M469.5,-85.9 L468.3,-90.3 L466.3,-92.1M466.3,-92.1 L468.3,-90.3 L469.5,-85.9M396.1,-77.9 L402.0,-75.2M408.6,-79.9 L423.3,-80.3M423.3,-80.3 L426.6,-81.1M423.3,-80.3 L408.6,-79.9M407.1,-84.8 L406.9,-80.3M407.1,-84.8 L406.9,-90.5M440.4,-79.6 L445.8,-81.2M440.4,-79.6 L435.6,-79.3 L426.6,-81.1M440.4,-79.6 L434.4,-72.2 L433.9,-69.7 L434.1,-65.8 L436.7,-62.4 L436.9,-58.0 L438.1,-55.8 L440.7,-54.7 L437.9,-54.2M426.6,-81.1 L435.6,-79.3 L440.4,-79.6M426.6,-81.1 L423.3,-80.3M437.9,-54.2 L440.7,-54.7 L438.1,-55.8 L436.9,-58.0 L436.7,-62.4 L434.1,-65.8 L433.9,-69.7 L434.4,-72.2 L440.4,-79.6M201.3,230.3 L191.5,248.8M191.5,248.8 L201.3,230.3M191.5,248.8 L189.8,252.0M144.3,191.1 L145.6,190.5 L145.1,191.7M145.1,191.7 L145.6,190.5 L144.3,191.1M141.4,191.8 L138.8,190.6M138.8,190.6 L141.4,191.8M184.0,265.8 L182.3,269.1 L184.5,272.6M186.6,247.6 L188.3,249.8 L187.9,253.3M186.6,247.6 L189.9,249.7 L187.9,253.3M186.6,247.6 L179.6,244.0 L178.1,253.6M178.1,253.6 L179.6,244.0 L186.6,247.6M184.2,272.9 L181.7,274.6M191.7,246.1 L189.4,247.4M189.4,247.4 L191.7,246.1M64.4,167.4 L61.2,167.5M61.2,167.5 L64.4,166.7M61.2,167.5 L64.4,167.4M61.2,167.5 L56.1,172.2 L50.8,172.4M64.4,166.7 L61.2,167.5M50.8,172.4 L50.0,181.8 L53.5,184.0M50.8,172.4 L56.1,172.2 L61.2,167.5M53.5,184.0 L50.0,181.8 L50.8,172.4M85.1,165.0 L76.8,165.9M76.8,165.9 L85.1,165.0M76.8,165.9 L72.2,166.4M-21.8,578.7 L-12.7,582.5M38.3,548.8 L35.9,552.0M57.6,529.5 L55.6,532.7M57.6,529.5 L60.0,526.8 L64.4,525.3M57.6,529.5 L53.9,526.6M64.4,525.3 L66.2,522.6M64.4,525.3 L60.0,526.8 L57.6,529.5M6.3,-36.1 L13.4,-30.1M6.3,-36.1 L2.3,-41.4M6.3,-36.1 L3.9,-38.2M-1.0,-45.5 L2.3,-41.4M-1.0,-45.5 L-5.5,-54.2M460.7,250.8 L455.1,250.3M455.1,250.3 L460.7,250.8M464.8,250.6 L466.0,251.0 L464.7,251.2M462.7,250.4 L455.1,249.7M462.7,250.4 L462.9,245.7M464.7,251.2 L466.0,251.0 L464.8,250.6M493.2,229.4 L495.0,227.4M493.2,229.4 L490.0,224.7M455.1,249.7 L462.7,250.4M454.7,249.7 L455.0,245.0M495.0,227.4 L493.2,229.4M495.0,227.4 L496.6,225.5M490.0,224.7 L488.7,222.2M490.0,224.7 L493.2,229.4M474.1,246.2 L471.6,246.1M474.1,246.2 L478.5,246.5M513.2,256.3 L509.4,256.3M539.8,266.0 L542.1,262.5M401.9,546.2 L404.6,547.4M282.7,294.1 L286.6,294.1M286.6,293.6 L286.5,290.4M286.9,297.0 L286.6,294.1M477.9,430.1 L475.4,427.7 L474.7,423.5M616.6,443.8 L617.0,447.8 L620.7,449.9M618.6,444.0 L621.3,447.7 L620.7,449.9M617.3,424.5 L618.2,421.8 L620.9,420.1M620.9,420.1 L618.2,421.8 L617.3,424.5M-148.1,0.6 L-145.4,-0.3M-136.4,-10.3 L-140.0,-11.8M-136.4,-10.3 L-134.5,-14.4M-136.4,-10.3 L-139.9,-3.5 L-145.4,-0.3M-140.0,-11.8 L-136.4,-10.3M-134.5,-14.4 L-136.4,-10.3M-181.5,-18.7 L-185.7,-12.4M-181.5,-18.7 L-191.0,-24.4M-179.5,-17.6 L-177.0,-16.2M-185.7,-12.4 L-190.1,-13.9 L-196.8,-13.0 L-191.0,-24.4M-185.7,-12.4 L-181.5,-18.7M-191.0,-24.4 L-196.8,-13.0 L-190.1,-13.9 L-185.7,-12.4M-191.0,-24.4 L-181.5,-18.7M-191.0,-24.4 L-192.9,-26.5M-197.8,-99.9 L-200.2,-104.1M42.3,540.8 L44.6,537.7M41.9,541.3 L35.2,550.8M44.6,537.7 L42.3,540.8M41.8,540.6 L21.9,529.1M62.9,190.1 L70.5,191.0M66.7,190.9 L70.5,191.3M327.7,247.5 L326.3,250.3M322.3,244.3 L328.1,246.7M322.3,244.3 L317.6,243.1M18.4,385.6 L23.7,383.4 L28.2,384.6M20.0,392.3 L27.1,399.0 L33.8,402.5M20.0,392.3 L16.4,386.5M7.4,396.3 L-1.4,392.4 L-4.0,393.1 L-6.6,395.9M-6.6,395.9 L-4.0,393.1 L-1.4,392.4 L7.4,396.3M-6.6,395.9 L-8.6,399.4 L-8.8,406.1 L-13.8,410.5M-6.6,365.7 L-11.1,368.0 L-23.2,362.9M-6.6,365.7 L-5.6,366.3 L-5.1,365.1 L-6.2,364.6 L-6.6,365.7M-6.6,365.7 L-6.2,364.6 L-5.1,365.1 L-5.6,366.3 L-6.6,365.7M-23.2,362.9 L-11.1,368.0 L-6.6,365.7M-12.4,344.9 L-19.8,353.4 L-24.0,362.7M8.1,352.6 L16.8,352.1 L18.3,347.8 L15.7,344.8 L11.5,344.8 L8.7,348.4 L8.1,352.6M8.1,352.6 L8.7,348.4 L11.5,344.8 L15.7,344.8 L18.3,347.8 L16.8,352.1 L8.1,352.6M8.1,352.6 L2.5,356.0M42.5,348.4 L39.7,344.7 L36.7,343.8M36.7,343.8 L39.7,344.7 L42.5,348.4M36.7,343.8 L33.4,342.8 L31.9,347.5M38.5,390.2 L39.5,388.9 L38.7,388.2 L38.0,388.9 L38.5,390.2M38.5,390.2 L38.0,388.9 L38.7,388.2 L39.5,388.9 L38.5,390.2M38.5,390.2 L35.7,393.2M-8.5,346.0 L2.5,356.0M-8.5,346.0 L-11.3,343.6M45.9,414.9 L53.1,418.5 L54.7,417.6 L53.8,416.2 L45.9,414.9M45.9,414.9 L53.8,416.2 L54.7,417.6 L53.1,418.5 L45.9,414.9M240.8,530.6 L243.3,526.4M240.8,530.6 L238.6,534.7 L235.5,535.5 L233.0,537.8M233.0,537.8 L235.5,535.5 L238.6,534.7 L240.8,530.6M303.3,476.6 L308.8,474.1M275.6,568.0 L273.7,566.9 L272.6,563.2M272.6,563.2 L273.7,566.9 L275.6,568.0M272.6,563.2 L271.8,556.3 L287.3,524.8M746.1,574.1 L748.3,584.8M748.3,584.8 L746.4,589.9M748.3,584.8 L746.1,574.1M219.0,110.9 L210.6,113.1M221.2,110.2 L230.1,107.6M219.7,109.0 L217.4,103.7M220.8,109.3 L229.9,106.7M218.8,109.7 L212.9,111.4M585.5,76.8 L588.0,77.2M476.0,179.3 L486.3,167.2M476.0,179.3 L476.7,181.3 L489.3,191.4M501.0,181.8 L496.2,186.8 L489.3,191.4M616.0,419.5 L616.2,412.8M616.0,419.5 L616.0,424.5M616.2,412.8 L616.0,419.5M617.6,410.8 L619.7,409.8M548.0,406.2 L542.5,401.7M548.0,406.2 L553.4,413.2 L552.5,416.9 L550.1,417.9M550.1,417.9 L552.5,416.9 L553.4,413.2 L548.0,406.2M532.4,388.6 L534.4,382.8M530.6,387.7 L528.0,386.4M534.4,382.8 L532.4,388.6M534.4,382.8 L536.4,375.8 L540.3,371.5M570.9,382.4 L576.0,378.3M570.9,382.4 L567.1,382.7 L563.9,380.5M576.0,378.3 L577.8,376.1M576.0,378.3 L570.9,382.4M563.9,380.5 L567.1,382.7 L570.9,382.4M562.4,378.7 L553.8,374.8M562.6,378.3 L560.9,375.3 L555.6,373.0 L553.8,374.8M577.8,376.1 L576.0,378.3M492.3,273.1 L499.6,278.2M492.0,272.9 L495.3,268.2M467.2,255.2 L425.1,248.7M425.1,248.7 L419.0,247.8M425.1,248.7 L467.2,255.2M-62.6,688.5 L-65.2,690.4M-62.6,688.5 L-56.1,683.0M317.9,109.6 L320.9,112.4 L324.6,108.9 L321.3,105.3 L317.5,108.4M317.1,108.7 L314.6,107.2M317.5,108.4 L321.3,105.3 L324.6,108.9 L320.9,112.4 L317.9,109.6M472.7,147.9 L471.2,148.0 L472.4,147.3M472.7,147.9 L483.0,145.0 L494.2,155.5M625.8,114.7 L626.7,109.4 L624.2,104.5M643.9,102.6 L641.0,102.9M643.9,102.6 L662.4,102.9M587.6,25.8 L600.0,41.1M299.0,315.7 L301.3,318.3M178.7,230.4 L175.1,228.6M178.7,233.7 L177.7,236.1M182.4,227.7 L183.8,225.2M177.7,236.1 L178.7,233.7M177.4,237.1 L176.5,240.6M178.2,236.2 L179.4,234.0M179.4,234.0 L178.2,236.2M181.7,233.6 L184.5,235.0M190.4,235.8 L192.8,233.3 L192.5,231.1M190.4,235.8 L193.5,233.3M192.5,231.1 L192.8,233.3 L190.4,235.8M193.5,233.3 L193.1,231.0M193.5,233.3 L190.4,235.8M178.1,231.7 L174.4,229.8M188.3,237.0 L184.5,235.0M189.0,235.8 L185.3,234.0M167.2,224.9 L164.9,223.6M182.3,232.4 L185.3,234.0M164.2,234.3 L167.5,228.2M163.0,234.4 L150.5,228.2M192.5,230.6 L192.2,228.7 L194.1,224.7M194.1,224.7 L192.2,228.7 L192.5,230.6M193.1,231.0 L193.5,233.3M166.9,225.4 L163.5,223.8M167.5,228.2 L164.2,234.3M169.7,227.3 L174.4,229.8M174.4,229.8 L169.7,227.3M174.4,229.8 L178.1,231.7M183.8,225.2 L182.4,227.7M170.6,226.3 L175.1,228.6M188.6,241.6 L189.2,238.1M189.2,238.1 L188.6,241.6M183.9,244.5 L185.9,241.6M185.9,241.6 L183.9,244.5M189.0,238.1 L188.2,240.8M188.2,240.8 L189.0,238.1M163.0,223.5 L159.9,221.5M163.5,223.8 L166.9,225.4M163.4,222.8 L160.6,220.8M159.9,221.5 L163.0,223.5M175.4,209.3 L180.3,205.7M164.9,223.6 L167.2,224.9M160.6,220.8 L163.4,222.8M434.5,576.3 L435.4,572.5M435.4,572.5 L434.5,576.3M435.6,502.9 L434.6,510.0M434.6,510.0 L435.6,502.9M21.0,624.8 L24.0,627.1M24.0,627.1 L21.0,624.8M35.7,611.9 L39.9,614.8 L38.7,616.4 L37.4,615.1M35.7,611.9 L35.1,609.1M37.4,615.1 L38.7,616.4 L39.9,614.8 L35.7,611.9M35.1,609.1 L35.7,611.9M34.9,608.4 L37.4,607.1M34.9,608.4 L30.3,609.9M37.4,607.1 L39.5,604.6M37.4,607.1 L34.9,608.4M217.6,416.7 L223.5,399.9 L227.7,392.9 L234.8,386.8M264.6,379.9 L270.1,376.7M264.8,380.6 L270.1,376.7M270.1,376.7 L264.6,379.9M270.1,376.7 L264.8,380.6M270.1,376.7 L274.2,371.5M274.2,371.5 L275.7,369.6M274.2,371.5 L270.1,376.7M263.1,373.4 L269.7,370.0 L267.3,367.0M263.1,373.4 L262.3,374.3 L262.2,373.1M267.3,367.0 L269.7,370.0 L263.1,373.4M262.2,373.1 L262.3,374.3 L263.1,373.4M286.9,347.4 L289.8,344.4M286.9,347.4 L288.8,350.0M286.9,347.4 L284.8,347.9 L281.0,352.1M290.8,347.7 L288.8,350.0M72.2,166.4 L68.9,166.7M72.2,166.4 L76.8,165.9M-2.1,174.7 L0.8,174.7M-2.1,174.7 L-13.6,177.0M0.8,174.7 L19.4,177.7M0.8,174.7 L-2.1,174.7M36.0,199.5 L36.9,195.9M36.9,195.9 L36.0,199.5M36.9,195.9 L37.8,193.5M19.4,177.7 L27.4,178.6 L33.1,181.8M19.4,177.7 L0.8,174.7M37.8,193.5 L36.9,195.9M37.8,193.5 L38.7,190.9M732.1,130.9 L720.8,135.4M732.1,130.9 L735.0,127.1 L737.6,125.8M720.8,135.4 L716.2,137.5 L705.4,145.9M720.8,135.4 L732.1,130.9M107.2,275.7 L107.8,278.1M107.2,275.7 L105.8,268.6M105.8,268.6 L107.2,275.7M105.8,268.6 L105.0,264.8M124.2,268.1 L125.0,273.9M124.2,268.1 L124.2,260.0M498.6,513.2 L500.3,510.7M498.6,513.2 L497.4,515.9M195.7,616.4 L197.9,618.4M195.7,616.4 L188.5,610.2M195.7,616.4 L199.8,611.9M199.8,611.9 L195.7,616.4M132.6,604.6 L131.0,609.2M133.2,602.6 L130.5,599.7 L124.8,603.4M175.9,584.0 L183.1,587.7 L184.3,589.9M54.1,721.6 L57.6,699.2M-69.3,246.1 L-77.6,242.4M-77.6,242.4 L-73.1,230.1M-77.6,242.4 L-79.9,253.3 L-71.1,258.0 L-66.3,264.4 L-66.2,272.6M-77.6,242.4 L-69.3,246.1M-66.2,272.6 L-66.3,264.4 L-71.1,258.0 L-79.9,253.3 L-77.6,242.4M-222.3,238.8 L-220.6,240.1 L-220.5,241.4 L-221.7,241.0 L-222.3,238.8M-222.3,238.8 L-221.7,241.0 L-220.5,241.4 L-220.6,240.1 L-222.3,238.8M-222.3,238.8 L-226.7,238.9M-60.6,235.5 L-61.4,234.0 L-73.1,230.1M-160.5,209.0 L-165.9,209.8M-160.5,209.0 L-159.0,206.8 L-159.2,204.6 L-160.7,204.6 L-160.5,209.0M-160.5,209.0 L-160.7,204.6 L-159.2,204.6 L-159.0,206.8 L-160.5,209.0M171.5,168.4 L163.2,170.3M172.4,168.2 L182.0,165.9M182.0,165.9 L184.9,165.3M182.0,165.9 L172.4,168.2M123.8,161.3 L124.1,164.2M124.1,164.2 L123.8,161.3M124.1,165.4 L124.9,173.8M188.5,164.5 L198.2,162.3M-6.6,712.3 L-3.0,710.2M-6.6,712.3 L-13.4,716.2M-17.2,679.8 L-18.3,689.2M-17.2,679.8 L-14.9,667.2M2.1,662.1 L1.0,667.5M2.1,662.1 L6.8,654.6 L5.7,
38138653.7M1.2,661.8 L-0.2,667.3M1.2,661.8 L5.7,653.7M5.7,653.7 L1.2,661.8M5.7,653.7 L6.8,654.6 L2.1,662.1M-0.9,668.0 L-5.9,667.4M-0.9,668.1 L-6.0,668.2M-0.2,667.3 L1.2,661.8M-21.3,649.0 L-19.5,647.3M-19.5,647.3 L-21.3,649.0M-10.4,621.3 L-10.2,618.6M-10.4,621.3 L-11.0,627.2M-10.2,618.6 L-10.4,621.3M-10.2,618.6 L-9.6,613.7M-10.0,613.0 L-13.5,610.7M-9.1,611.9 L-4.8,604.9M17.1,578.0 L14.2,581.5M-184.2,689.2 L-193.6,689.9 L-205.0,692.9M-184.2,689.2 L-172.9,690.5 L-151.3,695.8 L-138.2,696.2M-136.9,691.1 L-132.5,686.3M-136.9,691.1 L-138.2,696.2M-143.7,672.3 L-138.2,673.0 L-133.9,676.5M-133.9,676.5 L-138.2,673.0 L-143.7,672.3M-133.9,676.5 L-132.2,681.2 L-132.5,686.3M33.7,404.9 L30.8,404.4 L29.6,411.5 L32.2,411.7 L33.7,404.9M33.7,404.9 L32.2,411.7 L29.6,411.5 L30.8,404.4 L33.7,404.9M-157.3,281.4 L-154.7,279.3M-157.3,281.4 L-156.1,283.2 L-154.0,281.2 L-154.7,279.3M-142.2,303.5 L-144.5,313.1M-142.2,303.5 L-140.7,297.1 L-141.0,290.8M-145.0,292.2 L-141.0,290.8M-145.0,292.2 L-146.5,290.9 L-148.7,292.1 L-150.3,296.4 L-149.6,298.3 L-146.4,299.4M-145.0,292.2 L-146.4,299.4M-146.4,299.4 L-145.0,292.2M-146.4,299.4 L-149.6,298.3 L-150.3,296.4 L-148.7,292.1 L-146.5,290.9 L-145.0,292.2M-143.7,349.3 L-142.2,352.4M-143.7,349.3 L-143.9,346.5M-148.3,361.2 L-142.2,352.4M-148.4,361.6 L-151.7,362.6M-147.1,363.2 L-143.0,367.4M-151.7,362.6 L-157.4,364.4 L-158.6,371.9M-151.7,362.6 L-148.4,361.6M-217.0,135.4 L-212.6,134.7M-217.0,135.4 L-220.8,135.8M740.0,114.7 L741.8,117.4M705.4,145.9 L702.4,149.0 L699.7,154.7 L700.8,157.0 L716.7,170.9M705.4,145.9 L716.2,137.5 L720.8,135.4M739.3,114.0 L675.1,104.1M6.5,590.7 L2.1,596.2M6.5,590.7 L11.1,585.1M2.1,596.2 L6.5,590.7M11.1,585.1 L6.5,590.7M253.9,428.2 L257.5,424.1 L254.3,418.8M269.0,408.1 L270.3,404.4 L266.1,402.1M260.9,371.7 L254.8,365.6M266.5,366.1 L260.3,360.3M271.3,343.0 L269.2,341.2M273.3,336.9 L269.2,341.2M237.5,335.2 L239.4,328.4M257.4,334.5 L260.7,335.0M257.4,334.5 L258.3,331.0M265.0,328.6 L261.3,332.7 L260.7,335.0M256.8,334.3 L249.7,332.4M258.3,331.0 L257.4,334.5M258.3,331.0 L252.6,329.4M258.3,331.0 L259.7,325.8M249.7,332.4 L256.8,334.3M252.6,329.4 L258.3,331.0M259.7,325.8 L258.3,331.0M259.7,325.8 L246.5,322.4M247.3,331.5 L239.4,328.4M241.5,320.7 L239.4,328.4M246.5,322.4 L259.7,325.8M366.5,387.1 L366.4,390.5M366.5,387.1 L366.5,384.5M366.4,390.5 L366.5,387.1M366.4,390.5 L366.3,397.2M369.1,386.6 L370.8,389.0M370.8,389.0 L372.2,391.2M370.8,389.0 L369.1,386.6M360.6,375.7 L363.6,379.1M360.6,375.7 L358.8,373.4M355.2,347.6 L358.3,348.1 L358.6,349.3 L356.2,348.8 L355.2,347.6M355.2,347.6 L356.2,348.8 L358.6,349.3 L358.3,348.1 L355.2,347.6M355.2,347.6 L352.3,346.5M361.9,339.4 L368.0,340.8M361.2,338.3 L360.4,335.3 L356.9,331.1 L356.5,334.6 L361.2,338.3M361.2,338.3 L356.5,334.6 L356.9,331.1 L360.4,335.3 L361.2,338.3M170.5,121.1 L168.9,116.1M168.9,116.1 L174.9,113.9M168.9,116.1 L170.5,121.1M168.9,116.1 L164.9,103.1M174.9,113.9 L168.9,116.1M174.9,113.9 L170.7,101.2M174.9,113.9 L180.7,111.5M174.9,113.9 L177.1,120.6M164.9,103.1 L168.9,116.1M164.9,103.1 L170.7,101.2M164.9,103.1 L161.5,103.5 L160.7,101.1M170.7,101.2 L169.8,98.3M170.7,101.2 L174.9,113.9M170.7,101.2 L176.4,99.5M170.7,101.2 L164.9,103.1M180.7,111.5 L176.4,99.5M180.7,111.5 L174.9,113.9M176.4,99.5 L180.7,111.5M176.4,99.5 L173.0,90.2M176.4,99.5 L170.7,101.2M160.7,101.1 L161.5,103.5 L164.9,103.1M160.7,101.1 L158.0,90.7 L158.5,86.5 L161.2,84.0 L162.5,80.7 L160.0,76.7 L157.7,75.7M169.8,98.3 L170.7,101.2M169.8,98.3 L168.3,92.0 L173.0,90.2M173.0,90.2 L176.4,99.5M173.0,90.2 L171.5,85.8M173.0,90.2 L168.3,92.0 L169.8,98.3M171.5,85.8 L173.0,90.2M193.0,67.0 L196.4,70.6M-17.2,673.1 L-16.2,667.0M23.2,569.8 L25.5,565.6M25.5,565.6 L23.2,569.8M25.5,565.6 L27.0,563.2M45.8,536.1 L47.4,533.8M44.8,537.4 L42.7,542.5M366.3,17.6 L368.3,11.8M366.3,17.6 L361.3,14.2 L363.2,11.1M365.9,18.8 L365.3,21.8M368.3,11.8 L366.3,17.6M368.3,11.8 L372.8,13.0M363.2,11.1 L361.3,14.2 L366.3,17.6M133.9,393.5 L135.8,385.9M133.9,393.5 L146.4,395.8 L149.4,401.2M149.8,363.7 L144.1,361.5M500.5,530.5 L502.8,530.6 L509.1,536.6M446.7,-14.5 L447.0,-20.0 L453.1,-20.5 L456.6,-24.7M456.6,-24.7 L453.1,-20.5 L447.0,-20.0 L446.7,-14.5M730.7,17.6 L726.7,15.0M732.2,18.6 L735.6,21.7 L735.0,25.5M432.7,240.5 L428.6,239.7M-119.9,163.9 L-113.7,162.7M-121.2,164.1 L-124.8,164.5M49.7,200.7 L51.2,200.6 L52.3,196.6M52.3,196.6 L51.2,200.6 L49.7,200.7M38.7,190.9 L37.8,193.5M70.5,191.3 L66.7,190.9M280.1,75.3 L282.8,84.3 L280.6,86.8 L281.6,92.7M281.6,92.7 L280.6,86.8 L282.8,84.3 L280.1,75.3M393.5,334.1 L391.1,332.0M676.7,-35.1 L678.6,-28.2 L680.6,-25.8M184.9,165.3 L182.0,165.9M150.0,183.5 L155.8,174.6M149.2,185.3 L146.5,191.0M146.5,191.0 L149.2,185.3M147.0,192.3 L148.9,194.7 L146.0,193.4M326.3,250.3 L324.8,253.7M326.3,250.3 L327.7,247.5M26.7,566.0 L28.2,563.5M26.7,566.0 L23.3,571.8M28.2,563.5 L26.7,566.0M28.8,562.6 L31.0,559.1M35.9,568.7 L38.1,564.4M35.9,568.7 L34.0,573.7 L36.8,575.5M38.1,564.4 L35.9,568.7M36.8,575.5 L34.0,573.7 L35.9,568.7M40.2,559.5 L38.3,563.1M38.3,563.1 L40.2,559.5M39.1,548.7 L61.3,564.4 L63.5,564.6M63.5,564.6 L61.3,564.4 L39.1,548.7M18.3,699.5 L15.7,706.1M11.9,674.6 L6.2,670.1 L1.5,668.4M11.9,674.6 L14.7,678.6M20.7,688.9 L19.3,686.3M20.7,688.9 L23.4,693.5M-11.8,667.7 L-6.0,668.2M-6.0,668.2 L-0.9,668.1M-6.0,668.2 L-11.8,667.7M112.6,-97.5 L109.5,-95.7M112.6,-97.5 L118.5,-98.8M419.1,279.0 L423.9,277.5M576.7,321.5 L579.2,324.8M576.7,321.5 L575.2,319.4M578.2,629.5 L582.0,637.6M584.3,636.7 L582.0,637.6M459.8,91.0 L458.8,87.9M459.8,91.0 L460.7,93.6M460.7,93.6 L459.8,91.0M461.1,94.1 L462.7,96.2M461.1,105.6 L448.2,100.3M165.5,202.5 L168.3,203.6M16
381385.5,202.5 L163.4,201.2 L169.6,203.4M518.5,218.1 L514.7,214.9M518.5,218.1 L523.0,222.0M90.5,267.3 L92.9,266.1M90.5,267.3 L86.3,268.4M92.9,266.1 L90.5,267.3M86.3,268.4 L83.3,269.6M86.3,268.4 L90.5,267.3M86.3,268.4 L76.6,270.3M335.5,479.5 L343.1,477.5M335.5,479.5 L332.4,496.6M332.4,496.6 L331.5,501.4M332.4,496.6 L335.5,479.5M531.7,358.8 L526.0,357.3M526.0,357.3 L531.7,358.8M511.5,374.9 L512.8,370.9M490.2,345.9 L486.6,347.5M490.2,345.9 L492.7,344.9M486.6,347.5 L490.2,345.9M490.3,346.5 L491.3,348.9M498.0,350.1 L498.8,352.5M491.3,348.9 L490.3,346.5M491.3,348.9 L493.1,351.6 L497.9,350.0M499.2,334.7 L495.1,335.9M499.2,334.7 L499.7,333.8 L500.6,334.4 L500.0,335.3 L499.2,334.7M499.2,334.7 L500.0,335.3 L500.6,334.4 L499.7,333.8 L499.2,334.7M506.4,339.1 L508.6,338.0M506.1,338.5 L503.6,337.6 L502.3,335.2M502.3,335.2 L503.6,337.6 L506.1,338.5M512.0,332.2 L524.5,325.8M-220.8,135.8 L-217.0,135.4M-220.8,135.8 L-224.8,134.5M-224.8,134.5 L-220.8,135.8M470.2,482.7 L474.1,482.8M527.9,521.1 L531.1,516.4M509.1,536.6 L523.0,550.2 L537.2,573.6M509.1,536.6 L502.8,530.6 L500.5,530.5M537.0,507.8 L543.1,500.0M500.3,510.7 L498.6,513.2M533.7,506.0 L536.8,508.2M621.6,440.5 L621.3,441.5 L616.3,442.3M271.3,121.6 L269.8,124.5M271.3,121.6 L274.3,122.2M271.3,121.6 L266.1,116.5M274.3,122.2 L271.3,121.6M266.1,116.5 L271.3,121.6M328.8,539.3 L333.6,536.8 L335.9,543.1 L352.8,551.4M418.7,552.5 L420.7,550.5M423.6,556.2 L421.3,557.6M421.3,557.6 L423.6,556.2M421.9,546.3 L424.1,545.3M424.1,545.3 L421.9,546.3M438.7,557.3 L438.5,554.5M438.5,554.5 L438.7,557.3M438.8,542.5 L438.1,545.8M439.1,540.4 L439.1,537.3M439.1,537.3 L439.1,540.4M439.0,536.0 L438.7,532.3M438.7,532.3 L439.0,536.0M430.9,535.9 L430.8,533.5M430.8,533.5 L430.9,535.9M430.7,532.5 L430.4,529.6M430.4,529.6 L430.7,532.5M426.4,523.4 L428.1,525.3M431.6,525.3 L433.5,523.8M433.5,523.8 L431.6,525.3M435.8,516.6 L435.4,514.2M435.4,514.2 L435.8,516.6M419.9,537.1 L422.8,538.4M422.8,538.4 L419.9,537.1M420.7,517.3 L421.2,514.6M421.2,514.6 L420.7,517.3M422.5,506.6 L422.1,509.1M501.5,566.7 L498.4,566.5M498.4,566.5 L501.5,566.7M509.8,572.9 L507.1,568.6M499.7,576.7 L501.4,578.7M501.4,578.7 L499.7,576.7M508.7,589.0 L510.3,591.3M510.3,591.3 L508.7,589.0M509.4,595.2 L506.4,596.3M506.4,596.3 L509.4,595.2M508.0,604.2 L510.6,603.5M511.9,613.4 L513.2,611.4M486.9,615.6 L487.9,619.1M488.0,617.3 L487.3,614.6M488.5,619.0 L491.3,629.6M487.9,619.1 L485.0,618.4M487.9,619.1 L490.6,629.8M487.9,619.1 L486.9,615.6M513.1,577.6 L514.7,579.8M514.7,579.8 L513.1,577.6M530.5,592.9 L530.2,590.5M530.2,590.5 L530.5,592.9M530.8,594.9 L532.6,609.9M532.6,609.9 L530.8,594.9M519.9,598.0 L521.5,600.4M521.5,600.4 L519.9,598.0M525.7,606.4 L527.5,609.0M527.5,609.0 L525.7,606.4M529.5,611.8 L531.7,613.9M531.7,613.9 L529.5,611.8M532.5,613.3 L532.7,610.3M532.7,610.3 L532.5,613.3M533.1,627.6 L535.1,629.5M532.8,633.7 L529.9,635.6M537.7,635.3 L537.0,631.9M539.1,629.1 L537.0,630.7M552.0,640.0 L553.6,638.2M553.6,638.2 L552.0,640.0M577.6,628.4 L575.2,622.8M609.2,705.1 L609.2,708.7M609.2,708.7 L609.2,705.1M608.2,712.5 L606.1,717.6M606.1,717.6 L608.2,712.5M601.6,730.4 L600.9,733.1M600.9,733.1 L601.6,730.4M600.0,741.6 L599.6,749.0M-12.6,-45.3 L-28.9,-31.1M-12.6,-45.3 L-9.3,-49.5M-12.6,-45.3 L-3.2,-36.7M-28.9,-31.1 L-12.6,-45.3M-3.2,-36.7 L-12.6,-45.3M282.9,299.8 L283.5,298.7 L282.1,296.9M282.1,296.9 L277.0,298.4M282.1,296.9 L281.0,294.1M282.1,296.9 L283.5,298.7 L282.9,299.8M277.0,298.4 L276.9,294.1M277.0,298.4 L282.1,296.9M130.9,327.2 L131.5,324.7M131.5,324.7 L130.9,327.2M131.5,324.7 L133.2,324.3 L133.9,321.5M131.5,324.7 L128.8,323.4M126.6,327.0 L128.8,323.4M128.8,323.4 L131.5,324.7M128.8,323.4 L126.6,327.0M135.4,326.6 L136.5,321.9M136.5,321.9 L135.4,326.6M136.5,321.9 L133.9,321.5M136.5,321.9 L140.0,322.5M133.9,321.5 L129.4,322.4M133.9,321.5 L136.5,321.9M133.9,321.5 L133.2,324.3 L131.5,324.7M129.4,322.4 L128.8,320.1M129.4,322.4 L133.9,321.5M122.5,322.8 L128.8,320.1M128.8,320.1 L129.4,322.4M128.8,320.1 L135.8,319.2M128.8,320.1 L122.5,322.8M135.8,319.2 L128.8,320.1M119.2,374.6 L121.1,372.7M75.1,352.7 L82.3,351.5M82.3,351.5 L86.6,361.4 L84.9,369.8 L71.2,367.2M82.3,351.5 L75.1,352.7M81.8,349.6 L80.3,339.9M71.2,367.2 L84.9,369.8 L86.6,361.4 L82.3,351.5M70.2,333.9 L64.5,337.5M70.2,333.9 L74.6,338.3 L80.3,339.9M70.2,333.9 L64.0,321.9 L58.4,318.3 L52.1,328.5M64.5,337.5 L70.2,333.9M52.1,328.5 L58.4,318.3 L64.0,321.9 L70.2,333.9M121.8,327.0 L118.2,328.7M107.9,319.3 L104.8,319.3M107.9,319.3 L107.9,321.9M107.9,319.3 L113.2,320.6 L118.2,328.7M104.8,319.3 L107.9,319.3M104.8,319.3 L96.5,319.3M70.1,309.6 L76.9,310.0M74.6,300.9 L79.4,302.3 L76.9,310.0M-49.4,419.5 L-48.9,416.6 L-43.3,415.4M-43.3,415.4 L-36.9,402.9M-43.3,415.4 L-48.9,416.6 L-49.4,419.5M-32.5,409.5 L-32.4,410.8 L-33.9,410.9 L-33.8,409.7 L-32.5,409.5M-32.5,409.5 L-33.8,409.7 L-33.9,410.9 L-32.4,410.8 L-32.5,409.5M-32.5,409.5 L-27.4,401.9M177.0,405.9 L175.9,408.1 L174.7,407.6 L1
3813874.9,406.4 L177.0,405.9M177.0,405.9 L174.9,406.4 L174.7,407.6 L175.9,408.1 L177.0,405.9M177.0,405.9 L176.7,401.3 L173.1,395.8M173.1,395.8 L166.1,386.4M173.1,395.8 L166.8,385.9M173.1,395.8 L176.7,401.3 L177.0,405.9M149.4,401.2 L146.4,395.8 L133.9,393.5M163.8,398.1 L159.2,391.1M163.8,398.1 L163.7,399.4 L164.9,399.6 L165.1,398.4 L163.8,398.1M163.8,398.1 L165.1,398.4 L164.9,399.6 L163.7,399.4 L163.8,398.1M159.2,391.1 L166.1,386.4M159.2,391.1 L163.8,398.1M159.2,391.1 L157.0,387.8M166.1,386.4 L159.2,391.1M166.1,386.4 L173.1,395.8M166.1,386.4 L161.5,377.8 L153.2,371.4M166.8,385.9 L162.0,377.3 L155.4,372.8 L152.8,369.1 L152.1,365.3M166.8,385.9 L173.1,395.8M133.7,394.0 L132.4,398.4M157.0,387.8 L159.2,391.1M157.0,387.8 L157.3,386.6 L156.1,386.3 L155.8,387.5 L157.0,387.8M157.0,387.8 L155.8,387.5 L156.1,386.3 L157.3,386.6 L157.0,387.8M153.2,371.4 L161.5,377.8 L166.1,386.4M153.2,371.4 L150.7,373.3 L149.6,372.9 L152.0,369.7M152.0,369.7 L149.6,372.9 L150.7,373.3 L153.2,371.4M152.0,369.7 L151.1,365.4M151.1,365.4 L152.0,369.7M152.1,365.3 L152.4,363.7 L150.8,363.6M152.1,365.3 L152.8,369.1 L155.4,372.8 L162.0,377.3 L166.8,385.9M150.8,363.6 L152.4,363.7 L152.1,365.3M25.9,336.9 L22.5,338.0M47.3,296.2 L49.8,299.4 L48.2,300.7M46.3,294.5 L44.6,292.4M-3.6,286.0 L-2.1,283.9M-3.6,286.0 L-2.8,289.4 L5.5,296.8M-2.1,283.9 L-3.6,286.0M5.5,296.8 L-2.8,289.4 L-3.6,286.0M5.5,296.8 L11.1,298.1 L19.4,296.0M-1.3,283.2 L8.9,275.3M222.4,228.1 L220.9,230.2M222.4,228.1 L225.0,229.9 L224.6,231.3 L223.6,231.0M220.9,230.2 L222.4,228.1M220.9,230.2 L217.8,234.4M223.6,231.0 L224.6,231.3 L225.0,229.9 L222.4,228.1M-5.9,667.4 L-0.9,668.0M-5.9,667.4 L-13.8,666.1M367.4,129.0 L365.6,126.9M367.4,129.0 L371.9,132.8 L379.9,132.3 L384.8,138.3 L388.1,139.6 L390.3,138.6 L390.8,137.0 L388.1,132.9M345.7,27.2 L346.3,22.5 L344.9,21.7 L344.0,22.4 L345.7,27.2M345.7,27.2 L344.0,22.4 L344.9,21.7 L346.3,22.5 L345.7,27.2M345.7,27.2 L344.3,35.7M527.9,514.0 L525.2,511.0 L526.1,507.4M526.1,507.4 L529.6,502.6M526.1,507.4 L525.3,506.7 L528.0,502.4 L529.6,502.6M526.1,507.4 L525.2,511.0 L527.9,514.0M529.6,502.6 L526.1,507.4M529.6,502.6 L528.0,502.4 L525.3,506.7 L526.1,507.4M529.6,502.6 L532.2,505.0M532.2,505.0 L529.6,502.6M673.8,-72.5 L679.4,-74.6M673.8,-72.5 L671.2,-70.8 L672.9,-66.5M41.9,289.2 L44.6,292.4M40.1,286.9 L37.4,283.5M41.1,287.1 L47.0,282.5M36.6,284.2 L39.3,287.5M37.4,283.5 L40.1,286.9M-47.4,561.7 L-45.1,565.7 L-35.2,571.0M450.3,183.1 L449.1,174.0M459.9,184.5 L456.4,180.8M459.9,184.5 L463.7,188.2 L466.0,185.9M294.7,334.2 L296.3,331.7 L294.1,329.6M294.7,334.2 L293.6,335.5 L294.7,336.4 L295.7,335.2 L294.7,334.2M294.7,334.2 L295.7,335.2 L294.7,336.4 L293.6,335.5 L294.7,334.2M294.1,329.6 L289.3,325.4M294.1,329.6 L296.3,331.7 L294.7,334.2M155.2,472.8 L160.2,468.4M170.9,482.1 L168.3,481.4 L165.0,476.0 L165.1,472.7 L160.2,468.4M388.1,351.4 L384.7,355.2 L383.2,360.9M388.1,351.4 L389.2,351.3 L389.1,350.2 L388.1,350.3 L388.1,351.4M388.1,351.4 L388.1,350.3 L389.1,350.2 L389.2,351.3 L388.1,351.4M312.2,111.3 L313.0,115.3M556.3,230.6 L558.1,233.4M556.3,230.6 L553.6,226.5M549.5,237.2 L551.6,239.1M551.6,239.1 L549.5,237.2M48.2,300.7 L49.8,299.4 L47.3,296.2M110.9,293.0 L110.0,288.5M110.0,288.5 L110.9,293.0M110.0,288.5 L109.2,284.8M107.9,289.0 L107.4,286.5 L98.5,288.4 L99.5,293.6 L108.3,291.7 L107.9,289.0M107.9,289.0 L108.3,291.7 L99.5,293.6 L98.5,288.4 L107.4,286.5 L107.9,289.0M55.3,286.9 L54.2,284.4M54.2,284.4 L52.2,280.1M54.2,284.4 L55.3,286.9M55.8,283.7 L59.9,281.8M59.9,281.8 L55.8,283.7M59.9,281.8 L64.5,279.8M82.3,284.5 L90.6,286.5 L102.1,284.0M82.3,284.5 L79.3,282.0 L76.8,276.8M64.5,279.8 L68.2,278.9M64.5,279.8 L59.9,281.8M68.2,278.9 L64.5,279.8M57.2,276.2 L66.7,272.8M66.7,272.8 L57.2,276.2M66.7,272.8 L74.0,270.8M76.8,276.8 L79.3,282.0 L82.3,284.5M76.8,276.8 L76.2,274.3M75.2,277.2 L70.1,278.5M76.2,274.3 L76.8,276.8M80.2,276.2 L84.1,275.5M84.1,275.5 L80.2,276.2M85.9,275.1 L87.1,280.5 L93.4,278.2 L91.0,269.2M85.9,275.1 L85.4,272.5 L87.4,270.3M91.0,269.2 L93.4,278.2 L87.1,280.5 L85.9,275.1M87.4,270.3 L90.2,269.4M87.4,270.3 L85.4,272.5 L85.9,275.1M68.4,272.9 L74.2,271.6M74.0,270.8 L66.7,272.8M90.2,269.4 L87.4,270.3M124.2,260.0 L124.4,254.8 L123.2,252.5M124.2,260.0 L124.2,268.1M105.0,264.8 L105.8,268.6M105.0,264.8 L103.9,259.5M123.2,252.5 L124.4,254.8 L124.2,260.0M479.2,154.7 L477.1,155.0 L475.4,157.6M479.2,154.7 L479.8,157.6 L476.9,159.1M642.0,-2.5 L636.3,4.9 L628.8,9.1 L627.2,12.6M627.2,12.6 L628.8,9.1 L636.3,4.9 L642.0,-2.5M626.0,12.6 L626.1,15.0M626.1,15.0 L626.0,12.6M626.1,15.0 L625.5,28.1M626.1,15.0 L610.1,13.8 L606.6,11.2M733.4,34.2 L734.6,35.8 L738.7,37.1M733.4,34.2 L734.2,29.0M738.7,37.1 L742.2,38.4 L743.0,43.2M738.7,37.1 L734.6,35.8 L733.4,34.2M734.2,29.0 L733.4,34.2M546.4,-35.3 L549.9,-36.4 L553.3,-40.6M75.1,549.0 L71.6,546.0M71.6,546.0 L77.2,537.8 L78.0,532.5M71.6,546.0 L75.1,549.0M71.6,546.0 L59.5,537.1M78.0,532.5 L77.2,537.8 L71.6,546.0M59.5,537.1 L64.8,526.5M59.5,537.1 L56.5,535.3M59.5,537.1 L71.6,546.0M64.8,526.5 L59.5,537.1M56.5,535.3 L59.5,537.1M66.2,522.6 L68.0,519.5M66.2,522.6 L64.4,525.3M194.4,375.1 L186.4,364.2 L184.7,359.5M184.7,359.5 L183.4,357.0M184.7,359.5 L186.4,364.2 L194.4,375.1M183.6,358.7 L181.4,359.8M403.5,446.7 L406.7,442.2M404.9,449.3 L407.8,451.5M404.9,449.3 L402.9,447.6M58.8,689.6 L51.9,689.3M51.9,689.3 L51.6,688.7 L51.0,689.0 L51.4,689.6 L51.9,689.3M51.9,689.3 L51.4,689.6 L51.0,689.0 L51.6,688.7 L51.9,689.3M51.9,689.3 L58.8,689.6
38138M97.9,188.8 L92.7,189.8M97.9,188.8 L101.4,188.2M538.1,350.4 L536.7,347.9M535.3,345.8 L536.7,347.9M536.7,347.9 L538.1,350.4M536.7,347.9 L535.3,345.8M253.5,213.9 L251.8,216.1M253.5,213.9 L249.0,210.4M251.8,216.1 L253.5,213.9M249.0,210.4 L253.5,213.9M273.2,214.4 L277.5,212.5M273.2,214.4 L269.6,214.4M248.0,210.1 L243.8,208.7M243.8,208.7 L248.0,210.1M253.6,204.8 L251.4,199.4 L243.9,200.1 L241.6,202.3M241.6,202.3 L243.9,200.1 L251.4,199.4 L253.6,204.8M241.6,202.3 L241.4,207.2 L243.4,208.5M243.4,208.5 L241.4,207.2 L241.6,202.3M466.4,354.5 L466.0,352.2 L467.6,351.5 L467.9,353.9 L466.4,354.5M466.4,354.5 L467.9,353.9 L467.6,351.5 L466.0,352.2 L466.4,354.5M466.4,354.5 L461.6,358.3M421.7,415.6 L423.1,412.4M423.1,412.4 L421.7,415.6M423.1,412.4 L427.5,407.8M427.5,407.8 L433.0,403.0M427.5,407.8 L431.8,402.6M427.5,407.8 L423.1,412.4M181.0,336.4 L182.5,335.7 L183.4,338.7 L181.0,336.4M181.0,336.4 L183.4,338.7 L182.5,335.7 L181.0,336.4M181.0,336.4 L164.7,321.6M164.7,321.6 L181.0,336.4M164.7,321.6 L162.6,324.2M577.9,307.7 L581.1,311.9M220.0,201.7 L221.3,198.5M220.0,201.7 L218.5,204.9M676.3,-56.8 L672.9,-66.5M672.9,-66.5 L671.2,-70.8 L673.8,-72.5M672.9,-66.5 L676.3,-56.8M286.5,290.4 L286.6,293.6M286.5,290.4 L286.4,288.0M413.2,172.0 L409.3,176.1M394.4,238.2 L393.3,242.5M393.5,103.6 L384.8,100.4M196.7,207.4 L206.0,209.6M192.3,206.5 L189.8,206.1M20.1,683.0 L21.6,681.9 L20.4,679.8M20.4,679.8 L21.6,681.9 L20.1,683.0M18.1,675.7 L15.5,672.1M15.5,672.1 L18.1,675.7M108.8,126.4 L105.4,121.2M48.5,229.3 L52.9,234.9M48.5,229.3 L42.1,225.8 L36.1,224.7M52.9,234.9 L56.7,240.1M52.9,234.9 L48.5,229.3M327.4,50.7 L324.9,53.1M317.9,36.5 L318.7,39.8M81.2,154.0 L80.2,148.0M82.2,153.2 L81.7,147.9M82.2,153.2 L85.2,156.2 L91.6,155.5 L90.4,146.8M80.2,148.0 L81.2,154.0M80.2,148.0 L75.9,149.0M81.7,147.9 L82.2,153.2M81.7,147.9 L84.5,147.5M90.4,146.8 L84.5,147.5M90.4,146.8 L91.6,155.5 L85.2,156.2 L82.2,153.2M75.9,149.0 L80.2,148.0M84.5,147.5 L81.7,147.9M84.5,147.5 L90.4,146.8M206.7,361.4 L209.9,358.7 L214.6,359.5M203.1,364.2 L206.2,361.8 L207.9,362.3 L212.5,359.5 L214.6,359.5M277.9,248.4 L280.3,249.4M280.3,249.4 L277.9,248.4M287.7,239.1 L291.4,239.7M285.2,244.4 L286.4,240.8M285.2,244.4 L283.4,249.7 L282.0,250.1M286.4,240.8 L285.2,244.4M282.0,250.1 L283.4,249.7 L285.2,244.4M354.7,259.9 L350.9,257.9M354.5,260.5 L352.9,264.8M350.9,257.9 L354.7,259.9M220.8,159.9 L235.9,161.1 L246.5,158.7M219.7,159.8 L214.9,159.6M623.6,690.6 L625.4,692.3M404.9,145.7 L402.9,147.9 L404.8,150.0M404.8,150.0 L407.1,152.1M404.8,150.0 L402.9,147.9 L404.9,145.7M548.9,224.6 L553.6,226.5M548.9,224.6 L546.1,223.0M553.6,226.5 L556.3,230.6M553.6,226.5 L548.9,224.6M549.6,233.7 L542.4,227.3M543.3,215.3 L548.0,219.4M543.3,215.3 L541.2,213.5M471.4,166.3 L473.5,168.1 L480.9,161.5 L484.3,162.5M471.4,166.3 L473.1,163.2M19.2,221.9 L22.4,222.4M9.1,219.9 L16.0,221.4M9.1,219.9 L-8.6,209.1M16.0,221.4 L9.1,219.9M176.5,240.6 L177.4,237.1M-192.9,-26.5 L-191.0,-24.4M-192.9,-26.5 L-196.9,-46.9M-196.9,-46.9 L-192.9,-26.5M-196.9,-46.9 L-200.6,-64.9M-177.0,-16.2 L-179.5,-17.6M-177.0,-16.2 L-170.6,-12.6M-25.0,-104.3 L-36.6,-101.7M-94.0,664.9 L-96.5,673.4M-76.0,668.3 L-70.6,670.2M-76.0,668.3 L-75.7,662.3M-76.0,668.3 L-78.5,672.0 L-83.7,674.9 L-90.3,675.0 L-96.5,673.4M-75.7,662.3 L-76.0,668.3M0.0,603.3 L11.7,612.9M502.9,498.9 L501.6,496.2M502.9,498.9 L504.0,501.0M63.3,671.6 L67.9,668.5M63.3,671.6 L62.4,667.6M61.5,672.6 L55.3,676.2M67.9,668.5 L63.3,671.6M67.7,664.4 L68.6,668.1M67.7,664.4 L65.0,654.2M-12.8,639.4 L-11.7,636.0M313.6,330.4 L318.6,334.7M311.9,328.9 L307.0,324.2M318.6,334.7 L316.2,337.3M318.6,334.7 L313.6,330.4M319.8,335.8 L327.5,342.5M317.8,337.1 L314.6,340.9M329.2,344.0 L332.4,347.1M327.5,342.5 L319.8,335.8M327.6,344.3 L323.8,348.5M332.4,347.1 L335.3,349.9M332.4,347.1 L329.2,344.0M335.3,349.9 L332.4,347.1M351.2,349.2 L341.8,350.0M504.1,506.8 L506.5,508.2M316.2,337.3 L313.8,340.2M316.2,337.3 L318.6,334.7M321.7,331.6 L325.2,327.7M743.0,43.2 L742.2,38.4 L738.7,37.1M661.9,16.3 L651.8,13.4M661.9,16.3 L674.8,19.7 L691.8,18.7M691.8,18.7 L702.8,17.9M691.8,18.7 L674.8,19.7 L661.9,16.3M209.9,-38.1 L208.4,-52.5M209.9,-38.1 L202.5,-34.2M209.9,-38.1 L218.6,-40.6 L218.7,-43.0 L216.9,-43.6M216.9,-43.6 L218.7,-43.0 L218.6,-40.6 L209.9,-38.1M480.8,-62.0 L476.6,-54.2 L469.8,-51.8 L460.6,-52.7 L459.6,-50.9 L462.1,-49.5M313.8,340.2 L310.6,344.1M313.8,340.2 L316.2,337.3M606.0,574.9 L599.1,573.3M606.0,574.9 L610.3,562.8 L608.8,558.2M607.6,575.5 L611.4,576.8M608.8,558.2 L610.3,562.8 L606.0,574.9M653.7,570.1 L650.4,565.6M650.4,565.6 L653.7,570.1M634.0,620.5 L638.9,621.3M634.0,620.5 L631.5,619.4 L628.3,615.3 L626.9,608.0M599.6,463.2 L593.9,461.9M599.6,463.2 L605.4,464.5 L606.7,462.8M606.7,462.8 L605.4,464.5 L599.6,463.2M528.0,386.4 L530.6,387.7M493.1,265.7 L495.2,267.6M233.6,533.5 L233.9,528.8M233.9,528.8 L229.3,529.2M233.9,528.8 L236.3,523.0M233.9,528.8 L233.6,533.5M229.3,529.2 L233.9,528.8M236.3,523.0 L243.3,526.4M236.3,523.0 L233.9,528.8M243.4,491.4 L260.7,500.2M307.0,324.2 L311.9,328.9M307.0,324.2 L301.3,318.3M301.3,318.3 L299.0,315.7M301.3,318.3 L307.0,324.2M273.2,285.7 L269.3,280.9M273.2,285.7 L276.3,289.6M269.3,280.9 L273.2,285.7M-158.6,371.9 L-157.4,364.4 L-151.7,362.6M-143.0,367.4 L-147.1,363.2M-166.0,359.8 L-168.3,354.5 L-168.3,346.6 L-164.7,343.2M134.9,347.2 L139.0,343.3M134.9,347.2 L138.9,351.9M134.9,347.2 L133.8,349.1 L138.1,352.6M139.0,343.3 L141.6,341.0M139.0,343.3 L134.9,347.2M139.0,343.3 L136.4,340.5M139.0,343.3 L144.9,348.3M138.9,351.9 L134.9,347.2M138.9,351.9 L143.0,354.3M138.1,352.6 L133.8,349.1 L134.9,347.2M136.4,340.5 L139.0,343.3M144.9,348.3 L139.0,343.3M-44.0,311.9 L-19.7,305.8M-19.7,305.8 L-44.0,311.9M-19.7,305.8 L-24.6,300.1 L-28.2,299.2M-19.7,305.8 L-13.9,310.0M-119.0,304.7 L-118.5,300.5 L-125.4,299.2M-13.9,310.0 L-4.7,312.7M-13.9,310.0 L-19.7,305.8M-127.0,306.7 L-125.4,299.2M309.3,67.2 L305.8,63.4M309.3,67.2 L318.9,77.3M253.9,55.0 L250.3,51.2M158.5,-69.3 L170.8,-75.7 L172.2,-72.0M-6.6,609.5 L-8.0,612.6M263.6,10.4 L261.0,14.2M264.3,9.5 L267.9,4.7M267.9,4.7 L264.3,9.5M267.9,4.7 L272.2,1.9M-149.5,312.1 L-144.5,313.1M389.5,432.6 L393.6,438.8M502.9,354.5 L505.5,353.4M488.7,647.
381380 L485.6,648.6M488.7,647.0 L490.8,645.9M488.2,641.7 L490.8,645.9M126.0,302.8 L124.2,300.0M124.2,300.0 L126.0,302.8M127.5,297.9 L129.4,300.6M129.4,300.6 L127.5,297.9M129.6,301.1 L129.4,303.7M129.4,303.7 L129.6,301.1M129.4,304.0 L131.9,304.7M131.9,304.7 L134.5,305.4M131.9,304.7 L129.4,304.0M130.8,295.6 L132.8,298.4M132.8,298.4 L130.8,295.6M133.3,299.1 L135.3,301.8M134.5,305.4 L131.9,304.7M134.5,305.4 L136.3,305.5 L137.2,302.2M134.6,305.1 L135.3,301.8M137.2,302.2 L136.3,305.5 L134.5,305.4M676.8,582.0 L677.0,578.9M666.2,585.2 L666.9,588.2M666.9,588.2 L666.2,585.2M674.1,588.0 L672.0,590.1M672.0,590.1 L674.1,588.0M666.3,595.4 L664.6,597.3M665.4,548.3 L663.9,550.2M663.9,550.2 L665.4,548.3M650.8,573.0 L649.4,575.4M649.4,575.4 L650.8,573.0M649.2,576.1 L649.2,578.8M649.2,578.8 L649.2,576.1M646.1,585.7 L648.8,586.5M35.2,403.4 L38.1,404.0M28.2,384.6 L23.7,383.4 L18.4,385.6M-11.9,344.3 L-9.2,346.8M-11.3,343.6 L-8.5,346.0M-12.6,343.8 L-14.5,342.3M-11.9,343.2 L-14.5,342.3M-10.8,343.2 L-5.6,337.5M-5.6,337.5 L-1.3,332.6M-5.6,337.5 L-10.8,343.2M-49.6,698.0 L-61.4,696.3M-49.6,698.0 L-39.7,699.8M533.8,203.7 L538.5,198.9 L544.5,200.4M544.5,200.4 L549.9,195.0 L555.0,193.6M544.5,200.4 L538.5,198.9 L533.8,203.7M555.0,193.6 L559.3,192.7M555.0,193.6 L549.9,195.0 L544.5,200.4M131.3,187.1 L136.6,189.6M136.6,189.6 L131.3,187.1M189.8,206.1 L192.3,206.5M-204.6,132.7 L-206.9,133.7M-173.2,141.0 L-177.0,148.9M-173.2,141.0 L-165.8,133.1M-137.4,137.1 L-136.2,139.9M-136.2,139.9 L-130.3,148.4M-136.2,139.9 L-137.4,137.1M-48.9,-68.7 L-51.3,-69.3M-51.3,-69.3 L-48.9,-68.7M-51.3,-69.3 L-52.0,-62.6M-51.3,-69.3 L-53.8,-70.5 L-53.1,-73.5M-52.0,-62.6 L-51.3,-69.3M433.8,200.9 L438.5,202.2 L449.0,200.7 L450.9,199.2M429.0,196.9 L432.7,200.0M432.7,200.0 L429.0,196.9M0.2,598.5 L-4.8,604.9M44.5,540.0 L42.7,542.5M547.1,586.5 L544.2,583.6M265.9,212.7 L263.6,211.0M267.0,213.4 L269.6,214.4M263.6,211.0 L265.9,212.7M-103.3,159.6 L-111.1,161.9M70.5,191.0 L62.9,190.1M81.9,192.1 L78.6,192.0M78.6,192.0 L73.0,191.6M78.6,192.0 L81.9,192.1M78.6,192.0 L84.2,190.9M73.0,191.6 L78.6,192.0M84.2,190.9 L78.6,192.0M68.0,519.5 L66.2,522.6M358.1,473.8 L360.2,488.3 L360.3,500.8M358.1,473.8 L358.9,469.9M355.7,472.9 L353.4,474.0M698.2,579.4 L701.5,580.6 L705.5,579.6M50.8,622.5 L51.9,626.6M50.8,622.5 L49.3,615.9M46.0,609.1 L43.6,606.9M46.0,609.1 L48.4,612.5M43.6,606.9 L46.0,609.1M43.6,606.9 L41.1,604.8M242.1,103.0 L254.8,100.7M242.1,103.0 L231.9,106.0M230.1,107.6 L221.2,110.2M231.0,107.9 L233.7,111.7M229.9,106.7 L220.8,109.3M233.6,110.7 L232.0,107.7M203.5,253.7 L204.9,251.8M203.5,253.7 L202.1,255.7M204.9,251.8 L208.1,247.5M204.9,251.8 L203.5,253.7M202.1,255.7 L203.5,253.7M619.7,409.8 L617.6,410.8M135.3,301.8 L134.6,305.1M135.3,301.8 L133.3,299.1M143.0,354.3 L138.9,351.9M317.6,243.1 L322.3,244.3M201.0,280.8 L198.5,278.8M201.0,280.8 L203.9,283.1M201.0,280.8 L204.1,276.6 L201.6,274.5M198.5,278.8 L196.0,276.8M198.5,278.8 L201.0,280.8M198.5,278.8 L201.6,274.5M203.9,283.1 L201.0,280.8M201.6,274.5 L198.5,278.8M201.6,274.5 L204.1,276.6 L201.0,280.8M201.6,274.5 L199.3,272.6M197.8,271.5 L195.0,275.2 L196.0,276.8M197.8,271.5 L193.2,267.9 L191.3,270.1M196.0,276.8 L198.5,278.8M196.0,276.8 L199.3,272.6M196.0,276.8 L195.0,275.2 L197.8,271.5M199.3,272.6 L196.0,276.8M199.3,272.6 L201.6,274.5M191.3,270.1 L189.8,272.1M191.3,270.1 L193.2,267.9 L197.8,271.5M-130.5,133.8 L-124.1,129.6M-130.5,133.8 L-137.8,135.8M-130.5,133.8 L-131.6,128.3M-111.3,129.2 L-112.8,127.9 L-118.3,127.3M-118.3,127.3 L-112.8,127.9 L-111.3,129.2M-118.3,127.3 L-122.2,128.4M-118.3,127.3 L-118.7,120.9 L-116.7,117.5M-122.2,128.4 L-118.3,127.3M-116.7,117.5 L-118.7,120.9 L-118.3,127.3M-116.7,117.5 L-116.2,116.2 L-115.0,116.5M-115.0,116.5 L-116.2,116.2 L-116.7,117.5M-124.1,129.6 L-130.5,133.8M-131.6,128.3 L-130.5,133.8M-131.6,128.3 L-132.2,127.1 L-131.0,126.9M29.8,-90.8 L22.7,-90.6M-102.3,638.4 L-100.5,636.2 L-97.6,625.3M-102.3,638.4 L-105.3,639.4M259.0,36.0 L263.6,43.5M259.0,36.0 L258.5,30.7 L263.7,18.6 L263.1,16.1 L261.0,14.2M263.6,43.5 L259.0,36.0M625.5,28.1 L626.1,15.0M606.6,11.2 L610.1,13.8 L626.1,15.0M287.3,524.8 L271.8,556.3 L272.6,563.2M67.6,254.9 L65.6,252.2M68.6,256.3 L73.8,264.6M73.8,264.6 L68.6,256.3M217.4,417.5 L214.3,426.3M291.2,516.8 L289.0,521.5M291.2,516.8 L295.9,506.8M289.0,521.5 L287.9,523.6M289.0,521.5 L291.2,516.8M295.9,506.8 L291.2,516.8M295.9,506.8 L299.4,499.5M-176.7,81.8 L-203.3,82.2M-176.7,81.8 L-171.9,82.7M480.3,325.5 L484.0,334.9M111.7,250.7 L109.4,252.5M506.5,508.2 L504.1,506.8M506.5,508.2 L508.7,509.4 L505.8,503.7M-83.7,597.0 L-79.7,599.6 L-73.9,600.6M287.9,523.6 L289.0,521.5M411.2,458.3 L406.6,458.6 L402.5,461.1M206.1,447.1 L194.6,469.9 L197.3,475.9 L201.4,480.6 L210.6,483.9M210.6,483.9 L201.4,480.6 L197.3,475.9 L194.6,469.9 L206.1,447.1M356.0,606.4 L354.8,599.7M356.0,606.4 L357.0,611.4M-130.3,148.4 L-127.5,151.8M-130.3,148.4 L-136.2,139.9M216.1,210.9 L217.0,208.3M217.0,208.3 L216.1,210.9M218.5,204.9 L220.0,201.7M97.8,262.8 L95.7,264.3M99.4,261.5 L101.8,259.5M95.7,264.3 L93.5,265.7M95.7,264.3 L97.8,262.8M223.3,214.0 L220.7,215.5M248.4,220.5 L249.8,218.6M249.8,218.6 L248.4,220.5M258.6,227.4 L256.4,226.4M256.4,226.4 L258.6,227.4M395.8,468.3 L392.1,472.3M397.4,466.6 L401.0,462.7M392.1,472.3 L395.8,468.3M41.6,307.4 L32.7,299.4 L31.3,296.1M297.5,275.6 L294.4,274.4M269.6,214.4 L273.2,214.4M269.6,214.4 L267.0,213.4M306.9,278.9 L303.2,277.6M306.9,278.9 L309.8,279.9M307.8,376.7 L312.8,371.1M589.5,-21.3 L592.2,-17.5M589.5,-21.3 L585.4,-25.4M589.5,-21.3 L585.0,-24.1M208.1,247.5
38138L211.7,242.6M208.1,247.5 L204.9,251.8M211.7,242.6 L208.1,247.5M483.4,603.4 L485.4,610.1M483.4,603.4 L482.6,599.8M354.8,599.7 L356.0,606.4M354.8,599.7 L354.3,597.3M611.4,576.8 L615.6,578.3M611.4,576.8 L607.6,575.5M-174.5,187.1 L-197.8,187.8M-174.5,187.1 L-162.6,186.0M702.8,17.9 L705.4,17.7M702.8,17.9 L691.8,18.7M705.4,17.7 L702.8,17.9M659.8,-69.2 L657.9,-64.4M659.8,-69.2 L664.8,-76.4M47.0,282.5 L41.1,287.1M147.4,-28.5 L151.2,-32.3M147.4,-28.5 L142.1,-22.8M-5.5,-54.2 L-1.0,-45.5M-200.2,-104.1 L-197.8,-99.9M-200.2,-104.1 L-201.6,-106.7M735.0,25.5 L735.6,21.7 L732.2,18.6M305.8,63.4 L309.3,67.2M305.8,63.4 L302.3,59.9M302.3,59.9 L305.8,63.4M302.3,59.9 L295.9,53.2M-108.3,296.0 L-97.1,308.2M-109.2,295.2 L-116.2,290.2M159.0,233.4 L162.6,235.2M70.1,278.5 L75.2,277.2M19.4,296.0 L11.1,298.1 L5.5,296.8M19.4,296.0 L23.7,300.1M21.2,283.5 L24.3,287.2M117.0,419.5 L108.5,428.2M117.0,419.5 L123.3,412.8 L128.4,405.1M181.4,359.8 L183.6,358.7M-216.7,707.3 L-214.5,712.9M-216.7,707.3 L-219.4,701.7M249.6,455.3 L252.8,461.3 L271.4,469.6 L273.7,469.0 L275.6,465.2M656.0,-60.8 L647.0,-47.0 L646.2,-41.7M656.0,-60.8 L657.9,-64.4M657.9,-64.4 L659.8,-69.2M657.9,-64.4 L656.0,-60.8M664.1,122.6 L670.0,126.6M662.4,102.9 L666.6,103.3M662.4,102.9 L643.9,102.6M662.5,121.5 L660.1,119.8M10.5,516.2 L11.5,520.4 L16.8,523.3 L17.1,526.3 L21.9,529.1M21.9,529.1 L41.8,540.6M21.9,529.1 L17.1,526.3 L16.8,523.3 L11.5,520.4 L10.5,516.2M-132.5,686.3 L-132.2,681.2 L-133.9,676.5M-132.5,686.3 L-136.9,691.1M-44.4,-74.2 L-38.4,-74.6M352.7,585.5 L353.2,588.3M352.3,583.3 L351.7,579.7M547.4,323.9 L548.9,327.3M547.4,323.9 L545.7,320.1M-171.9,82.7 L-176.7,81.8M-171.9,82.7 L-163.0,87.5M344.6,62.2 L346.2,59.9M344.6,62.2 L342.2,66.8M230.6,251.9 L231.4,249.1M-149.2,76.9 L-143.3,78.8M-149.2,76.9 L-160.6,72.3M-160.6,72.3 L-149.2,76.9M390.7,473.7 L386.8,477.7M401.0,462.7 L402.5,461.1M401.0,462.7 L397.4,466.6M402.5,461.1 L401.0,462.7M402.5,461.1 L406.6,458.6 L411.2,458.3M51.5,678.3 L55.3,676.2M55.3,676.2 L61.5,672.6M55.3,676.2 L51.5,678.3M-41.9,363.6 L-44.6,362.0M-41.9,363.6 L-38.7,365.4M-38.7,365.4 L-41.9,363.6M-38.7,365.4 L-30.6,369.9M-58.4,384.7 L-55.5,383.7 L-51.8,379.8 L-50.8,376.8 L-52.1,369.4 L-50.8,366.7M689.7,-92.6 L687.9,-90.7M541.2,365.5 L539.4,363.0M506.3,541.7 L501.5,538.7M501.5,538.7 L506.3,541.7M501.6,496.2 L502.9,498.9M501.6,496.2 L499.9,493.0M499.9,493.0 L501.6,496.2M499.9,493.0 L495.8,485.0M485.6,438.4 L494.3,440.7M485.6,438.4 L481.4,437.3 L480.3,426.8 L481.8,425.9 L489.2,428.0M489.2,428.0 L481.8,425.9 L480.3,426.8 L481.4,437.3 L485.6,438.4M489.2,428.0 L497.0,430.1M25.4,-19.8 L27.3,-18.3M25.4,-19.8 L18.7,-25.5M355.1,155.1 L353.5,158.1M400.3,80.1 L402.1,82.1M402.1,82.1 L400.3,80.1M452.8,385.9 L449.0,385.8M452.8,385.9 L459.0,386.9M302.4,259.9 L304.6,260.7M301.9,259.7 L294.1,256.8M294.4,274.4 L291.8,273.4M294.4,274.4 L297.5,275.6M285.6,279.5 L285.4,276.2M285.8,280.9 L286.1,283.9M286.1,283.9 L285.8,280.9M268.5,279.9 L266.5,277.5M312.2,280.8 L309.8,279.9M309.8,279.9 L306.9,278.9M309.8,279.9 L312.2,280.8M312.9,290.8 L313.4,288.6 L317.0,285.6M317.0,285.6 L313.4,288.6 L312.9,290.8M313.4,292.0 L317.5,293.0M142.9,222.3 L139.4,219.3M142.9,222.3 L148.1,226.9M139.4,219.3 L142.9,222.3M153.2,223.5 L150.0,226.9M-101.1,232.7 L-104.8,233.7M-118.6,221.3 L-115.0,221.0M-121.3,217.2 L-121.9,213.9M266.2,241.2 L262.9,247.3 L260.2,246.4 L262.7,240.3 L266.2,241.2M266.2,241.2 L262.7,240.3 L260.2,246.4 L262.9,247.3 L266.2,241.2M266.8,240.2 L270.3,234.2M302.5,241.3 L305.5,241.5M298.2,249.1 L306.6,251.5M291.4,239.7 L295.9,240.4M291.4,239.7 L287.7,239.1M199.1,259.7 L197.1,262.4M199.1,259.7 L200.8,257.4M92.7,189.8 L97.9,188.8M109.7,186.5 L112.5,185.9M107.3,105.1 L109.1,107.7M109.1,107.7 L107.3,105.1M109.1,107.7 L112.0,111.4 L106.2,115.8M658.3,118.6 L654.2,115.8M74.0,265.4 L75.3,269.8M75.3,269.8 L74.0,265.4M436.3,441.1 L441.9,449.4M436.3,441.1 L442.6,436.4M-233.2,623.2 L-229.1,628.0M339.5,-7.0 L342.1,-8.1M339.5,-7.0 L340.7,-10.0 L342.1,-8.1M339.5,-7.0 L333.4,-0.9 L328.2,1.3 L305.2,3.4 L295.2,2.2 L289.6,4.3M342.1,-8.1 L340.7,-10.0 L339.5,-7.0M342.1,-8.1 L339.5,-7.0M21.7,338.0 L18.3,336.7 L13.6,331.6 L11.7,325.8 L8.0,322.1M22.5,338.0 L25.9,336.9M234.7,268.5 L238.6,272.8M391.1,332.0 L393.5,334.1M391.1,332.0 L384.1,325.8M45.1,539.1 L48.5,534.5M209.2,112.5 L212.9,111.4M208.3,112.8 L201.5,115.3M212.9,111.4 L209.2,112.5M212.9,111.4 L218.8,109.7M217.4,103.7 L213.6,94.3M217.4,103.7 L219.7,109.0M357.9,372.5 L351.9,365.7M358.8,373.4 L360.6,375.7M-5.5,-54.7 L-9.4,-63.3M565.2,-47.8 L567.8,-50.8M565.2,-47.8 L562.8,-44.7M368.7,265.3 L365.6,264.3M365.6,264.3 L368.7,265.3M-214.5,712.9 L-216.7,707.3M-214.5,712.9 L-212.7,717.5M-212.7,717.5 L-214.5,712.9M225.4,224.2 L223.8,226.4M220.7,215.5 L223.3,214.0M223.8,226.4 L225.4,224.2M303.9,319.2 L306.1,321.6M-81.6,693.4 L-86.3,692.7M-86.3,692.7 L-81.6,693.4M583.2,-69.8 L574.8,-59.1M574.8,-59.1 L572.5,-56.4M574.8,-59.1 L583.2,-69.8M113.6,141.8 L117.5,140.6M526.6,275.9 L524.5,278.4M526.6,275.9 L530.3,278.2M56.7,240.1 L65.6,252.2M56.7,240.1 L52.9,234.9M28.1,593.5 L26.1,591.8M28.1,593.5 L34.1,598.7M26.1,591.8 L28.1,593.5M26.1,591.8 L23.5,589.5M23.5,589.5 L26.1,591.8M17.9,584.6 L16.1,583.1M10.3,588.2 L13.0,585.0M13.0,585.0 L10.3,588.2M13.0,585.0 L14.6,583.1M8.9,589.9 L6.6,592.8M131.6,237.1 L128.0,239.1M128.0,239.1 L131.6,237.1M202.1,205.6 L206.0,207.2M238.7,110.0 L237.1,107.1M237.1,107.1 L238.7,110.0M200.8,257.4 L199.1,259.7M101.8,259.5 L99.4,261.5M375.7,397.5 L377.2,400.3M375.7,397.5 L374.2,394.6M374.2,394.6 L375.7,397.5M68.9,166.7 L72.2,166.4M188.0,199.6 L184.9,198.0 L184.1,199.6 L182.6,199.3M182.6,199.3 L184.1,199.6 L184.9,198.0 L188.0,199.6M191.5,201.3 L194.1,202.7M217.8,234.4 L220.9,230.2M93.5,265.7 L95.7,264.3M261.3,234.0 L258.6,240.2M261.6,233.4 L263.0,230.4M258.6,240.2 L261.3,234.0M673.4,664.9 L671.7,668.5M673.4,664.9 L675.1,661.3M306.4,235.2 L306.7,231.3M-126.4,156.1 L-126.9,161.4M-126.4,156.1 L-127.1,152.5M-11.5,612.8 L-13.5,610.7M131.0,132.6 L129.7,130.1M372.2,391.2 L370.8,389.0M371.5,406.0 L369.0,401.2M371.5,406.0 L373.0,408.2M593.3,294.2 L591.8,292.1M593.7,294.8 L595.9,297.7M591.8,292.1 L593.3,294.2M112.5,185.9 L109.7,186.5M-228.4,677.9 L-228.9,674.5M-228.9,674.5 L-228.4,677.9M-228.9,674.5 L-227.1,654.2M87.1,385.8 L96.3,398.5 L106.2,395.7M106.2,395.7 L96.3,398.5 L87.1,385.8M106.2,395.7 L126.4,388.5M490.9,349.1 L488.5,350.2 L490.9,355.7 L498.8,352.5M462.1,-49.5 L459.6,-50.9 L460.6,-52.7 L469.8,-51.8 L476.6,-54.2 L480.8,-62.0M106.9,143.0 L101.1,143.7M101.1,143.7 L106.9,143.0M101.1,143.7 L96.9,144.1M442.6,436.4 L436.3,441.1M24.3,287.2 L21.2,283.5M24.3,287.2 L30.2,294.5M365.3,21.8 L365.9,18.8M664.8,-76.4 L659.8,-69.2M6.6,592.8 L8.9,589.9M4.3,595.6 L1.9,598.6M237.4,262.6 L234.0,262.8M237.4,262.6 L240.1,262.4M234.0,262.8 L223.6,263.5M234.0,262.8 L237.4,262.6M42.7,-98.5 L38.0,-97.1M618.4,528.8 L616.8,531.0 L614.0,531.0M53.7,722.9 L46.7,729.7M373.0,408.2 L371.5,406.0M374.4,410.1 L376.6,413.0M372.8,13.0 L368.3,11.8M372.8,13.0 L371.9,20.3M-10.2,631.1 L-9.9,627.9M-10.2,631.1 L-10.4,633.7M-9.9,627.9 L-10.2,631.1M-9.9,627.9 L-9.5,623.5M-4.8,604.9 L-9.1,611.9M-4.8,604.9 L0.2,598.5M-127.5,151.8 L-130.3,148.4M191.6,119.4 L185.8,120.4M500.2,263.0 L502.7,260.2M485.8,253.9 L484.5,257.9M-9.5,623.5 L-9.9,627.9M251.6,229.8 L253.1,226.1M251.6,229.8 L249.9,235.0M424.3,129.1 L434.0,133.5M550.2,42.1 L548.1,41.1 L548.0,40.2 L549.9,40.2 L550.2,42.1M550.2,42.1 L549.9,40.2 L548.0,40.2 L548.1,41.1 L550.2,42.1M550.3,43.3 L550.7,47.1M550.7,47.1 L550.3,43.3M83.3,269.6 L86.3,268.4M83.3,269.6 L78.3,270.7M78.3,270.7 L83.3,269.6M521.9,363.1 L524.4,363.7M524.4,363.7 L529.7,365.2M524.4,363.7 L521.9,363.1M-228.0,681.3 L-228.0,688.5M76.6,270.3 L86.3,268.4M314.5,253.7 L318.0,254.7M470.9,248.8 L471.1,246.3M470.9,248.8 L470.8,254.1M470.8,254.1 L470.9,248.8M470.8,254.1 L470.7,255.6 L472.6,255.2 L472.4,254.1 L470.8,254.1M470.8,254.1 L472.4,254.1 L472.6,255.2 L470.7,255.6 L470.8,254.1M96.9,144.1 L101.1,143.7M701.4,219.9 L704.9,221.2M701.4,219.9 L697.6,218.5M704.9,221.2 L708.9,222.7M704.9,221.2 L701.4,219.9M-193.1,227.9 L-189.8,229.5 L-192.4,234.3M37.9,675.3 L41.9,682.7M37.9,675.3 L34.2,668.7M-9.3,621.8 L-9.1,619.4M480.5,668.2 L475.4,668.1M412.7,286.8 L409.8,283.0M412.7,286.8 L414.3,288.8M533.6,324.6 L530.6,326.6M140.2,430.7 L144.5,430.5 L142.1,433.4 L140.2,430.7M140.2,430.7 L142.1,433.4 L144.5,430.5 L140.2,430.7M140.2,430.7 L137.7,431.6M318.0,254.7 L314.5,253.7M373.4,272.3 L371.8,278.5M6.8,-71.6 L9.5,-68.8 L9.4,-65.8 L7.7,-64.4M7.7,-64.4 L9.4,-65.8 L9.5,-68.8 L6.8,-71.6M374.0,270.7 L374.9,267.8M586.5,24.4 L578.6,18.4M301.9,317.1 L299.9,314.9M-177.0,148.9 L-173.2,141.0M590.6,290.4 L592.9,288.2 L591.5,286.0 L588.9,288.4 L590.6,290.4M590.6,290.4 L588.9,288.4 L591.5,286.0 L592.9,288.2 L590.6,290.4M-217.1,294.0 L-214.8,294.5M-217.1,294.0 L-218.9,292.6 L-219.2,290.7 L-217.5,289.4M-203.0,-109.4 L-201.6,-106.7M-201.6,-106.7 L-200.2,-104.1M-201.6,-106.7 L-203.0,-109.4M407.8,451.5 L404.9,449.3M579.2,324.8 L576.7,321.5M-127.1,152.5 L-126.4,156.1M703.8,162.1 L697.2,156.5M552.8,261.5 L549.5,258.7M552.8,261.5 L555.9,264.2M549.5,258.7 L552.8,261.5M146.0,193.4 L148.9,194.7 L147.0,192.3M705.4,200.4 L702.6,197.9M705.4,200.4 L711.9,206.6M702.6,197.9 L705.4,200.4M660.1,119.8 L662.5,121.5M585.4,-25.4 L582.7,-26.6M585.4,-25.4 L589.5,-21.3M675.1,661.3 L673.4,664.9M95.5,144.3 L92.0,144.8M92.0,144.8 L95.5,144.3M331.5,501.4 L330.6,506.4M331.5,501.4 L332.4,496.6M330.6,506.4 L331.5,501.4M330.6,506.4 L329.6,509.8M440.8,686.4 L441.4,688.9 L443.2,690.3M443.2,690.3 L441.4,688.9 L440.8,686.4M657.9,42.2 L659.7,42.5 L663.2,39.5M359.7,93.5 L357.1,90.6M585.5,303.0 L587.1,305.1M457.7,377.8 L449.3,375.7M413.5,277.7 L413.5,280.5M413.5,277.7 L413.5,273.7M151.2,-32.3 L154.0,-34.7M151.2,-32.3 L147.4,-28.5M201.5,115.3 L208.3,112.8M210.6,113.1 L219.0,110.9M314.4,278.9 L315.4,275.9M572.5,-56.4 L574.8,-59.1M572.5,-56.4 L567.8,-50.8M567.8,-50.8 L572.5,-56.4M567.8,-50.8 L565.2,-47.8M573.8,34.6 L578.4,42.0M350.3,257.6 L347.6,256.3M490.3,266.9 L487.9,270.5M457.8,496.4 L456.0,498.7M457.8,496.4 L459.6,494.0M456.0,498.7 L457.8,496.4M456.0,498.7 L458.1,500.4M32.7,618.2 L29.1,615.3M419.0,247.8 L425.1,248.7M562.0,328.0 L567.0,324.3M410.1,242.0 L411.6,243.1 L415.3,242.9M433.3,281.7 L432.0,275.6M432.0,275.6 L433.3,281.7M487.9,270.5 L486.1,273.7M487.9,270.5 L490.3,266.9M486.1,273.7 L484.8,276.1M486.1,273.7 L487.9,270.5M491.4,274.0 L489.0,278.3M544.2,583.6 L547.1,586.5M543.2,582.4 L541.9,579.7M549.3,588.5 L553.6,592.4M558.7,594.2 L560.7,592.2M564.1,588.3 L562.4,590.2M505.5,353.4 L502.9,354.5M716.7,170.9 L723.9,176.5M716.7,170.9 L700.8,157.0 L699.7,154.7 L702.4,149.0 L705.4,145.9M426.5,231.8 L421.7,230.6M421.7,230.6 L426.5,231.8M419.6,230.2 L416.8,229.5M428.6,239.7 L415.7,237.
381381M428.6,239.7 L432.7,240.5M442.1,366.1 L440.5,363.9M442.1,366.1 L444.6,370.3M416.7,425.4 L419.1,427.1M393.6,438.8 L389.5,432.6M394.6,431.2 L396.1,430.3 L396.9,431.8 L395.7,432.5 L394.6,431.2M394.6,431.2 L395.7,432.5 L396.9,431.8 L396.1,430.3 L394.6,431.2M394.6,431.2 L393.2,429.0M18.7,608.2 L20.6,606.1M21.2,610.1 L22.9,608.0M25.9,628.6 L27.7,630.1 L35.3,620.4M35.3,620.4 L27.7,630.1 L25.9,628.6M8.5,643.9 L3.8,651.3M-131.0,126.9 L-132.2,127.1 L-131.6,128.3M599.3,614.8 L601.8,614.4M572.7,602.0 L569.9,602.1M601.8,614.4 L604.3,613.8M601.8,614.4 L599.3,614.8M464.1,717.0 L482.2,709.3M466.3,509.1 L458.1,500.4M466.3,509.1 L469.4,511.3M458.1,500.4 L456.0,498.7M458.1,500.4 L466.3,509.1M469.4,511.3 L466.3,509.1M469.4,511.3 L472.9,512.5M469.4,511.3 L466.1,524.9 L469.8,527.1 L472.8,525.3 L476.7,514.7 L476.0,512.1M476.0,512.1 L472.9,512.5M476.0,512.1 L477.8,507.7M476.0,512.1 L476.7,514.7 L472.8,525.3 L469.8,527.1 L466.1,524.9 L469.4,511.3M472.9,512.5 L469.4,511.3M472.9,512.5 L476.0,512.1M472.9,512.5 L474.9,506.9 L477.8,507.7M175.1,228.6 L178.7,230.4M175.1,228.6 L170.6,226.3M458.8,638.6 L456.0,639.0M460.7,642.0 L462.4,640.2M458.3,644.4 L456.6,648.1M456.7,626.8 L456.9,629.2M475.4,668.1 L471.7,668.0M475.4,668.1 L480.5,668.2M464.7,618.6 L462.4,617.4M462.4,617.4 L464.7,618.6M456.0,639.0 L458.8,638.6M455.6,652.2 L455.2,654.6M474.2,643.2 L476.1,644.6M476.1,644.6 L474.2,643.2M474.7,650.0 L471.6,649.6M471.6,649.6 L474.7,650.0M455.2,654.6 L455.6,652.2M497.1,664.5 L494.2,666.0M485.0,637.8 L487.1,639.9M487.1,639.9 L485.0,637.8M485.6,648.6 L488.7,647.0M453.0,670.4 L452.8,674.0M452.8,674.0 L453.0,670.4M452.8,674.0 L459.0,686.2M65.6,252.2 L67.6,254.9M65.6,252.2 L56.7,240.1M501.0,538.6 L498.0,538.0M498.0,538.0 L501.0,538.6M223.6,263.5 L234.0,262.8M295.6,218.3 L297.2,224.2M295.2,218.0 L291.1,214.9M606.0,601.1 L605.0,603.4M605.0,603.4 L606.0,601.1M541.9,579.7 L543.2,582.4M541.9,579.7 L540.8,577.2M289.2,208.3 L287.1,210.2 L287.5,212.1M-214.8,294.5 L-217.1,294.0M-214.8,294.5 L-211.6,294.2M-211.6,294.2 L-209.1,293.8M-211.6,294.2 L-214.8,294.5M478.4,683.1 L488.8,684.1M495.9,695.6 L498.4,694.9M498.4,694.9 L495.9,695.6M503.7,693.0 L506.4,691.6M506.4,691.6 L508.6,690.4M506.4,691.6 L503.7,693.0M508.6,690.4 L506.4,691.6M456.8,722.0 L453.5,724.2M451.4,722.0 L451.8,716.2M451.8,716.2 L451.4,713.8M451.8,716.2 L451.4,722.0M450.6,709.2 L450.1,705.9 L448.2,705.1M448.2,705.1 L450.1,705.9 L450.6,709.2M446.9,665.4 L443.9,664.8M446.9,665.4 L449.4,665.8M443.9,664.8 L440.4,664.3M443.9,664.8 L446.9,665.4M490.8,220.7 L493.0,222.7M490.8,220.7 L488.2,219.3 L488.7,222.2M488.7,222.2 L490.0,224.7M488.7,222.2 L488.2,219.3 L490.8,220.7M489.6,390.8 L490.9,386.4M489.6,390.8 L488.2,395.9M490.9,386.4 L489.6,390.8M498.8,352.5 L490.9,355.7 L488.5,350.2 L490.9,349.1M498.8,352.5 L498.0,350.1M509.8,351.5 L514.0,349.8M502.7,390.1 L509.7,391.9M464.4,486.8 L466.7,488.2 L465.4,490.4M465.4,490.4 L466.7,488.2 L464.4,486.8M480.9,606.5 L479.2,609.0M479.2,609.0 L480.9,606.5M497.9,549.4 L495.5,549.2M168.3,203.6 L165.5,202.5M85.2,94.3 L82.2,95.7M104.0,257.9 L108.5,254.6M108.5,254.6 L112.2,251.5M108.5,254.6 L104.0,257.9M157.7,75.7 L160.0,76.7 L162.5,80.7 L161.2,84.0 L158.5,86.5 L158.0,90.7 L160.7,101.1M185.3,234.0 L182.3,232.4M185.3,234.0 L189.0,235.8M184.5,235.0 L188.3,237.0M184.5,235.0 L181.7,233.6M258.3,240.7 L256.6,244.9M287.5,212.1 L291.1,214.9M287.5,212.1 L287.1,210.2 L289.2,208.3M291.1,214.9 L295.2,218.0M291.1,214.9 L287.5,212.1M446.5,243.7 L444.6,241.4M481.5,246.8 L487.0,247.4M-173.1,210.6 L-173.1,206.3M509.7,391.9 L502.7,390.1M553.5,351.1 L548.3,344.0M560.8,345.6 L556.2,339.1"/><path class="sh sh-before" data-ly="before" d="M30.8,190.6 L31.6,188.0 L30.1,185.7 L31.6,181.1 L32.6,180.3 L56.6,187.4 L57.5,186.7 L58.1,180.6 L59.8,180.3 L61.7,182.0 L62.9,180.6 L64.9,179.9 L65.0,176.4 L66.9,174.6 L66.1,171.6 L64.1,169.8 L66.3,167.0 L65.5,165.1 L64.9,159.6 L65.6,157.8 L65.1,154.5 L66.4,151.9 L65.6,144.3 L64.1,140.9 L59.1,139.7 L58.9,142.0 L61.0,147.3 L59.7,149.9 L56.9,150.0 L56.3,148.4 L57.6,146.5 L55.5,140.1 L56.4,136.9 L57.9,136.3 L61.4,136.7 L66.3,138.6 L67.8,141.0 L68.9,147.0 L69.6,147.6 L71.9,146.5 L73.9,147.2 L81.1,144.4 L83.0,144.9 L88.1,144.4 L94.0,142.6 L93.9,139.7 L91.7,139.4 L90.8,138.5 L89.9,131.8 L91.7,130.5 L92.1,128.8 L93.5,127.8 L94.5,125.7 L93.2,123.6 L93.5,
38138122.2 L99.0,121.0 L102.0,118.6 L100.2,116.3 L95.4,118.2 L91.9,116.9 L92.5,114.8 L95.1,115.1 L98.2,113.6 L96.7,110.3 L90.3,111.2 L86.4,109.5 L86.3,108.1 L87.3,107.2 L90.7,108.0 L94.1,107.4 L94.6,106.6 L88.9,95.0 L85.8,94.1 L86.3,92.1 L89.0,90.8 L90.4,91.2 L96.9,103.6 L103.3,99.8 L102.6,95.8 L103.7,94.9 L105.2,95.5 L107.6,100.2 L107.8,102.4 L110.1,103.1 L111.6,105.4 L111.3,108.0 L113.8,111.4 L115.9,111.4 L116.8,112.3 L116.6,113.7 L112.6,116.8 L112.5,117.7 L116.9,124.6 L120.3,123.6 L122.9,125.9 L122.6,128.8 L121.8,130.0 L119.8,131.2 L117.9,130.8 L115.1,131.7 L119.4,136.7 L125.0,134.3 L125.1,127.6 L127.1,125.3 L129.4,124.6 L131.2,126.9 L134.6,126.0 L133.8,124.1 L134.2,122.4 L133.0,120.5 L130.4,110.7 L131.1,107.3 L136.3,105.4 L135.2,99.6 L136.3,97.9 L140.2,96.7 L141.5,97.2 L141.7,101.9 L145.4,102.2 L146.5,103.1 L150.9,119.2 L151.8,119.5 L155.4,118.2 L146.9,85.2 L148.1,83.5 L154.5,81.6 L155.8,82.6 L155.6,84.0 L150.7,85.9 L150.4,87.1 L151.3,87.7 L156.8,86.7 L160.9,81.2 L159.2,78.1 L156.4,76.5 L156.8,74.5 L158.1,74.2 L161.0,75.5 L164.0,80.4 L163.6,83.0 L160.0,87.0 L159.6,90.2 L161.9,98.7 L167.4,97.2 L166.8,91.5 L170.8,88.8 L168.8,87.1 L168.6,85.7 L173.0,83.8 L174.1,84.6 L174.6,86.7 L176.9,86.7 L178.4,88.6 L181.4,89.3 L183.3,90.6 L184.1,93.2 L186.6,95.9 L187.0,98.7 L190.0,102.0 L192.3,103.0 L193.0,102.1 L191.1,95.6 L193.9,90.2 L195.2,90.1 L200.7,92.9 L202.7,90.7 L204.2,90.2 L206.1,90.8 L208.1,93.2 L210.1,92.9 L210.6,92.1 L206.2,81.3 L201.0,77.1 L197.4,76.3 L195.8,73.1 L192.9,74.0 L191.6,73.4 L191.4,71.8 L193.3,70.0 L191.6,67.6 L191.8,66.0 L193.5,65.5 L196.2,67.2 L199.7,73.7 L202.7,74.5 L205.3,76.7 L207.6,71.1 L211.4,65.5 L215.7,60.6 L217.8,60.8 L218.0,62.6 L211.1,71.5 L213.9,74.0 L214.0,75.7 L212.6,76.5 L209.8,75.3 L208.9,77.1 L208.9,79.6 L213.3,90.4 L214.5,91.4 L220.8,88.7 L222.6,86.9 L222.4,86.0 L218.6,82.7 L219.0,80.7 L220.7,80.5 L225.1,83.9 L227.9,79.6 L227.9,76.5 L224.5,69.5 L223.6,64.7 L224.9,60.2 L226.4,59.2 L227.9,60.5 L226.8,64.7 L227.4,68.3 L228.5,70.0 L233.7,68.0 L235.3,66.4 L237.2,67.5 L235.9,70.3 L230.3,73.2 L231.2,78.4 L236.8,79.3 L241.5,77.7 L242.6,78.4 L242.9,79.5 L242.1,80.6 L237.4,82.3 L230.5,81.8 L222.8,91.2 L215.8,94.2 L215.6,95.1 L218.4,101.3 L223.2,100.3 L226.9,101.2 L230.8,104.2 L255.6,98.0 L257.1,96.6 L262.2,95.5 L262.6,94.0 L260.1,88.5 L261.4,86.9 L262.9,87.5 L266.2,94.3 L267.1,94.7 L268.6,94.0 L269.3,92.4 L269.6,83.9 L273.7,82.5 L276.2,83.9 L276.6,89.3 L278.1,94.8 L277.0,95.9 L275.1,95.6 L272.2,96.3 L269.8,98.1 L271.7,107.1 L271.4,108.3 L270.3,108.8 L269.1,108.3 L267.7,104.6 L265.4,105.1 L261.5,103.5 L260.6,104.7 L260.7,107.9 L259.3,108.9 L257.9,108.8 L255.7,105.7 L256.5,103.0 L255.8,102.2 L249.1,104.1 L248.7,105.0 L250.1,111.9 L249.7,114.7 L251.7,116.2 L251.9,117.6 L250.7,118.6 L248.0,118.1 L242.0,122.5 L241.8,123.4 L244.0,126.1 L247.3,127.9 L255.2,128.6 L255.9,128.1 L256.5,125.6 L262.1,122.3 L265.7,126.4 L268.7,126.4 L270.3,127.9 L278.0,128.5 L281.6,132.9 L284.2,138.4 L284.7,142.4 L283.8,145.9 L280.7,151.7 L278.6,160.4 L278.4,164.6 L281.4,170.9 L286.3,178.3 L291.2,203.0 L294.5,207.7 L298.7,211.8 L299.6,211.6 L300.0,209.6 L301.3,208.9 L302.5,209.4 L303.5,211.6 L309.7,211.5 L310.2,212.9 L309.3,214.7 L311.8,221.4 L312.8,221.0 L316.8,212.1 L318.0,211.5 L319.2,212.1 L319.5,213.6 L314.5,224.4 L317.1,226.4 L316.2,229.3 L316.7,230.1 L318.4,229.8 L324.4,216.2 L322.3,214.1 L322.6,212.3 L325.8,212.3 L327.8,209.6 L329.6,210.8 L321.7,229.7 L322.1,230.6 L324.4,231.2 L333.0,211.4 L334.5,210.9 L335.7,211.9 L333.5,218.6 L336.2,220.1 L341.6,207.4 L341.6,204.0 L348.1,201.8 L349.6,202.6 L349.7,204.8 L345.2,206.9 L342.4,215.7 L346.4,217.2 L346.9,219.3 L348.6,220.5 L348.5,222.5 L349.2,223.2 L353.1,223.2 L354.7,219.1 L357.2,217.9 L365.3,219.7 L366.7,222.0 L365.2,228.1 L365.6,229.7 L370.2,229.2 L373.0,217.6 L372.5,216.7 L370.1,216.1 L367.4,216.3 L366.8,215.0 L367.4,213.1 L368.6,212.6 L373.6,213.6 L374.9,209.8 L375.9,208.9 L379.2,208.8 L381.3,211.0 L383.7,209.4 L388.4,212.5 L388.1,215.7 L392.0,218.3 L393.8,216.9 L395.3,217.0 L398.1,219.2 L397.7,222.2 L402.4,225.4 L404.4,224.0 L405.8,224.2 L406.5,225.3 L406.0,227.9 L413.1,232.7 L414.1,232.2 L416.5,221.4 L417.8,220.5 L419.5,221.9 L418.5,228.2 L428.5,230.6 L429.7,233.8 L436.0,235.3 L437.5,232.9 L441.4,233.3 L442.8,230.5 L445.8,230.3 L447.2,232.2 L445.6,234.1 L445.0,238.5 L447.1,241.2 L449.1,239.7 L450.4,239.8 L451.9,242.4 L453.6,242.4 L455.8,239.6 L460.4,238.5 L463.4,236.7 L464.8,237.4 L465.0,240.2 L467.3,241.1 L468.3,243.9 L469.5,243.8 L470.2,241.6 L472.3,241.1 L473.4,239.5 L477.6,239.0 L47
381387.9,236.7 L469.5,230.0 L469.4,228.5 L470.8,227.7 L486.8,239.8 L487.7,239.9 L488.9,236.1 L484.4,227.0 L485.3,225.4 L487.6,226.0 L488.4,225.4 L486.4,220.8 L486.4,219.2 L487.5,217.9 L489.3,217.7 L493.8,220.6 L495.0,218.3 L495.3,215.2 L496.4,214.3 L497.7,214.6 L505.7,221.4 L507.4,221.8 L508.3,223.5 L511.4,225.8 L512.7,224.6 L512.8,222.9 L509.9,220.0 L509.6,218.7 L513.9,213.6 L515.6,213.7 L522.9,219.5 L529.3,212.8 L531.4,212.5 L533.6,210.0 L535.6,209.6 L539.4,212.4 L540.0,215.4 L543.5,213.8 L547.6,216.9 L549.9,216.9 L561.8,227.1 L563.1,226.6 L564.1,224.3 L566.9,224.3 L567.4,226.3 L561.3,233.5 L561.4,234.8 L565.3,238.2 L565.3,239.8 L563.9,240.5 L562.0,239.5 L560.3,240.0 L558.5,239.4 L557.5,241.9 L567.0,250.4 L567.3,252.1 L565.6,253.5 L563.1,252.6 L562.1,254.9 L561.0,255.5 L557.2,252.5 L554.6,255.5 L555.1,256.3 L556.9,256.6 L557.9,258.0 L559.7,258.0 L560.6,258.8 L560.7,260.1 L558.6,264.1 L563.9,269.0 L563.0,272.7 L564.8,275.1 L564.2,276.3 L560.2,279.2 L555.4,275.0 L554.5,275.0 L554.0,276.2 L555.4,277.0 L555.7,278.7 L552.8,280.8 L553.4,282.4 L555.6,282.3 L557.3,283.4 L558.5,286.2 L558.0,287.8 L556.0,289.2 L556.3,294.2 L555.4,296.7 L557.7,318.5 L558.9,322.6 L559.6,323.8 L562.8,325.5 L564.9,323.5 L561.8,319.0 L562.3,317.1 L564.1,317.1 L568.0,321.5 L572.0,318.4 L570.3,315.3 L570.8,313.7 L574.1,313.6 L575.9,315.6 L578.5,313.8 L578.8,311.4 L576.5,308.4 L576.5,307.0 L577.7,306.2 L580.0,306.3 L579.7,304.1 L580.5,300.4 L584.3,296.8 L584.9,295.2 L587.2,293.6 L588.4,293.4 L590.1,294.5 L593.9,292.8 L598.7,298.4 L603.8,294.8 L605.1,294.7 L606.0,295.7 L605.8,297.5 L606.9,300.0 L605.2,301.2 L602.8,299.5 L600.9,300.9 L602.6,304.4 L602.2,305.8 L600.4,306.1 L597.6,303.4 L591.6,308.3 L611.6,335.2 L611.7,336.5 L610.3,338.1 L610.9,340.2 L609.5,341.3 L607.1,340.2 L603.7,342.8 L601.1,341.9 L599.0,343.3 L595.3,340.4 L593.5,342.3 L591.4,342.6 L584.8,347.5 L579.2,352.0 L584.0,358.8 L583.3,360.9 L581.8,360.8 L579.5,358.7 L572.6,363.1 L568.8,359.6 L562.2,364.0 L558.7,361.4 L547.5,369.6 L547.8,370.8 L552.3,372.6 L555.8,371.4 L561.6,373.9 L564.4,376.8 L567.1,377.0 L568.1,379.7 L569.2,379.4 L570.5,376.5 L573.4,373.7 L573.4,371.7 L574.4,370.7 L576.0,371.1 L578.5,374.6 L581.8,375.7 L581.9,377.9 L578.2,378.2 L576.6,380.0 L577.2,382.9 L573.0,386.3 L574.2,390.5 L573.5,391.9 L571.4,391.6 L569.2,386.3 L560.6,383.6 L559.8,381.8 L560.2,379.1 L555.3,377.0 L553.9,379.2 L555.9,385.4 L559.0,386.2 L559.5,388.1 L558.3,388.9 L553.9,388.7 L551.3,390.0 L549.1,389.7 L547.3,386.5 L548.0,384.8 L551.3,382.6 L550.8,378.8 L551.5,375.9 L549.0,375.2 L547.4,379.7 L547.5,382.4 L546.5,383.2 L545.3,383.0 L544.3,379.5 L546.1,373.7 L543.5,371.5 L542.7,371.9 L542.3,373.8 L538.9,377.0 L536.7,385.1 L535.0,386.3 L534.6,387.6 L546.1,393.7 L546.7,394.7 L546.3,396.0 L544.6,396.3 L534.7,391.5 L531.6,391.6 L526.7,388.8 L525.7,389.0 L525.7,391.0 L542.6,399.6 L549.4,397.0 L552.7,397.7 L557.9,394.9 L561.6,393.9 L563.4,394.7 L562.8,396.7 L557.4,398.4 L554.0,401.0 L554.1,405.6 L551.9,407.8 L554.0,410.8 L555.0,414.4 L554.3,416.9 L551.9,419.1 L549.5,419.3 L542.1,415.0 L541.9,413.6 L544.2,410.1 L544.8,406.2 L543.2,404.5 L542.2,404.6 L541.2,406.4 L541.8,408.2 L541.3,409.4 L540.2,409.8 L538.4,409.2 L537.5,410.4 L538.7,412.6 L538.6,416.4 L555.4,425.8 L556.1,427.1 L555.2,428.5 L550.6,427.0 L550.3,429.8 L548.8,430.6 L543.0,427.6 L540.5,425.2 L540.6,421.1 L537.6,419.5 L535.2,420.2 L533.8,418.8 L535.0,416.5 L535.3,413.7 L526.8,411.2 L525.8,412.0 L527.0,413.7 L527.0,415.8 L532.1,417.6 L533.1,418.8 L532.2,420.0 L530.9,420.4 L524.9,418.7 L522.9,417.0 L521.1,418.3 L517.9,417.8 L517.0,419.9 L517.5,421.1 L525.2,425.1 L527.9,425.5 L531.3,424.3 L535.0,426.2 L536.8,433.3 L535.4,434.1 L533.3,433.2 L529.7,435.5 L529.2,436.6 L535.4,440.0 L539.0,443.2 L543.8,442.0 L549.5,442.0 L551.4,441.2 L552.7,441.9 L552.8,443.2 L550.8,445.0 L544.3,445.0 L535.6,448.5 L531.2,449.3 L510.6,443.7 L509.1,447.7 L512.5,449.2 L513.0,450.9 L511.7,451.9 L508.2,451.2 L507.2,453.5 L507.8,454.3 L512.7,455.5 L519.6,451.9 L521.5,452.8 L521.1,454.5 L515.9,457.8 L510.6,458.7 L509.1,462.2 L509.6,463.3 L512.1,463.0 L513.9,463.6 L515.8,465.8 L516.0,468.4 L514.5,473.3 L515.5,476.0 L516.6,476.0 L518.9,473.4 L520.7,472.8 L525.9,473.6 L530.8,478.3 L531.5,48
381380.0 L534.5,481.3 L536.7,480.5 L538.1,480.9 L539.4,483.0 L541.5,484.4 L542.3,484.0 L542.7,482.1 L543.8,481.6 L546.8,484.1 L548.6,484.7 L549.4,484.2 L549.7,480.9 L544.3,478.3 L544.3,476.8 L545.3,476.0 L550.7,477.9 L561.8,479.5 L562.9,480.9 L561.7,482.5 L553.2,481.6 L552.6,485.8 L562.2,488.4 L565.6,491.2 L569.8,492.0 L570.7,491.6 L574.3,484.6 L575.5,484.2 L576.6,484.9 L575.9,488.1 L568.7,501.8 L550.9,524.7 L546.7,531.2 L548.1,534.9 L547.4,537.6 L548.7,538.7 L553.8,534.5 L565.1,521.2 L574.4,528.6 L574.4,530.5 L572.6,531.0 L565.6,525.3 L562.6,528.6 L576.9,542.6 L576.5,543.8 L567.4,554.2 L565.1,555.2 L566.6,557.8 L569.4,558.6 L568.7,561.8 L566.8,562.6 L560.9,560.3 L559.6,558.3 L552.5,553.2 L551.4,555.0 L550.6,560.8 L549.4,563.7 L550.0,567.0 L548.9,567.9 L547.6,567.6 L545.3,564.0 L547.7,559.9 L548.4,554.1 L547.5,551.8 L549.7,549.9 L549.7,548.9 L548.6,547.4 L546.5,547.3 L543.3,544.5 L537.9,543.6 L533.8,539.5 L529.8,538.2 L529.0,537.0 L529.4,534.5 L527.3,532.1 L529.3,529.8 L530.0,526.7 L522.4,521.5 L519.7,525.0 L518.0,525.2 L517.1,523.8 L518.4,520.6 L516.4,519.1 L513.5,522.2 L509.2,520.5 L504.6,526.4 L501.8,527.0 L502.3,528.8 L508.2,533.6 L511.8,532.0 L514.2,533.4 L514.5,534.8 L513.6,535.9 L511.6,535.8 L510.0,537.8 L508.9,538.1 L503.2,533.0 L502.0,533.2 L501.7,535.2 L507.4,540.7 L507.7,542.2 L505.9,543.2 L501.5,540.3 L498.0,539.7 L497.2,545.7 L497.9,546.3 L500.6,546.1 L502.1,548.1 L505.9,548.5 L506.7,550.3 L505.4,551.4 L499.8,551.4 L498.9,552.5 L498.7,555.5 L497.7,557.0 L498.3,560.1 L495.7,563.0 L494.0,563.0 L493.0,559.6 L495.5,520.8 L494.3,521.0 L492.2,525.0 L489.5,525.2 L488.9,527.1 L487.2,542.4 L489.3,552.2 L489.1,554.0 L487.0,554.9 L484.8,553.7 L483.7,541.8 L480.9,541.5 L479.7,542.1 L478.2,547.8 L476.7,547.9 L475.8,546.6 L476.5,541.4 L477.6,539.8 L480.2,538.5 L484.4,538.2 L486.3,524.6 L492.4,515.1 L490.5,512.8 L490.3,510.5 L488.5,510.1 L486.1,514.8 L484.7,516.5 L483.4,516.8 L482.3,514.9 L485.3,509.0 L479.9,507.1 L477.9,511.8 L478.2,515.2 L474.0,526.1 L470.1,528.6 L465.7,527.3 L464.6,524.8 L466.5,518.9 L467.2,512.0 L460.7,504.7 L456.8,501.3 L454.8,501.5 L453.3,500.4 L451.4,500.8 L448.5,499.9 L445.2,496.4 L445.3,495.1 L446.4,494.4 L449.8,495.9 L453.1,491.7 L453.1,490.7 L445.3,486.6 L439.3,481.4 L438.7,479.3 L417.8,462.7 L413.4,462.3 L411.7,461.4 L409.5,462.0 L407.7,460.0 L405.4,460.7 L403.5,462.7 L406.0,465.5 L405.8,467.2 L404.1,467.6 L401.0,465.3 L398.3,468.0 L402.3,472.5 L402.1,476.4 L400.1,476.5 L399.2,473.7 L395.7,470.9 L393.2,473.6 L395.8,477.2 L394.5,479.6 L392.6,479.7 L391.9,477.2 L390.4,476.3 L387.8,478.9 L388.0,480.9 L387.3,482.4 L385.5,483.1 L383.8,482.5 L383.0,480.3 L384.4,477.8 L382.2,475.5 L382.5,473.8 L384.0,473.3 L387.1,475.1 L389.5,472.4 L387.5,469.9 L387.7,468.2 L389.4,467.8 L392.1,469.8 L394.7,467.2 L392.7,464.4 L393.1,462.7 L394.6,462.4 L397.5,464.1 L399.9,461.5 L399.1,459.6 L399.5,458.3 L400.8,457.9 L402.7,458.8 L404.8,457.4 L402.7,451.5 L402.8,449.7 L396.4,444.3 L389.1,434.9 L380.8,436.7 L379.6,436.3 L377.2,430.1 L378.1,427.5 L375.1,425.0 L370.6,426.4 L369.5,427.9 L367.4,428.5 L366.9,437.1 L369.2,438.2 L369.6,439.8 L367.1,441.1 L364.4,440.3 L363.7,438.8 L364.3,426.3 L363.8,424.8 L365.0,385.2 L362.0,381.1 L359.0,382.9 L354.8,383.7 L353.6,383.2 L352.4,380.9 L352.6,379.6 L354.4,378.2 L356.4,378.4 L357.1,377.6 L356.8,376.7 L354.0,375.1 L354.6,372.1 L346.8,363.6 L337.1,354.6 L334.9,356.1 L332.9,355.9 L331.4,357.6 L332.8,360.1 L332.1,361.7 L331.0,361.9 L328.5,360.3 L327.6,360.5 L327.1,362.4 L321.3,369.5 L320.0,369.7 L317.8,367.9 L316.9,368.1 L315.1,370.8 L317.4,373.2 L317.4,374.6 L316.0,375.4 L313.9,374.7 L311.8,377.0 L312.7,379.6 L311.8,381.1 L310.0,381.1 L308.0,379.1 L306.9,379.5 L306.9,380.7 L309.5,381.8 L310.4,384.1 L307.9,385.5 L303.3,391.0 L299.1,388.6 L298.8,386.8 L296.8,384.1 L296.9,381.6 L295.9,379.6 L297.0,378.4 L303.7,377.3 L303.7,376.3 L300.9,373.6 L301.4,371.9 L303.0,371.7 L306.2,373.8 L310.3,369.3 L312.6,368.8 L314.6,366.0 L312.9,362.5 L316.7,357.7 L316.8,355.2 L318.1,352.7 L311.8,347.3 L306.7,352.8 L307.7,355.2 L310.1,355.9 L310.3,357.6 L299.6,370.3 L297.5,370.6 L291.2,365.3 L288.1,364.7 L284.5,361.9 L278.3,368.8 L278.4,369.9 L281.5,372.4 L286.3,373.2 L287.4,374.1 L287.9,379.1 L286.9,380.4 L284.2,379.4 L284.1,376.0 L280.5,375.4 L277.0,373.0 L276.2,373.7 L276.5,375.1 L281.1,379.0 L281.0,381.0 L279.1,381.3 L272.8,376.1 L263.3,385.6 L261.2,385.6 L259.0,384.6 L256.5,382.0 L256.3,379.6 L253.9,377.2 L249.7,380.0 L243.9,381.4 L237.2,377.6 L230.3,371.3 L228.8,368.7 L229.0,367.2 L231.8,363.7 L230.4,359.8 L233.5,352.7 L234.2,348.6 L238.1,347.2 L256.5,352.9 L262.2,348.8 L264.2,348.4 L265.6,346.6 L261.5,341.9 L261.9,340.7 L264.1,340.1 L264.4,339.0 L260.4,336.6 L258.3,336.2 L256.4,337.6 L254.0,337.0 L252.4,334.8 L251.0,334.4 L248.6,335.4 L245.7,334.2 L244.8,332.2 L241.0,330.7 L240.2,331.2 L238.7,336.1 L237.6,336.7 L236.4,336.2 L236.0,334.9 L237.5,329.5 L237.0,327.6 L238.4,326.1 L240.2,319.7 L241.7,319.2 L243.0,320.3 L241.4,326.8 L241.9,327.7 L245.8,329.1 L247.1,327.3 L248.2,326.9 L257.2,329.0 L257.9,328.3 L257.6,326.6 L245.9,323.7 L245.1,322.9 L245.2,321.6 L246.7,320.8 L256.6,322.8 L256.7,320.0 L265.9,308.2 L274.7,308.3 L276.7,310.4 L279.0,308.9 L281.9,308.5 L284.3,310.2 L286.0,310.0 L289.0,311.2 L290.3,310.8 L290.5,309.8 L284.5,306.8 L280.5,306.1 L255.8,306.4 L253.4,308.4 L252.2,307.7 L251.4,304.9 L244.8,305.0 L235.9,306.3 L218.0,314.1 L213.6,315.3 L207.8,315.7 L194.2,314.8 L188.3,313.6 L185.5,312.5 L182.0,309.7 L177.4,301.3 L175.1,299.0 L169.8,296.6 L166.8,296.2 L165.0,296.9 L163.8,296.1 L164.7,292.2 L167.4,291.5 L168.7,289.8 L173.1,278.0 L169.8,275.1 L171.1,270.8 L170.6,267.7
38138L166.4,266.7 L163.8,265.0 L159.4,260.6 L158.8,257.0 L151.2,262.0 L150.8,263.8 L156.5,266.6 L159.8,270.6 L160.4,274.2 L159.0,280.7 L159.5,283.3 L157.0,284.5 L155.5,282.6 L153.4,282.1 L149.6,284.5 L147.9,284.1 L146.1,280.9 L146.4,277.1 L142.8,275.7 L142.1,274.4 L146.0,267.1 L147.5,266.0 L147.6,264.0 L146.7,262.3 L142.0,259.8 L138.7,255.9 L135.4,254.9 L135.2,252.6 L136.7,250.9 L137.3,243.7 L135.6,240.8 L134.6,240.7 L133.2,242.7 L130.7,244.0 L128.0,242.8 L125.0,244.2 L114.9,251.9 L114.0,253.8 L111.5,254.7 L110.5,257.5 L105.5,255.9 L104.3,254.4 L104.3,252.5 L105.4,251.7 L107.2,251.9 L108.8,250.1 L107.7,248.5 L107.6,246.8 L105.1,243.6 L105.9,240.9 L107.3,239.9 L109.4,240.0 L116.0,244.2 L120.2,240.2 L114.7,234.5 L114.8,233.2 L116.7,230.9 L118.4,230.6 L121.1,232.8 L125.0,234.1 L125.8,233.3 L124.2,231.1 L124.8,229.5 L126.4,229.4 L128.8,231.3 L130.0,230.4 L130.1,227.6 L128.6,226.4 L126.9,226.7 L124.5,225.5 L119.8,221.3 L117.3,216.2 L117.7,214.7 L120.4,213.3 L122.5,213.6 L124.9,212.3 L132.1,217.7 L137.5,211.3 L136.9,208.7 L138.1,207.0 L153.9,202.6 L159.7,204.7 L162.2,202.9 L161.6,201.2 L150.3,196.1 L145.9,196.5 L142.2,195.0 L140.5,197.1 L140.8,199.3 L139.6,200.8 L136.1,200.4 L134.6,199.5 L130.2,199.6 L126.4,197.6 L125.0,192.3 L122.3,193.1 L120.8,192.4 L119.5,190.3 L119.3,186.8 L118.5,186.3 L114.2,187.6 L114.9,192.3 L112.6,196.6 L114.2,198.3 L114.5,201.0 L114.2,202.9 L112.8,204.4 L93.0,210.4 L84.2,211.4 L78.1,210.2 L74.9,208.0 L73.4,205.1 L71.9,199.3 L70.3,198.3 L68.1,200.6 L64.2,198.8 L60.7,200.8 L57.9,199.8 L57.5,196.8 L54.7,196.2 L52.6,201.4 L51.0,202.4 L41.7,201.1 L40.0,198.6 L38.7,198.1 L37.0,200.6 L35.4,200.9 L34.1,198.7 L32.0,198.8 L31.1,198.0 L32.6,193.5 L30.8,190.6ZM604.2,338.6 L607.7,335.6 L605.5,332.5 L601.0,335.6 L603.0,338.6 L604.2,338.6ZM593.3,323.9 L592.9,325.2 L598.5,332.8 L603.2,329.9 L603.1,329.0 L597.4,321.5 L593.3,323.9ZM591.1,338.0 L592.1,338.2 L596.0,334.8 L589.6,326.8 L585.4,330.4 L591.1,338.0ZM584.7,313.0 L588.5,319.0 L591.2,317.8 L593.8,319.4 L595.0,318.7 L588.9,310.3 L584.7,313.0ZM588.3,304.1 L589.6,304.5 L591.0,301.9 L593.2,302.6 L594.4,301.8 L594.1,300.7 L592.3,299.7 L591.5,297.9 L590.0,298.5 L589.6,300.6 L587.5,302.4 L588.3,304.1ZM578.4,335.0 L578.2,336.0 L583.9,343.7 L588.6,340.7 L588.6,339.8 L582.9,332.3 L578.4,335.0ZM577.2,318.7 L580.5,323.7 L583.9,322.3 L585.1,322.9 L585.8,325.1 L587.7,324.0 L584.3,318.7 L582.0,318.4 L580.7,316.5 L577.2,318.7ZM571.5,340.8 L571.4,341.8 L576.8,349.0 L581.3,346.2 L575.9,338.1 L571.5,340.8ZM580.1,329.9 L580.4,329.0 L579.2,327.4 L575.4,328.7 L574.5,327.8 L574.4,325.6 L572.5,325.2 L571.3,323.5 L570.0,324.1 L570.1,325.0 L575.7,332.5 L580.1,329.9ZM561.0,531.8 L559.9,531.9 L557.5,535.7 L569.1,546.2 L570.1,546.3 L572.7,543.4 L572.7,542.5 L561.0,531.8ZM568.3,333.9 L568.0,336.4 L569.3,337.3 L572.6,334.4 L566.4,326.8 L562.8,329.9 L564.3,332.0 L566.9,332.2 L568.3,333.9ZM552.5,539.9 L550.7,541.9 L555.1,548.3 L559.7,552.9 L564.7,555.0 L564.8,552.6 L567.2,549.6 L567.2,548.7 L555.6,538.1 L552.5,539.9ZM551.5,490.9 L562.8,500.4 L563.7,500.1 L566.6,495.4 L566.3,494.5 L564.1,493.9 L560.9,491.3 L552.2,489.2 L551.5,490.9ZM553.1,504.8 L552.7,506.3 L556.2,509.0 L561.0,503.3 L557.4,500.2 L553.1,504.8ZM551.2,343.9 L550.9,345.1 L553.8,348.6 L558.4,345.2 L555.7,341.4 L551.2,343.9ZM554.3,336.3 L555.4,336.7 L556.9,335.3 L554.5,332.7 L553.3,333.6 L554.3,336.3ZM546.8,501.3 L549.4,500.0 L552.2,501.1 L554.8,497.5 L551.6,494.6 L550.3,494.4 L546.3,500.0 L546.8,501.3ZM390.1,304.7 L385.2,319.5 L387.5,320.3 L388.1,321.5 L386.4,325.8 L390.6,329.2 L392.9,324.9 L397.0,324.9 L397.4,326.3 L396.1,333.6 L397.3,334.7 L403.5,336.1 L408.8,331.8 L414.4,332.0 L415.1,329.8 L416.6,329.2 L417.8,330.1 L418.1,333.6 L431.4,338.0 L431.8,339.1 L431.2,340.3 L427.8,340.9 L423.9,351.6 L427.0,353.9 L426.1,357.2 L430.2,360.1 L434.4,356.7 L441.1,360.4 L445.3,357.5 L449.1,356.7 L452.9,354.6 L451.9,350.7 L453.5,348.7 L456.0,349.3 L459.8,356.6 L461.5,356.3 L464.3,353.8 L464.5,351.7 L465.6,350.4 L467.2,349.9 L468.8,350.5 L469.3,354.7 L465.6,356.7 L461.1,362.4 L462.7,364.7 L460.9,366.9 L461.2,368.3 L466.4,370.5 L467.2,371.5 L466.2,375.3 L464.8,376.7 L465.4,379.1 L464.3,380.2 L460.1,380.0 L459.3,381.4 L460.9,386.0 L468.5,389.0 L470.0,391.2 L469.9,393.0 L468.3,395.3 L464.7,397.4 L463.3,399.1 L460.5,400.2 L462.0,402.9 L464.1,403.2 L465.6,401.5 L467.3,400.9 L467.8,398.2 L471.6,397.3 L472.3,394.5 L475.6,393.4 L474.3,388.8 L473.9,383.8 L476.0,369.1 L477.2,368.5 L479.5,369.2 L480.1,370.2 L479.9,373.0 L485.3,376.4 L486.2,376.1 L487.2,373.4 L490.2,374.4 L491.0,373.7 L482.0,366.1 L481.3,362.7 L484.3,357.1 L482.2,352.1 L481.4,351.7 L478.6,352.7 L477.2,351.4 L477.8,350.0 L482.7,347.3 L480.5,344.3 L481.2,342.5 L482.8,342.5 L486.7,345.7 L495.8,341.6 L493.9,337.6 L489.6,339.0 L488.5,338.7 L487.6,335.4 L481.9,337.5 L480.3,336.8 L480.6,334.8 L486.2,332.1 L484.2,329.9 L482.4,325.4 L482.9,322.8 L484.7,322.7 L486.1,324.7 L488.7,324.1 L495.3,320.3 L497.7,316.5 L499.5,315.1 L501.4,314.5 L503.9,315.2 L505.7,318.0 L503.6,320.7 L505.8,321.7 L506.2,323.2 L500.8,326.4 L502.0,329.3 L499.7,331.6 L503.2,334.0 L504.4,335.8 L506.4,336.1 L510.4,334.5 L510.1,332.2 L510.8,331.1 L524.0,324.4 L525.5,324.6 L526.8,326.5 L528.0,326.2 L527.7,322.8 L528.8,321.8 L531.4,322.0 L530.7,318.5 L531.8,317.1 L533.1,317.3 L534.6,319.2 L539.2,317.6 L541.8,320.7 L543.4,319.2 L543.4,316.4 L545.1,315.9 L550.1,325.2 L553.0,323.5 L552.1,320.8 L553.8,318.8 L551.3,298.4 L539.1,288.6 L538.0,289.7 L538.6,295.3 L536.4,298.5 L539.3,301.5 L538.6,303.5 L537.0,303.4 L524.5,293.2 L523.4,294.3 L526.4,297.3 L526.1,299.3 L524.8,299.6 L523.1,298.6 L521.3,299.7 L519.4,299.2 L517.2,299.7 L516.2,298.4 L516.9,295.6 L514.3,293.8 L511.9,295.0 L510.5,293.6 L516.9,285.1 L515.0,282.7 L513.9,282.8 L506.3,291.5 L505.0,291.7 L503.9,290.9 L504.1,289.3 L509.6,282.9 L507.3,280.4 L501.9,286.0 L497.5,284.7 L495.3,288.5 L493.6,289.7 L493.4,291.5 L492.6,292.3 L491.4,292.2 L488.6,290.2 L486.6,287.5 L485.5,287.7 L483.6,290.9 L483.7,291.8 L492.9,297.3 L495.3,294.7 L497.0,294.8 L497.6,296.2 L496.4,299.1 L498.5,301.6 L497.9,302.8 L496.4,303.0 L481.5,294.6 L480.0,298.1 L487.9,302.8 L488.6,303.8 L488.1,305.2 L486.7,305.6 L478.6,300.9 L477.5,301.2 L476.8,303.5 L484.5,308.2 L484.6,309.7 L483.4,310.5 L472.7,304.3 L472.8,303.0 L478.7,293.1 L476.4,291.0 L475.5,291.4 L467.1,305.0 L465.7,305.5 L464.6,304.7 L464.6,303.3 L472.9,289.6 L472.6,288.6 L469.0,287.2 L455.9,309.0 L456.5,310.3 L461.3,311.8 L463.3,315.4 L463.0,319.2 L460.9,320.8 L461.1,323.0 L460.1,324.1 L458.7,323.8 L456.9,321.6 L446.4,325.6 L440.3,326.0 L437.0,325.2 L429.7,321.9 L421.2,314.7 L418.8,315.0 L413.4,313.0 L410.5,313.6 L409.6,312.4 L410.2,311.0 L414.7,310.0 L415.3,309.2 L410.5,298.0 L408.0,294.6 L405.1,295.8 L402.5,294.0 L401.0,295.0 L400.7,297.5 L399.0,297.9 L397.2,295.4 L397.2,293.4 L396.5,292.8 L393.1,296.9 L391.9,300.4 L394.6,303.4 L398.7,299.8 L400.2,299.6 L401.4,300.7 L401.5,303.1 L395.7,309.7 L394.4,309.2 L391.3,304.8 L390.1,304.7ZM541.1,506.2 L540.5,508.1 L547.8,515.1 L548.8,519.5 L550.1,519.7 L552.3,516.9 L551.6,514.7 L542.0,506.2 L541.1,506.2ZM547.8,414.1 L548.1,415.1 L550.4,416.2 L552.0,414.1 L549.9,411.0 L547.8,414.1ZM549.1,339.6 L550.1,340.0 L551.8,338.6 L549.8,334.4 L547.5,335.7 L549.1,339.6ZM548.5,255.7 L550.9,253.4 L550.3,252.5 L546.5,253.5 L548.5,255.7ZM546.1,401.4 L545.9,402.6 L548.4,404.5 L550.8,404.1 L550.3,400.1 L546.1,401.4ZM547.2,287.5 L546.2,289.7 L549.5,292.4 L550.6,292.3 L549.8,286.6 L547.2,287.5ZM545.8,331.9 L546.8,332.2 L548.7,330.7 L546.8,326.3 L544.5,326.1 L543.8,327.1 L545.8,331.9ZM539.1,232.8 L539.2,233.8 L544.1,237.8 L547.5,234.3 L542.5,229.5 L539.1,232.8ZM537.8,244.2 L533.8,239.3 L531.9,241.1 L542.0,250.3 L544.7,249.9 L544.5,247.5 L546.6,245.0 L546.4,243.9 L541.4,239.8 L540.4,240.4 L540.8,243.3 L539.5,244.5 L537.8,244.2ZM541.8,338.8 L543.8,343.6 L546.5,342.4 L544.5,337.1 L542.0,337.6 L541.8,338.8ZM530.2,497.3 L531.4,501.8 L532.9,503.2 L536.5,499.7 L537.7,499.9 L539.6,501.5 L540.5,500.3 L538.7,498.3 L538.9,496.7 L540.4,496.2 L543.2,497.5 L546.0,494.1 L546.4,492.5 L543.1,490.1 L541.0,491.9 L539.6,491.7 L538.9,490.1 L540.2,487.9 L539.1,487.2 L535.7,490.7 L536.9,492.7 L536.7,494.0 L535.5,494.7 L533.3,494.1 L530.2,497.3ZM542.3,515.7 L543.7,523.6 L544.8,524.1 L546.0,521.5 L545.2,516.8 L543.2,514.9 L542.3,515.7ZM539.6,284.2 L540.7,284.2 L544.4,279.7 L541.1,276.9 L540.9,273.8 L538.4,272.7 L533.4,278.6 L539.6,284.2ZM535.4,323.0 L540.4,334.7 L542.9,333.6 L538.4,322.0 L537.5,321.5 L535.4,323.0ZM539.4,227.7 L539.4,226.6 L535.0,223.0 L531.5,226.8 L536.0,231.0 L539.4,227.7ZM531.3,384.9 L532.3,384.4 L535.0,375.1 L538.7,370.8 L538.3,369.6 L533.3,373.0 L530.4,383.8 L531.3,384.9ZM535.5,262.8 L535.9,263.7 L537.7,264.0 L538.7,262.8 L536.4,261.6 L535.5,262.8ZM536.8,401.9 L537.7,401.4 L537.4,400.4 L532.9,398.1 L531.9,398.4 L531.8,400.5 L536.8,401.9ZM525.7,248.1 L527.3,251.9 L528.6,252.4 L536.4,251.3 L537.0,250.6 L529.7,244.0 L525.7,248.1ZM525.9,332.7 L533.3,350.9 L534.4,351.3 L535.7,350.0 L533.6,346.4 L534.2,342.7 L535.5,341.1 L534.4,338.9 L537.0,336.4 L536.2,335.6 L532.9,336.9 L531.4,336.1 L531.6,334.4 L535.2,332.2 L533.0,327.6 L525.9,332.7ZM520.8,285.7 L527.7,291.0 L531.0,288.0 L534.1,289.1 L536.2,286.2 L530.9,281.6 L527.5,282.6 L524.6,281.0 L520.8,285.7ZM530.0,275.5 L531.1,275.4 L536.0,269.8 L535.9,268.6 L533.4,267.9 L531.3,269.6 L527.1,269.3 L527.0,270.4 L528.7,271.8 L528.4,274.1 L530.0,275.5ZM531.3,446.2 L534.7,445.5 L535.5,444.5 L531.1,440.9 L513.2,435.7 L512.3,436.1 L511.2,439.8 L511.6,440.7 L531.3,446.2ZM531.6,530.8 L534.1,532.5 L535.1,531.4 L533.3,529.0 L531.6,530.8ZM527.5,234.1 L525.0,235.1 L525.1,236.1 L529.2,239.1 L533.8,233.6 L529.4,229.9 L527.6,231.7 L527.5,234.1ZM513.7,430.9 L514.0,432.7 L525.4,435.7 L527.7,433.1 L532.4,430.0 L532.7,428.8 L531.4,427.5 L528.4,428.5 L523.7,428.0 L521.8,430.5 L520.4,430.8 L519.3,429.4 L520.3,426.2 L516.2,424.0 L513.7,430.9ZM526.9,223.3 L529.1,224.5 L532.1,221.2 L532.1,220.3 L529.1,218.3 L526.0,221.8 L526.9,223.3ZM529.3,260.6 L531.3,261.9 L531.8,260.4 L529.8,259.8 L529.3,260.6ZM519.0,479.1 L527.9,487.5 L528.8,487.3 L531.0,484.9 L530.9,483.9 L528.4,481.7 L523.5,481.8 L523.5,477.6 L521.8,476.0 L520.8,476.0 L519.3,477.6 L519.0,479.1ZM519.0,355.8 L520.7,358.2 L520.8,361.0 L522.8,361.6 L525.1,356.1 L530.2,356.8 L531.0,355.4 L529.4,351.5
38138L528.5,351.1 L519.3,354.9 L519.0,355.8ZM526.5,362.0 L526.9,362.8 L528.7,363.1 L529.5,360.1 L527.3,359.5 L526.5,362.0ZM527.5,366.3 L522.9,365.5 L522.9,367.0 L527.6,367.8 L527.5,366.3ZM519.4,505.8 L522.7,508.7 L523.8,508.3 L523.9,506.0 L527.7,500.5 L525.3,497.2 L524.3,497.3 L521.8,500.1 L523.3,503.4 L522.2,504.5 L519.8,504.5 L519.4,505.8ZM515.6,347.0 L516.5,351.1 L517.4,351.4 L521.3,349.8 L521.4,347.7 L522.3,346.8 L523.6,346.8 L525.1,348.2 L527.0,347.4 L527.4,346.6 L526.0,343.3 L525.1,343.0 L515.6,347.0ZM523.1,489.5 L524.2,491.8 L526.0,490.6 L525.7,489.7 L517.5,482.3 L516.3,482.3 L515.5,484.3 L519.2,487.0 L520.9,489.2 L523.1,489.5ZM518.2,370.7 L518.7,371.6 L523.3,373.0 L525.4,371.7 L524.9,370.8 L519.4,369.1 L518.2,370.7ZM522.6,383.2 L523.5,382.6 L524.9,376.9 L517.8,374.9 L516.1,381.1 L522.6,383.2ZM518.7,241.5 L519.2,246.4 L522.6,246.8 L524.0,245.0 L522.6,242.5 L524.5,239.6 L521.8,238.0 L518.7,241.5ZM513.6,342.9 L514.6,343.2 L523.7,339.3 L524.0,338.4 L522.5,334.8 L521.6,334.6 L512.0,338.8 L511.8,339.7 L513.6,342.9ZM519.6,230.5 L519.7,231.6 L521.4,232.5 L523.9,229.3 L522.8,228.7 L520.5,229.4 L519.6,230.5ZM523.7,276.4 L523.6,275.3 L521.5,274.2 L517.0,280.2 L519.3,281.6 L523.7,276.4ZM513.3,390.5 L513.8,391.5 L520.3,393.1 L522.2,386.6 L515.3,384.5 L513.3,390.5ZM518.5,293.3 L519.7,293.4 L521.5,291.0 L518.5,288.5 L516.3,291.0 L518.5,293.3ZM519.2,495.6 L517.0,497.4 L517.4,498.2 L519.6,497.8 L519.2,495.6ZM511.6,401.1 L517.7,402.6 L519.3,396.9 L512.5,394.5 L510.6,400.1 L511.6,401.1ZM511.5,279.8 L512.6,279.7 L518.9,272.3 L518.9,271.4 L516.8,269.7 L515.9,269.8 L509.6,277.2 L509.6,278.1 L511.5,279.8ZM508.4,359.6 L509.1,362.0 L509.2,366.3 L515.2,367.8 L517.4,362.0 L515.3,357.1 L513.8,357.6 L515.0,361.4 L513.8,363.5 L512.3,363.7 L510.9,363.0 L510.0,361.9 L510.4,360.2 L509.8,359.2 L508.4,359.6ZM497.8,481.7 L499.1,487.0 L501.1,491.0 L503.6,491.0 L504.7,492.1 L504.6,493.4 L503.2,494.8 L503.7,496.1 L506.7,496.4 L508.9,500.0 L510.7,499.4 L517.4,491.0 L515.7,488.7 L505.9,479.8 L504.6,477.3 L504.6,473.5 L507.9,464.9 L507.6,463.9 L504.7,462.8 L503.8,463.2 L497.8,481.7ZM495.7,413.1 L496.3,414.1 L513.2,418.6 L515.3,411.8 L511.3,410.1 L510.8,408.5 L512.3,407.4 L515.8,408.2 L516.4,407.0 L507.4,404.0 L506.4,404.4 L505.2,409.4 L512.5,412.9 L513.3,415.1 L512.0,416.0 L507.4,414.3 L505.1,415.0 L503.8,413.7 L496.9,411.8 L495.7,413.1ZM514.1,502.8 L516.0,500.9 L515.7,499.5 L512.9,501.7 L513.1,502.7 L514.1,502.8ZM514.0,246.6 L514.7,248.1 L516.0,247.7 L515.5,245.8 L514.0,246.6ZM510.4,354.8 L513.3,353.6 L513.3,352.4 L509.8,353.3 L509.5,354.3 L510.4,354.8ZM508.2,477.8 L511.6,480.7 L513.4,479.2 L511.5,474.4 L513.0,467.5 L512.0,466.1 L510.3,466.8 L507.7,474.2 L508.2,477.8ZM508.9,374.4 L510.0,371.6 L508.3,370.6 L507.6,371.2 L506.1,377.7 L513.0,379.4 L513.2,377.7 L509.9,377.1 L508.9,374.4ZM510.7,264.9 L509.7,268.6 L511.2,269.5 L513.3,266.9 L510.7,264.9ZM510.3,254.4 L512.6,253.8 L512.5,252.6 L511.1,251.5 L509.2,253.1 L510.3,254.4ZM488.5,423.0 L487.4,424.9 L487.6,425.9 L503.7,430.4 L505.0,432.1 L504.7,436.3 L507.9,437.3 L508.8,436.9 L510.1,431.9 L506.4,430.5 L505.8,428.9 L507.1,427.8 L511.1,428.3 L512.5,423.9 L512.1,423.1 L490.4,417.0 L489.0,417.9 L488.5,423.0ZM510.0,244.4 L511.1,244.2 L512.3,241.8 L502.1,232.9 L501.0,232.9 L499.5,234.7 L499.6,235.6 L510.0,244.4ZM508.4,340.6 L500.5,344.0 L501.6,346.4 L506.8,344.8 L508.4,346.0 L507.8,347.6 L503.0,349.6 L503.7,352.1 L505.5,351.7 L508.9,349.3 L511.6,349.0 L508.4,340.6ZM502.9,387.4 L503.3,388.6 L509.5,390.1 L510.4,389.5 L511.4,385.5 L509.1,384.4 L508.2,382.7 L504.9,381.8 L502.9,387.4ZM500.9,398.1 L507.3,399.6 L508.5,396.0 L507.5,393.1 L504.0,392.0 L501.6,392.6 L500.1,397.1 L500.9,398.1ZM505.5,225.4 L502.2,226.1 L501.5,227.7 L506.8,231.8 L508.3,229.1 L506.1,227.5 L505.5,225.4ZM506.8,514.9 L502.2,521.5 L502.7,522.6 L503.6,522.4 L506.4,518.9 L508.2,515.8 L508.0,514.9 L506.8,514.9ZM502.5,442.4 L499.3,444.6 L500.8,447.5 L500.7,451.3 L503.9,452.6 L507.6,440.7 L503.8,439.5 L502.5,442.4ZM499.6,248.2 L499.1,249.5 L503.3,252.9 L507.4,248.7 L503.3,245.0 L499.6,248.2ZM499.9,281.0 L500.2,282.0 L501.3,282.1 L504.4,278.5 L504.3,277.5 L502.3,276.6 L499.9,281.0ZM499.2,268.5 L501.0,270.0 L503.1,270.1 L504.1,268.6 L503.5,263.4 L502.4,263.3 L499.0,267.1 L499.2,268.5ZM475.7,430.9 L472.0,423.6 L473.8,420.8 L472.5,418.0 L465.9,422.1 L465.9,423.0 L47
381387.6,438.9 L478.9,446.9 L482.2,446.6 L483.5,447.6 L483.0,449.3 L476.1,453.3 L481.7,462.2 L482.6,462.5 L483.2,461.8 L481.5,454.3 L483.3,453.0 L484.4,453.9 L486.4,459.9 L489.8,460.5 L497.9,465.4 L499.5,465.6 L500.4,463.1 L498.4,460.9 L498.2,459.6 L500.1,457.8 L502.4,457.7 L502.9,456.3 L498.2,453.4 L497.6,447.6 L495.0,446.8 L492.8,450.4 L490.7,450.4 L490.2,449.0 L491.3,446.3 L488.3,444.7 L486.1,445.2 L484.6,444.4 L484.0,442.7 L485.0,440.1 L480.2,438.4 L479.1,432.0 L475.7,430.9ZM499.0,401.9 L497.7,407.9 L500.9,408.6 L502.5,402.9 L499.0,401.9ZM498.6,321.7 L497.4,322.9 L497.9,323.9 L502.3,321.7 L501.5,320.8 L498.6,321.7ZM498.8,336.5 L497.5,337.2 L498.8,340.1 L502.0,339.1 L501.3,336.9 L498.8,336.5ZM500.8,527.2 L501.9,526.2 L500.1,525.2 L499.4,526.3 L500.8,527.2ZM482.0,428.6 L483.2,436.2 L484.3,436.3 L485.3,434.6 L486.6,434.3 L487.7,435.2 L488.2,437.5 L492.6,438.6 L494.0,436.9 L495.3,436.6 L496.3,437.5 L496.6,439.7 L499.3,440.5 L500.1,440.0 L501.9,433.7 L501.4,432.8 L499.7,432.5 L498.0,433.6 L495.0,432.9 L493.3,430.7 L490.1,431.5 L486.8,430.6 L485.6,428.7 L482.8,427.9 L482.0,428.6ZM493.1,243.8 L497.0,247.3 L500.4,242.7 L496.3,239.3 L493.9,241.7 L493.1,243.8ZM498.4,275.4 L499.4,275.2 L499.9,273.7 L496.6,270.8 L495.7,270.8 L494.7,272.8 L498.4,275.4ZM494.6,232.9 L496.3,233.6 L498.9,230.5 L498.9,229.6 L497.9,228.9 L495.3,229.3 L493.6,231.5 L494.6,232.9ZM493.1,346.9 L492.6,347.9 L493.8,349.7 L498.3,347.5 L496.9,345.0 L493.1,346.9ZM480.1,479.4 L487.7,487.2 L486.6,489.0 L484.1,488.0 L483.3,488.6 L485.2,492.7 L484.2,495.4 L492.6,498.0 L497.4,492.0 L495.6,488.1 L494.9,487.7 L492.7,488.5 L491.5,488.0 L491.3,485.5 L490.0,484.0 L490.0,481.5 L480.9,477.8 L479.7,478.2 L480.1,479.4ZM491.4,278.0 L491.6,278.9 L495.3,281.5 L497.3,279.1 L493.3,275.7 L491.4,278.0ZM494.6,377.8 L496.6,379.1 L497.0,378.3 L495.4,376.8 L494.6,377.8ZM490.9,503.8 L491.2,507.2 L492.8,508.0 L495.0,506.5 L495.6,505.0 L491.5,503.1 L490.9,503.8ZM479.1,408.3 L479.9,409.3 L487.1,411.3 L489.5,407.9 L488.7,405.5 L489.4,402.7 L491.1,401.5 L494.3,401.9 L494.8,400.7 L487.5,398.5 L484.8,406.4 L482.7,407.5 L479.6,407.1 L479.1,408.3ZM490.3,255.0 L491.0,256.1 L494.2,256.0 L494.9,255.2 L493.8,252.8 L491.2,251.8 L490.4,252.4 L490.3,255.0ZM486.5,464.9 L493.3,468.3 L494.8,467.5 L494.1,466.3 L488.6,463.4 L486.7,463.4 L486.5,464.9ZM479.4,378.0 L479.2,380.7 L485.9,385.4 L485.9,387.4 L484.3,389.3 L484.7,394.3 L491.7,396.0 L493.7,388.1 L492.2,387.7 L490.8,391.7 L488.9,392.1 L488.1,390.9 L488.9,387.8 L488.4,384.2 L480.4,377.8 L479.4,378.0ZM490.0,281.5 L488.9,281.7 L488.5,283.3 L492.0,284.4 L492.2,283.3 L490.0,281.5ZM465.7,461.2 L467.6,467.2 L469.8,467.3 L470.2,459.0 L471.5,458.1 L472.8,458.6 L473.0,468.1 L470.6,471.7 L467.7,472.4 L468.0,474.3 L475.8,474.3 L476.6,471.8 L478.1,471.1 L479.2,471.9 L480.0,474.5 L488.4,477.4 L490.0,476.4 L489.7,475.2 L482.8,472.0 L482.8,470.0 L485.3,469.6 L485.7,468.4 L483.5,466.4 L480.7,466.2 L473.3,455.1 L467.5,458.1 L467.2,459.8 L465.7,461.2ZM483.9,501.9 L484.6,503.3 L486.7,503.9 L488.6,502.6 L488.1,501.7 L484.8,500.6 L483.9,501.9ZM483.6,261.5 L483.8,271.7 L484.7,272.5 L488.5,266.4 L487.7,263.5 L484.8,260.9 L483.6,261.5ZM480.7,244.0 L481.4,244.8 L486.3,245.4 L487.2,244.6 L481.8,240.0 L481.0,240.6 L480.7,244.0ZM484.4,278.2 L480.7,279.6 L480.7,280.6 L484.3,282.7 L486.4,279.8 L484.4,278.2ZM476.7,418.9 L476.5,425.9 L478.1,428.3 L479.9,424.7 L484.2,424.5 L485.5,422.0 L485.3,419.5 L486.2,416.2 L480.3,414.1 L477.4,414.2 L475.2,415.9 L476.7,418.9ZM480.3,257.0 L481.3,257.9 L483.3,256.4 L485.4,250.1 L485.1,249.2 L480.5,249.4 L480.3,257.0ZM471.2,284.1 L480.5,289.6 L482.7,285.8 L473.3,280.3 L471.2,284.1ZM478.1,401.6 L481.6,403.1 L482.7,399.7 L481.8,399.2 L478.4,400.2 L478.1,401.6ZM478.5,270.7 L479.3,271.5 L480.2,271.0 L480.4,267.3 L479.9,266.6 L478.5,267.1 L478.5,270.7ZM475.0,276.7 L478.5,279.4 L479.6,279.0 L479.2,275.3 L475.8,274.6 L475.0,276.7ZM468.2,487.1 L468.4,490.4 L478.0,493.5 L479.0,493.0 L477.5,489.4 L475.2,489.9 L469.0,486.6 L468.2,487.1ZM476.1,500.0 L477.3,499.9 L477.4,498.3 L475.5,498.2 L476.1,500.0ZM477.5,242.7 L473.4,242.4 L472.9,243.7 L477.4,244.3 L477.5,242.7ZM472.4,252.1 L474.6,255.3 L476.6,255.4 L477.0,250.4 L472.7,249.3 L472.4,252.1ZM476.8,485.2 L474.5,485.1 L474.6,486.0 L476.7,486.7 L476.8,485.2ZM444.0,440.0 L441.5,439.0 L438.8,440.9 L438.7,441.8 L441.6,446.0 L444.3,445.1 L447.4,445.9 L447.5,447.
381386 L444.7,450.5 L450.9,459.3 L452.8,460.8 L454.2,461.0 L455.3,459.4 L462.0,455.8 L463.1,451.7 L461.1,448.0 L461.9,446.3 L463.7,446.6 L468.6,453.6 L476.1,449.1 L475.1,446.5 L470.3,446.1 L468.6,447.1 L467.3,446.6 L467.2,443.7 L455.9,429.4 L452.4,431.5 L453.2,433.9 L452.5,435.2 L451.1,435.3 L448.9,433.8 L446.4,435.6 L446.6,437.8 L445.9,439.1 L444.0,440.0ZM468.3,401.0 L468.8,404.3 L474.7,407.0 L475.7,406.6 L475.5,403.6 L474.0,400.0 L468.3,401.0ZM474.2,443.5 L475.3,442.8 L474.8,440.2 L463.4,424.7 L462.4,424.5 L459.1,426.9 L458.9,428.0 L469.0,441.1 L471.7,443.2 L474.2,443.5ZM468.7,525.3 L470.3,525.3 L471.4,524.4 L474.9,515.2 L474.5,514.2 L470.9,513.5 L470.1,514.0 L469.5,519.6 L468.0,524.4 L468.7,525.3ZM468.7,508.5 L470.2,510.0 L471.9,510.2 L474.1,504.6 L470.5,503.4 L468.7,508.5ZM465.2,409.3 L469.6,415.3 L472.3,413.7 L471.9,412.7 L469.8,412.4 L468.5,411.3 L468.1,408.9 L465.7,408.2 L465.2,409.3ZM468.1,271.6 L467.9,273.0 L471.1,274.9 L472.0,274.6 L471.8,271.0 L468.1,271.6ZM466.0,267.4 L467.0,268.3 L471.0,267.5 L471.5,265.3 L470.5,264.7 L466.2,265.9 L466.0,267.4ZM467.6,282.0 L468.6,281.8 L470.3,278.1 L463.3,274.4 L461.4,278.2 L467.6,282.0ZM468.0,498.2 L469.1,497.8 L469.4,495.7 L464.0,494.3 L464.0,495.5 L468.0,498.2ZM467.7,250.3 L467.4,253.5 L469.0,253.2 L469.0,250.3 L467.7,250.3ZM463.7,256.4 L462.9,257.4 L465.0,261.5 L468.6,260.6 L468.3,258.6 L466.8,258.1 L465.7,256.7 L463.7,256.4ZM454.0,481.0 L460.8,483.6 L461.3,485.1 L459.8,487.2 L462.3,488.3 L463.2,485.8 L464.9,484.6 L464.3,481.8 L465.3,481.1 L468.4,480.9 L468.6,478.1 L467.8,477.4 L446.3,477.5 L445.6,478.0 L445.8,478.9 L449.7,481.9 L454.0,481.0ZM466.9,486.5 L468.0,486.1 L467.7,484.7 L465.7,484.3 L465.4,485.4 L466.9,486.5ZM463.2,419.2 L464.2,419.4 L466.6,417.6 L465.5,415.3 L464.5,415.3 L462.7,417.7 L463.2,419.2ZM452.6,387.4 L451.8,388.2 L452.4,389.4 L456.5,390.0 L461.1,395.6 L466.5,392.6 L466.1,391.6 L462.8,391.1 L458.1,388.2 L452.6,387.4ZM463.9,288.1 L464.9,287.8 L466.1,284.8 L459.1,281.2 L457.8,284.3 L463.9,288.1ZM435.2,470.5 L439.3,468.1 L441.4,467.7 L442.4,468.3 L442.4,470.3 L438.4,472.5 L440.4,474.5 L463.6,474.4 L464.4,473.6 L464.0,471.0 L457.4,470.9 L456.2,469.7 L457.3,467.9 L464.1,467.6 L463.8,464.6 L462.5,462.8 L457.6,465.0 L450.3,463.3 L448.2,466.2 L448.7,468.9 L447.2,469.7 L444.1,466.1 L445.9,463.4 L446.1,461.3 L445.1,460.7 L434.0,468.9 L435.2,470.5ZM459.7,371.2 L457.5,367.2 L456.0,366.9 L452.2,374.7 L455.6,375.6 L456.9,374.1 L458.1,373.8 L459.9,376.6 L463.6,377.1 L463.4,373.0 L459.7,371.2ZM457.2,412.2 L453.0,417.8 L454.4,419.5 L461.0,415.1 L463.5,412.3 L462.2,410.4 L461.3,410.2 L460.0,412.1 L457.2,412.2ZM444.5,281.4 L446.0,286.0 L460.3,294.1 L461.2,293.9 L462.5,291.8 L462.2,290.7 L445.4,280.6 L444.5,281.4ZM458.7,407.3 L457.9,407.9 L458.2,408.8 L460.6,408.9 L460.3,407.5 L458.7,407.3ZM457.7,271.7 L455.9,274.5 L458.1,275.6 L460.4,272.2 L459.1,268.2 L457.3,268.7 L457.7,271.7ZM458.9,248.5 L459.7,247.9 L459.3,247.0 L456.9,247.1 L457.1,248.2 L458.9,248.5ZM459.0,297.2 L449.3,291.1 L448.3,291.7 L453.6,304.2 L454.6,304.6 L459.0,297.2ZM453.0,381.0 L454.7,384.4 L457.0,384.1 L457.4,381.9 L456.3,379.3 L450.2,377.8 L449.8,380.9 L453.0,381.0ZM453.6,402.5 L455.3,403.3 L456.1,402.5 L454.4,400.5 L453.7,401.0 L453.6,402.5ZM451.6,315.7 L453.3,319.6 L456.0,318.1 L454.2,314.6 L451.6,315.7ZM449.8,277.6 L449.6,279.0 L453.9,281.6 L455.8,279.9 L455.5,278.9 L451.4,276.4 L449.8,277.6ZM412.7,446.1 L412.4,447.3 L415.9,451.5 L416.8,451.6 L423.5,446.8 L422.0,443.5 L422.7,441.9 L424.3,441.8 L426.2,444.2 L427.1,444.4 L455.4,424.8 L455.7,423.7 L452.3,422.8 L450.2,420.6 L449.3,420.5 L435.7,430.0 L431.3,431.1 L429.5,434.6 L412.7,446.1ZM445.6,406.0 L442.9,409.2 L443.7,410.6 L444.8,411.2 L448.6,411.0 L451.1,414.8 L453.6,412.7 L454.9,407.2 L454.2,406.4 L445.6,406.0ZM442.8,363.2 L446.8,370.7 L447.9,370.4 L454.0,359.2 L453.7,358.2 L446.6,360.3 L442.8,363.2ZM449.8,312.2 L450.7,312.6 L453.1,311.4 L451.6,307.9 L448.7,309.1 L449.8,312.2ZM430.9,399.7 L431.3,400.8 L435.7,402.1 L449.7,403.1 L450.5,402.5 L450.9,399.6 L453.0,398.0 L450.1,393.6 L448.5,392.5 L446.4,387.6 L443.8,385.4 L436.6,385.0 L434.8,385.4 L431.9,387.5 L434.0,390.7 L434.6,393.4 L430.9,399.7ZM450.4,247.8 L450.9,248.6 L452.3,248.7 L452.8,246.8 L451.0,246.3 L450.4,247.8ZM446.2,254.7 L448.8,261.2 L450.2,260.8 L449.6,257.7 L451.1,255.1 L446.8,253.7 L446.2,254.7ZM442.5,295.4 L447.1,305.7 L450.0,304.9 L445.2,293.9 L442.5,295.4ZM447.3,317.5 L446.8,318.3 L447.8,321.0 L449.3,321.3 L449.8,320.4 L448.7,317.7 L447.3,317.5ZM409.2,416.9 L412.2,422.9 L415.5,422.6 L418.7,424.7 L420.4,422.1 L421.9,421.8 L422.9,423.0 L422.2,425.5 L422.7,426.3 L432.7,427.3 L434.4,426.3 L433.6,424.0 L434.3,422.7 L435.7,422.6 L437.6,424.1 L441.2,421.8 L440.4,419.1 L441.1,417.8 L442.7,417.6 L444.6,419.3 L447.5,416.8 L441.9,413.1 L439.0,410.0 L438.8,408.6 L440.5,407.0 L440.3,406.0 L433.8,404.8 L425.7,411.7 L428.5,415.4 L432.0,416.8 L432.6,419.3 L431.9,422.1 L429.8,421.9 L429.0,418.7 L426.1,417.7 L423.7,419.2 L420.2,417.1 L420.0,415.7 L423.0,409.8 L422.1,408.7 L420.5,409.1 L419.6,411.3 L417.1,411.7 L415.9,414.1 L417.9,415.3 L418.2,416.6 L415.8,419.1 L414.1,419.0 L412.1,416.5 L409.2,416.9ZM430.0,241.9 L427.3,246.5 L427.8,247.5 L446.2,250.4 L447.1,249.8 L447.3,246.2 L445.5,245.4 L443.5,243.0 L440.6,244.5 L437.4,244.4 L435.7,243.7 L434.1,241.5 L430.0,241.9ZM446.5,314.4 L446.9,313.6 L446.1,311.5 L445.0,311.0 L444.5,311.8 L445.3,314.1 L446.5,314.4ZM441.7,374.0 L441.4,375.2 L443.4,378.1 L444.4,378.2 L445.1,375.3 L444.1,373.5 L443.3,373.1 L441.7,374.0ZM426.4,463.5 L431.4,466.8 L444.7,457.1 L444.8,456.1 L442.1,452.3 L441.1,452.3 L426.5,462.4 L426.4,463.5ZM438.8,321.0 L438.6,322.3 L440.7,322.9 L444.1,322.8 L444.8,322.2 L443.5,319.2 L438.8,321.0ZM436.9,289.0 L436.7,290.0 L438.3,293.3 L444.1,290.5 L442.4,286.6 L436.9,289.0ZM427.2,255.8 L427.0,259.3 L429.2,259.7 L430.2,260.9 L430.0,263.4 L432.5,271.9 L435.0,271.8 L435.2,270.7 L433.4,269.1 L433.8,267.6 L436.0,267.0 L438.2,268.7 L439.0,267.9 L436.0,258.5 L439.8,256.0 L442.2,255.6 L442.0,253.1 L427.2,250.6 L426.6,251.4 L427.1,252.3 L429.7,252.7 L431.0,254.8 L429.8,256.2 L427.2,255.8ZM442.0,316.3 L442.4,315.4 L440.8,312.0 L434.0,315.0 L435.8,318.8 L442.0,316.3ZM438.1,381.5 L441.2,382.1 L441.6,381.1 L439.4,377.9 L438.6,377.6 L437.6,379.0 L438.1,381.5ZM435.5,281.6 L435.5,284.9 L436.3,285.4 L441.6,282.8 L440.7,280.0 L437.3,280.0 L435.2,276.3 L434.0,277.2 L435.5,281.6ZM434.5,363.9 L433.7,364.9 L435.2,367.1 L436.7,368.5 L438.6,368.3 L440.0,366.3 L439.6,365.1 L438.1,364.1 L434.5,363.9ZM432.7,311.5 L439.7,308.6 L438.6,305.4 L431.5,308.4 L432.7,311.5ZM419.7,457.9 L423.6,460.6 L433.7,453.6 L432.3,450.2 L432.8,448.7 L434.5,448.5 L436.9,451.2 L439.4,449.7 L439.6,448.7 L436.3,443.8 L435.3,443.6 L420.3,454.0 L419.0,456.3 L419.7,457.9ZM427.8,303.2 L430.1,305.3 L437.2,302.3 L436.2,298.3 L432.2,298.8 L428.0,302.2 L427.8,303.2ZM425.9,371.1 L425.3,382.4 L429.8,384.9 L434.7,382.0 L434.6,380.2 L431.6,375.6 L429.7,368.9 L426.7,369.6 L425.9,371.1ZM425.5,299.5 L431.1,295.9 L434.7,295.0 L433.9,291.6 L423.7,295.2 L425.5,299.5ZM426.1,290.3 L432.6,288.3 L432.2,284.9 L423.9,286.2 L423.8,287.2 L426.1,290.3ZM429.7,314.9 L428.6,317.3 L430.5,318.7 L431.4,318.6 L430.6,315.1 L429.7,314.9ZM414.2,284.1 L418.2,286.1 L419.9,284.0 L422.3,284.5 L423.9,283.0 L431.0,281.6 L431.5,280.8 L431.0,278.2 L430.2,277.7 L426.8,278.4 L414.2,282.9 L414.2,284.1ZM425.0,392.7 L426.3,395.3 L425.3,397.9 L427.5,398.9 L431.4,393.2 L431.3,392.2 L427.6,388.5 L425.1,391.1 L425.0,392.7ZM404.0,369.9 L399.5,372.8 L397.4,372.5 L395.3,374.1 L395.2,375.0 L404.9,383.3 L412.4,388.6 L414.7,387.6 L419.4,382.0 L421.8,380.8 L423.0,375.2 L423.0,369.9 L424.5,367.2 L429.5,365.0 L429.7,363.7 L420.9,357.8 L416.2,359.8 L415.8,364.0 L414.7,365.7 L413.4,366.0 L412.2,364.7 L412.8,360.2 L409.5,359.3 L408.9,360.2 L410.2,361.8 L410.0,363.2 L408.7,363.8 L406.4,363.0 L405.2,365.1 L406.3,366.7 L411.8,369.7 L412.5,371.3 L411.8,372.8 L409.2,373.6 L404.0,369.9ZM418.0,235.5 L426.8,237.8 L428.2,235.5 L424.6,233.3 L421.1,233.5 L419.7,232.8 L418.0,235.5ZM425.7,272.3 L427.5,272.1 L426.5,270.3 L424.9,270.8 L425.7,272.3ZM409.5,441.5 L411.8,442.4 L421.7,435.5 L422.7,433.6 L424.7,433.4 L427.0,431.9 L427.3,430.3 L421.7,429.4 L420.5,429.9 L418.1,434.2 L409.6,440.6 L409.5,441.5ZM418.9,311.6 L423.2,311.8 L426.0,308.7 L426.1,307.8 L425.1,307.5 L418.7,310.5 L418.9,311.6ZM417.4,336.8 L410.2,355.3 L410.6,356.2 L413.1,356.8 L416.0,356.5
38138L419.4,355.0 L424.8,339.8 L417.4,336.8ZM420.8,403.1 L422.0,403.5 L424.0,402.0 L424.0,401.1 L421.7,400.1 L420.8,403.1ZM393.9,247.2 L392.1,257.3 L394.2,259.5 L399.9,259.4 L400.5,258.7 L400.4,253.1 L401.3,252.1 L402.6,252.3 L403.4,253.4 L404.1,267.3 L406.8,267.8 L407.9,270.7 L416.4,271.5 L417.3,270.8 L417.0,266.0 L418.4,265.0 L421.1,265.4 L423.8,257.1 L422.6,254.2 L421.2,253.1 L418.5,254.1 L416.7,253.6 L414.4,254.3 L408.6,253.4 L406.9,252.0 L406.4,250.3 L406.9,246.3 L408.0,245.6 L410.3,245.8 L410.9,245.1 L408.8,242.7 L408.7,241.4 L410.1,240.4 L412.2,241.6 L413.8,241.4 L413.7,237.0 L407.3,232.7 L404.4,236.1 L401.6,235.4 L399.6,232.9 L401.0,228.3 L393.5,223.3 L392.7,223.9 L389.4,239.9 L391.8,240.5 L393.2,237.2 L394.9,236.7 L395.9,237.9 L395.5,241.1 L401.2,242.7 L402.0,244.2 L399.9,247.5 L393.9,247.2ZM417.8,241.7 L418.8,242.6 L421.8,241.4 L422.2,240.5 L418.2,239.3 L417.8,241.7ZM416.3,390.5 L416.2,391.8 L419.6,393.7 L422.1,390.0 L421.9,387.5 L420.5,386.5 L419.1,387.0 L416.3,390.5ZM417.9,398.7 L418.5,400.0 L420.2,399.1 L419.2,397.9 L417.9,398.7ZM409.6,399.1 L409.1,401.3 L412.8,404.8 L416.4,406.2 L417.9,405.2 L417.9,400.0 L415.4,399.6 L411.7,395.4 L410.8,395.4 L409.2,397.2 L409.6,399.1ZM416.0,275.6 L415.0,276.3 L415.7,278.0 L417.6,276.8 L416.0,275.6ZM404.7,437.0 L405.7,438.7 L407.0,438.8 L413.8,433.7 L414.0,432.8 L412.6,431.7 L411.1,431.9 L405.3,436.0 L404.7,437.0ZM411.9,338.6 L413.1,338.3 L413.7,335.4 L410.7,334.6 L408.6,335.4 L408.6,336.6 L411.9,338.6ZM395.9,427.6 L398.6,432.5 L399.6,432.8 L402.6,432.1 L406.9,428.7 L408.8,428.4 L409.9,427.0 L412.5,426.6 L411.2,424.1 L407.5,425.7 L405.2,423.3 L405.1,421.9 L406.7,420.2 L405.2,416.8 L406.0,414.7 L403.2,412.1 L400.9,411.6 L399.7,412.3 L402.8,416.5 L402.9,418.0 L402.1,419.6 L400.1,419.3 L399.7,417.0 L397.6,415.2 L394.5,417.8 L396.8,422.8 L400.8,424.2 L403.2,426.1 L403.4,427.7 L401.7,428.6 L397.2,426.1 L395.9,427.6ZM397.0,404.8 L397.4,408.1 L398.4,408.8 L400.9,407.8 L398.9,405.7 L399.1,404.0 L400.3,403.5 L402.2,404.2 L404.6,407.4 L405.2,409.7 L409.5,413.3 L411.5,413.0 L410.8,410.9 L411.1,409.0 L407.4,406.5 L407.3,403.8 L404.4,403.0 L403.3,401.3 L397.6,401.7 L397.0,404.8ZM398.6,338.5 L398.3,346.3 L399.2,348.5 L406.4,353.6 L407.4,353.6 L411.3,341.9 L408.5,340.3 L407.6,337.9 L406.8,337.5 L404.1,339.2 L398.6,338.5ZM408.2,448.9 L409.1,448.9 L411.0,447.0 L407.4,445.0 L406.0,446.9 L408.2,448.9ZM407.0,394.1 L407.9,394.0 L410.0,391.7 L408.7,390.1 L407.8,390.2 L405.8,392.7 L407.0,394.1ZM401.0,278.2 L399.5,280.1 L400.1,284.1 L402.1,284.5 L406.9,281.9 L405.2,274.5 L401.5,274.7 L401.0,278.2ZM384.9,385.2 L384.0,386.2 L386.2,391.2 L388.5,391.5 L389.5,392.4 L389.8,398.1 L394.2,398.2 L394.9,394.3 L396.3,393.4 L397.8,394.5 L397.9,398.3 L401.1,398.4 L405.2,393.8 L403.5,391.2 L405.2,387.5 L404.2,386.9 L402.5,387.9 L401.2,387.6 L400.6,386.5 L401.2,384.2 L396.0,379.8 L388.3,384.6 L384.9,385.2ZM404.9,288.5 L404.5,287.0 L402.8,287.8 L403.5,289.1 L404.9,288.5ZM370.3,358.1 L373.0,356.2 L374.6,356.8 L376.2,359.5 L376.0,361.9 L379.7,363.7 L381.0,361.3 L378.5,358.8 L378.4,357.2 L379.8,356.4 L382.4,357.3 L383.3,354.4 L386.2,351.2 L386.8,349.4 L388.6,348.5 L390.5,349.5 L390.8,351.4 L386.0,356.1 L385.4,361.7 L389.3,362.4 L390.3,358.6 L393.4,358.3 L394.4,359.5 L394.4,363.9 L397.5,365.9 L399.3,364.6 L401.5,364.7 L404.7,359.4 L404.0,358.5 L401.7,359.0 L400.6,358.5 L400.3,356.8 L402.1,355.5 L402.2,354.6 L396.9,350.5 L394.9,345.7 L392.9,345.7 L391.9,344.9 L392.1,343.2 L395.1,341.6 L394.9,337.2 L394.0,337.0 L388.9,339.8 L386.6,336.1 L383.5,336.3 L380.3,333.5 L368.8,349.5 L367.8,356.0 L370.3,358.1ZM394.4,268.1 L400.6,269.0 L400.5,262.8 L394.6,262.8 L393.5,267.3 L394.4,268.1ZM397.5,434.0 L393.7,434.3 L394.4,435.9 L397.0,435.9 L397.5,434.0ZM381.6,285.8 L382.6,287.7 L394.1,290.1 L396.9,287.8 L396.2,286.5 L382.9,283.5 L382.1,284.0 L381.6,285.8ZM390.1,281.9 L395.9,283.1 L396.4,280.0 L394.7,277.6 L393.0,277.2 L389.9,274.7 L389.1,275.4 L389.0,281.1 L390.1,281.9ZM390.0,370.6 L392.7,372.3 L395.4,370.0 L395.1,367.9 L392.6,366.9 L391.0,367.3 L389.3,369.5 L390.0,370.6ZM384.5,413.5 L385.7,413.9 L387.8,411.7 L391.3,412.8 L392.1,411.3 L394.1,410.3 L393.3,407.2 L389.5,407.7 L388.3,409.5 L384.3,410.9 L384.5,413.5ZM383.6,381.2 L385.3,382.1 L386.9,381.9 L392.7,377.6 L385.4,371.2 L381.4,376.9 L383.6,381.2ZM389.5,423.9 L388.3,424.8 L389.3,427.0 L390.1,427.3 L391.7,424.7 L389.5,423.9ZM390.6,294.3 L391.5,293.6 L391.0,292.6 L382.7,290.9 L381.8,291.4 L382.3,292.6 L390.6,294.3ZM385.6,264.0 L388.0,268.9 L389.7,269.2 L391.5,261.4 L389.3,259.1 L385.1,257.2 L382.4,264.2 L383.3,264.9 L385.6,264.0ZM381.3,330.1 L386.2,332.9 L387.1,335.8 L390.1,336.0 L391.4,335.0 L391.2,334.1 L382.7,327.0 L381.3,330.1ZM386.8,420.3 L387.5,420.8 L389.9,420.3 L391.2,417.9 L390.0,417.2 L386.6,417.6 L386.8,420.3ZM385.6,253.2 L386.1,254.0 L388.9,255.0 L389.7,251.0 L386.4,250.3 L385.6,253.2ZM384.6,239.5 L385.4,238.9 L389.5,220.9 L386.4,218.4 L385.5,219.0 L381.1,238.2 L381.6,239.0 L384.6,239.5ZM302.8,309.8 L299.6,308.2 L297.7,309.7 L300.
381381,312.8 L301.7,313.6 L303.7,313.3 L305.1,314.7 L307.1,314.7 L308.8,316.6 L313.3,313.3 L315.3,313.3 L325.5,324.3 L328.7,319.7 L321.9,316.9 L319.3,313.6 L319.8,310.7 L323.4,307.2 L327.0,305.8 L335.8,305.6 L336.6,302.7 L337.8,301.9 L339.2,302.6 L340.1,305.3 L348.9,305.0 L355.2,306.0 L355.9,307.6 L352.7,320.3 L350.5,321.8 L346.5,322.8 L338.5,323.9 L338.1,330.0 L339.6,333.2 L341.3,334.7 L344.1,330.0 L347.3,328.6 L348.6,328.9 L349.1,330.0 L348.4,332.3 L355.4,339.6 L353.1,344.5 L355.7,346.0 L359.3,346.8 L360.3,348.0 L360.3,350.2 L362.7,351.5 L365.6,349.4 L369.1,343.3 L366.5,342.0 L359.9,342.0 L359.7,339.1 L355.1,335.2 L355.6,330.4 L356.6,329.6 L358.0,330.1 L361.7,334.4 L362.7,338.0 L364.0,338.8 L367.0,338.8 L368.1,337.6 L368.7,334.8 L371.3,333.7 L370.9,332.7 L366.4,329.6 L366.6,328.2 L368.5,326.7 L370.2,326.7 L373.0,330.4 L375.2,331.2 L378.0,324.3 L374.9,321.3 L374.8,319.8 L377.4,317.9 L380.5,320.1 L381.6,319.8 L389.2,297.8 L388.7,297.0 L382.1,295.6 L380.7,294.1 L375.7,293.2 L373.3,294.3 L368.5,293.2 L367.2,291.7 L365.5,291.3 L365.0,289.6 L369.7,279.7 L367.8,278.4 L367.0,276.7 L364.8,277.1 L360.0,275.2 L359.2,275.7 L356.9,282.1 L363.7,285.2 L364.3,287.1 L362.6,288.0 L355.6,285.4 L353.2,290.8 L360.0,294.3 L360.5,295.6 L359.7,296.7 L352.0,294.4 L350.0,298.4 L348.4,299.0 L347.3,297.5 L348.1,294.1 L344.0,292.4 L340.5,298.8 L338.9,299.5 L337.7,298.3 L338.0,295.0 L328.2,290.8 L327.9,289.2 L329.5,288.2 L339.0,292.0 L340.0,291.6 L351.9,261.5 L351.5,260.6 L345.7,257.9 L337.9,273.5 L338.6,275.6 L337.8,279.5 L335.6,280.5 L333.7,284.4 L332.6,285.1 L330.9,283.9 L331.6,280.9 L329.7,280.4 L324.5,291.1 L324.8,292.1 L327.6,292.6 L331.7,295.7 L331.8,297.9 L330.1,298.2 L326.2,295.4 L319.5,294.7 L317.3,296.9 L315.2,297.2 L313.8,295.2 L311.5,295.0 L310.8,293.2 L308.9,291.8 L309.3,290.1 L311.4,289.3 L311.4,287.7 L304.0,285.6 L303.4,286.6 L304.5,288.5 L303.9,290.5 L305.4,292.4 L305.5,294.5 L314.7,301.5 L317.2,300.7 L319.0,301.0 L320.1,302.1 L320.5,304.4 L318.8,306.2 L316.2,306.2 L309.3,301.7 L304.1,306.2 L304.7,307.0 L307.5,307.4 L309.2,305.8 L310.7,305.9 L311.4,307.6 L309.8,309.8 L307.2,310.5 L302.8,309.8ZM382.6,365.4 L386.4,367.8 L387.8,365.9 L383.6,363.9 L382.6,365.4ZM384.4,431.9 L386.3,432.1 L387.0,431.0 L383.2,422.1 L382.3,421.7
38138L381.4,422.8 L384.4,431.9ZM383.0,391.0 L381.8,389.5 L379.7,391.0 L381.5,394.7 L382.9,394.3 L383.0,391.0ZM383.0,250.3 L382.4,249.5 L379.0,249.0 L378.1,251.2 L382.0,252.6 L383.0,250.3ZM372.0,235.2 L372.5,237.5 L377.2,237.7 L382.2,215.9 L378.2,212.8 L377.1,213.4 L372.0,235.2ZM367.7,361.7 L368.1,370.6 L370.3,371.5 L372.2,373.8 L371.0,375.4 L368.2,374.9 L368.1,378.6 L371.8,380.3 L374.7,377.8 L375.1,375.1 L379.0,374.7 L382.1,369.6 L368.6,360.9 L367.7,361.7ZM377.7,266.1 L378.6,265.6 L381.6,256.4 L381.1,255.6 L377.9,254.8 L377.1,255.3 L374.2,264.3 L377.7,266.1ZM379.0,397.0 L377.6,397.3 L378.5,399.4 L380.9,399.1 L381.0,397.9 L379.0,397.0ZM374.0,386.3 L374.9,389.4 L375.9,389.8 L379.6,387.1 L379.8,386.2 L377.9,384.4 L376.1,385.5 L374.6,385.4 L374.0,386.3ZM367.1,420.8 L368.1,421.5 L373.9,419.9 L376.1,421.0 L378.2,420.2 L379.6,418.7 L368.6,404.5 L367.6,405.2 L367.1,420.8ZM371.9,286.6 L375.8,287.7 L377.4,289.1 L379.2,288.6 L376.5,285.0 L372.2,285.0 L371.9,286.6ZM376.1,391.1 L375.1,390.7 L374.4,391.8 L376.2,394.2 L377.0,393.3 L376.1,391.1ZM366.7,257.4 L368.6,259.7 L371.4,259.8 L373.8,252.7 L374.1,248.2 L370.0,247.9 L366.7,257.4ZM360.9,271.4 L361.3,272.4 L366.0,274.4 L367.1,276.4 L370.8,275.6 L371.2,273.3 L369.2,271.9 L368.7,269.7 L366.8,269.3 L365.6,267.7 L362.8,267.3 L360.9,271.4ZM367.9,394.4 L369.0,395.1 L370.6,393.4 L369.8,392.2 L368.5,392.3 L367.9,394.4ZM359.5,253.1 L363.1,255.8 L364.1,255.5 L366.3,250.4 L366.4,247.0 L362.0,246.6 L359.5,253.1ZM362.7,368.2 L360.6,373.2 L363.5,376.6 L364.6,376.7 L364.2,365.2 L362.5,365.6 L362.7,368.2ZM362.8,358.0 L363.7,357.8 L363.8,356.8 L361.7,355.0 L360.8,355.0 L360.3,356.5 L362.8,358.0ZM357.3,225.3 L362.3,226.4 L363.5,222.6 L357.5,221.1 L356.3,224.1 L357.3,225.3ZM355.8,230.6 L356.9,232.1 L360.7,232.0 L361.6,231.5 L361.9,230.2 L357.3,228.5 L356.1,229.1 L355.8,230.6ZM358.9,359.9 L356.2,364.8 L357.7,366.1 L361.1,365.0 L361.3,360.8 L358.9,359.9ZM357.2,264.3 L357.5,267.3 L356.2,267.8 L353.9,267.2 L353.3,269.2 L357.9,270.5 L360.2,265.0 L357.9,263.7 L357.2,264.3ZM353.8,257.3 L354.9,256.8 L359.9,242.0 L359.3,241.3 L352.6,240.2 L351.9,240.7 L351.7,242.5 L355.7,244.2 L356.6,245.8 L353.4,255.1 L353.2,256.6 L353.8,257.3ZM342.1,351.6 L342.0,352.8 L352.2,363.2 L354.2,361.6 L356.5,357.9 L356.6,355.6 L358.1,353.1 L357.6,352.3 L353.7,351.1 L353.0,354.2 L351.5,355.1 L350.2,354.2 L349.5,350.8 L342.1,351.6ZM348.9,290.9 L349.9,290.4 L356.3,274.5 L355.9,273.6 L352.4,272.3 L351.5,272.8 L345.1,288.7 L345.4,289.6 L348.9,290.9ZM348.4,234.9 L349.2,236.1 L353.0,234.7 L352.3,232.4 L353.5,227.3 L353.0,226.5 L350.1,226.9 L348.4,234.9ZM341.4,316.4 L336.0,315.8 L334.0,318.5 L334.2,319.5 L337.2,320.6 L340.5,320.7 L350.0,318.6 L352.3,308.9 L348.8,308.1 L339.8,308.5 L338.6,313.0 L340.8,313.4 L345.4,312.3 L346.4,312.9 L346.6,314.2 L345.7,315.2 L341.4,316.4ZM351.5,340.7 L351.4,339.7 L346.4,334.7 L345.2,334.7 L344.5,337.7 L349.9,341.7 L351.5,340.7ZM343.7,251.6 L349.3,254.3 L350.2,252.6 L349.5,249.2 L347.6,247.6 L348.5,243.7 L347.6,241.8 L346.8,242.2 L343.7,251.6ZM341.5,231.5 L342.1,232.3 L345.8,232.6 L346.6,227.3 L342.3,227.8 L341.5,231.5ZM338.7,336.9 L331.0,340.7 L330.9,341.8 L338.4,348.5 L345.8,347.6 L343.3,342.6 L343.1,340.6 L338.7,336.9ZM335.0,236.1 L333.9,236.6 L331.2,245.5 L333.1,246.1 L335.7,239.2 L337.6,238.6 L338.5,240.3 L336.0,247.9 L339.8,249.8 L344.0,237.8 L342.5,235.5 L340.8,235.3 L338.8,236.9 L335.0,236.1ZM334.3,259.1 L334.6,260.1 L339.4,262.1 L342.3,256.3 L340.9,255.7 L338.6,258.2 L335.9,256.4 L334.3,259.1ZM329.8,268.8 L330.2,269.8 L335.0,271.8 L337.9,265.3 L332.7,263.0 L329.8,268.8ZM323.6,314.3 L331.4,316.8 L334.6,312.4 L335.9,309.1 L326.6,309.0 L322.5,312.3 L323.6,314.3ZM327.7,326.9 L329.6,330.4 L327.5,333.5 L329.6,336.7 L330.6,336.7 L333.2,334.2 L335.7,334.1 L334.7,323.1 L331.4,322.0 L327.7,326.9ZM335.4,277.6 L335.1,275.5 L332.4,274.9 L331.8,277.4 L334.4,278.4 L335.4,277.6ZM328.3,230.9 L328.8,232.0 L331.8,232.1 L334.9,224.0 L334.6,223.1 L331.9,222.5 L328.3,230.9ZM321.9,241.4 L328.1,243.8 L330.7,235.7 L322.6,234.5 L321.9,236.1 L320.5,237.1 L320.0,239.1 L321.9,241.4ZM321.1,264.9 L321.5,265.9 L326.6,267.8 L329.5,261.3 L324.4,258.8 L321.1,264.9ZM319.4,285.6 L314.4,290.0 L314.9,291.0 L320.9,291.4 L329.5,273.8 L329.3,272.8 L320.4,268.8 L319.4,269.0 L318.6,272.8 L321.1,273.9 L323.6,273.3 L325.8,274.4 L326.2,275.7 L325.4,276.8 L323.5,277.1 L320.5,280.7 L320.7,283.0 L319.4,285.6ZM326.4,348.7 L323.0,352.0 L324.4,353.6 L327.4,350.3 L326.4,348.7ZM323.0,345.8 L324.1,345.9 L325.8,343.8 L324.4,341.9 L321.9,344.3 L323.0,345.8ZM320.8,360.3 L320.2,365.0 L321.2,365.0 L323.4,362.2 L323.3,361.2 L320.8,360.3ZM317.7,324.3 L317.3,327.9 L318.8,328.9 L322.0,325.6 L314.8,317.1 L313.9,316.8 L312.7,318.4 L317.7,324.3ZM309.7,260.3 L310.1,261.2 L317.6,264.2 L320.4,259.0 L318.4,258.2 L317.1,260.1 L315.1,260.7 L312.6,259.9 L310.9,257.8 L309.7,260.3ZM307.3,268.4 L315.4,271.0 L316.4,267.3 L308.6,264.3 L307.3,268.4ZM312.2,285.8 L312.9,286.9 L314.6,286.1 L315.4,285.3 L315.3,284.0 L313.3,283.4 L312.2,285.8ZM304.3,275.5 L304.7,276.5 L310.8,278.6 L312.5,275.2 L310.5,273.0 L306.3,271.5 L304.3,275.5ZM308.5,233.1 L310.2,234.2 L311.1,233.5 L309.5,232.1 L308.5,233.1ZM302.8,216.2 L305.8,225.5 L307.4,228.4 L308.7,228.7 L310.0,226.2 L306.3,215.2 L303.2,214.8 L302.8,216.2ZM293.7,252.0 L296.4,254.0 L296.7,256.1 L300.5,257.5 L301.4,257.2 L302.3,255.2 L303.9,255.0 L304.8,256.2 L304.5,258.9 L306.0,259.5 L306.8,259.1 L308.0,254.2 L307.6,253.4 L294.8,249.9 L293.7,252.0ZM299.9,303.9 L305.0,301.6 L306.4,300.0 L306.4,299.1 L304.4,297.6 L303.3,297.7 L302.9,299.8 L301.5,301.6 L299.4,302.6 L299.9,303.9ZM290.2,262.2 L303.6,267.1 L305.0,264.6 L300.5,262.3 L299.4,260.4 L291.5,257.9 L290.2,262.2ZM288.4,227.4 L291.4,229.9 L294.0,230.5 L293.9,234.1 L294.5,234.7 L296.7,233.6 L298.6,234.5 L304.5,234.1 L304.3,232.5 L301.2,231.3 L301.7,228.9 L301.
381381,228.1 L288.8,226.3 L288.4,227.4ZM300.5,382.2 L300.1,383.8 L303.0,385.9 L304.0,385.8 L304.4,384.5 L302.4,381.9 L300.5,382.2ZM299.2,350.4 L300.3,350.3 L304.2,345.3 L303.1,343.5 L302.2,343.6 L297.7,348.2 L299.2,350.4ZM301.4,281.8 L302.0,283.1 L303.0,283.2 L303.9,280.2 L302.3,279.9 L301.4,281.8ZM302.4,353.7 L300.9,355.2 L301.7,356.1 L303.3,355.2 L302.4,353.7ZM293.9,337.7 L290.9,335.6 L289.8,337.8 L292.1,339.3 L292.9,341.2 L295.2,340.9 L298.3,343.0 L299.1,341.7 L297.8,340.5 L297.7,339.2 L301.6,334.5 L301.7,332.6 L302.9,330.9 L293.8,323.5 L292.1,325.7 L297.5,330.7 L297.9,332.6 L297.1,335.8 L295.5,337.7 L293.9,337.7ZM300.5,269.9 L299.7,274.2 L300.7,275.0 L302.6,271.1 L302.4,270.1 L300.5,269.9ZM292.9,362.0 L293.1,362.9 L297.0,366.0 L301.3,360.8 L296.7,357.5 L292.9,362.0ZM293.4,296.7 L296.4,298.3 L299.1,295.2 L297.1,291.2 L296.1,291.3 L294.7,294.4 L293.1,295.2 L293.4,296.7ZM294.0,313.5 L289.0,317.2 L290.6,319.3 L295.1,314.0 L294.0,313.5ZM292.1,211.2 L291.3,211.6 L291.4,212.6 L293.6,214.2 L294.5,214.1 L294.6,212.9 L292.1,211.2ZM291.9,280.5 L292.7,281.2 L293.5,280.5 L294.4,276.7 L293.9,275.9 L292.4,276.1 L291.5,278.6 L291.9,280.5ZM287.8,330.9 L290.1,331.6 L291.5,329.6 L289.0,327.8 L287.2,329.7 L287.8,330.9ZM284.7,250.4 L285.1,251.4 L289.5,253.1 L291.3,249.1 L286.5,246.7 L284.7,250.4ZM287.0,277.7 L287.7,278.3 L288.7,278.0 L289.5,275.0 L289.1,274.2 L287.1,274.2 L287.0,277.7ZM283.5,263.5 L284.8,264.5 L285.8,264.2 L288.4,256.8 L284.2,254.4 L282.0,258.2 L283.0,259.7 L283.5,263.5ZM281.8,320.4 L286.2,323.9 L288.1,322.4 L286.0,318.4 L285.9,316.4 L286.9,314.2 L284.3,312.4 L282.6,312.6 L280.7,311.6 L279.5,312.3 L277.8,316.0 L279.2,318.0 L281.7,315.9 L283.4,316.3 L283.7,317.8 L281.8,320.4ZM215.9,165.5 L213.3,164.6 L212.9,165.5 L219.5,191.1 L219.8,194.8 L220.9,195.2 L222.1,193.8 L223.9,193.3 L225.4,195.2 L228.7,196.7 L230.5,195.5 L232.6,195.7 L237.4,191.8 L230.9,186.0 L230.9,184.6 L232.4,182.8 L234.9,182.8 L236.9,180.6 L239.6,179.5 L241.4,179.6 L242.5,177.7 L249.4,173.9 L251.7,173.9 L253.0,172.5 L257.1,170.4 L259.9,170.2 L261.0,168.1 L263.2,166.6 L265.8,166.7 L267.4,168.5 L266.0,176.6 L266.5,179.3 L263.5,184.8 L260.7,185.2 L256.4,180.7 L255.4,180.5 L253.1,182.0 L253.6,184.3 L253.1,185.9 L251.6,186.9 L249.2,187.3 L249.0,189.6 L247.5,191.5 L246.3,191.8 L243.6,190.8 L235.7,197.2 L235.6,198.3 L237.6,200.2 L237.2,201.9 L235.9,202.2 L233.4,200.5 L232.4,200.8 L231.5,202.9 L233.0,204.3 L233.1,205.7 L232.1,206.6 L230.2,206.6 L229.5,208.4 L230.4,211.2 L232.8,212.4 L233.7,214.6 L234.6,214.5 L237.3,211.5 L239.7,207.0 L239.5,203.1 L242.1,199.4 L244.8,198.4 L250.9,197.8 L252.8,198.4 L255.0,200.3 L258.1,196.8 L260.7,196.7 L264.0,193.5 L267.6,196.2 L267.8,197.7 L266.2,200.3 L268.8,203.3 L268.5,205.0 L266.0,209.0 L269.0,210.7 L274.0,210.9 L277.2,202.7 L274.2,197.6 L273.0,192.2 L274.2,190.7 L275.9,191.4 L277.2,194.3 L277.3,197.1 L280.1,201.0 L284.7,204.1 L287.2,202.6 L285.6,194.1 L282.7,190.7 L280.6,185.9 L274.9,183.0 L272.4,179.7 L272.5,177.1 L273.6,175.0 L275.6,173.8 L278.2,173.9 L278.9,173.2 L275.2,164.3 L277.2,153.1 L276.8,152.2 L270.6,152.5 L270.7,155.5 L268.1,158.7 L263.0,161.2 L261.8,160.7 L261.4,159.5 L263.7,157.5 L263.8,156.6 L260.8,153.8 L259.6,154.0 L252.7,157.4 L251.5,158.9 L248.9,159.4 L248.2,161.5 L245.9,163.0 L246.0,165.2 L244.8,166.2 L243.4,165.7 L241.2,162.0 L234.6,162.6 L222.9,161.6 L220.6,165.4 L215.9,165.5ZM284.9,342.5 L282.4,346.6 L283.3,347.0 L286.2,345.8 L287.2,344.3 L284.9,342.5ZM284.3,337.1 L285.3,337.1 L287.1,334.9 L284.9,332.7 L282.5,335.0 L284.3,337.1ZM282.6,211.7 L284.6,213.8 L285.3,212.9 L284.2,210.5 L282.6,211.7ZM256.3,221.9 L264.9,223.2 L266.6,225.8 L270.2,225.8 L272.2,224.2 L275.7,224.8 L276.4,226.0 L276.0,229.4 L274.5,231.3 L275.7,233.2 L277.5,232.7 L278.5,229.6 L281.4,229.3 L282.4,226.8 L282.0,225.9 L278.6,224.8 L278.0,220.5 L274.2,220.4 L272.1,221.7 L259.7,219.8 L258.5,218.7 L258.8,216.4 L255.8,214.5 L255.0,215.5 L255.5,217.7 L253.9,219.6 L256.3,221.9ZM281.6,206.9 L281.9,205.7 L280.1,204.7 L278.5,207.8 L279.5,208.4 L281.6,206.9ZM211.8,157.5 L218.4,158.0 L219.3,156.3 L220.6,155.9 L222.0,156.4 L223.1,158.5 L233.4,159.5 L238.8,159.3 L245.1,157.5 L249.3,150.6 L251.0,149.6 L252.4,150.0 L254.7,152.8 L261.8,150.1 L278.1,149.2 L281.2,144.1 L281.5,139.9 L278.2,133.5 L274.0,131.0 L267.6,131.2 L265.6,133.2 L263.4,131.4 L260.0,131.5 L259.2,134.4 L257.9,135.2 L249.7,135.5 L248.0,133.4 L244.9,132.3 L241.7,134.2 L239.3,132.6 L237.3,132.6 L236.3,131.8 L235.2,128.3 L237.2,126.2 L236.7,124.2 L237.5,122.1 L236.4,120.6 L234.6,121.7 L233.2,121.3 L228.1,112.4 L227.1,112.1 L226.2,113.0 L227.3,117.3 L225.7,121.4 L226.5,130.7 L224.9,131.7 L222.3,131.2 L213.9,139.9 L215.4,140.8 L219.0,137.5
38138L221.6,137.1 L228.1,141.6 L230.1,143.6 L230.2,144.8 L229.5,145.7 L228.2,145.8 L226.6,144.4 L222.4,142.9 L220.5,141.1 L219.6,141.2 L218.5,142.5 L219.9,144.3 L219.6,145.7 L217.4,147.5 L214.3,147.2 L211.9,150.1 L213.6,153.7 L211.7,155.7 L211.8,157.5ZM263.8,325.9 L261.2,326.3 L261.4,329.4 L264.4,327.1 L266.5,327.7 L266.4,329.3 L262.9,333.2 L263.1,334.3 L264.8,334.7 L268.0,331.5 L269.8,332.3 L269.7,333.8 L267.2,336.9 L269.1,338.7 L272.5,335.6 L275.2,336.2 L276.8,334.8 L276.8,333.7 L275.2,332.6 L275.2,331.2 L281.3,324.7 L279.4,323.6 L275.2,326.8 L269.0,327.7 L267.4,327.1 L268.0,324.9 L274.1,323.8 L276.1,321.8 L276.4,320.5 L274.8,317.2 L270.4,318.4 L267.6,317.9 L266.6,317.0 L266.5,314.8 L265.4,314.4 L262.0,318.4 L265.6,321.6 L265.8,323.1 L263.8,325.9ZM276.5,279.3 L278.7,279.3 L280.0,277.9 L279.1,273.5 L280.5,271.2 L279.6,270.4 L278.8,270.6 L276.1,275.4 L274.7,276.4 L276.5,279.3ZM277.4,180.3 L278.8,181.7 L279.9,181.3 L278.8,178.9 L277.9,179.1 L277.4,180.3ZM276.9,346.1 L277.9,346.2 L279.6,344.1 L278.3,342.4 L275.8,344.4 L276.9,346.1ZM275.7,216.0 L275.7,217.4 L278.1,218.4 L279.0,218.0 L279.0,214.7 L275.7,216.0ZM272.9,254.3 L273.3,259.1 L276.4,259.2 L278.3,254.9 L276.0,253.3 L273.7,253.0 L272.9,254.3ZM258.4,250.3 L267.8,252.0 L269.3,249.2 L273.0,249.3 L274.0,246.4 L275.4,245.9 L277.3,246.9 L277.9,245.6 L276.9,244.9 L275.6,245.1 L274.4,243.9 L272.3,244.5 L267.6,242.5 L263.6,248.6 L261.6,248.8 L257.9,247.2 L257.3,249.6 L258.4,250.3ZM175.0,286.1 L177.5,293.4 L176.5,295.9 L180.0,299.7 L184.3,307.6 L188.0,310.3 L194.4,311.7 L207.9,312.6 L213.2,312.3 L233.0,304.0 L239.4,302.4 L275.3,301.3 L276.1,300.7 L274.9,298.8 L275.4,296.5 L274.6,295.7 L224.6,296.3 L223.8,294.6 L225.2,293.4 L274.5,292.7 L275.3,291.7 L272.3,288.3 L229.0,289.2 L228.1,287.8 L229.2,286.4 L240.1,286.0 L240.9,285.3 L240.4,280.6 L237.4,279.8 L236.1,278.2 L229.5,278.0 L227.9,277.0 L227.9,273.2 L230.2,265.2 L217.0,265.7 L212.8,265.1 L209.2,263.7 L208.2,261.6 L205.7,260.7 L203.2,258.6 L201.4,259.7 L202.7,262.5 L201.8,264.6 L200.4,265.2 L197.8,264.2 L195.4,267.3 L205.2,275.4 L205.5,277.1 L203.4,280.4 L205.9,282.7 L206.0,284.3 L204.1,285.4 L201.2,288.4 L193.6,282.9 L191.2,285.1 L198.0,291.4 L197.8,293.5 L196.3,293.8 L193.3,291.9 L190.2,295.1 L188.9,295.4 L184.4,290.1 L182.1,288.9 L180.9,286.5 L176.1,284.2 L175.0,286.1ZM266.4,275.0 L270.1,276.3 L272.9,275.0 L275.9,268.4 L269.3,264.7 L264.8,267.3 L262.3,269.7 L266.4,275.0ZM261.2,354.9 L264.4,357.0 L273.4,365.5 L274.7,365.5 L275.6,361.3 L266.3,352.7 L261.3,353.4 L261.2,354.9ZM274.9,349.5 L274.8,348.5 L273.0,347.5 L269.8,351.7 L271.8,352.9 L274.9,349.5ZM266.4,215.6 L265.2,216.2 L265.3,217.2 L268.2,217.6 L268.3,216.4 L266.4,215.6ZM253.9,261.9 L260.0,266.8 L265.4,262.8 L264.7,262.0 L255.4,259.7 L253.9,261.9ZM263.3,258.4 L264.2,257.8 L264.2,255.0 L257.5,253.3 L256.7,253.6 L256.6,256.7 L263.3,258.4ZM263.0,367.5 L263.9,365.9 L260.6,362.8 L257.4,365.3 L260.6,369.1 L263.0,367.5ZM238.8,277.0 L242.7,277.6 L244.5,280.2 L253.4,279.9 L257.1,277.9 L258.0,275.9 L260.7,275.0 L261.1,274.2 L258.6,271.7 L255.0,274.0 L254.5,276.0 L253.4,276.9 L252.0,276.5 L251.1,274.6 L248.2,274.5 L239.4,274.8 L238.3,276.1 L238.8,277.0ZM252.5,231.9 L247.3,252.3 L251.0,252.3 L253.3,253.2 L256.3,241.4 L255.4,239.0 L257.4,237.5 L258.6,234.8 L258.3,234.0 L253.4,231.6 L252.5,231.9ZM256.0,269.6 L256.2,268.5 L253.6,266.3 L250.0,264.7 L248.1,265.0 L248.0,266.8 L249.5,271.3 L252.8,271.5 L256.0,269.6ZM244.0,285.2 L244.7,285.9 L254.7,285.7 L255.5,284.8 L254.3,283.0 L244.7,283.3 L244.0,283.8 L244.0,285.2ZM246.7,260.6 L250.6,260.8 L253.0,257.3 L253.0,254.9 L246.2,256.0 L245.6,259.9 L246.7,260.6ZM243.8,202.8 L244.2,204.2 L247.1,206.4 L251.7,204.4 L250.7,200.9 L244.5,201.6 L243.8,202.8ZM249.1,225.3 L248.1,225.6 L247.9,227.0 L250.7,227.6 L250.9,226.3 L249.1,225.3ZM243.8,367.9 L243.8,368.9 L244.9,369.1 L248.1,365.9 L248.1,365.0 L247.0,364.7 L243.8,367.9ZM247.7,238.4 L247.2,237.5 L244.9,237.4 L243.3,243.9 L245.9,244.3 L247.7,238.4ZM242.4,109.0 L241.1,111.3 L243.9,116.4 L245.0,116.8 L246.2,115.2 L247.0,111.9 L245.3,105.2 L241.7,105.9 L241.3,107.1 L242.4,109.0ZM233.9,266.1 L238.5,269.4 L239.8,271.6 L245.7,271.0 L244.4,264.3 L242.1,264.4 L240.1,266.7 L236.3,266.3 L234.9,264.9 L233.9,266.
381381ZM244.4,229.9 L242.4,232.6 L244.6,233.4 L245.5,230.5 L244.4,229.9ZM243.0,212.5 L243.2,213.4 L244.3,213.6 L245.2,211.7 L244.0,211.1 L243.0,212.5ZM242.6,247.0 L241.7,247.5 L240.4,251.9 L241.0,252.9 L243.5,252.5 L244.8,248.5 L244.4,247.6 L242.6,247.0ZM238.4,184.8 L241.5,187.7 L243.6,185.8 L243.1,184.5 L239.7,182.7 L238.2,183.8 L238.4,184.8ZM224.8,261.1 L241.4,260.3 L242.3,256.6 L241.5,256.0 L224.6,257.1 L224.8,261.1ZM233.7,230.0 L239.2,231.6 L242.0,226.7 L241.8,225.7 L239.8,225.1 L238.0,225.6 L236.5,223.9 L235.4,224.1 L233.7,230.0ZM239.2,242.8 L240.0,242.3 L241.8,236.5 L237.4,234.8 L235.1,241.3 L239.2,242.8ZM241.5,372.0 L234.9,366.3 L233.0,368.4 L239.3,374.3 L240.2,374.4 L241.5,372.0ZM236.7,351.6 L237.7,352.9 L239.0,351.2 L237.6,350.3 L236.7,351.6ZM232.5,250.9 L234.4,253.2 L236.8,253.0 L238.5,246.0 L234.2,245.0 L232.5,250.9ZM234.8,356.4 L234.8,357.5 L235.7,358.0 L236.8,356.2 L235.8,355.5 L234.8,356.4ZM231.1,274.9 L235.1,275.1 L236.6,272.9 L236.1,271.5 L233.2,269.4 L232.3,269.9 L231.0,273.8 L231.1,274.9ZM226.7,231.8 L223.0,234.7 L223.5,236.0 L231.8,238.6 L232.7,238.2 L233.8,234.5 L233.4,233.7 L226.7,231.8ZM228.4,222.7 L228.1,223.8 L230.0,226.5 L228.1,228.5 L230.1,229.4 L232.7,221.4 L230.9,220.8 L228.4,222.7ZM220.2,242.0 L220.3,244.7 L223.6,245.3 L225.2,244.0 L227.0,244.1 L228.6,247.5 L230.3,247.0 L231.5,242.4 L231.0,241.6 L222.0,238.8 L220.2,242.0ZM223.2,207.9 L224.2,207.6 L225.9,203.7 L221.8,202.1 L219.9,206.2 L223.2,207.9ZM216.9,250.6 L215.4,253.3 L216.1,254.1 L224.1,253.8 L224.8,253.0 L224.3,250.6 L222.1,250.0 L216.9,250.6ZM222.8,224.1 L223.9,223.3 L223.0,222.0 L219.0,220.6 L218.1,220.9 L218.3,222.1 L222.8,224.1ZM222.1,106.8 L222.6,106.1 L222.1,104.2 L220.1,104.3 L220.5,106.8 L222.1,106.8ZM215.6,260.7 L216.3,261.6 L221.1,261.4 L221.2,257.4 L216.8,257.2 L215.6,260.7ZM170.4,135.7 L175.3,141.7 L180.4,142.5 L185.1,142.1 L187.2,142.8 L194.8,142.1 L196.2,139.6 L197.9,138.8 L208.7,139.1 L217.6,129.9 L219.5,126.6 L220.7,121.3 L218.9,113.5 L217.8,112.8 L212.9,114.1 L211.4,115.8 L208.4,115.9 L207.6,116.6 L207.8,118.6 L206.5,120.9 L209.9,122.8 L209.0,126.2 L211.7,126.1 L212.7,126.8 L212.9,128.1 L212.0,129.1 L209.1,130.0 L205.4,127.6 L203.4,130.2 L200.4,128.2 L198.4,129.5 L197.2,129.4 L196.3,127.7 L198.1,125.2 L194.5,121.0 L192.8,124.0 L187.4,125.7 L185.7,125.3 L184.6,122.8 L183.4,123.0 L185.3,131.7 L184.0,133.3 L182.4,132.5 L179.9,123.8 L173.3,125.0 L173.0,126.0 L175.4,130.7 L170.1,134.3 L170.4,135.7ZM214.4,233.7 L214.6,234.8 L215.7,234.7 L220.5,228.2 L220.3,227.2 L214.7,226.7 L214.6,227.7 L216.5,230.1 L214.4,233.7ZM213.6,106.5 L212.8,107.3 L213.6,108.9 L216.5,108.0 L215.9,106.3 L213.6,106.5ZM162.8,196.8 L162.6,198.2 L165.7,199.5 L182.6,203.6 L184.1,201.5 L181.6,200.5 L181.0,199.1 L183.4,196.9 L185.0,196.4 L187.2,197.2 L189.3,196.1 L191.2,198.2 L193.9,198.6 L196.6,194.9 L200.1,195.2 L202.3,192.4 L215.2,197.1 L216.0,194.4 L215.4,190.3 L207.9,164.0 L206.4,163.2 L191.6,166.5 L190.3,168.8 L189.6,173.3 L187.6,177.2 L191.9,181.2 L192.3,182.5 L188.9,186.5 L179.6,186.6 L173.3,181.1 L174.3,178.0 L171.1,175.5 L171.8,172.4 L169.0,172.6 L163.8,179.6 L166.0,182.4 L174.1,189.6 L174.5,191.0 L172.2,193.6 L164.3,195.2 L162.8,196.8ZM211.6,96.0 L204.6,96.0 L203.8,97.0 L205.0,99.4 L207.4,99.6 L209.0,102.0 L210.3,102.3 L213.2,100.5 L211.6,96.0ZM211.6,258.7 L213.0,258.5 L212.9,256.3 L209.9,256.7 L210.0,257.7 L211.6,258.7ZM213.2,224.2 L212.2,223.2 L210.6,224.2 L212.4,225.8 L213.2,224.2ZM212.5,230.9 L212.4,229.9 L209.4,227.6 L207.9,227.4 L206.9,228.4 L207.1,229.3 L209.9,230.6 L210.9,232.0 L212.5,230.9ZM202.7,197.8 L209.7,201.3 L211.0,199.7 L210.6,198.9 L203.8,196.1 L202.7,197.8ZM206.1,238.1 L198.8,248.3 L201.8,250.3 L205.7,245.9 L209.2,240.0 L206.1,238.1ZM199.5,159.6 L200.4,160.2 L206.2,158.9 L207.1,157.3 L206.4,152.4 L201.4,153.2 L199.2,154.4 L199.5,159.6ZM193.9,214.2 L189.5,213.5 L189.3,217.3 L191.1,219.2 L193.2,219.1 L194.4,216.7 L195.8,216.2 L198.1,217.2 L198.9,219.3 L202.4,220.8 L206.6,213.3 L205.1,210.9 L198.1,209.0 L195.3,213.8 L193.9,214.2ZM199.0,141.9 L196.1,143.5 L196.6,148.3 L197.4,148.8 L199.5,148.0 L201.0,149.9 L202.3,149.9 L203.7,146.1 L203.3,142.2 L202.1,141.6 L199.0,141.9ZM201.5,124.4 L202.6,124.4 L202.8,123.3 L199.9,119.5 L198.8,119.5 L198.5,12
381380.8 L201.5,124.4ZM195.2,272.4 L195.2,271.4 L193.8,270.4 L192.2,271.5 L193.8,273.4 L195.2,272.4ZM192.5,153.7 L193.3,157.7 L194.7,157.2 L194.4,153.6 L193.6,152.7 L192.5,153.7ZM191.9,262.7 L192.1,263.6 L193.3,264.3 L194.6,262.9 L193.2,261.5 L191.9,262.7ZM190.1,254.9 L193.5,256.2 L194.4,255.1 L193.7,253.2 L190.7,253.5 L190.1,254.9ZM180.6,92.5 L175.6,91.1 L175.3,92.0 L182.0,110.6 L186.0,110.9 L187.8,116.3 L189.1,116.9 L190.8,113.1 L193.9,111.2 L192.7,107.6 L188.0,104.4 L183.8,99.6 L183.7,97.1 L181.4,94.8 L180.6,92.5ZM185.4,226.6 L185.6,227.7 L189.3,229.4 L191.1,225.4 L187.4,223.5 L185.4,226.6ZM186.0,278.4 L186.4,282.8 L188.2,283.5 L190.5,280.2 L187.4,277.7 L186.0,278.4ZM184.3,268.7 L184.7,269.9 L185.6,270.1 L189.8,267.2 L190.0,266.2 L185.7,264.0 L184.3,268.7ZM185.1,200.7 L185.2,202.1 L187.2,201.8 L186.8,200.7 L185.1,200.7ZM178.4,258.4 L179.2,259.6 L181.0,258.3 L183.1,258.4 L186.5,252.7 L186.6,249.8 L181.8,246.9 L180.8,247.4 L180.1,255.3 L178.4,258.4ZM181.7,171.7 L181.8,172.7 L184.0,174.5 L185.9,173.2 L183.4,170.5 L181.7,171.7ZM181.8,146.7 L185.4,146.9 L185.8,145.8 L184.8,145.2 L182.2,145.5 L181.8,146.7ZM183.8,114.3 L181.6,115.5 L182.2,116.2 L184.3,115.5 L183.8,114.3ZM177.1,222.7 L178.0,225.0 L177.2,227.1 L179.5,228.1 L182.1,223.7 L183.8,219.0 L181.3,217.7 L179.2,218.1 L177.1,222.7ZM175.5,111.0 L176.6,111.4 L178.5,110.0 L175.7,102.0 L174.8,101.6 L172.9,102.9 L175.5,111.0ZM174.1,213.4 L174.2,214.5 L176.2,215.4 L177.6,214.6 L177.4,213.7 L175.5,212.7 L174.1,213.4ZM172.1,164.2 L173.5,166.3 L176.7,165.6 L177.2,164.6 L176.5,163.8 L172.7,163.4 L172.1,164.2ZM176.4,233.7 L169.2,229.6 L167.1,233.7 L174.3,237.5 L176.4,233.7ZM171.7,119.6 L172.5,120.1 L174.8,119.3 L173.9,116.3 L171.2,117.1 L171.7,119.6ZM169.9,93.5 L172.2,99.1 L174.1,97.9 L171.6,92.4 L169.9,93.5ZM167.5,103.9 L167.0,104.8 L169.7,113.4 L170.5,113.9 L172.3,113.2 L172.7,112.3 L169.9,103.8 L167.5,103.9ZM163.1,255.8 L162.6,259.5 L168.7,264.3 L170.3,264.0 L172.5,260.9 L172.1,260.0 L164.0,255.3 L163.1,255.8ZM166.5,130.3 L166.3,131.3 L168.1,133.2 L171.4,129.4 L170.0,128.1 L166.5,130.3ZM167.8,206.6 L166.1,209.6 L167.4,211.1 L169.8,209.4 L167.8,206.6ZM131.9,148.0 L128.9,153.6 L136.2,158.0 L135.7,160.3 L136.0,165.4 L135.1,167.1 L135.4,171.7 L140.5,179.6 L148.0,175.3 L148.3,173.9 L145.9,170.5 L145.6,168.8 L146.9,167.3 L152.1,167.0 L153.1,164.8 L151.0,162.6 L151.2,161.0 L159.9,156.7 L158.3,152.4 L158.6,151.0 L165.0,148.1 L169.9,144.3 L167.2,139.2 L162.6,140.9 L161.3,140.6 L158.7,135.1 L157.9,134.7 L145.9,140.0 L147.8,146.2 L147.1,147.8 L138.5,151.5 L134.1,150.5 L131.9,148.0ZM164.8,189.1 L166.8,191.9 L168.0,191.6 L169.3,190.0 L166.7,187.4 L164.8,189.1ZM166.3,120.9 L167.1,121.5 L168.5,121.0 L167.8,118.4 L166.3,118.7 L166.3,120.9ZM163.6,248.7 L164.3,249.4 L165.2,248.9 L166.0,244.5 L165.4,243.6 L164.1,244.7 L163.6,248.7ZM161.9,231.4 L163.9,230.5 L165.3,227.7 L165.0,226.8 L163.0,226.1 L159.7,228.5 L159.4,230.0 L161.9,231.4ZM162.7,136.6 L163.7,137.0 L165.3,135.7 L162.6,131.9 L161.5,133.5 L162.7,136.6ZM162.1,105.4 L161.3,106.2 L161.9,108.5 L164.6,109.6 L165.0,108.7 L164.0,105.5 L162.1,105.4ZM161.5,213.1 L158.5,215.7 L159.8,216.8 L162.6,214.3 L161.5,213.1ZM158.7,113.3 L161.5,114.4 L161.4,112.6 L159.0,111.2 L158.4,111.9 L158.7,113.3ZM155.9,252.6 L157.1,253.4 L159.0,251.3 L160.4,242.8 L159.9,241.9 L157.9,242.3 L155.9,252.6ZM156.1,102.7 L155.6,103.6 L156.3,104.4 L159.6,103.7 L158.8,102.0 L156.1,102.7ZM156.1,171.2 L158.3,170.6 L158.4,169.4 L156.0,169.8 L156.1,171.2ZM154.0,98.2 L153.5,99.2 L154.4,100.0 L158.0,98.9 L158.4,98.1 L157.5,97.1 L154.0,98.2ZM151.9,207.5 L153.7,209.3 L156.1,207.0 L154.1,205.7 L152.1,206.3 L151.9,207.5ZM146.2,214.1 L147.1,214.2 L150.6,211.5 L148.4,207.5 L141.8,209.5 L146.2,214.1ZM147.2,273.3 L148.7,273.4 L150.5,270.2 L150.2,269.3 L148.1,269.6 L146.8,272.1 L147.2,273.3ZM141.5,254.5 L145.3,258.5 L147.1,257.8 L147.0,256.9 L142.0,250.2 L141.1,250.9 L141.5,254.5ZM140.4,143.5 L141.9,144.1 L142.6,141.4 L141.7,141.2 L140.4,142.3 L140.4,143.5ZM129.4,195.2 L129.9,196.2 L132.1,196.6 L133.3,193.4 L130.7,192.4 L129.4,195.2ZM122.5,188.3 L124.7,189.3 L125.1,186.3 L122.7,185.8 L122.5,188.3ZM121.7,162.9 L122.3,162.0 L121.6,161.2 L118.4,161.5 L117.7,162.2 L118.4,163.2 L121.7,162.9ZM120.2,153.8 L118.6,155.8 L118.8,157.8 L121.3,158.0 L121.1,154.2 L120.2,153.8ZM120.0,173.5 L116.6,172.0 L116.0,172.8 L117.1,182.6 L118.0,183.2 L120.1,182.8 L120.6,182.0 L120.0,173.5ZM116.1,148.9 L117.2,150.3 L120.0,149.0 L118.9,147.0 L116.1,147.5 L116.1,148.9ZM112.9,170.2 L116.1,171.6 L116.9,171.2 L116.7,165.0 L112.7,165.7 L112.9,170.2ZM112.0,135.8 L112.9,134.6 L111.1,133.1 L110.7,135.3 L112.0,135.8ZM107.2,189.6 L106.4,188.8 L105.4,189.6 L106.6,202.0 L107.4,202.7 L111.2,201.6 L111.7,197.4 L108.5,195.
381386 L107.2,189.6ZM100.9,132.6 L103.6,133.7 L109.8,132.3 L110.3,131.3 L108.8,129.8 L101.4,131.5 L100.9,132.6ZM108.3,110.2 L102.7,113.2 L103.6,115.1 L109.2,111.6 L109.4,110.7 L108.3,110.2ZM105.9,138.8 L106.6,139.4 L107.7,139.0 L107.3,136.0 L105.7,136.6 L105.9,138.8ZM101.8,124.4 L103.2,126.8 L105.5,126.3 L106.1,125.2 L104.8,123.3 L102.4,123.6 L101.8,124.4ZM100.3,198.3 L97.0,200.6 L98.3,202.0 L98.8,204.9 L103.5,203.6 L101.8,189.8 L99.7,190.6 L100.3,198.3ZM92.4,156.9 L92.8,162.4 L102.1,160.7 L101.0,153.3 L97.5,153.5 L95.5,152.7 L94.7,154.8 L92.4,156.9ZM96.9,138.5 L97.7,142.5 L102.0,141.5 L100.6,137.0 L96.9,138.5ZM94.1,171.2 L98.0,171.0 L97.6,168.8 L93.9,169.1 L94.1,171.2ZM94.8,194.6 L95.6,195.3 L96.9,194.6 L96.0,190.9 L94.5,191.5 L94.8,194.6ZM93.7,203.4 L94.4,204.1 L95.2,203.7 L96.0,200.9 L95.6,200.1 L93.6,200.5 L93.7,203.4ZM91.9,182.8 L93.1,187.9 L95.1,187.6 L94.7,181.9 L93.3,181.8 L91.9,182.8ZM83.8,196.2 L84.5,207.8 L90.5,207.6 L90.1,199.1 L87.3,197.3 L85.9,193.3 L84.9,193.5 L83.8,196.2ZM85.9,150.8 L83.9,152.6 L85.8,154.5 L89.8,153.7 L88.9,148.6 L86.5,148.9 L85.9,150.8ZM74.5,150.5 L70.0,155.9 L70.6,156.7 L76.7,156.5 L78.4,159.1 L81.5,159.3 L85.8,162.4 L87.0,166.2 L89.4,165.8 L88.8,157.8 L85.0,157.7 L82.5,155.7 L79.9,155.8 L78.5,150.1 L74.5,150.5ZM78.5,168.4 L79.6,179.5 L78.8,181.5 L79.2,185.9 L79.8,186.6 L82.0,186.4 L82.7,185.6 L82.1,177.5 L84.5,174.7 L83.8,167.5 L83.1,166.8 L79.2,167.2 L78.5,168.4ZM70.4,159.8 L69.7,160.6 L70.4,161.9 L74.5,161.5 L75.1,160.8 L74.4,159.5 L70.4,159.8ZM65.8,183.5 L66.1,187.8 L68.1,187.0 L67.8,183.5 L65.8,183.5ZM57.3,192.7 L57.7,193.5 L61.6,195.2 L63.5,194.2 L63.9,192.7 L63.2,191.8 L58.1,190.8 L57.3,192.7ZM41.0,193.8 L41.8,196.2 L43.9,196.1 L45.4,191.2 L45.0,190.4 L42.4,189.9 L41.0,193.8Z"/><path class="sh sh-pilot" data-ly="pilot" d="M105.2,242.1 L106.9,240.1 L108.6,239.8 L116.0,244.2 L120.2,240.2 L114.7,234.5 L114.8,233.2 L116.7,230.9 L118.4,230.6 L121.1,232.8 L125.0,234.1 L125.8,233.3 L124.2,231.1 L124.8,229.5 L126.4,229.4 L128.7,231.3 L130.0,230.6 L130.1,227.6 L128.6,226.4 L126.9,226.7 L124.5,225.5 L119.8,221.3 L117.3,216.2 L117.9,214.6 L120.7,213.2 L122.5,213.6 L124.9,212.3 L132.1,217.7 L137.5,211.3 L136.9,208.7 L138.1,207.0 L153.9,202.6 L159.7,204.7 L162.1,202.9 L161.8,201.4 L150.3,196.1 L145.9,196.5 L142.3,195.0 L140.6,197.1 L140.8,199.3 L139.6,200.8 L134.6,199.5 L130.2,199.6 L126.4,197.6 L125.0,192.3 L122.3,193.1 L120.8,192.4 L119.5,190.3 L119.3,186.8 L118.5,186.3 L114.2,187.6 L114.9,192.3 L112.6,196.5 L114.3,198.6 L113.8,203.4 L112.4,204.6 L92.8,210.5 L84.2,211.4 L76.7,209.5 L74.1,206.8 L72.0,199.4 L70.3,198.3 L68.1,200.6 L64.2,198.8 L60.7,200.8 L57.9,199.8 L57.5,196.8 L54.5,196.2 L52.5,201.4 L50.6,202.5 L41.7,201.1 L40.0,198.6 L38.7,198.1 L37.0,200.6 L35.6,200.9 L34.1,198.7 L31.9,198.8 L30.9,197.5 L32.6,193.4 L31.0,191.6 L31.6,188.0 L30.0,185.8 L32.0,180.6 L33.5,180.3 L57.1,187.2 L58.0,180.7 L59.8,180.3 L61.6,182.1 L63.1,180.5 L64.6,180.2 L65.0,176.4 L66.8,174.9 L66.1,171.7 L64.5,170.8 L64.1,169.7 L66.3,167.0 L65.2,163.1 L64.9,159.5 L65.6,156.3 L65.0,154.7 L67.4,150.1 L71.6,146.6 L73.8,147.2 L81.1,144.4 L83.0,144.9 L88.1,144.4 L94.0,142.6 L93.9,139.7 L91.7,139.4 L90.8,138.5 L89.9,131.8 L91.7,130.5 L92.1,128.8 L93.5,127.8 L94.5,125.7 L93.2,123.6 L93.5,122.2 L99.0,121.0 L102.0,118.7 L100.2,116.3 L95.4,118.2 L91.9,116.9 L92.5,114.8 L95.1,115.1 L98.2,113.6 L96.7,110.3 L90.3,111.2 L86.3,109.3 L86.4,108.0 L87.3,107.2 L90.7,108.0 L94.0,107.4 L94.6,106.7 L88.9,95.0 L86.7,94.9 L85.7,94.0 L86.1,92.3 L88.7,90.8 L90.5,91.4 L96.9,103.6 L103.3,99.8 L102.5,96.0 L103.5,95.0 L104.8,95.2 L107.6,100.2 L107.8,102.4 L110.1,103.1 L111.6,105.4 L111.4,108.0 L113.8,111.4 L115.8,111.3 L116.7,112.0 L116.6,113.7 L112.4,117.4 L116.9,124.6 L120.3,123.6 L122.9,125.9 L122.6,128.8 L121.8,130.0 L119.8,131.2 L117.9,130.8 L115.1,131.7 L119.3,136.7 L125.0,134.3 L125.1,127.6 L127.1,125.3 L129.4,124.6 L131.2,126.9 L134.6,126.0 L133.8,124.1 L134.2,122.4 L133.0,120.5 L130.4,110.7 L131.1,107.3 L136.3,105.4 L135.2,99.6 L136.3,97.9 L140.2,96.7 L141.5,97.2 L141.7,101.9 L145.4,102.2 L146.5,103.1 L150.9,119.2 L151.8,119.5 L155.4,118.2 L146.9,85.2 L148.1,83.5 L154.5,81.6 L155.8,82.6 L155.6,84.0 L150.7,85.9 L150.4,87.1 L151.3,87.7 L156.8,86.7 L160.9,81.3 L159.2,78.1 L156.4,76.4 L156.3,75.2 L157.2,74.2 L161.0,75.5 L164.0,80.4 L163.6,83.0 L160.0,87.0 L159.6,90.2 L161.9,98.7 L167.4,97.2 L166.8,91.5 L170.8,88.8 L168.8,87.1 L168.6,85.7 L173.0,83.8 L174.1,84.6 L174.6,86.7 L176.9,86.7 L178.4,88.6 L181.4,89.3 L183.3,90.6 L184.1,93.2 L186.6,95.9 L187.0,98.7 L190.0,102.0 L192.1,103.0 L193.0,102.1 L191.1,95.5 L193.9,90.2 L195.2,90.1 L200.7,92.9 L202.7,90.7 L204.2,90.2 L206.1,90.8 L208.1,93.2 L210.1,92.9 L210.6,92.1 L206.2,81.3 L201.0,77.1 L197.4,76.3 L195.8,73.1 L192.9,74.0 L191.5,73.2 L191.5,71.7 L193.3,70.0 L191.5,67.1 L192.7,65.5 L196.4,67.5 L199.7,73.8 L202.7,74.5 L205.3,76.7 L207.6,71.1 L211.6,65.3 L215.7,60.6 L217.9,60.9 L217.9,62.7 L211.1,71.5 L213.9,74.0 L214.0,75.7 L212.6,76.5 L2
3813809.8,75.3 L208.9,77.1 L208.9,79.6 L213.3,90.4 L214.3,91.4 L220.8,88.7 L222.6,86.9 L222.4,86.0 L218.6,82.7 L219.0,80.7 L220.7,80.5 L225.1,83.9 L227.9,79.6 L227.9,76.4 L224.5,69.6 L223.9,66.8 L223.7,64.3 L225.2,59.8 L226.5,59.3 L227.8,60.2 L226.8,64.7 L227.4,68.3 L228.6,70.0 L233.7,68.0 L235.2,66.5 L236.9,66.8 L237.3,68.2 L236.0,70.2 L230.3,73.2 L231.1,78.3 L236.8,79.3 L241.6,77.7 L242.8,78.8 L242.6,80.2 L237.3,82.3 L230.5,81.8 L222.8,91.2 L215.5,94.7 L218.3,101.3 L222.7,100.3 L226.5,101.1 L230.6,104.2 L255.6,98.0 L257.1,96.6 L262.0,95.7 L262.6,94.0 L260.5,89.5 L257.7,86.8 L255.0,82.0 L255.7,79.9 L257.4,80.2 L260.1,84.8 L262.1,86.5 L265.2,85.2 L269.0,80.6 L270.4,81.0 L271.5,82.8 L275.2,82.8 L276.3,84.2 L277.2,91.6 L282.3,91.3 L284.1,93.9 L284.7,96.4 L287.9,96.4 L289.0,97.3 L288.5,99.2 L285.2,100.1 L285.2,103.5 L283.9,104.2 L282.7,103.5 L281.0,96.9 L280.2,96.3 L270.1,98.9 L271.8,107.2 L270.6,108.8 L269.0,108.2 L267.5,104.5 L265.5,105.1 L261.1,103.6 L260.5,104.8 L260.9,107.5 L258.5,108.9 L257.0,108.2 L255.8,105.8 L256.5,103.0 L256.0,102.2 L249.1,104.1 L248.7,105.0 L250.1,111.9 L249.7,114.7 L251.7,116.2 L251.9,117.6 L250.7,118.6 L248.0,118.1 L242.0,122.5 L241.8,123.4 L244.0,126.1 L247.3,127.9 L255.2,128.6 L256.0,128.0 L256.4,125.7 L261.2,122.3 L262.7,122.6 L266.0,126.4 L268.3,126.0 L268.4,123.9 L270.6,120.2 L275.5,121.3 L275.5,124.0 L279.1,126.5 L279.8,130.5 L282.2,133.8 L284.6,140.0 L284.4,144.3 L280.7,151.7 L278.3,164.0 L281.4,170.9 L286.3,178.3 L291.3,203.3 L294.5,207.7 L298.7,211.8 L299.6,211.6 L300.0,209.6 L301.3,208.9 L302.5,209.4 L303.5,211.6 L309.7,211.5 L310.2,212.9 L309.3,214.7 L311.8,221.4 L312.8,221.0 L316.8,212.1 L318.0,211.5 L319.1,212.0 L319.5,213.6 L314.5,224.5 L317.0,226.3 L316.2,229.3 L316.9,230.2 L318.4,229.8 L324.4,216.2 L322.4,214.3 L322.4,212.7 L323.5,212.0 L325.7,212.3 L327.3,209.8 L329.1,209.9 L329.6,211.7 L321.7,229.8 L322.1,230.6 L324.2,231.2 L325.0,230.7 L332.9,211.6 L334.3,210.9 L335.6,211.8 L333.5,218.6 L336.2,220.1 L341.2,207.3 L338.5,206.2 L332.2,205.7 L329.4,204.1 L326.4,206.2 L322.5,207.2 L321.7,206.2 L322.0,204.9 L327.1,201.5 L325.5,199.3 L323.6,198.3 L321.0,198.7 L317.5,201.7 L316.4,208.1 L315.1,209.2 L313.5,208.0 L314.0,203.5 L313.5,202.7 L308.9,202.1 L300.1,197.0 L296.7,200.0 L293.8,200.0 L293.4,198.0 L296.0,196.7 L296.6,195.3 L294.1,193.5 L291.6,189.8 L291.1,188.1 L291.7,185.9 L290.2,181.6 L289.0,173.0 L284.3,170.1 L283.9,169.0 L284.5,167.8 L285.9,167.6 L290.0,169.7 L292.8,167.3 L297.3,166.0 L314.2,166.5 L316.6,167.6 L317.6,169.6 L319.1,180.9 L318.8,186.4 L315.6,191.9 L309.3,197.5 L309.4,198.5 L311.3,199.1 L315.4,199.0 L320.2,195.5 L324.4,194.6 L327.3,187.5 L332.9,178.4 L333.4,172.6 L334.5,169.4 L342.8,163.1 L341.6,160.4 L341.8,159.1 L343.6,158.6 L346.2,160.6 L352.6,156.4 L354.8,153.6 L356.6,154.7 L355.6,157.7 L356.6,160.0 L361.6,164.6 L362.5,167.4 L364.4,169.0 L363.7,170.5 L359.7,171.7 L350.1,180.2 L358.5,188.4 L367.9,181.3 L369.8,181.1 L373.1,183.3 L380.2,175.4 L380.4,170.3 L378.5,168.3 L377.9,166.4 L379.3,160.0 L379.0,157.7 L380.4,156.1 L382.1,156.8 L382.6,159.2 L387.5,159.9 L389.6,161.9 L391.6,160.5 L393.0,160.7 L394.2,163.3 L408.2,174.9 L410.6,172.3 L408.1,168.6 L410.6,164.2 L404.5,161.7 L402.3,158.1 L399.9,156.5 L400.0,154.8 L402.1,154.4 L404.4,155.9 L406.7,159.5 L410.1,160.3 L416.1,164.1 L416.9,163.9 L417.5,162.7 L401.7,149.1 L401.4,147.7 L402.0,146.4 L404.3,144.3 L406.5,144.3 L410.9,138.9 L395.9,126.5 L395.8,124.4 L397.3,123.9 L400.5,125.7 L419.1,142.2 L420.1,142.1 L420.8,140.6 L422.1,140.2 L425.4,142.5 L426.5,141.0 L423.2,137.6 L423.5,135.7 L425.3,135.4 L429.1,138.6 L432.6,134.6 L424.2,131.4 L422.8,128.6 L424.6,127.6 L428.5,129.9 L429.7,127.9 L431.1,127.6 L435.0,131.6 L436.0,131.6 L436.7,130.4 L435.8,128.1 L437.2,126.1 L432.7,122.6 L433.1,120.5 L434.8,120.5 L441.7,125.3 L445.4,121.5 L443.5,118.7 L444.3,117.1 L445.6,117.0 L448.1,118.6 L453.4,114.0 L460.5,118.3 L466.0,112.7 L466.8,109.4 L468.1,109.1 L470.0,110.2 L470.7,112.5 L468.7,114.6 L468.7,115.6 L478.9,124.3 L483.4,124.4 L487.3,126.7 L487.6,128.4 L486.0,129.3 L482.5,127.6 L478.4,127.6 L475.0,124.9 L474.0,125.0 L471.4,128.0 L473.8,130.7 L473.5,132.4 L471.9,132.8 L468.6,130.7 L464.8,134.9 L471.0,141.1 L473.3,139.6 L475.0,140.3 L474.8,142.9 L473.2,144.8 L474.1,147.4 L473.8,149.1 L472.2,150.1 L470.2,149.4 L469.7,144.6 L462.9,137.7 L462.0,137.6 L458.7,141.5 L464.5,147.1 L464.7,148.9 L462.6,149.4 L456.7,144.1 L455.8,144.1 L455.1,145.4 L457.0,147.6 L455.1,151.1 L458.3,154.3 L458.5,155.9 L456.5,156.7 L453.2,154.3 L452.3,157.1 L449.7,157.4 L449.4,158.4 L461.7,171.6 L463.5,172.4 L480.4,164.9 L481.1,162.5 L483.7,161.0 L486.3,161.9 L488.9,160.8 L493.2,160.8 L494.1,161.7 L493.9,163.1 L491.4,164.1 L489.6,166.4 L493.0,169.7 L493.3,171.0 L492.5,172.1 L491.2,172.1 L487.2,168.8 L485.4,168.5 L483.9,166.7 L473.1,172.1 L47
381387.1,181.0 L482.7,186.1 L482.1,189.4 L480.8,190.6 L476.2,189.5 L473.6,187.1 L469.8,190.4 L467.9,189.9 L466.3,188.2 L464.3,189.6 L463.1,189.6 L452.0,178.2 L451.0,179.0 L451.8,183.9 L450.2,185.4 L450.2,186.3 L452.0,187.8 L456.6,188.9 L460.7,192.1 L462.2,194.1 L475.5,206.4 L479.6,211.2 L478.2,214.4 L485.5,222.2 L486.5,221.7 L486.3,219.4 L487.8,214.6 L497.8,203.2 L499.6,203.1 L500.2,205.2 L490.8,215.8 L490.2,217.4 L493.8,220.0 L495.0,218.4 L495.4,215.0 L497.3,214.4 L505.7,221.4 L507.5,221.9 L508.3,223.5 L511.3,225.8 L512.7,224.6 L512.8,222.9 L509.6,218.9 L512.7,214.2 L502.3,204.6 L502.8,203.4 L506.3,200.4 L509.6,195.5 L514.0,192.8 L506.5,185.8 L506.4,184.3 L507.8,182.8 L509.8,182.8 L510.5,185.1 L526.6,198.9 L532.1,200.7 L537.3,195.7 L544.5,198.0 L549.1,193.2 L558.1,190.6 L559.4,190.8 L560.8,192.5 L560.4,196.0 L554.8,203.4 L561.0,208.9 L561.2,211.3 L564.0,214.8 L568.8,218.0 L571.5,218.0 L572.7,219.7 L561.3,233.4 L561.4,234.8 L565.3,238.2 L565.2,239.9 L563.8,240.5 L562.0,239.5 L560.3,240.0 L558.6,239.4 L557.5,241.7 L567.0,250.4 L567.3,252.2 L565.6,253.5 L563.1,252.6 L562.1,254.9 L561.0,255.5 L557.2,252.5 L554.7,255.4 L555.1,256.3 L557.0,256.7 L557.9,258.0 L559.7,258.0 L560.6,258.8 L560.7,260.1 L558.6,264.1 L563.9,269.0 L563.0,272.7 L564.8,275.1 L564.2,276.3 L560.2,279.2 L555.4,275.0 L554.5,275.0 L554.0,276.2 L555.4,277.0 L555.7,278.7 L552.8,280.9 L553.4,282.4 L555.6,282.3 L557.3,283.4 L558.5,286.0 L558.0,287.8 L556.0,289.2 L556.3,294.2 L555.4,296.7 L557.7,318.5 L559.3,323.5 L562.4,325.6 L564.8,323.9 L561.8,318.8 L562.6,316.9 L564.3,317.2 L568.0,321.5 L572.0,318.4 L570.3,315.3 L570.8,313.7 L574.1,313.6 L575.9,315.6 L578.5,313.8 L578.8,311.4 L576.5,308.4 L576.5,307.0 L577.7,306.2 L580.0,306.3 L579.7,304.1 L580.5,300.4 L584.3,296.8 L584.9,295.2 L587.2,293.6 L588.4,293.4 L590.1,294.5 L593.9,292.8 L598.7,298.4 L605.0,294.7 L606.0,295.5 L605.8,297.6 L606.9,299.3 L605.8,301.2 L603.0,299.5 L600.9,300.9 L602.6,304.5 L601.9,306.1 L600.3,306.0 L597.6,303.4 L591.6,308.2 L611.6,335.2 L611.7,336.5 L610.3,338.1 L610.5,340.8 L609.2,341.3 L607.2,340.2 L603.7,342.8 L601.1,341.9 L599.0,343.3 L595.5,340.4 L593.4,342.3 L591.3,342.6 L579.3,351.8 L584.0,358.8 L583.3,360.9 L581.8,360.8 L579.5,358.7 L572.6,363.1 L568.8,359.6 L562.2,364.0 L558.7,361.4 L547.4,369.8 L547.9,370.9 L552.3,372.6 L555.8,371.4 L561.5,373.8 L564.4,376.8 L567.1,377.0 L568.1,379.7 L569.2,379.4 L570.5,376.5 L573.4,373.7 L573.4,371.7 L574.4,370.7 L576.0,371.1 L578.5,374.6 L581.8,375.7 L581.9,377.9 L578.2,378.2 L576.6,380.0 L577.2,382.9 L573.0,386.3 L574.2,390.4 L573.8,391.6 L572.6,392.2 L571.5,391.7 L569.2,386.3 L560.6,383.6 L559.8,381.8 L560.2,379.1 L555.3,377.0 L553.9,379.2 L555.9,385.4 L559.0,386.2 L559.5,388.1 L558.3,388.9 L553.9,388.7 L551.3,390.0 L549.1,389.7 L547.3,386.5 L548.0,384.8 L551.3,382.6 L550.8,378.8 L551.5,375.9 L549.0,375.2 L547.4,379.7 L547.5,382.4 L546.5,383.2 L545.3,383.0 L544.3,379.5 L546.1,373.7 L543.5,371.5 L542.7,371.9 L542.3,373.8 L538.9,377.0 L536.7,385.1 L535.0,386.3 L534.6,387.6 L546.1,393.7 L546.7,394.7 L546.3,396.0 L544.6,396.3 L534.7,391.5 L532.7,391.8 L526.6,388.8 L525.5,389.3 L525.7,391.0 L542.6,399.6 L549.4,397.0 L552.7,397.7 L557.9,394.9 L561.6,393.9 L563.4,394.7 L562.8,396.7 L557.4,398.4 L554.0,401.0 L554.1,405.6 L551.9,407.8 L554.0,410.8 L555.0,414.4 L554.3,416.9 L551.9,419.1 L549.5,419.3 L542.1,415.0 L541.9,413.6 L544.2,410.1 L544.8,406.2 L543.2,404.5 L542.2,404.6 L541.2,406.4 L541.8,408.2 L541.3,409.4 L540.2,409.8 L538.4,409.2 L537.5,410.4 L538.7,412.6 L538.6,416.4 L555.4,425.8 L556.1,427.1 L555.2,428.5 L550.6,427.0 L550.3,429.8 L548.8,430.6 L543.0,427.6 L540.5,425.2 L540.6,421.1 L537.6,419.5 L535.2,420.2 L533.8,418.8 L535.0,416.5 L535.3,413.7 L526.8,411.2 L525.8,412.0 L527.0,413.7 L527.0,415.8 L532.1,417.6 L533.1,418.8 L532.2,420.0 L530.9,420.4 L524.9,418.7 L522.9,417.0 L521.1,418.3 L517.9,417.8 L517.0,419.9 L517.5,421.1 L525.2,425.1 L527.9,425.5 L531.4,424.3 L535.1,426.3 L536.9,433.2 L535.5,434.1 L533.2,433.2 L529.6,435.5 L529.5,437.0 L532.6,438.2 L539.2,443.3 L543.8,442.0 L549.5,442.0 L551.4,441.2 L552.7,442.0 L552.6,443.6 L550.8,445.0 L544.3,445.0 L535.6,448.5 L531.2,449.3 L510.6,443.7 L509.1,447.7 L512.5,449.2 L513.0,450.9 L511.7,451.9 L508.2,451.2 L507.2,453.4 L507.8,454.3 L512.7,455.5 L519.6,451.9 L521.5,452.8 L521.1,454.5 L515.9,457.8 L510.6,458.7 L509.1,462.2 L509.6,463.3 L512.1,463.0 L513.9,463.6 L515.8,465.8 L516.0,468.4 L514.5,473.3 L515.5,476.0 L516.6,476.0 L518.9,473.4 L520.7,472.8 L525.7,473.6 L528.1,475.3 L531.8,480.2 L534.6,481.3 L536.7,480.5 L538.1,480.9 L539.4,483.0 L541.5,484.4 L542.3,484.0 L542.9,482.0 L544.3,481.7 L546.7,484.0 L548.7,484.7 L549.5,484.1 L549.8,481.0 L544.7,478.7 L544.1,477.7 L544.5,476.5 L545.9,476.0 L550.7,477.9 L558.7,478.9 L559.3,477.8 L557.4,474.4 L557.9,473.4 L559.2,473.0 L562.5,476.9 L563.2,479.3 L568.9,478.1 L570.0,479.0 L570.0,480.3 L564.0,482.5 L553.5,481.5 L552.4,485.1 L552.8,486.0 L562.2,488.4 L565.6,491.2 L570.0,492.0 L574.2,484.7 L575.5,484.2 L576.6,484.9 L575.9,488.1 L568.7,501.8 L550.9,524.7 L546.7,531.2 L548.1,534.9 L547.4,537.6 L548.7,538.7 L553.8,534.5 L565.1,521.2 L574.4,528.6 L574.4,530.5 L572.6,531.0 L565.6,525.3 L562.6,528.6 L576.9,542.6 L576.5,543.8 L567.4,554.2 L565.1,555.2 L566.6,557.8 L569.4,558.6 L568.7,561.8 L566.8,562.6 L560.9,560.3 L559.6,558.3 L553.2,553.3 L552.3,5
3813853.3 L549.4,563.8 L550.0,567.0 L547.3,568.2 L544.6,573.9 L543.8,576.4 L543.9,580.3 L542.8,581.1 L541.5,580.7 L540.7,577.6 L541.0,574.7 L545.4,563.6 L547.6,560.0 L548.4,554.1 L547.5,551.9 L549.8,549.0 L548.7,547.5 L546.5,547.3 L543.4,544.5 L538.4,543.8 L533.8,539.5 L529.8,538.2 L529.0,537.0 L529.4,534.5 L527.3,532.1 L529.3,529.8 L530.0,526.7 L522.4,521.5 L519.7,525.0 L518.0,525.2 L517.1,523.8 L518.4,520.6 L516.4,519.1 L513.5,522.2 L509.2,520.5 L504.6,526.4 L501.8,527.0 L502.3,528.8 L508.2,533.6 L511.8,532.0 L514.2,533.4 L514.5,534.8 L513.6,535.9 L511.6,535.8 L510.0,537.8 L508.9,538.1 L503.2,533.0 L502.0,533.2 L501.7,535.2 L507.4,540.7 L507.7,542.2 L505.9,543.2 L501.5,540.3 L498.0,539.7 L497.2,545.7 L497.9,546.3 L500.6,546.1 L502.1,548.1 L505.9,548.5 L506.7,550.3 L505.4,551.4 L499.8,551.4 L498.9,552.5 L498.7,555.5 L497.7,557.0 L498.3,560.1 L495.7,563.0 L494.0,563.0 L493.0,559.6 L495.5,520.8 L494.3,521.0 L492.2,525.0 L489.5,525.2 L488.9,527.1 L487.2,542.4 L489.3,552.2 L489.1,554.0 L487.0,554.9 L484.8,553.7 L483.7,541.8 L480.9,541.5 L479.7,542.1 L478.2,547.8 L476.7,547.9 L475.8,546.6 L476.5,541.4 L477.6,539.8 L480.2,538.5 L484.4,538.2 L486.3,524.6 L492.4,515.1 L490.5,512.8 L490.3,510.5 L488.5,510.1 L486.1,514.8 L484.7,516.5 L483.4,516.8 L482.3,514.9 L485.3,509.0 L479.9,507.1 L477.9,511.8 L478.2,515.2 L474.0,526.1 L470.1,528.6 L465.7,527.3 L464.6,524.8 L466.5,518.9 L467.2,512.0 L460.7,504.7 L456.8,501.3 L454.8,501.5 L453.3,500.4 L451.4,500.8 L448.5,499.9 L445.2,496.4 L445.3,495.1 L446.4,494.4 L449.8,495.9 L453.1,491.7 L453.1,490.7 L445.3,486.6 L439.3,481.4 L438.7,479.3 L417.8,462.7 L413.4,462.3 L411.7,461.4 L409.5,462.0 L407.7,460.0 L405.4,460.7 L403.5,462.7 L406.0,465.5 L405.8,467.2 L404.1,467.6 L401.0,465.3 L398.3,468.0 L402.3,472.5 L402.1,476.4 L400.1,476.5 L399.2,473.7 L395.7,470.9 L393.2,473.6 L395.8,477.2 L394.5,479.6 L392.6,479.7 L391.9,477.2 L390.4,476.3 L387.8,478.9 L388.0,480.9 L387.3,482.4 L385.5,483.1 L383.8,482.5 L383.0,480.3 L384.4,477.8 L382.2,475.5 L382.5,473.8 L384.0,473.3 L387.1,475.1 L389.5,472.4 L387.5,469.9 L387.7,468.2 L389.4,467.8 L392.1,469.8 L394.7,467.2 L392.7,464.4 L393.1,462.7 L394.6,462.4 L397.5,464.1 L399.9,461.5 L399.1,459.6 L399.5,458.3 L400.8,457.9 L402.7,458.8 L404.8,457.4 L402.7,451.5 L402.8,449.7 L396.4,444.3 L389.1,434.9 L380.8,436.7 L379.6,436.3 L377.2,430.1 L378.1,427.5 L375.1,425.0 L370.6,426.4 L369.5,427.9 L367.4,428.5 L366.9,437.1 L369.2,438.2 L369.6,439.8 L367.1,441.1 L364.4,440.3 L363.7,438.8 L364.3,426.3 L363.8,424.8 L365.0,385.2 L362.0,381.1 L359.0,382.9 L354.8,383.7 L353.6,383.2 L352.4,380.9 L352.6,379.6 L354.4,378.2 L356.4,378.4 L357.1,377.6 L356.8,376.7 L354.0,375.1 L354.6,372.1 L346.8,363.6 L337.1,354.6 L334.9,356.1 L332.9,355.9 L331.4,357.6 L332.8,360.1 L332.1,361.7 L331.0,361.9 L328.5,360.3 L327.6,360.5 L327.1,362.4 L321.3,369.5 L320.0,369.7 L317.8,367.9 L316.9,368.1 L315.1,370.8 L317.4,373.2 L317.4,374.6 L316.0,375.4 L313.9,374.7 L311.8,377.0 L312.7,379.6 L311.8,381.1 L310.0,381.1 L308.0,379.1 L306.9,379.5 L306.9,380.7 L309.5,381.8 L310.4,384.1 L307.9,385.5 L303.3,391.0 L299.0,388.5 L298.8,386.8 L296.8,384.1 L296.0,379.3 L297.0,378.4 L303.7,377.3 L303.7,376.3 L300.9,373.6 L301.5,371.8 L303.0,371.7 L306.2,373.8 L310.3,369.3 L312.6,368.7 L314.7,365.7 L313.0,363.7 L312.9,362.4 L316.8,357.6 L316.8,355.2 L318.0,352.3 L312.1,347.4 L311.1,347.5 L306.7,352.9 L307.7,355.2 L310.1,355.9 L310.3,357.6 L300.0,370.0 L298.7,370.8 L296.2,369.8 L291.1,365.3 L288.2,364.8 L284.9,362.1 L283.9,362.1 L278.1,369.4 L281.6,372.4 L286.2,373.2 L287.3,374.0 L287.9,379.2 L287.4,381.3 L284.9,382.8 L281.2,382.4 L279.4,386.2 L277.7,386.8 L276.2,384.6 L277.8,381.8 L277.6,380.4 L272.7,376.2 L263.5,385.6 L263.1,387.7 L261.1,390.5 L260.6,395.3 L264.3,398.3 L266.4,397.4 L267.9,397.9 L268.6,401.0 L271.7,403.7 L271.7,406.7 L269.5,409.5 L268.2,409.4 L267.4,408.3 L268.6,404.7 L263.5,402.8 L261.0,399.2 L257.2,396.6 L258.2,389.3 L260.2,385.9 L257.5,383.2 L256.6,383.3 L253.8,385.7 L246.2,388.2 L233.7,388.0 L233.2,386.5 L234.3,385.4 L245.7,385.2 L252.4,382.9 L255.7,379.0 L253.5,377.2 L250.0,379.8 L246.1,381.2 L243.5,381.3 L240.8,380.1 L229.2,370.0 L228.9,367.5 L231.7,363.9 L231.6,362.9 L225.0,356.9 L219.8,357.0 L217.3,354.6 L217.3,353.0 L2
3813818.7,352.3 L220.9,353.3 L222.0,351.3 L223.6,351.0 L230.9,357.7 L233.5,352.7 L234.1,348.9 L236.4,347.4 L242.8,348.4 L246.4,350.2 L256.5,352.9 L262.2,348.8 L264.2,348.4 L265.6,346.2 L261.5,341.6 L262.2,340.5 L264.0,340.1 L264.5,339.3 L262.1,337.3 L258.5,336.2 L256.0,337.6 L253.6,336.9 L252.7,334.9 L251.2,334.4 L248.7,335.4 L245.7,334.2 L244.8,332.2 L241.1,330.7 L240.2,331.2 L238.7,336.1 L237.6,336.7 L236.4,336.2 L236.0,334.9 L237.5,329.5 L237.0,327.6 L238.4,326.1 L240.2,319.9 L241.7,319.2 L243.0,320.3 L241.4,326.8 L241.9,327.7 L245.8,329.1 L247.1,327.3 L248.2,326.9 L257.2,329.0 L257.9,328.3 L257.6,326.6 L245.9,323.7 L245.1,322.9 L245.2,321.6 L246.7,320.8 L256.6,322.8 L256.7,320.0 L265.9,308.3 L274.7,308.3 L276.7,310.4 L279.0,308.9 L281.8,308.5 L284.4,310.2 L286.0,310.0 L289.0,311.2 L290.3,310.8 L290.4,309.7 L288.5,308.4 L284.4,306.7 L278.5,306.0 L255.8,306.4 L253.4,308.4 L252.2,307.7 L251.4,304.9 L244.8,305.0 L235.9,306.3 L217.8,314.2 L211.7,315.6 L194.1,314.8 L186.8,313.1 L181.9,309.6 L177.4,301.3 L175.2,299.0 L169.8,296.6 L166.8,296.2 L165.0,296.9 L163.8,296.1 L164.7,292.2 L167.4,291.5 L168.7,289.8 L173.1,278.0 L169.8,275.1 L171.1,270.8 L170.6,267.7 L166.4,266.7 L163.8,265.0 L159.5,260.7 L158.7,257.0 L151.2,262.0 L150.8,263.8 L156.5,266.6 L159.8,270.6 L160.4,274.2 L159.0,280.7 L159.6,283.2 L157.2,286.3 L154.5,285.0 L151.0,287.1 L149.4,286.5 L146.1,281.1 L146.4,277.1 L142.9,275.7 L142.1,274.5 L146.0,267.1 L147.5,266.0 L147.6,264.0 L146.7,262.3 L142.0,259.8 L138.7,255.9 L135.4,254.9 L135.2,252.6 L136.7,250.9 L137.3,243.7 L135.1,240.6 L130.9,244.0 L127.8,242.8 L121.2,247.1 L125.9,254.5 L125.7,267.8 L127.0,276.6 L129.8,277.3 L130.4,278.8 L129.5,280.0 L123.3,281.5 L123.4,283.7 L122.5,285.7 L123.5,289.6 L120.3,293.0 L118.4,293.9 L117.4,296.9 L115.6,297.9 L114.5,300.1 L115.3,302.8 L114.5,304.1 L112.8,304.6 L111.6,303.9 L109.9,297.0 L104.1,298.2 L102.6,294.7 L98.4,294.7 L97.1,289.6 L94.9,289.1 L93.3,287.5 L87.3,288.0 L82.9,286.7 L76.1,291.1 L74.8,290.6 L73.3,288.6 L70.3,288.5 L68.7,290.8 L66.0,289.8 L61.5,292.0 L61.1,294.1 L59.9,295.0 L58.4,294.4 L56.5,290.3 L53.6,292.1 L51.7,292.0 L48.5,294.9 L51.3,299.2 L50.5,301.2 L51.8,304.4 L50.0,306.3 L48.0,305.8 L43.9,299.4 L41.5,300.2 L40.3,299.7 L38.1,297.2 L38.5,294.9 L37.4,293.7 L32.0,297.5 L30.1,297.1 L28.8,294.1 L32.2,290.8 L28.8,286.6 L30.5,283.5 L28.8,279.8 L29.6,279.0 L30.9,279.0 L35.0,283.3 L37.0,281.6 L37.9,276.3 L42.9,276.0 L40.8,268.2 L41.2,266.8 L44.9,265.3 L46.6,266.1 L47.1,268.6 L44.8,270.6 L47.7,278.4 L54.7,274.6 L50.0,262.1 L41.7,262.2 L38.9,264.0 L36.7,263.5 L31.7,265.1 L30.2,264.2 L30.8,262.2 L38.3,259.6 L38.9,253.5 L40.8,251.9 L41.1,249.4 L47.9,248.4 L49.2,249.1 L50.9,259.0 L55.0,258.6 L56.6,256.9 L59.5,255.5 L63.2,256.1 L64.6,255.2 L62.2,253.1 L61.4,251.3 L59.3,250.5 L59.0,245.9 L47.1,229.9 L47.1,228.6 L49.9,224.6 L51.3,224.4 L52.3,225.5 L50.9,229.7 L62.2,244.7 L66.7,240.3 L77.3,237.6 L84.5,237.0 L86.0,238.2 L88.4,247.0 L89.4,247.6 L92.2,246.7 L93.6,244.5 L99.9,242.8 L99.3,241.2 L97.1,239.3 L89.9,239.7 L88.6,238.7 L89.4,236.7 L95.1,236.0 L99.2,237.0 L103.8,242.5 L105.2,242.1ZM131.3,192.4 L130.4,192.8 L129.4,195.5 L131.8,196.7 L133.4,193.7 L131.3,192.4ZM125.2,186.7 L123.1,185.6 L122.4,186.4 L122.6,188.6 L124.1,189.5 L125.0,188.8 L125.2,186.7ZM120.6,182.2 L119.7,173.0 L117.1,171.9 L116.2,172.2 L117.1,182.5 L117.7,183.2 L120.6,182.2ZM135.1,167.0 L135.5,172.0 L140.0,179.5 L147.8,175.5 L148.4,174.0 L145.9,170.5 L145.7,168.4 L147.0,167.2 L152.0,167.1 L153.1,164.8 L151.0,162.6 L151.2,161.0 L159.9,156.6 L158.3,152.4 L158.5,151.1 L165.0,148.1 L169.7,144.9 L167.5,139.4 L161.5,140.8 L158.7,135.1 L157.8,134.7 L145.9,140.0 L147.8,146.2 L147.0,147.8 L138.5,151.5 L135.5,151.2 L133.7,150.2 L132.6,148.2 L131.6,148.2 L128.7,153.1 L136.2,158.0 L135.7,160.3 L136.0,165.4 L135.1,167.0ZM166.6,130.2 L166.3,131.3 L168.1,133.2 L171.4,129.4 L170.0,128.1 L166.6,130.2ZM170.3,135.7 L175.3,141.7 L180.4,142.5 L185.1,142.1 L187.2,142.8 L194.8,142.1 L196.2,139.6 L197.9,138.8 L208.7,139.1 L217.6,129.9 L219.5,126.6 L220.7,121.3 L218.9,113.5 L217.8,112.8 L212.9,114.1 L211.4,115.8 L208.4,115.9 L207.6,116.
381386 L207.8,118.6 L206.5,120.9 L209.9,122.8 L209.0,126.2 L211.7,126.1 L212.7,126.8 L212.9,128.1 L212.0,129.1 L209.1,130.0 L205.4,127.6 L203.4,130.2 L200.4,128.2 L198.4,129.5 L197.2,129.4 L196.3,127.7 L198.1,125.2 L194.5,121.0 L192.8,124.0 L187.4,125.7 L185.7,125.3 L184.6,122.8 L183.4,123.0 L185.3,131.7 L184.0,133.3 L182.4,132.5 L179.9,123.8 L173.3,125.0 L173.0,126.0 L175.4,130.7 L170.1,134.3 L170.3,135.7ZM210.8,101.9 L213.4,100.2 L211.6,96.0 L204.0,96.3 L205.0,99.4 L207.4,99.6 L208.9,102.0 L210.8,101.9ZM228.1,112.5 L227.2,112.0 L226.2,112.9 L227.3,117.1 L225.7,121.3 L226.5,130.8 L224.8,131.7 L222.3,131.2 L213.9,139.9 L215.4,140.8 L219.0,137.5 L221.8,137.2 L228.9,142.3 L230.2,144.9 L228.2,145.8 L219.6,141.1 L218.5,142.5 L219.9,144.3 L219.6,145.7 L217.4,147.5 L214.3,147.2 L211.9,150.0 L213.6,153.7 L211.6,155.8 L212.1,158.0 L218.3,158.1 L219.3,156.3 L220.6,155.9 L222.0,156.4 L223.1,158.5 L233.4,159.5 L238.8,159.3 L245.1,157.5 L249.3,150.6 L251.0,149.6 L252.4,150.0 L254.8,152.8 L261.8,150.1 L278.6,148.9 L281.2,144.2 L281.7,141.2 L280.8,137.9 L277.8,133.1 L276.3,132.7 L275.1,131.3 L272.5,131.0 L272.1,132.1 L273.9,134.0 L273.3,135.6 L270.8,136.2 L269.4,138.1 L265.1,138.3 L263.7,137.2 L263.6,132.1 L262.9,131.4 L259.7,131.6 L259.3,134.3 L257.9,135.2 L249.7,135.5 L248.0,133.4 L244.9,132.3 L241.8,134.2 L239.3,132.6 L237.4,132.7 L236.3,131.8 L235.2,128.3 L237.2,126.2 L236.7,124.2 L237.6,122.2 L236.4,120.6 L234.5,121.7 L233.1,121.2 L228.1,112.5ZM342.3,203.4 L344.9,202.8 L345.2,201.7 L337.3,194.6 L332.8,196.3 L328.5,194.8 L327.6,195.2 L327.5,196.4 L333.0,202.3 L342.3,203.4ZM345.7,206.9 L342.3,215.5 L346.4,217.2 L346.9,219.3 L348.6,220.5 L349.1,223.1 L353.3,223.0 L354.6,219.2 L356.5,217.9 L356.6,215.0 L357.4,213.9 L359.2,214.2 L360.1,216.5 L363.0,217.1 L364.6,214.5 L367.2,213.1 L366.7,212.1 L364.5,211.6 L362.6,212.1 L361.1,210.8 L356.1,209.5 L354.3,207.3 L350.7,206.3 L345.7,206.9ZM366.6,221.4 L365.2,229.2 L366.0,229.8 L369.8,229.6 L372.8,217.0 L369.8,216.3 L368.9,219.0 L366.6,221.4ZM373.1,213.6 L374.0,213.2 L374.0,211.6 L372.3,211.1 L370.8,211.7 L370.9,213.0 L373.1,213.6ZM405.9,227.0 L406.1,228.0 L412.8,232.6 L413.9,232.4 L417.3,217.8 L416.0,215.8 L414.8,215.8 L405.9,227.0ZM418.3,227.5 L418.9,228.4 L430.5,231.0 L431.3,230.5 L432.0,227.4 L431.4,226.6 L419.8,224.0 L419.0,224.5 L418.3,227.5ZM449.3,229.1 L445.6,234.1 L444.9,238.4 L447.1,241.2 L449.1,239.7 L450.4,239.8 L451.9,242.4 L453.6,242.4 L455.8,239.6 L460.4,238.5 L463.4,236.7 L464.8,237.4 L465.0,240.2 L467.3,241.1 L468.3,243.9 L469.5,243.8 L470.2,241.6 L472.3,241.1 L473.4,239.5 L477.7,238.9 L477.9,236.7 L469.5,230.0 L469.4,228.5 L470.6,227.7 L486.9,239.9 L488.0,239.7 L489.0,237.0 L487.3,232.1 L484.7,227.8 L465.5,206.8 L463.0,208.3 L459.8,206.8 L457.4,208.9 L455.9,209.2 L453.9,208.4 L452.5,206.8 L447.7,204.8 L446.4,202.7 L437.4,203.8 L434.2,203.2 L422.4,210.1 L422.0,213.5 L430.8,215.7 L434.2,211.5 L437.1,212.3 L438.8,210.3 L440.9,210.5 L442.6,209.4 L444.1,210.4 L444.2,213.9 L446.5,213.2 L451.0,214.2 L451.4,216.6 L450.6,219.8 L454.0,219.9 L454.8,221.7 L452.2,224.5 L452.0,227.8 L449.3,229.1ZM524.1,218.5 L523.9,217.4 L512.5,207.7 L511.4,207.8 L511.4,208.9 L522.8,218.7 L524.1,218.5ZM527.5,214.7 L532.6,209.0 L532.6,208.1 L523.1,200.0 L518.4,198.3 L513.8,204.6 L526.1,215.2 L527.5,214.7ZM284.4,376.9 L284.0,375.9 L280.5,375.4 L277.3,373.1 L276.2,373.5 L277.1,375.8 L280.7,378.6 L283.2,379.2 L284.4,376.9ZM604.2,338.6 L607.7,335.6 L605.5,332.5 L601.0,335.6 L603.0,338.6 L604.2,338.6ZM593.1,324.1 L592.9,325.2 L598.5,332.8 L603.2,329.9 L603.1,329.0 L597.4,321.5 L593.1,324.1ZM591.1,338.1 L592.2,338.1 L596.0,334.8 L589.6,326.8 L585.4,330.4 L591.1,338.1ZM588.1,318.7 L589.0,319.1 L591.5,317.8 L594.0,319.4 L595.0,318.5 L588.7,310.2 L584.5,313.5 L588.1,318.7ZM588.5,304.3 L589.7,304.4 L590.8,302.0 L593.2,302.6 L594.4,301.8 L594.1,300.7 L592.3,299.7 L591.5,297.9 L590.0,298.5 L589.6,300.6 L587.5,302.4 L588.5,304.3ZM578.4,335.0 L578.2,336.0 L583.9,343.7 L588.6,340.7 L588.6,339.8 L582.9,332.3 L578.4,335.0ZM577.2,318.7 L580.5,323.7 L583.9,322.3 L585.1,322.9 L585.8,325.1 L587.7,324.0 L584.3,318.7 L582.0,318.4 L580.7,316.5 L577.2,318.7ZM571.5,340.9 L571.4,341.8 L576.8,349.0 L581.3,346.2 L575.9,338.1 L571.5,340.9ZM580.2,329.8 L580.3,328.9 L579.2,327.4 L575.4,328.7 L574.5,327.8 L574.4,325.6 L572.5,325.2 L571.3,323.5 L570.0,324.1 L570.1,325.0 L575.7,332.5 L580.2,329.8ZM560.9,531.7 L559.8,531.9 L557.5,535.7 L569.1,546.2 L570.1,546.3 L572.7,543.4 L572.7,542.5 L560.9,531.7ZM568.3,333.9 L568.0,336.4 L569.3,337.3 L572.6,334.4 L566.4,326.8 L562.8,329.9 L564.3,332.0 L566.9,332.2 L568.3,333.9ZM551.0,541.0 L550.7,542.1 L557.1,550.7 L561.1,553.9 L564.8,555.0 L564.7,552.7 L567.2,549.6 L567.1,548.6 L555.5,538.1 L551.0,541.0ZM551.5,490.9 L562.8,500.4 L563.7,500.1 L566.6,495.4 L566.3,494.5 L564.1,493.9 L560.9,491.3 L552.2,489.2 L551.5,490.9ZM552.7,505.3 L552.7,506.4 L556.3,509.0 L561.0,503.2 L557.3,500.2 L552.7,505.3ZM551.1,344.0 L550.9,345.1 L553.8,348.6 L558.4,345.2 L555.7,341.4 L551.1,344.0ZM554.4,336.4 L555.4,336.7 L556.9,335.3 L554.5,332.7 L553.3,333.6 L554.4,336.4ZM546.9,501.3 L549.4,500.0 L552.2,501.1 L554.8,497.5 L551.6,494.6 L550.3,494.4 L546.3,500.0 L546.9,501.3ZM390.1,304.7 L385.2,319.6 L387.5,320.3 L388.1,321.4 L386.4,325.6 L390.0,329.0 L391.2,328.8 L393.0,324.8 L396.1,324.5 L397.2,325.2 L396.8,331.8 L396.1,333.5 L397.3,334.7 L403.5,336.1 L408.8,331.8 L414.4,332.0 L415.1,329.8 L416.6,329.2 L417.8,330.1 L418.1,333.6 L431.4,338.0 L431.8,339.1 L431.2,340.3 L427.8,340.9 L423.9,351.6 L427.0,353.9 L426.1,357.2 L430.3,360.2 L433.0,358.0 L435.6,354.4 L438.0,347.5 L442.4,346.5 L441.0,342.4 L441.2,340.5 L444.8,336.5 L449.0,335.6 L455.3,336.5 L456.8,335.5 L458.5,335.4 L460.3,337.3 L461.2,339.8 L465.9,341.8 L466.3,343.1 L465.5,345.9 L460.2,355.7 L461.4,356.4 L464.3,353.8 L464.6,351.6 L465.7,350.3 L467.9,350.0 L469.0,350.7 L469.2,354.8 L465.6,356.7 L461.1,362.4 L462.7,364.7 L460.9,366.9 L461.2,368.2 L466.6,370.6 L467.2,372.2 L466.2,375.4 L464.8,376.7 L465.5,378.5 L465.2,379.6 L462.5,380.4 L460.1,380.0 L459.3,381.5 L460.9,386.0 L464.3,386.9 L465.9,388.3 L468.6,389.1 L469.8,390.4 L470.1,392.1 L468.1,395.6 L460.5,400.2 L462.0,402.9 L464.1,403.2 L465.6,401.5 L467.3,400.9 L467.8,398.2 L471.6,397.3 L472.3,394.5 L475.6,393.4 L474.3,388.8 L473.9,383.8 L476.0,369.1 L477.2,368.5 L479.5,369.2 L480.1,370.2 L479.9,373.0 L485.3,376.4 L486.2,376.1 L487.2,373.4 L490.2,374.4 L491.0,373.7 L482.0,366.1 L481.3,362.7 L484.3,357.1 L482.2,352.1 L481.4,351.7 L478.6,352.7 L477.2,351.4 L477.8,350.0 L482.7,347.3 L480.5,344.3 L481.2,342.5 L482.8,342.5 L486.7,345.7 L495.8,341.6 L493.9,337.6 L489.6,339.0 L488.5,338.7 L487.6,335.4 L481.9,337.5 L480.3,336.8 L480.6,334.8 L486.2,332.1 L484.2,329.9 L482.4,325.4 L482.9,322.8 L484.7,322.7 L486.1,324.7 L488.7,324.1 L495.3,320.3 L497.7,316.5 L499.5,315.1 L501.4,314.5 L503.9,315.2 L505.7,318.0 L503.6,320.7 L505.8,321.7 L506.2,323.2 L500.8,326.4 L502.0,329.3 L499.7,331.6 L503.2,334.0 L504.4,335.8 L506.4,336.1 L510.4,334.5 L510.1,332.2 L510.8,331.1 L524.0,324.4 L525.5,324.6 L526.8,326.5 L528.0,326.2 L527.7,322.8 L528.8,321.8 L531.4,322.0 L530.7,318.5 L531.8,317.1 L533.1,317.3 L534.6,319.2 L539.2,317.6 L541.8,320.7 L543.4,319.2 L543.4,316.4 L545.1,315.9 L550.1,325.2 L553.0,323.5 L552.1,320.8 L553.8,318.8 L551.3,298.4 L539.1,288.6 L538.0,289.7 L538.6,295.3 L536.4,298.5 L539.3,301.5 L538.6,303.5 L537.0,303.4 L524.5,293.2 L523.4,294.3 L526.4,297.3 L526.1,299.3 L524.8,299.6 L523.1,298.6 L521.3,299.7 L519.4,299.2 L517.2,299.7 L516.2,298.4 L516.9,295.6 L514.3,293.8 L511.9,295.0 L510.5,293.6 L516.9,285.1 L515.0,282.7 L513.9,282.8 L506.3,291.5 L505.0,291.7 L503.9,290.9 L504.1,289.3 L509.6,282.9 L507.3,280.4 L501.9,286.0 L497.5,284.7 L495.3,288.5 L493.6,289.7 L493.4,291.5 L492.6,292.3 L491.4,292.2 L488.6,290.2 L486.6,287.5 L485.5,287.7 L483.6,290.9 L483.7,291.8 L492.9,297.3 L495.3,294.7 L497.0,294.8 L497.6,296.2 L496.4,299.1 L498.5,301.6 L497.9,302.8 L496.4,303.0 L481.5,294.6 L480.0,298.1 L487.9,302.8 L488.6,303.8 L488.1,305.2 L486.7,305.6 L478.6,300.9 L477.5,301.2 L476.8,303.5 L484.5,308.2 L484.6,309.7 L483.4,310.5 L472.7,304.3 L472.8,303.0 L478.7,293.1 L476.4,291.0 L475.5,291.4 L467.1,305.0 L465.7,305.5 L464.6,304.7 L464.6,303.3 L472.9,289.6 L472.6,288.6 L469.0,287.2 L455.9,309.0 L456.5,310.3 L458.8,310.5 L461.4,311.9 L463.3,315.2 L463.6,317.4 L465.0,318.9 L464.3,322.0 L461.5,322.6 L460.1,324.1 L458.7,323.8 L456.9,321.6 L446.4,325.6 L440.3,326.0 L437.0,325.2 L429.7,321.9 L421.2,314.7 L418.8,315.0 L413.4,313.0 L410.5,313.6 L409.6,312.4 L410.2,311.0 L414.7,310.0 L415.3,309.2 L410.5,298.0 L408.0,294.6 L405.1,295.8 L402.5,294.0 L401.0,295.0 L400.7,297.5 L399.0,297.9 L397.2,295.4 L397.2,293.4 L396.5,292.8 L393.1,296.9 L391.9,300.4 L394.6,303.4 L398.7,299.8 L400.2,299.6 L401.4,300.7 L401.5,303.1 L395.7,309.7 L394.4,309.2 L391.3,304.8 L390.1,304.7ZM437.5,357.7 L441.4,360.3 L445.3,357.5 L449.0,356.7 L452.7,354.8 L451.9,350.8 L452.9,348.5 L452.0,346.2 L451.1,346.1 L447.9,348.7 L445.9,349.1 L443.4,351.7 L439.9,350.6 L437.5,357.7ZM456.9,351.2 L458.4,351.4 L461.0,346.1 L459.5,344.7 L457.5,339.6 L454.4,339.6 L453.7,340.3 L454.0,342.6 L456.9,351.2ZM541.1,506.2 L540.5,508.1 L547.8,515.1 L548.8,519.5 L550.1,519.7 L552.3,516.9 L551.6,514.7 L542.0,506.2 L541.1,506.2ZM547.8,414.2 L548.1,415.1 L550.4,416.2 L552.0,414.1 L549.9,411.0 L547.8,414.2ZM549.2,339.7 L550.1,340.0 L551.8,338.6 L549.8,334.4 L547.5,335.8 L549.2,339.7ZM550.7,253.9 L550.
381381,252.5 L547.0,252.9 L546.5,253.7 L548.6,255.7 L550.7,253.9ZM546.0,401.5 L545.9,402.6 L548.4,404.5 L550.8,404.1 L550.3,400.1 L546.0,401.5ZM546.1,288.8 L546.3,289.8 L549.5,292.4 L550.6,292.3 L549.8,286.6 L547.2,287.5 L546.1,288.8ZM545.8,331.9 L546.8,332.2 L548.7,330.7 L546.8,326.3 L544.5,326.1 L543.8,327.1 L545.8,331.9ZM539.0,232.9 L539.2,233.8 L544.1,237.8 L547.5,234.3 L542.4,229.5 L539.0,232.9ZM537.8,244.2 L533.8,239.3 L531.9,241.1 L542.0,250.3 L544.7,249.9 L544.5,247.5 L546.6,245.0 L546.4,243.9 L541.4,239.8 L540.4,240.4 L540.8,243.3 L539.5,244.5 L537.8,244.2ZM541.8,338.8 L543.8,343.6 L546.5,342.4 L544.5,337.1 L542.0,337.6 L541.8,338.8ZM530.2,497.3 L531.4,501.8 L532.9,503.2 L536.5,499.7 L537.7,499.9 L539.6,501.5 L540.5,500.3 L538.7,498.3 L538.9,496.7 L540.4,496.2 L543.2,497.5 L546.0,494.1 L546.4,492.5 L543.1,490.1 L541.0,491.9 L539.6,491.7 L538.9,490.1 L540.2,487.9 L539.1,487.2 L535.7,490.7 L536.9,492.7 L536.7,494.0 L535.5,494.7 L533.2,494.2 L530.2,497.3ZM542.3,515.8 L543.8,523.8 L545.0,524.0 L546.0,521.6 L545.2,517.0 L543.1,514.9 L542.3,515.8ZM539.7,284.3 L540.7,284.2 L544.4,279.7 L541.1,276.9 L540.9,273.8 L538.4,272.7 L533.4,278.6 L539.7,284.3ZM539.9,334.2 L540.9,334.7 L543.0,333.2 L538.4,322.0 L537.4,321.5 L535.4,323.0 L539.9,334.2ZM539.5,227.6 L539.4,226.6 L535.0,223.0 L531.5,226.8 L536.0,231.0 L539.5,227.6ZM531.4,384.9 L532.3,384.4 L535.0,375.1 L538.7,370.8 L538.3,369.6 L533.3,373.0 L530.4,383.8 L531.4,384.9ZM535.5,262.9 L535.9,263.7 L537.7,264.0 L538.7,262.8 L536.4,261.6 L535.5,262.9ZM536.9,401.9 L537.7,401.4 L537.4,400.4 L532.9,398.1 L531.9,398.4 L531.8,400.5 L536.9,401.9ZM525.7,248.1 L527.3,251.9 L528.6,252.4 L536.4,251.3 L537.0,250.6 L529.7,244.0 L525.7,248.1ZM525.9,332.7 L533.3,350.9 L534.5,351.2 L535.7,350.0 L533.6,346.4 L534.2,342.7 L535.5,341.1 L534.4,338.9 L537.0,336.4 L536.2,335.6 L532.9,336.9 L531.4,336.1 L531.6,334.4 L535.2,332.2 L533.0,327.6 L525.9,332.7ZM520.8,285.7 L527.7,291.0 L531.0,288.0 L534.1,289.1 L536.2,286.2 L530.9,281.6 L527.5,282.6 L524.6,281.0 L520.8,285.7ZM530.1,275.6 L531.1,275.4 L536.0,269.8 L535.9,268.6 L533.4,267.9 L531.3,269.6 L527.1,269.3 L527.0,270.4 L528.7,271.8 L528.4,274.1 L530.1,275.6ZM531.4,446.2 L534.7,445.5 L535.5,444.5 L531.1,440.9 L513.2,435.7 L512.3,436.1 L511.2,439.8 L511.6,440.7 L531.4,446.2ZM531.6,530.9 L534.3,532.4 L535.1,531.3 L534.3,529.6 L533.1,529.0 L531.6,530.9ZM525.7,234.7 L525.1,236.1 L529.2,239.1 L533.8,233.6 L529.4,229.9 L527.6,231.7 L527.5,234.1 L525.7,234.7ZM513.5,431.7 L514.0,432.7 L525.4,435.7 L527.7,433.1 L532.4,430.0 L532.7,428.8 L531.4,427.5 L528.4,428.5 L523.7,428.0 L521.8,430.5 L520.4,430.8 L519.3,429.4 L520.3,426.2 L516.2,424.0 L513.5,431.7ZM526.9,223.3 L529.1,224.5 L532.1,221.2 L532.1,220.3 L529.1,218.3 L526.0,221.8 L526.9,223.3ZM529.3,260.6 L531.3,261.9 L531.8,260.4 L529.8,259.8 L529.3,260.6ZM519.0,479.2 L527.9,487.5 L528.8,487.3 L531.0,484.9 L530.9,483.9 L528.4,481.7 L523.5,481.8 L523.5,477.6 L521.8,476.0 L520.8,476.0 L519.3,477.6 L519.0,479.2ZM520.1,357.2 L520.8,360.9 L522.8,361.6 L525.1,356.1 L530.2,356.8 L531.0,355.4 L529.4,351.5 L528.5,351.1 L519.3,354.9 L519.0,355.8 L520.1,357.2ZM526.4,362.0 L527.0,362.9 L528.8,363.0 L529.5,360.0 L527.3,359.5 L526.4,362.0ZM523.8,365.2 L522.8,365.7 L523.0,367.0 L526.8,368.1 L527.6,367.7 L527.5,366.2 L523.8,365.2ZM519.4,505.8 L522.7,508.7 L523.8,508.3 L523.9,506.0 L527.7,500.5 L525.3,497.2 L524.3,497.3 L521.8,500.1 L523.3,503.4 L522.2,504.5 L519.8,504.5 L519.4,505.8ZM516.5,350.9 L517.4,351.4 L521.2,349.9 L521.5,347.6 L522.4,346.7 L523.6,346.8 L525.0,348.2 L527.1,347.4 L527.3,346.5 L526.0,343.2 L525.0,343.0 L515.5,347.1 L516.5,350.9ZM523.2,489.6 L524.2,491.8 L526.0,490.6 L525.7,489.7 L517.5,482.3 L516.3,482.3 L515.5,484.3 L519.2,487.0 L520.9,489.2 L523.2,489.6ZM518.2,370.8 L518.7,371.6 L523.3,373.0 L525.4,371.7 L524.9,370.8 L519.4,369.1 L518.2,370.8ZM522.7,383.2 L523.5,382.6 L524.9,376.9 L517.8,374.9 L516.1,381.1 L522.7,383.2ZM518.7,241.5 L519.2,246.4 L522.6,246.8 L524.0,245.0 L522.6,242.5 L524.5,239.6 L521.8,238.0 L518.7,241.5ZM513.7,343.0 L514.6,343.2 L523.8,339.2 L522.5,334.8 L521.6,334.6 L512.0,338.8 L511.8,339.7 L513.7,343.0ZM519.5,230.6 L519.7,231.6 L521.4,232.5 L523.9,229.3 L522.8,228.7 L520.5,229.4 L519.5,230.6ZM523.7,276.3 L523.5,275.3 L521.4,274.3 L517.0,280.2 L519.3,281.6 L523.7,276.3ZM513.3,390.6 L513.8,391.5 L520.3,393.1 L522.2,386.6 L515.3,384.5 L513.3,390.6ZM518.6,293.4 L519.7,293.4 L521.5,291.0 L518.5,288.5 L516.3,291.0 L518.6,293.4ZM519.2,495.6 L517.0,497.4 L517.4,498.2 L519.6,497.8 L519.2,495.6ZM511.6,401.1 L517.7,402.6 L519.3,396.9 L512.5,394.5 L510.6,400.2 L511.6,401.1ZM511.6,279.8 L512.6,279.7 L518.9,272.3 L518.9,271.4 L516.8,269.7 L515.9,269.8 L509.6,277.2 L509.6,278.1 L511.6,279.8ZM508.4,359.6 L509.1,362.0 L509.2,366.3 L515.2,367.8 L517.4,362.0 L515.3,357.1 L513.8,357.6 L515.0,361.4 L513.8,363.5 L512.3,363.7 L510.9,363.0 L510.0,361.9 L510.4,360.2 L509.8,359.2 L508.4,359.6ZM497.8,481.8 L499.1,487.0 L501.1,491.0 L503.6,491.0 L504.7,492.1 L504.6,493.4 L503.2,494.8 L503.7,496.1 L506.7,496.4 L508.9,500.0 L510.7,499.4 L517.4,491.0 L515.7,488.7 L505.9,479.8 L504.6,477.3 L504.6,473.5 L507.9,464.9 L507.6,463.9 L504.7,462.8 L503.8,463.2 L497.8,481.8ZM495.7,413.2 L496.3,414.1 L513.2,418.6 L515.3,411.8 L511.3,410.1 L510.8,408.5 L512.3,407.4 L515.8,408.2 L516.4,407.0 L507.4,404.0 L506.4,404.4 L505.2,409.4 L512.5,412.9 L513.3,415.1 L512.0,416.0 L507.4,414.3 L505.1,415.0 L503.8,413.7 L496.9,411.8 L495.7,413.2ZM514.1,502.8 L516.0,500.9 L515.7,499.5 L512.9,501.7 L513.1,502.7 L514.1,502.8ZM514.0,246.7 L514.7,248.1 L516.0,247.7 L515.5,245.8 L514.0,246.7ZM510.5,354.8 L513.3,353.6 L513.3,352.4 L509.8,353.3 L509.5,354.3 L510.5,354.8ZM508.2,477.8 L511.6,480.7 L513.4,479.2 L511.5,474.4 L513.0,467.5 L512.0,466.1 L510.3,466.8 L507.7,474.2 L508.2,477.8ZM508.9,374.4 L510.0,371.6 L508.3,370.6 L507.6,371.2 L506.1,377.7 L513.0,379.4 L513.3,377.8 L509.9,377.0 L508.9,374.4ZM510.7,264.9 L509.7,268.6 L511.2,269.5 L513.3,266.9 L510.7,264.9ZM510.7,254.4 L512.3,254.2 L512.7,253.2 L510.9,251.5 L509.1,253.3 L510.7,254.4ZM488.5,423.0 L487.4,424.9 L487.6,425.9 L503.7,430.4 L505.0,432.1 L504.7,436.3 L507.9,437.3 L508.8,436.9 L510.1,431.9 L506.4,430.5 L505.8,428.9 L507.1,427.8 L511.1,428.3 L512.5,423.9 L512.1,423.1 L490.4,417.0 L489.0,417.9 L488.5,423.0ZM510.1,244.4 L511.1,244.2 L512.3,241.8 L502.1,232.9 L501.0,232.9 L499.5,234.7 L499.6,235.6 L510.1,244.4ZM500.9,343.4 L500.5,344.4 L501.7,346.5 L506.8,344.8 L508.4,345.9 L507.8,347.6 L502.9,349.7 L503.8,352.1 L505.5,351.7 L508.9,349.3 L511.6,348.9 L508.3,340.6 L500.9,343.4ZM502.8,387.6 L503.3,388.6 L509.5,390.1 L510.4,389.5 L511.4,385.5 L509.1,384.4 L508.2,382.7 L504.9,381.8 L502.8,387.6ZM500.2,397.5 L507.6,399.3 L508.5,395.9 L507.2,392.9 L503.9,392.0 L501.4,392.8 L500.2,397.5ZM505.5,225.3 L502.3,226.1 L501.5,227.7 L506.8,231.8 L508.3,229.1 L506.1,227.5 L505.5,225.3ZM502.3,521.3 L502.5,522.5 L503.6,522.3 L507.5,517.1 L507.9,514.9 L506.8,515.0 L502.3,521.3ZM502.5,442.4 L499.3,444.7 L500.8,447.5 L500.7,451.3 L503.9,452.6 L507.6,440.7 L503.8,439.5 L502.5,442.4ZM499.5,248.2 L499.1,249.5 L503.3,252.9 L507.4,248.7 L503.3,245.0 L499.5,248.2ZM499.9,281.0 L500.3,282.1 L501.3,282.1 L504.4,278.5 L504.3,277.5 L502.3,276.6 L499.9,281.0ZM500.7,269.8 L502.7,270.4 L504.1,268.8 L503.2,263.2 L498.8,267.4 L500.7,269.8ZM465.7,461.2 L467.6,467.2 L469.8,467.3 L470.2,459.0 L471.5,458.1 L472.8,458.6 L473.0,468.1 L470.6,471.7 L467.7,472.4 L468.0,474.3 L475.8,474.3 L476.6,471.8 L478.1,471.1 L479.2,471.9 L480.0,474.5 L488.4,477.4 L490.0,476.4 L489.7,475.2 L482.8,472.0 L482.8,470.0 L485.3,469.6 L485.7,468.4 L483.5,466.4 L480.7,466.2 L473.3,455.1 L467.5,458.1 L467.2,459.8 L465.7,461.2ZM483.0,458.5 L481.5,454.4 L483.1,453.0 L484.4,453.9 L486.4,459.9 L489.8,460.5 L499.1,465.7 L500.4,463.1 L498.4,460.9 L498.2,459.6 L500.1,457.8 L502.4,457.7 L502.9,456.3 L498.2,453.4 L497.6,451.5 L497.7,448.1 L497.0,447.0 L494.9,446.8 L493.4,449.7 L491.4,450.7 L490.2,449.3 L491.2,446.2 L488.3,444.7 L486.0,445.2 L484.5,444.4 L484.0,442.7 L485.0,440.1 L480.2,438.4 L479.1,431.9 L476.0,431.1 L474.0,428.4 L473.3,425.3 L472.0,423.5 L473.6,421.5 L473.8,420.1 L471.9,417.9 L466.1,421.9 L465.8,422.7 L477.6,438.9 L478.9,446.9 L482.2,446.6 L483.4,447.4 L483.0,449.3 L479.0,451.1 L476.1,453.4 L482.2,462.6 L483.2,461.9 L483.0,458.5ZM497.4,407.0 L497.9,408.0 L501.1,408.5 L502.4,402.7 L498.9,402.0 L497.4,407.0ZM498.6,321.7 L497.4,322.9 L497.9,323.9 L502.3,321.7 L501.5,320.8 L498.6,321.7ZM498.8,336.5 L497.5,337.2 L498.8,340.1 L502.0,339.1 L501.3,336.9 L498.8,336.5ZM500.8,527.2 L501.9,526.2 L500.1,525.2 L499.4,526.3 L500.8,527.2ZM482.0,428.6 L483.2,436.2 L484.3,436.3 L485.3,434.6 L486.7,434.3 L487.7,435.2 L488.1,437.5 L492.6,438.6 L494.0,43
381386.9 L495.3,436.6 L496.3,437.5 L496.5,439.6 L499.3,440.5 L500.1,439.9 L501.9,433.7 L500.1,432.5 L498.0,433.6 L494.8,432.9 L492.7,430.6 L490.6,431.6 L487.1,430.7 L485.6,428.7 L482.8,427.9 L482.0,428.6ZM493.1,243.9 L497.0,247.3 L500.4,242.7 L496.3,239.3 L493.9,241.7 L493.1,243.9ZM498.5,275.5 L499.4,275.2 L499.9,273.7 L496.6,270.8 L495.7,270.8 L494.7,272.8 L498.5,275.5ZM497.4,232.4 L499.0,229.6 L497.9,228.9 L495.4,229.3 L494.5,231.2 L496.3,232.7 L497.4,232.4ZM498.8,387.2 L497.8,386.0 L496.8,386.6 L497.6,388.4 L498.8,387.2ZM493.0,346.9 L492.6,347.9 L493.8,349.7 L498.3,347.4 L496.9,345.0 L493.0,346.9ZM479.7,478.2 L487.7,487.2 L486.6,489.0 L484.1,488.0 L483.3,488.6 L485.2,492.7 L484.2,495.4 L492.6,498.0 L497.4,492.0 L495.6,488.1 L494.9,487.7 L492.7,488.5 L491.5,488.0 L491.3,485.5 L490.0,484.0 L490.0,481.5 L480.9,477.8 L479.7,478.2ZM491.3,278.0 L491.6,278.9 L495.3,281.5 L497.3,279.1 L493.3,275.7 L491.3,278.0ZM494.6,377.8 L496.6,379.1 L497.0,378.2 L495.4,376.8 L494.6,377.8ZM491.0,506.4 L492.8,508.0 L495.0,506.5 L495.5,505.0 L491.5,503.1 L491.0,506.4ZM479.1,408.3 L479.9,409.3 L487.1,411.3 L489.5,407.9 L488.7,405.5 L489.4,402.7 L491.1,401.5 L494.3,401.9 L494.8,400.7 L487.5,398.5 L484.8,406.4 L482.7,407.5 L479.6,407.1 L479.1,408.3ZM490.3,255.1 L491.0,256.1 L494.2,256.0 L494.9,255.2 L493.8,252.8 L491.2,251.8 L490.4,252.4 L490.3,255.1ZM493.2,468.3 L494.7,467.6 L494.1,466.3 L488.6,463.4 L486.6,463.5 L486.6,465.1 L487.7,466.0 L493.2,468.3ZM479.4,378.0 L479.2,380.7 L485.9,385.4 L485.9,387.4 L484.3,389.3 L484.7,394.3 L491.7,396.0 L493.7,388.1 L492.2,387.7 L490.8,391.7 L488.9,392.1 L488.1,390.9 L488.9,387.8 L488.4,384.2 L480.4,377.8 L479.4,378.0ZM489.9,281.5 L488.8,281.8 L488.6,283.4 L492.0,284.4 L492.2,283.3 L489.9,281.5ZM483.9,501.9 L484.6,503.3 L486.7,503.9 L488.6,502.6 L488.1,501.7 L484.8,500.6 L483.9,501.9ZM483.6,261.5 L483.8,271.7 L484.7,272.5 L488.5,266.4 L487.7,263.5 L484.8,260.9 L483.6,261.5ZM480.7,244.1 L481.4,244.8 L486.4,245.4 L487.2,244.5 L481.8,240.0 L481.0,240.6 L480.7,244.1ZM484.4,278.2 L480.7,279.6 L480.7,280.6 L484.2,282.7 L486.4,279.8 L484.4,278.2ZM476.7,418.9 L476.5,425.9 L478.1,428.3 L479.9,424.7 L484.2,424.5 L485.5,422.0 L486.2,416.1 L480.3,414.1 L477.4,414.2 L475.2,415.9 L476.7,418.9ZM480.4,257.3 L481.6,257.8 L483.3,256.4 L485.4,250.1 L485.0,249.2 L480.5,249.4 L480.4,257.3ZM479.8,289.5 L480.9,289.3 L482.6,285.5 L474.1,280.3 L473.1,280.3 L471.3,284.2 L479.8,289.5ZM478.1,401.7 L481.6,403.1 L482.7,399.7 L481.8,399.2 L478.4,400.2 L478.1,401.7ZM478.5,270.8 L479.3,271.5 L480.2,271.0 L480.4,267.3 L479.9,266.6 L478.5,267.1 L478.5,270.8ZM475.0,276.8 L478.5,279.4 L479.6,279.0 L479.7,275.8 L478.9,275.1 L475.7,274.6 L475.0,276.8ZM468.2,487.1 L468.4,490.4 L478.0,493.5 L479.0,493.0 L477.5,489.4 L475.2,489.9 L469.0,486.6 L468.2,487.1ZM476.1,500.0 L477.1,500.1 L477.7,499.0 L476.2,497.9 L475.3,498.7 L476.1,500.0ZM477.5,242.7 L473.4,242.4 L472.9,243.7 L477.4,244.3 L477.5,242.7ZM472.4,252.1 L474.6,255.3 L476.6,255.4 L477.0,250.4 L472.6,249.4 L472.4,252.1ZM475.3,484.7 L474.6,486.0 L476.7,486.7 L476.8,485.2 L475.3,484.7ZM444.0,440.0 L441.5,439.0 L438.8,440.9 L438.7,441.8 L441.6,446.0 L444.3,445.1 L447.4,445.9 L447.5,447.6 L444.7,450.5 L450.9,459.3 L452.8,460.8 L454.2,461.0 L455.3,459.4 L462.0,455.8 L463.1,451.7 L461.1,448.0 L461.9,446.3 L463.7,446.6 L468.6,453.6 L476.1,449.1 L475.1,446.5 L470.3,446.1 L468.6,447.1 L467.3,446.6 L467.2,443.7 L455.9,429.4 L452.4,431.5 L453.2,433.9 L452.5,435.2 L451.1,435.3 L448.9,433.8 L446.4,435.6 L446.6,437.8 L445.9,439.1 L444.0,440.0ZM468.3,401.0 L468.8,404.3 L474.7,407.0 L475.7,406.6 L475.5,403.6 L474.0,400.0 L468.3,401.0ZM474.5,443.4 L475.3,442.7 L474.8,440.2 L463.4,424.7 L462.4,424.5 L459.1,426.9 L458.9,428.0 L469.0,441.1 L471.7,443.2 L474.5,443.4ZM468.8,525.3 L471.4,524.4 L474.9,515.2 L474.5,514.2 L470.9,513.5 L470.1,514.0 L469.5,519.6 L468.0,524.4 L468.8,525.3ZM468.6,508.6 L470.2,510.0 L471.9,510.2 L474.1,504.6 L470.5,503.4 L468.6,508.6ZM465.2,409.3 L469.6,415.3 L472.3,413.7 L471.9,412.7 L469.8,412.4 L468.5,411.3 L468.1,408.9 L465.7,408.2 L465.2,409.3ZM468.1,271.6 L467.9,273.0 L471.1,274.9 L472.0,274.6 L471.8,271.0 L468.1,271.6ZM466.0,267.4 L467.0,268.3 L471.0,267.5 L471.5,265.3 L470.5,264.7 L466.2,265.9 L466.0,267.4ZM467.6,282.1 L468.6,281.7 L470.3,278.1 L463.3,274.4 L461.4,278.2 L467.6,282.1ZM468.1,498.2 L469.1,497.8 L469.4,495.7 L464.0,494.3 L464.0,495.5 L468.1,498.2ZM467.7,250.3 L467.4,253.5 L469.0,253.2 L469.0,250.3 L467.7,250.3ZM463.6,256.4 L462.9,257.4 L465.0,261.5 L468.6,260.6 L468.3,258.6 L466.8,258.1 L465.7,256.7 L463.6,256.4ZM454.0,48
381381.0 L460.8,483.6 L461.3,485.1 L459.8,487.2 L462.3,488.3 L463.2,485.8 L464.9,484.6 L464.3,481.8 L465.3,481.1 L468.4,480.9 L468.6,478.1 L467.8,477.4 L446.3,477.5 L445.6,478.0 L445.8,478.9 L449.7,481.9 L454.0,481.0ZM467.0,486.5 L468.0,486.0 L467.6,484.6 L465.6,484.3 L465.4,485.4 L467.0,486.5ZM463.2,419.3 L464.2,419.4 L466.7,417.6 L465.4,415.2 L464.5,415.3 L462.7,417.7 L463.2,419.3ZM452.5,387.4 L451.8,388.2 L452.4,389.4 L456.5,390.0 L461.1,395.6 L466.5,392.6 L466.1,391.6 L462.8,391.1 L461.2,389.6 L458.0,388.2 L452.5,387.4ZM464.0,288.1 L465.0,287.8 L466.1,284.8 L459.1,281.2 L457.8,284.3 L464.0,288.1ZM435.2,470.5 L439.3,468.1 L441.4,467.7 L442.4,468.3 L442.4,470.3 L438.4,472.5 L440.4,474.5 L463.6,474.4 L464.4,473.6 L464.0,471.0 L457.4,470.9 L456.2,469.7 L457.3,467.9 L464.1,467.6 L463.8,464.6 L462.5,462.8 L457.6,465.0 L450.3,463.3 L448.2,466.2 L448.7,468.9 L447.2,469.7 L444.1,466.1 L445.9,463.4 L446.1,461.3 L445.1,460.7 L434.0,468.9 L435.2,470.5ZM459.7,371.2 L457.5,367.2 L456.0,366.9 L452.2,374.7 L455.6,375.6 L456.9,374.1 L458.1,373.8 L459.9,376.6 L463.6,377.1 L463.4,373.0 L459.7,371.2ZM457.2,412.2 L453.0,417.8 L454.4,419.5 L461.0,415.1 L463.5,412.3 L462.2,410.4 L461.3,410.2 L460.0,412.1 L457.2,412.2ZM444.5,281.4 L446.0,286.0 L460.3,294.1 L461.2,293.9 L462.5,291.8 L462.2,290.7 L445.4,280.6 L444.5,281.4ZM458.6,407.3 L457.9,407.9 L458.2,408.8 L460.6,408.9 L460.3,407.5 L458.6,407.3ZM456.2,273.2 L456.0,274.6 L458.5,275.3 L460.5,271.8 L459.1,268.2 L457.3,268.7 L457.7,271.7 L456.2,273.2ZM459.0,248.5 L459.7,247.8 L459.3,247.0 L456.9,247.1 L457.1,248.2 L459.0,248.5ZM449.5,291.2 L448.6,291.3 L448.4,292.2 L453.6,304.2 L454.6,304.6 L459.0,297.1 L449.5,291.2ZM454.0,383.8 L456.3,384.5 L457.1,384.0 L457.4,381.9 L456.3,379.3 L450.2,377.8 L449.8,380.9 L453.0,381.0 L454.0,383.8ZM453.6,402.6 L455.4,403.3 L456.1,402.4 L454.4,400.5 L453.7,401.1 L453.6,402.6ZM452.6,319.1 L453.5,319.6 L455.9,318.3 L454.4,314.7 L451.5,315.9 L452.6,319.1ZM449.8,277.6 L449.6,279.0 L453.9,281.6 L455.8,279.9 L455.5,278.9 L451.4,276.4 L449.8,277.6ZM412.7,446.1 L412.4,447.3 L415.9,451.5 L416.8,451.6 L423.5,446.8 L422.0,443.5 L422.7,441.9 L424.3,441.8 L426.2,444.2 L427.1,444.4 L455.4,424.8 L455.7,423.7 L452.3,422.8 L450.2,420.6 L449.3,420.5 L435.7,430.0 L431.3,431.1 L429.5,434.6 L412.7,446.1ZM445.6,406.0 L442.9,409.2 L443.7,410.6 L444.8,411.2 L448.6,411.0 L451.1,414.8 L453.6,412.7 L454.9,407.2 L454.2,406.4 L445.6,406.0ZM446.5,370.4 L447.9,370.4 L454.0,359.2 L453.6,358.1 L446.6,360.3 L442.8,363.3 L446.5,370.4ZM449.8,312.3 L450.7,312.6 L453.1,311.4 L451.6,307.9 L448.7,309.1 L449.8,312.3ZM430.9,399.8 L431.3,400.8 L435.7,402.1 L449.7,403.1 L450.5,402.5 L450.9,399.6 L453.0,398.0 L450.1,393.6 L448.5,392.5 L446.4,387.6 L443.8,385.4 L436.6,385.0 L434.8,385.4 L431.9,387.5 L434.0,390.7 L434.6,393.4 L430.9,399.8ZM450.4,247.9 L452.4,248.7 L452.8,246.7 L450.9,246.3 L450.4,247.9ZM446.2,254.7 L448.8,261.2 L450.2,260.8 L449.6,257.7 L451.1,255.1 L446.8,253.7 L446.2,254.7ZM442.5,295.4 L447.1,305.7 L450.0,304.9 L445.2,293.9 L442.5,295.4ZM447.2,317.5 L446.8,318.3 L447.9,321.1 L449.4,321.2 L449.8,320.4 L448.6,317.6 L447.2,317.5ZM409.2,416.9 L412.2,423.0 L415.5,422.6 L418.7,424.7 L420.4,422.1 L421.9,421.8 L422.9,423.0 L422.2,425.5 L422.7,426.3 L432.7,427.3 L434.4,426.3 L433.6,424.0 L434.3,422.7 L435.7,422.6 L437.6,424.1 L441.2,421.8 L440.4,419.1 L441.1,417.8 L442.7,417.6 L444.6,419.3 L447.5,416.8 L441.9,413.1 L439.0,410.0 L438.8,408.6 L440.5,407.0 L440.3,406.0 L433.8,404.8 L425.7,411.7 L428.5,415.4 L432.0,416.8 L432.6,419.3 L431.9,422.1 L429.8,421.9 L429.0,418.7 L426.1,417.7 L423.7,419.2 L420.2,417.1 L420.0,415.7 L423.0,409.8 L422.1,408.7 L420.5,409.1 L419.6,411.3 L417.1,411.7 L415.9,414.1 L417.9,415.3 L418.2,416.6 L415.8,419.1 L414.1,419.0 L412.1,416.5 L409.2,416.9ZM430.0,241.9 L427.3,246.5 L427.8,247.5 L446.2,250.4 L447.1,249.8 L447.3,246.2 L445.5,245.4 L443.5,243.0 L440.6,244.5 L437.4,244.4 L435.7,243.7 L434.1,241.5 L430.0,241.9ZM446.6,314.4 L446.9,313.5 L446.1,311.5 L445.0,311.0 L444.5,311.8 L445.3,314.1 L446.6,314.4ZM441.6,374.1 L441.4,375.2 L443.4,378.1 L444.4,378.2 L445.1,375.3 L444.1,373.5 L443.2,373.1 L441.6,374.1ZM430.4,466.7 L431.4,466.7 L444.8,457.0 L444.8,456.1 L442.1,452.3 L441.1,452.3 L426.4,462.4 L426.5,463.5 L430.4,466.7ZM438.8,321.1 L438.6,322.3 L440.7,322.9 L444.1,322.8 L444.8,322.1 L443.5,319.2 L438.8,321.1ZM436.8,289.1 L438.3,293.3 L444.1,290.5 L442.4,286.6 L436.8,289.1ZM426.7,258.5 L430.2,260.9 L430.0,263.4 L432.5,271.9 L434.8,271.9 L435.3,270.7 L433.4,269.1 L433.8,267.6 L436.0,267.0 L438.2,268.7 L439.0,268.0 L436.0,258.5 L439.8,256.0 L442.2,255.6 L442.1,253.3 L427.2,250.6 L426.6,251.4 L427.1,252.3 L429.7,252.7 L431.0,254.8 L429.8,256.2 L427.2,255.8 L426.7,258.5ZM442.1,316.3 L442.4,315.3 L440.7,311.9 L434.0,315.1 L435.9,318.8 L442.1,316.3ZM438.1,381.5 L441.3,382.1 L441.6,381.1 L439.4,377.9 L438.6,377.6 L437.6,379.0 L438.1,381.5ZM435.5,281.6 L435.5,284.9 L436.3,285.4 L441.6,282.8 L440.7,280.0 L437.3,280.0 L435.2,276.3 L434.0,277.2 L435.5,281.6ZM434.4,363.9 L433.7,365.0 L436.4,368.3 L438.6,368.3 L440.1,366.2 L439.6,365.1 L438.1,364.1 L434.4,363.9ZM432.7,311.5 L439.7,308.6 L438.6,305.4 L431.5,308.4 L432.7,311.5ZM419.7,458.0 L423.6,460.6 L433.7,453.6 L432.3,450.2 L432.8,448.7 L434.5,448.5 L436.9,451.2 L439.4,449.7 L439.6,448.7 L436.3,443.8 L435.3,443.6 L420.3,454.0 L419.0,456.3 L419.7,458.0ZM429.4,3
3813805.2 L437.2,302.3 L436.2,298.3 L432.2,298.8 L428.0,302.2 L427.8,303.2 L429.4,305.2ZM425.9,371.1 L425.3,382.4 L429.8,384.9 L434.7,382.0 L434.6,380.2 L431.6,375.6 L429.7,368.9 L426.7,369.6 L425.9,371.1ZM430.1,296.5 L434.7,294.9 L433.8,291.5 L423.6,295.6 L425.9,299.6 L430.1,296.5ZM426.1,290.3 L432.6,288.2 L432.2,284.9 L423.9,286.2 L423.8,287.2 L426.1,290.3ZM429.7,314.9 L428.6,317.3 L430.5,318.7 L431.4,318.6 L430.6,315.1 L429.7,314.9ZM414.2,284.1 L418.2,286.1 L419.9,284.0 L422.3,284.5 L423.9,283.0 L431.0,281.6 L431.5,280.8 L431.0,278.2 L430.2,277.7 L426.8,278.4 L414.2,282.9 L414.2,284.1ZM425.0,392.8 L426.3,395.3 L425.3,397.9 L427.5,398.9 L431.4,393.2 L431.3,392.2 L427.6,388.5 L425.1,391.1 L425.0,392.8ZM404.0,369.9 L399.5,372.8 L397.4,372.5 L395.3,374.1 L395.2,375.0 L404.9,383.3 L412.4,388.6 L414.7,387.6 L419.4,382.0 L421.8,380.8 L423.0,375.2 L423.0,369.9 L424.5,367.2 L429.5,365.0 L429.7,363.7 L420.9,357.8 L416.2,359.8 L415.8,364.0 L414.7,365.7 L413.4,366.0 L412.2,364.7 L412.8,360.2 L409.5,359.3 L408.9,360.2 L410.2,361.8 L410.0,363.2 L408.7,363.8 L406.4,363.0 L405.2,365.1 L406.3,366.7 L411.8,369.7 L412.5,371.3 L411.8,372.8 L409.2,373.6 L404.0,369.9ZM418.0,235.6 L426.8,237.8 L428.0,236.1 L427.0,234.6 L422.9,232.9 L421.3,233.5 L419.2,233.0 L418.0,235.6ZM425.8,272.3 L427.5,272.1 L426.5,270.3 L424.9,270.8 L425.8,272.3ZM410.6,442.5 L411.8,442.4 L421.7,435.5 L422.7,433.6 L424.7,433.4 L427.0,431.9 L427.3,430.3 L421.7,429.4 L420.5,429.9 L418.1,434.2 L409.6,440.6 L409.5,441.6 L410.6,442.5ZM419.0,311.7 L423.2,311.8 L426.0,308.7 L426.1,307.8 L425.0,307.5 L418.6,310.5 L419.0,311.7ZM410.2,355.2 L410.9,356.3 L414.2,356.9 L419.3,355.0 L424.8,340.3 L424.6,339.4 L416.9,337.1 L410.2,355.2ZM420.8,403.2 L422.0,403.5 L424.0,402.0 L424.0,401.0 L421.6,400.1 L420.8,403.2ZM392.0,256.8 L394.4,259.5 L400.
381380,259.4 L400.4,253.1 L401.3,252.1 L402.6,252.3 L403.4,253.4 L404.1,267.3 L406.8,267.8 L407.9,270.7 L416.5,271.5 L417.3,270.8 L417.0,266.0 L418.4,265.0 L421.1,265.4 L423.8,257.1 L422.6,254.2 L421.2,253.1 L418.5,254.1 L416.7,253.6 L414.4,254.3 L408.6,253.4 L406.9,252.0 L406.4,250.3 L406.9,246.3 L408.0,245.6 L410.3,245.8 L410.9,245.1 L408.8,242.7 L408.7,241.4 L410.1,240.4 L412.2,241.6 L413.8,241.4 L413.7,237.0 L407.3,232.7 L405.0,235.8 L401.7,236.6 L397.6,234.1 L393.2,234.0 L392.7,231.8 L396.6,230.9 L398.3,226.8 L393.5,223.3 L392.7,223.9 L389.4,239.9 L391.8,240.5 L393.2,237.2 L394.9,236.7 L395.9,237.9 L395.5,241.1 L401.2,242.7 L402.0,244.2 L399.9,247.5 L393.8,247.2 L392.0,256.8ZM417.8,241.8 L418.8,242.6 L421.8,241.4 L422.2,240.5 L418.2,239.3 L417.8,241.8ZM416.2,390.5 L416.2,391.8 L419.6,393.7 L422.1,390.0 L421.9,387.5 L420.5,386.5 L419.1,387.0 L416.2,390.5ZM417.9,398.8 L418.5,400.0 L420.2,399.0 L419.1,397.8 L417.9,398.8ZM409.6,399.1 L409.1,401.3 L412.8,404.8 L416.4,406.2 L417.9,405.2 L417.9,400.0 L415.4,399.6 L411.7,395.4 L410.8,395.4 L409.2,397.2 L409.6,399.1ZM415.9,275.6 L415.0,276.4 L415.8,278.0 L417.6,276.7 L415.9,275.6ZM404.7,437.1 L405.8,438.7 L407.0,438.8 L413.8,433.7 L414.0,432.8 L412.6,431.7 L411.1,431.9 L405.3,436.0 L404.7,437.1ZM412.0,338.6 L413.1,338.3 L413.7,335.4 L410.7,334.6 L408.6,335.4 L408.6,336.6 L412.0,338.6ZM395.9,427.7 L398.6,432.5 L399.6,432.8 L402.6,432.1 L406.9,428.7 L408.8,428.4 L409.9,427.0 L412.5,426.6 L411.2,424.1 L407.5,425.7 L405.2,423.3 L405.1,421.9 L406.7,420.2 L405.2,416.8 L406.0,414.7 L403.2,412.1 L400.9,411.6 L399.7,412.3 L402.8,416.5 L402.9,418.0 L402.1,419.6 L400.1,419.3 L399.7,417.0 L397.6,415.2 L394.5,417.8 L396.8,422.8 L400.8,424.2 L403.2,426.1 L403.4,427.7 L401.7,428.6 L397.2,426.1 L395.9,427.7ZM397.0,406.4 L397.9,408.7 L400.5,408.4 L400.9,407.3 L399.0,406.0 L398.8,404.6 L400.1,403.5 L402.1,404.1 L404.5,407.3 L405.2,409.7 L409.6,413.4 L411.5,412.9 L410.8,410.9 L411.0,408.9 L407.4,406.5 L407.3,403.8 L404.4,403.0 L403.3,401.2 L397.5,401.8 L397.0,406.4ZM398.6,338.5 L398.3,346.3 L399.2,348.5 L406.4,353.6 L407.4,353.6 L411.3,341.9 L408.5,340.3 L407.6,337.9 L406.8,337.5 L404.1,339.2 L398.6,338.5ZM408.2,448.9 L410.6,447.8 L411.0,447.0 L407.4,445.0 L406.0,446.9 L408.2,448.9ZM407.1,394.2 L410.0,391.7 L408.6,390.0 L405.7,392.7 L407.1,394.2ZM401.0,278.2 L399.5,280.1 L400.1,284.1 L402.1,284.5 L406.9,281.9 L405.2,274.5 L401.5,274.7 L401.0,278.2ZM384.8,385.2 L384.0,386.2 L386.2,391.2 L388.5,391.5 L389.5,392.4 L389.8,398.1 L394.2,398.2 L394.9,394.3 L396.3,393.4 L397.8,394.5 L397.9,398.3 L401.1,398.4 L405.2,393.8 L403.5,391.2 L405.2,387.5 L404.2,386.9 L402.5,387.9 L401.2,387.6 L400.6,386.5 L401.2,384.2 L396.0,379.8 L388.3,384.6 L384.8,385.2ZM404.9,288.5 L404.5,287.0 L402.8,287.9 L403.5,289.1 L404.9,288.5ZM370.3,358.1 L373.0,356.2 L374.6,356.8 L376.2,359.5 L376.0,361.9 L379.7,363.7 L381.0,361.3 L378.5,358.8 L378.4,357.2 L379.8,356.4 L382.4,357.3 L383.3,354.4 L386.2,351.2 L386.8,349.4 L388.6,348.5 L390.5,349.5 L390.8,351.4 L386.0,356.1 L385.4,361.7 L389.3,362.4 L390.3,358.6 L393.4,358.3 L394.4,359.5 L394.4,363.9 L397.5,365.9 L399.3,364.6 L401.5,364.7 L404.7,359.4 L404.0,358.5 L401.7,359.0 L400.6,358.5 L400.3,356.8 L402.1,355.5 L402.2,354.6 L396.9,350.5 L394.9,345.7 L392.9,345.7 L391.9,344.9 L392.1,343.2 L395.1,341.6 L394.9,337.2 L394.0,337.0 L388.9,339.8 L386.6,336.1 L383.5,336.3 L380.3,333.5 L368.8,349.5 L367.8,356.0 L370.3,358.1ZM394.5,268.1 L400.6,269.0 L400.5,262.8 L394.6,262.8 L393.5,267.3 L394.5,268.1ZM397.5,434.0 L393.6,434.4 L394.4,435.9 L397.0,435.9 L397.5,434.0ZM381.6,285.9 L382.6,287.7 L394.1,290.1 L396.9,287.8 L396.2,286.5 L382.9,283.5 L382.1,284.0 L381.6,285.9ZM389.0,281.3 L396.1,283.0 L396.4,279.7 L394.7,277.6 L389.6,274.7 L389.0,281.3ZM390.0,370.6 L392.7,372.3 L395.4,370.0 L395.1,367.9 L392.6,366.9 L391.0,367.3 L389.3,369.5 L390.0,370.6ZM384.5,413.5 L385.7,413.9 L387.8,411.7 L391.3,412.8 L392.1,411.3 L394.1,410.3 L393.3,407.2 L389.5,407.7 L388.3,409.5 L384.3,410.9 L384.5,413.5ZM383.7,381.3 L385.3,382.1 L386.9,381.9 L392.7,377.6 L385.4,371.2 L381.4,376.9 L383.7,381.3ZM389.4,423.8 L388.3,424.8 L389.3,427.0 L390.1,427.3 L391.7,424.6 L389.4,423.8ZM390.7,294.3 L391.5,293.6 L391.0,292.6 L382.7,290.9 L381.8,291.4 L382.3,292.6 L390.7,294.3ZM385.6,264.0 L388.0,268.9 L389.7,269.2 L391.5,261.4 L389.3,259.1 L385.1,257.2 L382.4,264.2 L383.3,264.9 L385.6,264.0ZM381.3,330.1 L386.2,332.9 L387.1,335.8 L390.1,336.0 L391.4,335.0 L391.2,334.1 L382.7,327.0 L381.3,330.1ZM386.8,420.3 L389.9,420.3 L391.2,417.9 L390.0,417.2 L386.6,417.6 L386.8,420.3ZM385.6,253.3 L388.9,255.0 L389.7,251.0 L386.4,250.3 L385.6,253.3ZM384.7,239.5 L385.5,238.9 L389.5,220.9 L386.4,218.4 L385.5,219.0 L381.1,238.2 L381.6,239.0 L384.7,239.5ZM302.8,309.8 L299.6,308.2 L297.7,309.7 L300.
381381,312.8 L301.7,313.6 L303.7,313.3 L305.1,314.7 L307.1,314.7 L308.8,316.6 L313.3,313.3 L315.3,313.3 L325.4,324.3 L328.7,319.8 L323.6,317.8 L320.2,315.5 L319.3,313.5 L319.8,310.7 L323.3,307.3 L325.5,306.1 L335.9,305.6 L336.5,302.8 L337.5,302.0 L339.1,302.5 L340.0,305.3 L348.9,305.0 L354.7,305.8 L362.5,308.5 L367.6,311.3 L368.3,312.7 L367.2,314.0 L362.4,312.7 L361.9,318.8 L360.2,319.8 L359.0,319.0 L358.6,316.8 L359.5,310.8 L355.9,309.5 L353.7,318.6 L352.5,320.6 L343.7,323.5 L338.7,323.8 L338.0,324.8 L338.2,330.0 L340.9,334.7 L341.9,334.4 L344.2,329.9 L347.3,328.6 L348.8,329.1 L348.4,332.3 L355.4,339.6 L353.1,344.5 L355.7,346.0 L359.3,346.8 L360.3,348.0 L360.3,350.2 L362.7,351.5 L365.6,349.4 L369.1,343.3 L366.5,342.0 L359.9,342.0 L359.7,339.1 L355.1,335.2 L355.6,330.4 L356.6,329.6 L358.0,330.1 L361.7,334.4 L362.7,338.0 L364.0,338.8 L367.0,338.8 L368.1,337.6 L368.7,334.8 L371.3,333.7 L370.9,332.7 L366.4,329.6 L366.6,328.2 L368.5,326.7 L370.2,326.7 L373.0,330.4 L375.2,331.2 L378.0,324.3 L374.9,321.3 L374.8,319.8 L377.4,317.9 L380.5,320.1 L381.6,319.8 L389.2,297.8 L388.7,297.0 L382.1,295.6 L380.7,294.1 L375.7,293.2 L373.3,294.3 L368.5,293.2 L367.2,291.7 L365.5,291.3 L365.0,289.6 L369.7,279.7 L367.8,278.4 L367.0,276.7 L364.8,277.1 L360.0,275.2 L359.2,275.7 L356.9,282.1 L363.7,285.2 L364.3,287.1 L362.6,288.0 L355.6,285.4 L353.2,290.8 L360.0,294.3 L360.5,295.6 L359.7,296.7 L352.0,294.4 L350.0,298.4 L348.4,299.0 L347.3,297.5 L348.1,294.1 L344.0,292.4 L340.5,298.8 L338.9,299.5 L337.7,298.3 L338.0,295.0 L328.2,290.8 L327.9,289.2 L329.5,288.2 L339.0,292.0 L340.0,291.6 L351.9,261.5 L351.5,260.6 L345.7,257.9 L337.9,273.5 L338.6,275.6 L337.8,279.5 L335.6,280.5 L333.7,284.4 L332.6,285.1 L330.9,283.9 L331.6,280.9 L329.7,280.4 L324.5,291.1 L324.8,292.1 L327.6,292.6 L331.7,295.7 L331.8,297.9 L330.1,298.2 L326.2,295.4 L319.5,294.7 L317.3,296.9 L315.2,297.2 L313.8,295.2 L311.5,295.0 L310.8,293.2 L308.9,291.8 L309.3,290.1 L311.4,289.3 L311.4,287.7 L304.0,285.6 L303.4,286.6 L304.5,288.5 L303.9,290.5 L305.4,292.4 L305.6,294.5 L314.7,301.5 L317.6,300.7 L320.4,301.8 L322.6,300.9 L323.8,302.7 L320.7,305.4 L317.4,306.3 L315.0,305.6 L309.3,301.7 L304.1,306.2 L304.7,307.0 L307.5,307.4 L309.2,305.8 L310.7,305.9 L311.4,307.6 L309.8,309.8 L307.2,310.5 L302.8,309.8ZM382.7,365.8 L386.7,367.7 L387.7,365.6 L383.3,364.0 L382.7,365.8ZM384.5,432.0 L386.4,432.0 L387.0,431.0 L383.2,422.1 L382.3,421.7
38138L381.4,422.8 L384.5,432.0ZM382.9,390.9 L381.7,389.5 L379.7,391.0 L381.5,394.7 L382.9,394.3 L382.9,390.9ZM383.0,250.3 L382.3,249.5 L378.9,249.0 L378.1,251.2 L382.1,252.6 L383.0,250.3ZM372.0,235.3 L372.5,237.5 L376.4,238.2 L377.2,237.6 L382.2,215.9 L378.2,212.8 L377.1,213.4 L372.0,235.3ZM367.9,370.1 L370.4,371.6 L372.2,373.8 L371.0,375.4 L368.2,374.9 L368.1,378.7 L371.9,380.3 L374.7,377.8 L375.1,375.1 L379.0,374.7 L382.1,369.5 L368.5,360.9 L367.7,361.7 L367.9,370.1ZM377.8,266.1 L378.6,265.6 L381.6,256.4 L381.1,255.6 L377.9,254.8 L377.1,255.3 L374.2,264.3 L374.7,265.1 L377.8,266.1ZM379.0,396.9 L377.6,397.3 L378.5,399.4 L380.9,399.1 L381.0,397.9 L379.0,396.9ZM374.0,386.3 L374.9,389.5 L375.9,389.8 L379.6,387.1 L379.8,386.2 L377.9,384.4 L376.1,385.5 L374.6,385.4 L374.0,386.3ZM367.1,420.8 L368.1,421.5 L373.9,419.9 L376.2,420.9 L378.2,420.2 L379.6,418.7 L368.6,404.5 L367.6,405.2 L367.1,420.8ZM371.9,286.6 L375.8,287.7 L377.4,289.1 L379.2,288.6 L376.5,285.0 L372.2,285.0 L371.9,286.6ZM376.1,391.0 L375.1,390.7 L374.4,391.8 L376.2,394.2 L377.0,393.3 L376.1,391.0ZM366.7,257.5 L368.6,259.7 L371.4,259.8 L373.8,252.7 L374.1,248.2 L370.0,247.9 L366.7,257.5ZM360.9,271.5 L361.3,272.4 L366.0,274.4 L367.1,276.4 L370.8,275.6 L371.2,273.3 L369.2,271.9 L368.7,269.7 L366.8,269.3 L365.6,267.7 L362.8,267.3 L360.9,271.5ZM367.9,394.4 L368.7,395.1 L370.4,394.3 L370.0,392.4 L368.2,392.5 L367.9,394.4ZM359.5,253.1 L363.1,255.8 L364.1,255.5 L366.3,250.4 L366.4,247.0 L362.0,246.6 L359.5,253.1ZM360.5,372.3 L363.5,376.7 L364.7,376.7 L364.2,365.2 L362.5,365.6 L362.7,368.2 L360.5,372.3ZM362.8,358.0 L363.8,357.7 L363.8,356.8 L361.7,355.0 L360.8,355.0 L360.3,356.5 L362.8,358.0ZM357.3,225.3 L362.3,226.4 L363.5,222.6 L357.5,221.1 L356.3,224.2 L357.3,225.3ZM355.8,230.7 L356.9,232.1 L360.7,232.0 L361.6,231.5 L361.9,230.2 L361.4,229.5 L357.2,228.5 L356.1,229.1 L355.8,230.7ZM358.9,359.9 L356.3,364.8 L357.7,366.1 L361.1,365.0 L361.3,360.8 L358.9,359.9ZM357.2,264.4 L357.4,267.4 L353.9,267.2 L353.3,269.2 L357.8,270.6 L360.2,264.9 L357.8,263.7 L357.2,264.4ZM353.9,257.3 L354.9,256.8 L359.9,242.0 L359.3,241.3 L352.6,240.2 L351.9,240.7 L351.7,242.5 L355.7,244.2 L356.6,245.8 L353.4,255.1 L353.2,256.6 L353.9,257.3ZM342.0,352.8 L352.2,363.2 L354.2,361.6 L356.6,357.7 L356.5,355.7 L357.9,352.5 L353.6,351.2 L353.0,354.2 L351.5,355.1 L350.2,354.2 L349.5,350.8 L342.1,351.6 L342.0,352.8ZM349.0,291.0 L349.9,290.4 L356.3,274.5 L355.9,273.6 L352.4,272.3 L351.5,272.8 L345.1,288.7 L345.5,289.6 L349.0,291.0ZM348.4,234.9 L349.2,236.1 L353.0,234.7 L352.3,232.4 L353.5,227.3 L353.0,226.5 L350.1,226.9 L348.4,234.9ZM341.4,316.4 L336.0,315.8 L334.0,318.5 L334.2,319.5 L337.2,320.6 L340.5,320.7 L350.0,318.6 L352.3,308.9 L348.8,308.1 L339.8,308.5 L338.6,313.0 L340.8,313.4 L345.4,312.3 L346.4,312.9 L346.6,314.2 L345.7,315.2 L341.4,316.4ZM344.2,336.9 L349.9,341.7 L351.5,340.6 L351.4,339.7 L346.2,334.6 L345.2,334.7 L344.2,336.9ZM343.7,251.6 L349.3,254.3 L350.2,252.6 L349.5,249.2 L347.6,247.6 L348.5,243.7 L347.6,241.8 L346.8,242.2 L343.7,251.6ZM341.5,231.5 L342.1,232.3 L345.8,232.6 L346.6,227.3 L342.3,227.8 L341.5,231.5ZM338.7,336.9 L331.0,340.7 L330.9,341.8 L338.4,348.5 L345.8,347.6 L343.3,342.6 L343.1,340.6 L338.7,336.9ZM334.8,236.1 L333.9,236.6 L331.2,245.5 L333.1,246.1 L335.7,239.2 L337.6,238.6 L338.5,240.3 L336.0,247.9 L339.8,249.8 L344.0,237.8 L342.5,235.5 L340.8,235.3 L338.8,236.9 L334.8,236.1ZM338.7,258.2 L335.6,256.6 L334.3,259.8 L339.5,262.1 L342.3,256.2 L340.8,255.7 L338.7,258.2ZM329.8,268.9 L330.2,269.8 L335.1,271.8 L337.9,265.3 L332.7,263.0 L329.8,268.9ZM325.0,315.0 L331.2,317.0 L334.6,312.4 L336.0,309.3 L328.4,308.8 L325.2,309.7 L322.4,312.7 L325.0,315.0ZM327.7,326.9 L329.6,330.4 L327.5,333.5 L329.6,336.7 L330.6,336.7 L333.2,334.2 L335.7,334.1 L334.7,323.1 L331.4,322.0 L327.7,326.9ZM335.4,277.5 L335.1,275.5 L332.4,274.9 L331.8,277.4 L334.4,278.4 L335.4,277.5ZM328.3,231.0 L328.9,232.0 L331.8,232.1 L334.9,224.0 L334.6,223.1 L331.9,222.5 L328.3,231.0ZM321.9,241.5 L328.1,243.8 L330.7,235.7 L322.6,234.5 L321.9,236.1 L320.5,237.1 L320.0,239.1 L321.9,241.5ZM321.1,265.0 L321.5,265.9 L326.6,267.8 L329.5,261.3 L324.4,258.8 L321.1,265.0ZM319.0,286.3 L314.4,290.3 L315.0,291.0 L320.9,291.4 L329.5,273.8 L329.3,272.8 L320.4,268.8 L319.4,269.0 L318.6,272.8 L321.1,273.9 L323.6,273.3 L325.8,274.4 L326.2,275.7 L325.4,276.8 L323.4,277.2 L320.4,280.9 L320.7,283.0 L319.0,286.3ZM323.2,351.6 L323.1,352.7 L324.8,353.5 L327.3,349.9 L325.8,348.7 L323.2,351.6ZM323.0,345.9 L324.1,345.9 L325.8,343.8 L324.4,341.9 L321.9,344.3 L323.0,345.9ZM320.8,360.3 L320.2,365.0 L321.2,365.0 L323.4,362.2 L323.3,361.2 L320.8,360.3ZM317.7,324.3 L317.3,327.9 L318.8,328.9 L322.0,325.6 L314.8,317.1 L313.9,316.8 L312.7,318.4 L317.7,324.3ZM309.7,260.4 L310.1,261.2 L317.6,264.2 L320.4,259.0 L318.4,258.2 L317.1,260.1 L315.1,260.7 L312.6,259.9 L310.9,257.8 L309.7,260.4ZM314.5,271.2 L315.5,270.8 L316.3,267.2 L308.5,264.3 L307.4,268.5 L314.5,271.2ZM312.2,285.9 L312.9,286.9 L314.6,286.1 L315.4,285.3 L315.3,284.0 L313.3,283.4 L312.2,285.9ZM304.3,275.6 L304.7,276.5 L310.8,278.6 L312.5,275.2 L310.5,273.0 L306.3,271.5 L304.3,275.6ZM308.5,233.2 L310.2,234.2 L311.1,233.4 L309.4,232.0 L308.5,233.2ZM302.9,216.2 L305.8,225.5 L307.4,228.4 L308.7,228.7 L310.0,226.2 L306.3,215.2 L303.2,214.8 L302.9,216.2ZM293.7,252.0 L296.4,254.0 L296.7,256.1 L300.5,257.5 L301.4,257.2 L302.3,255.2 L303.9,255.0 L304.8,256.2 L304.5,258.9 L306.0,259.5 L306.8,259.1 L308.0,254.2 L307.6,253.4 L294.8,249.9 L293.7,252.0ZM299.9,304.0 L305.1,301.6 L306.4,299.1 L304.4,297.6 L303.3,297.7 L302.9,299.8 L301.5,301.6 L299.4,302.6 L299.9,304.0ZM290.2,262.2 L303.6,267.1 L305.0,264.6 L300.5,262.3 L299.4,260.4 L291.5,257.9 L290.2,262.2ZM288.4,227.4 L291.4,229.9 L294.0,230.5 L293.9,234.1 L294.5,234.7 L296.7,233.6 L298.6,234.5 L304.5,234.1 L304.3,232.5 L301.2,231.3 L301.7,228.9 L301.
381381,228.1 L288.8,226.3 L288.4,227.4ZM300.4,382.2 L300.1,383.8 L303.0,385.9 L304.0,385.8 L304.4,384.5 L302.3,381.8 L300.4,382.2ZM299.2,350.5 L300.3,350.3 L304.2,345.3 L303.1,343.5 L302.2,343.6 L297.7,348.2 L299.2,350.5ZM301.4,281.9 L302.0,283.1 L303.0,283.1 L303.8,280.2 L302.3,280.0 L301.4,281.9ZM301.0,354.4 L300.9,355.4 L301.9,356.1 L303.3,355.0 L302.3,353.7 L301.0,354.4ZM293.9,337.7 L290.9,335.6 L289.8,337.8 L292.1,339.3 L292.9,341.2 L295.2,340.9 L298.3,343.0 L299.1,341.7 L297.8,340.5 L297.7,339.2 L301.6,334.5 L301.7,332.6 L302.9,330.9 L293.8,323.5 L292.1,325.7 L297.5,330.7 L297.9,332.6 L297.1,335.8 L295.5,337.7 L293.9,337.7ZM300.5,269.9 L299.7,274.2 L300.7,275.0 L302.6,271.1 L302.4,270.1 L300.5,269.9ZM292.9,362.1 L297.0,366.0 L301.3,360.8 L296.7,357.5 L292.9,362.1ZM293.5,296.8 L296.4,298.3 L299.1,295.2 L297.1,291.2 L296.1,291.3 L294.7,294.4 L293.1,295.2 L293.5,296.8ZM294.0,313.5 L289.0,317.2 L290.6,319.3 L295.1,314.0 L294.0,313.5ZM292.0,211.2 L291.4,212.6 L293.6,214.2 L294.5,214.1 L294.6,212.9 L292.9,211.2 L292.0,211.2ZM291.9,280.6 L292.7,281.2 L293.5,280.5 L294.4,276.7 L293.9,275.9 L292.4,276.1 L291.5,278.6 L291.9,280.6ZM288.1,331.3 L290.3,331.6 L291.5,329.4 L288.9,327.8 L287.2,329.8 L288.1,331.3ZM284.7,250.5 L285.1,251.4 L289.5,253.1 L291.3,249.1 L286.5,246.7 L284.7,250.5ZM287.0,277.8 L287.8,278.3 L288.7,277.9 L289.5,275.0 L289.1,274.2 L287.1,274.2 L287.0,277.8ZM283.6,263.6 L284.9,264.6 L285.8,264.2 L288.4,256.8 L284.2,254.4 L282.0,258.2 L283.0,259.7 L283.6,263.6ZM281.8,320.4 L286.2,323.9 L288.1,322.4 L286.0,318.4 L285.9,316.4 L286.9,314.2 L284.3,312.4 L282.6,312.6 L280.7,311.6 L279.5,312.3 L277.8,316.0 L279.2,318.0 L281.7,315.9 L283.4,316.3 L283.7,317.8 L281.8,320.4ZM215.9,165.5 L213.3,164.6 L212.9,165.5 L219.5,191.1 L219.8,194.8 L220.9,195.2 L222.1,193.8 L223.9,193.3 L225.4,195.2 L228.7,196.7 L230.5,195.5 L232.6,195.7 L237.4,191.8 L230.9,186.0 L230.9,184.6 L232.4,182.8 L234.9,182.8 L236.9,180.6 L239.6,179.5 L241.4,179.6 L242.5,177.7 L249.4,173.9 L251.7,173.9 L253.0,172.5 L257.1,170.4 L259.9,170.2 L261.0,168.1 L263.2,166.6 L265.8,166.7 L267.4,168.5 L266.0,176.6 L266.5,179.3 L263.5,184.8 L260.7,185.2 L256.4,180.7 L255.4,180.5 L253.1,182.0 L253.6,184.3 L253.1,185.9 L251.6,186.9 L249.2,187.3 L249.0,189.6 L247.5,191.5 L246.3,191.8 L243.6,190.8 L235.7,197.2 L235.6,198.3 L237.6,200.2 L237.2,201.9 L235.9,202.2 L233.4,200.5 L232.4,200.8 L231.5,202.9 L233.0,204.3 L233.1,205.7 L232.1,206.6 L230.2,206.6 L229.5,208.4 L230.4,211.2 L232.8,212.4 L233.7,214.6 L234.6,214.5 L237.3,211.5 L239.7,207.0 L239.5,203.1 L242.1,199.4 L244.8,198.4 L250.9,197.8 L252.8,198.4 L255.0,200.3 L258.1,196.8 L260.7,196.7 L264.0,193.5 L267.6,196.2 L267.8,197.7 L266.2,200.3 L268.8,203.3 L268.5,205.0 L266.0,209.0 L269.0,210.7 L274.0,210.9 L277.2,202.7 L274.2,197.6 L273.0,192.2 L274.2,190.7 L275.9,191.4 L277.2,194.3 L277.3,197.1 L280.1,201.0 L284.7,204.1 L287.2,202.6 L285.6,194.1 L282.7,190.7 L280.6,185.9 L274.9,183.0 L272.4,179.7 L272.5,177.1 L273.6,175.0 L275.6,173.8 L278.2,173.9 L278.9,173.2 L275.2,164.3 L277.2,153.1 L276.8,152.2 L270.6,152.5 L270.7,155.5 L268.1,158.7 L263.0,161.2 L261.8,160.7 L261.4,159.5 L263.7,157.5 L263.8,156.6 L260.8,153.8 L259.6,154.0 L252.7,157.4 L251.5,158.9 L248.9,159.4 L248.2,161.5 L245.9,163.0 L246.0,165.2 L244.8,166.2 L243.4,165.7 L241.2,162.0 L234.6,162.6 L222.9,161.6 L220.6,165.4 L215.9,165.5ZM284.9,342.5 L282.4,346.6 L283.3,347.0 L286.2,345.8 L287.2,344.3 L284.9,342.5ZM284.3,337.2 L285.3,337.1 L287.1,334.9 L284.9,332.7 L282.5,335.0 L284.3,337.2ZM283.8,213.6 L284.7,213.7 L285.3,212.9 L284.2,210.5 L282.6,211.7 L283.8,213.6ZM256.3,221.9 L264.9,223.2 L266.6,225.8 L270.2,225.8 L272.2,224.2 L275.7,224.8 L276.4,226.0 L276.0,229.4 L274.5,231.3 L275.7,233.2 L277.5,232.7 L278.5,229.6 L281.4,229.3 L282.4,226.8 L282.0,225.9 L278.6,224.8 L278.0,220.5 L274.2,220.4 L272.1,221.7 L259.7,219.8 L258.5,218.7 L258.8,216.4 L255.8,214.5 L255.0,215.5 L255.5,217.7 L253.9,219.6 L256.3,221.9ZM281.6,206.9 L281.9,205.7 L280.0,204.8 L278.5,207.8 L279.5,208.4 L281.6,206.9ZM263.8,325.9 L261.2,326.3 L261.4,329.4 L264.4,327.1 L266.5,327.7 L266.4,329.3 L262.9,333.2 L263.1,334.3 L264.8,334.7 L268.0,331.5 L269.8,332.3 L269.7,333.8 L267.2,336.9 L269.1,338.7 L272.5,335.6 L275.2,336.2 L276.8,334.8 L276.8,333.7 L275.2,332.6 L275.2,331.2 L281.3,324.7 L279.4,323.6 L275.2,326.8 L269.0,327.7 L267.4,327.1 L268.0,324.9 L274.1,323.8 L276.1,321.8 L276.4,320.5 L274.8,317.2 L270.4,318.4 L267.6,317.9 L266.6,317.0 L266.5,314.8 L265.4,314.4 L262.0,318.4 L265.6,321.6 L265.8,323.1 L263.8,325.9ZM276.6,279.4 L278.7,279.3 L280.0,277.9 L279.1,273.5 L280.5,271.2 L279.6,270.4 L278.8,270.6 L274.7,276.5 L276.6,279.4ZM277.4,180.4 L278.8,181.7 L279.9,181.3 L278.7,178.9 L277.8,179.2 L277.4,180.4ZM276.9,346.2 L277.9,346.2 L279.6,344.1 L278.3,342.4 L275.8,344.4 L276.9,346.2ZM275.6,216.0 L275.7,217.4 L278.1,218.4 L279.0,218.0 L279.0,214.7 L275.6,216.0ZM272.9,254.3 L273.3,259.1 L276.4,259.2 L278.3,254.9 L276.0,253.3 L273.7,253.0 L272.9,254.3ZM258.5,250.3 L267.8,252.0 L269.3,249.2 L273.0,249.3 L274.0,246.4 L275.4,245.9 L277.3,246.9 L277.9,245.6 L276.9,244.9 L275.6,245.1 L274.4,243.9 L272.3,244.5 L267.6,242.5 L263.6,248.6 L261.6,248.8 L257.9,247.2 L257.3,249.6 L258.5,250.3ZM274.4,311.3 L273.9,312.6 L275.5,313.1 L276.0,311.4 L274.4,311.3ZM175.0,286.1 L177.5,293.6 L176.5,295.9 L180.0,299.7 L184.3,307.6 L188.0,310.3 L194.5,311.8 L207.9,312.6 L213.2,312.3 L233.0,304.0 L239.4,302.4 L275.3,301.3 L276.1,300.7 L274.9,298.8 L275.4,296.5 L274.6,295.7 L224.6,296.3 L223.8,294.6 L225.2,293.4 L274.5,292.7 L275.3,291.7 L272.3,288.3 L229.0,289.2 L228.1,287.8 L229.2,286.4 L240.1,286.0 L240.9,285.3 L240.4,280.6 L237.4,279.8 L236.1,278.2 L229.5,278.0 L227.9,277.0 L227.9,273.2 L230.2,265.2 L217.0,265.7 L212.8,265.1 L209.2,263.7 L208.2,261.6 L205.7,260.7 L203.2,258.6 L201.4,259.7 L202.7,262.5 L201.8,264.6 L200.4,265.2 L197.8,264.2 L195.4,267.3 L205.2,275.4 L205.5,277.1 L203.4,280.4 L205.9,282.7 L206.0,284.3 L204.1,285.4 L201.2,288.4 L193.6,282.9 L191.2,285.1 L198.0,291.4 L197.9,293.4 L196.3,293.8 L193.3,291.9 L190.2,295.1 L188.7,295.3 L184.4,290.1 L182.1,288.9 L181.0,286.6 L176.4,284.2 L175.0,286.1ZM266.5,27
381385.0 L268.5,275.2 L270.1,276.3 L272.9,275.0 L275.9,268.4 L269.2,264.7 L262.6,268.9 L262.4,270.0 L266.5,275.0ZM260.9,354.6 L273.4,365.5 L274.7,365.5 L275.6,361.3 L266.3,352.7 L261.1,353.5 L260.9,354.6ZM274.9,349.4 L274.8,348.4 L273.0,347.5 L269.8,351.7 L271.8,352.9 L274.9,349.4ZM266.4,215.6 L265.2,216.2 L265.3,217.3 L268.3,217.5 L268.3,216.4 L266.4,215.6ZM253.9,261.9 L260.0,266.8 L265.4,262.8 L264.7,262.0 L255.4,259.7 L253.9,261.9ZM263.4,258.4 L264.2,257.8 L264.2,255.0 L257.5,253.3 L256.7,253.6 L256.6,256.7 L263.4,258.4ZM263.0,367.5 L263.9,365.9 L260.6,362.8 L257.4,365.3 L260.6,369.1 L263.0,367.5ZM239.3,277.3 L242.8,277.7 L244.5,280.2 L253.4,279.9 L257.1,277.9 L258.0,275.9 L260.7,275.0 L261.1,274.2 L258.6,271.7 L255.0,274.0 L253.6,276.8 L252.2,276.6 L250.8,274.6 L239.6,274.7 L238.3,276.2 L239.3,277.3ZM247.1,251.5 L247.8,252.6 L251.0,252.3 L252.7,253.4 L253.5,252.8 L256.3,241.4 L255.4,239.0 L257.4,237.5 L258.7,234.6 L253.4,231.6 L252.4,232.2 L247.1,251.5ZM256.1,269.5 L256.1,268.4 L252.7,265.7 L249.0,264.6 L248.1,265.0 L248.0,266.8 L249.5,271.3 L252.8,271.5 L256.1,269.5ZM244.0,285.3 L244.7,285.9 L254.7,285.7 L255.5,284.8 L254.3,283.0 L244.7,283.3 L244.0,283.8 L244.0,285.3ZM246.7,260.6 L250.6,260.8 L253.0,257.3 L253.0,254.9 L246.2,256.0 L245.6,259.9 L246.7,260.6ZM243.9,202.8 L244.2,204.2 L247.1,206.4 L251.7,204.4 L250.7,200.9 L244.5,201.6 L243.9,202.8ZM247.9,227.0 L250.9,227.4 L250.9,226.3 L248.3,225.5 L247.9,227.0ZM243.8,368.0 L243.9,369.0 L244.9,369.1 L248.1,365.9 L248.1,365.0 L247.0,364.7 L243.8,368.0ZM247.7,238.3 L247.2,237.5 L244.9,237.4 L243.3,243.9 L245.9,244.3 L247.7,238.3ZM233.9,266.2 L238.5,269.4 L239.8,271.6 L245.7,271.0 L244.4,264.3 L242.1,264.4 L240.1,266.7 L236.3,266.3 L234.8,264.9 L233.9,266.2ZM244.4,229.9 L242.4,232.6 L244.6,233.4 L245.5,230.5 L244.4,229.9ZM243.0,212.5 L243.3,213.4 L244.3,213.6 L245.2,211.7 L243.9,211.2 L243.0,212.5ZM242.6,247.0 L241.7,247.5 L240.4,251.9 L241.0,252.9 L243.5,252.5 L244.8,248.5 L244.4,247.6 L242.6,247.0ZM238.4,184.9 L241.5,187.7 L243.6,185.8 L243.1,184.5 L239.6,182.7 L238.2,183.8 L238.4,184.9ZM224.8,261.1 L241.4,260.3 L242.3,256.6 L241.5,256.0 L224.6,257.1 L224.8,261.1ZM238.4,231.8 L239.3,231.5 L242.0,226.1 L239.9,225.1 L237.8,225.5 L235.7,223.9 L233.7,230.1 L238.4,231.8ZM239.2,242.8 L240.0,242.3 L241.8,236.5 L237.4,234.8 L235.1,241.3 L239.2,242.8ZM241.5,372.0 L234.9,366.3 L233.0,368.4 L239.3,374.3 L240.2,374.4 L241.5,372.0ZM236.7,352.0 L237.9,352.8 L239.0,351.0 L237.3,350.4 L236.7,352.0ZM232.5,250.9 L234.4,253.2 L236.8,253.0 L238.5,246.0 L234.1,245.1 L232.5,250.9ZM234.8,356.5 L234.9,357.6 L235.7,357.9 L236.8,356.2 L235.8,355.5 L234.8,356.5ZM230.9,274.4 L231.6,275.2 L235.2,275.0 L236.5,273.0 L236.2,271.7 L232.7,269.5 L230.9,274.4ZM226.6,231.8 L223.0,234.7 L223.5,236.0 L231.8,238.6 L232.7,238.2 L233.8,234.5 L233.3,233.6 L226.6,231.8ZM228.1,223.1 L230.0,226.5 L228.1,228.6 L230.2,229.4 L232.7,221.3 L230.8,220.8 L228.1,223.1ZM220.2,241.2 L220.3,244.7 L223.6,245.3 L225.2,244.0 L227.0,244.1 L228.7,247.5 L230.3,246.9 L231.5,242.4 L231.0,241.6 L222.0,238.8 L220.2,241.2ZM223.3,207.9 L224.2,207.6 L225.9,203.7 L221.8,202.1 L219.9,206.2 L223.3,207.9ZM220.4,106.7 L222.5,106.4 L221.8,103.9 L219.9,104.6 L220.4,106.7ZM216.9,250.6 L215.4,253.3 L216.1,254.1 L224.1,253.8 L224.8,253.0 L224.3,250.6 L222.1,250.0 L216.9,250.6ZM222.9,224.1 L223.9,223.3 L223.0,222.0 L219.0,220.6 L218.1,220.9 L218.3,222.1 L222.9,224.1ZM215.6,260.8 L216.3,261.6 L221.1,261.4 L221.2,257.4 L216.8,257.2 L215.6,260.8ZM214.3,233.7 L214.6,234.8 L215.7,234.7 L220.5,228.2 L220.3,227.2 L214.7,226.7 L214.6,227.7 L216.5,230.1 L214.3,233.7ZM213.5,106.5 L212.8,107.4 L213.7,108.9 L216.5,108.0 L215.9,106.3 L213.5,106.5ZM162.7,196.8 L162.6,198.2 L165.7,199.5 L182.6,203.6 L184.1,201.5 L181.6,200.5 L181.0,199.1 L183.4,196.9 L185.0,196.4 L187.2,197.2 L189.3,196.1 L191.2,198.2 L193.9,198.6 L196.6,194.9 L200.1,195.2 L202.3,192.4 L215.2,197.1 L216.0,194.4 L215.4,190.3 L207.9,164.0 L206.4,163.2 L191.6,166.5 L190.3,168.8 L189.6,173.3 L187.6,177.2 L191.9,181.2 L192.3,182.5 L188.9,186.5 L179.6,186.6 L173.3,181.1 L174.3,178.0 L171.1,175.5 L171.8,172.4 L169.0,172.6 L163.8,179.6 L166.0,182.4 L174.1,189.6 L174.5,191.0 L172.2,193.6 L164.3,195.2 L162.7,196.8ZM211.6,258.7 L212.9,258.6 L213.2,256.5 L210.2,256.4 L209.9,257.5 L211.6,258.7ZM213.2,224.1 L212.1,223.2 L210.6,224.3 L212.4,225.8 L213.2,224.1ZM212.6,230.8 L212.4,229.9 L209.4,227.6 L207.9,227.4 L206.9,228.4 L207.1,229.3 L209.9,230.6 L210.9,232.0 L212.6,230.8ZM202.9,198.4 L210.2,201.3 L210.9,199.3 L204.2,196.2 L203.2,196.4 L202.9,198.4ZM199.3,247.0 L199.0,248.6 L202.0,250.2 L205.8,245.9 L209.2,240.8 L209.2,239.9 L206.0,238.2 L199.3,247.0ZM199.5,159.7 L200.4,160.2 L206.2,158.9 L207.1,157.3 L206.4,152.4 L201.4,153.2 L199.2,154.4 L199.5,159.7ZM193.9,214.2 L189.5,213.5 L189.3,217.3 L191.1,219.2 L193.2,219.1 L194.4,216.7 L195.8,216.2 L198.1,217.2 L198.9,219.3 L202.4,220.8 L206.6,213.3 L205.1,210.9 L198.1,209.0 L195.3,213.8 L193.9,214.2ZM198.9,141.9 L196.1,143.5 L196.6,148.3 L197.4,148.8 L199.5,148.0 L201.0,149.9 L202.3,149.9 L203.7,146.1 L203.3,142.2 L202.1,141.6 L198.9,141.9ZM193.6,273.4 L194.6,273.2 L195.4,271.9 L193.6,270.3 L192.2,271.8 L193.6,273.4ZM192.8,157.0 L193.6,157.8 L194.7,
38138157.1 L194.4,153.5 L193.6,152.7 L192.5,153.7 L192.8,157.0ZM191.9,262.8 L193.3,264.3 L194.6,262.9 L193.2,261.5 L191.9,262.8ZM190.1,254.9 L193.5,256.2 L194.4,255.1 L193.7,253.2 L190.7,253.5 L190.1,254.9ZM185.4,226.6 L185.6,227.7 L189.3,229.4 L191.1,225.4 L187.4,223.5 L185.4,226.6ZM185.9,278.4 L186.4,282.9 L188.2,283.5 L190.5,280.2 L187.4,277.7 L185.9,278.4ZM184.3,268.8 L184.7,269.9 L185.6,270.1 L189.8,267.2 L190.0,266.2 L185.7,264.0 L184.3,268.8ZM185.0,200.7 L185.2,202.1 L187.2,201.8 L186.2,200.4 L185.0,200.7ZM178.4,258.5 L179.2,259.6 L181.0,258.3 L183.1,258.4 L186.5,252.7 L186.6,249.8 L181.8,246.9 L180.8,247.4 L180.1,255.3 L178.4,258.5ZM181.7,171.7 L181.8,172.7 L184.0,174.5 L185.9,173.2 L183.4,170.5 L181.7,171.7ZM182.2,147.1 L185.7,146.7 L185.6,145.5 L181.8,145.8 L182.2,147.1ZM177.1,222.7 L178.0,225.1 L177.2,227.1 L179.5,228.1 L182.1,223.7 L183.8,219.0 L181.3,217.7 L179.2,218.1 L177.1,222.7ZM174.1,213.5 L174.2,214.5 L176.2,215.4 L177.6,214.6 L177.3,213.7 L175.4,212.7 L174.1,213.5ZM172.8,166.0 L176.7,165.6 L177.2,164.6 L176.5,163.8 L172.7,163.4 L172.1,164.2 L172.8,166.0ZM169.9,229.7 L168.8,229.9 L167.1,233.9 L174.5,237.4 L176.2,233.4 L169.9,229.7ZM163.1,255.8 L162.6,259.5 L168.7,264.3 L170.3,264.0 L172.5,260.9 L172.1,260.0 L164.0,255.3 L163.1,255.8ZM166.2,208.6 L166.1,209.7 L167.4,211.1 L169.8,209.4 L167.8,206.6 L166.2,208.6ZM166.1,191.4 L168.0,191.6 L169.3,190.0 L166.7,187.4 L164.8,189.1 L166.1,191.4ZM163.6,248.8 L164.3,249.4 L165.2,248.9 L166.0,244.5 L165.4,243.6 L164.1,244.7 L163.6,248.8ZM161.9,231.4 L163.9,230.5 L165.3,227.7 L165.0,226.8 L163.0,226.1 L159.7,228.5 L159.4,230.0 L161.9,231.4ZM161.5,133.4 L162.9,136.9 L165.2,136.3 L163.1,132.1 L162.1,132.1 L161.5,133.4ZM158.8,214.8 L158.6,215.8 L159.8,216.8 L162.6,214.2 L161.5,213.1 L158.8,214.8ZM157.9,242.3 L156.0,252.8 L156.9,253.5 L159.1,251.2 L160.4,242.8 L159.9,242.0 L157.9,242.3ZM156.2,171.2 L158.3,170.6 L158.4,169.4 L156.0,169.8 L156.2,171.2ZM152.9,208.9 L154.1,209.1 L155.9,207.6 L155.9,206.6 L154.2,205.7 L152.1,206.3 L151.8,207.2 L152.9,208.9ZM146.3,214.2 L150.6,211.5 L148.4,207.5 L141.8,209.5 L146.3,214.2ZM147.3,273.4 L148.7,273.4 L150.5,270.2 L150.1,269.3 L148.1,269.6 L146.8,272.1 L147.3,273.4ZM141.6,254.6 L145.3,258.5 L147.1,257.8 L142.0,250.2 L141.2,250.7 L140.9,252.9 L141.6,254.6ZM546.6,201.1 L548.0,204.9 L549.1,204.5 L555.7,196.8 L555.6,195.7 L554.1,195.4 L550.6,196.5 L546.6,201.1ZM550.9,207.2 L550.8,208.3 L553.1,210.2 L555.2,208.6 L552.7,205.9 L550.9,207.2ZM539.8,207.2 L540.7,207.1 L543.5,203.8 L542.0,201.8 L540.0,201.2 L538.6,202.6 L538.0,205.2 L539.8,207.2ZM510.5,201.9 L511.5,201.8 L514.7,197.9 L514.6,196.7 L513.5,196.7 L510.9,198.7 L509.7,200.8 L510.5,201.9ZM464.1,175.6 L463.7,176.9 L471.4,183.4 L472.3,183.5 L473.7,182.1 L470.0,173.9 L464.1,175.6ZM463.2,120.1 L463.3,121.1 L468.4,125.7 L471.9,122.6 L471.7,121.8 L466.2,117.6 L463.2,120.1ZM457.0,126.6 L456.9,127.7 L462.1,132.4 L466.1,128.5 L460.8,123.2 L457.0,126.6ZM458.9,180.4 L458.9,181.3 L460.0,182.0 L462.4,180.2 L460.8,178.8 L458.9,180.4ZM450.6,133.2 L450.6,134.3 L455.8,138.9 L459.8,135.2 L454.4,129.8 L450.6,133.2ZM453.6,124.5 L454.7,124.5 L457.8,121.0 L455.8,118.7 L453.7,117.7 L450.4,121.1 L453.6,124.5ZM457.5,177.0 L455.4,175.3 L454.8,176.3 L456.6,178.1 L457.5,177.0ZM444.6,139.5 L444.2,140.9 L449.2,145.7 L453.5,141.8 L448.2,136.4 L444.6,139.5ZM435.7,188.5 L431.2,195.3 L433.8,197.4 L434.7,199.6 L436.8,200.7 L448.6,199.2 L451.7,195.6 L451.4,194.6 L437.7,183.5 L435.5,185.5 L435.7,188.5ZM445.5,162.9 L447.3,165.7 L449.4,165.4 L450.3,164.1 L447.2,161.1 L445.5,162.9ZM442.1,179.7 L446.5,183.4 L448.5,181.8 L447.6,174.3 L446.8,173.5 L445.2,174.7 L444.8,176.4 L442.1,179.7ZM445.5,129.2 L447.3,130.9 L448.3,130.2 L447.7,126.2 L446.0,127.4 L445.5,129.2ZM442.7,217.7 L446.0,219.7 L447.9,217.1 L444.1,214.5 L442.7,217.7ZM421.4,216.6 L420.6,217.1 L420.0,220.0 L420.6,221.0 L440.0,225.3 L443.4,222.6 L442.7,221.5 L421.4,216.6ZM439.3,135.8 L440.2,137.0 L441.2,136.9 L441.2,133.9 L439.7,134.2 L439.3,135.8ZM431.7,140.6 L431.8,141.6 L435.1,144.5 L439.0,140.5 L435.4,137.0 L431.7,140.6ZM431.5,153.1 L431.5,154.2 L436.4,158.9 L438.3,157.8 L438.3,156.8 L435.3,154.5 L436.2,150.6 L435.7,149.7 L434.7,149.8 L431.5,153.1ZM435.6,228.4 L434.9,230.7 L437.2,231.3 L438.2,229.5 L435.6,228.4ZM426.7,180.0 L425.6,182.3 L428.0,184.6 L427.7,187.2 L429.1,188.1 L434.7,181.1 L433.6,180.3 L432.0,180.7 L430.4,179.9 L426.7,180.0ZM425.8,148.6 L429.1,146.8 L431.4,148.6 L432.7,
38138147.0 L428.9,143.7 L425.2,147.4 L425.8,148.6ZM416.3,156.6 L416.4,157.6 L420.3,160.2 L426.2,153.6 L424.8,152.2 L422.8,152.8 L420.9,152.0 L416.3,156.6ZM415.8,171.5 L416.5,174.9 L422.1,179.5 L424.0,178.2 L424.1,175.8 L422.3,173.6 L421.5,170.5 L419.9,169.1 L418.3,169.0 L415.8,171.5ZM397.8,195.2 L398.8,200.8 L405.6,209.3 L407.0,209.3 L408.8,206.7 L410.2,205.9 L410.7,203.1 L413.3,203.2 L415.1,202.0 L417.5,204.0 L417.2,207.5 L418.8,208.4 L419.7,208.0 L421.7,201.6 L419.9,199.2 L418.6,194.0 L421.7,189.0 L409.8,178.7 L408.7,178.9 L396.3,192.7 L396.4,193.9 L397.8,195.2ZM408.7,146.2 L409.0,148.4 L412.3,149.0 L414.6,147.7 L417.7,150.1 L420.1,148.0 L413.7,141.5 L408.7,146.2ZM412.4,210.1 L411.8,210.9 L412.4,211.7 L413.9,212.1 L415.9,211.3 L414.9,210.0 L412.4,210.1ZM402.9,179.6 L404.0,179.5 L405.4,178.0 L405.3,177.0 L393.7,166.9 L392.7,166.9 L391.8,168.4 L392.6,170.8 L402.9,179.6ZM394.7,184.4 L394.8,185.4 L397.2,187.0 L401.0,182.2 L398.4,180.4 L394.7,184.4ZM395.8,178.5 L395.7,177.5 L391.8,174.7 L389.1,180.1 L392.0,182.4 L395.8,178.5ZM384.3,196.0 L384.5,197.0 L387.0,198.4 L394.4,190.3 L394.5,189.3 L391.8,187.6 L384.3,196.0ZM389.4,185.6 L389.2,184.5 L386.7,183.1 L379.4,191.3 L379.3,192.3 L381.9,193.9 L389.4,185.6ZM381.1,166.3 L383.3,169.4 L383.6,175.2 L386.6,177.3 L389.5,171.5 L386.1,162.8 L381.5,162.7 L381.1,166.3ZM376.1,189.2 L377.1,189.2 L384.3,181.0 L384.3,180.1 L382.5,178.5 L381.5,178.6 L374.4,186.6 L374.5,187.6 L376.1,189.2ZM384.1,201.7 L384.0,200.7 L381.6,199.1 L377.5,204.2 L380.4,205.7 L384.1,201.7ZM369.8,202.0 L370.8,205.1 L371.9,205.2 L379.0,197.2 L379.0,196.3 L377.2,194.7 L376.3,194.7 L369.8,202.0ZM364.1,198.4 L365.5,201.2 L366.4,201.1 L374.0,192.6 L374.1,191.6 L372.5,190.0 L371.4,190.1 L364.1,198.4ZM355.9,203.0 L370.2,186.7 L369.3,184.7 L368.4,184.7 L362.3,189.6 L352.1,201.0 L352.0,201.9 L355.9,203.0ZM344.9,175.3 L345.1,176.4 L347.8,178.0 L350.3,175.3 L354.7,172.5 L359.0,167.7 L359.0,166.5 L356.4,165.0 L344.9,175.3ZM345.7,197.0 L345.8,198.0 L348.9,200.0 L356.2,191.6 L356.3,190.6 L353.2,188.7 L345.7,197.0ZM339.1,169.7 L339.0,170.9 L341.6,173.3 L342.5,173.3 L354.1,162.9 L353.4,160.4 L352.3,160.1 L339.1,169.7ZM350.8,186.6 L350.6,185.6 L348.2,183.3 L347.3,183.3 L339.8,191.6 L339.7,192.5 L343.2,195.0 L350.8,186.6ZM332.4,193.0 L336.2,191.1 L345.1,181.0 L337.4,173.8 L336.4,174.3 L335.9,179.5 L337.9,181.3 L337.9,182.8 L336.6,183.7 L333.8,183.0 L329.2,191.0 L329.6,191.9 L332.4,193.0ZM309.5,169.8 L310.5,184.6 L315.4,186.1 L316.0,181.3 L314.0,169.7 L309.5,169.8ZM302.4,188.4 L297.5,187.5 L295.1,187.9 L294.5,188.7 L296.3,191.2 L305.8,196.4 L313.2,189.6 L311.1,188.2 L302.4,188.4ZM294.4,184.3 L305.1,185.6 L307.3,184.8 L307.1,178.6 L301.9,179.1 L299.7,178.6 L298.9,177.3 L300.0,175.7 L306.6,175.1 L305.7,169.3 L295.8,169.4 L294.2,170.1 L292.3,172.4 L292.3,176.0 L294.4,184.3ZM264.4,89.0 L264.1,90.0 L266.2,94.4 L268.5,94.1 L269.4,92.2 L269.0,87.0 L268.0,86.8 L264.4,89.0ZM242.4,109.0 L241.1,111.3 L243.9,116.4 L245.0,116.8 L246.2,115.2 L247.0,111.9 L245.3,105.2 L241.7,105.9 L241.3,107.1 L242.4,109.0ZM201.6,124.4 L202.6,124.4 L202.8,123.3 L199.9,119.5 L198.7,119.6 L198.5,120.8 L201.6,124.4ZM180.6,92.5 L175.6,91.1 L175.3,92.0 L182.0,110.6 L186.0,110.9 L187.8,116.3 L189.1,116.9 L190.8,113.1 L193.9,111.2 L192.7,107.6 L188.0,104.4 L183.8,99.6 L183.7,97.1 L181.4,94.8 L180.6,92.5ZM183.8,114.3 L181.6,115.5 L182.2,116.2 L184.3,115.5 L183.8,114.3ZM175.6,111.0 L176.6,111.4 L178.5,110.0 L175.7,102.0 L174.8,101.6 L172.9,102.9 L175.6,111.0ZM171.7,119.7 L172.5,120.1 L174.8,119.3 L173.9,116.3 L171.2,117.1 L171.7,119.7ZM171.5,98.5 L172.4,99.1 L174.1,97.9 L171.6,92.4 L169.9,93.6 L171.5,98.5ZM167.4,103.9 L167.0,104.8 L169.7,113.4 L170.5,113.9 L172.3,113.2 L172.7,112.3 L169.9,103.8 L167.4,103.9ZM166.3,120.9 L167.1,121.5 L168.6,120.9 L167.7,118.3 L166.2,118.8 L166.3,120.9ZM162.0,105.4 L161.3,106.2 L161.9,108.5 L164.6,109.6 L165.0,108.7 L164.0,105.5 L162.0,105.4ZM158.7,113.3 L161.5,114.3 L161.3,112.5 L158.9,111.2 L158.7,113.3ZM156.0,102.8 L155.6,103.7 L156.3,104.4 L159.6,103.7 L158.8,102.0 L156.0,102.8ZM153.9,98.3 L153.5,99.2 L154.4,100.0 L158.0,98.9 L158.4,98.1 L157.5,97.1 L153.9,98.3ZM140.4,143.6 L141.9,144.1 L142.6,141.4 L141.7,141.2 L14
381380.4,142.3 L140.4,143.6ZM123.6,276.2 L119.8,274.7 L119.0,275.3 L119.8,278.5 L123.7,277.9 L123.6,276.2ZM119.6,257.6 L120.1,259.6 L121.0,259.4 L122.7,257.8 L122.6,256.1 L121.7,255.9 L119.6,257.6ZM121.7,162.8 L122.3,162.0 L121.6,161.2 L118.4,161.5 L117.7,162.2 L118.4,163.2 L121.7,162.8ZM120.1,153.8 L118.6,155.8 L118.8,157.8 L121.3,158.0 L121.1,154.2 L120.1,153.8ZM117.1,254.9 L118.1,254.9 L120.6,252.5 L119.1,250.2 L115.6,252.6 L117.1,254.9ZM116.1,148.9 L117.2,150.3 L120.0,149.0 L118.9,147.0 L116.1,147.5 L116.1,148.9ZM118.2,269.9 L113.2,270.1 L114.1,272.6 L118.7,271.4 L118.2,269.9ZM113.0,170.2 L116.1,171.6 L116.9,171.2 L116.7,165.0 L112.7,165.7 L113.0,170.2ZM108.3,264.6 L106.9,266.6 L107.7,268.5 L110.9,267.9 L113.1,268.9 L114.0,268.4 L113.5,266.2 L110.7,265.6 L109.2,261.6 L108.2,262.0 L108.3,264.6ZM112.1,135.8 L112.9,134.6 L111.1,133.1 L110.7,135.3 L112.1,135.8ZM106.7,202.1 L107.5,202.7 L111.1,201.6 L111.7,197.4 L108.5,195.6 L107.2,189.3 L106.4,188.8 L105.4,189.6 L106.7,202.1ZM100.9,132.7 L103.6,133.7 L109.8,132.3 L110.3,131.3 L108.8,129.8 L101.4,131.5 L100.9,132.7ZM108.3,110.2 L102.7,113.2 L103.6,115.1 L109.2,111.6 L109.4,110.7 L108.3,110.2ZM105.9,138.9 L106.6,139.4 L107.7,139.0 L107.3,136.0 L105.7,136.6 L105.9,138.9ZM100.6,291.0 L101.4,291.6 L105.9,290.6 L106.4,289.1 L105.5,288.5 L101.0,289.4 L100.6,291.0ZM101.8,124.4 L103.2,126.8 L105.6,126.3 L106.1,125.2 L104.8,123.3 L102.4,123.6 L101.8,124.4ZM95.9,276.1 L96.8,276.6 L98.2,275.7 L104.9,274.7 L104.7,271.0 L103.8,270.6 L95.8,272.4 L95.9,276.1ZM100.7,263.7 L101.4,267.7 L103.6,267.3 L102.8,262.8 L100.7,263.7ZM97.6,199.6 L97.0,200.6 L98.3,202.0 L98.8,204.9 L103.5,203.6 L101.8,189.8 L99.7,190.6 L100.3,198.3 L97.6,199.6ZM92.3,156.9 L92.8,162.4 L102.1,160.7 L101.0,153.3 L97.5,153.5 L95.5,152.7 L94.7,154.8 L92.3,156.9ZM96.8,138.5 L97.7,142.5 L102.0,141.5 L100.6,137.0 L96.8,138.5ZM94.1,171.2 L98.0,171.0 L97.6,168.8 L93.9,169.1 L94.1,171.2ZM94.8,194.7 L95.6,195.3 L96.9,194.6 L96.0,190.9 L94.5,191.5 L94.8,194.7ZM90.5,284.9 L96.4,283.6 L96.0,280.3 L93.9,279.8 L92.0,281.0 L87.5,282.1 L87.3,284.7 L90.5,284.9ZM93.7,203.5 L94.4,204.1 L95.2,203.7 L96.0,200.9 L95.6,200.1 L93.5,200.6 L93.7,203.5ZM91.9,182.8 L93.1,187.9 L95.1,187.6 L94.7,181.9 L93.3,181.8 L91.9,182.8ZM89.6,250.9 L90.6,258.0 L93.7,258.0 L93.0,254.1 L94.3,252.4 L94.4,249.7 L89.6,250.9ZM88.1,277.8 L89.0,278.5 L91.5,277.5 L90.4,272.8 L87.4,273.5 L88.1,277.8ZM83.7,196.2 L84.5,207.8 L90.5,207.6 L90.1,199.1 L87.3,197.3 L85.9,193.3 L84.9,193.5 L83.7,196.2ZM85.9,150.8 L83.9,152.6 L85.8,154.5 L89.8,153.7 L88.9,148.6 L86.5,148.9 L85.9,150.8ZM74.5,150.5 L70.0,155.9 L70.6,156.7 L76.7,156.5 L78.4,159.1 L81.5,159.3 L85.8,162.4 L87.0,166.2 L89.4,165.8 L88.8,157.8 L85.0,157.7 L82.5,155.7 L79.9,155.8 L78.5,150.1 L74.5,150.5ZM78.8,257.9 L79.7,258.8 L81.2,263.9 L80.4,266.8 L82.8,267.0 L87.4,265.6 L86.8,260.8 L87.2,255.4 L85.4,248.6 L76.5,249.5 L78.8,257.9ZM78.6,169.4 L79.6,179.5 L78.8,181.5 L79.2,185.9 L79.8,186.6 L82.0,186.4 L82.7,185.6 L82.1,177.5 L84.5,174.7 L83.7,167.3 L83.0,166.8 L79.0,167.3 L78.6,169.4ZM70.3,159.8 L69.7,160.7 L70.4,161.9 L74.5,161.5 L75.1,160.8 L74.4,159.5 L70.3,159.8ZM67.6,258.5 L65.0,260.3 L66.7,264.6 L65.9,266.8 L67.2,269.9 L72.9,269.0 L73.3,268.1 L71.6,263.3 L68.6,258.8 L67.6,258.5ZM65.8,183.5 L66.1,187.8 L68.1,187.0 L67.8,183.5 L65.8,183.5ZM58.1,190.8 L57.6,193.5 L61.4,195.1 L63.7,193.8 L63.8,192.3 L62.5,191.6 L58.1,190.8ZM41.0,193.8 L41.8,196.2 L43.9,196.1 L45.4,191.2 L45.0,190.4 L42.4,189.9 L41.0,193.8Z"/><path class="sh sh-gained" data-ly="gained" d="M279.1,166.6 L280.0,167.8 L281.4,168.5 L283.2,168.5 L285.6,167.5 L289.2,169.1 L290.8,168.8 L294.6,166.5 L297.4,166.0 L314.2,166.5 L316.3,167.3 L317.6,169.8 L319.2,183.6 L318.8,186.6 L317.0,190.5 L316.9,192.3 L318.4,194.6 L321.1,195.1 L323.5,194.5 L325.0,193.1 L327.4,187.5 L332.8,178.5 L333.4,172.6 L334.5,169.5 L341.3,164.1 L341.9,162.4 L341.5,160.0 L341.9,159.1 L343.2,158.5 L345.6,159.6 L347.6,159.5 L352.6,156.1 L354.2,153.9 L355.5,153.7 L356.6,154.9 L356.0,157.6 L356.6,159.8 L361.6,164.6 L364.4,169.5 L363.6,170.6 L359.5,172.1 L356.5,175.0 L352.4,177.7 L351.4,179.1 L351.2,180.8 L352.1,182.7 L356.5,186.7 L358.1,187.4 L359.8,187.4 L367.8,181.3 L369.5,181.0 L372.4,182.2 L374.4,181.7 L379.8,175.8 L380.4,174.3 L380.4,171.1 L378.5,168.2 L377.9,166.3 L379.0,160.1 L379.0,157.7 L380.3,156.1 L381.7,156.4 L383.0,158.3 L384.4,159.2 L389.5,160.8 L392.9,160.6 L394.6,163.6 L403.1,170.8 L405.5,171.0 L407.7,169.4 L408.6,166.5 L408.1,164.3 L404.4,161.7 L402.3,158.3 L400.1,156.7 L399.7,155.6 L402.3,152.0 L402.3,150.3 L401.4,148.1 L401.6,146.9 L404.1,144.4 L406.3,143.9 L407.7,143.0 L409.5,140.8 L409.7,138.4 L408.9,136.9 L405.7,134.1 L398.8,128.4 L395.8,126.5 L395.4,125.2 L396.0,124.1 L397.4,123.9 L400.4,125.6 L417.1,140.2 L418.6,140.9 L420.0,140.8 L422.4,139.2 L423.1,136.3 L424.5,133.9 L424.3,131.9 L422.8,129.5 L423.0,128.3 L424.4,127.6 L426.5,128.6 L428.1,128.7 L431.7,127.0 L433.0,124.9 L432.4,121.7 L433.1,120.5 L434.6,120.3 L439.1,123.0 L441.1,122.9 L443.2,121.2 L443.5,
38138118.1 L444.1,117.2 L445.1,116.9 L447.1,117.6 L448.8,117.4 L453.1,114.0 L458.9,117.0 L461.3,117.1 L462.5,116.3 L465.6,113.0 L466.6,109.6 L468.1,109.1 L470.0,110.2 L470.7,111.2 L470.0,115.1 L471.1,117.4 L478.7,124.1 L480.3,124.6 L483.5,124.4 L487.2,126.6 L487.7,128.2 L487.1,129.1 L486.1,129.3 L482.7,127.7 L476.4,127.6 L474.4,129.1 L473.3,132.6 L472.6,133.0 L470.2,132.8 L468.6,133.7 L467.5,136.3 L468.5,138.8 L470.5,140.0 L473.4,139.4 L475.1,140.5 L474.8,142.8 L473.8,145.0 L474.2,147.8 L473.9,149.0 L472.8,149.9 L471.6,150.1 L468.8,148.2 L467.1,147.8 L465.7,148.2 L463.8,149.6 L461.3,149.3 L459.8,149.8 L458.1,152.1 L458.4,156.1 L457.5,156.7 L455.3,156.8 L454.0,157.4 L452.9,158.8 L452.6,160.7 L453.3,162.4 L459.7,169.6 L462.0,171.8 L463.9,172.4 L465.6,172.0 L479.1,165.5 L480.2,164.5 L481.2,162.4 L483.8,161.0 L486.8,161.5 L488.9,160.8 L492.7,160.7 L494.0,161.5 L494.0,163.0 L492.2,164.7 L491.5,166.3 L491.8,168.1 L493.3,170.5 L492.5,172.0 L491.1,172.1 L487.5,169.2 L483.0,167.5 L475.9,170.6 L474.2,172.3 L474.1,174.9 L476.9,180.7 L482.7,186.1 L481.8,189.9 L479.7,190.6 L474.6,188.5 L473.0,188.4 L469.7,190.4 L467.0,189.6 L465.2,189.8 L463.7,190.7 L462.9,192.3 L463.0,194.0 L463.7,195.5 L475.5,206.4 L479.4,210.9 L479.2,214.8 L481.0,217.4 L483.1,218.6 L485.7,218.0 L488.4,213.8 L497.9,203.2 L498.9,202.9 L500.9,203.5 L502.4,203.3 L506.3,200.3 L508.4,196.8 L511.2,194.1 L511.9,192.5 L511.1,189.8 L506.4,185.4 L506.6,183.9 L508.9,182.4 L510.0,183.0 L511.5,185.9 L525.8,198.2 L530.9,200.2 L533.5,199.6 L537.3,195.7 L542.7,197.4 L544.2,197.4 L545.7,196.7 L546.2,196.3 L548.6,193.6 L549.1,193.2 L558.1,190.6 L559.3,190.7 L560.7,192.4 L560.4,195.8 L556.1,201.2 L555.8,202.7 L556.2,204.3 L561.0,208.8 L561.9,211.8 L564.2,214.4 L568.3,217.5 L571.6,218.0 L572.5,219.0 L572.7,220.0 L572.3,220.8 L572.3,220.8 L566.6,227.3 L563.6,230.7 L567.4,226.3 L567.5,225.2 L566.9,224.3 L564.4,224.2 L561.9,225.5 L559.9,225.2 L550.0,216.9 L547.1,216.4 L543.8,213.9 L540.7,213.6 L535.9,209.7 L534.2,209.7 L531.6,212.0 L529.3,212.8 L525.0,217.5 L523.5,218.3 L520.8,218.0 L514.9,213.4 L513.7,213.8 L510.7,217.1 L511.6,214.8 L510.8,212.5 L503.6,206.2 L501.0,205.6 L499.0,206.5 L496.0,210.2 L496.0,212.7 L497.6,214.6 L495.7,214.6 L494.4,217.1 L493.0,218.2 L491.2,218.4 L488.4,217.6 L486.6,218.7 L486.2,220.0 L486.7,223.3 L484.4,226.8 L486.0,229.7 L466.9,208.4 L465.2,207.8 L462.8,208.3 L460.2,207.6 L456.4,209.2 L454.0,209.0 L452.1,206.8 L448.3,205.1 L446.7,204.9 L445.0,205.6 L443.8,207.3 L443.6,209.0 L444.4,211.3 L446.3,213.1 L450.9,213.8 L451.7,218.0 L452.6,219.1 L454.6,220.4 L454.8,221.9 L452.7,224.2 L451.9,227.8 L448.9,229.7 L447.2,232.4 L447.0,231.5 L446.2,230.6 L444.5,230.1 L442.8,230.5 L440.6,232.6 L437.8,232.8 L435.9,234.3 L434.2,234.7 L430.7,233.6 L428.4,230.6 L421.3,229.0 L420.1,228.3 L418.8,225.9 L419.4,221.7 L418.2,220.5 L416.6,221.3 L415.6,225.5 L415.4,223.3 L413.9,221.6 L411.7,221.2 L409.7,222.2 L407.0,226.0 L407.3,228.1 L408.5,229.6 L406.8,228.0 L405.9,224.3 L404.8,223.9 L402.0,224.6 L399.8,223.6 L398.5,222.1 L397.8,218.7 L394.8,216.8 L392.0,217.2 L390.3,216.7 L389.0,215.2 L388.3,212.4 L383.9,209.4 L381.3,209.7 L378.7,208.7 L375.7,209.0 L374.9,209.6 L374.1,211.6 L372.8,212.7 L371.1,213.1 L368.5,212.6 L367.5,213.0 L366.5,216.9 L364.8,218.6 L362.8,218.9 L357.5,217.9 L355.1,218.7 L356.3,217.1 L357.5,212.2 L356.9,210.3 L354.4,207.7 L350.9,206.4 L348.6,206.4 L346.2,207.1 L344.7,209.0 L346.0,206.7 L349.6,204.9 L349.6,202.8 L348.4,201.8 L341.8,203.8 L341.3,204.7 L341.6,207.2 L340.7,209.7 L340.0,210.9 L338.5,211.8 L336.7,211.9 L334.3,210.9 L331.3,211.3 L328.0,209.6 L325.3,211.6 L322.0,212.5 L320.6,212.6 L317.6,211.6 L315.3,213.9 L312.9,214.3 L311.1,213.5 L309.1,211.2 L311.4,210.9 L313.0,209.3 L313.6,205.9 L313.0,204.0 L311.7,202.8 L308.8,202.1 L302.0,198.3 L299.5,198.2 L296.8,199.9 L293.7,200.9 L292.7,202.2 L292.3,203.7 L292.7,205.3 L293.7,206.8 L292.8,205.5 L291.0,202.4 L289.1,193.4 L289.2,191.4 L287.8,188.1 L286.3,178.3 L279.1,166.6ZM515.4,202.0 L514.8,203.9 L515.5,206.1 L524.6,213.8 L526.3,214.3 L527.9,213.9 L531.2,210.5 L531.6,208.4 L530.9,206.6 L523.1,200.1 L520.4,199.0 L518.7,199.0 L517.2,199.8 L515.4,202.0ZM432.9,192.6 L432.4,194.3 L432.8,196.0 L435.1,199.5 L436.9,200.6 L448.1,199.2 L449.8,198.1 L450.6,196.4 L450.5,194.6 L449.6,193.1 L441.4,186.4 L439.9,185.7 L438.2,185.8 L436.7,186.7 L432.9,192.6ZM425.5,208.4 L424.1,210.7 L424.5,213.1 L426.3,214.6 L430.0,215.3 L432.1,214.3 L434.1,211.5 L437.1,211.3 L439.0,210.2 L440.1,208.8 L440.4,207.1 L439.9,205.5 L438.6,204.3 L434.4,203.6 L425.5,208.4ZM397.8,191.1 L397.2,193.5 L398.3,196.1 L398.9,200.8 L403.0,206.2 L404.8,207.6 L406.3,207.9 L407.8,207.5 L409.5,205.9 L410.8,203.0 L417.2,201.8 L418.4,201.1 L419.4,199.7 L419.5,197.9 L418.7,193.9 L420.6,190.7 L420.4,188.2 L419.4,186.9 L410.9,180.0 L408.9,179.8 L407.2,180.6 L397.8,191.1ZM333.5,196.1 L332.5,197.4 L332.0,198.8 L332.3,200.4 L333.3,201.8 L334.7,202.5 L337.3,202.7 L339.8,201.5 L340.5,200.1 L340.6,198.6 L340.1,197.3 L338.8,195.9 L336.2,195.0 L333.5,196.1ZM292.3,175.7 L293.0,177.3 L294.3,178.3 L295.9,178.6 L297.4,178.2 L301.2,174.3 L301.6,172.7 L301.2,171.0 L300.2,169.8 L298.6,169.1 L294.5,169.9 L292.4,172.5 L292.3,175.7ZM552.2,478.1 L554.4,478.3 L556.1,477.6 L557.1,476.1 L557.7,473.7 L559.1,473.0 L560.1,473.5 L563.8,478.2 L565.7,478.7 L569.0,478.1 L569.9,478.7 L570.1,479.8 L569.9,480.8 L563.6,482.6 L562.2,483.6 L561.4,486.2 L562.7,488.7 L561.0,487.3 L560.4,485.4 L561.0,483.4 L562.8,481.5 L562.4,479.9 L552.2,478.1ZM540.7,577.4 L541.1,574.5 L545.0,565.9 L545.3,564.2 L547.5,567.5 L548.9,567.9 L546.9,569.3 L544.5,574.1 L543.8,576.6 L544.1,579.8 L543.6,580.7 L542.4,581.1 L541.4,580.5 L540.7,577.4ZM427.1,354.7 L427.5,356.7 L429.0,358.2 L431.1,358.5 L432.9,357.7 L435.7,353.8 L436.1,351.6 L437.8,347.8 L440.9,345.3 L441.5,339.9 L444.7,336.6 L448.8,335.7 L454.4,336.3 L457.1,335.4 L459.1,335.7 L461.5,339.5 L466.1,342.0 L466.3,343.0 L465.7,344.8 L465.6,347.4 L466.4,349.0 L468.1,350.0 L465.6,350.4 L463.3,354.1 L460.7,355.0 L458.3,353.8 L456.2,349.6 L455.2,348.7 L453.6,348.7 L452.5,349.4 L451.9,350.5
38138L452.0,351.7 L451.4,350.3 L450.2,349.1 L448.6,348.7 L446.8,349.1 L444.1,351.6 L443.6,353.9 L445.0,356.3 L447.7,357.0 L445.4,357.4 L441.9,359.4 L438.1,358.5 L434.8,356.7 L431.8,358.5 L429.4,358.5 L427.6,357.0 L427.1,354.7ZM460.8,323.6 L461.6,321.0 L463.1,319.0 L463.4,315.7 L465.1,319.0 L464.6,321.5 L463.9,322.3 L460.8,323.6ZM396.1,240.0 L395.4,236.9 L391.8,235.7 L390.7,233.4 L392.2,226.9 L393.3,225.6 L395.0,225.0 L396.9,225.5 L399.7,227.5 L400.5,229.7 L399.6,232.5 L399.7,234.1 L403.6,236.3 L401.3,236.9 L400.0,238.7 L399.9,240.9 L401.3,242.8 L397.1,241.4 L396.1,240.0ZM353.3,319.5 L355.9,307.5 L355.6,306.4 L354.7,305.8 L362.5,308.5 L368.1,311.9 L368.2,313.0 L367.5,313.9 L364.6,314.1 L362.8,315.1 L362.0,316.7 L361.9,318.8 L361.1,319.7 L359.9,319.7 L358.1,318.2 L356.4,317.8 L354.5,318.3 L353.3,319.5ZM323.7,301.9 L324.9,304.8 L326.3,305.6 L328.0,305.7 L323.9,306.4 L321.4,305.2 L320.0,302.0 L318.7,300.6 L318.1,299.1 L318.3,297.1 L319.7,295.5 L321.6,294.9 L325.7,295.4 L326.9,295.9 L329.2,297.6 L327.0,296.9 L324.7,297.7 L323.6,299.5 L323.7,301.9ZM271.3,97.3 L273.3,96.0 L276.9,96.0 L277.9,95.2 L278.1,94.1 L276.7,89.5 L276.9,87.5 L277.2,89.1 L278.1,90.4 L279.6,91.2 L282.5,91.4 L285.0,95.3 L286.2,96.1 L288.4,96.6 L289.1,98.0 L288.6,99.1 L286.2,100.7 L285.1,103.6 L284.0,104.2 L282.7,103.4 L281.4,98.9 L279.8,97.2 L277.7,96.8 L272.5,98.0 L271.2,99.1 L270.5,100.8 L271.5,106.2 L270.1,100.0 L270.4,98.6 L271.3,97.3ZM275.4,378.5 L279.7,381.5 L283.1,379.8 L287.0,380.3 L287.8,379.5 L287.8,378.1 L287.9,379.6 L287.5,381.1 L286.8,381.8 L285.0,382.8 L281.3,383.3 L280.2,384.5 L279.3,386.4 L278.1,386.8 L276.4,385.4 L277.1,381.0 L275.4,378.5ZM258.7,135.0 L260.1,133.2 L261.6,132.4 L263.2,132.3 L265.6,133.2 L268.7,131.2 L273.5,131.0 L278.3,133.7 L279.4,135.1 L279.6,135.5 L280.7,137.8 L279.1,134.9 L277.0,133.8 L274.8,134.2 L273.1,135.8 L269.0,138.2 L264.7,138.2 L262.0,135.0 L260.3,134.6 L258.7,135.0ZM263.0,122.9 L264.6,124.2 L266.6,124.4 L268.5,123.4 L270.7,120.2 L275.0,120.9 L275.7,121.6 L276.6,124.2 L279.1,126.6 L280.6,131.5 L277.9,128.4 L271.3,127.8 L268.6,126.4 L266.1,126.1 L264.6,125.2 L263.0,122.9ZM256.0,84.3 L254.8,81.3 L255.2,80.3 L256.2,79.8 L257.5,80.4 L260.3,84.9 L262.2,85.9 L263.7,85.9 L265.1,85.2 L269.0,80.7 L270.1,80.8 L272.2,82.3 L273.6,82.5 L269.8,83.7 L268.6,87.1 L266.7,88.6 L264.3,88.5 L262.0,86.9 L260.8,87.2 L260.1,88.6 L260.3,89.1 L261.2,91.1 L261.3,91.2 L261.4,91.4 L261.4,91.5 L260.3,89.3 L256.0,84.3ZM233.4,386.0 L238.5,384.5 L240.1,382.3 L239.6,379.6 L237.4,377.8 L241.0,380.2 L243.7,381.4 L246.1,381.2 L251.6,378.9 L253.7,378.8 L255.3,379.7 L256.7,382.3 L259.9,385.2 L263.4,385.5 L265.2,384.1 L263.8,385.6 L263.1,387.8 L261.2,390.5 L260.8,394.4 L261.7,395.8 L263.6,397.2 L267.1,397.5 L268.1,398.1 L269.2,401.0 L271.7,403.8 L271.6,406.9 L269.8,409.3 L268.1,409.3 L267.5,408.5 L267.5,406.3 L266.8,404.7 L263.5,402.8 L260.9,399.2 L257.4,396.9 L257.1,395.8 L258.2,388.8 L257.6,387.2 L256.5,386.1 L253.9,385.7 L246.1,388.2 L233.9,388.2 L233.2,387.2 L233.4,386.0ZM219.4,356.7 L217.3,354.6 L217.3,353.1 L218.2,352.4 L220.8,352.1 L222.8,350.9 L224.0,351.3 L227.2,354.7 L228.6,355.5 L230.8,355.4 L232.5,354.2 L230.4,359.7 L231.0,363.6 L230.8,364.7 L230.5,365.3 L230.0,365.8 L230.7,364.0 L230.4,362.1 L226.1,357.9 L224.3,357.1 L220.9,357.4 L219.4,356.7ZM147.8,283.9 L149.4,284.6 L152.2,283.0 L153.6,282.8 L155.1,283.1 L157.1,284.5 L159.1,283.9 L157.2,286.3 L153.9,285.8 L150.6,287.1 L149.5,286.6 L147.8,283.9ZM29.0,295.5 L28.8,294.0 L30.4,292.1 L30.8,290.4 L30.4,288.7 L28.8,286.4 L29.6,283.4 L28.7,280.7 L28.9,279.6 L30.3,278.8 L33.1,280.3 L35.5,280.0 L37.0,278.7 L37.9,276.3 L41.0,274.8 L41.9,272.6 L40.6,266.4 L39.5,264.8 L36.4,263.8 L31.2,265.0 L30.2,264.0 L30.4,262.6 L36.0,260.5 L37.2,259.5 L38.7,255.9 L39.0,253.2 L40.4,251.5 L41.1,249.4 L41.9,248.8 L47.9,248.4 L49.0,248.9 L49.7,249.9 L50.4,256.1 L51.3,257.4 L52.7,258.1 L55.4,257.8 L58.9,255.5 L60.0,253.8 L60.1,252.1 L59.1,250.0 L58.3,245.0 L47.0,229.8 L47.1,228.5 L50.0,224.5 L51.4,224.4 L52.2,225.4 L51.5,229.0 L52.0,231.1 L59.6,241.4 L61.3,242.5 L63.3,242.5 L66.8,240.3 L77.3,237.6 L83.5,237.0 L87.1,237.7 L89.8,236.6 L95.0,236.0 L97.8,236.2 L99.1,236.9 L103.5,240.7 L105.2,240.8 L106.7,240.2 L105.6,241.2 L105.0,243.2 L105.5,244.5 L107.3,246.8 L107.6,249.1 L106.6,250.9 L104.4,252.4 L104.2,254.1 L105.7,256.1 L109.4,257.6 L110.8,257.3 L111.9,255.2 L114.1,253.6 L115.4,251.5 L120.1,248.2 L121.3,246.8 L123.9,244.9 L122.7,246.2 L122.4,248.1 L125.9,254.6 L125.7,267.7 L126.6,274.2 L127.7,276.3 L130.1,277.6 L130.4,278.9 L129.6,280.0 L125.6,280.9 L123.9,282.3 L122.7,285.9 L123.5,289.6 L118.5,294.3 L117.4,296.9 L11
381385.5,298.6 L114.9,300.5 L115.3,303.0 L114.5,304.1 L112.9,304.6 L111.8,304.1 L110.3,299.9 L108.9,298.4 L107.2,298.0 L104.3,298.3 L101.9,295.6 L98.5,294.8 L96.7,290.2 L92.3,287.8 L87.3,288.0 L82.7,287.2 L76.2,291.0 L72.1,289.2 L70.4,289.5 L68.4,290.9 L64.9,290.4 L62.3,291.7 L60.9,294.4 L59.9,295.0 L58.7,294.7 L57.5,292.9 L56.0,292.0 L52.0,292.4 L50.6,293.6 L49.9,295.1 L50.1,297.0 L51.3,299.0 L51.0,301.6 L51.9,304.1 L51.4,305.2 L49.9,306.3 L48.0,305.8 L44.5,300.8 L43.1,300.2 L40.7,300.0 L36.9,296.3 L34.4,296.0 L31.2,297.6 L30.2,297.2 L29.0,295.5ZM78.2,256.1 L80.3,260.6 L81.4,261.9 L83.7,262.5 L85.7,261.7 L86.9,259.7 L87.2,255.8 L85.6,249.9 L84.4,249.0 L82.9,248.6 L80.0,248.9 L78.5,249.7 L77.2,252.3 L78.2,256.1ZM46.4,269.4 L45.6,270.6 L45.4,272.2 L47.1,276.2 L48.4,277.0 L50.0,277.1 L53.0,275.6 L53.9,274.1 L53.9,272.5 L52.0,268.5 L50.7,267.7 L49.1,267.6 L46.4,269.4Z"/><path class="sh sh-lost" data-ly="lost" d="M55.9,142.4 L55.6,138.5 L56.3,137.1 L57.8,136.3 L61.5,136.7 L64.7,137.6 L66.4,138.7 L67.8,140.9 L69.2,145.1 L70.5,146.1 L72.2,146.5 L71.0,146.8 L67.6,149.9 L65.1,154.3 L65.3,151.7 L63.7,149.6 L61.4,149.2 L58.3,150.4 L56.6,149.7 L56.3,148.6 L56.9,145.8 L55.9,142.4Z"/><g class="rts"><path class="rt rt-red stay" data-rt="Red" style="--c:#C8102E" d="M157.0,166.4 L153.9,167.8 L151.7,170.4 L156.4,174.2 L158.0,172.6 L163.6,170.2 L210.0,159.8 L209.2,150.0 L210.5,141.1 L214.9,142.5 L216.3,145.7 L217.4,145.6 L217.7,144.5 L214.9,142.5 L213.9,142.1 L210.5,141.1 L209.4,140.9 L208.3,149.8 L209.0,160.0 L210.0,159.8 L212.5,159.6 L216.7,159.6 L237.9,161.0 L247.3,158.4 L262.4,151.4 L276.2,150.5 L279.3,151.1 L277.1,159.8 L276.9,164.3 L278.9,169.4 L285.0,179.3 L289.6,203.6 L292.8,208.1 L300.9,216.1 L304.6,226.6 L306.8,230.1 L305.9,241.4 L296.4,240.5 L287.3,264.6 L285.8,271.5 L285.5,277.7 L286.6,296.4 L284.9,305.4 L292.8,309.1 L298.3,314.6 L279.6,334.9 L294.9,348.9 L304.5,338.8 L311.5,344.7 L319.8,334.9 L336.9,351.0 L337.6,350.4 L352.1,349.3 L359.4,351.5 L371.1,360.9 L387.2,370.4 L408.2,387.8 L422.3,398.2 L427.5,401.1 L438.0,404.2 L466.3,405.9 L480.9,412.0 L493.0,415.4 L506.4,367.8 L510.9,369.1 L516.6,372.2 L527.6,375.5 L529.6,369.8 L539.1,362.6 L543.8,369.0 L536.6,375.2 L532.6,388.5 L529.6,387.2M529.7,387.2 L524.9,385.3 L527.6,375.5 L516.6,372.2 L510.9,369.1 L506.4,367.8 L493.0,415.4 L480.9,412.0 L466.3,405.9 L438.0,404.2 L427.5,401.1 L422.3,398.2 L408.2,387.8 L387.2,370.4 L371.1,360.9 L359.4,351.5 L352.1,349.3 L337.6,350.4 L319.4,333.7 L310.5,344.0 L304.5,338.8 L294.9,348.9 L279.6,334.9 L298.9,313.9 L293.7,308.2 L287.4,303.6 L286.2,300.4 L286.6,294.1 L285.5,277.7 L285.8,271.5 L287.3,264.6 L296.4,240.5 L305.9,241.4 L306.8,230.1 L304.6,226.6 L300.9,216.1 L292.8,208.1 L289.8,203.4 L285.0,179.3 L278.9,169.4 L276.9,164.3 L277.1,159.8 L279.3,151.1 L276.2,150.5 L262.4,151.4 L245.2,159.2 L237.9,161.0 L210.0,159.8 L209.2,150.0 L210.5,141.1 L214.9,142.5 L216.2,145.6 L217.2,145.6 L217.7,144.5 L214.9,142.5 L213.9,142.1 L210.5,141.1 L209.4,140.9 L208.3,149.8 L209.0,160.0 L171.5,168.4 L167.5,159.6 L164.7,162.6 L157.0,166.4" data-v="Red route" data-k="still in service"/><path class="rt rt-green stay" data-rt="Green" style="--c:#2E8B3E" d="M157.1,166.4 L153.9,167.8 L151.7,170.4 L155.8,173.7 L151.3,178.5 L144.3,193.3 L154.0,197.9 L168.4,203.8 L194.1,206.8 L234.8,219.8 L244.9,221.4 L281.0,237.8 L301.4,241.4 L312.6,241.9 L322.5,244.3 L357.6,261.4 L381.4,269.5 L394.9,272.5 L406.2,272.5 L416.2,273.5 L420.1,274.8 L421.7,276.5 L426.5,276.3 L438.1,273.6 L459.4,265.6 L484.4,258.6 L502.0,257.8 L502.5,259.0 L504.5,260.1 L507.7,259.3 L543.7,289.6 L546.5,286.2 L551.0,283.5 L552.4,287.7 L552.5,288.4 L552.5,289.3 L552.8,290.7 L553.5,297.7 L554.6,306.6 L554.9,309.7 L555.5,315.8 L555.9,319.9 L556.2,320.9 L556.6,322.2 L556.7,322.8 L557.2,324.0 L557.4,324.4 L557.8,325.5 L559.5,328.3 L568.5,340.5 L567.4,341.4 L561.1,346.1 L557.5,348.8 L553.8,351.5 L550.2,354.2 L539.1,362.6 L543.8,369.0 L536.6,375.2 L532.6,388.5 L524.9,385.3 L529.1,370.4 L529.8,369.6 L534.8,365.9 L539.1,362.6 L545.4,357.9 L545.4,357.9 L568.5,340.5 L560.0,329.4 L560.2,329.2 L559.5,328.3 L558.8,327.2 L558.5,326.7 L557.8,325.5 L557.8,325.2 L557.2,324.0 L557.0,323.3 L556.6,322.2 L556.3,321.4 L556.2,320.9 L556.0,320.2 L555.9,319.9 L554.6,306.6 L552.5,288.9 L552.5,288.4 L552.4,287.7 L552.3,287.3 L544.9,266.3 L543.3,265.3 L539.7,267.0 L509.7,259.2 L508.7,258.4 L508.7,256.1 L505.7,254.7 L502.6,255.8 L502.0,257.8 L485.0,258.5 L484.4,258.6M529.2,387.0 L524.9,385.3 L529.6,369.8 L568.5,340.5 L559.5,328.3 L556.3,321.4 L552.3,287.3 L544.1,265.4 L539.7,267.0 L509.7,259.2 L508.7,258.4 L509.1,256.9 L508.4,255.9 L504.9,254.7 L502.6,255.8 L502.0,257.8 L484.4,258.6 L461.
381380,265.0 L443.3,271.5 L431.8,274.7 L427.8,274.8 L424.4,274.5 L423.3,273.5 L420.9,274.2 L408.9,272.6 L404.4,272.5 L396.9,272.7 L385.5,270.6 L383.3,269.9 L382.5,269.8 L381.4,269.5 L375.2,267.4 L371.5,266.1 L362.7,263.4 L359.6,262.3 L354.9,260.2 L333.6,249.5 L329.0,247.1 L328.1,246.6 L322.5,244.3 L325.2,245.3 L328.1,246.6 L333.0,249.2 L333.6,249.5 L340.9,253.2 L341.7,253.3 L354.4,259.6 L354.9,260.1 L362.7,263.4 L371.5,266.1 L375.2,267.4 L379.3,268.8 L381.4,269.5 L384.8,270.4 L385.5,270.6 L394.9,272.5 L396.9,272.7 L397.6,272.7 L400.8,272.6 L399.4,272.6 L397.6,272.7 L396.9,272.7 L396.0,272.6 L394.9,272.5 L390.8,271.8 L385.5,270.6 L381.4,269.5 L379.3,268.8 L375.2,267.4 L371.5,266.1 L362.7,263.4 L358.3,261.7 L354.9,260.1 L354.9,259.9 L354.4,259.6 L350.9,258.0 L341.7,253.3 L341.3,253.2 L340.9,253.2 L336.5,251.0 L333.6,249.5 L333.0,249.2 L329.0,247.1 L328.1,246.6 L325.2,245.3 L322.4,244.2 L312.6,241.9 L300.5,241.2 L280.4,237.7 L247.5,222.2 L242.3,220.5 L197.4,206.9 L195.5,207.1 L187.9,205.2 L173.0,203.9 L157.5,198.5 L147.5,193.6 L146.6,190.8 L151.3,180.7 L156.4,174.2 L156.5,173.6 L162.2,170.6 L163.6,170.2 L171.5,168.4 L172.0,168.3 L171.5,168.4 L167.5,159.6 L164.7,162.6 L153.9,167.8 L152.3,169.4 L151.7,170.4 L156.4,174.2" data-v="Green route" data-k="still in service"/><path class="rt rt-brown stay" data-rt="Brown" style="--c:#8B5A2B" d="M157.0,166.4 L153.9,167.8 L151.7,170.4 L155.8,173.7 L151.3,178.5 L144.3,193.3 L155.5,198.5 L170.7,204.3 L172.1,208.7 L171.6,211.0 L170.6,212.0 L148.1,227.8 L187.0,248.0 L211.8,262.7 L216.5,263.7 L246.7,262.2 L253.5,263.9 L259.7,269.1 L279.8,294.0 L286.6,294.1 L286.4,298.9 L284.9,305.4 L292.8,309.1 L298.3,314.6 L297.7,315.3 L276.3,338.6 L271.7,343.5 L262.7,336.0 L260.8,335.5 L257.3,334.5 L250.8,332.7 L249.0,331.9 L249.8,328.6 L248.1,328.2 L247.3,331.5 L248.4,332.1 L259.2,335.1 L260.8,335.5 L262.7,336.0 L264.6,337.2 L271.7,343.5 L298.3,314.6 L304.3,321.3 L313.0,329.3 L310.6,332.9 L304.5,338.8 L320.3,352.6 L318.3,355.9 L318.3,357.2 L319.1,361.2 L318.9,362.7 L310.4,374.2 L308.0,376.8 L303.6,379.5 L303.9,381.1 L304.2,382.2 L304.3,383.6 L303.8,385.5 L303.6,385.9 L303.2,386.3 L302.6,386.4 L302.3,386.7 L302.9,387.4 L303.4,387.2 L303.2,386.4 L303.5,385.9 L303.8,385.5 L303.9,385.1 L304.3,383.6 L303.6,379.5 L305.7,378.5 L308.0,376.8 L310.4,374.2 L317.1,365.4 L318.9,362.7 L318.3,357.2 L318.3,355.9 L318.8,354.7 L320.3,352.6 L328.6,343.0 L351.1,364.7 L363.6,379.1 L374.3,395.0 L379.6,406.1 L385.9,425.1 L390.8,434.9 L398.0,443.5 L414.4,456.9 L412.8,458.4 L407.3,458.7 L404.0,459.8 L402.6,461.1 L386.7,478.1 L384.6,480.0 L385.2,481.6 L386.5,480.8 L386.1,479.1 L386.7,478.2 L404.0,459.8 L405.4,459.0 L407.3,458.7 L411.2,458.5 L412.8,458.4 L413.2,458.2 L414.4,456.9 L435.0,473.4 L435.0,474.0 L451.6,486.4 L460.9,490.9 L492.8,501.0 L498.1,503.4 L514.1,513.0 L535.8,527.8 L541.1,533.4 L545.4,529.0 L543.1,526.7 L542.3,524.9 L539.7,510.6 L536.9,508.4 L527.4,521.9 L517.8,515.5 L514.1,513.0 L508.5,509.4 L499.0,491.6 L495.4,482.8 L506.5,450.2 L529.1,370.4 L539.1,362.6 L543.8,369.0 L536.6,375.2 L532.6,388.5 L529.6,387.2M529.4,387.1 L524.9,385.3 L506.5,450.2 L495.4,482.8 L496.3,486.0 L504.5,502.0 L504.5,504.1 L503.3,506.3 L535.8,527.8 L541.1,533.4 L545.4,529.0 L543.1,526.7 L542.3,524.9 L539.7,510.7 L536.9,508.4 L527.4,521.9 L507.2,508.7 L506.2,508.2 L503.3,506.3 L502.0,505.5 L492.2,500.4 L461.5,490.2 L452.7,486.1 L435.0,473.4 L414.4,456.9 L412.8,458.4 L407.3,458.7 L404.0,459.8 L402.6,461.1 L384.8,480.0 L384.8,481.3 L385.6,481.7 L386.4,481.0 L386.2,479.1 L387.0,477.7 L404.0,459.8 L405.4,459.0 L407.3,458.7 L411.2,458.5 L412.8,458.4 L413.2,458.2 L414.4,456.9 L398.0,443.5 L390.8,434.9 L385.9,425.1 L378.0,402.1 L372.1,391.2 L366.6,383.1 L346.9,359.7 L332.3,345.2 L323.7,337.3 L320.3,334.4 L319.9,334.1 L319.4,333.7 L310.5,344.0 L320.3,352.6 L318.3,355.9 L319.1,361.2 L318.9,362.7 L310.4,374.2 L308.0,376.8 L305.7,378.5 L303.6,379.5 L304.3,383.6 L303.8,385.5 L302.4,387.0 L302.8,387.4 L303.5,386.9 L303.4,386.3 L303.8,385.5 L303.9,385.1 L304.3,383.6 L304.2,382.2 L303.6,379.5 L307.6,377.1 L310.4,374.2 L317.1,365.4 L318.9,362.7 L318.3,355.9 L318.8,354.7 L320.3,352.6 L311.5,344.7 L320.3,334.4 L309.2,324.6 L298.9,313.9 L297.7,315.3 L276.3,338.6 L271.7,343.5 L262.7,336.0 L260.8,335.5 L250.3,332.6 L249.1,332.0 L249.8,328.7 L248.1,328.3 L247.3,331.4 L250.5,332.6 L262.7,336.0 L264.6,337.2 L271.7,343.5 L298.9,313.9 L293.7,308.2 L287.2,303.2 L286.2,300.4 L286.6,294.1 L279.8,294.0 L259.7,269.1 L254.8,264.6 L250.3,262.6 L246.7,262.2 L216.5,263.7 L211.8,262.7 L186.2,246.4 L149.3,227.2 L170.6,212.0 L172.5,211.4 L173.1,209.0 L171.3,203.5 L155.8,197.8 L147.5,193.6 L147.1,192.7 L146.6,191.0 L151.5,180.4 L156.5,173.6 L162.2,170.6 L171.5,168.4 L167.5,159.6 L164.7,162.6 L156.9,166.4" data-v="Brown route" data-k="still in service"/><path class="rt rt-orange gone" data-rt="Orange" style="--c:#E07B00" d="M482.2,259.2 L461.0,265.0 L434.6,274.1 L427.8,274.8 L424.4,274.5 L423.3,273.5 L421.5,273.7 L420.6,276.9 L417.8,279.4 L405.0,284.8 L397.3,289.5 L393.1,294.1 L389.9,300.2 L379.1,331.1 L368.2,347.5 L366.2,353.0 L364.6,354.5 L363.1,354.3 L357.6,350.7 L353.4,349.4 L337.6,350.4 L309.2,324.6 L298.9,313.9 L298.3,314.6 L297.7,315.3 L276.3,338.6 L273.4,341.6 L271.7,343.5 L262.7,336.0 L249.8,332.5 L249.1,331.9 L249.8,328.7 L248.1,328.3 L247.3,331.5 L248.4,331.9 L250.2,332.6 L262.7,336.0 L264.6,337.2 L271.7,343.5 L276.3,338.6 L291.5,322.1 L297.7,315.3 L298.3,314.6 L304.3,321.3 L313.0,329.3 L310.6,332.9 L304.5,338.8 L320.3,352.6 L318.3,355.9 L318.3,357.2 L319.1,361.2 L318.9,362.7 L310.4,374.2 L308.0,376.8 L303.6,379.5 L304.3,383.6 L303.5,385.8 L302.3,386.6 L302.8,387.4 L303.3,387.1 L304.3,383.6 L304.2,382.2 L303.6,379.5 L305.7,378.5 L308.0,376.8 L310.4,374.2 L317.1,365.4 L318.9,362.7 L318.3,357.2 L318.3,355.9 L318.8,354.7 L320.3,352.6 L328.6,343.0 L351.1,364.7 L363.6,379.1 L374.3,395.0 L379.6,406.1 L385.9,425.1 L390.8,434.9 L398.0,443.5 L414.4,456.9 L412.8,458.4 L407.3,458.7 L404.0,459.8 L385.6,479.1 L384.8,480.0 L384.8,481.3 L386.1,481.5 L386.3,479.4M385.9,479.3 L404.0,459.8 L405.4,459.0 L413.2,458.2 L414.4,456.9 L413.6,456.2 L472.8,415.4 L477.3,412.0 L47
381387.7,410.8 L466.3,405.9 L436.6,404.0 L429.3,401.9 L424.8,399.8 L404.8,385.2 L387.2,370.4 L371.1,360.9 L365.9,356.8 L367.4,349.3 L379.1,331.1 L389.9,300.2 L393.1,294.1 L397.3,289.5 L405.0,284.8 L419.7,278.7 L421.7,276.8 L432.0,275.3 L438.1,273.6 L461.0,265.0 L483.4,258.7 L485.0,258.5 L486.6,258.3 L500.0,257.8 L502.0,257.8 L503.7,259.8 L506.2,260.1 L508.2,259.1 L509.1,256.9 L507.4,255.2 L504.9,254.7 L502.6,255.8 L502.1,257.8 L495.5,258.0 L488.3,258.2 L486.3,258.3 L481.9,259.3" data-v="Orange route" data-k="replaced by Go! Time in 2024"/><path class="rt rt-purple gone" data-rt="Purple" style="--c:#6A3FA0" d="M157.0,166.4 L152.3,169.4 L149.0,176.4 L139.0,182.3 L134.9,182.0 L132.8,178.9 L125.1,183.2 L122.1,184.0 L90.1,190.4 L76.8,191.7 L72.1,191.1 L72.7,185.3 L71.6,181.4 L67.4,172.7 L67.0,168.9 L67.5,166.8 L66.7,166.0 L66.3,161.4 L67.8,154.6 L71.5,149.8 L75.7,147.3 L90.9,144.7 L109.7,142.6 L118.5,140.6 L128.3,136.6 L169.3,124.0 L195.1,118.7 L205.7,114.7 L219.7,110.6 L221.9,119.4 L221.3,126.5 L219.1,130.5 L212.0,137.1 L209.4,140.9 L214.9,142.5 L216.3,145.7 L217.7,145.2 L217.4,143.9 L214.9,142.5 L213.9,142.1 L209.4,140.9 L208.3,149.8 L209.0,160.0 L163.6,170.2 L155.8,173.7 L151.3,178.5 L144.3,193.3 L168.4,203.8 L194.9,207.0 L234.8,219.8 L247.5,222.2 L281.0,237.8 L301.4,241.4 L312.6,241.9 L322.5,244.3 L359.6,262.3 L385.5,270.6 L396.9,272.7 L406.2,272.5 L416.2,273.5 L420.1,274.8 L421.7,276.5 L426.5,276.3 L438.1,273.6 L459.4,265.6 L484.4,258.6 L502.0,257.8 L502.5,259.0 L504.5,260.1 L507.7,259.3 L543.7,289.6 L546.5,286.2 L551.0,283.5 L552.4,287.7 L556.3,321.4 L559.5,328.3 L568.5,340.5 L539.1,362.6 L543.8,369.0 L536.6,375.2 L532.6,388.5 L529.6,387.2M529.5,387.1 L524.9,385.3 L527.6,375.5 L516.6,372.2 L510.9,369.1 L506.4,367.8 L497.4,399.1 L519.3,405.3 L506.5,450.2 L495.4,482.8 L496.3,486.0 L504.5,502.0 L504.5,504.1 L503.3,506.3 L535.8,527.8 L541.1,533.4 L545.4,529.0 L543.1,526.7 L542.3,524.9 L539.7,510.7 L536.9,508.4 L527.4,521.9 L507.2,508.7 L506.2,508.2 L503.3,506.3 L500.8,504.9 L492.2,500.4 L461.5,490.2 L452.0,485.8 L432.4,471.4 L413.6,456.2 L472.8,415.4 L477.3,412.0 L47
381387.7,410.8 L468.1,406.4 L464.5,405.5 L438.0,404.2 L427.5,401.1 L422.3,398.2 L408.2,387.8 L387.2,370.4 L371.1,360.9 L359.4,351.5 L352.1,349.3 L337.6,350.4 L319.4,333.7 L310.5,344.0 L320.3,352.6 L318.3,355.9 L318.3,357.2 L319.1,361.2 L318.9,362.7 L310.4,374.2 L308.3,376.5 L308.0,376.8 L303.6,379.5 L304.3,383.6 L302.3,387.2 L303.4,386.9 L304.3,383.6 L304.2,382.2 L303.6,379.5 L305.7,378.5 L308.0,376.8 L310.4,374.2 L317.1,365.4 L318.9,362.7 L319.1,361.2 L318.3,355.9 L318.8,354.7 L320.3,352.6 L304.5,338.8 L294.9,348.9 L279.6,334.9 L276.3,338.6 L271.7,343.5 L262.7,336.0 L260.8,335.5 L249.7,332.4 L249.1,331.9 L249.7,328.7 L248.0,328.3 L247.3,331.1 L248.4,332.1 L262.7,336.0 L264.6,337.2 L271.7,343.5 L298.9,313.9 L293.7,308.2 L287.2,303.2 L286.2,300.4 L286.6,294.1 L279.8,294.0 L259.7,269.1 L253.5,263.9 L246.7,262.2 L216.5,263.7 L211.8,262.7 L186.2,246.4 L149.3,227.2 L170.6,212.0 L172.5,211.4 L173.1,209.0 L171.3,203.5 L155.4,197.6 L147.5,193.6 L147.1,192.7 L146.6,191.0 L151.5,180.4 L156.5,173.6 L162.2,170.6 L171.5,168.4 L167.5,159.6 L164.7,162.6 L156.9,166.4M156.6,165.8 L151.7,170.4 L156.4,174.2 L158.2,172.5 L163.6,170.2 L210.0,159.8 L209.2,150.0 L210.5,141.1 L214.9,142.5 L216.2,145.6 L217.7,145.2 L217.4,144.0 L214.9,142.5 L213.9,142.1 L210.5,141.1 L212.2,138.4 L219.3,131.8 L221.7,128.0 L222.7,124.8 L222.8,119.3 L220.1,109.3 L194.5,117.7 L174.2,121.7 L151.7,128.2 L125.5,136.4 L117.1,140.5 L111.8,142.0 L75.7,147.3 L71.5,149.8 L66.6,156.1 L65.5,160.0 L65.2,167.2 L67.5,175.4 L71.2,182.7 L71.6,187.1 L70.9,191.8 L78.2,192.5 L83.3,192.0 L122.8,183.8 L125.0,184.4 L155.5,198.5 L170.7,204.3 L172.1,208.7 L171.6,211.0 L148.1,227.8 L187.0,248.0 L211.8,262.7 L216.5,263.7 L248.3,262.4 L253.5,263.9 L257.2,266.5 L279.8,294.0 L286.6,294.1 L286.4,298.9 L284.9,305.4 L292.8,309.1 L298.3,314.6 L297.7,315.3 L276.3,338.6 L271.7,343.5 L262.7,336.0 L260.8,335.5 L257.3,334.5 L249.9,332.5 L249.1,331.9 L249.7,328.6 L248.1,328.2 L247.3,331.3 L249.9,332.6 L262.7,336.0 L264.6,337.2 L271.7,343.5 L298.3,314.6 L304.3,321.3 L313.0,329.3 L310.6,332.9 L304.5,338.8 L320.3,352.6 L318.3,355.9 L318.3,357.2 L319.1,361.2 L318.9,362.7 L310.4,374.2 L308.3,376.5 L308.0,376.8 L303.6,379.5 L304.3,383.6 L303.8,385.5 L302.3,386.4 L302.5,387.4 L303.5,387.0 L303.4,386.1 L303.8,385.5 L303.9,385.1 L304.3,383.6 L304.2,382.2 L303.6,379.5 L305.7,378.5 L308.0,376.8 L310.4,374.2 L317.1,365.4 L318.9,362.7 L318.3,357.2 L318.3,355.9 L318.8,354.7 L320.3,352.6 L328.6,343.0 L336.9,351.0 L337.6,350.4 L352.1,349.3 L359.4,351.5 L371.1,360.9 L387.2,370.4 L408.2,387.8 L422.3,398.2 L427.5,401.1 L438.0,404.2 L464.5,405.5 L468.1,406.4 L477.7,410.8 L477.3,412.0 L472.8,415.4 L413.6,456.2 L442.5,479.9 L451.6,486.4 L460.1,490.5 L492.8,501.0 L500.8,504.9 L535.8,527.8 L541.1,533.4 L545.4,529.0 L543.1,526.7 L542.3,524.9 L539.7,510.6 L536.9,508.4 L527.4,521.9 L508.5,509.4 L499.0,491.6 L495.4,482.8 L505.6,453.5 L514.9,421.6 L493.0,415.4 L506.4,367.8 L510.9,369.1 L516.6,372.2 L527.6,375.5 L529.6,369.8 L539.1,362.6 L543.8,369.0 L536.6,375.2 L532.6,388.5 L529.6,387.2M529.6,387.2 L524.9,385.3 L529.6,369.8 L568.5,340.5 L559.5,328.3 L556.3,321.4 L552.3,287.3 L544.2,265.4 L543.0,265.4 L539.7,267.0 L509.7,259.2 L508.7,258.4 L509.1,256.9 L508.4,255.9 L504.9,254.7 L502.6,255.8 L502.0,257.8 L484.4,258.6 L461.0,265.0 L443.3,271.5 L431.8,274.7 L426.2,274.8 L424.4,274.5 L423.3,273.5 L420.9,274.2 L408.9,272.6 L396.9,272.7 L385.5,270.6 L359.6,262.3 L322.5,244.3 L312.6,241.9 L301.4,241.4 L281.0,237.8 L247.5,222.2 L196.8,206.9 L195.9,207.3 L188.8,205.3 L170.8,203.4 L153.6,196.7 L147.5,193.6 L146.6,191.0 L152.6,178.5 L156.5,173.6 L158.7,172.1 L163.6,170.2 L171.5,168.4 L167.5,159.6 L164.7,162.6 L156.9,166.4" data-v="Purple route" data-k="replaced by Go! Time in 2024"/></g><g class="scale"><line x1="528.8" y1="583" x2="656" y2="583"/><text x="592.4" y="577" text-anchor="middle">1 mile</text></g></svg> 38139 <figcaption><b>Figure 3 · Ten-minute walkable access to transit</b>Walk-sheds computed on the pedestrian street network, 805 m (ten minutes at 3 mph) from every boarding point, identically for both networks. Switch views to compare the networks, or toggle layers and routes individually. Orange and Purple are the two routes Go! Time replaced.</figcaption> 38140</figure> 38141 38142<p>On weekdays the citywide routes stop at about 7 p.m., and Go! Time runs until about 10 p.m. On Saturdays it covers the evening after the buses finish, and on Sundays, when no citywide fixed route operates, it is the cityâs transit service for the whole day (Figure 4). Across the week, that is about 32 hours in which Go! Time is the only citywide option.</p> 38143 38144<figure class="chartfig"> 38145 <svg class="chart" viewBox="0 0 680 244" role="img" aria-label="Service span by day type: citywide fixed routes against Go! Time."> 38146<rect class="key bus" x="92" y="4" width="12" height="12" rx="2"/><text class="lg" x="110" y="14">Citywide fixed routes (Red, Green, Brown)</text><rect class="key dem" x="370" y="4" width="12" height="12" rx="2"/><text class="lg" x="388" y="14">Go! Time on-demand</text> 38147<line class="gl" x1="92.0" y1="36" x2="92.0" y2="222"/> 38148<text class="ax" x="92.0" y="238" text-anchor="middle">5a</text> 38149<line class="gl" x1="152.6" y1="36" x2="152.6" y2="222"/> 38150<text class="ax" x="152.6" y="238" text-anchor="middle">7a</text> 38151<line class="gl" x1="213.3" y1="36" x2="213.3" y2="222"/> 38152<text class="ax" x="213.3" y="238" text-anchor="middle">9a</text> 38153<line class="gl" x1="273.9" y1="36" x2="273.9" y2="222"/> 38154<text class="ax" x="273.9" y="238" text-anchor="middle">11a</text> 38155<line class="gl" x1="334.5" y1="36" x2="334.5" y2="222"/> 38156<text class="ax" x="334.5" y="238" text-anchor="middle">1p</text> 38157<line class="gl" x1="395.2" y1="36" x2="395.2" y2="222"/> 38158<text class="ax" x="395.2" y="238" text-anchor="middle">3p</text> 38159<line class="gl" x1="455.8" y1="36" x2="455.8" y2="222"/> 38160<text class="ax" x="455.8" y="238" text-anchor="middle">5p</text> 38161<line class="gl" x1="516.4" y1="36" x2="516.4" y2="222"/> 38162<text class="ax" x="516.4" y="238" text-anchor="middle">7p</text> 38163<line class="gl" x1="577.1" y1="36" x2="577.1" y2="222"/> 38164<text class="ax" x="577.1" y="238" text-anchor="middle">9p</text> 38165<line class="gl" x1="637.7" y1="36" x2="637.7" y2="222"/> 38166<text class="ax" x="637.7" y="238" text-anchor="middle">11p</text> 38167<text class="rw" x="0" y="67">Weekday</text> 38168<rect class="bar bus" x="107.2" y="44" width="409.3" height="16" rx="3" tabindex="0" data-v="5:30 am â 7:00 pm" data-k="Weekday · citywide fixed routes"/> 38169<rect class="bar dem" x="107.2" y="64" width="500.2" height="16" rx="3" tabindex="0" data-v="5:30 am â 10:00 pm" data-k="Weekday · Go! Time"/> 38170<text class="vl" x="614.4" y="77">+3 h</text> 38171<text class="rw" x="0" y="129">Saturday</text> 38172<rect class="bar bus" x="152.6" y="106" width="363.8" height="16" rx="3" tabindex="0" data-v="7:00 am â 7:00 pm" data-k="Saturday · citywide fixed routes"/> 38173<rect class="bar dem" x="516.4" y="126" width="106.1" height="16" rx="3" tabindex="0" data-v="7:00 pm â 10:30 pm" data-k="Saturday · Go! Time"/> 38174<text class="vl" x="629.5" y="139">+3.5 h</text> 38175<text class="rw" x="0" y="191">Sunday</text> 38176<text class="nt" x="152.6" y="180">no citywide fixed route operates</text> 38177<rect class="bar dem" x="152.6" y="188" width="394.1" height="16" rx="3" tabindex="0" data-v="7:00 am â 8:00 pm" data-k="Sunday · Go! Time"/> 38178<text class="vl" x="553.7" y="201">all day</text> 38179</svg> 38180 <figcaption><b>Figure 4 · When a ride is available</b>Typical first and last service by day type, rounded to the nearest half hour. Fixed-route spans from the Cityâs published schedule; Go! Time spans from its operating record.</figcaption> 38181</figure> 38182</section> 38183 38184<section class="sec" id="convenience"> 38185<span class="tick"></span> 38186<h2>Convenience: returning riders at an all-time high!</h2> 38187<p>The first test of convenience is whether people use the service. In its first full fiscal year Go! Time carried 8% more passenger trips than the Orange and Purple routes had in their last. In its second year ridership rose another 21%, and the service now carries tens of thousands of trips a year (Figure 5).</p> 38188 38189<figure class="chartfig"> 38190 <svg class="chart" viewBox="0 0 680 232" role="img" aria-label="Annual passenger trips indexed to the replaced routes: 100, 108, 131."> 38191<text class="pt" x="0" y="14">Annual passenger trips, indexed to the routes Go! Time replaced (= 100)</text> 38192<line class="zero" x1="60" y1="190.0" x2="660" y2="190.0"/><text class="ax" x="52" y="194.0" text-anchor="end">0</text> 38193<line class="gl" x1="60" y1="136.4" x2="660" y2="136.4"/><text class="ax" x="52" y="140.4" text-anchor="end">50</text> 38194<line class="gl" x1="60" y1="82.9" x2="660" y2="82.9"/><text class="ax" x="52" y="86.9" text-anchor="end">100</text> 38195<rect class="bar bus" x="100" y="82.9" width="120" height="107.1" rx="3" tabindex="0" data-v="100" data-k="Orange + Purple routes, FY2024 · index"/> 38196<text class="vlb" x="160.0" y="74.9" text-anchor="middle">100</text> 38197<text class="rw" x="160.0" y="208" text-anchor="middle">FY2024</text><text class="ax2" x="160.0" y="223" text-anchor="middle">Orange + Purple routes</text> 38198<rect class="bar dem" x="300" y="74.2" width="120" height="115.8" rx="3" tabindex="0" data-v="108" data-k="Go! Time, FY2025 · index"/> 38199<text class="vlb" x="360.0" y="66.2" text-anchor="middle">108</text> 38200<text class="rw" x="360.0" y="208" text-anchor="middle">FY2025</text><text class="ax2" x="360.0" y="223" text-anchor="middle">Go! Time</text> 38201<text class="vl" x="260.0" y="92.2" text-anchor="middle">+8%</text> 38202<rect class="bar dem" x="500" y="49.7" width="120" height="140.3" rx="3" tabindex="0" data-v="131" data-k="Go! Time, FY2026 · index"/> 38203<text class="vlb" x="560.0" y="41.7" text-anchor="middle">131</text> 38204<text class="rw" x="560.0" y="208" text-anchor="middle">FY2026</text><text class="ax2" x="560.0" y="223" text-anchor="middle">Go! Time</text> 38205<text class="vl" x="460.0" y="67.7" text-anchor="middle">+21%</text> 38206</svg> 38207 <figcaption><b>Figure 5 · Ridership against the routes it replaced</b>Annual passenger trips, indexed to the Orange and Purple routes in FY2024 (= 100). From the Cityâs quarterly operating reports to the Maryland Department of Transportation.</figcaption> 38208</figure> 38209 38210<p>Growth like that can come from churn: a steady stream of first-time ri
38210ders who try a service once and leave. Go! Timeâs growth comes mostly from repeat use. In a typical month of 2026, about four in five active riders had ridden before, and the returning base grew by more than half between July 2025 and July 2026. Every month still brought in new riders, roughly one in six of those active (Figure 6).</p> 38211 38212<figure class="chartfig"> 38213 <svg class="chart" viewBox="0 0 680 234" role="img" aria-label="Monthly active riders, indexed, split into returning and first-time riders."> 38214<rect class="key dem" x="44" y="4" width="12" height="12" rx="2"/><text class="lg" x="62" y="14">returning riders</text><rect class="key new" x="190" y="4" width="12" height="12" rx="2"/><text class="lg" x="208" y="14">first ride that month</text> 38215<line class="zero" x1="44" y1="210.0" x2="676" y2="210.0"/><text class="ax" x="37" y="214.0" text-anchor="end">0</text> 38216<line class="gl" x1="44" y1="156.9" x2="676" y2="156.9"/><text class="ax" x="37" y="160.9" text-anchor="end">50</text> 38217<line class="gl" x1="44" y1="103.8" x2="676" y2="103.8"/><text class="ax" x="37" y="107.8" text-anchor="end">100</text> 38218<line class="gl" x1="44" y1="50.6" x2="676" y2="50.6"/><text class="ax" x="37" y="54.6" text-anchor="end">150</text> 38219<g class="bar stk" tabindex="0" data-v="index 61" data-k="Jul 2024 · 1% returning riders"><rect class="dem" x="46.5" y="209.1" width="20.3" height="0.9" rx="1.5"/><rect class="new" x="46.5" y="145.4" width="20.3" height="62.2" rx="1.5"/></g> 38220<text class="ax2" x="56.6" y="226" text-anchor="middle">Jul 24</text> 38221<g class="bar stk" tabindex="0" data-v="index 61" data-k="Aug 2024 · 20% returning riders"><rect class="dem" x="71.8" y="196.7" width="20.3" height="13.3" rx="1.5"/><rect class="new" x="71.8" y="144.8" width="20.3" height="50.4" rx="1.5"/></g> 38222<g class="bar stk" tabindex="0" data-v="index 100" data-k="Sep 2024 · 39% returning riders"><rect class="dem" x="97.1" y="168.3" width="20.3" height="41.7" rx="1.5"/><rect class="new" x="97.1" y="104.1" width="20.3" height="62.8" rx="1.5"/></g> 38223<g class="bar stk" tabindex="0" data-v="index 97" data-k="Oct 2024 · 64% returning riders"><rect class="dem" x="122.3" y="144.2" width="20.3" height="65.8" rx="1.5"/><rect class="new" x="122.3" y="107.1" width="20.3" height="35.6" rx="1.5"/></g> 38224<g class="bar stk" tabindex="0" data-v="index 106" data-k="Nov 2024 · 65% returning riders"><rect class="dem" x="147.6" y="136.7" width="20.3" height="73.3" rx="1.5"/><rect class="new" x="147.6" y="97.7" width="20.3" height="37.4" rx="1.5"/></g> 38225<g class="bar stk" tabindex="0" data-v="index 96" data-k="Dec 2024 · 69% returning riders"><rect class="dem" x="172.9" y="140.3" width="20.3" height="69.7" rx="1.5"/><rect class="new" x="172.9" y="108.3" width="20.3" height="30.5" rx="1.5"/></g> 38226<g class="bar stk" tabindex="0" data-v="index 96" data-k="Jan 2025 · 70% returning riders"><rect class="dem" x="198.2" y="138.5" width="20.3" height="71.5" rx="1.5"/><rect class="new" x="198.2" y="108.3" width="20.3" height="28.7" rx="1.5"/></g> 38227<text class="ax2" x="208.3" y="226" text-anchor="middle">Jan 25</text> 38228<g class="bar stk" tabindex="0" data-v="index 92" data-k="Feb 2025 · 79% returning riders"><rect class="dem" x="223.5" y="133.3" width="20.3" height="76.7" rx="1.5"/><rect class="new" x="223.5" y="112.5" width="20.3" height="19.3" rx="1.5"/></g> 38229<g class="bar stk" tabindex="0" data-v="index 95" data-k="Mar 2025 · 76% returning riders"><rect class="dem" x="248.7" y="132.7" width="20.3" height="77.3" rx="1.5"/><rect class="new" x="248.7" y="108.6" width="20.3" height="22.6" rx="1.5"/></g> 38230<g class="bar stk" tabindex="0" data-v="index 97" data-k="Apr 2025 · 77% returning riders"><rect class="dem" x="274.0" y="130.9" width="20.3" height="79.1" rx="1.5"/><rect class="new" x="274.0" y="106.8" width="20.3" height="22.6" rx="1.5"/></g> 38231<g class="bar stk" tabindex="0" data-v="index 98" data-k="May 2025 · 78% returning riders"><rect class="dem" x="299.3" y="129.4" width="20.3" height="80.6" rx="1.5"/><rect class="new" x="299.3" y="106.2" width="20.3" height="21.7" rx="1.5"/></g> 38232<g class="bar stk" tabindex="0" data-v="index 95" data-k="Jun 2025 · 79% returning riders"><rect class="dem" x="324.6" y="129.7" width="20.3" height="80.3" rx="1.5"/><rect class="new" x="324.6" y="108.6" width="20.3" height="19.6" rx="1.5"/></g> 38233<g class="bar stk" tabindex="0" data-v="index 100" data-k="Jul 2025 · 77% returning riders"><rect class="dem" x="349.9" y="128.5" width="20.3" height="81.5" rx="1.5"/><rect class="new" x="349.9" y="103.8" width="20.3" height="23.3" rx="1.5"/></g> 38234<text class="ax2" x="360.0" y="226" text-anchor="middle">Jul 25</text> 38235<g class="bar stk" tabindex="0" data-v="index 109" data-k="Aug 2025 · 80% returning riders"><rect class="dem" x="375.1" y="117.3" width="20.3" height="92.7" rx="1.5"/><rect class="new" x="375.1" y="94.4" width="20.3" height="21.4" rx="1.5"/></g> 38236<g class="bar stk" tabindex="0" data-v="index 109" data-k="Sep 2025 · 72% returning riders"><rect class="dem" x="400.4" y="126.1" width="20.3" height="83.9" rx="1.5"/><rect class="new" x="400.4" y="94.1" width="20.3" height="30.5" rx="1.5"/></g> 38237<g class="bar stk" tabindex="0" data-v="index 119" data-k="Oct 2025 · 72% returning riders"><rect class="dem" x="425.7" y="119.7" width="20.3" height="90.3" rx="1.5"/><rect class="new" x="425.7" y="83.8" width="20.3" height="34.4" rx="1.5"/></g> 38238<g class="bar stk" tabindex="0" data-v="index 131" data-k="Nov 2025 · 75% returning riders"><rect class="dem" x="451.0" y="105.3" width="20.3" height="104.7" rx="1.5"/><rect class="new" x="451.0" y="71.2" width="20.3" height="32.6" rx="1.5"/></g> 38239<g class="bar stk" tabindex="0" data-v="index 120" data-k="Dec 2025 · 81% returning riders"><rect class="dem" x="476.3" y="107.1" width="20.3" height="102.9" rx="1.5"/><rect class="new" x="476.3" y="82.3" width="20.3" height="23.3" rx="1.5"/></g> 38240<g class="bar stk" tabindex="0" data-v="index 114" data-k="Jan 2026 · 84% returning riders"><rect class="dem" x="501.5" y="108.9" width="20.3" height="101.1" rx="1.5"/><rect class="new" x="501.5" y="89.3" width="20.3" height="18.1" rx="1.5"/></g> 38241<text class="ax2" x="511.7" y="226" text-anchor="middle">Jan 26</text> 38242<g class="bar stk" tabindex="0" data-v="index 117" data-k="Feb 2026 · 85% returning riders"><rect class="dem" x="526.8" y="103.4" width="20.3" height="106.6" rx="1.5"/><rect class="new" x="526.8" y="85.3" width="20.3" height="16.6" rx="1.5"/></g> 38243<g class="bar stk" tabindex="0" data-v="index 128" data-k="Mar 2026 · 82% returning riders"><rect class="dem" x="552.1" y="98.6" width="20.3" height="111.4" rx="1.5"/><rect class="new" x="552.1" y="74.5" width="20.3" height="22.6" rx="1.5"/></g> 38244<g class="bar stk" tabindex="0" data-v="index 139" data-k="Apr 2026 · 80% returning riders"><rect class="dem" x="577.4" y="92.0" width="20.3" height="118.0" rx="1.5"/><rect class="new" x="577.4" y="61.8" width="20.3" height="28.7" rx="1.5"/></g> 38245<g class="bar stk" tabindex="0" data-v="index 145" data-k="May 2026 · 81% returning riders"><rect class="dem" x="602.7" y="84.4" width="20.3" height="125.6" rx="1.5"/><rect class="new" x="602.7" y="55.8" width="20.3" height="27.2" rx="1.5"/></g> 38246<g class="bar stk" tabindex="0" data-v="index 147" data-k="Jun 2026 · 80% returning riders"><rect class="dem" x="627.9" y="84.4" width="20.3" height="125.6" rx="1.5"/><rect class="new" x="627.9" y="53.3" width="20.3" height="29.6" rx="1.5"/></g> 38247<g class="bar stk" tabindex="0" data-v="index 147" data-k="Jul 2026 · 82% returning riders"><rect class="dem" x="653.2" y="81.7" width="20.3" height="128.3" rx="1.5"/><rect class="new" x="653.2" y="53.3" width="20.3" height="26.9" rx="1.5"/></g> 38248<text class="ax2" x="663.4" y="226" text-anchor="middle">Jul 26</text> 38249<text class="nt" x="48" y="44.6">index: July 2025 active riders = 100</text> 38250</svg> 38251 <figcaption><b>Figure 6 · A growing base of returning riders</b>Riders active each month, indexed to July 2025 (= 100), split into riders who had ridden before and riders taking their first trip that month. Launch month to July 2026.</figcaption> 38252</figure> 38253</section> 38254 38255<section class="sec" id="cost"> 38256<span class="tick"></span> 38257<h2>Cost: less per trip than the routes it replaced</h2> 38258<p>The usual intuition is that fixed buses are the cheaper way to move people. On a busy trunk line that holds, and Annapolisâs remaining citywide routes are the right tool for its heaviest corri
38258dors. For a switch, though, the comparison that matters is against the service being replaced, and against that baseline Go! Time has become the cheaper option.</p> 38259<p>In fiscal 2026, <strong>cost per passenger trip was about 8% below what the Orange and Purple routes cost in their final year, and 11% below Go! Timeâs own first year</strong> (Figure 7). Both comparisons are in nominal dollars, so two years of cost inflation make the real gap wider. Go! Time is also about 11% cheaper per revenue hour than the routes it replaced.</p> 38260 38261<figure class="chartfig"> 38262 <svg class="chart" viewBox="0 0 680 184" role="img" aria-label="Cost per passenger trip indexed: replaced routes 100, Go! Time FY2025 104, FY2026 92."> 38263<text class="pt" x="0" y="14">Operating cost per passenger trip, indexed (replaced routes, FY2024 = 100)</text> 38264<line class="zero" x1="236.0" y1="32" x2="236.0" y2="160"/><text class="ax" x="236.0" y="176" text-anchor="middle">0</text> 38265<line class="gl" x1="321.0" y1="32" x2="321.0" y2="160"/><text class="ax" x="321.0" y="176" text-anchor="middle">25</text> 38266<line class="gl" x1="406.0" y1="32" x2="406.0" y2="160"/><text class="ax" x="406.0" y="176" text-anchor="middle">50</text> 38267<line class="gl" x1="491.0" y1="32" x2="491.0" y2="160"/><text class="ax" x="491.0" y="176" text-anchor="middle">75</text> 38268<line class="gl" x1="576.0" y1="32" x2="576.0" y2="160"/><text class="ax" x="576.0" y="176" text-anchor="middle">100</text> 38269<text class="rw" x="224" y="59" text-anchor="end">Orange + Purple routes, FY2024</text> 38270<rect class="bar bus" x="236" y="42" width="340.0" height="24" rx="3" tabindex="0" data-v="100" data-k="Orange + Purple routes, FY2024 · cost index"/> 38271<text class="vlb" x="584.0" y="59">100</text> 38272<text class="rw" x="224" y="99" text-anchor="end">Go! Time, FY2025</text> 38273<rect class="bar dem" x="236" y="82" width="353.1" height="24" rx="3" tabindex="0" data-v="104" data-k="Go! Time, FY2025 · cost index"/> 38274<text class="vlb" x="597.1" y="99">104</text> 38275<text class="rw" x="224" y="139" text-anchor="end">Go! Time, FY2026</text> 38276<rect class="bar dem" x="236" y="122" width="314.0" height="24" rx="3" tabindex="0" data-v="92" data-k="Go! Time, FY2026 · cost index"/> 38277<text class="vlb" x="558.0" y="139">92</text> 38278</svg> 38279 <figcaption><b>Figure 7 · Operating cost per passenger trip</b>Indexed to the Orange and Purple routes in FY2024 (= 100). From the Cityâs quarterly operating reports to the Maryland Department of Transportation; nominal dollars.</figcaption> 38280</figure> 38281 38282<p>Most of the efficiency comes from pooling. When two ridersâ trips overlap, one vehicle can serve both at the cost of a short detour. The share of rides that shared the vehicle for part of the trip rose from 55% in the second half of 2024 to about two-thirds in 2026, and <strong>rides delivered per vehicle-hour rose about 12%</strong>, for less than a minute of added median time on board (Figure 8).</p> 38283 38284<figure class="chartfig"> 38285 <svg class="chart" viewBox="0 0 680 202" role="img" aria-label="Share of pooled rides rose from 55% to 66%; rides per vehicle-hour rose 12%."> 38286<text class="pt" x="18" y="14">Rides that share the vehicle</text> 38287<line class="gl" x1="42" y1="176.0" x2="306" y2="176.0"/><text class="ax" x="36" y="180.0" text-anchor="end">40</text> 38288<line class="gl" x1="42" y1="137.1" x2="306" y2="137.1"/><text class="ax" x="36" y="141.1" text-anchor="end">50</text> 38289<line class="gl" x1="42" y1="98.3" x2="306" y2="98.3"/><text class="ax" x="36" y="102.3" text-anchor="end">60</text> 38290<line class="gl" x1="42" y1="59.4" x2="306" y2="59.4"/><text class="ax" x="36" y="63.4" text-anchor="end">70</text> 38291<polyline class="ln" points="48.0,117.7 111.0,104.7 174.0,86.2 237.0,74.2 300.0,75.8"/> 38292<circle class="dot" cx="48.0" cy="117.7" r="5" tabindex="0" data-v="55%" data-k="H2 2024 · share of rides pooled"/> 38293<text class="vlb" x="52.0" y="139.7" text-anchor="start">55%</text> 38294<text class="ax2" x="48.0" y="194" text-anchor="middle">H2 2024</text> 38295<circle class="dot" cx="111.0" cy="104.7" r="5" tabindex="0" data-v="58%" data-k="H1 2025 · share of rides pooled"/> 38296<circle class="dot" cx="174.0" cy="86.2" r="5" tabindex="0" data-v="63%" data-k="H2 2025 · share of rides pooled"/> 38297<circle class="dot" cx="237.0" cy="74.2" r="5" tabindex="0" data-v="66%" data-k="H1 2026 · share of rides pooled"/>
38298<circle class="dot" cx="300.0" cy="75.8" r="5" tabindex="0" data-v="66%" data-k="JulâAug 2026 · share of rides pooled"/> 38299<text class="vlb" x="300.0" y="64.8" text-anchor="middle">66%</text> 38300<text class="ax2" x="300.0" y="194" text-anchor="middle">JulâAug 2026</text> 38301<text class="pt" x="382" y="14">Rides per vehicle-hour, indexed</text> 38302<line class="gl" x1="406" y1="176.0" x2="670" y2="176.0"/><text class="ax" x="400" y="180.0" text-anchor="end">80</text> 38303<line class="gl" x1="406" y1="142.0" x2="670" y2="142.0"/><text class="ax" x="400" y="146.0" text-anchor="end">90</text> 38304<line class="gl" x1="406" y1="108.0" x2="670" y2="108.0"/><text class="ax" x="400" y="112.0" text-anchor="end">100</text> 38305<line class="gl" x1="406" y1="74.0" x2="670" y2="74.0"/><text class="ax" x="400" y="78.0" text-anchor="end">110</text> 38306<line class="gl" x1="406" y1="40.0" x2="670" y2="40.0"/><text class="ax" x="400" y="44.0" text-anchor="end">120</text> 38307<polyline class="ln" points="412.0,108.0 475.0,128.3 538.0,93.7 601.0,75.8 664.0,67.4"/> 38308<circle class="dot" cx="412.0" cy="108.0" r="5" tabindex="0" data-v="100" data-k="H2 2024 · index, H2 2024 = 100"/> 38309<text class="vlb" x="416.0" y="130.0" text-anchor="start">100</text> 38310<text class="ax2" x="412.0" y="194" text-anchor="middle">H2 2024</text> 38311<circle class="dot" cx="475.0" cy="128.3" r="5" tabindex="0" data-v="94" data-k="H1 2025 · index, H2 2024 = 100"/> 38312<circle class="dot" cx="538.0" cy="93.7" r="5" tabindex="0" data-v="104" data-k="H2 2025 · index, H2 2024 = 100"/> 38313<circle class="dot" cx="601.0" cy="75.8" r="5" tabindex="0" data-v="109" data-k="H1 2026 · index, H2 2024 = 100"/> 38314<circle class="dot" cx="664.0" cy="67.4" r="5" tabindex="0" data-v="112" data-k="JulâAug 2026 · index, H2 2024 = 100"/> 38315<text class="vlb" x="664.0" y="56.4" text-anchor="middle">112</text> 38316<text class="ax2" x="664.0" y="194" text-anchor="middle">JulâAug 2026</text> 38317</svg> 38318 <figcaption><b>Figure 8 · Pooling and productivity</b>Left: share of served rides that shared the vehicle for part of the trip, by half-year. Right: rides delivered per vehicle-hour, indexed to the second half of 2024 (= 100). JulyâAugust 2026 is a partial period.</figcaption> 38319</figure> 38320</section> 38321 38322<section class="sec"> 38323<span class="tick"></span> 38324<h2>What changed the trajectory: human-centered automation</h2> 38325<p>An on-demand service commits to a plan at the moment of booking: which vehicle, in what order, at what pickup time. Then the day happens. Traffic slows a vehicle, a rider does not come out, another cancels, a driver takes a different street, and new requests keep arriving. Each event can undo a promise made an hour earlier.</p> 38326<p>In most operations a dispatcher absorbs those events by hand, watching a map, calling drivers and moving trips one at a time. It is skilled work, and it does not scale; a transit research synthesis warned two decades ago that âcontinuing manual operations would overwhelm a systemâs dispatchers.â<sup class="fn"><a href="#r12">12</a></sup></p> 38327<p>IT Curves started from the dispatchersâ own logs. We catalogued the events they reacted to each day and the moves they made in response, then built a watchdog that does the same job continuously (Figure 9). It monitors every vehicle, trip and pickup promise. When a plan slips, it re-optimizes the whole schedule instead of patching the one affected trip, so a change on one vehicle can open a better option on another. It is human-centered by design: dispatchers stay in the loop for exceptions and can override any change, and driversâ own route choices feed back into the next plan.</p> 38328 38329<figure class="diagram"> 38330 <svg class="diag" viewBox="0 0 680 434" role="img" aria-label="The watchdog loop: street events are monitored; when a plan slips the whole schedule is re-optimized and applied; dispatchers handle exceptions; driver route choices feed back into planning."><defs><marker id="ah" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" class="ahd"/></marker><marker id="aha" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
38330<path d="M0,0 L10,5 L0,10 z" class="aha"/></marker></defs><text class="dg-k" x="0" y="12">ON THE STREET</text><text class="dg-k" x="232" y="12">THE WATCHDOG</text><text class="dg-k" x="452" y="12">THE RESPONSE</text><g class="nd"><rect class="bx" x="0" y="28" width="196" height="34" rx="5"/><text class="dg-b" x="14" y="50">Traffic slows a vehicle</text></g><path class="ar" d="M196,45 C216,45 212,120 230,120" marker-end="url(#ah)"/><g class="nd"><rect class="bx" x="0" y="72" width="196" height="34" rx="5"/><text class="dg-b" x="14" y="94">A rider does not show</text></g><path class="ar" d="M196,89 C216,89 212,120 230,120" marker-end="url(#ah)"/><g class="nd"><rect class="bx" x="0" y="116" width="196" height="34" rx="5"/><text class="dg-b" x="14" y="138">A trip is cancelled</text></g><path class="ar" d="M196,133 C216,133 212,120 230,120" marker-end="url(#ah)"/><g class="nd"><rect class="bx" x="0" y="160" width="196" height="34" rx="5"/><text class="dg-b" x="14" y="182">A new request arrives</text></g><path class="ar" d="M196,177 C216,177 212,120 230,120" marker-end="url(#ah)"/><g class="nd"><rect class="bx drv" x="0" y="204" width="196" height="34" rx="5"/><text class="dg-b" x="14" y="226">A driver takes another route</text></g><path class="ar" d="M196,221 C216,221 212,120 230,120" marker-end="url(#ah)"/><g class="nd"><rect class="bxa" x="232" y="80" width="180" height="80" rx="6"/><text class="dg-h2" x="322" y="106" text-anchor="middle">Watch everything</text><text class="dg-s" x="322" y="125" text-anchor="middle">every vehicle, trip and promise;</text><text class="dg-s" x="322" y="140" text-anchor="middle">flag the moment a plan slips</text></g><path class="ar" d="M412,120 L450,120" marker-end="url(#ah)"/><g class="nd"><rect class="bxa" x="452" y="80" width="196" height="80" rx="6"/><text class="dg-h2" x="550" y="125" text-anchor="middle">Re-optimize</text></g><path class="ar" d="M550,160 L550,186" marker-end="url(#ah)"/><g class="nd"><rect class="bx" x="452" y="188" width="196" height="84" rx="6"/><text class="dg-b" x="466" y="210">Apply the new plan</text><text class="dg-s" x="466" y="229" text-anchor="start">· re-sequence stops</text><text class="dg-s" x="466" y="244" text-anchor="start">· reassign a trip</text><text class="dg-s" x="466" y="259" text-anchor="start">· refresh the pickup time</text></g><path class="ar" d="M452,230 L322,230 L322,162" marker-end="url(#ah)"/><text class="dg-s" x="387" y="222" text-anchor="middle">back to watching</text><path class="ar dash" d="M550,272 L550,296" marker-end="url(#ah)"/><g class="nd"><rect class="bxh" x="452" y="298" width="196" height="48" rx="6"/><text class="dg-b" x="550" y="318" text-anchor="middle">Dispatcher</text><text class="dg-s" x="550" y="335" text-anchor="middle">handles exceptions; can override</text></g><path class="ara" d="M98,238 L98,366" marker-end="url(#aha)"/><g class="nd"><rect class="bxl" x="0" y="368" width="400" height="62" rx="6"/><text class="dg-b" x="16" y="390">Learn from the driver</text><text class="dg-s" x="16" y="408" text-anchor="start">Score the route against the plan; carry what the street</text><text class="dg-s" x="16" y="423" text-anchor="start">knew into the next plan.</text></g><path class="ara" d="M400,399 L666,399 L666,120 L650,120" marker-end="url(#aha)"/></svg> 38331 <figcaption><b>Figure 9 · The watchdog loop</b>Street events flow into continuous monitoring; when a plan slips, the whole schedule is re-optimized and applied. Dashed boxes mark the human roles: dispatchers handle exceptions, and driversâ route choices are scored and carried into planning.</figcaption> 38332</figure> 38333 38334<p>Human-centered re-optimization went live in February 2026. Since then the system has moved a growing share of trips to a better-placed vehicle during the service day, reaching about 18% of trips by August (Figure 10). Each of those moves is a repair a dispatcher would otherwise have had to spot and make.</p> 38335 38336<figure class="chartfig"> 38337 <svg class="chart" viewBox="0 0 680 214" role="img" aria-label="Monthly share of trips re-optimized onto another vehicle; it rises after human-centered re-optimization went live."> 38338<text class="pt" x="0" y="14">Share of trips re-optimized onto another vehicle during the service day</text>
38339<line class="zero" x1="40" y1="190.0" x2="676" y2="190.0"/><text class="ax" x="32" y="194.0" text-anchor="end">0%</text> 38340<line class="gl" x1="40" y1="152.5" x2="676" y2="152.5"/><text class="ax" x="32" y="156.5" text-anchor="end">5%</text> 38341<line class="gl" x1="40" y1="115.0" x2="676" y2="115.0"/><text class="ax" x="32" y="119.0" text-anchor="end">10%</text> 38342<line class="gl" x1="40" y1="77.5" x2="676" y2="77.5"/><text class="ax" x="32" y="81.5" text-anchor="end">15%</text> 38343<line class="gl" x1="40" y1="40.0" x2="676" y2="40.0"/><text class="ax" x="32" y="44.0" text-anchor="end">20%</text> 38344<rect class="bar bus" x="42.5" y="170.0" width="19.5" height="20.0" rx="1.5" tabindex="0" data-v="2.7%" data-k="July 2024 · trips re-optimized onto another vehicle"/> 38345<text class="ax2" x="52.2" y="206" text-anchor="middle">Jul 24</text> 38346<rect class="bar bus" x="67.0" y="142.2" width="19.5" height="47.8" rx="1.5" tabindex="0" data-v="6.4%" data-k="August 2024 · trips re-optimized onto another vehicle"/> 38347<rect class="bar bus" x="91.4" y="180.8" width="19.5" height="9.2" rx="1.5" tabindex="0" data-v="1.2%" data-k="September 2024 · trips re-optimized onto another vehicle"/> 38348<rect class="bar bus" x="115.9" y="189.3" width="19.5" height="0.8" rx="1.5" tabindex="0" data-v="0.1%" data-k="October 2024 · trips re-optimized onto another vehicle"/> 38349<rect class="bar bus" x="140.3" y="187.3" width="19.5" height="2.7" rx="1.5" tabindex="0" data-v="0.4%" data-k="November 2024 · trips re-optimized onto another vehicle"/> 38350<rect class="bar bus" x="164.8" y="183.8" width="19.5" height="6.2" rx="1.5" tabindex="0" data-v="0.8%" data-k="December 2024 · trips re-optimized onto another vehicle"/> 38351<rect class="bar bus" x="189.3" y="183.2" width="19.5" height="6.8" rx="1.5" tabindex="0" data-v="0.9%" data-k="January 2025 · trips re-optimized onto another vehicle"/> 38352<text class="ax2" x="199.0" y="206" text-anchor="middle">Jan 25</text> 38353<rect class="bar bus" x="213.7" y="184.3" width="19.5" height="5.7" rx="1.5" tabindex="0" data-v="0.8%" data-k="February 2025 · trips re-optimized onto another vehicle"/> 38354<rect class="bar bus" x="238.2" y="185.5" width="19.5" height="4.5" rx="1.5" tabindex="0" data-v="0.6%" data-k="March 2025 · trips re-optimized onto another vehicle"/> 38355<rect class="bar bus" x="262.7" y="180.2" width="19.5" height="9.8" rx="1.5" tabindex="0" data-v="1.3%" data-k="April 2025 · trips re-optimized onto another vehicle"/> 38356<rect class="bar bus" x="287.1" y="179.3" width="19.5" height="10.7" rx="1.5" tabindex="0" data-v="1.4%" data-k="May 2025 · trips re-optimized onto another vehicle"/> 38357<rect class="bar bus" x="311.6" y="185.7" width="19.5" height="4.3" rx="1.5" tabindex="0" data-v="0.6%" data-k="June 2025 · trips re-optimized onto another vehicle"/> 38358<rect class="bar bus" x="336.0" y="182.9" width="19.5" height="7.1" rx="1.5" tabindex="0" data-v="0.9%" data-k="July 2025 · trips re-optimized onto another vehicle"/> 38359<text class="ax2" x="345.8" y="206" text-anchor="middle">Jul 25</text> 38360<rect class="bar bus" x="360.5" y="185.3" width="19.5" height="4.7" rx="1.5" tabindex="0" data-v="0.6%" data-k="August 2025 · trips re-optimized onto another vehicle"/> 38361<rect class="bar bus" x="385.0" y="188.7" width="19.5" height="1.3" rx="1.5" tabindex="0" data-v="0.2%" data-k="September 2025 · trips re-optimized onto another vehicle"/> 38362<rect class="bar bus" x="409.4" y="188.8" width="19.5" height="1.2" rx="1.5" tabindex="0" data-v="0.2%" data-k="October 2025 · trips re-optimized onto another vehicle"/> 38363<rect class="bar bus" x="433.9" y="188.7" width="19.5" height="1.3" rx="1.5" tabindex="0" data-v="0.2%" data-k="November 2025 · trips re-optimized onto another vehicle"/> 38364<rect class="bar bus" x="458.3" y="188.9" width="19.5" height="1.1" rx="1.5" tabindex="0" data-v="0.1%" data-k="December 2025 · trips re-optimized onto another vehicle"/> 38365<rect class="bar bus" x="482.8" y="189.2" width="19.5" height="0.8" rx="1.5" tabindex="0" data-v="0.1%" data-k="January 2026 · trips re-optimized onto another vehicle"/> 38366<text class="ax2" x="492.5" y="206" text-anchor="middle">Jan 26</text> 38367<rect class="bar dem" x="507.3" y="140.1" width="19.5" height="49.9" rx="1.5" tabindex="0" data-v="6.7%" data-k="February 2026 · trips re-optimized onto another vehicle"/>
38368<line class="cut" x1="504.8" y1="36.0" x2="504.8" y2="190"/><text class="nt" x="498.8" y="51.2" text-anchor="end">human-centered re-optimization</text><text class="nt" x="498.8" y="65.2" text-anchor="end">enabled, Feb 2026</text> 38369<rect class="bar dem" x="531.7" y="136.2" width="19.5" height="53.8" rx="1.5" tabindex="0" data-v="7.2%" data-k="March 2026 · trips re-optimized onto another vehicle"/> 38370<rect class="bar dem" x="556.2" y="132.9" width="19.5" height="57.1" rx="1.5" tabindex="0" data-v="7.6%" data-k="April 2026 · trips re-optimized onto another vehicle"/> 38371<rect class="bar dem" x="580.7" y="88.8" width="19.5" height="101.2" rx="1.5" tabindex="0" data-v="13.5%" data-k="May 2026 · trips re-optimized onto another vehicle"/> 38372<rect class="bar dem" x="605.1" y="70.6" width="19.5" height="119.4" rx="1.5" tabindex="0" data-v="15.9%" data-k="June 2026 · trips re-optimized onto another vehicle"/> 38373<rect class="bar dem" x="629.6" y="53.5" width="19.5" height="136.5" rx="1.5" tabindex="0" data-v="18.2%" data-k="July 2026 · trips re-optimized onto another vehicle"/> 38374<text class="ax2" x="639.3" y="206" text-anchor="middle">Jul 26</text> 38375<rect class="bar dem" x="654.0" y="51.9" width="19.5" height="138.1" rx="1.5" tabindex="0" data-v="18.4%" data-k="August 2026 · trips re-optimized onto another vehicle"/> 38376</svg> 38377 <figcaption><b>Figure 10 · Plans adjusted during the day</b>Share of served trips each month that were re-optimized onto a different vehicle after first assignment. The vertical line marks the start of human-centered re-optimization.</figcaption> 38378</figure> 38379 38380<p>The same change shifted who does the work. <strong>Before human-centered automation, dispatchers made about 85% of route adju
38380stments by hand; since February 2026 they have made about 4%</strong> (Figure 11). The system makes the rest, and every change is logged and open to review.</p> 38381 38382<figure class="chartfig"> 38383 <svg class="chart" viewBox="0 0 680 134" role="img" aria-label="Share of route adjustments made by hand: 85% before automation, 4% since."> 38384<text class="pt" x="0" y="14">Share of route adjustments a dispatcher made by hand</text> 38385<line class="zero" x1="150.0" y1="30" x2="150.0" y2="112"/><text class="ax" x="150.0" y="128" text-anchor="middle">0%</text> 38386<line class="gl" x1="272.5" y1="30" x2="272.5" y2="112"/><text class="ax" x="272.5" y="128" text-anchor="middle">25%</text> 38387<line class="gl" x1="395.0" y1="30" x2="395.0" y2="112"/><text class="ax" x="395.0" y="128" text-anchor="middle">50%</text> 38388<line class="gl" x1="517.5" y1="30" x2="517.5" y2="112"/><text class="ax" x="517.5" y="128" text-anchor="middle">75%</text> 38389<line class="gl" x1="640.0" y1="30" x2="640.0" y2="112"/><text class="ax" x="640.0" y="128" text-anchor="middle">100%</text> 38390<text class="rw" x="138" y="56" text-anchor="end">Before</text> 38391<rect class="bar bus" x="150" y="40" width="415.3" height="22" rx="3" tabindex="0" data-v="85%" data-k="Before · made by hand"/> 38392<text class="vlb" x="573.3" y="56">85%</text> 38393<text class="rw" x="138" y="92" text-anchor="end">Since Feb 2026</text> 38394<rect class="bar dem" x="150" y="76" width="19.7" height="22" rx="3" tabindex="0" data-v="4%" data-k="Since Feb 2026 · made by hand"/> 38395<text class="vlb" x="177.7" y="92">4%</text> 38396</svg> 38397 <figcaption><b>Figure 11 · Adjustments made by hand</b>Share of vehicle reassignments entered manually by a dispatcher, before and after human-centered re-optimization went live.</figcaption> 38398</figure> 38399 38400<p>Most adjustments now come from the routine re-optimization of the whole plan, not from a single disruption (Figure 12). Cancellations account for most of the remainder, because a freed seat often gives the planner a better way to serve someone else.</p> 38401 38402<figure class="chartfig"> 38403 <svg class="chart" viewBox="0 0 680 158" role="img" aria-label="What triggered a re-optimization: routine 75%, cancellation 17%, no-show 5%, dispatcher 3%."> 38404<text class="rw" x="266" y="24" text-anchor="end">Periodic re-optimization</text> 38405<rect class="bar dem" x="278" y="8" width="322.0" height="22" rx="3" tabindex="0" data-v="75%" data-k="Routine re-optimization of the whole plan"/> 38406<text class="vlb" x="608.0" y="24">75%</text> 38407<text class="rw" x="266" y="62" text-anchor="end">A cancellation opened a better option</text> 38408<rect class="bar dem" x="278" y="46" width="71.9" height="22" rx="3" tabindex="0" data-v="17%" data-k="A cancellation opened a better option"/> 38409<text class="vlb" x="357.9" y="62">17%</text> 38410<text class="rw" x="266" y="100" text-anchor="end">A no-show changed the plan</text> 38411<rect class="bar dem" x="278" y="84" width="19.3" height="22" rx="3" tabindex="0" data-v="5%" data-k="A no-show changed the plan"/> 38412<text class="vlb" x="305.3" y="100">5%</text> 38413<text class="rw" x="266" y="138" text-anchor="end">Dispatcher-initiated</text> 38414<rect class="bar bus" x="278" y="122" width="14.3" height="22" rx="3" tabindex="0" data-v="3%" data-k="A dispatcher stepped in"/> 38415<text class="vlb" x="300.3" y="138">3%</text> 38416</svg> 38417 <figcaption><b>Figure 12 · What triggered an adjustment</b>Share of vehicle reassignments by logged trigger, FebruaryâAugust 2026. Shares are of reassignments with a recorded trigger; about one in five has none and is excluded.</figcaption> 38418</figure> 38419</section> 38420 38421<section class="sec"> 38422<span class="tick"></span> 38423<h2>The effect riders feel: pickups on time</h2> 38424<p>Punctuality is structurally harder for on-demand service than for a timetable. Pickup times are promised before the vehicleâs day is known, and every pooled detour and late rider pushes the next stop back. The Transportation Research Boardâs demand-response guidebook notes that on-time performance suffers when âactual service on the street may not meet the tight schedule,â<sup class="fn"><a href="#r13">13</a></sup> and the Washington regionâs paratransit service reports scheduling more direct rides to limit âcascading delays.â<sup class="fn"><a href="#r14">14</a></sup></p> 38425<p>Industry benchmarks reflect that difficulty. The same guidebook describes a norm of about 90% of pickups on time, usually measured against a 30-minute window,<sup class="fn"><a href="#r13">13</a></sup> and federal guidance treats windows longer than 30 minutes as unacceptable.<sup class="fn"><a href="#r15">15</a></sup> Some agencies hold microtransit to a tighter standard: one sets a target of 90% of riders picked up no later than five minutes after the planned time.<sup class="fn"><a href="#r16">16</a></sup></p> 38426<p>Go! Time now clears the 30-minute-window norm at 95%. <strong>The share of riders picked up no more than ten minutes after the quoted time rose from 86% to 96%</strong>, and against the five-minute standard it rose from 68% to 88% (Figure 13). The service reached those numbers while its share of pooled rides was still climbing.</p> 38427 38428<figure class="chartfig"> 38429 <svg class="chart" viewBox="0 0 680 176" role="img" aria-label="Share of pickups within 5, 10 and 15 minutes of the quoted time, before and after."> 38430<circle class="key-dot bus" cx="6" cy="10" r="5"/><text class="lg" x="16" y="14">before the new engine (to Sep 2025)</text><circle class="key-dot dem" cx="262" cy="10" r="5"/><text class="lg" x="272" y="14">after the re-tune (from late Nov 2025)</text> 38431<line class="gl" x1="214.0" y1="34" x2="214.0" y2="154"/><text class="ax" x="214.0" y="170" text-anchor="middle">60%</text> 38432<line class="gl" x1="323.0" y1="34" x2="323.0" y2="154"/><text class="ax" x="323.0" y="170" text-anchor="middle">70%</text> 38433<line class="gl" x1="432.0" y1="34" x2="432.0" y2="154"/><text class="ax" x="432.0" y="170" text-anchor="middle">80%</text> 38434<line class="gl" x1="541.0" y1="34" x2="541.0" y2="154"/><text class="ax" x="541.0" y="170" text-anchor="middle">90%</text> 38435<line class="gl" x1="650.0" y1="34" x2="650.0" y2="154"/><text class="ax" x="650.0" y="170" text-anchor="middle">100%</text> 38436<text class="rw" x="0" y="57">⤠5 min after quoted time</text> 38437<line class="dumb" x1="300.6" y1="52" x2="523.4" y2="52"/> 38438<circle class="dot bus" cx="300.6" cy="52" r="6" tabindex="0" data-v="68%" data-k="before · ⤠5 min after quoted time"/> 38439<circle class="dot dem" cx="523.4" cy="52" r="6" tabindex="0" data-v="88%" data-k="after · ⤠5 min after quoted time"/> 38440<text class="ax2" x="290.6" y="56" text-anchor="end">68%</text> 38441<text class="vlb" x="534.4" y="57">88%</text> 38442<text class="rw" x="0" y="97">⤠10 min after quoted time</text> 38443<line class="dumb" x1="495.7" y1="92" x2="607.8" y2="92"/> 38444<circle class="dot bus" cx="495.7" cy="92" r="6" tabindex="0" data-v="86%" data-k="before · ⤠10 min after quoted time"/> 38445<circle class="dot dem" cx="607.8" cy="92" r="6" tabindex="0" data-v="96%" data-k="after · ⤠10 min after quoted time"/> 38446<text class="ax2" x="485.7" y="96" text-anchor="end">86%</text> 38447<text class="vlb" x="618.8" y="97">96%</text> 38448<text class="rw" x="0" y="137">Inside a 30-min window (±15)</text> 38449<line class="dumb" x1="536.0" y1="132" x2="599.5" y2="132"/> 38450<circle class="dot bus" cx="536.0" cy="132" r="6" tabindex="0" data-v="90%" data-k="before · Inside a 30-min window (±15)"/> 38451<circle class="dot dem" cx="599.5" cy="132" r="6" tabindex="0" data-v="95%" data-k="after · Inside a 30-min window (±15)"/> 38452<text class="ax2" x="526.0" y="136" text-anchor="end">90%</text> 38453<text class="vlb" x="610.5" y="137">95%</text> 38454</svg> 38455 <figcaption><b>
38455Figure 13 · Pickups against the quoted time</b>Served trips before the new scheduling engine (June 2024 â September 2025) and after its re-tune (late November 2025 â August 2026). Lateness is measured against the most recent pickup time sent to the rider.</figcaption> 38456</figure> 38457</section> 38458 38459<section class="sec"> 38460<span class="tick"></span> 38461<h2>Learning from the people behind the wheel</h2> 38462<p>Drivers know things a routing model does not: which gate closes early, which left turn backs up at school dismissal, where a regular rider actually waits. A Forbes essay on people-centric design makes the case that routing technology should âgo beyond efficiency, factoring in the well-being of the driver,â and that drivers given control over their work âfeel more involved and valued.â<sup class="fn"><a href="#r17">17</a></sup></p> 38463<p>So when a Go! Time driver departs from the planned stop order, we treat the departure as information. Each one is scored against the time the planned order would have taken (Figure 14). About half made no material difference. In 18% the driverâs route was faster, sometimes by more than five minutes, and those are the cases the planner learns from, because they point to travel times, access points or local conditions the model had wrong. Where the planned order was faster, the gap was usually small, under five minutes in most cases.</p> 38464 38465<figure class="chartfig"> 38466 <svg class="chart" viewBox="0 0 680 112" role="img" aria-label="Driver departures from the planned stop order, scored against the plan."> 38467<text class="sl gain" x="34" y="16">driver's route was faster · 18%</text> 38468<text class="sl after" x="646" y="16" text-anchor="end">35% · planned order was faster</text> 38469<rect class="seg s1" x="34.0" y="30" width="28.3" height="54" tabindex="0" data-v="5%" data-k="the driver's route saved more than 5 min"/> 38470<text class="segv dk" x="48.1" y="62" text-anchor="middle">5%</text> 38471<rect class="seg s2" x="64.3" y="30" width="76.8" height="54" tabindex="0" data-v="13%" data-k="the driver's route saved 1â5 min"/> 38472<text class="segv dk" x="102.7" y="62" text-anchor="middle">13%</text> 38473<rect class="seg s3" x="143.1" y="30" width="288.9" height="54" tabindex="0" data-v="48%" data-k="no material difference"/> 38474<text class="segv lt" x="287.5" y="62" text-anchor="middle">48%</text> 38475<rect class="seg s4" x="433.9" y="30" width="131.3" height="54" tabindex="0" data-v="22%" data-k="the planned order was 1â5 min faster"/> 38476<text class="segv lt" x="499.6" y="62" text-anchor="middle">22%</text> 38477<rect class="seg s5" x="567.2" y="30" width="64.7" height="54" tabindex="0" data-v="11%" data-k="the planned order was 5â15 min faster"/> 38478<text class="segv lt" x="599.6" y="62" text-anchor="middle">11%</text> 38479<rect class="seg s6" x="633.9" y="30" width="10.1" height="54" tabindex="0" data-v="2%" data-k="the planned order was more than 15 min faster"/> 38480<text class="ax2" x="34" y="104">saved time</text><text class="ax2" x="340" y="104" text-anchor="middle">no material difference</text><text class="ax2" x="646" y="104" text-anchor="end">took longer than the plan</text> 38481</svg> 38482 <figcaption><b>Figure 14 · Driver route choices, scored against the plan</b>Departures from the planned stop order, June 2024 â August 2026, each compared with the time the planned order would have taken. Shares sum to 101% because of rounding.</figcaption> 38483</figure> 38484 38485<p>That is the principle behind human-centered re-optimization. The system learns from a driverâs judgement instead of overriding it, and a human dispatcher remains the final authority on every exception.</p> 38486</section> 38487 38488<section class="sec"> 38489<span class="tick"></span> 38490<h2>What comes next</h2> 38491<p>The next step carries the same loop into the conversation with drivers. IT Curvesâ Driver Copilot handles routine exchanges between the system and the driver under three rules. Every AI-to-driver exchange is logged, time-stamped and reviewable. An ambiguous reply is asked again, and any sign of distress goes straight to a human. And every detection threshold is set by the agency operating the service.</p> 38492<p>On the service side, the City and IT Curves are working from the same operating data to decide where additional hours would carry the most riders. For cities weighing a similar move, the Annapolis record points to a sequence: choose routes whose demand is thin or whose span is short, measure coverage by the same rule on both sides of the change, and plan for the daily operation as carefully as for the launch. In this pilot, much of the second yearâs gain came from how the day was run, as much as from where the vehicles went.</p> 38493</section> 38494 38495<aside class="callout" id="transitlab-callout"> 38496 <span class="tick"></span> 38497 <h3>Planning the next network</h3> 38498 <p>Every successful service starts long before launch day. In Annapolis, it started with the City's 2019 Transit Development Plan, five years before Go! Time took its first booking. Someone has to decide where service should go, how zones and routes fit together, and which mode suits each part of the city. Those decisions shape everything that follows, from ridership to cost to how riders feel about the system.</p> 38499 <p>That's why we built TransitLab, our new platform for planning transit networks. It works whether your city runs on-demand microtransit, fixed-route bus, metro, or a mix of all three. It's designed to help agencies and cities test ideas, c
38499ompare options, and design a network set up for success from day one.</p> 38500 <p>If you're planning new service or rethinking what you already run, we'd love to talk.</p> 38501</aside> 38502 38503<div class="refs"> 38504 <p class="label">Sources</p> 38505 <ol> 38506 <li id="r1">City of Annapolis, âOur City.â <a href="https://www.annapolis.gov/31/Our-City">annapolis.gov</a></li> 38507 <li id="r2">City of Annapolis, âDemographicsâ (2020 Census). <a href="https://www.annapolis.gov/875/Demographics">annapolis.gov</a></li> 38508 <li id="r3">Montgomery County Department of Transportation, âRide On Flex.â <a href="https://www.montgomerycountymd.gov/department-transportation/ride-montgomery-county/ride-flex">montgomerycountymd.gov</a></li> 38509 <li id="r4">Prince Georgeâs County Government, county bulletin, 6 November 2020. <a href="https://content.govdelivery.com/accounts/MDPGC/bulletins/2aa46c4">govdelivery.com</a></li> 38510 <li id="r5">Maryland Transit Administration, âMicrotransit Pilot.â <a href="https://www.mta.maryland.gov/microtransit-pilot">mta.maryland.gov</a></li> 38511 <li id="r6">Howard County Government, news release, 14 March 2025. <a href="https://www.howardcountymd.gov/News031425b">howardcountymd.gov</a></li> 38512 <li id="r7">D. Zawodny, <em>The Baltimore Banner</em>, 17 June 2025. <a href="https://www.thebanner.com/community/transportation/mta-baltimore-new-plan-35ANFZIRPFDEXASPL77AA46MJY/">thebanner.com</a></li> 38513 <li id="r8">âFor public transit agencies losing riders, microtransit might be an answer,â <em>The Washington Post</em>, 3 February 2018. <a href="https://www.washingtonpost.com/local/trafficandcommuting/for-public-transit-agencies-loosing-riders-microtransit-might-be-an-answer/2018/02/03/37771f46-0070-11e8-9d31-d72cf78dbeee_story.html">washingtonpost.com</a></li> 38514 <li id="r9">âTransit Desperately Needs Innovation. Why Pick on Microtransit?â <em>Bloomberg CityLab</em>, 1 February 2024. <a href="https://www.bloomberg.com/news/articles/2024-02-01/despite-its-costs-microtransit-can-make-public-transportation-better">bloomberg.com</a></li> 38515 <li id="r10">C. Foreback, âAnnapolis launches GoTime on-demand bus service,â CBS News Baltimore, 12 July 2024. <a href="https://www.cbsnews.com/baltimore/news/annapolis-launches-gotime-on-demand-bus-service-replacing-underutilized-routes/">cbsnews.com</a></li> 38516 <li id="r11">City of Annapolis, news notice, 15 August 2024. <a href="https://annapolis.gov/CivicAlerts.aspx?AID=1849">annapolis.gov</a></li> 38517 <li id="r12">TCRP Synthesis 57, <em>Computer-Aided Scheduling and Dispatch in Demand-Responsive Transit Services</em>. Transportation Research Board, 2004. <a href="https://www.nationalacademies.org/publications/23335">
38517nationalacademies.org</a></li> 38518 <li id="r13">TCRP Report 124, <em>Guidebook for Measuring, Assessing, and Improving Performance of Demand-Response Transportation</em>. Transportation Research Board, 2008. <a href="https://www.nationalacademies.org/publications/23112">nationalacademies.org</a></li> 38519 <li id="r14">Washington Metropolitan Area Transit Authority, <em>FY2025 Annual Service Excellence Report</em>. <a href="https://www.wmata.com/content/dam/wmata-com/migrated-assets/about/board/meetings/board-pdfs/upload/3b-fy2025-annual-service-excellence-report.pdf">wmata.com</a></li> 38520 <li id="r15">Federal Transit Administration, Circular C 4710.1, <em>Americans with Disabilities Act: Guidance</em>, 2015, ch. 8. <a href="https://www.transit.dot.gov/sites/fta.dot.gov/files/docs/Final_FTA_ADA_Circular_C_4710.1.pdf">transit.dot.gov</a></li> 38521 <li id="r16">Utah Transit Authority, <em>Peer Agency Benchmarking Memo</em>, June 2024. <a href="https://www.rideuta.com/-/media/Files/About-UTA/Innovative-Mobility/Innovation/FinalUTAPeerAgencyBenchmarkingMemo.pdf">rideuta.com</a></li> 38522 <li id="r17">N. Rastogi, âEmbracing A People-Centric Design In Last-Mile Delivery And Elsewhere,â <em>Forbes</em>, Forbes Business Council, 3 August 2023. <a href="https://www.forbes.com/councils/forbesbusinesscouncil/2023/08/03/embracing-a-people-centric-design-in-last-mile-delivery-and-elsewhere/">forbes.com</a></li> 38523 </ol> 38524</div> 38525 38526</div> 38527</article> 38528 38529<footer> 38530 <p>Go! Time is operated by the City of Annapolis. IT Curves supplies the scheduling and dispatch platform.</p> 38531 <p style="font-size:13px;line-height:1.6;color:#ABABAB;margin-top:20px;max-width:680px;"><strong style="color:#ABABAB;">Dr. Hesam Rashidi</strong> is a Senior Scientist and System Architect at IT Curves, specializing in AI, optimization, and human-centered systems for public transit. His work applies machine learning and operations research to complex transit problems, including paratransit, demand-responsive transportation, and large-scale routing and scheduling.</p> 38532</footer> 38533</div> 38534 38535<div id="tip" role="tooltip"><div class="tv"></div><div class="tk"></div></div> 38536 38537<script> 38538(function () { 38539 // ââ tooltip: value first, label second; text only, never markup ââ 38540 var tip = document.getElementById("tip"), tv = tip.querySelector(".tv"), tk = tip.querySelector(".tk"); 38541 function place(x, y) { 38542 var r = tip.getBoundingClientRect(), L = x + 14, T = y + 14; 38543 if (L + r.width > window.innerWidth - 8) L = x - r.width - 14; 38544 if (T + r.height > window.innerHeight - 8) T = y - r.height - 14; 38545 tip.style.left = L + "px"; tip.style.top = T + "px"; 38546 } 38547 function show(el, x, y) { 38548 tv.textContent = el.getAttribute("data-v"); tk.textContent = el.getAttribute("data-k") || ""; 38549 tip.classList.add("on"); place(x, y); 38550 } 38551 function hide() { tip.classList.remove("on"); } 38552 document.querySelectorAll("[data-v]").forEach(function (el) { 38553 el.addEventListener("pointerenter", function (e) { show(el, e.clientX, e.clientY); }); 38554 el.addEventListener("pointermove", function (e) { place(e.clientX, e.clientY); }); 38555 el.addEventListener("pointerleave", hide); 38556 el.addEventListener("focus", function () { var r = el.getBoundingClientRect(); show(el, r.right, r.top); }); 38557 el.addEventListener("blur", hide); 38558 }); 38559 38560 // ââ city map: a legend key isolates its land use ââ 38561 var cm = document.getElementById("citymap"); 38562 document.querySelectorAll("[data-focus]").forEach(function (b) { 38563 var c = "focus-" + b.getAttribute("data-focus"); 38564 var on = function () { cm.classList.add(c); b.setAttribute("aria-pressed", "true"); }; 38565 var off = function () { if (!b.dataset.lock) { cm.classList.remove(c); b.setAttribute("aria-pressed", "false"); } }; 38566 b.setAttribute("aria-pressed", "false"); 38567 b.addEventListener("pointerenter", on); b.addEventListener("pointerleave", off); 38568 b.addEventListener("focus", on); b.addEventListener("blur", off); 38569 b.addEventListener("click", function () { 38570 var locked = !b.dataset.lock; 38571 document.querySelectorAll("[data-focus]").forEach(function (o) { 38572 delete o.dataset.lock; cm.classList.remove("focus-" + o.getAttribute("data-focus")); o.setAttribute("aria-pressed", "false"); 38573 }); 38574 if (locked) { b.dataset.lock = "1"; on(); } 38575 }); 38576 }); 38577 38578 // ââ walkable-access map: presets, layers, routes ââ 38579 var wm = document.getElementById("walkmap"), stat = document.getElementById("walkstat"); 38580 var ROUTES = ["Red", "Green", "Brown", "Orange", "Purple"], LAYERS = ["before", "pilot", "gained", "lost"]; 38581 var PRE = { 38582 before: { ly: ["before"], rt: ROUTES, 38583 s: ["Five fixed routes, before July 2024: ", "4.2 sq mi", " within a ten-minute walk of a stop."] }, 38584 pilot: { ly: ["pilot"], rt: ["Red", "Green", "Brown"], 38585 s: ["Go! Timeâs virtual stops plus three citywide routes: ", "5.0 sq mi", " within a ten-minute walk."] }, 38586 diff: { ly: ["before", "gained", "lost"], rt: [], 38587 s: ["Blue was already covered; teal is newly within a ten-minute walk. ", "Close to a square mile gained, effectively none lost.", ""] } 38588 }; 38589 function setLayer(n, on) { 38590 wm.querySelector('[data-ly="' + n + '"]').setAttribute("data-off", on ? "0" : "1"); 38591 document.querySelector('[data-layer="' + n + '"]').setAttribute("aria-pressed", on ? "true" : "false"); 38592 } 38593 function setRoute(n, on) { 38594 wm.querySelector('[data-rt="' + n + '"]').setAttribute("data-off", on ? "0" : "1"); 38595 document.querySelector('[data-route="' + n + '"]').setAttribute("aria-pressed", on ? "true" : "false"); 38596 } 38597 function setStat(parts) { 38598 stat.textContent = ""; 38599 stat.appendChild(document.createTextNode(parts[0])); 38600 var b = document.createElement("b"); b.textContent = parts[1]; stat.appendChild(b); 38601 stat.appendChild(document.createTextNode(parts[2])); 38602 } 38603 function preset(k) { 38604 var p = PRE[k];
38605 LAYERS.forEach(function (n) { setLayer(n, p.ly.indexOf(n) > -1); }); 38606 ROUTES.forEach(function (n) { setRoute(n, p.rt.indexOf(n) > -1); }); 38607 document.querySelectorAll("[data-preset]").forEach(function (b) { 38608 b.setAttribute("aria-pressed", b.getAttribute("data-preset") === k ? "true" : "false"); 38609 }); 38610 setStat(p.s); 38611 } 38612 function clearPreset() { 38613 document.querySelectorAll("[data-preset]").forEach(function (b) { b.setAttribute("aria-pressed", "false"); }); 38614 stat.textContent = "Custom view: toggle any layer or route."; 38615 } 38616 document.querySelectorAll("[data-preset]").forEach(function (b) { 38617 b.addEventListener("click", function () { preset(b.getAttribute("data-preset")); }); 38618 }); 38619 document.querySelectorAll("[data-layer]").forEach(function (b) { 38620 b.addEventListener("click", function () { setLayer(b.getAttribute("data-layer"), b.getAttribute("aria-pressed") !== "true"); clearPreset(); }); 38621 }); 38622 document.querySelectorAll("[data-route]").forEach(function (b) { 38623 b.addEventListener("click", function () { setRoute(b.getAttribute("data-route"), b.getAttribute("aria-pressed") !== "true"); clearPreset(); }); 38624 }); 38625 preset("diff"); 38626})(); 38627<\/script> 38628</body> 38629</html> 38630`, gy = "/_components/v2/6f7c1cc6f4e6b5f46153147a1b8d898db9975c9c/GOTIME_graphic.e34050e6.png", fy = r0.indexOf('<div class="shell">'), py = r0.indexOf('<div id="tip"'), My = r0.slice(fy, py).trimEnd().replace( 38631 /<figure class="hero-img">[\s\S]*?<\/figure>/, 38632 `<figure class="hero-img"><img src="${Vi}" width="1360" height="765" alt="A Go! Time vehicle on a street in downtown Annapolis at sunset, with the Maryland State House behind it."></figure>` 38633), uy = ` 38634/* ââ Google Fonts ââ */ 38635@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@500;600;700&family=Source+Sans+3:ital,wght@0,400;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@500;600&display=swap'); 38636 38637/* ââ root / tokens ââ */ 38638.gta-root { 38639 color-scheme: light; 38640 --paper: #FFFFFF; 38641 --ink: #111111; 38642 --body: #2E2E2E; 38643 --soft: #6B6B6B; 38644 --faint: #8E8E8E; 38645 --rule: #E4E4E4; 38646 --hair: #F0F0F0; 38647 --amber: #E89A1C; 38648 --amber-ink: #8A5A05; 38649 --tint: #FDF6E9; 38650 background: var(--paper); 38651 color: var(--body); 38652 font-family: "Source Sans 3", "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; 38653 font-size: 18.5px; 38654 line-height: 1.65; 38655 -webkit-font-smoothing: antialiased; 38656} 38657.gta-root * { box-sizing: border-box; } 38658 38659/* ââ layout ââ */ 38660.gta-root .shell { max-width: 1040px; margin: 0 auto; padding: 0 28px; } 38661.gta-root .col { max-width: 680px; } 38662 38663/* ââ label ââ */ 38664.gta-root .label { 38665 font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace; 38666 font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; 38667 color: var(--amber-ink); margin: 0; 38668} 38669 38670/* ââ hero ââ */ 38671.gta-root header.hero { padding: 64px 0 0; } 38672.gta-root h1 { 38673 font-family: "Outfit", sans-serif; font-weight: 700; color: var(--ink); 38674 font-size: clamp(34px, 5.4vw, 52px); line-height: 1.07; letter-spacing: -.025em; 38675 margin: 20px 0 0; max-width: 15ch; text-wrap: balance; 38676} 38677.gta-root .standfirst { 38678 font-size: 21px; line-height: 1.52; color: var(--soft); margin: 22px 0 0; max-width: 640px; 38679} 38680.gta-root .byline { 38681 margin: 30px 0 0; padding-top: 18px; border-top: 1px solid var(--rule); 38682 font-size: 15px; line-height: 1.7; color: var(--soft); max-width: 680px; 38683} 38684.gta-root .byline strong { color: var(--ink); font-weight: 600; } 38685 38686/* ââ hero image / placeholder ââ */ 38687.gta-root figure.hero-img { margin: 28px 0 0; max-width: 680px; } 38688.gta-root figure.hero-img img { display: block; width: 100%; height: auto; border-radius: 4px; } 38689.gta-root .hero-placeholder { 38690 background: linear-gradient(135deg, #F8E6A0, #E89A1C); 38691 height: 360px; border-radius: 4px; 38692 display: flex; align-items: center; justify-content: center; 38693 font-family: "Outfit", sans-serif; font-size: 15px; color: #8A5A05; 38694 font-style: italic; opacity: .8; text-align: center; padding: 0 24px; 38695} 38696 38697/* ââ figures strip ââ */ 38698.gta-root .figures-strip { 38699 display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; 38700 margin: 40px 0 0; border-top: 1px solid var(--ink); 38701} 38702.gta-root .figures-strip > div { padding: 18px 22px 20px; border-right: 1px solid var(--hair); } 38703.gta-root .figures-strip > div:last-child { border-right: 0; } 38704.gta-root .figures-strip .v {
38705 font-family: "Outfit", sans-serif; font-weight: 700; font-size: 30px; line-height: 1.05; 38706 color: var(--amber-ink); letter-spacing: -.02em; font-variant-numeric: tabular-nums; 38707} 38708.gta-root .figures-strip .k { font-size: 13.5px; line-height: 1.45; color: var(--soft); margin-top: 8px; } 38709@media (max-width: 760px) { 38710 .gta-root .figures-strip { grid-template-columns: repeat(2, 1fr); } 38711 .gta-root .figures-strip > div { border-bottom: 1px solid var(--hair); } 38712 .gta-root .figures-strip > div:nth-child(2n) { border-right: 0; } 38713} 38714 38715/* ââ body text ââ */ 38716.gta-root article { padding: 52px 0 0; } 38717.gta-root h2 { 38718 font-family: "Outfit", sans-serif; font-weight: 600; color: var(--ink); 38719 font-size: 26px; line-height: 1.22; letter-spacing: -.018em; 38720 margin: 0 0 18px; text-wrap: balance; 38721} 38722.gta-root .sec { margin-top: 56px; } 38723.gta-root .sec:first-child { margin-top: 0; } 38724.gta-root .sec > .tick, .gta-root .callout > .tick { display: block; width: 34px; height: 3px; background: var(--amber); margin-bottom: 16px; } 38725.gta-root p { margin: 0 0 22px; } 38726.gta-root article .col > p:first-of-type { font-size: 20px; color: var(--ink); } 38727.gta-root strong { font-weight: 600; color: var(--ink); } 38728.gta-root em { font-style: italic; } 38729 38730/* ââ figures ââ */ 38731.gta-root figure { margin: 40px 0; width: 100%; max-width: 680px; } 38732.gta-root figure img { display: block; width: 100%; height: auto; background: #fff; } 38733.gta-root figure.bordered img { border: 1px solid var(--rule); } 38734.gta-root figcaption { margin: 13px 0 0; max-width: 680px; font-size: 14.5px; line-height: 1.6; color: var(--soft); } 38735.gta-root figcaption b { 38736 font-family: "IBM Plex Mono", monospace; font-size: 11px; font-weight: 600; 38737 letter-spacing: .14em; text-transform: uppercase; color: var(--amber-ink); 38738 display: block; margin-bottom: 6px; 38739} 38740 38741/* ââ note box ââ */ 38742.gta-root .note { margin: 52px 0 0; padding: 26px 28px; background: var(--tint); max-width: 680px; } 38743.gta-root .note p { margin: 0; font-size: 16px; line-height: 1.6; color: var(--body); } 38744.gta-root .note p + p { margin-top: 12px; } 38745.gta-root .note .label { margin-bottom: 12px; } 38746 38747/* ââ footer ââ */ 38748.gta-root footer { margin-top: 72px; border-top: 1px solid var(--rule); padding: 26px 0 90px; } 38749.gta-root footer p { font-size: 14.5px; line-height: 1.75; color: var(--faint); max-width: 680px; margin: 0 0 10px; } 38750 38751/* ââ links ââ */ 38752.gta-root a { color: var(--amber-ink); text-decoration-thickness: 1px; text-underline-offset: 2px; } 38753.gta-root :focus-visible { outline: 2px solid var(--amber); outline-offset: 3px; } 38754 38755/* ââ responsive ââ */ 38756@media (max-width: 640px) { 38757 .gta-root { font-size: 17.5px; } 38758 .gta-root header.hero { padding-top: 40px; } 38759 .gta-root .shell { padding: 0 20px; } 38760 .gta-root figure { margin: 32px 0; } 38761} 38762 38763/* ââ inline SVG diagram figure ââ */ 38764.gta-root figure.diagram { background: #FFFFFF; border: 1px solid var(--rule); padding: 26px 24px; } 38765.gta-root figure.diagram svg { display: block; width: 100%; height: auto; } 38766 38767/* ââ bolded clauses ââ */ 38768.gta-root article strong { 38769 font-weight: 600; color: var(--ink); 38770 box-shadow: inset 0 -0.42em 0 rgba(232, 154, 28, .16); 38771} 38772 38773/* ââ SVG charts ââ */ 38774.gta-root figure.chartfig { max-width: 680px; } 38775.gta-root svg.chart { display: block; width: 100%; height: auto; overflow: visible; } 38776.gta-root svg.chart text { font-family: "Source Sans 3", "Helvetica Neue", sans-serif; fill: var(--body); } 38777.gta-root svg.chart .ax { font-size: 11.5px; fill: var(--faint); } 38778.gta-root svg.chart .ax2 { font-size: 11.5px; fill: var(--soft); } 38779.gta-root svg.chart .rw { font-size: 13.5px; fill: var(--ink); font-weight: 600; } 38780.gta-root svg.chart .pt { font-size: 13px; fill: var(--ink); font-weight: 600; } 38781.gta-root svg.chart .lg { font-size: 12px; fill: var(--soft); } 38782.gta-root svg.chart .nt { font-size: 11.5px; fill: var(--soft); font-style: italic; } 38783.gta-root svg.chart .vl { font-size: 12.5px; fill: var(--amber-ink); font-weight: 600; } 38784.gta-root svg.chart .vlb { font-size: 13.5px; fill: var(--ink); font-weight: 700; } 38785.gta-root svg.chart .gl { stroke: #EFEFEF; stroke-width: 1; } 38786.gta-root svg.chart .zero { stroke: #D6D6D6; stroke-width: 1; } 38787.gta-root svg.chart .cut { stroke: var(--ink); stroke-width: 1.1; stroke-dasharray: 4 3; } 38788.gta-root svg.chart .bus, .gta-root svg.chart .key.bus, .gta-root svg.chart .man { fill: #CDD1D5; } 38789.gta-root svg.chart .dem, .gta-root svg.chart .key.dem, .gta-root svg.chart .auto { fill: var(--amber); } 38790.gta-root svg.chart .ln { fill: none; stroke: var(--amber); stroke-width: 2.6; stroke-linejoin: round; } 38791.gta-root svg.chart .dot { fill: var(--amber); stroke: #fff; stroke-width: 1.5; } 38792.gta-root svg.chart .cdf-before { fill: none; stroke: #CDD1D5; stroke-width: 2.6; } 38793.gta-root svg.chart .cdf-after { fill: none; stroke: var(--amber); stroke-width: 3; } 38794.gta-root svg.chart .sl { font-size: 13px; font-weight: 700; } 38795.gta-root svg.chart .sl.before { fill: #8B9096; } 38796.gta-root svg.chart .sl.after { fill: var(--amber-ink); } 38797.gta-root svg.chart .sl.gain { fill: #1E6F63; } 38798.gta-root svg.chart .sl.loss { fill: #C2570F; } 38799.gta-root svg.chart .s1 { fill: #1E6F63; } 38800.gta-root svg.chart .s2 { fill: #5FA396; } 38801.gta-root svg.chart .s3 { fill: #DFE2E5; } 38802.gta-root svg.chart .s4 { fill: #F3CE93; } 38803.gta-root svg.chart .s5 { fill: var(--amber); } 38804.gta-root svg.chart .s6 { fill: #C2570F; } 38805.gta-root svg.chart .segv { font-size: 14px; font-weight: 700; } 38806.gta-root svg.chart .segv.lt { fill: var(--ink); } 38807.gta-root svg.chart .segv.dk { fill: #FFFFFF; } 38808.gta-root svg.chart .segv.out { fill: var(--ink); font-size: 12px; } 38809 38810/* ââ hover interactions ââ */ 38811.gta-root svg.chart .bar, 38812.gta-root svg.chart .seg, 38813.gta-root svg.chart .dot { transition: opacity .13s ease, fill .13s ease; cursor: default; } 38814.gta-root svg.chart:hover .bar,
38815.gta-root svg.chart:hover .seg { opacity: .3; } 38816.gta-root svg.chart .bar:hover, 38817.gta-root svg.chart .seg:hover { opacity: 1; fill: var(--amber-ink); } 38818.gta-root svg.chart .seg:hover { fill: #8A5A05; } 38819.gta-root svg.chart:hover .dot { opacity: .35; } 38820.gta-root svg.chart .dot:hover { opacity: 1; r: 7; fill: var(--amber-ink); } 38821@media (prefers-reduced-motion: reduce) { 38822 .gta-root svg.chart .bar, 38823 .gta-root svg.chart .seg, 38824 .gta-root svg.chart .dot { transition: none; } 38825} 38826 38827/* ââ dispatch-loop diagram ââ */ 38828.gta-root figure.diagram svg .bx, 38829.gta-root figure.diagram svg .bxa { transition: fill .13s ease, stroke .13s ease; } 38830.gta-root figure.diagram svg .bx:hover { fill: #FDF6E9; stroke: var(--amber); } 38831.gta-root figure.diagram svg .bxa:hover { fill: #FBEBCF; } 38832 38833/* ââ v5 additions ââ */ 38834.gta-root svg.chart .new, .gta-root svg.chart .key.new { fill: #EBD9B5; } 38835.gta-root svg.chart .key-dot.bus, .gta-root svg.chart .dot.bus { fill: #AEB4BA; } 38836.gta-root svg.chart .key-dot.dem, .gta-root svg.chart .dot.dem { fill: var(--amber); } 38837.gta-root svg.chart .dumb { stroke: #D9D9D9; stroke-width: 3; stroke-linecap: round; } 38838.gta-root svg.chart [tabindex] { outline: none; } 38839.gta-root svg.chart [tabindex]:focus-visible { outline: 2px solid var(--amber); outline-offset: 2px; } 38840.gta-root svg.chart:hover .stk { opacity: .3; } 38841.gta-root svg.chart .stk:hover { opacity: 1; } 38842.gta-root svg.chart .stk:hover .dem { fill: var(--amber-ink); } 38843.gta-root svg.chart .stk:hover .new { fill: #C9A869; } 38844.gta-root svg.chart .bar.bus:hover { fill: #6F767D; } 38845.gta-root svg.chart .dot.bus:hover { fill: #6F767D; } 38846.gta-root svg.chart .stk { transition: opacity .13s ease; } 38847 38848/* ââ in-brief box ââ */ 38849.gta-root .brief { margin: 40px 0 0; border-top: 1px solid var(--ink); padding: 20px 0 0; max-width: 680px; } 38850.gta-root .brief .label { margin-bottom: 12px; } 38851.gta-root .brief ul { margin: 0; padding: 0; list-style: none; } 38852.gta-root .brief li { position: relative; padding: 0 0 14px 26px; font-size: 17.5px; line-height: 1.55; color: var(--ink); } 38853.gta-root .brief li::before { content: ""; position: absolute; left: 0; top: .62em; width: 12px; height: 3px; background: var(--amber); } 38854 38855/* ââ pull quote ââ */ 38856.gta-root blockquote { margin: 30px 0; padding: 4px 0 4px 22px; border-left: 3px solid var(--amber); max-width: 680px; } 38857.gta-root blockquote p { font-family: "Outfit", sans-serif; font-size: 21px; line-height: 1.42; color: var(--ink); margin: 0 0 8px; letter-spacing: -.01em; } 38858.gta-root blockquote cite { font-style: normal; font-size: 14.5px; color: var(--soft); } 38859 38860/* ââ SVG diagrams ââ */ 38861.gta-root svg.diag { display: block; width: 100%; height: auto; } 38862.gta-root svg.diag text { font-family: "Source Sans 3", "Helvetica Neue", sans-serif; } 38863.gta-root svg.diag .dg-t { font-family: "Outfit", sans-serif; font-size: 17px; font-weight: 600; fill: var(--ink); } 38864.gta-root svg.diag .dg-h { font-family: "Outfit", sans-serif; font-size: 17px; font-weight: 600; fill: var(--ink); } 38865.gta-root svg.diag .dg-h2 { font-family: "Outfit", sans-serif; font-size: 15px; font-weight: 600; fill: var(--ink); } 38866.gta-root svg.diag .dg-b { font-size: 14px; font-weight: 600; fill: var(--ink); } 38867.gta-root svg.diag .dg-s { font-size: 12.5px; fill: var(--soft); } 38868.gta-root svg.diag .dg-k { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; letter-spacing: .14em; fill: var(--amber-ink); } 38869.gta-root svg.diag .ped { fill: #FAFAFA; stroke: #CFCFCF; stroke-width: 1.2; } 38870.gta-root svg.diag .ent, .gta-root svg.diag .col-cap { fill: #EFEFEF; stroke: #CFCFCF; } 38871.gta-root svg.diag .col-sh { fill: #FAFAFA; stroke: #CFCFCF; } 38872.gta-root svg.diag .flute { stroke: #E6E6E6; } 38873.gta-root svg.diag .lbl-bg { fill: #FFFFFF; stroke: #E4E4E4; } 38874.gta-root svg.diag .pil * { transition: fill .13s ease, stroke .13s ease; } 38875.gta-root svg.diag .pil:hover .col-sh, .gta-root svg.diag .pil:focus-visible .col-sh { fill: var(--tint); stroke: var(--amber); } 38876.gta-root svg.diag .pil:hover .lbl-bg, .gta-root svg.diag .pil:focus-visible .lbl-bg { fill: var(--amber); stroke: var(--amber); } 38877.gta-root svg.diag .pil:hover .dg-h, .gta-root svg.diag .pil:focus-visible .dg-h { fill: #fff; } 38878.gta-root svg.diag .pil { cursor: pointer; outline: none; } 38879.gta-root svg.diag .bx { fill: #FFFFFF; stroke: #CFCFCF; stroke-width: 1.2; } 38880.gta-root svg.diag .bxa { fill: var(--tint); stroke: var(--amber); stroke-width: 1.4; } 38881.gta-root svg.diag .bxh { fill: #F6F6F6; stroke: #CFCFCF; stroke-width: 1.2; stroke-dasharray: 4 3; } 38882.gta-root svg.diag .bxl { fill: #FFFFFF; stroke: var(--amber); stroke-width: 1.4; stroke-dasharray: 5 3; } 38883.gta-root svg.diag .ar { fill: none; stroke: #9A9A9A; stroke-width: 1.3; } 38884.gta-root svg.diag .ar.dash { stroke-dasharray: 4 3; } 38885.gta-root svg.diag .ara { fill: none; stroke: var(--amber); stroke-width: 1.6; } 38886.gta-root svg.diag .ahd { fill: #9A9A9A; } 38887.gta-root svg.diag .aha { fill: var(--amber); }
38888.gta-root svg.diag .nd rect, .gta-root svg.diag .nd polygon { transition: fill .13s ease, stroke .13s ease; } 38889.gta-root svg.diag .nd:hover .bx { fill: var(--tint); stroke: var(--amber); } 38890.gta-root svg.diag .nd:hover .bxa { fill: #FBEBCF; } 38891.gta-root svg.diag .nd:hover .bxh, .gta-root svg.diag .nd:hover .bxl { fill: var(--tint); } 38892 38893/* ââ SVG maps ââ */ 38894.gta-root figure.mapfig { border: 1px solid var(--rule); padding: 0; background: #fff; } 38895.gta-root figure.mapfig figcaption { padding: 0 16px 14px; } 38896.gta-root svg.map { display: block; width: 100%; height: auto; } 38897.gta-root svg.map .m-land { fill: #FFFFFF; } 38898.gta-root svg.map .m-water { fill: #EEF2F5; } 38899.gta-root svg.map .m-street { fill: none; stroke: #E3E3E3; stroke-width: .7; } 38900.gta-root svg.map .m-bound { fill: none; stroke: #555; stroke-width: 1.1; stroke-dasharray: 5 3; } 38901.gta-root svg.map .lu { transition: opacity .15s ease; } 38902.gta-root svg.map .lu-com { fill: #F4D29A; } 38903.gta-root svg.map .lu-ins { fill: #C9D3DE; } 38904.gta-root svg.map .lu-park { fill: #D6E6D3; } 38905.gta-root svg.map.focus-com .lu:not(.lu-com), 38906.gta-root svg.map.focus-ins .lu:not(.lu-ins), 38907.gta-root svg.map.focus-park .lu:not(.lu-park) { opacity: .18; } 38908.gta-root svg.map .pl { cursor: default; outline: none; } 38909.gta-root svg.map .pl-hit { fill: transparent; } 38910.gta-root svg.map .pl-dot { fill: var(--ink); stroke: #fff; stroke-width: 1.5; transition: r .12s ease, fill .12s ease; } 38911.gta-root svg.map .pl-t { 38912 font-family: "Source Sans 3", sans-serif; font-size: 12px; font-weight: 600; fill: var(--ink); 38913 paint-order: stroke; stroke: #fff; stroke-width: 3.5px; stroke-linejoin: round; 38914} 38915.gta-root svg.map .pl:hover .pl-dot, .gta-root svg.map .pl:focus-visible .pl-dot { fill: var(--amber-ink); r: 6.5; } 38916.gta-root svg.map .scale line { stroke: var(--ink); stroke-width: 1.4; } 38917.gta-root svg.map .scale text { font-family: "IBM Plex Mono", monospace; font-size: 10px; fill: var(--soft); } 38918.gta-root svg.map .sh { transition: opacity .2s ease; } 38919.gta-root svg.map .sh-before { fill: #9DB8CC; opacity: .55; } 38920.gta-root svg.map .sh-pilot { fill: #F2BE6A; opacity: .55; } 38921.gta-root svg.map .sh-gained { fill: #1E6F63; opacity: .9; } 38922.gta-root svg.map .sh-lost { fill: #C2570F; opacity: .9; } 38923.gta-root svg.map .rt { fill: none; stroke: var(--c); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; transition: opacity .2s ease, stroke-width .12s ease; } 38924.gta-root svg.map .rt:hover { stroke-width: 4; } 38925.gta-root svg.map [data-off="1"] { opacity: 0; pointer-events: none; } 38926 38927/* ââ map toolbar ââ */ 38928.gta-root .mapbar { display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; padding: 14px 16px; border-bottom: 1px solid var(--hair); } 38929.gta-root .mapbar .grp { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; } 38930.gta-root .mapbar .glab { font-family: "IBM Plex Mono", monospace; font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint); margin-right: 4px; } 38931.gta-root .chip { font: 600 13px/1 "Source Sans 3", sans-serif; padding: 7px 11px; border: 1px solid #D6D6D6; border-radius: 999px; background: #fff; color: var(--soft); cursor: pointer; display: inline-flex; align-items: center; gap: 7px; } 38932.gta-root .chip:hover { border-color: var(--amber); color: var(--ink); } 38933.gta-root .chip[aria-pressed="true"] { background: var(--ink); border-color: var(--ink); color: #fff; } 38934.gta-root .chip .sw { width: 14px; height: 3px; border-radius: 2px; background: var(--c); } 38935.gta-root .chip .sw.dash { background: repeating-linear-gradient(90deg, var(--c) 0 5px, transparent 5px 8px); } 38936.gta-root .chip .sq { width: 11px; height: 11px; border-radius: 2px; background: var(--c); } 38937.gta-root .mapstat { padding: 10px 16px 0; font-size: 14px; color: var(--soft); min-height: 32px; } 38938.gta-root .mapstat b { color: var(--ink); } 38939.gta-root .legend-row { display: flex; flex-wrap: wrap; gap: 6px; padding: 14px 16px; border-bottom: 1px solid var(--hair); } 38940 38941/* ââ tooltip (position: fixed â not scoped to .gta-root) ââ */ 38942#tip { 38943 position: fixed; z-index: 9999; pointer-events: none; 38944 background: #fff; border: 1px solid #E4E4E4; 38945 box-shadow: 0 6px 20px rgba(0,0,0,.08); border-radius: 6px; 38946 padding: 8px 11px; max-width: 260px; opacity: 0; transition: opacity .1s ease; 38947} 38948#tip.on { opacity: 1; }
38949#tip .tv { font-family: "Outfit", sans-serif; font-weight: 700; font-size: 16px; color: #111111; line-height: 1.2; } 38950#tip .tk { font-size: 13px; color: #6B6B6B; line-height: 1.4; margin-top: 2px; } 38951 38952/* ââ TransitLab callout ââ */ 38953.gta-root .callout { box-sizing: border-box; max-width: 680px; margin: 40px 0 0; padding: 0; background: #fff; border: none; } 38954.gta-root .callout .label { font-family: "IBM Plex Mono", monospace; font-weight: 600; font-size: 11px; line-height: 1.6; letter-spacing: .14em; text-transform: uppercase; color: var(--amber-ink); margin: 0 0 10px; } 38955.gta-root .callout h3 { font-family: "Outfit", sans-serif; font-weight: 600; font-size: 22px; line-height: 1.27; letter-spacing: -.015em; color: var(--ink); margin: 0 0 14px; } 38956.gta-root .callout p:last-child { margin-bottom: 0; } 38957 38958/* ââ references ââ */ 38959.gta-root .refs { margin: 52px 0 0; max-width: 680px; } 38960.gta-root .refs ol { margin: 0; padding-left: 20px; } 38961.gta-root .refs li { font-size: 14.5px; line-height: 1.6; color: var(--soft); margin-bottom: 8px; } 38962.gta-root sup.fn a { text-decoration: none; font-size: .72em; font-weight: 600; padding: 0 1px; } 38963.gta-root .note p.label { font-size: 11.5px; line-height: 1.4; } 38964`; 38965function hy() { 38966 const t = H(null); 38967 return q(() => { 38968 const e = "Go! Time: two years of on-demand transit in Maryland's capital", s = "Two years in, Annapolisâs Go! Time on-demand transit carries 31% more riders than the routes it replaced, at 8% lower cost per passenger trip.", r = `${window.location.origin}${gy}`, n = document.title, o = document.documentElement.lang; 38969 document.title = e, document.documentElement.lang = "en"; 38970 const L = [], d = []; 38971 function l(f, p, M, u) { 38972 let h = document.head.querySelector(f); 38973 h ? (d.push({ el: h, val: h.getAttribute("content") ?? "" }), h.setAttribute("content", u)) : (h = document.createElement("meta"), h.setAttribute(p, M), h.setAttribute("content", u), document.head.appendChild(h), L.push(h)); 38974 } 38975 l('meta[name="description"]', "name", "description", s), l('meta[property="og:type"]', "property", "og:type", "article"), l('meta[property="og:title"]', "property", "og:title", e), l('meta[property="og:description"]', "property", "og:description", s), l('meta[property="og:image"]', "property", "og:image", r), l('meta[property="og:url"]', "property", "og:url", window.location.href), l('meta[name="twitter:card"]', "name", "twitter:card", "summary_large_image"), l('meta[name="twitter:title"]', "name", "twitter:title", e), l('meta[name="twitter:description"]', "name", "twitter:description", s), l('meta[name="twitter:image"]', "name", "twitter:image", r); 38976 const g = document.head.querySelector('meta[name="robots"]'); 38977 if (g) { 38978 const f = g.getAttribute("content") ?? "", p = f.replace(/noindex,?\s*/gi, "").trim() || "index, follow"; 38979 d.push({ el: g, val: f }), g.setAttribute("content", p); 38980 } 38981 return () => { 38982 document.title = n, document.documentElement.lang = o, L.forEach((f) => f.parentNode?.removeChild(f)), d.forEach(({ el: f, val: p }) => f.setAttribute("content", p)); 38983 }; 38984 }, []), q(() => { 38985 const e = t.current; 38986 if (!e) return; 38987 const s = document.getElementById("tip"); 38988 if (!s) return; 38989 const r = s.querySelector(".tv"), n = s.querySelector(".tk"); 38990 function o(w, P) { 38991 const z = s.getBoundingClientRect(); 38992 let V = w + 14, Se = P + 14; 38993 V + z.width > window.innerWidth - 8 && (V = w - z.width - 14), Se + z.height > window.innerHeight - 8 && (Se = P - z.height - 14), s.style.left = V + "px", s.style.top = Se + "px"; 38994 } 38995 function L(w, P, z) { 38996 r.textContent = w.getAttribute("data-v") || "", n.textContent = w.getAttribute("data-k") || "", s.classList.add("on"), o(P, z); 38997 } 38998 function d() { 38999 s.classList.remove("on"); 39000 } 39001 const l = Array.from(e.querySelectorAll("[data-v]")), g = []; 39002 l.forEach((w) => { 39003 const P = (Ie) => { 39004 const le = Ie; 39005 L(w, le.clientX, le.clientY); 39006 }, z = (Ie) => { 39007 const le = Ie; 39008 o(le.clientX, le.clientY); 39009 }, V = () => d(), Se = () => { 39010 const Ie = w.getBoundingClientRect(); 39011 L(w, Ie.right, Ie.top); 39012 }; 39013 w.addEventListener("pointerenter", P), w.addEventListener("pointermove", z), w.addEventListener("pointerleave", V), w.addEventListener("focus", Se), w.addEventListener("blur", V), g.push(() => { 39014 w.removeEventListener("pointerenter", P), w.removeEventListener("pointermove", z), w.removeEventListener("pointerleave", V), w.removeEventListener("focus", Se), w.removeEventListener("blur", V); 39015 }); 39016 });
39017 const f = e.querySelector("#citymap"), p = Array.from(e.querySelectorAll("[data-focus]")), M = []; 39018 p.forEach((w) => { 39019 const P = "focus-" + w.getAttribute("data-focus"), z = () => { 39020 f?.classList.add(P), w.setAttribute("aria-pressed", "true"); 39021 }, V = () => { 39022 w.dataset.lock || (f?.classList.remove(P), w.setAttribute("aria-pressed", "false")); 39023 }; 39024 w.setAttribute("aria-pressed", "false"); 39025 const Se = () => { 39026 const Ie = !w.dataset.lock; 39027 e.querySelectorAll("[data-focus]").forEach((le) => { 39028 delete le.dataset.lock, f?.classList.remove("focus-" + le.getAttribute("data-focus")), le.setAttribute("aria-pressed", "false"); 39029 }), Ie && (w.dataset.lock = "1", z()); 39030 }; 39031 w.addEventListener("pointerenter", z), w.addEventListener("pointerleave", V), w.addEventListener("focus", z), w.addEventListener("blur", V), w.addEventListener("click", Se), M.push(() => { 39032 w.removeEventListener("pointerenter", z), w.removeEventListener("pointerleave", V), w.removeEventListener("focus", z), w.removeEventListener("blur", V), w.removeEventListener("click", Se); 39033 }); 39034 }); 39035 const u = e.querySelector("#walkmap"), h = e.querySelector("#walkstat"), x = ["Red", "Green", "Brown", "Orange", "Purple"], _ = ["before", "pilot", "gained", "lost"], v = { 39036 before: { ly: ["before"], rt: x, s: ["Five fixed routes, before July 2024: ", "4.2 sq mi", " within a ten-minute walk of a stop."] }, 39037 pilot: { ly: ["pilot"], rt: ["Red", "Green", "Brown"], s: ["Go! Time's virtual stops plus three citywide routes: ", "5.0 sq mi", " within a ten-minute walk."] }, 39038 diff: { ly: ["before", "gained", "lost"], rt: [], s: ["Blue was already covered; teal is newly within a ten-minute walk. ", "Close to a square mile gained, effectively none lost.", ""] } 39039 }; 39040 function y(w, P) { 39041 u?.querySelector(`[data-ly="${w}"]`)?.setAttribute("data-off", P ? "0" : "1"), e.querySelector(`[data-layer="${w}"]`)?.setAttribute("aria-pressed", P ? "true" : "false"); 39042 } 39043 function b(w, P) { 39044 u?.querySelector(`[data-rt="${w}"]`)?.setAttribute("data-off", P ? "0" : "1"), e.querySelector(`[data-route="${w}"]`)?.setAttribute("aria-pressed", P ? "true" : "false"); 39045 } 39046 function S(w) { 39047 if (!h) return; 39048 h.textContent = "", h.appendChild(document.createTextNode(w[0])); 39049 const P = document.createElement("b"); 39050 P.textContent = w[1], h.appendChild(P), h.appendChild(document.createTextNode(w[2])); 39051 } 39052 function k(w) { 39053 const P = v[w]; 39054 P && (_.forEach((z) => y(z, P.ly.indexOf(z) > -1)), x.forEach((z) => b(z, P.rt.indexOf(z) > -1)), e.querySelectorAll("[data-preset]").forEach((z) => { 39055 z.setAttribute("aria-pressed", z.getAttribute("data-preset") === w ? "true" : "false"); 39056 }), S(P.s)); 39057 } 39058 function A() { 39059 e.querySelectorAll("[data-preset]").forEach((w) => w.setAttribute("aria-pressed", "false")), h && (h.textContent = "Custom view: toggle any layer or route."); 39060 } 39061 const I = []; 39062 return e.querySelectorAll("[data-preset]").forEach((w) => { 39063 const P = () => k(w.getAttribute("data-preset")); 39064 w.addEventListener("click", P), I.push(() => w.removeEventListener("click", P)); 39065 }), e.querySelectorAll("[data-layer]").forEach((w) => { 39066 const P = () => { 39067 y(w.getAttribute("data-layer"), w.getAttribute("aria-pressed") !== "true"), A(); 39068 }; 39069 w.addEventListener("click", P), I.push(() => w.removeEventListener("click", P)); 39070 }), e.querySelectorAll("[data-route]").forEach((w) => { 39071 const P = () => { 39072 b(w.getAttribute("data-route"), w.getAttribute("aria-pressed") !== "true"), A(); 39073 }; 39074 w.addEventListener("click", P), I.push(() => w.removeEventListener("click", P)); 39075 }), k("diff"), () => { 39076 g.forEach((w) => w()), M.forEach((w) => w()), I.forEach((w) => w()), d(); 39077 }; 39078 }
39078, []), /* @__PURE__ */ c(C, { children: [ 39079 /* @__PURE__ */ i("style", { dangerouslySetInnerHTML: { __html: uy }, "data-fg-dr7y2": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:569:7:29742:58:e:style" }), 39080 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dr7y4", _fgB: 1790697589562, className: "bg-slate-50 border-b border-slate-200", "data-fg-dr7y4": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:572:7:29852:407:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dr7y5", _fgB: 1790697589562, className: "max-w-4xl mx-auto px-6 py-4", "data-fg-dr7y5": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:573:9:29916:330:e:div:e", children: /* @__PURE__ */ c( 39081 a, 39082 { 39083 _fgT: E, 39084 _fgS: "dr7y6", 39085 _fgB: 1790697589562, 39086 href: "/news-articles", 39087 className: "inline-flex items-center gap-2 text-slate-600 hover:text-[#0056B3] transition-colors font-medium", 39088 "data-fg-dr7y6": ":0:node_modules/wouter:574:11:29972:259:e:Link:et:::::C4yE", 39089 children: [ 39090 /* @__P
39090URE__ */ i(a, { _fgT: O1, _fgS: "dr7y7", _fgB: 1790697589562, size: 18, "data-fg-dr7y7": ":0:node_modules/lucide-react:578:13:30157:23:e:ArrowLeft::::::EIC8" }), 39091 "Back to All Articles" 39092 ] 39093 } 39094 ) }) }), 39095 /* @__PURE__ */ i( 39096 a, 39097 { 39098 _fgT: "div", 39099 _fgS: "dr7y10", 39100 _fgB: 1790697589562, 39101 ref: t, 39102 className: "gta-root", 39103 dangerouslySetInnerHTML: { __html: My }, 39104 "data-fg-dr7y10": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:585:7:30342:120:e:div" 39105 } 39106 ), 39107 /* @__PURE__ */ i( 39108 a, 39109 { 39110 _fgT: "div", 39111 _fgS: "dr7y12", 39112 _fgB: 1790697589562, 39113 id: "tip", 39114 role: "tooltip", 39115 dangerouslySetInnerHTML: { __html: '<div class="tv"></div><div class="tk"></div>' }, 39116 "data-fg-dr7y12": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:592:7:30549:146:e:div" 39117 } 39118 ), 39119 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dr7y14", _fgB: 1790697589562, className: "bg-slate-50 py-16 px-6 mt-0", "data-fg-dr7y14": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:599:7:30734:725:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dr7y15", _fgB: 1790697589562, className: "max-w-4xl mx-auto text-center", "data-fg-dr7y15": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:600:9:30788:658:e:div:etete", children: [
39120 /* @__PURE__ */ i(a, { _fgT: "h3", _fgS: "dr7y16", _fgB: 1790697589562, className: "font-['DM_Serif_Display'] text-3xl text-slate-900 mb-4", "data-fg-dr7y16": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:601:11:30846:121:e:h3:t", children: "Explore More Articles" }), 39121 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dr7y18", _fgB: 1790697589562, className: "text-slate-600 mb-8", "data-fg-dr7y18": ":0:/src/app/pages/GoTimeAnnapolisArticlePage.tsx:604:11:30978:121:e:p:t", children: "Discover more insights and updates from the IT Curves team" }), 39122 /* @__PURE__ */ c( 39123 a, 39124 { 39125 _fgT: E, 39126 _fgS: "dr7y20", 39127 _fgB: 1790697589562, 39128 href: "/news-articles", 39129 className: "inline-flex items-center gap-2 bg-[#0056B3] text-white px-8 py-4 rounded-full font-semibold hover:bg-[#004494] transition-colors shadow-lg", 39130 "data-fg-dr7y20": ":0:node_modules/wouter:607:11:31110:321:e:Link:te:::::C4yE", 39131 children: [ 39132 "View All Articles", 39133 /* @__P
39133URE__ */ i(a, { _fgT: O1, _fgS: "dr7y22", _fgB: 1790697589562, size: 18, className: "rotate-180", "data-fg-dr7y22": ":0:node_modules/lucide-react:612:13:31367:46:e:ArrowLeft::::::EIC8" }) 39134 ] 39135 } 39136 ) 39137 ] }) }) 39138 ] }); 39139} 39140const A1 = globalThis.__GLOBALS__.getAssetURL("37b7d8714c548c7f70ac4818a330f4a7a4c9544e.png"), my = globalThis.__GLOBALS__.getAssetURL("cdd238b91b6ad77952a7a75e86122f7e1101a04f.png"), xy = globalThis.__GLOBALS__.getAssetURL("775b1ce9283213913e5ac204e9429ec0dc0a1847.png"), _y = globalThis.__GLOBALS__.getAssetURL("5af2e776bc75976507df2edface9de64e170a5dd.png"); 39141var by = Object.defineProperty, x3 = Object.getOwnPropertySymbols, Hi = Object.prototype.hasOwnProperty, Zi = Object.prototype.propertyIsEnumerable, j6 = (t, e, s) => e in t ? by(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s, o5 = (t, e) => { 39142 for (var s in e || (e = {})) 39143 Hi.call(e, s) && j6(t, s, e[s]); 39144 if (x3) 39145 for (var s of x3(e)) 39146 Zi.call(e, s) && j6(t, s, e[s]); 39147 return t; 39148}, L5 = (t, e) => { 39149 var s = {}; 39150 for (var r in t) 39151 Hi.call(t, r) && e.indexOf(r) < 0 && (s[r] = t[r]); 39152 if (t != null && x3) 39153 for (var r of x3(t)) 39154 e.indexOf(r) < 0 && Zi.call(t, r) && (s[r] = t[r]); 39155 return s; 39156}; 39157/** 39158 * @license QR Code generator library (TypeScript) 39159 * Copyright (c) Project Nayuki. 39160 * SPDX-License-Identifier: MIT 39161 */ 39162var G1; 39163((t) => { 39164 const e = class O { 39165 /*-- Constructor (low level) and fields --*/ 39166 // Creates a new QR Code with the given version number, 39167 // error correction level, data codeword bytes, and mask number. 39168 // This is a low-level API that most users should not use directly. 39169 // A mid-level API is the encodeSegments() function. 39170 constructor(l, g, f, p) { 39171 if (this.version = l, this.errorCorrectionLevel = g, this.modules = [], this.isFunction = [], l < O.MIN_VERSION || l > O.MAX_VERSION) 39172 throw new RangeError("Version value out of range"); 39173 if (p < -1 || p > 7) 39174 throw new RangeError("Mask value out of range"); 39175 this.size = l * 4 + 17; 39176 let M = []; 39177 for (let h = 0; h < this.size; h++) 39178 M.push(!1); 39179 for (let h = 0; h < this.size; h++) 39180 this.modules.push(M.slice()), this.isFunction.push(M.slice()); 39181 this.drawFunctionPatterns(); 39182 const u = this.addEccAndInterleave(f); 39183 if (this.drawCodewords(u), p == -1) { 39184 let h = 1e9; 39185 for (let x = 0; x < 8; x++) { 39186 this.applyMask(x), this.drawFormatBits(x); 39187 const _ = this.getPenaltyScore(); 39188 _ < h && (p = x, h = _), this.applyMask(x); 39189 } 39190 } 39191 n(0 <= p && p <= 7), this.mask = p, this.applyMask(p), this.drawFormatBits(p), this.isFunction = []; 39192 } 39193 /*-- Static factory functions (high level) --*/ 39194 // Returns a QR Code representing the given Unicode text string at the given error correction level. 39195 // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer 39196 // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible 39197 // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the 39198 // ecl argument if it can be done without increasing the version. 39199 static encodeText(l, g) { 39200 const f = t.QrSegment.makeSegments(l); 39201 return O.encodeSegments(f, g); 39202 }
39203 // Returns a QR Code representing the given binary data at the given error correction level. 39204 // This function always encodes using the binary segment mode, not any text mode. The maximum number of 39205 // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output. 39206 // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version. 39207 static encodeBinary(l, g) { 39208 const f = t.QrSegment.makeBytes(l); 39209 return O.encodeSegments([f], g); 39210 } 39211 /*-- Static factory functions (mid level) --*/ 39212 // Returns a QR Code representing the given segments with the given encoding parameters. 39213 // The smallest possible QR Code version within the given range is automatically 39214 // chosen for the output. Iff boostEcl is true, then the ECC level of the result 39215 // may be higher than the ecl argument if it can be done without increasing the 39216 // version. The mask number is either between 0 to 7 (inclusive) to force that 39217 // mask, or -1 to automatically choose an appropriate mask (which may be slow). 39218 // This function allows the user to create a custom sequence of segments that switches 39219 // between modes (such as alphanumeric and byte) to encode text in less space. 39220 // This is a mid-level API; the high-level API is encodeText() and encodeBinary(). 39221 static encodeSegments(l, g, f = 1, p = 40, M = -1, u = !0) { 39222 if (!(O.MIN_VERSION <= f && f <= p && p <= O.MAX_VERSION) || M < -1 || M > 7) 39223 throw new RangeError("Invalid value"); 39224 let h, x; 39225 for (h = f; ; h++) { 39226 const b = O.getNumDataCodewords(h, g) * 8, S = L.getTotalBits(l, h); 39227 if (S <= b) { 39228 x = S; 39229 break; 39230 } 39231 if (h >= p) 39232 throw new RangeError("Data too long"); 39233 } 39234 for (const b of [O.Ecc.MEDIUM, O.Ecc.QUARTILE, O.Ecc.HIGH]) 39235 u && x <= O.getNumDataCodewords(h, b) * 8 && (g = b); 39236 let _ = []; 39237 for (const b of l) { 39238 s(b.mode.modeBits, 4, _), s(b.numChars, b.mode.numCharCountBits(h), _); 39239 for (const S of b.getData()) 39240 _.push(S); 39241 } 39242 n(_.length == x); 39243 const v = O.getNumDataCodewords(h, g) * 8; 39244 n(_.length <= v), s(0, Math.min(4, v - _.length), _), s(0, (8 - _.length % 8) % 8, _), n(_.length % 8 == 0); 39245 for (let b = 236; _.length < v; b ^= 253) 39246 s(b, 8, _); 39247 let y = []; 39248 for (; y.length * 8 < _.length; ) 39249 y.push(0); 39250 return _.forEach((b, S) => y[S >>> 3] |= b << 7 - (S & 7)), new O(h, g, y, M); 39251 } 39252 /*-- Accessor methods --*/ 39253 // Returns the color of the module (pixel) at the given coordinates, which is false 39254 // for light or true for dark. The top left corner has the coordinates (x=0, y=0). 39255 // If the given coordinates are out of bounds, then false (light) is returned. 39256 getModule(l, g) { 39257 return 0 <= l && l < this.size && 0 <= g && g < this.size && this.modules[g][l]; 39258 } 39259 // Modified to expose modules for easy access 39260 getModules() { 39261 return this.modules; 39262 } 39263 /*-- Private helper methods for constructor: Drawing function modules --*/ 39264 // Reads this object's version field, and draws and marks all function modules. 39265 drawFunctionPatterns() { 39266 for (let f = 0; f < this.size; f++) 39267 this.setFunctionModule(6, f, f % 2 == 0), this.setFunctionModule(f, 6, f % 2 == 0); 39268 this.drawFinderPattern(3, 3), this.drawFinderPattern(this.size - 4, 3), this.drawFinderPattern(3, this.size - 4); 39269 const l = this.getAlignmentPatternPositions(), g = l.length; 39270 for (let f = 0; f < g; f++) 39271 for (let p = 0; p < g; p++) 39272 f == 0 && p == 0 || f == 0 && p == g - 1 || f == g - 1 && p == 0 || this.drawAlignmentPattern(l[f], l[p]); 39273 this.drawFormatBits(0), this.drawVersion(); 39274 } 39275 // Draws two copies of the format bits (with its own error correction code) 39276 // based on the given mask and this object's error correction level field. 39277 drawFormatBits(l) { 39278 const g = this.errorCorrectionLevel.formatBits << 3 | l; 39279 let f = g; 39280 for (let M = 0; M < 10; M++) 39281 f = f << 1 ^ (f >>> 9) * 1335; 39282 const p = (g << 10 | f) ^ 21522; 39283 n(p >>> 15 == 0); 39284 for (let M = 0; M <= 5; M++) 39285 this.setFunctionModule(8, M, r(p, M)); 39286 this.setFunctionModule(8, 7, r(p, 6)), this.setFunctionModule(8, 8, r(p, 7)), this.setFunctionModule(7, 8, r(p, 8)); 39287 for (let M = 9; M < 15; M++) 39288 this.setFunctionModule(14 - M, 8, r(p, M)); 39289 for (let M = 0; M < 8; M++) 39290 this.setFunctionModule(this.size - 1 - M, 8, r(p, M)); 39291 for (let M = 8; M < 15; M++) 39292 this.setFunctionModule(8, this.size - 15 + M, r(p, M)); 39293 this.setFunctionModule(8, this.size - 8, !0); 39294 } 39295 // Draws two copies of the version bits (with its own error correction code),
vendor: 18,872 bytes, lines 39296-39689
39296 // based on this object's version field, iff 7 <= version <= 40. 39297 drawVersion() { 39298 if (this.version < 7) 39299 return; 39300 let l = this.version; 39301 for (let f = 0; f < 12; f++) 39302 l = l << 1 ^ (l >>> 11) * 7973; 39303 const g = this.version << 12 | l; 39304 n(g >>> 18 == 0); 39305 for (let f = 0; f < 18; f++) { 39306 const p = r(g, f), M = this.size - 11 + f % 3, u = Math.floor(f / 3); 39307 this.setFunctionModule(M, u, p), this.setFunctionModule(u, M, p); 39308 } 39309 } 39310 // Draws a 9*9 finder pattern including the border separator, 39311 // with the center module at (x, y). Modules can be out of bounds. 39312 drawFinderPattern(l, g) { 39313 for (let f = -4; f <= 4; f++) 39314 for (let p = -4; p <= 4; p++) { 39315 const M = Math.max(Math.abs(p), Math.abs(f)), u = l + p, h = g + f; 39316 0 <= u && u < this.size && 0 <= h && h < this.size && this.setFunctionModule(u, h, M != 2 && M != 4); 39317 } 39318 } 39319 // Draws a 5*5 alignment pattern, with the center module 39320 // at (x, y). All modules must be in bounds. 39321 drawAlignmentPattern(l, g) { 39322 for (let f = -2; f <= 2; f++) 39323 for (let p = -2; p <= 2; p++) 39324 this.setFunctionModule(l + p, g + f, Math.max(Math.abs(p), Math.abs(f)) != 1); 39325 } 39326 // Sets the color of a module and marks it as a function module. 39327 // Only used by the constructor. Coordinates must be in bounds. 39328 setFunctionModule(l, g, f) { 39329 this.modules[g][l] = f, this.isFunction[g][l] = !0; 39330 } 39331 /*-- Private helper methods for constructor: Codewords and masking --*/ 39332 // Returns a new byte string representing the given data with the appropriate error correction 39333 // codewords appended to it, based on this object's version and error correction level. 39334 addEccAndInterleave(l) { 39335 const g = this.version, f = this.errorCorrectionLevel; 39336 if (l.length != O.getNumDataCodewords(g, f)) 39337 throw new RangeError("Invalid argument"); 39338 const p = O.NUM_ERROR_CORRECTION_BLOCKS[f.ordinal][g], M = O.ECC_CODEWORDS_PER_BLOCK[f.ordinal][g], u = Math.floor(O.getNumRawDataModules(g) / 8), h = p - u % p, x = Math.floor(u / p); 39339 let _ = []; 39340 const v = O.reedSolomonComputeDivisor(M); 39341 for (let b = 0, S = 0; b < p; b++) { 39342 let k = l.slice(S, S + x - M + (b < h ? 0 : 1)); 39343 S += k.length; 39344 const A = O.reedSolomonComputeRemainder(k, v); 39345 b < h && k.push(0), _.push(k.concat(A)); 39346 } 39347 let y = []; 39348 for (let b = 0; b < _[0].length; b++) 39349 _.forEach((S, k) => { 39350 (b != x - M || k >= h) && y.push(S[b]); 39351 }); 39352 return n(y.length == u), y; 39353 } 39354 // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire 39355 // data area of this QR Code. Function modules need to be marked off before this is called. 39356 drawCodewords(l) { 39357 if (l.length != Math.floor(O.getNumRawDataModules(this.version) / 8)) 39358 throw new RangeError("Invalid argument"); 39359 let g = 0; 39360 for (let f = this.size - 1; f >= 1; f -= 2) { 39361 f == 6 && (f = 5); 39362 for (let p = 0; p < this.size; p++) 39363 for (let M = 0; M < 2; M++) { 39364 const u = f - M, x = (f + 1 & 2) == 0 ? this.size - 1 - p : p; 39365 !this.isFunction[x][u] && g < l.length * 8 && (this.modules[x][u] = r(l[g >>> 3], 7 - (g & 7)), g++); 39366 } 39367 } 39368 n(g == l.length * 8); 39369 } 39370 // XORs the codeword modules in this QR Code with the given mask pattern. 39371 // The function modules must be marked and the codeword bits must be drawn 39372 // before masking. Due to the arithmetic of XOR, calling applyMask() with 39373 // the same mask value a second time will undo the mask. A final well-formed 39374 // QR Code needs exactly one (not zero, two, etc.) mask applied. 39375 applyMask(l) { 39376 if (l < 0 || l > 7) 39377 throw new RangeError("Mask value out of range"); 39378 for (let g = 0; g < this.size; g++) 39379 for (let f = 0; f < this.size; f++) { 39380 let p; 39381 switch (l) { 39382 case 0: 39383 p = (f + g) % 2 == 0; 39384 break; 39385 case 1: 39386 p = g % 2 == 0; 39387 break; 39388 case 2: 39389 p = f % 3 == 0; 39390 break; 39391 case 3: 39392 p = (f + g) % 3 == 0; 39393 break; 39394 case 4: 39395 p = (Math.floor(f / 3) + Math.floor(g / 2)) % 2 == 0; 39396 break; 39397 case 5: 39398 p = f * g % 2 + f * g % 3 == 0; 39399 break; 39400 case 6: 39401 p = (f * g % 2 + f * g % 3) % 2 == 0; 39402 break; 39403 case 7: 39404 p = ((f + g) % 2 + f * g % 3) % 2 == 0; 39405 break; 39406 default: 39407 throw new Error("Unreachable"); 39408 } 39409 !this.isFunction[g][f] && p && (this.modules[g][f] = !this.modules[g][f]); 39410 } 39411 } 39412 // Calculates and returns the penalty score based on state of this QR Code's current modules. 39413 // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score. 39414 getPenaltyScore() { 39415 let l = 0; 39416 for (let M = 0; M < this.size; M++) { 39417 let u = !1, h = 0, x = [0, 0, 0, 0, 0, 0, 0]; 39418 for (let _ = 0; _ < this.size; _++) 39419 this.modules[M][_] == u ? (h++, h == 5 ? l += O.PENALTY_N1 : h > 5 && l++) : (this.finderPenaltyAddHistory(h, x), u || (l += this.finderPenaltyCountPatterns(x) * O.PENALTY_N3), u = this.modules[M][_], h = 1); 39420 l += this.finderPenaltyTerminateAndCount(u, h, x) * O.PENALTY_N3; 39421 } 39422 for (let M = 0; M < this.size; M++) { 39423 let u = !1, h = 0, x = [0, 0, 0, 0, 0, 0, 0]; 39424 for (let _ = 0; _ < this.size; _++) 39425 this.modules[_][M] == u ? (h++, h == 5 ? l += O.PENALTY_N1 : h > 5 && l++) : (this.finderPenaltyAddHistory(h, x), u || (l += this.finderPenaltyCountPatterns(x) * O.PENALTY_N3), u = this.modules[_][M], h = 1); 39426 l += this.finderPenaltyTerminateAndCount(u, h, x) * O.PENALTY_N3; 39427 } 39428 for (let M = 0; M < this.size - 1; M++) 39429 for (let u = 0; u < this.size - 1; u++) { 39430 const h = this.modules[M][u]; 39431 h == this.modules[M][u + 1] && h == this.modules[M + 1][u] && h == this.modules[M + 1][u + 1] && (l += O.PENALTY_N2); 39432 } 39433 let g = 0; 39434 for (const M of this.modules) 39435 g = M.reduce((u, h) => u + (h ? 1 : 0), g); 39436 const f = this.size * this.size, p = Math.ceil(Math.abs(g * 20 - f * 10) / f) - 1; 39437 return n(0 <= p && p <= 9), l += p * O.PENALTY_N4, n(0 <= l && l <= 2568888), l; 39438 } 39439 /*-- Private helper functions --*/ 39440 // Returns an ascending list of positions of alignment patterns for this version number. 39441 // Each position is in the range [0,177), and are used on both the x and y axes. 39442 // This could be implemented as lookup table of 40 variable-length lists of integers. 39443 getAlignmentPatternPositions() { 39444 if (this.version == 1) 39445 return []; 39446 { 39447 const l = Math.floor(this.version / 7) + 2, g = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (l * 2 - 2)) * 2; 39448 let f = [6]; 39449 for (let p = this.size - 7; f.length < l; p -= g) 39450 f.splice(1, 0, p); 39451 return f; 39452 } 39453 } 39454 // Returns the number of data bits that can be stored in a QR Code of the given version number, after 39455 // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8. 39456 // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table. 39457 static getNumRawDataModules(l) { 39458 if (l < O.MIN_VERSION || l > O.MAX_VERSION) 39459 throw new RangeError("Version number out of range"); 39460 let g = (16 * l + 128) * l + 64; 39461 if (l >= 2) { 39462 const f = Math.floor(l / 7) + 2; 39463 g -= (25 * f - 10) * f - 55, l >= 7 && (g -= 36); 39464 } 39465 return n(208 <= g && g <= 29648), g; 39466 } 39467 // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any 39468 // QR Code of the given version number and error correction level, with remainder bits discarded. 39469 // This stateless pure function could be implemented as a (40*4)-cell lookup table. 39470 static getNumDataCodewords(l, g) { 39471 return Math.floor(O.getNumRawDataModules(l) / 8) - O.ECC_CODEWORDS_PER_BLOCK[g.ordinal][l] * O.NUM_ERROR_CORRECTION_BLOCKS[g.ordinal][l]; 39472 } 39473 // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be 39474 // implemented as a lookup table over all possible parameter values, instead of as an algorithm. 39475 static reedSolomonComputeDivisor(l) { 39476 if (l < 1 || l > 255) 39477 throw new RangeError("Degree out of range"); 39478 let g = []; 39479 for (let p = 0; p < l - 1; p++) 39480 g.push(0); 39481 g.push(1); 39482 let f = 1; 39483 for (let p = 0; p < l; p++) { 39484 for (let M = 0; M < g.length; M++) 39485 g[M] = O.reedSolomonMultiply(g[M], f), M + 1 < g.length && (g[M] ^= g[M + 1]); 39486 f = O.reedSolomonMultiply(f, 2); 39487 } 39488 return g; 39489 } 39490 // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials. 39491 static reedSolomonComputeRemainder(l, g) { 39492 let f = g.map((p) => 0); 39493 for (const p of l) { 39494 const M = p ^ f.shift(); 39495 f.push(0), g.forEach((u, h) => f[h] ^= O.reedSolomonMultiply(u, M)); 39496 } 39497 return f; 39498 } 39499 // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result 39500 // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8. 39501 static reedSolomonMultiply(l, g) { 39502 if (l >>> 8 || g >>> 8) 39503 throw new RangeError("Byte out of range"); 39504 let f = 0; 39505 for (let p = 7; p >= 0; p--) 39506 f = f << 1 ^ (f >>> 7) * 285, f ^= (g >>> p & 1) * l; 39507 return n(f >>> 8 == 0), f; 39508 } 39509 // Can only be called immediately after a light run is added, and 39510 // returns either 0, 1, or 2. A helper function for getPenaltyScore(). 39511 finderPenaltyCountPatterns(l) { 39512 const g = l[1]; 39513 n(g <= this.size * 3); 39514 const f = g > 0 && l[2] == g && l[3] == g * 3 && l[4] == g && l[5] == g; 39515 return (f && l[0] >= g * 4 && l[6] >= g ? 1 : 0) + (f && l[6] >= g * 4 && l[0] >= g ? 1 : 0); 39516 } 39517 // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore(). 39518 finderPenaltyTerminateAndCount(l, g, f) { 39519 return l && (this.finderPenaltyAddHistory(g, f), g = 0), g += this.size, this.finderPenaltyAddHistory(g, f), this.finderPenaltyCountPatterns(f); 39520 } 39521 // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore(). 39522 finderPenaltyAddHistory(l, g) { 39523 g[0] == 0 && (l += this.size), g.pop(), g.unshift(l); 39524 } 39525 }; 39526 e.MIN_VERSION = 1, e.MAX_VERSION = 40, e.PENALTY_N1 = 3, e.PENALTY_N2 = 3, e.PENALTY_N3 = 40, e.PENALTY_N4 = 10, e.ECC_CODEWORDS_PER_BLOCK = [ 39527 // Version: (note that index 0 is for padding, and is set to an illegal value) 39528 //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level 39529 [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], 39530 // Low 39531 [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28], 39532 // Medium 39533 [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], 39534 // Quartile 39535 [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30] 39536 // High 39537 ], e.NUM_ERROR_CORRECTION_BLOCKS = [ 39538 // Version: (note that index 0 is for padding, and is set to an illegal value) 39539 //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level 39540 [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25], 39541 // Low 39542 [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49], 39543 // Medium 39544 [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68], 39545 // Quartile 39546 [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81] 39547 // High 39548 ], t.QrCode = e; 39549 function s(d, l, g) { 39550 if (l < 0 || l > 31 || d >>> l) 39551 throw new RangeError("Value out of range"); 39552 for (let f = l - 1; f >= 0; f--) 39553 g.push(d >>> f & 1); 39554 } 39555 function r(d, l) { 39556 return (d >>> l & 1) != 0; 39557 } 39558 function n(d) { 39559 if (!d) 39560 throw new Error("Assertion error"); 39561 } 39562 const o = class ie { 39563 /*-- Constructor (low level) and fields --*/ 39564 // Creates a new QR Code segment with the given attributes and data. 39565 // The character count (numChars) must agree with the mode and the bit buffer length, 39566 // but the constraint isn't checked. The given bit buffer is cloned and stored. 39567 constructor(l, g, f) { 39568 if (this.mode = l, this.numChars = g, this.bitData = f, g < 0) 39569 throw new RangeError("Invalid argument"); 39570 this.bitData = f.slice(); 39571 } 39572 /*-- Static factory functions (mid level) --*/ 39573 // Returns a segment representing the given binary data encoded in 39574 // byte mode. All input byte arrays are acceptable. Any text string 39575 // can be converted to UTF-8 bytes and encoded as a byte mode segment. 39576 static makeBytes(l) { 39577 let g = []; 39578 for (const f of l) 39579 s(f, 8, g); 39580 return new ie(ie.Mode.BYTE, l.length, g); 39581 } 39582 // Returns a segment representing the given string of decimal digits encoded in numeric mode. 39583 static makeNumeric(l) { 39584 if (!ie.isNumeric(l)) 39585 throw new RangeError("String contains non-numeric characters"); 39586 let g = []; 39587 for (let f = 0; f < l.length; ) { 39588 const p = Math.min(l.length - f, 3); 39589 s(parseInt(l.substring(f, f + p), 10), p * 3 + 1, g), f += p; 39590 } 39591 return new ie(ie.Mode.NUMERIC, l.length, g); 39592 } 39593 // Returns a segment representing the given text string encoded in alphanumeric mode. 39594 // The characters allowed are: 0 to 9, A to Z (uppercase only), space, 39595 // dollar, percent, asterisk, plus, hyphen, period, slash, colon. 39596 static makeAlphanumeric(l) { 39597 if (!ie.isAlphanumeric(l)) 39598 throw new RangeError("String contains unencodable characters in alphanumeric mode"); 39599 let g = [], f; 39600 for (f = 0; f + 2 <= l.length; f += 2) { 39601 let p = ie.ALPHANUMERIC_CHARSET.indexOf(l.charAt(f)) * 45; 39602 p += ie.ALPHANUMERIC_CHARSET.indexOf(l.charAt(f + 1)), s(p, 11, g); 39603 } 39604 return f < l.length && s(ie.ALPHANUMERIC_CHARSET.indexOf(l.charAt(f)), 6, g), new ie(ie.Mode.ALPHANUMERIC, l.length, g); 39605 } 39606 // Returns a new mutable list of zero or more segments to represent the given Unicode text string. 39607 // The result may use various segment modes and switch modes to optimize the length of the bit stream. 39608 static makeSegments(l) { 39609 return l == "" ? [] : ie.isNumeric(l) ? [ie.makeNumeric(l)] : ie.isAlphanumeric(l) ? [ie.makeAlphanumeric(l)] : [ie.makeBytes(ie.toUtf8ByteArray(l))]; 39610 } 39611 // Returns a segment representing an Extended Channel Interpretation 39612 // (ECI) designator with the given assignment value. 39613 static makeEci(l) { 39614 let g = []; 39615 if (l < 0) 39616 throw new RangeError("ECI assignment value out of range"); 39617 if (l < 128) 39618 s(l, 8, g); 39619 else if (l < 16384) 39620 s(2, 2, g), s(l, 14, g); 39621 else if (l < 1e6) 39622 s(6, 3, g), s(l, 21, g); 39623 else 39624 throw new RangeError("ECI assignment value out of range"); 39625 return new ie(ie.Mode.ECI, 0, g); 39626 } 39627 // Tests whether the given string can be encoded as a segment in numeric mode. 39628 // A string is encodable iff each character is in the range 0 to 9. 39629 static isNumeric(l) { 39630 return ie.NUMERIC_REGEX.test(l); 39631 } 39632 // Tests whether the given string can be encoded as a segment in alphanumeric mode. 39633 // A string is encodable iff each character is in the following set: 0 to 9, A to Z 39634 // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon. 39635 static isAlphanumeric(l) { 39636 return ie.ALPHANUMERIC_REGEX.test(l); 39637 } 39638 /*-- Methods --*/ 39639 // Returns a new copy of the data bits of this segment. 39640 getData() { 39641 return this.bitData.slice(); 39642 } 39643 // (Package-private) Calculates and returns the number of bits needed to encode the given segments at 39644 // the given version. The result is infinity if a segment has too many characters to fit its length field. 39645 static getTotalBits(l, g) { 39646 let f = 0; 39647 for (const p of l) { 39648 const M = p.mode.numCharCountBits(g); 39649 if (p.numChars >= 1 << M) 39650 return 1 / 0; 39651 f += 4 + M + p.bitData.length; 39652 } 39653 return f; 39654 } 39655 // Returns a new array of bytes representing the given string encoded in UTF-8. 39656 static toUtf8ByteArray(l) { 39657 l = encodeURI(l); 39658 let g = []; 39659 for (let f = 0; f < l.length; f++) 39660 l.charAt(f) != "%" ? g.push(l.charCodeAt(f)) : (g.push(parseInt(l.substring(f + 1, f + 3), 16)), f += 2); 39661 return g; 39662 } 39663 }; 39664 o.NUMERIC_REGEX = /^[0-9]*$/, o.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\/:-]*$/, o.ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; 39665 let L = o; 39666 t.QrSegment = o; 39667})(G1 || (G1 = {})); 39668((t) => { 39669 ((e) => { 39670 const s = class { 39671 // The QR Code can tolerate about 30% erroneous codewords 39672 /*-- Constructor and fields --*/ 39673 constructor(n, o) { 39674 this.ordinal = n, this.formatBits = o; 39675 } 39676 }; 39677 s.LOW = new s(0, 1), s.MEDIUM = new s(1, 0), s.QUARTILE = new s(2, 3), s.HIGH = new s(3, 2), e.Ecc = s; 39678 })(t.QrCode || (t.QrCode = {})); 39679})(G1 || (G1 = {})); 39680((t) => { 39681 ((e) => { 39682 const s = class { 39683 /*-- Constructor and fields --*/ 39684 constructor(n, o) { 39685 this.modeBits = n, this.numBitsCharCount = o; 39686 } 39687 /*-- Method --*/ 39688 // (Package-private) Returns the bit width of the character count field for a segment in 39689 // this mode in a QR Code at the given version number. The result is
39689in the range [0, 16]. 39690 numCharCountBits(n) { 39691 return this.numBitsCharCount[Math.floor((n + 7) / 17)]; 39692 } 39693 }; 39694 s.NUMERIC = new s(1, [10, 12, 14]), s.ALPHANUMERIC = new s(2, [9, 11, 13]), s.BYTE = new s(4, [8, 16, 16]), s.KANJI = new s(8, [8, 10, 12]), s.ECI = new s(7, [0, 0, 0]), e.Mode = s; 39695 })(t.QrSegment || (t.QrSegment = {})); 39696})(G1 || (G1 = {})); 39697var gt = G1; 39698/** 39699 * @license qrcode.react 39700 * Copyright (c) Paul O'Shannessy 39701 * SPDX-License-Identifier: ISC 39702 */ 39703var vy = { 39704 L: gt.QrCode.Ecc.LOW, 39705 M: gt.QrCode.Ecc.MEDIUM, 39706 Q: gt.QrCode.Ecc.QUARTILE, 39707 H: gt.QrCode.Ecc.HIGH 39708}, Wi = 128, $i = "L", qi = "#FFFFFF", Ui = "#000000", Gi = !1, Ji = 1, yy = 4, wy = 0, Ty = 0.1; 39709function Ki(t, e = 0) { 39710 const s = []; 39711 return t.forEach(function(r, n) { 39712 let o = null; 39713 r.forEach(function(L, d) { 39714 if (!L && o !== null) { 39715 s.push( 39716 `M${o + e} ${n + e}h${d - o}v1H${o + e}z` 39717 ), o = null; 39718 return; 39719 } 39720 if (d === r.length - 1) { 39721 if (!L) 39722 return; 39723 o === null ? s.push(`M${d + e},${n + e} h1v1H${d + e}z`) : s.push( 39724 `M${o + e},${n + e} h${d + 1 - o}v1H${o + e}z` 39725 ); 39726 return; 39727 } 39728 L && o === null && (o = d); 39729 }); 39730 }), s.join(""); 39731} 39732function Yi(t, e) { 39733 return t.slice().map((s, r) => r < e.y || r >= e.y + e.h ? s : s.map((n, o) => o < e.x || o >= e.x + e.w ? n : !1)); 39734} 39735function Sy(t, e, s, r) { 39736 if (r == null) 39737 return null; 39738 const n = t.length + s * 2, o = Math.floor(e * Ty), L = n / e, d = (r.
39738width || o) * L, l = (r.height || o) * L, g = r.x == null ? t.length / 2 - d / 2 : r.x * L, f = r.y == null ? t.length / 2 - l / 2 : r.y * L, p = r.opacity == null ? 1 : r.opacity; 39739 let M = null; 39740 if (r.excavate) { 39741 let h = Math.floor(g), x = Math.floor(f), _ = Math.ceil(d + g - h), v = Math.ceil(l + f - x); 39742 M = { x: h, y: x, w: _, h: v }; 39743 } 39744 const u = r.crossOrigin; 39745 return { x: g, y: f, h: l, w: d, excavation: M, opacity: p, crossOrigin: u }; 39746} 39747function By(t, e) { 39748 return e != null ? Math.max(Math.floor(e), 0) : t ? yy : wy; 39749} 39750function Xi({ 39751 value: t, 39752 level: e, 39753 minVersion: s, 39754 includeMargin: r, 39755 marginSize: n, 39756 imageSettings: o, 39757 size: L, 39758 boostLevel: d 39759}) { 39760 let l = ae.useMemo(() => { 39761 const h = (Array.isArray(t) ? t : [t]).reduce((x, _) => (x.push(...gt.QrSegment.makeSegments(_)), x), []); 39762 return gt.QrCode.encodeSegments( 39763 h, 39764 vy[e], 39765 s, 39766 void 0, 39767 void 0, 39768 d 39769 ); 39770 }, [t, e, s, d]); 39771 const { cells: g, margin: f, numCells: p, calculatedImageSettings: M } = ae.useMemo(() => { 39772 let u = l.getModules(); 39773 const h = By(r, n), x = u.length + h * 2, _ = Sy( 39774 u, 39775 L, 39776 h, 39777 o 39778 ); 39779 return { 39780 cells: u, 39781 margin: h, 39782 numCells: x, 39783 calculatedImageSettings: _ 39784 }; 39785 }, [l, L, o, r, n]); 39786 return { 39787 qrcode: l, 39788 margin: f, 39789 cells: g, 39790 numCells: p, 39791 calculatedImageSettings: M 39792 }; 39793} 39794var ky = (function() { 39795 try { 39796 new Path2D().addPath(new Path2D()); 39797 } catch { 39798 return !1; 39799 } 39800 return !0; 39801})(), Ay = ae.forwardRef( 39802 function(e, s) { 39803 const r = e, { 39804 value: n, 39805 size: o = Wi, 39806 level: L = $i, 39807 bgColor: d = qi, 39808 fgColor: l = Ui, 39809 includeMargin: g = Gi, 39810 minVersion: f = Ji, 39811 boostLevel: p, 39812 marginSize: M, 39813 imageSettings: u 39814 } = r, x = L5(r, [ 39815 "value", 39816 "size", 39817 "level", 39818 "bgColor", 39819 "fgColor", 39820 "includeMargin", 39821 "minVersion", 39822 "boostLevel", 39823 "marginSize", 39824 "imageSettings" 39825 ]), { style: _ } = x, v = L5(x, ["style"]), y = u?.src, b = ae.useRef(null), S = ae.useRef(null), k = ae.useCallback( 39826 (le) => { 39827 b.current = le, typeof s == "function" ? s(le) : s && (s.current = le); 39828 }, 39829 [s] 39830 ), [A, I] = ae.useState(!1), { margin: w, cells: P, numCells: z, calculatedImageSettings: V } = Xi({ 39831 value: n, 39832 level: L, 39833 minVersion: f, 39834 boostLevel: p, 39835 includeMargin: g, 39836 marginSize: M, 39837 imageSettings: u, 39838 size: o 39839 }); 39840 ae.useEffect(() => { 39841 if (b.current != null) { 39842 const le = b.current, Ee = le.getContext("2d"); 39843 if (!Ee) 39844 return; 39845 let Z3 = P; 39846 const ee = S.current, ye = V != null && ee !== null && ee.complete && ee.naturalHeight !== 0 && ee.naturalWidth !== 0; 39847 ye && V.excavation != null && (Z3 = Yi( 39848 P, 39849 V.excavation 39850 )); 39851 const Ke = window.devicePixelRatio || 1; 39852 le.height = le.width = o * Ke; 39853 const o1 = o / z * Ke; 39854 Ee.scale(o1, o1), Ee.fillStyle = d, Ee.fillRect(0, 0, z, z), Ee.fillStyle = l, ky ? Ee.fill(new Path2D(Ki(Z3, w))) : P.forEach(function(W3, t9) { 39855 W3.forEach(function(a9, s9) { 39856 a9 && Ee.fillRect(s9 + w, t9 + w, 1, 1); 39857 }); 39858 }), V && (Ee.globalAlpha = V.opacity), ye && Ee.drawImage( 39859 ee, 39860 V.x + w, 39861 V.y + w, 39862 V.w, 39863 V.h 39864 ); 39865 } 39866 }), ae.useEffect(() => { 39867 I(!1); 39868 }, [y]); 39869 const Se = o5({ height: o, width: o }, _); 39870 let Ie = null; 39871 return y != null && (Ie = /* @__PURE__ */ ae.createElement( 39872 "img", 39873 { 39874 src: y, 39875 key: y, 39876 style: { display: "none" }, 39877 onLoad: () => { 39878 I(!0); 39879 }, 39880 ref: S, 39881 crossOrigin: V?.crossOrigin 39882 }
39883 )), /* @__PURE__ */ ae.createElement(ae.Fragment, null, /* @__PURE__ */ ae.createElement( 39884 "canvas", 39885 o5({ 39886 style: Se, 39887 height: o, 39888 width: o, 39889 ref: k, 39890 role: "img" 39891 }, v) 39892 ), Ie); 39893 } 39894); 39895Ay.displayName = "QRCodeCanvas"; 39896var Qi = ae.forwardRef( 39897 function(e, s) { 39898 const r = e, { 39899 value: n, 39900 size: o = Wi, 39901 level: L = $i, 39902 bgColor: d = qi, 39903 fgColor: l = Ui, 39904 includeMargin: g = Gi, 39905 minVersion: f = Ji, 39906 boostLevel: p, 39907 title: M, 39908 marginSize: u, 39909 imageSettings: h 39910 } = r, x = L5(r, [ 39911 "value", 39912 "size", 39913 "level", 39914 "bgColor", 39915 "fgColor", 39916 "includeMargin", 39917 "minVersion", 39918 "boostLevel", 39919 "title", 39920 "marginSize", 39921 "imageSettings" 39922 ]), { margin: _, cells: v, numCells: y, calculatedImageSettings: b } = Xi({ 39923 value: n, 39924 level: L, 39925 minVersion: f, 39926 boostLevel: p, 39927 includeMargin: g, 39928 marginSize: u, 39929 imageSettings: h, 39930 size: o 39931 }); 39932 let S = v, k = null; 39933 h != null && b != null && (b.excavation != null && (S = Yi( 39934 v, 39935 b.excavation 39936 )), k = /* @__PURE__ */ ae.createElement( 39937 "image", 39938 { 39939 href: h.src, 39940 height: b.h, 39941 width: b.w, 39942 x: b.x + _, 39943 y: b.y + _, 39944 preserveAspectRatio: "none", 39945 opacity: b.opacity, 39946 crossOrigin: b.crossOrigin 39947 } 39948 )); 39949 const A = Ki(S, _); 39950 return /* @__PURE__ */ ae.createElement( 39951 "svg", 39952 o5({ 39953 height: o, 39954 width: o,
39955 viewBox: `0 0 ${y} ${y}`, 39956 ref: s, 39957 role: "img" 39958 }, x), 39959 !!M && /* @__PURE__ */ ae.createElement("title", null, M), 39960 /* @__PURE__ */ ae.createElement( 39961 "path", 39962 { 39963 fill: d, 39964 d: `M0,0 h${y}v${y}H0z`, 39965 shapeRendering: "crispEdges" 39966 } 39967 ), 39968 /* @__PURE__ */ ae.createElement("path", { fill: l, d: A, shapeRendering: "crispEdges" }), 39969 k 39970 ); 39971 } 39972); 39973Qi.displayName = "QRCodeSVG"; 39974const e1 = "#EFBB0F", ft = "#0B1B2B", ve = "#0056B3"; 39975function X({ children: t, color: e = e1 }) { 39976 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "dwn90", _fgB: 1790697589623, _fgD: !0, className: "flex items-start gap-2", "data-fg-dwn90": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:36:5:1257:163:e:li:ete:1", children: [ 39977 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "dwn91", _fgB: 1790697589623, size: 14, className: "mt-0.5 flex-shrink-0", style: { color: e }, "data-fg-dwn91": ":0:node_modules/lucide-react:37:7:1303:77:e:CheckCircle2::::::CELI" }), 39978 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dwn92", _fgB: 1790697589623, "data-fg-dwn92": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:38:7:1387:23:e:span:c", children: t }) 39979 ] }); 39980} 39981function W1({ children: t, color: e = e1 }) { 39982 return /* @__PURE__ */ i( 39983 a, 39984 { 39985 _fgT: "span", 39986 _fgS: "dwn94", 39987 _fgB: 1790697589623, 39988 _fgD: !0, 39989 className: "tracking-[0.15em] uppercase block mb-1", 39990 style: { color: e, fontSize: "9px", fontWeight: 700 }, 39991 "data-fg-dwn94": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:45:5:1537:155:e:span:c:1", 39992 children: t 39993 } 39994 ); 39995} 39996function Ny() { 39997 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn96", _fgB: 1790697589623, _fgD: !0, className: "flyer-page-v2 bg-white relative overflow-hidden flex flex-col", "data-fg-dwn96": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:59:5:1886:8191:e:div:xtetxtetxte:1", children: [ 39998 /* @__PURE__ */ c( 39999 a, 40000 { 40001 _fgT: "div", 40002 _fgS: "dwn98", 40003 _fgB: 1790697589623, 40004 className: "relative px-10 pt-8 pb-8 text-white flex flex-col", 40005 style: { background: `linear-gradient(135deg, ${ft} 0%, #132B44 100%)`, height: "320px" }, 40006 "data-fg-dwn98": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:61:7:2010:3095:e:div:xtetxtetetxtetxtetxtete", 40007 children: [
40008 /* @__PURE__ */ c( 40009 a, 40010 { 40011 _fgT: "div", 40012 _fgS: "dwn910", 40013 _fgB: 1790697589623, 40014 className: "absolute top-0 right-0 h-full overflow-hidden", 40015 style: { width: "55%" }, 40016 "data-fg-dwn910": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:66:9:2265:1009:e:div:etxtetxte", 40017 children: [ 40018 /* @__PURE__ */ i( 40019 a, 40020 { 40021 _fgT: "img", 40022 _fgS: "dwn911", 40023 _fgB: 1790697589623, 40024 src: "https://images.unsplash.com/photo-1768130124210-04b0b620c92d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxjaXR5JTIwYnVzJTIwdHJhbnNpdCUyMHJvdXRlJTIwc3RyZWV0fGVufDF8fHx8MTc3MzgwNzY1NXww&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 40025 alt: "", 40026 className: "w-full h-full object-cover", 40027 style: { opacity: 0.18 }, 40028 "data-fg-dwn911": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:70:11:2393:422:e:img" 40029 } 40030 ),
40031 /* @__PURE__ */ i( 40032 a, 40033 { 40034 _fgT: "div", 40035 _fgS: "dwn913", 40036 _fgB: 1790697589623, 40037 className: "absolute inset-0", 40038 style: { 40039 background: `linear-gradient(to right, ${ft} 0%, transparent 55%)` 40040 }, 40041 "data-fg-dwn913": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:77:11:2864:178:e:div" 40042 } 40043 ), 40044 /* @__PURE__ */ i( 40045 a, 40046 { 40047 _fgT: "div", 40048 _fgS: "dwn915", 40049 _fgB: 1790697589623, 40050 className: "absolute inset-0", 40051 style: { 40052 background: `linear-gradient(to top, ${ft} 0%, transparent 40%)` 40053 }, 40054 "data-fg-dwn915": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:84:11:3083:176:e:div" 40055 } 40056 ) 40057 ] 40058 } 40059 ),
40060 /* @__PURE__ */ i( 40061 a, 40062 { 40063 _fgT: "div", 40064 _fgS: "dwn917", 40065 _fgB: 1790697589623, 40066 className: "absolute -top-20 -right-20 w-72 h-72 rounded-full opacity-10", 40067 style: { background: `radial-gradient(circle, ${e1} 0%, transparent 70%)` }, 40068 "data-fg-dwn917": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:93:9:3319:187:e:div" 40069 } 40070 ), 40071 /* @__PURE__ */ i( 40072 a, 40073 { 40074 _fgT: "div", 40075 _fgS: "dwn918", 40076 _fgB: 1790697589623, 40077 className: "absolute -bottom-16 -left-16 w-56 h-56 rounded-full opacity-8", 40078 style: { background: `radial-gradient(circle, ${ve} 0%, transparent 70%)` }, 40079 "data-fg-dwn918": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:97:9:3515:188:e:div" 40080 } 40081 ), 40082 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn920", _fgB: 1790697589623, className: "flex items-center justify-between relative z-10 mb-4", "data-fg-dwn920": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:103:9:3782:373:e:div:ete", children: [
40083 /* @__PURE__ */ i( 40084 a, 40085 { 40086 _fgT: "span", 40087 _fgS: "dwn921", 40088 _fgB: 1790697589623, 40089 className: "tracking-[0.2em] uppercase", 40090 style: { color: e1, fontSize: "20px", fontWeight: 700, letterSpacing: "0.15em" }, 40091 "data-fg-dwn921": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:104:11:3863:216:e:span:t", 40092 children: "Fixed Route Solutions" 40093 } 40094 ), 40095 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "dwn923", _fgB: 1790697589623, src: A1, alt: "IT Curves", className: "h-8", "data-fg-dwn923": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:110:11:4090:50:e:img" }) 40096 ] }), 40097 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn925", _fgB: 1790697589623, className: "relative z-10 w-16 h-[3px] rounded-full mb-5", style: { backgroundColor: e1 }, "data-fg-dwn925": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:114:9:4205:98:e:div" }), 40098 /* @__PURE__ */ c( 40099 a, 40100 { 40101 _fgT: "h1", 40102 _fgS: "dwn927", 40103 _fgB: 1790697589623, 40104 className: "relative z-10 font-[Space_Grotesk] leading-[1.1] mb-5", 40105 style: { fontSize: "32px", fontWeight: 700 }, 40106 "data-fg-dwn927": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:117:9:4343:341:e:h1:tete", 40107 children: [ 40108 "Plan It. Run It.",
40109 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "dwn929", _fgB: 1790697589623, "data-fg-dwn929": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:122:11:4526:6:e:br" }), 40110 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dwn930", _fgB: 1790697589623, className: "italic font-[Playfair_Display]", style: { color: e1 }, "data-fg-dwn930": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:123:11:4543:127:e:span:t", children: "Track Every Mile of It." }) 40111 ] 40112 } 40113 ), 40114 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn932", _fgB: 1790697589623, className: "relative z-10 text-white/80 max-w-lg leading-relaxed", style: { fontSize: "11.5px" }, "data-fg-dwn932": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:128:9:4694:398:e:p:t", children: "A complete toolset for scheduled transit service. Build routes graphically, generate blocks and timetables, assign drivers, monitor your fleet live, and publish GTFS feeds â all inside the same platform that runs your demand-response operations." }) 40115 ] 40116 } 40117 ), 40118 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn935", _fgB: 1790697589623, className: "flex-1 px-10 py-6 flex flex-col gap-5", "data-fg-dwn935": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:137:7:5157:4570:e:div:xtetxtetxtetxtetxte", children: [
40119 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn937", _fgB: 1790697589623, className: "flex gap-5", "data-fg-dwn937": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:139:9:5258:1405:e:div:ete", children: [ 40120 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn938", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn938": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:140:11:5297:1044:e:div:etetete", children: [ 40121 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn939", _fgB: 1790697589623, "data-fg-dwn939": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:141:13:5348:43:e:SectionLabel:t:::::322", children: "Route Planning" }), 40122 /* @__PURE__ */ i( 40123 a, 40124 { 40125 _fgT: "h2", 40126 _fgS: "dwn941", 40127 _fgB: 1790697589623, 40128 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40129 style: { fontSize: "17px", fontWeight: 700 }, 40130 "data-fg-dwn941": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:142:13:5404:212:e:h2:t", 40131 children: "Build Routes Visually" 40132 } 40133 ),
40134 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn943", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-dwn943": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:148:13:5629:273:e:p:t", children: "Map stations and waypoints graphically, create reusable route segments, and merge them into full blocks with configurable headways and time windows." }), 40135 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn945", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-dwn945": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:152:13:5915:409:e:ul:etetete", children: [ 40136 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn946", _fgB: 1790697589623, "data-fg-dwn946": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:153:15:6000:69:e:Bullet:t:::::63f", children: "Establish stations and waypoints directly on the map" }), 40137 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn948", _fgB: 1790697589623, "data-fg-dwn948": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:154:15:6084:72:e:Bullet:t:::::63f", children: "Reusable route segment templates across multiple routes" }),
40138 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn950", _fgB: 1790697589623, "data-fg-dwn950": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:155:15:6171:67:e:Bullet:t:::::63f", children: "Varied headways by time of day for peak / off-peak" }), 40139 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn952", _fgB: 1790697589623, "data-fg-dwn952": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:156:15:6253:53:e:Bullet:t:::::63f", children: "Holiday and weekend block generation" }) 40140 ] }) 40141 ] }), 40142 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn954", _fgB: 1790697589623, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-dwn954": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:159:11:6352:296:e:div:e", children: /* @__PURE__ */ i( 40143 a, 40144 { 40145 _fgT: "img", 40146 _fgS: "dwn955", 40147 _fgB: 1790697589623, 40148 src: my, 40149 alt: "RST Builder - Route Planning Screenshot", 40150 className: "w-full h-full object-cover", 40151 "data-fg-dwn955": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:160:13:6465:166:e:img" 40152 } 40153 ) }) 40154 ] }),
40155 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn957", _fgB: 1790697589623, className: "border-t border-slate-200", "data-fg-dwn957": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:169:9:6697:45:e:div" }), 40156 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn959", _fgB: 1790697589623, className: "flex gap-5", "data-fg-dwn959": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:172:9:6783:1367:e:div:ete", children: [ 40157 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn960", _fgB: 1790697589623, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-dwn960": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:173:11:6822:275:e:div:e", children: /* @__PURE__ */ i( 40158 a, 40159 { 40160 _fgT: "img", 40161 _fgS: "dwn961", 40162 _fgB: 1790697589623, 40163 src: xy, 40164 alt: "Blocking Screenshot", 40165 className: "w-full h-full object-cover", 40166 "data-fg-dwn961": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:174:13:6935:145:e:img" 40167 } 40168 ) }),
40169 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn962", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn962": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:180:11:7108:1027:e:div:etetete", children: [ 40170 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn963", _fgB: 1790697589623, color: ve, "data-fg-dwn963": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:181:13:7159:50:e:SectionLabel:t:::::322", children: "Blocking" }), 40171 /* @__PURE__ */ i( 40172 a, 40173 { 40174 _fgT: "h2", 40175 _fgS: "dwn965", 40176 _fgB: 1790697589623, 40177 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40178 style: { fontSize: "17px", fontWeight: 700 }, 40179 "data-fg-dwn965": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:182:13:7222:210:e:h2:t", 40180 children: "Generate Timetables" 40181 } 40182 ), 40183 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn967", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-dwn967": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:188:13:7445:241:e:p:t", children: "Review blocks in a tabular view, see schedule time at each station, and generate or edit blocks with minimal effort." }),
40184 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn969", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-dwn969": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:192:13:7699:419:e:ul:etetete", children: [ 40185 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn970", _fgB: 1790697589623, color: ve, "data-fg-dwn970": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:193:15:7784:78:e:Bullet:t:::::63f", children: "Tabular view with schedule time at every station" }), 40186 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn972", _fgB: 1790697589623, color: ve, "data-fg-dwn972": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:194:15:7877:68:e:Bullet:t:::::63f", children: "Block generation from headway settings" }), 40187 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn974", _fgB: 1790697589623, color: ve, "data-fg-dwn974": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:195:15:7960:69:e:Bullet:t:::::63f", children: "Mark stations as on-request or excluded" }), 40188 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn976", _fgB: 1790697589623, color: ve, "data-fg-dwn976": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:196:15:8044:56:e:Bullet:t:::::63f", children: "Editing without rebuilding" }) 40189 ] }) 40190 ] }) 40191 ] }),
40192 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn979", _fgB: 1790697589623, className: "border-t border-slate-200", "data-fg-dwn979": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:202:9:8184:45:e:div" }), 40193 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn981", _fgB: 1790697589623, className: "flex gap-5", "data-fg-dwn981": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:205:9:8272:1442:e:div:ete", children: [ 40194 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn982", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn982": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:206:11:8311:1015:e:div:etetete", children: [ 40195 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn983", _fgB: 1790697589623, "data-fg-dwn983": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:207:13:8362:39:e:SectionLabel:t:::::322", children: "Runcutting" }), 40196 /* @__PURE__ */ i( 40197 a, 40198 { 40199 _fgT: "h2", 40200 _fgS: "dwn985", 40201 _fgB: 1790697589623, 40202 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40203 style: { fontSize: "17px", fontWeight: 700 }, 40204 "data-fg-dwn985": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:208:13:8414:222:e:h2:t", 40205 children: "Segment Routes Into Driver Runs" 40206 } 40207 ),
40208 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn987", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-dwn987": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:214:13:8649:263:e:p:t", children: "View all trips, split them into manageable runs, and see total hours per driver at a glance. Select route availability by day of the week." }), 40209 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn989", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-dwn989": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:218:13:8925:384:e:ul:etetete", children: [ 40210 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn990", _fgB: 1790697589623, "data-fg-dwn990": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:219:15:9010:59:e:Bullet:t:::::63f", children: "All route trips in one comprehensive table" }), 40211 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn992", _fgB: 1790697589623, "data-fg-dwn992": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:220:15:9084:51:e:Bullet:t:::::63f", children: "User-friendly tools to create runs" }),
40212 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn994", _fgB: 1790697589623, "data-fg-dwn994": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:221:15:9150:67:e:Bullet:t:::::63f", children: "Instant visibility of assigned vs. unassigned runs" }), 40213 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn996", _fgB: 1790697589623, "data-fg-dwn996": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:222:15:9232:59:e:Bullet:t:::::63f", children: "Run summaries with total hours per weekday" }) 40214 ] }) 40215 ] }), 40216 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn998", _fgB: 1790697589623, className: "flex-1 flex flex-col justify-center", "data-fg-dwn998": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:225:11:9337:362:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn999", _fgB: 1790697589623, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-dwn999": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:226:13:9403:279:e:div:e", children: /* @__PURE__ */ i( 40217 a, 40218 { 40219 _fgT: "img", 40220 _fgS: "dwn9100", 40221 _fgB: 1790697589623, 40222 src: _y, 40223 alt: "Shift Scheduling Screenshot", 40224 className: "w-full h-full object-cover", 40225 "data-fg-dwn9100": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:227:15:9496:167:e:img" 40226 } 40227 ) }) }) 40228 ] }) 40229 ] }), 40230 /* @__PURE__ */ i( 40231 a, 40232 { 40233 _fgT: "div", 40234 _fgS: "dwn9102", 40235 _fgB: 1790697589623, 40236 className: "px-10 py-2.5 flex items-center justify-center", 40237 style: { backgroundColor: ft }, 40238 "data-fg-dwn9102": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:238:7:9778:288:e:div:e", 40239 children: /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dwn9103", _fgB: 1790697589623, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-dwn9103": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:242:9:9907:146:e:span:et", children: [
40240 /* @__PURE__ */ i(a, { _fgT: J1, _fgS: "dwn9104", _fgB: 1790697589623, size: 11, "data-fg-dwn9104": ":0:node_modules/lucide-react:243:11:10006:19:e:Globe::::::Cyd3" }), 40241 " ITCurves.AI" 40242 ] }) 40243 } 40244 ) 40245 ] }); 40246} 40247const Iy = [ 40248 { 40249 icon: S1, 40250 title: "Route Planning", 40251 desc: "Visual map-based route design with reusable segments", 40252 color: e1 40253 }, 40254 { 40255 icon: P3, 40256 title: "Blocking & Scheduling", 40257 desc: "Timetable generation with tabular views", 40258 color: ve 40259 }, 40260 { 40261 icon: Q5, 40262 title: "Runcutting", 40263 desc: "Split routes into driver runs with hour balancing", 40264 color: "#34D399" 40265 }, 40266 { 40267 icon: N3, 40268 title: "Live Dashboard", 40269 desc: "Real-time fleet tracking, passenger counts & dwell times", 40270 color: ve 40271 }, 40272 { 40273 icon: e0, 40274 title: "Driver MDT", 40275 desc: "Off-the-shelf tablets with stop-by-stop navigation", 40276 color: e1 40277 }, 40278 { 40279 icon: X5, 40280 title: "GTFS Integration", 40281 desc: "Publish to Google Maps, Transit App", 40282 color: "#34D399" 40283 }, 40284 { 40285 icon: ai, 40286 title: "Microtransit Flex", 40287 desc: "Add deviated fixed-route service with on-demand stops", 40288 color: "#A855F7" 40289 } 40290]; 40291function Py() { 40292 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9106", _fgB: 1790697589623, _fgD: !0, className: "flyer-page-v2 bg-white relative overflow-hidden flex flex-col", "data-fg-dwn9106": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:301:5:11264:8963:e:div:xtetxtetxtetxtetxtetxtetxte:1", children: [ 40293 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9108", _fgB: 1790697589623, className: "px-10 pt-6 flex gap-5", "data-fg-dwn9108": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:303:7:11415:2172:e:div:xtetxte", children: [
40294 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9110", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn9110": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:305:9:11494:1038:e:div:etetete", children: [ 40295 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn9111", _fgB: 1790697589623, color: ve, "data-fg-dwn9111": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:306:11:11543:56:e:SectionLabel:t:::::322", children: "Live Dashboard" }), 40296 /* @__PURE__ */ i( 40297 a, 40298 { 40299 _fgT: "h2", 40300 _fgS: "dwn9113", 40301 _fgB: 1790697589623, 40302 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40303 style: { fontSize: "17px", fontWeight: 700 }, 40304 "data-fg-dwn9113": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:307:11:11610:217:e:h2:t", 40305 children: "See Your Entire Network in Real Time" 40306 } 40307 ), 40308 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn9115", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-dwn9115": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:313:11:11838:235:e:p:t", children: "Track every vehicle, monitor passenger loads, check dwell times, and communicate with drivers â all from one screen." }),
40309 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn9117", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-dwn9117": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:317:11:12084:433:e:ul:etetete", children: [ 40310 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9118", _fgB: 1790697589623, color: ve, "data-fg-dwn9118": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:318:13:12167:84:e:Bullet:t:::::63f", children: "Real-time vehicle location, speed & schedule adherence" }), 40311 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9120", _fgB: 1790697589623, color: ve, "data-fg-dwn9120": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:319:13:12264:75:e:Bullet:t:::::63f", children: "Live passenger counts from automatic counters" }), 40312 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9122", _fgB: 1790697589623, color: ve, "data-fg-dwn9122": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:320:13:12352:65:e:Bullet:t:::::63f", children: "Dwell time monitoring at every stop" }), 40313 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9124", _fgB: 1790697589623, color: ve, "data-fg-dwn9124": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:321:13:12430:71:e:Bullet:t:::::63f", children: "Direct driver communication from dispatch" }) 40314 ] }) 40315 ] }),
40316 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9127", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn9127": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:326:9:12569:1005:e:div:etetete", children: [ 40317 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn9128", _fgB: 1790697589623, "data-fg-dwn9128": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:327:11:12618:39:e:SectionLabel:t:::::322", children: "Driver MDT" }), 40318 /* @__PURE__ */ i( 40319 a, 40320 { 40321 _fgT: "h2", 40322 _fgS: "dwn9130", 40323 _fgB: 1790697589623, 40324 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40325 style: { fontSize: "17px", fontWeight: 700 }, 40326 "data-fg-dwn9130": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:328:11:12668:227:e:h2:t", 40327 children: "Off-the-Shelf Tablets. Purpose-Built Software." 40328 } 40329 ), 40330 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn9132", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-dwn9132": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:334:11:12906:245:e:p:t", children: "Drivers get stop-by-stop navigation, real-time route updates, and automatic rider identification on standard consumer tablets." }),
40331 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn9134", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-dwn9134": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:338:11:13162:397:e:ul:etetete", children: [ 40332 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9135", _fgB: 1790697589623, "data-fg-dwn9135": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:339:13:13245:62:e:Bullet:t:::::63f", children: "Consumer tablets on LTE, 5G, or any data plan" }), 40333 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9137", _fgB: 1790697589623, "data-fg-dwn9137": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:340:13:13320:74:e:Bullet:t:::::63f", children: "Rider onboarding via facial recognition, QR, or Bluetooth" }), 40334 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9139", _fgB: 1790697589623, "data-fg-dwn9139": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:341:13:13407:64:e:Bullet:t:::::63f", children: "Restricted actions to reduce distracted driving" }), 40335 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9141", _fgB: 1790697589623, "data-fg-dwn9141": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:342:13:13484:59:e:Bullet:t:::::63f", children: "Verbal communication for hands-free safety" }) 40336 ] }) 40337 ] }) 40338 ] }), 40339 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9144", _fgB: 1790697589623, className: "px-10 pt-3 pb-2", "data-fg-dwn9144": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:348:7:13636:295:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9145", _fgB: 1790697589623, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-dwn9145": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:349:9:13678:240:e:div:e", children: /* @__PURE__ */ i( 40340 a, 40341 { 40342 _fgT: "img", 40343 _fgS: "dwn9146", 40344 _fgB: 1790697589623, 40345 src: t0, 40346 alt: "Live Dashboard", 40347 className: "w-full h-auto object-cover", 40348 "data-fg-dwn9146": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:350:11:13767:136:e:img" 40349 } 40350 ) }) }), 40351 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9148", _fgB: 1790697589623, className: "px-10", "data-fg-dwn9148": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:359:7:13961:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9149", _fgB: 1790697589623, className: "border-t border-slate-200", "data-fg-dwn9149": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:360:9:13993:45:e:div" }) }), 40352 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9151", _fgB: 1790697589623, className: "px-10 py-3 flex gap-5", "data-fg-dwn9151": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:364:7:14112:1962:e:div:xtetxte", children: [
40353 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9153", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn9153": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:366:9:14181:866:e:div:etetete", children: [ 40354 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn9154", _fgB: 1790697589623, color: ve, "data-fg-dwn9154": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:367:11:14230:58:e:SectionLabel:t:::::322", children: "GTFS Integration" }), 40355 /* @__PURE__ */ i( 40356 a, 40357 { 40358 _fgT: "h2", 40359 _fgS: "dwn9156", 40360 _fgB: 1790697589623, 40361 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40362 style: { fontSize: "16px", fontWeight: 700 }, 40363 "data-fg-dwn9156": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:368:11:14299:215:e:h2:t", 40364 children: "Publish to Google Maps & Rider App" 40365 } 40366 ), 40367 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn9158", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10px" }, "data-fg-dwn9158": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:374:11:14525:259:e:p:t", children: "Upload GTFS manually or connect for automatic publishing to automatically publish feeds. Enable GTFS-RT feeds for real-time vehicle locations." }),
40368 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn9160", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-dwn9160": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:378:11:14795:237:e:ul:ete", children: [ 40369 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9161", _fgB: 1790697589623, color: ve, "data-fg-dwn9161": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:379:13:14879:62:e:Bullet:t:::::63f", children: "Manual or automatic GTFS uploads" }), 40370 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9163", _fgB: 1790697589623, color: ve, "data-fg-dwn9163": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:380:13:14954:62:e:Bullet:t:::::63f", children: "GTFS-RT live tracking for riders" }) 40371 ] }) 40372 ] }), 40373 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9166", _fgB: 1790697589623, className: "flex-1 flex flex-col", "data-fg-dwn9166": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:385:9:15086:975:e:div:etetete", children: [ 40374 /* @__PURE__ */ i(a, { _fgT: W1, _fgS: "dwn9167", _fgB: 1790697589623, color: "#A855F7", "data-fg-dwn9167": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:386:11:15135:62:e:SectionLabel:t:::::322", children: "Microtransit Flex" }),
40375 /* @__PURE__ */ i( 40376 a, 40377 { 40378 _fgT: "h2", 40379 _fgS: "dwn9169", 40380 _fgB: 1790697589623, 40381 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40382 style: { fontSize: "16px", fontWeight: 700 }, 40383 "data-fg-dwn9169": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:387:11:15208:216:e:h2:t", 40384 children: "Add Microtransit to Any Fixed Route" 40385 } 40386 ), 40387 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn9171", _fgB: 1790697589623, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10px" }, "data-fg-dwn9171": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:393:11:15435:225:e:p:t", children: "Define deviation zones around fixed routes and let the system auto-schedule on-demand pickups and drop-offs." }), 40388 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "dwn9173", _fgB: 1790697589623, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-dwn9173": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:397:11:15671:375:e:ul:etete", children: [
40389 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9174", _fgB: 1790697589623, color: "#A855F7", "data-fg-dwn9174": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:398:13:15755:83:e:Bullet:t:::::63f", children: "On-demand stations with rider-initiated deviations" }), 40390 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9176", _fgB: 1790697589623, color: "#A855F7", "data-fg-dwn9176": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:399:13:15851:84:e:Bullet:t:::::63f", children: "Geographic deviation zones with configurable limits" }), 40391 /* @__PURE__ */ i(a, { _fgT: X, _fgS: "dwn9178", _fgB: 1790697589623, color: "#A855F7", "data-fg-dwn9178": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:400:13:15948:82:e:Bullet:t:::::63f", children: "Virtual stop integration into fixed route network" }) 40392 ] }) 40393 ] }) 40394 ] }), 40395 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9181", _fgB: 1790697589623, className: "px-10", "data-fg-dwn9181": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:406:7:16104:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9182", _fgB: 1790697589623, className: "border-t border-slate-200", "data-fg-dwn9182": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:407:9:16136:45:e:div" }) }), 40396 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9184", _fgB: 1790697589623, className: "px-10 py-3", "data-fg-dwn9184": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:411:7:16250:1252:e:div:ete", children: [
40397 /* @__PURE__ */ i( 40398 a, 40399 { 40400 _fgT: "h3", 40401 _fgS: "dwn9185", 40402 _fgB: 1790697589623, 40403 className: "font-[Space_Grotesk] text-slate-900 mb-3 text-center", 40404 style: { fontSize: "14px", fontWeight: 700 }, 40405 "data-fg-dwn9185": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:412:9:16287:214:e:h3:t", 40406 children: "Complete Fixed Route Capabilities at a Glance" 40407 } 40408 ), 40409 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9187", _fgB: 1790697589623, className: "grid grid-cols-4 gap-2", "data-fg-dwn9187": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:418:9:16510:979:e:div:x", children: Iy.map((t, e) => /* @__PURE__ */ c( 40410 a, 40411 { 40412 _fgT: "div", 40413 _fgS: "dwn9189", 40414 _fgB: 1790697589623, 40415 className: "rounded-lg px-3 py-2.5 border flex items-start gap-2", 40416 style: { borderColor: `${t.color}30`, backgroundColor: `${t.color}08` }, 40417 "data-fg-dwn9189": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:420:13:16605:855:e:div:ete", 40418 children: [
40419 /* @__PURE__ */ i( 40420 a, 40421 { 40422 _fgT: "div", 40423 _fgS: "dwn9190", 40424 _fgB: 1790697589623, 40425 className: "w-6 h-6 rounded-md flex items-center justify-center flex-shrink-0 mt-0.5", 40426 style: { backgroundColor: `${t.color}18`, color: t.color }, 40427 "data-fg-dwn9190": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:425:15:16830:279:e:div:e", 40428 children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "dwn9191", _fgB: 1790697589623, size: 13, strokeWidth: 2.2, "data-fg-dwn9191": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:429:17:17048:40:e:cap.icon" }) 40429 } 40430 ), 40431 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9192", _fgB: 1790697589623, "data-fg-dwn9192": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:431:15:17124:317:e:div:ete", children: [ 40432 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9193", _fgB: 1790697589623, className: "text-slate-800", style: { fontSize: "9.5px", fontWeight: 700 }, "data-fg-dwn9193": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:432:17:17146:132:e:div:x", children: t.title }),
40433 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9195", _fgB: 1790697589623, className: "text-slate-500 leading-snug", style: { fontSize: "8px" }, "data-fg-dwn9195": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:435:17:17295:125:e:div:x", children: t.desc }) 40434 ] }) 40435 ] 40436 }, 40437 e 40438 )) }) 40439 ] }), 40440 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9198", _fgB: 1790697589623, className: "mt-auto", "data-fg-dwn9198": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:445:7:17555:2661:e:div:e", children: /* @__PURE__ */ c( 40441 a, 40442 { 40443 _fgT: "div", 40444 _fgS: "dwn9199", 40445 _fgB: 1790697589623, 40446 className: "px-10 py-5 text-white relative overflow-hidden", 40447 style: { background: `linear-gradient(135deg, ${ft} 0%, #132B44 100%)` }, 40448 "data-fg-dwn9199": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:446:9:17589:2614:e:div:xtete", 40449 children: [ 40450 /* @__PURE__ */ i( 40451 a, 40452 { 40453 _fgT: "div", 40454 _fgS: "dwn9201", 40455 _fgB: 1790697589623, 40456 className: "absolute -top-10 -right-10 w-48 h-48 rounded-full opacity-15", 40457 style: { background: `radial-gradient(circle, ${e1} 0%, transparent 70%)` }, 40458 "data-fg-dwn9201": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:451:11:17803:193:e:div" 40459 } 40460 ),
40461 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9202", _fgB: 1790697589623, className: "flex items-start justify-between relative z-10", "data-fg-dwn9202": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:456:11:18008:2180:e:div:ete", children: [ 40462 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9203", _fgB: 1790697589623, className: "flex-1", "data-fg-dwn9203": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:457:13:18085:1494:e:div:etetxte", children: [ 40463 /* @__PURE__ */ c( 40464 a, 40465 { 40466 _fgT: "h3", 40467 _fgS: "dwn9204", 40468 _fgB: 1790697589623, 40469 className: "font-[Space_Grotesk] mb-1", 40470 style: { fontSize: "18px", fontWeight: 700 }, 40471 "data-fg-dwn9204": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:458:15:18124:341:e:h3:tste", 40472 children: [ 40473 "See Fixed Route Tools", 40474 " ", 40475 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dwn9207", _fgB: 1790697589623, className: "italic font-[Playfair_Display]", style: { color: e1 }, "data-fg-dwn9207": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:463:17:18319:126:e:span:t", children: "In Action." }) 40476 ] 40477 } 40478 ),
40479 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "dwn9209", _fgB: 1790697589623, className: "text-white/70", style: { fontSize: "10.5px" }, "data-fg-dwn9209": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:467:15:18480:221:e:p:t", children: "We'll walk you through route planning, blocking, live tracking, and GTFS publishing using your actual routes." }), 40480 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9212", _fgB: 1790697589623, className: "flex items-center gap-4 mt-3 pt-3 border-t border-white/10", "data-fg-dwn9212": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:473:15:18755:805:e:div:ete", children: [ 40481 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "dwn9213", _fgB: 1790697589623, src: A1, alt: "IT Curves", className: "h-6", "data-fg-dwn9213": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:474:17:18848:50:e:img" }), 40482 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9214", _fgB: 1790697589623, className: "flex items-center gap-4", "data-fg-dwn9214": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:475:17:18915:624:e:div:etete", children: [
40483 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dwn9215", _fgB: 1790697589623, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-dwn9215": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:476:19:18975:166:e:span:et", children: [ 40484 /* @__PURE__ */ i(a, { _fgT: J1, _fgS: "dwn9216", _fgB: 1790697589623, size: 11, "data-fg-dwn9216": ":0:node_modules/lucide-react:477:21:19084:19:e:Globe::::::Cyd3" }), 40485 " ITCurves.AI" 40486 ] }), 40487 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dwn9218", _fgB: 1790697589623, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-dwn9218": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:479:19:19160:167:e:span:et", children: [ 40488 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "dwn9219", _fgB: 1790697589623, size: 11, "data-fg-dwn9219": ":0:node_modules/lucide-react:480:21:19269:19:e:Phone::::::DmpI" }), 40489 " 301-208-2222" 40490 ] }),
40491 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "dwn9221", _fgB: 1790697589623, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-dwn9221": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:482:19:19346:170:e:span:et", children: [ 40492 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "dwn9222", _fgB: 1790697589623, size: 11, "data-fg-dwn9222": ":0:node_modules/lucide-react:483:21:19455:18:e:Mail::::::D4VR" }), 40493 " [email protected]" 40494 ] }) 40495 ] }) 40496 ] }) 40497 ] }), 40498 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "dwn9224", _fgB: 1790697589623, className: "flex flex-col items-center gap-1.5 flex-shrink-0 ml-6", "data-fg-dwn9224": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:489:13:19593:578:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9225", _fgB: 1790697589623, className: "bg-white rounded-lg p-2 flex flex-col items-center gap-1.5", "data-fg-dwn9225": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:490:15:19679:473:e:div:ete", children: [
40499 /* @__PURE__ */ i( 40500 a, 40501 { 40502 _fgT: Qi, 40503 _fgS: "dwn9226", 40504 _fgB: 1790697589623, 40505 value: "https://www.itcurves.ai/meet", 40506 size: 56, 40507 bgColor: "#FFFFFF", 40508 fgColor: ft, 40509 level: "M", 40510 "data-fg-dwn9226": ":0:node_modules/qrcode.react:491:17:19772:209:e:QRCodeSVG::::::fH8" 40511 } 40512 ), 40513 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "dwn9227", _fgB: 1790697589623, className: "text-[9px] text-slate-700", style: { fontWeight: 600 }, "data-fg-dwn9227": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:498:17:19998:133:e:span:t", children: "Schedule a Meeting" }) 40514 ] }) }) 40515 ] }) 40516 ] 40517 } 40518 ) }) 40519 ] }); 40520} 40521function Cy() { 40522 return /* @__PURE__ */ c(C, { children: [ 40523 /* @__PURE__ */ i("style", { "data-fg-dwn9231": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:517:7:20526:1332:e:style:s", children: ` 40524 /* Screen preview: center pages with a gap */ 40525 .flyer-wrapper-v2 { 40526 display: flex; 40527 flex-direction: column; 40528 align-items: center; 40529 gap: 40px; 40530 padding: 100px 20px 40px; 40531 background: #e5e7eb; 40532 min-height: 100vh; 40533 } 40534 40535 .flyer-page-v2 { 40536 width: 8.5in; 40537 height: 11in; 40538 background: white; 40539 box-shadow: 0 4px 24px rgba(0,0,0,0.15); 40540 overflow: hidden; 40541 flex-shrink: 0; 40542 } 40543 40544 @media print { 40545 @page { 40546 size: 8.5in 11in; 40547 margin: 0; 40548 } 40549 40550 body, html { 40551 margin: 0 !important; 40552 padding: 0 !important; 40553 background: white !important; 40554 } 40555 40556 .flyer-wrapper-v2 { 40557 padding: 0; 40558 gap: 0; 40559 background: white; 40560 } 40561 40562 .flyer-page-v2 { 40563 box-shadow: none; 40564 page-break-after: always; 40565 break-after: page; 40566 } 40567 40568 .flyer-page-v2:last-child { 40569 page-break-after: avoid; 40570 break-after: avoid; 40571 } 40572 40573 /* Hide navbar, footer, chatbot for print */ 40574 nav, .chatbot-wrapper, footer { 40575 display: none !important; 40576 } 40577 } 40578 ` }), 40579 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "dwn9233", _fgB: 1790697589623, className: "flyer-wrapper-v2", "data-fg-dwn9233": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:574:7:21866:87:e:div:ete", children: [
40580 /* @__PURE__ */ i(a, { _fgT: Ny, _fgS: "dwn9234", _fgB: 1790697589623, "data-fg-dwn9234": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:575:9:21909:11:e:PageOne::::::CqTu" }), 40581 /* @__PURE__ */ i(a, { _fgT: Py, _fgS: "dwn9235", _fgB: 1790697589623, "data-fg-dwn9235": ":0:/src/app/pages/FixedRouteFlyerPageV2.tsx:576:9:21929:11:e:PageTwo::::::Crn4" }) 40582 ] }) 40583 ] }); 40584} 40585const Fy = globalThis.__GLOBALS__.getAssetURL("4f5c23170c6f93c8750f473ab87c7bd6a08bb78e.png"), Ey = globalThis.__GLOBALS__.getAssetURL("c57d670838ac4dac80699f33cf7d5bd9ca8a5d6c.png"), e9 = globalThis.__GLOBALS__.getAssetURL("02f555a394b4b7355f0ceae7f956da9d9ee0738b.png"), Ry = globalThis.__GLOBALS__.getAssetURL("1ee16db4ab066b796dfb4516e8b8961cd8827611.png"), Dy = globalThis.__GLOBALS__.getAssetURL("ab8a48a56e97f66d0ae68ce4139a51a09f2fcfa3.png"), b1 = "#EFBB0F", c5 = "#0B1B2B", je = "#0056B3"; 40586function W({ children: t, color: e = b1 }) { 40587 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "b9ta0", _fgB: 1790697589540, _fgD: !0, className: "flex items-start gap-2", "data-fg-b9ta0": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:39:5:1458:163:e:li:ete:1", children: [ 40588 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "b9ta1", _fgB: 1790697589540, size: 14, className: "mt-0.5 flex-shrink-0", style: { color: e }, "data-fg-b9ta1": ":0:node_modules/lucide-react:40:7:1504:77:e:CheckCircle2::::::CELI" }), 40589 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta2", _fgB: 1790697589540, "data-fg-b9ta2": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:41:7:1588:23:e:span:c", children: t }) 40590 ] }); 40591} 40592function $1({ children: t, color: e = b1 }) { 40593 return /* @__PURE__ */ i( 40594 a, 40595 { 40596 _fgT: "span", 40597 _fgS: "b9ta4", 40598 _fgB: 1790697589540, 40599 _fgD: !0, 40600 className: "tracking-[0.15em] uppercase block mb-1", 40601 style: { color: e, fontSize: "9px", fontWeight: 700 }, 40602 "data-fg-b9ta4": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:48:5:1738:155:e:span:c:1", 40603 children: t 40604 } 40605 ); 40606} 40607function zy() { 40608 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta6", _fgB: 1790697589540, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-b9ta6": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:62:5:2087:7866:e:div:xtetxtetxte:1", children: [ 40609 /* @__PURE__ */ c( 40610 a, 40611 { 40612 _fgT: "div", 40613 _fgS: "b9ta8", 40614 _fgB: 1790697589540, 40615 className: "relative px-10 pt-8 pb-7 text-white flex flex-col", 40616 style: { background: `linear-gradient(135deg, ${c5} 0%, #132B44 100%)` }, 40617 "data-fg-b9ta8": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:64:7:2208:1996:e:div:xtetetxtetxtetxtete", 40618 children: [
40619 /* @__PURE__ */ i( 40620 a, 40621 { 40622 _fgT: "div", 40623 _fgS: "b9ta10", 40624 _fgB: 1790697589540, 40625 className: "absolute -top-20 -right-20 w-72 h-72 rounded-full opacity-10", 40626 style: { background: `radial-gradient(circle, ${b1} 0%, transparent 70%)` }, 40627 "data-fg-b9ta10": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:69:9:2418:187:e:div" 40628 } 40629 ), 40630 /* @__PURE__ */ i( 40631 a, 40632 { 40633 _fgT: "div", 40634 _fgS: "b9ta11", 40635 _fgB: 1790697589540, 40636 className: "absolute -bottom-16 -left-16 w-56 h-56 rounded-full opacity-8", 40637 style: { background: `radial-gradient(circle, ${je} 0%, transparent 70%)` }, 40638 "data-fg-b9ta11": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:73:9:2614:188:e:div" 40639 } 40640 ), 40641 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta13", _fgB: 1790697589540, className: "flex items-center justify-between relative z-10 mb-4", "data-fg-b9ta13": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:79:9:2881:373:e:div:ete", children: [
40642 /* @__PURE__ */ i( 40643 a, 40644 { 40645 _fgT: "span", 40646 _fgS: "b9ta14", 40647 _fgB: 1790697589540, 40648 className: "tracking-[0.2em] uppercase", 40649 style: { color: b1, fontSize: "20px", fontWeight: 700, letterSpacing: "0.15em" }, 40650 "data-fg-b9ta14": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:80:11:2962:216:e:span:t", 40651 children: "Paratransit Solutions" 40652 } 40653 ), 40654 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "b9ta16", _fgB: 1790697589540, src: A1, alt: "IT Curves", className: "h-8", "data-fg-b9ta16": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:86:11:3189:50:e:img" }) 40655 ] }), 40656 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta18", _fgB: 1790697589540, className: "relative z-10 w-16 h-[3px] rounded-full mb-4", style: { backgroundColor: b1 }, "data-fg-b9ta18": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:90:9:3304:98:e:div" }), 40657 /* @__PURE__ */ c( 40658 a, 40659 { 40660 _fgT: "h1", 40661 _fgS: "b9ta20", 40662 _fgB: 1790697589540, 40663 className: "relative z-10 font-[Space_Grotesk] leading-[1.1] mb-3", 40664 style: { fontSize: "32px", fontWeight: 700 }, 40665 "data-fg-b9ta20": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:93:9:3442:347:e:h1:tete", 40666 children: [ 40667 "Smarter Dispatch. Better Data.",
40668 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "b9ta22", _fgB: 1790697589540, "data-fg-b9ta22": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:98:11:3639:6:e:br" }), 40669 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta23", _fgB: 1790697589540, className: "italic font-[Playfair_Display]", style: { color: b1 }, "data-fg-b9ta23": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:99:11:3656:119:e:span:t", children: "Happier Riders." }) 40670 ] 40671 } 40672 ), 40673 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta25", _fgB: 1790697589540, className: "relative z-10 text-white/80 max-w-lg leading-snug", style: { fontSize: "11.5px" }, "data-fg-b9ta25": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:104:9:3799:392:e:p:t", children: "A complete demand-response platform for paratransit operators. Optimize shared rides with our patented ERSA algorithm, let riders self-serve through app, web, and IVR, stay ADA-compliant, and keep every trip audit-ready â all from one system." }) 40674 ] 40675 } 40676 ), 40677 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta28", _fgB: 1790697589540, className: "flex-1 px-10 py-6 flex flex-col gap-5", "data-fg-b9ta28": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:113:7:4249:5290:e:div:xtetxtetxtetxtetxte", children: [
40678 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta30", _fgB: 1790697589540, className: "flex gap-5", "data-fg-b9ta30": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:115:9:4351:1681:e:div:etxte", children: [ 40679 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta31", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta31": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:116:11:4390:1126:e:div:etetete", children: [ 40680 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta32", _fgB: 1790697589540, "data-fg-b9ta32": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:117:13:4441:55:e:SectionLabel:t:::::Kux", children: "Demand-Response Scheduling" }), 40681 /* @__PURE__ */ i( 40682 a, 40683 { 40684 _fgT: "h2", 40685 _fgS: "b9ta34", 40686 _fgB: 1790697589540, 40687 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40688 style: { fontSize: "17px", fontWeight: 700 }, 40689 "data-fg-b9ta34": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:118:13:4509:227:e:h2:t", 40690 children: "Move More Riders With Fewer Vehicles" 40691 } 40692 ),
40693 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta36", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta36": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:124:13:4749:292:e:p:t", children: "Our patented ERSA algorithm processes thousands of daily trip requests into efficient shared-ride manifests, honoring every SLA constraint automatically." }), 40694 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta38", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta38": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:129:13:5054:445:e:ul:etetete", children: [ 40695 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta39", _fgB: 1790697589540, "data-fg-b9ta39": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:130:15:5139:76:e:Bullet:t:::::CGOE", children: "Patented ERSA algorithm builds optimized shared-ride routes" }), 40696 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta41", _fgB: 1790697589540, "data-fg-b9ta41": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:131:15:5230:78:e:Bullet:t:::::CGOE", children: "Honors pickup windows, max ride times, and driver hour limits" }),
40697 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta43", _fgB: 1790697589540, "data-fg-b9ta43": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:132:15:5323:79:e:Bullet:t:::::CGOE", children: "Same-day will-call trips inserted without rebuilding manifests" }), 40698 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta45", _fgB: 1790697589540, "data-fg-b9ta45": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:133:15:5417:64:e:Bullet:t:::::CGOE", children: "Drag-and-drop route adjustments for dispatchers" }) 40699 ] }) 40700 ] }), 40701 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta48", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-b9ta48": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:137:11:5585:432:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta49", _fgB: 1790697589540, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta49": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:138:13:5666:334:e:div:e", children: /* @__PURE__ */ i( 40702 a, 40703 { 40704 _fgT: Le, 40705 _fgS: "b9ta50", 40706 _fgB: 1790697589540, 40707 src: ri, 40708 alt: "Fleet of paratransit vehicles", 40709 className: "w-full h-full object-cover", 40710 style: { maxHeight: "180px" }, 40711 "data-fg-b9ta50": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:139:15:5759:222:e:ImageWithFallback::::::BDpS" 40712 } 40713 ) }) }) 40714 ] }),
40715 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta52", _fgB: 1790697589540, className: "border-t border-slate-200", "data-fg-b9ta52": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:150:9:6066:45:e:div" }), 40716 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta54", _fgB: 1790697589540, className: "flex gap-5", "data-fg-b9ta54": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:153:9:6162:1454:e:div:ete", children: [ 40717 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta55", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta55": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:154:11:6201:295:e:div:e", children: /* @__PURE__ */ i( 40718 a, 40719 { 40720 _fgT: Le, 40721 _fgS: "b9ta56", 40722 _fgB: 1790697589540, 40723 src: Fy, 40724 alt: "Rider using mobile app", 40725 className: "w-full h-full object-cover", 40726 "data-fg-b9ta56": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:155:13:6314:165:e:ImageWithFallback::::::BDpS" 40727 } 40728 ) }),
40729 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta57", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta57": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:161:11:6507:1094:e:div:etetete", children: [ 40730 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta58", _fgB: 1790697589540, color: je, "data-fg-b9ta58": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:162:13:6558:60:e:SectionLabel:t:::::Kux", children: "Rider Self-Service" }), 40731 /* @__PURE__ */ i( 40732 a, 40733 { 40734 _fgT: "h2", 40735 _fgS: "b9ta60", 40736 _fgB: 1790697589540, 40737 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40738 style: { fontSize: "17px", fontWeight: 700 }, 40739 "data-fg-b9ta60": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:163:13:6631:217:e:h2:t", 40740 children: "Let Riders Help Themselves" 40741 } 40742 ), 40743 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta62", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta62": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:169:13:6861:261:e:p:t", children: "The Where's My Ride app, Transigo web portal, and IVR phone system let riders book, confirm, cancel, and track rides without calling in." }),
40744 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta64", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta64": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:173:13:7135:449:e:ul:etetete", children: [ 40745 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta65", _fgB: 1790697589540, color: je, "data-fg-b9ta65": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:174:15:7220:82:e:Bullet:t:::::CGOE", children: "Book, confirm, or cancel via app, web portal, or IVR" }), 40746 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta67", _fgB: 1790697589540, color: je, "data-fg-b9ta67": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:175:15:7317:78:e:Bullet:t:::::CGOE", children: "Real-time vehicle tracking and ETA notifications" }), 40747 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta69", _fgB: 1790697589540, color: je, "data-fg-b9ta69": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:176:15:7410:72:e:Bullet:t:::::CGOE", children: "Accessible for all ages and ability levels" }),
40748 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta71", _fgB: 1790697589540, color: je, "data-fg-b9ta71": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:177:15:7497:69:e:Bullet:t:::::CGOE", children: "Reduces call center volume and no-shows" }) 40749 ] }) 40750 ] }) 40751 ] }), 40752 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta74", _fgB: 1790697589540, className: "border-t border-slate-200", "data-fg-b9ta74": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:183:9:7650:45:e:div" }), 40753 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta76", _fgB: 1790697589540, className: "flex gap-5", "data-fg-b9ta76": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:186:9:7750:1776:e:div:ete", children: [ 40754 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta77", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta77": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:187:11:7789:363:e:div:e", children: /* @__PURE__ */ i( 40755 a, 40756 { 40757 _fgT: Le, 40758 _fgS: "b9ta78", 40759 _fgB: 1790697589540, 40760 src: Ry, 40761 alt: "Eligibility management program dashboard", 40762 className: "w-full h-full object-cover", 40763 style: { maxHeight: "180px" }, 40764 "data-fg-b9ta78": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:188:13:7902:233:e:ImageWithFallback::::::BDpS" 40765 } 40766 ) }),
40767 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta79", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta79": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:195:11:8163:1348:e:div:etetete", children: [ 40768 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta80", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta80": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:196:13:8214:67:e:SectionLabel:t:::::Kux", children: "Eligibility Management" }), 40769 /* @__PURE__ */ i( 40770 a, 40771 { 40772 _fgT: "h2", 40773 _fgS: "b9ta82", 40774 _fgB: 1790697589540, 40775 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40776 style: { fontSize: "17px", fontWeight: 700 }, 40777 "data-fg-b9ta82": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:197:13:8294:229:e:h2:t", 40778 children: "Flexible Eligibility, Fully Integrated" 40779 } 40780 ), 40781 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta84", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta84": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:203:13:8536:313:e:p:t", children: "Can be deployed as a standalone module or fully integrated with scheduling â configured to your agency's specific rules for geography, rider needs, and service constraints." }),
40782 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta86", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta86": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:208:13:8862:632:e:ul:etetetete", children: [ 40783 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta87", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta87": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:209:15:8947:98:e:Bullet:t:::::CGOE", children: "Easy online rider application process, integrated with scheduling" }), 40784 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta89", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta89": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:210:15:9060:102:e:Bullet:t:::::CGOE", children: "Configure eligibility constraints by rider needs, geography, and more" }), 40785 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta91", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta91": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:211:15:9177:110:e:Bullet:t:::::CGOE", children: "Alerts riders and administrators to renewals, expirations, and status changes" }),
40786 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta93", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta93": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:212:15:9302:88:e:Bullet:t:::::CGOE", children: "Customizable forms, reports, and application monitoring" }), 40787 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta95", _fgB: 1790697589540, color: "#14B8A6", "data-fg-b9ta95": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:213:15:9405:71:e:Bullet:t:::::CGOE", children: "Can be deployed as a standalone system" }) 40788 ] }) 40789 ] }) 40790 ] }) 40791 ] }), 40792 /* @__PURE__ */ c( 40793 a, 40794 { 40795 _fgT: "div", 40796 _fgS: "b9ta98", 40797 _fgB: 1790697589540, 40798 className: "px-10 py-2.5 flex items-center justify-between", 40799 style: { backgroundColor: c5 }, 40800 "data-fg-b9ta98": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:220:7:9590:352:e:div:ete", 40801 children: [ 40802 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta99", _fgB: 1790697589540, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-b9ta99": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:224:9:9720:102:e:span:t", children: "www.ITCurves.AI" }),
40803 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta101", _fgB: 1790697589540, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-b9ta101": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:227:9:9831:98:e:span:t", children: "Page 1 of 2" }) 40804 ] 40805 } 40806 ) 40807 ] }); 40808} 40809function jy() { 40810 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta103", _fgB: 1790697589540, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-b9ta103": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:286:5:11248:9547:e:div:xtetxtetxtetxtetxtetxtetxtetxte:1", children: [ 40811 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta105", _fgB: 1790697589540, className: "px-10 pt-8 flex gap-5", "data-fg-b9ta105": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:288:7:11410:1518:e:div:ete", children: [ 40812 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta106", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta106": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:289:9:11458:1089:e:div:etetete", children: [
40813 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta107", _fgB: 1790697589540, color: je, "data-fg-b9ta107": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:290:11:11507:71:e:SectionLabel:t:::::Kux", children: "Real-Time Tracking & Dispatch" }), 40814 /* @__PURE__ */ i( 40815 a, 40816 { 40817 _fgT: "h2", 40818 _fgS: "b9ta109", 40819 _fgB: 1790697589540, 40820 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40821 style: { fontSize: "17px", fontWeight: 700 }, 40822 "data-fg-b9ta109": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:291:11:11589:224:e:h2:t", 40823 children: "See Every Vehicle, Every Ride, in Real Time" 40824 } 40825 ), 40826 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta111", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta111": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:297:11:11824:263:e:p:t", children: "Dispatchers see every paratransit vehicle on a live map with real-time status. Late-pickup alerts and accurate ETAs are sent directly to riders." }),
40827 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta113", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta113": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:301:11:12098:434:e:ul:etetete", children: [ 40828 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta114", _fgB: 1790697589540, color: je, "data-fg-b9ta114": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:302:13:12181:73:e:Bullet:t:::::CGOE", children: "Live map view with real-time vehicle status" }), 40829 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta116", _fgB: 1790697589540, color: je, "data-fg-b9ta116": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:303:13:12267:73:e:Bullet:t:::::CGOE", children: "Automatic late-pickup alerts to dispatchers" }), 40830 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta118", _fgB: 1790697589540, color: je, "data-fg-b9ta118": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:304:13:12353:71:e:Bullet:t:::::CGOE", children: "Accurate ETA notifications sent to riders" }), 40831 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta120", _fgB: 1790697589540, color: je, "data-fg-b9ta120": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:305:13:12437:79:e:Bullet:t:::::CGOE", children: "Historical trip playback for complaint resolution" }) 40832 ] }) 40833 ] }),
40834 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta122", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta122": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:308:9:12556:359:e:div:e", children: /* @__PURE__ */ i( 40835 a, 40836 { 40837 _fgT: Le, 40838 _fgS: "b9ta123", 40839 _fgB: 1790697589540, 40840 src: e9, 40841 alt: "Real-time fleet tracking map showing vehicle locations", 40842 className: "w-full h-full object-cover", 40843 style: { maxHeight: "180px" }, 40844 "data-fg-b9ta123": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:309:11:12667:233:e:ImageWithFallback::::::BDpS" 40845 } 40846 ) }) 40847 ] }), 40848 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta125", _fgB: 1790697589540, className: "px-10 pt-5", "data-fg-b9ta125": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:319:7:12958:95:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta126", _fgB: 1790697589540, className: "border-t border-slate-200", "data-fg-b9ta126": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:320:9:12995:45:e:div" }) }), 40849 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta128", _fgB: 1790697589540, className: "px-10 pt-5 flex gap-5", "data-fg-b9ta128": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:324:7:13132:1470:e:div:ete", children: [
40850 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta129", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta129": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:325:9:13180:340:e:div:e", children: /* @__PURE__ */ i( 40851 a, 40852 { 40853 _fgT: Le, 40854 _fgS: "b9ta130", 40855 _fgB: 1790697589540, 40856 src: li, 40857 alt: "Driver using tablet for navigation", 40858 className: "w-full h-full object-cover", 40859 style: { maxHeight: "180px" }, 40860 "data-fg-b9ta130": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:326:11:13291:214:e:ImageWithFallback::::::BDpS" 40861 } 40862 ) }), 40863 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta131", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta131": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:333:9:13529:1060:e:div:etetete", children: [ 40864 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta132", _fgB: 1790697589540, "data-fg-b9ta132": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:334:11:13578:49:e:SectionLabel:t:::::Kux", children: "Driver App â Drivego" }),
40865 /* @__PURE__ */ i( 40866 a, 40867 { 40868 _fgT: "h2", 40869 _fgS: "b9ta134", 40870 _fgB: 1790697589540, 40871 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40872 style: { fontSize: "17px", fontWeight: 700 }, 40873 "data-fg-b9ta134": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:335:11:13638:227:e:h2:t", 40874 children: "Digital Manifests on Any iOS or Android Device" 40875 } 40876 ), 40877 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta136", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta136": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:341:11:13876:261:e:p:t", children: "Drivers receive manifests, turn-by-turn navigation, and rider info on any iOS or Android tablet or smartphone. No proprietary hardware needed." }), 40878 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta138", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta138": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:345:11:14148:426:e:ul:etetete", children: [
40879 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta139", _fgB: 1790697589540, "data-fg-b9ta139": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:346:13:14231:83:e:Bullet:t:::::CGOE", children: "iOS or Android tablets or smartphones on LTE, 5G, or any data plan" }), 40880 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta141", _fgB: 1790697589540, "data-fg-b9ta141": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:347:13:14327:74:e:Bullet:t:::::CGOE", children: "Rider onboarding via facial recognition, QR, or Bluetooth" }), 40881 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta143", _fgB: 1790697589540, "data-fg-b9ta143": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:348:13:14414:67:e:Bullet:t:::::CGOE", children: "Manifest updates pushed in real time from dispatch" }), 40882 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta145", _fgB: 1790697589540, "data-fg-b9ta145": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:349:13:14494:64:e:Bullet:t:::::CGOE", children: "Restricted actions to reduce distracted driving" }) 40883 ] }) 40884 ] }) 40885 ] }), 40886 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta148", _fgB: 1790697589540, className: "px-10 pt-5", "data-fg-b9ta148": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:355:7:14632:95:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta149", _fgB: 1790697589540, className: "border-t border-slate-200", "data-fg-b9ta149": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:356:9:14669:45:e:div" }) }), 40887 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta151", _fgB: 1790697589540, className: "px-10 pt-5 flex gap-5", "data-fg-b9ta151": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:360:7:14810:1724:e:div:ete", children: [
40888 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta152", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta152": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:361:9:14858:1304:e:div:etetete", children: [ 40889 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta153", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta153": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:362:11:14907:59:e:SectionLabel:t:::::Kux", children: "Fare & Payment" }), 40890 /* @__PURE__ */ i( 40891 a, 40892 { 40893 _fgT: "h2", 40894 _fgS: "b9ta155", 40895 _fgB: 1790697589540, 40896 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40897 style: { fontSize: "17px", fontWeight: 700 }, 40898 "data-fg-b9ta155": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:363:11:14977:223:e:h2:t", 40899 children: "Seamless Fare Collection, No Cash Required" 40900 } 40901 ), 40902 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta157", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta157": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:369:11:15211:297:e:p:t", children: "Every rider gets a digital wallet to manage funds and payment methods â automatically charged at boarding after positive identification, with no driver involvement." }),
40903 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta159", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta159": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:374:11:15519:628:e:ul:etetetete", children: [ 40904 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta160", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta160": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:375:13:15602:108:e:Bullet:t:::::CGOE", children: "Digital wallet linked to each rider profile for payment methods and balance" }), 40905 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta162", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta162": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:376:13:15723:100:e:Bullet:t:::::CGOE", children: "Deposit funds via app, phone, or in-person with credit card or cash" }), 40906 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta164", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta164": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:377:13:15836:84:e:Bullet:t:::::CGOE", children: "Balance and receipt history always visible to rider" }),
40907 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta166", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta166": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:378:13:15933:98:e:Bullet:t:::::CGOE", children: "Fare automatically charged at boarding after rider identification" }), 40908 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta168", _fgB: 1790697589540, color: "#F97316", "data-fg-b9ta168": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:379:13:16044:87:e:Bullet:t:::::CGOE", children: "Splits fare and copay between rider and funding source" }) 40909 ] }) 40910 ] }), 40911 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta170", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta170": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:382:9:16171:350:e:div:e", children: /* @__PURE__ */ i( 40912 a, 40913 { 40914 _fgT: Le, 40915 _fgS: "b9ta171", 40916 _fgB: 1790697589540, 40917 src: Dy, 40918 alt: "Digital wallet payment management interface", 40919 className: "w-full h-full object-cover", 40920 style: { maxHeight: "180px" }, 40921 "data-fg-b9ta171": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:383:11:16282:224:e:ImageWithFallback::::::BDpS" 40922 } 40923 ) }) 40924 ] }), 40925 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta173", _fgB: 1790697589540, className: "px-10 pt-5", "data-fg-b9ta173": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:393:7:16564:95:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta174", _fgB: 1790697589540, className: "border-t border-slate-200", "data-fg-b9ta174": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:394:9:16601:45:e:div" }) }), 40926 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta176", _fgB: 1790697589540, className: "px-10 pt-5 pb-4 flex gap-5", "data-fg-b9ta176": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:398:7:16754:1466:e:div:ete", children: [
40927 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta177", _fgB: 1790697589540, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-b9ta177": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:399:9:16807:349:e:div:e", children: /* @__PURE__ */ i( 40928 a, 40929 { 40930 _fgT: Le, 40931 _fgS: "b9ta178", 40932 _fgB: 1790697589540, 40933 src: Ey, 40934 alt: "ITCurves dispatch and scheduling interface", 40935 className: "w-full h-full object-cover", 40936 style: { maxHeight: "180px" }, 40937 "data-fg-b9ta178": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:400:11:16918:223:e:ImageWithFallback::::::BDpS" 40938 } 40939 ) }), 40940 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta179", _fgB: 1790697589540, className: "flex-1 flex flex-col", "data-fg-b9ta179": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:407:9:17165:1042:e:div:etetete", children: [ 40941 /* @__PURE__ */ i(a, { _fgT: $1, _fgS: "b9ta180", _fgB: 1790697589540, "data-fg-b9ta180": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:408:11:17214:55:e:SectionLabel:t:::::Kux", children: "ADA Compliance & Reporting" }),
40942 /* @__PURE__ */ i( 40943 a, 40944 { 40945 _fgT: "h2", 40946 _fgS: "b9ta182", 40947 _fgB: 1790697589540, 40948 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 40949 style: { fontSize: "17px", fontWeight: 700 }, 40950 "data-fg-b9ta182": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:409:11:17280:218:e:h2:t", 40951 children: "Stay Audit-Ready Without the Busywork" 40952 } 40953 ), 40954 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta184", _fgB: 1790697589540, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-b9ta184": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:415:11:17509:248:e:p:t", children: "Every trip automatically enforces ADA rules. NTD and FTA reports generate with one click instead of weeks of manual data pulling." }), 40955 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "b9ta186", _fgB: 1790697589540, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-b9ta186": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:419:11:17768:424:e:ul:etetete", children: [
40956 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta187", _fgB: 1790697589540, "data-fg-b9ta187": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:420:13:17851:79:e:Bullet:t:::::CGOE", children: "Rider eligibility and mobility needs factored into every route" }), 40957 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta189", _fgB: 1790697589540, "data-fg-b9ta189": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:421:13:17943:78:e:Bullet:t:::::CGOE", children: "Pickup windows, max ride times, and vehicle capacity enforced" }), 40958 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta191", _fgB: 1790697589540, "data-fg-b9ta191": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:422:13:18034:56:e:Bullet:t:::::CGOE", children: "One-click NTD and FTA report generation" }), 40959 /* @__PURE__ */ i(a, { _fgT: W, _fgS: "b9ta193", _fgB: 1790697589540, "data-fg-b9ta193": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:423:13:18103:73:e:Bullet:t:::::CGOE", children: "Funding source billing and Medicaid ID tracking built in" }) 40960 ] }) 40961 ] }) 40962 ] }), 40963 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta196", _fgB: 1790697589540, className: "mt-auto", "data-fg-b9ta196": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:429:7:18273:2511:e:div:e", children: /* @__PURE__ */ c( 40964 a, 40965 { 40966 _fgT: "div", 40967 _fgS: "b9ta197", 40968 _fgB: 1790697589540, 40969 className: "px-10 py-5 text-white relative overflow-hidden", 40970 style: { background: `linear-gradient(135deg, ${c5} 0%, #132B44 100%)` }, 40971 "data-fg-b9ta197": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:430:9:18307:2464:e:div:xtetetxte", 40972 children: [
40973 /* @__PURE__ */ i( 40974 a, 40975 { 40976 _fgT: "div", 40977 _fgS: "b9ta199", 40978 _fgB: 1790697589540, 40979 className: "absolute -top-10 -right-10 w-48 h-48 rounded-full opacity-15", 40980 style: { background: `radial-gradient(circle, ${b1} 0%, transparent 70%)` }, 40981 "data-fg-b9ta199": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:435:11:18521:193:e:div" 40982 } 40983 ), 40984 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta200", _fgB: 1790697589540, className: "flex items-center justify-between relative z-10", "data-fg-b9ta200": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:440:11:18726:1075:e:div:ete", children: [ 40985 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta201", _fgB: 1790697589540, "data-fg-b9ta201": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:441:13:18804:641:e:div:ete", children: [ 40986 /* @__PURE__ */ c( 40987 a, 40988 { 40989 _fgT: "h3", 40990 _fgS: "b9ta202", 40991 _fgB: 1790697589540, 40992 className: "font-[Space_Grotesk] mb-1", 40993 style: { fontSize: "18px", fontWeight: 700 }, 40994 "data-fg-b9ta202": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:442:15:18824:341:e:h3:tste", 40995 children: [ 40996 "See Paratransit Tools", 40997 " ",
40998 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta205", _fgB: 1790697589540, className: "italic font-[Playfair_Display]", style: { color: b1 }, "data-fg-b9ta205": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:447:17:19019:126:e:span:t", children: "In Action." }) 40999 ] 41000 } 41001 ), 41002 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "b9ta207", _fgB: 1790697589540, className: "text-white/70", style: { fontSize: "10.5px" }, "data-fg-b9ta207": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:451:15:19180:246:e:p:t", children: "We'll walk you through ERSA scheduling, rider self-service, real-time tracking, and compliance reporting using your actual operations." }) 41003 ] }), 41004 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "b9ta209", _fgB: 1790697589540, className: "flex flex-col items-end gap-1.5 flex-shrink-0 ml-6", "data-fg-b9ta209": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:457:13:19459:325:e:div:e", children: /* @__PURE__ */ i( 41005 a, 41006 { 41007 _fgT: "div", 41008 _fgS: "b9ta210", 41009 _fgB: 1790697589540, 41010 className: "px-5 py-2 rounded-full text-white", 41011 style: { backgroundColor: je, fontSize: "11px", fontWeight: 600 }, 41012 "data-fg-b9ta210": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:458:15:19542:223:e:div:t", 41013 children: "Schedule a Meeting" 41014 } 41015 ) }) 41016 ] }),
41017 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta213", _fgB: 1790697589540, className: "flex items-center gap-6 mt-4 pt-3 border-t border-white/10 relative z-10", "data-fg-b9ta213": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:468:11:19847:909:e:div:etete", children: [ 41018 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "b9ta214", _fgB: 1790697589540, src: A1, alt: "IT Curves", className: "h-6 opacity-80", "data-fg-b9ta214": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:469:13:19950:61:e:img" }), 41019 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta215", _fgB: 1790697589540, className: "flex items-center gap-5", "data-fg-b9ta215": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:470:13:20024:588:e:div:etete", children: [ 41020 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "b9ta216", _fgB: 1790697589540, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-b9ta216": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:471:15:20080:162:e:span:et", children: [ 41021 /* @__P
41021URE__ */ i(a, { _fgT: J1, _fgS: "b9ta217", _fgB: 1790697589540, size: 11, "data-fg-b9ta217": ":0:node_modules/lucide-react:472:17:20185:19:e:Globe::::::Cyd3" }), 41022 " www.ITCurves.AI" 41023 ] }), 41024 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "b9ta219", _fgB: 1790697589540, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-b9ta219": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:474:15:20257:159:e:span:et", children: [ 41025 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "b9ta220", _fgB: 1790697589540, size: 11, "data-fg-b9ta220": ":0:node_modules/lucide-react:475:17:20362:19:e:Phone::::::DmpI" }), 41026 " 301-208-2222" 41027 ] }), 41028 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "b9ta222", _fgB: 1790697589540, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-b9ta222": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:477:15:20431:162:e:span:et", children: [ 41029 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "b9ta223", _fgB: 1790697589540, size: 11, "data-fg-b9ta223": ":0:node_modules/lucide-react:478:17:20536:18:e:Mail::::::D4VR" }), 41030 " [email protected]" 41031 ] }) 41032 ] }),
41033 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "b9ta225", _fgB: 1790697589540, className: "ml-auto text-white/40", style: { fontSize: "8px" }, "data-fg-b9ta225": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:481:13:20625:114:e:span:t", children: "Page 2 of 2" }) 41034 ] }) 41035 ] 41036 } 41037 ) }) 41038 ] }); 41039} 41040function Oy() { 41041 return /* @__PURE__ */ c(C, { children: [ 41042 /* @__PURE__ */ i("style", { "data-fg-b9ta229": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:498:7:21095:1230:e:style:s", children: ` 41043 .flyer-wrapper-para { 41044 display: flex; 41045 flex-direction: column; 41046 align-items: center; 41047 gap: 40px; 41048 padding: 100px 20px 40px; 41049 background: #e5e7eb; 41050 min-height: 100vh; 41051 } 41052 41053 .flyer-page { 41054 width: 8.5in; 41055 height: 11in; 41056 background: white; 41057 box-shadow: 0 4px 24px rgba(0,0,0,0.15); 41058 overflow: hidden; 41059 flex-shrink: 0; 41060 } 41061 41062 @media print { 41063 @page { 41064 size: 8.5in 11in; 41065 margin: 0; 41066 } 41067 41068 body, html { 41069 margin: 0 !important; 41070 padding: 0 !important; 41071 background: white !important; 41072 } 41073 41074 .flyer-wrapper-para { 41075 padding: 0; 41076 gap: 0; 41077 background: white; 41078 } 41079 41080 .flyer-page { 41081 box-shadow: none; 41082 page-break-after: always; 41083 break-after: page; 41084 } 41085 41086 .flyer-page:last-child { 41087 page-break-after: avoid; 41088 break-after: avoid; 41089 } 41090 41091 nav, .chatbot-wrapper, footer, .no-print { 41092 display: none !important; 41093 } 41094 } 41095 ` }), 41096 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "b9ta231", _fgB: 1790697589540, className: "flyer-wrapper-para", "data-fg-b9ta231": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:552:7:22333:89:e:div:ete", children: [
41097 /* @__PURE__ */ i(a, { _fgT: zy, _fgS: "b9ta232", _fgB: 1790697589540, "data-fg-b9ta232": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:553:9:22378:11:e:PageOne::::::kR7" }), 41098 /* @__PURE__ */ i(a, { _fgT: jy, _fgS: "b9ta233", _fgB: 1790697589540, "data-fg-b9ta233": ":0:/src/app/pages/ParatransitFlyerPageV3.tsx:554:9:22398:11:e:PageTwo::::::lmH" }) 41099 ] }) 41100 ] }); 41101} 41102const Vy = globalThis.__GLOBALS__.getAssetURL("1a74c6ad7cbedc89e26a7069c607a496d922deec.png"), Hy = globalThis.__GLOBALS__.getAssetURL("84aa94c2bb1aae1f5f88ed523af68cf3ca80730b.png"), Zy = globalThis.__GLOBALS__.getAssetURL("30709bfc8e6f6f728afec88410c144d664720d75.png"), Wy = globalThis.__GLOBALS__.getAssetURL("f574dd29ff31b1ec443a6372bf5d2f4ee20c69ae.png"), qe = "#EFBB0F", l5 = "#0B1B2B", Pe = "#0056B3", R1 = "#34D399", D1 = "#A855F7"; 41103function Q({ children: t, color: e = qe }) { 41104 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bj170", _fgB: 1790697589607, _fgD: !0, className: "flex items-start gap-2", "data-fg-bj170": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:41:5:1295:163:e:li:ete:1", children: [ 41105 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "bj171", _fgB: 1790697589607, size: 14, className: "mt-0.5 flex-shrink-0", style: { color: e }, "data-fg-bj171": ":0:node_modules/lucide-react:42:7:1341:77:e:CheckCircle2::::::CELI" }), 41106 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj172", _fgB: 1790697589607, "data-fg-bj172": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:43:7:1425:23:e:span:c", children: t }) 41107 ] }); 41108} 41109function bt({ children: t, color: e = qe }) { 41110 return /* @__PURE__ */ i( 41111 a, 41112 { 41113 _fgT: "span", 41114 _fgS: "bj174", 41115 _fgB: 1790697589607, 41116 _fgD: !0, 41117 className: "tracking-[0.15em] uppercase block mb-1", 41118 style: { color: e, fontSize: "9px", fontWeight: 700 }, 41119 "data-fg-bj174": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:50:5:1575:155:e:span:c:1", 41120 children: t 41121 } 41122 ); 41123} 41124function $y() { 41125 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj176", _fgB: 1790697589607, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-bj176": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:64:5:1924:8201:e:div:xtetxtetxte:1", children: [ 41126 /* @__PURE__ */ c( 41127 a, 41128 { 41129 _fgT: "div", 41130 _fgS: "bj178", 41131 _fgB: 1790697589607, 41132 className: "relative px-10 pt-8 pb-7 text-white flex flex-col", 41133 style: { background: `linear-gradient(135deg, ${l5} 0%, #132B44 100%)` }, 41134 "data-fg-bj178": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:66:7:2045:2608:e:div:xtetetxtetxtetxtetetxte", 41135 children: [
41136 /* @__PURE__ */ i( 41137 a, 41138 { 41139 _fgT: "div", 41140 _fgS: "bj1710", 41141 _fgB: 1790697589607, 41142 className: "absolute -top-20 -right-20 w-72 h-72 rounded-full opacity-10", 41143 style: { background: `radial-gradient(circle, ${qe} 0%, transparent 70%)` }, 41144 "data-fg-bj1710": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:71:9:2255:187:e:div" 41145 } 41146 ), 41147 /* @__PURE__ */ i( 41148 a, 41149 { 41150 _fgT: "div", 41151 _fgS: "bj1711", 41152 _fgB: 1790697589607, 41153 className: "absolute -bottom-16 -left-16 w-56 h-56 rounded-full opacity-8", 41154 style: { background: `radial-gradient(circle, ${D1} 0%, transparent 70%)` }, 41155 "data-fg-bj1711": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:75:9:2451:190:e:div" 41156 } 41157 ), 41158 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1713", _fgB: 1790697589607, className: "flex items-center justify-between relative z-10 mb-4", "data-fg-bj1713": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:81:9:2720:374:e:div:ete", children: [
41159 /* @__PURE__ */ i( 41160 a, 41161 { 41162 _fgT: "span", 41163 _fgS: "bj1714", 41164 _fgB: 1790697589607, 41165 className: "tracking-[0.2em] uppercase", 41166 style: { color: qe, fontSize: "20px", fontWeight: 700, letterSpacing: "0.15em" }, 41167 "data-fg-bj1714": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:82:11:2801:217:e:span:t", 41168 children: "Microtransit Solutions" 41169 } 41170 ), 41171 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "bj1716", _fgB: 1790697589607, src: A1, alt: "IT Curves", className: "h-8", "data-fg-bj1716": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:88:11:3029:50:e:img" }) 41172 ] }), 41173 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1718", _fgB: 1790697589607, className: "relative z-10 w-16 h-[3px] rounded-full mb-4", style: { backgroundColor: qe }, "data-fg-bj1718": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:92:9:3144:98:e:div" }), 41174 /* @__PURE__ */ c( 41175 a, 41176 { 41177 _fgT: "h1", 41178 _fgS: "bj1720", 41179 _fgB: 1790697589607, 41180 className: "relative z-10 font-[Space_Grotesk] leading-[1.1] mb-3", 41181 style: { fontSize: "30px", fontWeight: 700 }, 41182 "data-fg-bj1720": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:95:9:3282:336:e:h1:tete", 41183 children: [ 41184 "Run One Network.",
41185 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bj1722", _fgB: 1790697589607, "data-fg-bj1722": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:100:11:3465:6:e:br" }), 41186 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj1723", _fgB: 1790697589607, className: "italic font-[Playfair_Display]", style: { color: qe }, "data-fg-bj1723": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:101:11:3482:122:e:span:t", children: "Serve Every Rider." }) 41187 ] 41188 } 41189 ), 41190 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj1725", _fgB: 1790697589607, className: "relative z-10 text-white/80 max-w-lg leading-snug", style: { fontSize: "11.5px" }, "data-fg-bj1725": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:106:9:3628:413:e:p:t", children: "Paratransit, fixed route, and on-demand â most agencies run them as separate operations with separate fleets and budgets. IT Curves ties them together into a single commingled network where every vehicle, every route, and every rider is managed from one platform." }),
41191 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1728", _fgB: 1790697589607, className: "relative z-10 flex gap-6 mt-4 pt-3 border-t border-white/15", "data-fg-bj1728": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:114:9:4086:554:e:div:x", children: [ 41192 "Commingled Fleets", 41193 "First-Mile Last-Mile", 41194 "Full Simulation Before Launch" 41195 ].map((t) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1730", _fgB: 1790697589607, className: "flex items-center gap-1.5", "data-fg-bj1730": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:120:13:4332:279:e:div:ete", children: [ 41196 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "bj1731", _fgB: 1790697589607, size: 11, style: { color: qe }, "data-fg-bj1731": ":0:node_modules/lucide-react:121:15:4402:50:e:CheckCircle2::::::CELI" }), 41197 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj1732", _fgB: 1790697589607, className: "text-white/70", style: { fontSize: "9.5px", fontWeight: 600 }, "data-fg-bj1732": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:122:15:4467:125:e:span:x", children: t }) 41198 ] }, t)) }) 41199 ] 41200 } 41201 ), 41202 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1735", _fgB: 1790697589607, className: "flex-1 px-10 py-6 flex flex-col gap-5", "data-fg-bj1735": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:131:7:4698:5013:e:div:xtetxtetxtetxtetxte", children: [
41203 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1737", _fgB: 1790697589607, className: "flex gap-5", "data-fg-bj1737": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:133:9:4796:1538:e:div:etxte", children: [ 41204 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1738", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj1738": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:134:11:4835:1062:e:div:etetete", children: [ 41205 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj1739", _fgB: 1790697589607, "data-fg-bj1739": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:135:13:4886:40:e:SectionLabel:t:::::k9G", children: "Commingling" }), 41206 /* @__PURE__ */ i( 41207 a, 41208 { 41209 _fgT: "h2", 41210 _fgS: "bj1741", 41211 _fgB: 1790697589607, 41212 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41213 style: { fontSize: "17px", fontWeight: 700 }, 41214 "data-fg-bj1741": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:136:13:4939:221:e:h2:t", 41215 children: "One Fleet. Every Service Type." 41216 } 41217 ),
41218 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj1743", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj1743": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:142:13:5173:272:e:p:t", children: "Paratransit, fixed route, and on-demand trips dispatched through one system so vehicles are never sitting idle when another service needs capacity." }), 41219 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj1745", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj1745": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:146:13:5458:422:e:ul:etetete", children: [ 41220 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1746", _fgB: 1790697589607, "data-fg-bj1746": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:147:15:5543:74:e:Bullet:t:::::D8B5", children: "Routing picks the best vehicle regardless of service type" }), 41221 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1748", _fgB: 1790697589607, "data-fg-bj1748": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:148:15:5632:80:e:Bullet:t:::::D8B5", children: "Rider eligibility enforced automatically across shared vehicles" }),
41222 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1750", _fgB: 1790697589607, "data-fg-bj1750": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:149:15:5727:51:e:Bullet:t:::::D8B5", children: "Single dispatch view for all modes" }), 41223 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1752", _fgB: 1790697589607, "data-fg-bj1752": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:150:15:5793:69:e:Bullet:t:::::D8B5", children: "Maximize fleet utilization and reduce deadhead miles" }) 41224 ] }) 41225 ] }), 41226 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1755", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-bj1755": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:154:11:5952:367:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1756", _fgB: 1790697589607, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-bj1756": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:155:13:6033:269:e:div:e", children: /* @__PURE__ */ i( 41227 a, 41228 { 41229 _fgT: "img", 41230 _fgS: "bj1757", 41231 _fgB: 1790697589607, 41232 src: e9, 41233 alt: "Vehicle Info Map View", 41234 className: "w-full h-full object-cover", 41235 "data-fg-bj1757": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:156:15:6126:157:e:img" 41236 } 41237 ) }) }) 41238 ] }),
41239 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1759", _fgB: 1790697589607, className: "border-t border-slate-200", "data-fg-bj1759": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:166:9:6368:45:e:div" }), 41240 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1761", _fgB: 1790697589607, className: "flex gap-5", "data-fg-bj1761": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:169:9:6454:1551:e:div:ete", children: [ 41241 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1762", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 rounded-lg overflow-hidden border border-slate-200 shadow-sm", style: { maxHeight: "160px" }, "data-fg-bj1762": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:170:11:6493:332:e:div:e", children: /* @__PURE__ */ i( 41242 a, 41243 { 41244 _fgT: "img", 41245 _fgS: "bj1763", 41246 _fgB: 1790697589607, 41247 src: Vy, 41248 alt: "Route Coverage Zones Management", 41249 className: "w-full h-full object-cover object-top", 41250 "data-fg-bj1763": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:171:13:6637:171:e:img" 41251 } 41252 ) }),
41253 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1764", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj1764": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:177:11:6836:1154:e:div:etetete", children: [ 41254 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj1765", _fgB: 1790697589607, color: Pe, "data-fg-bj1765": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:178:13:6887:50:e:SectionLabel:t:::::k9G", children: "Coverage" }), 41255 /* @__PURE__ */ i( 41256 a, 41257 { 41258 _fgT: "h2", 41259 _fgS: "bj1767", 41260 _fgB: 1790697589607, 41261 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41262 style: { fontSize: "17px", fontWeight: 700 }, 41263 "data-fg-bj1767": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:179:13:6950:230:e:h2:t", 41264 children: "Reach Every Corner of Your Service Area" 41265 } 41266 ), 41267 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj1769", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj1769": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:185:13:7193:264:e:p:t", children: "On-demand microtransit fills the gaps between fixed route corridors, connecting riders in low-density neighborhoods to the broader network." }),
41268 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj1771", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj1771": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:189:13:7470:503:e:ul:etetete", children: [ 41269 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1772", _fgB: 1790697589607, color: Pe, "data-fg-bj1772": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:190:15:7555:93:e:Bullet:t:::::D8B5", children: "Flexible stops at medical centers, grocery stores, transit hubs" }), 41270 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1774", _fgB: 1790697589607, color: Pe, "data-fg-bj1774": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:191:15:7663:84:e:Bullet:t:::::D8B5", children: "Book via Where's My Ride app, web portal, or IVR phone" }), 41271 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1776", _fgB: 1790697589607, color: Pe, "data-fg-bj1776": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:192:15:7762:91:e:Bullet:t:::::D8B5", children: "Platform finds the best connection across all available modes" }),
41272 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1778", _fgB: 1790697589607, color: Pe, "data-fg-bj1778": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:193:15:7868:87:e:Bullet:t:::::D8B5", children: "Convert underperforming fixed routes into on-demand zones" }) 41273 ] }) 41274 ] }) 41275 ] }), 41276 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj1781", _fgB: 1790697589607, className: "border-t border-slate-200", "data-fg-bj1781": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:199:9:8039:45:e:div" }), 41277 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1783", _fgB: 1790697589607, className: "flex gap-5", "data-fg-bj1783": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:202:9:8127:1571:e:div:ete", children: [ 41278 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj1784", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj1784": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:203:11:8166:1127:e:div:etetete", children: [ 41279 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj1785", _fgB: 1790697589607, color: R1, "data-fg-bj1785": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:204:13:8217:53:e:SectionLabel:t:::::k9G", children: "Simulation" }),
41280 /* @__PURE__ */ i( 41281 a, 41282 { 41283 _fgT: "h2", 41284 _fgS: "bj1787", 41285 _fgB: 1790697589607, 41286 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41287 style: { fontSize: "17px", fontWeight: 700 }, 41288 "data-fg-bj1787": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:205:13:8283:217:e:h2:t", 41289 children: "Test It Before You Fund It" 41290 } 41291 ), 41292 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj1789", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj1789": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:211:13:8513:256:e:p:t", children: "Run a full day's operation as a simulation before committing vehicles or drivers to a new zone. Present real numbers to your board." }), 41293 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj1791", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj1791": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:215:13:8782:494:e:ul:etetete", children: [
41294 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1792", _fgB: 1790697589607, color: R1, "data-fg-bj1792": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:216:15:8867:90:e:Bullet:t:::::D8B5", children: "Simulate vehicle counts, shift lengths, and zone boundaries" }), 41295 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1794", _fgB: 1790697589607, color: R1, "data-fg-bj1794": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:217:15:8972:81:e:Bullet:t:::::D8B5", children: "Compare results side by side across configurations" }), 41296 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1796", _fgB: 1790697589607, color: R1, "data-fg-bj1796": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:218:15:9068:93:e:Bullet:t:::::D8B5", children: "Load factor, idle time, cost per trip, service quality metrics" }), 41297 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj1798", _fgB: 1790697589607, color: R1, "data-fg-bj1798": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:219:15:9176:82:e:Bullet:t:::::D8B5", children: "Data-backed proposals for funding bodies and boards" }) 41298 ] }) 41299 ] }),
41300 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17100", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-bj17100": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:222:11:9304:379:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17101", _fgB: 1790697589607, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-bj17101": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:223:13:9385:281:e:div:e", children: /* @__PURE__ */ i( 41301 a, 41302 { 41303 _fgT: Le, 41304 _fgS: "bj17102", 41305 _fgB: 1790697589607, 41306 src: Zy, 41307 alt: "Simulation Dashboard", 41308 className: "w-full h-full object-cover", 41309 "data-fg-bj17102": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:224:15:9478:169:e:ImageWithFallback::::::BkmQ" 41310 } 41311 ) }) }) 41312 ] }) 41313 ] }), 41314 /* @__PURE__ */ c( 41315 a, 41316 { 41317 _fgT: "div", 41318 _fgS: "bj17104", 41319 _fgB: 1790697589607, 41320 className: "px-10 py-2.5 flex items-center justify-between", 41321 style: { backgroundColor: l5 }, 41322 "data-fg-bj17104": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:235:7:9762:352:e:div:ete", 41323 children: [
41324 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj17105", _fgB: 1790697589607, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-bj17105": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:239:9:9892:102:e:span:t", children: "www.ITCurves.AI" }), 41325 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj17107", _fgB: 1790697589607, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-bj17107": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:242:9:10003:98:e:span:t", children: "Page 1 of 2" }) 41326 ] 41327 } 41328 ) 41329 ] }); 41330} 41331const qy = [ 41332 { 41333 icon: I3, 41334 title: "Commingled Fleets", 41335 desc: "One dispatch system for paratransit, fixed route, and on-demand", 41336 color: qe 41337 }, 41338 { 41339 icon: Pt, 41340 title: "Zone-Based Dispatch", 41341 desc: "Flexible service zones with real-time demand-response routing", 41342 color: Pe 41343 }, 41344 { 41345 icon: F3, 41346 title: "Full Simulation", 41347 desc: "Test vehicle counts, zones, and costs before committing resources", 41348 color: R1 41349 }, 41350 { 41351 icon: Fe, 41352 title: "Rider Self-Service", 41353 desc: "Where's My Ride app, web portal, and IVR booking", 41354 color: Pe 41355 }, 41356 { 41357 icon: Ol, 41358 title: "Real-Time Tracking", 41359 desc: "Live vehicle map with ETAs and rider notifications", 41360 color: qe 41361 }, 41362 { 41363 icon: Xl, 41364 title: "Contactless Boarding", 41365 desc: "Contactless onboarding via facial recognition, QR, or Bluetooth", 41366 color: R1 41367 }, 41368 { 41369 icon: Te, 41370 title: "White-Label Deploy", 41371 desc: "Full brand customization â launch under your agency's name", 41372 color: D1 41373 } 41374]; 41375function Uy() { 41376 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17109", _fgB: 1790697589607, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-bj17109": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:328:5:12052:9539:e:div:xtetxtetxtetxtetxtetxtetxtetxte:1", children: [ 41377 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17111", _fgB: 1790697589607, className: "px-10 pt-6 pb-5 flex gap-5", "data-fg-bj17111": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:330:7:12197:1957:e:div:xtetxte", children: [
41378 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17113", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-bj17113": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:332:9:12283:669:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17114", _fgB: 1790697589607, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", style: { maxHeight: "160px" }, "data-fg-bj17114": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:333:11:12362:575:e:div:e", children: /* @__PURE__ */ i( 41379 a, 41380 { 41381 _fgT: Le, 41382 _fgS: "bj17115", 41383 _fgB: 1790697589607, 41384 src: "https://images.unsplash.com/photo-1759752393975-7ca7b302fcc6?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=M3w3Nzg4Nzd8MHwxfHNlYXJjaHwxfHxzb2Z0d2FyZSUyMHdvcmtmbG93JTIwYXV0b21hdGlvbiUyMGludGVyZmFjZXxlbnwxfHx8fDE3NzM3OTg5NzJ8MA&ixlib=rb-4.1.0&q=80&w=1080&utm_source=figma&utm_medium=referral", 41385 alt: "Automation Dashboard", 41386 className: "w-full h-full object-cover", 41387 "data-fg-bj17115": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:334:13:12484:436:e:ImageWithFallback::::::BkmQ" 41388 } 41389 ) }) }),
41390 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17117", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj17117": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:342:9:12988:1153:e:div:etetete", children: [ 41391 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj17118", _fgB: 1790697589607, color: D1, "data-fg-bj17118": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:343:11:13037:54:e:SectionLabel:t:::::k9G", children: "Automation" }), 41392 /* @__PURE__ */ i( 41393 a, 41394 { 41395 _fgT: "h2", 41396 _fgS: "bj17120", 41397 _fgB: 1790697589607, 41398 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41399 style: { fontSize: "17px", fontWeight: 700 }, 41400 "data-fg-bj17120": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:344:11:13102:223:e:h2:t", 41401 children: "From Request to Drop-Off. No Manual Steps." 41402 } 41403 ), 41404 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj17122", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj17122": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:350:11:13336:284:e:p:t", children: "Ride requests flow from the rider into routing and vehicle assignment with no dispatcher intervention. Contactless boarding logs trip data automatically." }),
41405 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj17124", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj17124": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:355:11:13631:495:e:ul:etetete", children: [ 41406 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17125", _fgB: 1790697589607, color: D1, "data-fg-bj17125": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:356:13:13714:91:e:Bullet:t:::::D8B5", children: "Zero-touch routing from rider request to vehicle assignment" }), 41407 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17127", _fgB: 1790697589607, color: D1, "data-fg-bj17127": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:357:13:13818:95:e:Bullet:t:::::D8B5", children: "Contactless onboarding via facial recognition, QR, or Bluetooth" }), 41408 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17129", _fgB: 1790697589607, color: D1, "data-fg-bj17129": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:358:13:13926:85:e:Bullet:t:::::D8B5", children: "Dispatch and driver tablets stay in sync in real time" }),
41409 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17131", _fgB: 1790697589607, color: D1, "data-fg-bj17131": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:359:13:14024:86:e:Bullet:t:::::D8B5", children: "No paperwork, no radio calls, no billing discrepancies" }) 41410 ] }) 41411 ] }) 41412 ] }), 41413 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17134", _fgB: 1790697589607, className: "px-10 pt-4", "data-fg-bj17134": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:365:7:14184:95:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17135", _fgB: 1790697589607, className: "border-t border-slate-200", "data-fg-bj17135": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:366:9:14221:45:e:div" }) }), 41414 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17137", _fgB: 1790697589607, className: "px-10 py-4 flex gap-5", "data-fg-bj17137": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:370:7:14324:1459:e:div:etxte", children: [ 41415 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17138", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj17138": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:371:9:14372:1017:e:div:etetete", children: [
41416 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj17139", _fgB: 1790697589607, "data-fg-bj17139": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:372:11:14421:51:e:SectionLabel:t:::::k9G", children: "White-Label Deployment" }), 41417 /* @__PURE__ */ i( 41418 a, 41419 { 41420 _fgT: "h2", 41421 _fgS: "bj17141", 41422 _fgB: 1790697589607, 41423 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41424 style: { fontSize: "17px", fontWeight: 700 }, 41425 "data-fg-bj17141": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:373:11:14483:206:e:h2:t", 41426 children: "Your Brand. Our Platform." 41427 } 41428 ), 41429 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj17143", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj17143": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:379:11:14700:261:e:p:t", children: "Deploy microtransit under your agency's brand. Full customization of the rider app, web portal, and driver interface â like Annapolis Go Time." }),
41430 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj17145", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj17145": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:383:11:14972:402:e:ul:etetete", children: [ 41431 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17146", _fgB: 1790697589607, "data-fg-bj17146": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:384:13:15055:56:e:Bullet:t:::::D8B5", children: "Custom-branded rider app and web portal" }), 41432 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17148", _fgB: 1790697589607, "data-fg-bj17148": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:385:13:15124:72:e:Bullet:t:::::D8B5", children: "Agency-controlled zones, schedules, and fare structures" }), 41433 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17150", _fgB: 1790697589607, "data-fg-bj17150": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:386:13:15209:79:e:Bullet:t:::::D8B5", children: "Riders book on-demand through Transigo with real-time tracking" }), 41434 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17152", _fgB: 1790697589607, "data-fg-bj17152": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:387:13:15301:57:e:Bullet:t:::::D8B5", children: "Fare payment built into the booking flow" }) 41435 ] }) 41436 ] }),
41437 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17155", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-bj17155": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:391:9:15428:342:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17156", _fgB: 1790697589607, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-bj17156": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:392:11:15507:248:e:div:e", children: /* @__PURE__ */ i( 41438 a, 41439 { 41440 _fgT: "img", 41441 _fgS: "bj17157", 41442 _fgB: 1790697589607, 41443 src: Hy, 41444 alt: "Annapolis Go Time", 41445 className: "w-full h-full object-cover", 41446 "data-fg-bj17157": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:393:13:15598:140:e:img" 41447 } 41448 ) }) }) 41449 ] }), 41450 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17159", _fgB: 1790697589607, className: "px-10", "data-fg-bj17159": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:403:7:15813:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17160", _fgB: 1790697589607, className: "border-t border-slate-200", "data-fg-bj17160": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:404:9:15845:45:e:div" }) }), 41451 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17162", _fgB: 1790697589607, className: "px-10 py-4 flex gap-5", "data-fg-bj17162": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:408:7:15947:1652:e:div:xtete", children: [
41452 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17164", _fgB: 1790697589607, className: "w-[46%] flex-shrink-0 flex flex-col justify-center", "data-fg-bj17164": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:410:9:16021:358:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17165", _fgB: 1790697589607, className: "rounded-lg overflow-hidden border border-slate-200 shadow-sm", "data-fg-bj17165": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:411:11:16100:264:e:div:e", children: /* @__PURE__ */ i( 41453 a, 41454 { 41455 _fgT: "img", 41456 _fgS: "bj17166", 41457 _fgB: 1790697589607, 41458 src: Wy, 41459 alt: "Mobile Data Terminal - Driver Tablet", 41460 className: "w-full h-full object-cover", 41461 "data-fg-bj17166": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:412:13:16191:156:e:img" 41462 } 41463 ) }) }), 41464 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17167", _fgB: 1790697589607, className: "flex-1 flex flex-col", "data-fg-bj17167": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:419:9:16388:1198:e:div:etetete", children: [
41465 /* @__PURE__ */ i(a, { _fgT: bt, _fgS: "bj17168", _fgB: 1790697589607, color: Pe, "data-fg-bj17168": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:420:11:16437:69:e:SectionLabel:t:::::k9G", children: "Mobile Data Terminals (MDT)" }), 41466 /* @__PURE__ */ i( 41467 a, 41468 { 41469 _fgT: "h2", 41470 _fgS: "bj17170", 41471 _fgB: 1790697589607, 41472 className: "font-[Space_Grotesk] mb-1 text-slate-900 leading-tight", 41473 style: { fontSize: "17px", fontWeight: 700 }, 41474 "data-fg-bj17170": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:421:11:16517:228:e:h2:t", 41475 children: "Your Tablet. Our Software. Every Route Covered." 41476 } 41477 ), 41478 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj17172", _fgB: 1790697589607, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "10.5px" }, "data-fg-bj17172": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:427:11:16756:274:e:p:t", children: "No proprietary hardware, no expensive replacements. Consumer tablets keep drivers connected, riders boarding, and routes running â on any cellular network." }),
41479 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bj17174", _fgB: 1790697589607, className: "space-y-1 text-slate-600", style: { fontSize: "10px" }, "data-fg-bj17174": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:431:11:17041:530:e:ul:etetete", children: [ 41480 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17175", _fgB: 1790697589607, color: Pe, "data-fg-bj17175": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:432:13:17124:101:e:Bullet:t:::::D8B5", children: "Consumer off-the-shelf tablets â works on LTE, 5G, or any cellular plan" }), 41481 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17177", _fgB: 1790697589607, color: Pe, "data-fg-bj17177": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:433:13:17238:94:e:Bullet:t:::::D8B5", children: "Navigate stop-by-stop with real-time route updates from dispatch" }), 41482 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17179", _fgB: 1790697589607, color: Pe, "data-fg-bj17179": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:434:13:17345:117:e:Bullet:t:::::D8B5", children: "Automatically onboard riders via facial recognition, QR codes, or Bluetooth integration" }),
41483 /* @__PURE__ */ i(a, { _fgT: Q, _fgS: "bj17181", _fgB: 1790697589607, color: Pe, "data-fg-bj17181": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:435:13:17475:80:e:Bullet:t:::::D8B5", children: "Verbal communication options enhance driver safety" }) 41484 ] }) 41485 ] }) 41486 ] }), 41487 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17184", _fgB: 1790697589607, className: "px-10", "data-fg-bj17184": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:441:7:17629:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17185", _fgB: 1790697589607, className: "border-t border-slate-200", "data-fg-bj17185": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:442:9:17661:45:e:div" }) }), 41488 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17187", _fgB: 1790697589607, className: "px-10 py-4", "data-fg-bj17187": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:446:7:17775:1253:e:div:ete", children: [ 41489 /* @__PURE__ */ i( 41490 a, 41491 { 41492 _fgT: "h3", 41493 _fgS: "bj17188", 41494 _fgB: 1790697589607, 41495 className: "font-[Space_Grotesk] text-slate-900 mb-3 text-center", 41496 style: { fontSize: "14px", fontWeight: 700 }, 41497 "data-fg-bj17188": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:447:9:17812:215:e:h3:t", 41498 children: "Complete Microtransit Capabilities at a Glance" 41499 } 41500 ),
41501 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17190", _fgB: 1790697589607, className: "grid grid-cols-4 gap-2", "data-fg-bj17190": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:453:9:18036:979:e:div:x", children: qy.map((t, e) => /* @__PURE__ */ c( 41502 a, 41503 { 41504 _fgT: "div", 41505 _fgS: "bj17192", 41506 _fgB: 1790697589607, 41507 className: "rounded-lg px-3 py-2.5 border flex items-start gap-2", 41508 style: { borderColor: `${t.color}30`, backgroundColor: `${t.color}08` }, 41509 "data-fg-bj17192": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:455:13:18131:855:e:div:ete", 41510 children: [ 41511 /* @__PURE__ */ i( 41512 a, 41513 { 41514 _fgT: "div", 41515 _fgS: "bj17193", 41516 _fgB: 1790697589607, 41517 className: "w-6 h-6 rounded-md flex items-center justify-center flex-shrink-0 mt-0.5", 41518 style: { backgroundColor: `${t.color}18`, color: t.color }, 41519 "data-fg-bj17193": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:460:15:18356:279:e:div:e", 41520 children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bj17194", _fgB: 1790697589607, size: 13, strokeWidth: 2.2, "data-fg-bj17194": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:464:17:18574:40:e:cap.icon" }) 41521 } 41522 ),
41523 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17195", _fgB: 1790697589607, "data-fg-bj17195": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:466:15:18650:317:e:div:ete", children: [ 41524 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17196", _fgB: 1790697589607, className: "text-slate-800", style: { fontSize: "9.5px", fontWeight: 700 }, "data-fg-bj17196": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:467:17:18672:132:e:div:x", children: t.title }), 41525 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17198", _fgB: 1790697589607, className: "text-slate-500 leading-snug", style: { fontSize: "8px" }, "data-fg-bj17198": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:470:17:18821:125:e:div:x", children: t.desc }) 41526 ] }) 41527 ] 41528 }, 41529 e 41530 )) }) 41531 ] }), 41532 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17201", _fgB: 1790697589607, className: "mt-auto", "data-fg-bj17201": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:480:7:19081:2499:e:div:e", children: /* @__PURE__ */ c( 41533 a, 41534 { 41535 _fgT: "div", 41536 _fgS: "bj17202", 41537 _fgB: 1790697589607, 41538 className: "px-10 py-5 text-white relative overflow-hidden", 41539 style: { background: `linear-gradient(135deg, ${l5} 0%, #132B44 100%)` }, 41540 "data-fg-bj17202": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:481:9:19115:2452:e:div:xtetetxte", 41541 children: [
41542 /* @__PURE__ */ i( 41543 a, 41544 { 41545 _fgT: "div", 41546 _fgS: "bj17204", 41547 _fgB: 1790697589607, 41548 className: "absolute -top-10 -right-10 w-48 h-48 rounded-full opacity-15", 41549 style: { background: `radial-gradient(circle, ${qe} 0%, transparent 70%)` }, 41550 "data-fg-bj17204": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:486:11:19329:193:e:div" 41551 } 41552 ), 41553 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17205", _fgB: 1790697589607, className: "flex items-center justify-between relative z-10", "data-fg-bj17205": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:491:11:19534:1063:e:div:ete", children: [ 41554 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17206", _fgB: 1790697589607, "data-fg-bj17206": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:492:13:19612:629:e:div:ete", children: [ 41555 /* @__PURE__ */ c( 41556 a, 41557 { 41558 _fgT: "h3", 41559 _fgS: "bj17207", 41560 _fgB: 1790697589607, 41561 className: "font-[Space_Grotesk] mb-1", 41562 style: { fontSize: "18px", fontWeight: 700 }, 41563 "data-fg-bj17207": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:493:15:19632:336:e:h3:tste", 41564 children: [ 41565 "See Microtransit", 41566 " ",
41567 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj17210", _fgB: 1790697589607, className: "italic font-[Playfair_Display]", style: { color: qe }, "data-fg-bj17210": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:498:17:19822:126:e:span:t", children: "In Action." }) 41568 ] 41569 } 41570 ), 41571 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bj17212", _fgB: 1790697589607, className: "text-white/70", style: { fontSize: "10.5px" }, "data-fg-bj17212": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:502:15:19983:239:e:p:t", children: "We'll simulate your service area, show commingled fleet dispatch, and walk you through zone setup using your actual operations." }) 41572 ] }), 41573 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bj17214", _fgB: 1790697589607, className: "flex flex-col items-end gap-1.5 flex-shrink-0 ml-6", "data-fg-bj17214": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:508:13:20255:325:e:div:e", children: /* @__PURE__ */ i( 41574 a, 41575 { 41576 _fgT: "div", 41577 _fgS: "bj17215", 41578 _fgB: 1790697589607, 41579 className: "px-5 py-2 rounded-full text-white", 41580 style: { backgroundColor: Pe, fontSize: "11px", fontWeight: 600 }, 41581 "data-fg-bj17215": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:509:15:20338:223:e:div:t", 41582 children: "Schedule a Meeting" 41583 } 41584 ) }) 41585 ] }),
41586 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17218", _fgB: 1790697589607, className: "flex items-center gap-6 mt-4 pt-3 border-t border-white/10 relative z-10", "data-fg-bj17218": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:519:11:20643:909:e:div:etete", children: [ 41587 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "bj17219", _fgB: 1790697589607, src: A1, alt: "IT Curves", className: "h-6 opacity-80", "data-fg-bj17219": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:520:13:20746:61:e:img" }), 41588 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17220", _fgB: 1790697589607, className: "flex items-center gap-5", "data-fg-bj17220": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:521:13:20820:588:e:div:etete", children: [ 41589 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bj17221", _fgB: 1790697589607, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bj17221": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:522:15:20876:162:e:span:et", children: [ 41590 /* @__P
41590URE__ */ i(a, { _fgT: J1, _fgS: "bj17222", _fgB: 1790697589607, size: 11, "data-fg-bj17222": ":0:node_modules/lucide-react:523:17:20981:19:e:Globe::::::Cyd3" }), 41591 " www.ITCurves.AI" 41592 ] }), 41593 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bj17224", _fgB: 1790697589607, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bj17224": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:525:15:21053:159:e:span:et", children: [ 41594 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "bj17225", _fgB: 1790697589607, size: 11, "data-fg-bj17225": ":0:node_modules/lucide-react:526:17:21158:19:e:Phone::::::DmpI" }), 41595 " 301-208-2222" 41596 ] }), 41597 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bj17227", _fgB: 1790697589607, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bj17227": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:528:15:21227:162:e:span:et", children: [ 41598 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "bj17228", _fgB: 1790697589607, size: 11, "data-fg-bj17228": ":0:node_modules/lucide-react:529:17:21332:18:e:Mail::::::D4VR" }), 41599 " [email protected]" 41600 ] }) 41601 ] }),
41602 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bj17230", _fgB: 1790697589607, className: "ml-auto text-white/40", style: { fontSize: "8px" }, "data-fg-bj17230": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:532:13:21421:114:e:span:t", children: "Page 2 of 2" }) 41603 ] }) 41604 ] 41605 } 41606 ) }) 41607 ] }); 41608} 41609function Gy() { 41610 return /* @__PURE__ */ c(C, { children: [ 41611 /* @__PURE__ */ i("style", { "data-fg-bj17234": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:549:7:21890:1231:e:style:s", children: ` 41612 .flyer-wrapper-micro { 41613 display: flex; 41614 flex-direction: column; 41615 align-items: center; 41616 gap: 40px; 41617 padding: 100px 20px 40px; 41618 background: #e5e7eb; 41619 min-height: 100vh; 41620 } 41621 41622 .flyer-page { 41623 width: 8.5in; 41624 height: 11in; 41625 background: white; 41626 box-shadow: 0 4px 24px rgba(0,0,0,0.15); 41627 overflow: hidden; 41628 flex-shrink: 0; 41629 } 41630 41631 @media print { 41632 @page { 41633 size: 8.5in 11in; 41634 margin: 0; 41635 } 41636 41637 body, html { 41638 margin: 0 !important; 41639 padding: 0 !important; 41640 background: white !important; 41641 } 41642 41643 .flyer-wrapper-micro { 41644 padding: 0; 41645 gap: 0; 41646 background: white; 41647 } 41648 41649 .flyer-page { 41650 box-shadow: none; 41651 page-break-after: always; 41652 break-after: page; 41653 } 41654 41655 .flyer-page:last-child { 41656 page-break-after: avoid; 41657 break-after: avoid; 41658 } 41659 41660 nav, .chatbot-wrapper, footer, .no-print { 41661 display: none !important; 41662 } 41663 } 41664 ` }), 41665 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bj17236", _fgB: 1790697589607, className: "flyer-wrapper-micro", "data-fg-bj17236": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:604:7:23129:90:e:div:ete", children: [
41666 /* @__PURE__ */ i(a, { _fgT: $y, _fgS: "bj17237", _fgB: 1790697589607, "data-fg-bj17237": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:605:9:23175:11:e:PageOne::::::D6UC" }), 41667 /* @__PURE__ */ i(a, { _fgT: Uy, _fgS: "bj17238", _fgB: 1790697589607, "data-fg-bj17238": ":0:/src/app/pages/MicrotransitFlyerPage.tsx:606:9:23195:11:e:PageTwo::::::D7oM" }) 41668 ] }) 41669 ] }); 41670} 41671const fe = "#EFBB0F", _3 = "#0B1B2B", te = "#0056B3", U2 = "#22C55E", U = "#E87722", Jy = "#8B5CF6"; 41672function ue({ children: t, color: e = fe }) { 41673 return /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bz1a0", _fgB: 1790697589582, _fgD: !0, className: "flex items-start gap-2", "data-fg-bz1a0": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:37:5:850:163:e:li:ete:1", children: [ 41674 /* @__PURE__ */ i(a, { _fgT: G, _fgS: "bz1a1", _fgB: 1790697589582, size: 14, className: "mt-0.5 flex-shrink-0", style: { color: e }, "data-fg-bz1a1": ":0:node_modules/lucide-react:38:7:896:77:e:CheckCircle2::::::CELI" }), 41675 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a2", _fgB: 1790697589582, "data-fg-bz1a2": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:39:7:980:23:e:span:c", children: t }) 41676 ] }); 41677} 41678function at({ children: t, color: e = fe }) { 41679 return /* @__PURE__ */ i( 41680 a, 41681 { 41682 _fgT: "span", 41683 _fgS: "bz1a4", 41684 _fgB: 1790697589582, 41685 _fgD: !0, 41686 className: "tracking-[0.15em] uppercase block mb-1", 41687 style: { color: e, fontSize: "9px", fontWeight: 700 }, 41688 "data-fg-bz1a4": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:46:5:1130:155:e:span:c:1", 41689 children: t 41690 } 41691 ); 41692} 41693function Ky() { 41694 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a6", _fgB: 1790697589582, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-bz1a6": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:60:5:1479:14239:e:div:xtetxtetxtetxtetxtetxtetxtetxtetxte:1", children: [ 41695 /* @__PURE__ */ c( 41696 a, 41697 { 41698 _fgT: "div", 41699 _fgS: "bz1a8", 41700 _fgB: 1790697589582, 41701 className: "relative px-10 pt-8 pb-7 text-white flex flex-col", 41702 style: { background: `linear-gradient(135deg, ${_3} 0%, #132B44 100%)` }, 41703 "data-fg-bz1a8": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:62:7:1600:3566:e:div:xtetetxtetxtetxtetxtetetxte", 41704 children: [
41705 /* @__PURE__ */ i( 41706 a, 41707 { 41708 _fgT: "div", 41709 _fgS: "bz1a10", 41710 _fgB: 1790697589582, 41711 className: "absolute -top-20 -right-20 w-72 h-72 rounded-full opacity-10", 41712 style: { background: `radial-gradient(circle, ${te} 0%, transparent 70%)` }, 41713 "data-fg-bz1a10": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:67:9:1811:187:e:div" 41714 } 41715 ), 41716 /* @__PURE__ */ i( 41717 a, 41718 { 41719 _fgT: "div", 41720 _fgS: "bz1a11", 41721 _fgB: 1790697589582, 41722 className: "absolute -bottom-16 -left-16 w-56 h-56 rounded-full opacity-8", 41723 style: { background: `radial-gradient(circle, ${U} 0%, transparent 70%)` }, 41724 "data-fg-bz1a11": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:71:9:2007:190:e:div" 41725 } 41726 ), 41727 /* @__PURE__ */ i( 41728 a, 41729 { 41730 _fgT: "div", 41731 _fgS: "bz1a13", 41732 _fgB: 1790697589582, 41733 className: "absolute inset-0 opacity-[0.04]", 41734 style: { 41735 backgroundImage: "linear-gradient(rgba(255,255,255,1) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,1) 1px, transparent 1px)", 41736 backgroundSize: "48px 48px" 41737 }, 41738 "data-fg-bz1a13": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:76:9:2243:312:e:div" 41739 } 41740 ),
41741 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a15", _fgB: 1790697589582, className: "flex items-center justify-between relative z-10 mb-4", "data-fg-bz1a15": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:86:9:2634:378:e:div:ete", children: [ 41742 /* @__PURE__ */ i( 41743 a, 41744 { 41745 _fgT: "span", 41746 _fgS: "bz1a16", 41747 _fgB: 1790697589582, 41748 className: "tracking-[0.2em] uppercase", 41749 style: { color: U, fontSize: "20px", fontWeight: 700, letterSpacing: "0.15em" }, 41750 "data-fg-bz1a16": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:87:11:2715:221:e:span:t", 41751 children: "Agentic Transit Platform" 41752 } 41753 ), 41754 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "bz1a18", _fgB: 1790697589582, src: A1, alt: "IT Curves", className: "h-8", "data-fg-bz1a18": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:93:11:2947:50:e:img" }) 41755 ] }), 41756 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a20", _fgB: 1790697589582, className: "relative z-10 w-16 h-[3px] rounded-full mb-4", style: { backgroundColor: U }, "data-fg-bz1a20": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:97:9:3062:100:e:div" }),
41757 /* @__PURE__ */ c( 41758 a, 41759 { 41760 _fgT: "h1", 41761 _fgS: "bz1a22", 41762 _fgB: 1790697589582, 41763 className: "relative z-10 font-[DM_Serif_Display] leading-[1.1] mb-3", 41764 style: { fontSize: "30px", fontWeight: 400 }, 41765 "data-fg-bz1a22": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:100:9:3202:376:e:h1:tetete", 41766 children: [ 41767 "Your Operations Are Already", 41768 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bz1a24", _fgB: 1790697589582, "data-fg-bz1a24": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:105:11:3399:6:e:br" }), 41769 "Telling You Something.", 41770 /* @__PURE__ */ i(a, { _fgT: "br", _fgS: "bz1a26", _fgB: 1790697589582, "data-fg-bz1a26": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:107:11:3449:6:e:br" }), 41771 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a27", _fgB: 1790697589582, className: "italic", style: { color: fe }, "data-fg-bz1a27": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:108:11:3466:98:e:span:t", children: "Are You Listening?" }) 41772 ] 41773 } 41774 ),
41775 /* @__PURE__ */ c(a, { _fgT: "p", _fgS: "bz1a29", _fgB: 1790697589582, className: "relative z-10 text-white/80 max-w-lg leading-snug", style: { fontSize: "11.5px" }, "data-fg-bz1a29": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:113:9:3588:448:e:p:tste", children: [ 41776 "Every booking, missed trip, complaint, and no-show is a signal. Our Agentic Transit Platform puts six specialized AI agents to work on those signals â automating workflows, guiding your team, and improving service in real time.", 41777 " ", 41778 /* @__PURE__ */ i(a, { _fgT: "strong", _fgS: "bz1a32", _fgB: 1790697589582, className: "text-white", "data-fg-bz1a32": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:117:11:3958:65:e:strong:t", children: "Six agents. One platform." }) 41779 ] }), 41780 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a35", _fgB: 1790697589582, className: "relative z-10 flex gap-4 mt-4 pt-3 border-t border-white/15", "data-fg-bz1a35": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:121:9:4074:1079:e:div:x", children: [ 41781 { icon: Fe, label: "Rider Assist", color: U }, 41782 { icon: Y, label: "Call Assist", color: te }, 41783 { icon: y1, label: "Analytics", color: te }, 41784 { icon: w1, label: "Driver Assist", color: U }, 41785 { icon: T1, label: "Survey", color: U }, 41786 { icon: Te, label: "Smart Dispatch", color: fe } 41787 ].map((t) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a37", _fgB: 1790697589582, className: "flex items-center gap-1.5", "data-fg-bz1a37": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:130:13:4610:514:e:div:ete", children: [
41788 /* @__PURE__ */ i( 41789 a, 41790 { 41791 _fgT: "div", 41792 _fgS: "bz1a38", 41793 _fgB: 1790697589582, 41794 className: "w-5 h-5 rounded-full flex items-center justify-center", 41795 style: { backgroundColor: `${t.color}25`, border: `1px solid ${t.color}50` }, 41796 "data-fg-bz1a38": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:131:15:4682:281:e:div:e", 41797 children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bz1a39", _fgB: 1790697589582, size: 10, style: { color: t.color }, "data-fg-bz1a39": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:135:17:4895:47:e:a.icon" }) 41798 } 41799 ), 41800 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a40", _fgB: 1790697589582, className: "text-white/70", style: { fontSize: "8.5px", fontWeight: 600 }, "data-fg-bz1a40": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:137:15:4978:127:e:span:x", children: t.label }) 41801 ] }, t.label)) }) 41802 ] 41803 } 41804 ), 41805 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a43", _fgB: 1790697589582, className: "px-10 py-4", "data-fg-bz1a43": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:146:7:5216:1204:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a44", _fgB: 1790697589582, className: "flex gap-4", "data-fg-bz1a44": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:147:9:5253:1154:e:div:x", children: [ 41806 { 41807 quote: '"Riders call to ask where their ride is."', 41808 desc: "Dispatchers field the same question hundreds of times a day while managing live operations." 41809 }, 41810 { 41811 quote: '"Our drivers miss steps. Every shift."', 41812 desc: "Tools don't support them in the moment â timestamps, notes, and exceptions get skipped." 41813 }, 41814 { 41815 quote: `"We have the data. We just can't act on it."`, 41816 desc: "By the time you see the pattern, it's already affected your riders." 41817 } 41818 ].map((t, e) => /* @__PURE__ */ c( 41819 a, 41820 { 41821 _fgT: "div", 41822 _fgS: "bz1a46", 41823 _fgB: 1790697589582, 41824 className: "flex-1 border-l-[3px] pl-3 py-2", 41825 style: { borderColor: fe }, 41826 "data-fg-bz1a46": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:162:13:5938:440:e:div:ete", 41827 children: [
41828 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a47", _fgB: 1790697589582, className: "text-slate-900 mb-1", style: { fontSize: "10px", fontWeight: 700 }, "data-fg-bz1a47": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:167:15:6095:130:e:div:x", children: t.quote }), 41829 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a49", _fgB: 1790697589582, className: "text-slate-500 leading-snug", style: { fontSize: "9px" }, "data-fg-bz1a49": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:170:15:6240:119:e:div:x", children: t.desc }) 41830 ] 41831 }, 41832 e 41833 )) }) }), 41834 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a52", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a52": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:179:7:6450:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a53", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a53": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:180:9:6482:45:e:div" }) }), 41835 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a55", _fgB: 1790697589582, className: "px-10 py-4 flex gap-5", "data-fg-bz1a55": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:184:7:6610:2768:e:div:xtetxte", children: [
41836 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a57", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a57": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:186:9:6689:1323:e:div:etetete", children: [ 41837 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a58", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a58": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:187:11:6738:399:e:div:ete", children: [ 41838 /* @__PURE__ */ i( 41839 a, 41840 { 41841 _fgT: "div", 41842 _fgS: "bz1a59", 41843 _fgB: 1790697589582, 41844 className: "w-5 h-5 rounded-full flex items-center justify-center", 41845 style: { backgroundColor: `${U}18`, color: U }, 41846 "data-fg-bz1a59": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:188:13:6797:246:e:div:e", 41847 children: /* @__PURE__ */ i(a, { _fgT: Fe, _fgS: "bz1a60", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a60": ":0:node_modules/lucide-react:192:15:6982:42:e:Smartphone::::::DHxb" }) 41848 } 41849 ),
41850 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a61", _fgB: 1790697589582, color: U, "data-fg-bz1a61": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:194:13:7056:64:e:SectionLabel:t:::::BD7P", children: "01 â Rider Assist AI" }) 41851 ] }), 41852 /* @__PURE__ */ i( 41853 a, 41854 { 41855 _fgT: "h2", 41856 _fgS: "bz1a63", 41857 _fgB: 1790697589582, 41858 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 41859 style: { fontSize: "16px" }, 41860 "data-fg-bz1a63": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:196:11:7148:195:e:h2:t", 41861 children: "Rider Interaction Automation" 41862 } 41863 ), 41864 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a65", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a65": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:202:11:7354:255:e:p:t", children: "Lives in the rider-facing app as an always-on trip companion. Manages booking, trip updates, eligibility, and notifications in real time." }),
41865 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a67", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a67": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:206:11:7620:377:e:ul:etete", children: [ 41866 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a68", _fgB: 1790697589582, color: U, "data-fg-bz1a68": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:207:13:7704:86:e:Bullet:t:::::ECgo", children: "In-app trip management â book, modify, cancel, confirm" }), 41867 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a70", _fgB: 1790697589582, color: U, "data-fg-bz1a70": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:208:13:7803:81:e:Bullet:t:::::ECgo", children: "Proactive ETA changes and pickup readiness alerts" }), 41868 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a72", _fgB: 1790697589582, color: U, "data-fg-bz1a72": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:209:13:7897:84:e:Bullet:t:::::ECgo", children: "Smart escalation with full context for staff handoff" }) 41869 ] }) 41870 ] }),
41871 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a75", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a75": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:214:9:8052:1313:e:div:etetete", children: [ 41872 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a76", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a76": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:215:11:8101:387:e:div:ete", children: [ 41873 /* @__PURE__ */ i( 41874 a, 41875 { 41876 _fgT: "div", 41877 _fgS: "bz1a77", 41878 _fgB: 1790697589582, 41879 className: "w-5 h-5 rounded-full flex items-center justify-center", 41880 style: { backgroundColor: `${te}18`, color: te }, 41881 "data-fg-bz1a77": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:216:13:8160:237:e:div:e", 41882 children: /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "bz1a78", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a78": ":0:node_modules/lucide-react:220:15:8341:37:e:Phone::::::DmpI" }) 41883 } 41884 ),
41885 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a79", _fgB: 1790697589582, color: te, "data-fg-bz1a79": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:222:13:8410:61:e:SectionLabel:t:::::BD7P", children: "02 â Call Assist AI" }) 41886 ] }), 41887 /* @__PURE__ */ i( 41888 a, 41889 { 41890 _fgT: "h2", 41891 _fgS: "bz1a81", 41892 _fgB: 1790697589582, 41893 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 41894 style: { fontSize: "16px" }, 41895 "data-fg-bz1a81": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:224:11:8499:207:e:h2:t", 41896 children: "Intelligent Front Door for Rider Support" 41897 } 41898 ), 41899 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a83", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a83": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:230:11:8717:262:e:p:t", children: "Automates call handling for booking, trip changes, verification, and general inquiries. Transfers to staff with full context and a warm handoff." }),
41900 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a85", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a85": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:234:11:8990:360:e:ul:etete", children: [ 41901 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a86", _fgB: 1790697589582, color: te, "data-fg-bz1a86": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:235:13:9074:84:e:Bullet:t:::::ECgo", children: "Voice-first with natural conversation across languages" }), 41902 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a88", _fgB: 1790697589582, color: te, "data-fg-bz1a88": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:236:13:9171:73:e:Bullet:t:::::ECgo", children: "Book, modify, cancel, verify â no hold time" }), 41903 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a90", _fgB: 1790697589582, color: te, "data-fg-bz1a90": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:237:13:9257:77:e:Bullet:t:::::ECgo", children: "Warm handoff with interaction history on screen" }) 41904 ] }) 41905 ] }) 41906 ] }), 41907 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a93", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a93": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:243:7:9408:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a94", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a94": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:244:9:9440:45:e:div" }) }), 41908 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a96", _fgB: 1790697589582, className: "px-10 py-4 flex gap-5", "data-fg-bz1a96": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:248:7:9570:2740:e:div:xtetxte", children: [
41909 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a98", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a98": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:250:9:9646:1299:e:div:etetete", children: [ 41910 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a99", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a99": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:251:11:9695:389:e:div:ete", children: [ 41911 /* @__PURE__ */ i( 41912 a, 41913 { 41914 _fgT: "div", 41915 _fgS: "bz1a100", 41916 _fgB: 1790697589582, 41917 className: "w-5 h-5 rounded-full flex items-center justify-center", 41918 style: { backgroundColor: `${te}18`, color: te }, 41919 "data-fg-bz1a100": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:252:13:9754:241:e:div:e", 41920 children: /* @__PURE__ */ i(a, { _fgT: y1, _fgS: "bz1a101", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a101": ":0:node_modules/lucide-react:256:15:9935:41:e:BarChart3::::::C2Ja" }) 41921 } 41922 ),
41923 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a102", _fgB: 1790697589582, color: te, "data-fg-bz1a102": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:258:13:10008:59:e:SectionLabel:t:::::BD7P", children: "03 â Analytics AI" }) 41924 ] }), 41925 /* @__PURE__ */ i( 41926 a, 41927 { 41928 _fgT: "h2", 41929 _fgS: "bz1a104", 41930 _fgB: 1790697589582, 41931 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 41932 style: { fontSize: "16px" }, 41933 "data-fg-bz1a104": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:260:11:10095:206:e:h2:t", 41934 children: "Decision-Grade Operational Intelligence" 41935 } 41936 ), 41937 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a106", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a106": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:266:11:10312:259:e:p:t", children: "Unifies data from vehicles, riders, and apps. Identifies patterns, explains performance drivers, and generates actionable reports in minutes." }),
41938 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a108", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a108": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:270:11:10582:348:e:ul:etete", children: [ 41939 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a109", _fgB: 1790697589582, color: te, "data-fg-bz1a109": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:271:13:10666:78:e:Bullet:t:::::ECgo", children: "Unified intelligence across all operational data" }), 41940 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a111", _fgB: 1790697589582, color: te, "data-fg-bz1a111": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:272:13:10757:65:e:Bullet:t:::::ECgo", children: "Before/after and period comparisons" }), 41941 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a113", _fgB: 1790697589582, color: te, "data-fg-bz1a113": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:273:13:10835:79:e:Bullet:t:::::ECgo", children: "Guided reports for staffing, fleet sizing, shifts" }) 41942 ] }) 41943 ] }),
41944 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a116", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a116": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:278:9:10987:1310:e:div:etetete", children: [ 41945 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a117", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a117": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:279:11:11036:399:e:div:ete", children: [ 41946 /* @__PURE__ */ i( 41947 a, 41948 { 41949 _fgT: "div", 41950 _fgS: "bz1a118", 41951 _fgB: 1790697589582, 41952 className: "w-5 h-5 rounded-full flex items-center justify-center", 41953 style: { backgroundColor: `${U}18`, color: U }, 41954 "data-fg-bz1a118": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:280:13:11095:245:e:div:e", 41955 children: /* @__PURE__ */ i(a, { _fgT: w1, _fgS: "bz1a119", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a119": ":0:node_modules/lucide-react:284:15:11280:41:e:CircleDot::::::CPqJ" }) 41956 } 41957 ),
41958 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a120", _fgB: 1790697589582, color: U, "data-fg-bz1a120": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:286:13:11353:65:e:SectionLabel:t:::::BD7P", children: "04 â Driver Assist AI" }) 41959 ] }), 41960 /* @__PURE__ */ i( 41961 a, 41962 { 41963 _fgT: "h2", 41964 _fgS: "bz1a122", 41965 _fgB: 1790697589582, 41966 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 41967 style: { fontSize: "16px" }, 41968 "data-fg-bz1a122": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:288:11:11446:197:e:h2:t", 41969 children: "Hands-Free Driver Intelligence" 41970 } 41971 ), 41972 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a124", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a124": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:294:11:11654:252:e:p:t", children: "Operates on every driver device, reducing admin work and guiding real-time decisions. Voice-first so drivers stay focused on the road." }),
41973 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a126", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a126": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:298:11:11917:365:e:ul:etete", children: [ 41974 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a127", _fgB: 1790697589582, color: U, "data-fg-bz1a127": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:299:13:12001:70:e:Bullet:t:::::ECgo", children: "Voice-first support â eyes on the road" }), 41975 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a129", _fgB: 1790697589582, color: U, "data-fg-bz1a129": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:300:13:12084:82:e:Bullet:t:::::ECgo", children: "Automatic timestamps, notes, and exception logging" }), 41976 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a131", _fgB: 1790697589582, color: U, "data-fg-bz1a131": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:301:13:12179:87:e:Bullet:t:::::ECgo", children: "Breakdowns and no-shows routed to dispatch with context" }) 41977 ] }) 41978 ] }) 41979 ] }), 41980 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a134", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a134": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:307:7:12340:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a135", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a135": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:308:9:12372:45:e:div" }) }), 41981 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a137", _fgB: 1790697589582, className: "px-10 py-4 flex gap-5", "data-fg-bz1a137": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:312:7:12500:2737:e:div:xtetxte", children: [
41982 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a139", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a139": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:314:9:12573:1295:e:div:etetete", children: [ 41983 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a140", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a140": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:315:11:12622:396:e:div:ete", children: [ 41984 /* @__PURE__ */ i( 41985 a, 41986 { 41987 _fgT: "div", 41988 _fgS: "bz1a141", 41989 _fgB: 1790697589582, 41990 className: "w-5 h-5 rounded-full flex items-center justify-center", 41991 style: { backgroundColor: `${U}18`, color: U }, 41992 "data-fg-bz1a141": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:316:13:12681:249:e:div:e", 41993 children: /* @__PURE__ */ i(a, { _fgT: T1, _fgS: "bz1a142", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a142": ":0:node_modules/lucide-react:320:15:12866:45:e:ClipboardList::::::CPfu" }) 41994 } 41995 ),
41996 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a143", _fgB: 1790697589582, color: U, "data-fg-bz1a143": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:322:13:12943:58:e:SectionLabel:t:::::BD7P", children: "05 â Survey AI" }) 41997 ] }), 41998 /* @__PURE__ */ i( 41999 a, 42000 { 42001 _fgT: "h2", 42002 _fgS: "bz1a145", 42003 _fgB: 1790697589582, 42004 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 42005 style: { fontSize: "16px" }, 42006 "data-fg-bz1a145": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:324:11:13029:205:e:h2:t", 42007 children: "Automated Feedback Collection at Scale" 42008 } 42009 ), 42010 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a147", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a147": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:330:11:13245:259:e:p:t", children: "Event-triggered outreach after service recoveries, first rides, and exceptions. Adaptive questioning based on trip context and rider history." }),
42011 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a149", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a149": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:334:11:13515:338:e:ul:etete", children: [ 42012 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a150", _fgB: 1790697589582, color: U, "data-fg-bz1a150": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:335:13:13599:81:e:Bullet:t:::::ECgo", children: "Automated theme extraction and sentiment analysis" }), 42013 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a152", _fgB: 1790697589582, color: U, "data-fg-bz1a152": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:336:13:13693:73:e:Bullet:t:::::ECgo", children: "Structured feedback without manual review" }), 42014 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a154", _fgB: 1790697589582, color: U, "data-fg-bz1a154": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:337:13:13779:58:e:Bullet:t:::::ECgo", children: "Nothing urgent gets missed" }) 42015 ] }) 42016 ] }),
42017 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a157", _fgB: 1790697589582, className: "flex-1 flex flex-col", "data-fg-bz1a157": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:342:9:13911:1313:e:div:etetete", children: [ 42018 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a158", _fgB: 1790697589582, className: "flex items-center gap-2 mb-1", "data-fg-bz1a158": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:343:11:13960:388:e:div:ete", children: [ 42019 /* @__PURE__ */ i( 42020 a, 42021 { 42022 _fgT: "div", 42023 _fgS: "bz1a159", 42024 _fgB: 1790697589582, 42025 className: "w-5 h-5 rounded-full flex items-center justify-center", 42026 style: { backgroundColor: `${fe}18`, color: fe }, 42027 "data-fg-bz1a159": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:344:13:14019:235:e:div:e", 42028 children: /* @__PURE__ */ i(a, { _fgT: Te, _fgS: "bz1a160", _fgB: 1790697589582, size: 10, strokeWidth: 2.5, "data-fg-bz1a160": ":0:node_modules/lucide-react:348:15:14200:35:e:Zap::::::Cp7" }) 42029 } 42030 ),
42031 /* @__PURE__ */ i(a, { _fgT: at, _fgS: "bz1a161", _fgB: 1790697589582, color: fe, "data-fg-bz1a161": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:350:13:14267:64:e:SectionLabel:t:::::BD7P", children: "06 â Smart Dispatch AI" }) 42032 ] }), 42033 /* @__PURE__ */ i( 42034 a, 42035 { 42036 _fgT: "h2", 42037 _fgS: "bz1a163", 42038 _fgB: 1790697589582, 42039 className: "font-[DM_Serif_Display] mb-1 text-slate-900 leading-tight", 42040 style: { fontSize: "16px" }, 42041 "data-fg-bz1a163": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:352:11:14359:207:e:h2:t", 42042 children: "Fleet Orchestration at Operational Scale" 42043 } 42044 ), 42045 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a165", _fgB: 1790697589582, className: "text-slate-500 mb-2 leading-snug", style: { fontSize: "9.5px" }, "data-fg-bz1a165": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:358:11:14577:262:e:p:t", children: "Manages live operations in real time â continuously balancing service quality, capacity, and disruptions with policy-compliant recovery actions." }),
42046 /* @__PURE__ */ c(a, { _fgT: "ul", _fgS: "bz1a167", _fgB: 1790697589582, className: "space-y-1 text-slate-600", style: { fontSize: "9.5px" }, "data-fg-bz1a167": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:362:11:14850:359:e:ul:etete", children: [ 42047 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a168", _fgB: 1790697589582, color: fe, "data-fg-bz1a168": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:363:13:14934:89:e:Bullet:t:::::ECgo", children: "Continuous assignment and reassignment as conditions change" }), 42048 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a170", _fgB: 1790697589582, color: fe, "data-fg-bz1a170": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:364:13:15036:69:e:Bullet:t:::::ECgo", children: "Service recovery with policy guardrails" }), 42049 /* @__PURE__ */ i(a, { _fgT: ue, _fgS: "bz1a172", _fgB: 1790697589582, color: fe, "data-fg-bz1a172": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:365:13:15118:75:e:Bullet:t:::::ECgo", children: "Explainable decisioning with audit-ready logs" }) 42050 ] }) 42051 ] }) 42052 ] }), 42053 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a175", _fgB: 1790697589582, className: "mt-auto", "data-fg-bz1a175": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:371:7:15288:419:e:div:e", children: /* @__PURE__ */ c( 42054 a, 42055 { 42056 _fgT: "div", 42057 _fgS: "bz1a176", 42058 _fgB: 1790697589582, 42059 className: "px-10 py-2.5 flex items-center justify-between", 42060 style: { backgroundColor: _3 }, 42061 "data-fg-bz1a176": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:372:9:15322:372:e:div:ete", 42062 children: [
42063 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a177", _fgB: 1790697589582, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-bz1a177": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:376:11:15460:106:e:span:t", children: "www.ITCurves.AI" }), 42064 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a179", _fgB: 1790697589582, className: "text-white/50", style: { fontSize: "8px" }, "data-fg-bz1a179": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:379:11:15577:102:e:span:t", children: "Page 1 of 2" }) 42065 ] 42066 } 42067 ) }) 42068 ] }); 42069} 42070function Yy() { 42071 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a181", _fgB: 1790697589582, _fgD: !0, className: "flyer-page bg-white relative overflow-hidden flex flex-col", "data-fg-bz1a181": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:394:5:15913:13102:e:div:xtetxtetxtetxtetxtetxtetxtetxte:1", children: [ 42072 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a183", _fgB: 1790697589582, className: "px-10 pt-8 pb-4", "data-fg-bz1a183": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:396:7:16033:2470:e:div:etetetxte", children: [
42073 /* @__PURE__ */ c( 42074 a, 42075 { 42076 _fgT: "h3", 42077 _fgS: "bz1a184", 42078 _fgB: 1790697589582, 42079 className: "font-[DM_Serif_Display] text-slate-900 mb-1 text-center", 42080 style: { fontSize: "20px" }, 42081 "data-fg-bz1a184": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:397:9:16075:246:e:h3:te", 42082 children: [ 42083 "A Rider Calls. ", 42084 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a186", _fgB: 1790697589582, style: { color: fe }, className: "italic", "data-fg-bz1a186": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:401:26:16231:76:e:span:t", children: "Here's What Happens." }) 42085 ] 42086 } 42087 ), 42088 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a188", _fgB: 1790697589582, className: "text-slate-500 text-center mb-4", style: { fontSize: "10.5px" }, "data-fg-bz1a188": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:403:9:16330:162:e:p:t", children: "From first ring to resolution, with or without a live agent." }), 42089 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a190", _fgB: 1790697589582, className: "flex gap-3", "data-fg-bz1a190": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:407:9:16502:1638:e:div:x", children: [ 42090 { 42091 step: "1", 42092 title: "Rider Calls In", 42093 desc: "AI answers instantly. No hold time, no phone tree, no voicemail.", 42094 color: te 42095 }, 42096 { 42097 step: "2", 42098 title: "Intent Detected", 42099 desc: "32+ trained categories identify why the rider is calling within seconds.", 42100 color: U 42101 }, 42102 { 42103 step: "3", 42104 title: "Resolved or Routed", 42105 desc: "Routine questions answered on the spot. Complex issues transferred with full context.", 42106 color: U2 42107 }, 42108 { 42109 step: "4", 42110 title: "Data Captured", 42111 desc: "Every interaction logged. Topics, sentiment, and outcomes feed your dashboards.", 42112 color: fe 42113 } 42114 ].map((t) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a192", _fgB: 1790697589582, className: "flex-1 flex flex-col items-center text-center", "data-fg-bz1a192": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:434:13:17464:647:e:div:etete", children: [
42115 /* @__PURE__ */ i( 42116 a, 42117 { 42118 _fgT: "div", 42119 _fgS: "bz1a193", 42120 _fgB: 1790697589582, 42121 className: "w-8 h-8 rounded-full flex items-center justify-center text-white mb-2", 42122 style: { backgroundColor: t.color, fontSize: "12px", fontWeight: 700 }, 42123 "data-fg-bz1a193": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:435:15:17555:252:e:div:x", 42124 children: t.step 42125 } 42126 ), 42127 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a195", _fgB: 1790697589582, className: "text-slate-900 mb-0.5", style: { fontSize: "10.5px", fontWeight: 700 }, "data-fg-bz1a195": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:441:15:17822:134:e:div:x", children: t.title }), 42128 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a197", _fgB: 1790697589582, className: "text-slate-500 leading-snug", style: { fontSize: "8.5px" }, "data-fg-bz1a197": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:444:15:17971:121:e:div:x", children: t.desc }) 42129 ] }, t.step)) }),
42130 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a200", _fgB: 1790697589582, className: "flex items-center justify-center gap-0 -mt-[68px] mb-10 pointer-events-none", "data-fg-bz1a200": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:452:9:18184:306:e:div:x", children: [1, 2, 3].map((t) => /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a202", _fgB: 1790697589582, className: "flex-1 flex justify-center", "data-fg-bz1a202": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:454:13:18324:137:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: D, _fgS: "bz1a203", _fgB: 1790697589582, size: 14, className: "text-slate-300", "data-fg-bz1a203": ":0:node_modules/lucide-react:455:15:18391:51:e:ArrowRight::::::s5N" }) }, t)) }) 42131 ] }), 42132 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a205", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a205": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:462:7:18533:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a206", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a206": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:463:9:18565:45:e:div" }) }), 42133 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a208", _fgB: 1790697589582, className: "px-10 py-4", "data-fg-bz1a208": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:467:7:18679:3817:e:div:ete", children: [
42134 /* @__PURE__ */ i( 42135 a, 42136 { 42137 _fgT: "h3", 42138 _fgS: "bz1a209", 42139 _fgB: 1790697589582, 42140 className: "font-[DM_Serif_Display] text-slate-900 mb-4 text-center", 42141 style: { fontSize: "16px" }, 42142 "data-fg-bz1a209": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:468:9:18716:207:e:h3:t", 42143 children: "Integrated Intelligence â One Platform, Every Signal" 42144 } 42145 ), 42146 /* @__PURE__ */ c( 42147 a, 42148 { 42149 _fgT: "div", 42150 _fgS: "bz1a211", 42151 _fgB: 1790697589582, 42152 className: "rounded-xl p-5 relative overflow-hidden", 42153 style: { backgroundColor: _3 }, 42154 "data-fg-bz1a211": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:475:9:18933:3550:e:div:xtetxte", 42155 children: [ 42156 /* @__PURE__ */ i( 42157 a, 42158 { 42159 _fgT: "div", 42160 _fgS: "bz1a213", 42161 _fgB: 1790697589582, 42162 className: "absolute inset-0 opacity-[0.03]", 42163 style: { 42164 backgroundImage: "linear-gradient(rgba(255,255,255,1) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,1) 1px, transparent 1px)", 42165 backgroundSize: "32px 32px" 42166 }, 42167 "data-fg-bz1a213": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:480:11:19090:326:e:div" 42168 } 42169 ),
42170 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a215", _fgB: 1790697589582, className: "relative z-10 flex flex-col items-center", "data-fg-bz1a215": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:490:11:19457:3011:e:div:etxtetxte", children: [ 42171 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a216", _fgB: 1790697589582, className: "flex items-center justify-center gap-2 mb-4", "data-fg-bz1a216": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:491:13:19528:543:e:div:e", children: /* @__PURE__ */ c( 42172 a, 42173 { 42174 _fgT: "div", 42175 _fgS: "bz1a217", 42176 _fgB: 1790697589582, 42177 className: "px-5 py-2 rounded-full text-white shadow-lg", 42178 style: { 42179 backgroundColor: te, 42180 fontSize: "11px", 42181 fontWeight: 700, 42182 boxShadow: "0 0 30px rgba(43,122,232,0.4)" 42183 }, 42184 "data-fg-bz1a217": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:492:15:19604:448:e:div:et", 42185 children: [
42186 /* @__PURE__ */ i(a, { _fgT: vc, _fgS: "bz1a218", _fgB: 1790697589582, size: 14, className: "inline mr-1.5 -mt-0.5", "data-fg-bz1a218": ":0:node_modules/lucide-react:501:17:19931:53:e:Brain::::::42K" }), 42187 "Transit System â Central Brain" 42188 ] 42189 } 42190 ) }), 42191 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a221", _fgB: 1790697589582, className: "grid grid-cols-6 gap-2 w-full", "data-fg-bz1a221": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:507:13:20131:2003:e:div:x", children: [ 42192 { icon: Fe, label: "Rider Assist AI", desc: "Rider interaction automation across app and web", color: U }, 42193 { icon: Y, label: "Call Assist AI", desc: "Voice-first call handling with warm handoffs", color: te }, 42194 { icon: y1, label: "Analytics AI", desc: "Unified intelligence layer for operational data", color: te }, 42195 { icon: w1, label: "Driver Assist AI", desc: "Hands-free driver support on every device", color: U },
42196 { icon: T1, label: "Survey AI", desc: "Event-triggered feedback with sentiment analysis", color: U }, 42197 { icon: Te, label: "Smart Dispatch AI", desc: "Real-time fleet orchestration with policy guardrails", color: fe } 42198 ].map((t, e) => /* @__PURE__ */ c( 42199 a, 42200 { 42201 _fgT: "div", 42202 _fgS: "bz1a223", 42203 _fgB: 1790697589582, 42204 className: "rounded-lg px-2.5 py-3 text-center flex flex-col items-center gap-1.5", 42205 style: { 42206 backgroundColor: "#0F2A3F", 42207 border: `1px solid ${t.color}30` 42208 }, 42209 "data-fg-bz1a223": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:516:17:21037:1060:e:div:etete", 42210 children: [ 42211 /* @__PURE__ */ i( 42212 a, 42213 { 42214 _fgT: "div", 42215 _fgS: "bz1a224", 42216 _fgB: 1790697589582, 42217 className: "w-7 h-7 rounded-full flex items-center justify-center", 42218 style: { 42219 backgroundColor: `${t.color}20`, 42220 border: `1px solid ${t.color}50`, 42221 color: t.color 42222 }, 42223 "data-fg-bz1a224": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:524:19:21358:411:e:div:e", 42224 children: /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bz1a225", _fgB: 1790697589582, size: 13, strokeWidth: 2.2, "data-fg-bz1a225": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:532:21:21702:42:e:agent.icon" }) 42225 } 42226 ),
42227 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a226", _fgB: 1790697589582, className: "text-white", style: { fontSize: "8.5px", fontWeight: 700 }, "data-fg-bz1a226": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:534:19:21788:134:e:div:x", children: t.label }), 42228 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a228", _fgB: 1790697589582, className: "text-slate-400 leading-snug", style: { fontSize: "7.5px" }, "data-fg-bz1a228": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:537:19:21941:133:e:div:x", children: t.desc }) 42229 ] 42230 }, 42231 e 42232 )) }), 42233 /* @__PURE__ */ i( 42234 a, 42235 { 42236 _fgT: "div", 42237 _fgS: "bz1a231", 42238 _fgB: 1790697589582, 42239 className: "mt-3 text-center text-slate-500", 42240 style: { fontSize: "8px" }, 42241 "data-fg-bz1a231": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:545:13:22183:268:e:div:t", 42242 children: "Every agent feeds into and learns from the central transit brain â dispatching, routing, and rider data in one loop." 42243 } 42244 ) 42245 ] }) 42246 ] 42247 } 42248 ) 42249 ] }), 42250 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a234", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a234": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:556:7:22526:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a235", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a235": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:557:9:22558:45:e:div" }) }), 42251 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a237", _fgB: 1790697589582, className: "px-10 py-4", "data-fg-bz1a237": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:561:7:22666:2429:e:div:ete", children: [
42252 /* @__PURE__ */ c( 42253 a, 42254 { 42255 _fgT: "h3", 42256 _fgS: "bz1a238", 42257 _fgB: 1790697589582, 42258 className: "font-[DM_Serif_Display] text-slate-900 mb-3 text-center", 42259 style: { fontSize: "14px" }, 42260 "data-fg-bz1a238": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:562:9:22703:259:e:h3:te", 42261 children: [ 42262 "Built for Agencies That Need ", 42263 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a240", _fgB: 1790697589582, style: { color: fe }, className: "italic", "data-fg-bz1a240": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:566:40:22873:75:e:span:t", children: "Results, Not Demos." }) 42264 ] 42265 } 42266 ), 42267 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a242", _fgB: 1790697589582, className: "grid grid-cols-4 gap-2", "data-fg-bz1a242": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:568:9:22971:2111:e:div:x", children: [ 42268 { 42269 mode: "Paratransit", 42270 color: te, 42271 items: ["Zero voicemail dead-ends", "Auto booking handling", "Accurate eligibility & policy"] 42272 }, 42273 { 42274 mode: "Fixed Route", 42275 color: fe, 42276 items: ["24/7 voice AI coverage", "3-4x surge call capacity", "Route-level sentiment tracking"] 42277 }, 42278 { 42279 mode: "NEMT", 42280 color: U2, 42281 items: ["Zero missed authorizations", "Auto trip confirmations", "Accurate broker compliance"] 42282 }, 42283 { 42284 mode: "Microtransit", 42285 color: Jy, 42286 items: ["Real-time demand response", "Zero dead zones", "Auto zone optimization signals"] 42287 } 42288 ].map((t, e) => /* @__PURE__ */ c( 42289 a, 42290 { 42291 _fgT: "div", 42292 _fgS: "bz1a244", 42293 _fgB: 1790697589582, 42294 className: "rounded-lg px-3 py-3 border", 42295 style: { borderColor: `${t.color}30`, backgroundColor: `${t.color}06` }, 42296 "data-fg-bz1a244": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:591:13:23862:1191:e:div:ete", 42297 children: [
42298 /* @__PURE__ */ i( 42299 a, 42300 { 42301 _fgT: "div", 42302 _fgS: "bz1a245", 42303 _fgB: 1790697589582, 42304 className: "mb-2 rounded-full px-2 py-0.5 inline-block", 42305 style: { 42306 fontSize: "8px", 42307 fontWeight: 700, 42308 color: t.color, 42309 backgroundColor: `${t.color}15`, 42310 border: `1px solid ${t.color}30` 42311 }, 42312 "data-fg-bz1a245": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:596:15:24060:406:e:div:x", 42313 children: t.mode.toUpperCase() 42314 } 42315 ), 42316 /* @__PURE__ */ i(a, { _fgT: "ul", _fgS: "bz1a247", _fgB: 1790697589582, className: "space-y-1.5", "data-fg-bz1a247": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:608:15:24481:553:e:ul:x", children: t.items.map((s, r) => /* @__PURE__ */ c(a, { _fgT: "li", _fgS: "bz1a249", _fgB: 1790697589582, className: "flex items-start gap-1.5", "data-fg-bz1a249": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:610:19:24573:421:e:li:ete", children: [
42317 /* @__PURE__ */ i( 42318 a, 42319 { 42320 _fgT: G, 42321 _fgS: "bz1a250", 42322 _fgB: 1790697589582, 42323 size: 10, 42324 className: "mt-0.5 flex-shrink-0", 42325 style: { color: t.color }, 42326 "data-fg-bz1a250": ":0:node_modules/lucide-react:611:21:24643:173:e:CheckCircle2::::::CELI" 42327 } 42328 ), 42329 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a251", _fgB: 1790697589582, className: "text-slate-600 leading-snug", style: { fontSize: "8.5px" }, "data-fg-bz1a251": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:616:21:24837:133:e:span:x", children: s }) 42330 ] }, r)) }) 42331 ] 42332 }, 42333 e 42334 )) }) 42335 ] }), 42336 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a254", _fgB: 1790697589582, className: "px-10", "data-fg-bz1a254": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:628:7:25125:90:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a255", _fgB: 1790697589582, className: "border-t border-slate-200", "data-fg-bz1a255": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:629:9:25157:45:e:div" }) }), 42337 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a257", _fgB: 1790697589582, className: "px-10 py-3", "data-fg-bz1a257": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:633:7:25262:1219:e:div:e", children: /* @__PURE__ */ i( 42338 a, 42339 { 42340 _fgT: "div", 42341 _fgS: "bz1a258", 42342 _fgB: 1790697589582, 42343 className: "rounded-xl px-6 py-4 flex items-center justify-between", 42344 style: { backgroundColor: "#0F172A" }, 42345 "data-fg-bz1a258": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:634:9:25299:1169:e:div:x", 42346 children: [ 42347 { value: "92%", label: "Faster Processing", icon: It, color: fe }, 42348 { value: "75%", label: "Reduced Costs", icon: E3, color: fe }, 42349 { value: "83%", label: "AI-Resolved Calls", icon: Y7, color: U2 }, 42350 { value: "24/7", label: "Rider Coverage", icon: h1, color: te }, 42351 { value: "<1s", label: "Answer Time", icon: Te, color: U2 } 42352 ].map((t, e) => /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a260", _fgB: 1790697589582, className: "flex flex-col items-center text-center", "data-fg-bz1a260": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:645:13:25917:522:e:div:etete", children: [
42353 /* @__PURE__ */ i(a, { _fgT: t.icon, _fgS: "bz1a261", _fgB: 1790697589582, size: 14, style: { color: t.color }, className: "mb-1", "data-fg-bz1a261": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:646:15:25996:70:e:stat.icon" }), 42354 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a262", _fgB: 1790697589582, className: "text-white", style: { fontSize: "18px", fontWeight: 700 }, "data-fg-bz1a262": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:647:15:26081:124:e:div:x", children: t.value }), 42355 /* @__PURE__ */ i( 42356 a, 42357 { 42358 _fgT: "div", 42359 _fgS: "bz1a264", 42360 _fgB: 1790697589582, 42361 className: "text-slate-400 uppercase tracking-widest", 42362 style: { fontSize: "7px", fontWeight: 600 }, 42363 "data-fg-bz1a264": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:650:15:26220:200:e:div:x", 42364 children: t.label 42365 } 42366 ) 42367 ] }, e)) 42368 } 42369 ) }), 42370 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a267", _fgB: 1790697589582, className: "mt-auto", "data-fg-bz1a267": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:662:7:26534:2470:e:div:e", children: /* @__PURE__ */ c( 42371 a, 42372 { 42373 _fgT: "div", 42374 _fgS: "bz1a268", 42375 _fgB: 1790697589582, 42376 className: "px-10 py-5 text-white relative overflow-hidden", 42377 style: { background: `linear-gradient(135deg, ${_3} 0%, #132B44 100%)` }, 42378 "data-fg-bz1a268": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:663:9:26568:2423:e:div:xtetetxte", 42379 children: [
42380 /* @__PURE__ */ i( 42381 a, 42382 { 42383 _fgT: "div", 42384 _fgS: "bz1a270", 42385 _fgB: 1790697589582, 42386 className: "absolute -top-10 -right-10 w-48 h-48 rounded-full opacity-15", 42387 style: { background: `radial-gradient(circle, ${te} 0%, transparent 70%)` }, 42388 "data-fg-bz1a270": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:668:11:26782:193:e:div" 42389 } 42390 ), 42391 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a271", _fgB: 1790697589582, className: "flex items-center justify-between relative z-10", "data-fg-bz1a271": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:673:11:26987:1034:e:div:ete", children: [ 42392 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a272", _fgB: 1790697589582, "data-fg-bz1a272": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:674:13:27065:600:e:div:ete", children: [ 42393 /* @__PURE__ */ c( 42394 a, 42395 { 42396 _fgT: "h3", 42397 _fgS: "bz1a273", 42398 _fgB: 1790697589582, 42399 className: "font-[DM_Serif_Display] mb-1", 42400 style: { fontSize: "18px" }, 42401 "data-fg-bz1a273": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:675:15:27085:314:e:h3:tste", 42402 children: [ 42403 "See the Agentic Transit Platform", 42404 " ",
42405 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a276", _fgB: 1790697589582, className: "italic", style: { color: fe }, "data-fg-bz1a276": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:680:17:27277:102:e:span:t", children: "In Action." }) 42406 ] 42407 } 42408 ), 42409 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "bz1a278", _fgB: 1790697589582, className: "text-white/70", style: { fontSize: "10.5px" }, "data-fg-bz1a278": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:684:15:27414:232:e:p:t", children: "We'll show you a live walkthrough of the six AI agents, explain how they'll support your team, and answer any questions." }) 42410 ] }), 42411 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "bz1a280", _fgB: 1790697589582, className: "flex flex-col items-end gap-1.5 flex-shrink-0 ml-6", "data-fg-bz1a280": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:690:13:27679:325:e:div:e", children: /* @__PURE__ */ i( 42412 a, 42413 { 42414 _fgT: "div", 42415 _fgS: "bz1a281", 42416 _fgB: 1790697589582, 42417 className: "px-5 py-2 rounded-full text-white", 42418 style: { backgroundColor: te, fontSize: "11px", fontWeight: 600 }, 42419 "data-fg-bz1a281": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:691:15:27762:223:e:div:t", 42420 children: "Schedule a Meeting" 42421 } 42422 ) }) 42423 ] }),
42424 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a284", _fgB: 1790697589582, className: "flex items-center gap-6 mt-4 pt-3 border-t border-white/10 relative z-10", "data-fg-bz1a284": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:701:11:28067:909:e:div:etete", children: [ 42425 /* @__PURE__ */ i(a, { _fgT: "img", _fgS: "bz1a285", _fgB: 1790697589582, src: A1, alt: "IT Curves", className: "h-6 opacity-80", "data-fg-bz1a285": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:702:13:28170:61:e:img" }), 42426 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a286", _fgB: 1790697589582, className: "flex items-center gap-5", "data-fg-bz1a286": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:703:13:28244:588:e:div:etete", children: [ 42427 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bz1a287", _fgB: 1790697589582, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bz1a287": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:704:15:28300:162:e:span:et", children: [ 42428 /* @__P
42428URE__ */ i(a, { _fgT: J1, _fgS: "bz1a288", _fgB: 1790697589582, size: 11, "data-fg-bz1a288": ":0:node_modules/lucide-react:705:17:28405:19:e:Globe::::::Cyd3" }), 42429 " www.ITCurves.AI" 42430 ] }), 42431 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bz1a290", _fgB: 1790697589582, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bz1a290": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:707:15:28477:159:e:span:et", children: [ 42432 /* @__PURE__ */ i(a, { _fgT: Y, _fgS: "bz1a291", _fgB: 1790697589582, size: 11, "data-fg-bz1a291": ":0:node_modules/lucide-react:708:17:28582:19:e:Phone::::::DmpI" }), 42433 " 301-208-2222" 42434 ] }), 42435 /* @__PURE__ */ c(a, { _fgT: "span", _fgS: "bz1a293", _fgB: 1790697589582, className: "flex items-center gap-1.5 text-white/70", style: { fontSize: "9.5px" }, "data-fg-bz1a293": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:710:15:28651:162:e:span:et", children: [ 42436 /* @__PURE__ */ i(a, { _fgT: K1, _fgS: "bz1a294", _fgB: 1790697589582, size: 11, "data-fg-bz1a294": ":0:node_modules/lucide-react:711:17:28756:18:e:Mail::::::D4VR" }), 42437 " [email protected]" 42438 ] }) 42439 ] }),
42440 /* @__PURE__ */ i(a, { _fgT: "span", _fgS: "bz1a296", _fgB: 1790697589582, className: "ml-auto text-white/40", style: { fontSize: "8px" }, "data-fg-bz1a296": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:714:13:28845:114:e:span:t", children: "Page 2 of 2" }) 42441 ] }) 42442 ] 42443 } 42444 ) }) 42445 ] }); 42446} 42447function Xy() { 42448 return /* @__PURE__ */ c(C, { children: [ 42449 /* @__PURE__ */ i("style", { "data-fg-bz1a300": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:731:7:29315:1231:e:style:s", children: ` 42450 .flyer-wrapper-ai-v2 { 42451 display: flex; 42452 flex-direction: column; 42453 align-items: center; 42454 gap: 40px; 42455 padding: 100px 20px 40px; 42456 background: #e5e7eb; 42457 min-height: 100vh; 42458 } 42459 42460 .flyer-page { 42461 width: 8.5in; 42462 height: 11in; 42463 background: white; 42464 box-shadow: 0 4px 24px rgba(0,0,0,0.15); 42465 overflow: hidden; 42466 flex-shrink: 0; 42467 } 42468 42469 @media print { 42470 @page { 42471 size: 8.5in 11in; 42472 margin: 0; 42473 } 42474 42475 body, html { 42476 margin: 0 !important; 42477 padding: 0 !important; 42478 background: white !important; 42479 } 42480 42481 .flyer-wrapper-ai-v2 { 42482 padding: 0; 42483 gap: 0; 42484 background: white; 42485 } 42486 42487 .flyer-page { 42488 box-shadow: none; 42489 page-break-after: always; 42490 break-after: page; 42491 } 42492 42493 .flyer-page:last-child { 42494 page-break-after: avoid; 42495 break-after: avoid; 42496 } 42497 42498 nav, .chatbot-wrapper, footer, .no-print { 42499 display: none !important; 42500 } 42501 } 42502 ` }), 42503 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "bz1a302", _fgB: 1790697589582, className: "flyer-wrapper-ai-v2", "data-fg-bz1a302": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:786:7:30554:90:e:div:ete", children: [
42504 /* @__PURE__ */ i(a, { _fgT: Ky, _fgS: "bz1a303", _fgB: 1790697589582, "data-fg-bz1a303": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:787:9:30600:11:e:PageOne::::::B9hf" }), 42505 /* @__PURE__ */ i(a, { _fgT: Yy, _fgS: "bz1a304", _fgB: 1790697589582, "data-fg-bz1a304": ":0:/src/app/pages/AISolutionsFlyerPageV2.tsx:788:9:30620:11:e:PageTwo::::::CA1p" }) 42506 ] }) 42507 ] }); 42508} 42509const Qy = [ 42510 { 42511 title: "Fixed Route", 42512 description: "Updated two-page Fixed Route flyer â same content with refinements for layout and spacing.", 42513 href: "/flyers/fixed-route" 42514 }, 42515 { 42516 title: "Paratransit V3", 42517 description: "Paratransit flyer version 3 â working copy for iterative design updates and content refinements.", 42518 href: "/flyers/paratransit-v3" 42519 }, 42520 { 42521 title: "Microtransit", 42522 description: "Two-page sales flyer for Microtransit â commingled fleets, zone-based dispatch, full simulation, white-label deployment, and first-mile last-mile coverage.", 42523 href: "/flyers/microtransit" 42524 }, 42525 { 42526 title: "AI Solutions", 42527 description: "AI Solutions flyer version 2 â working copy for iterative design updates and content refinements.", 42528 href: "/flyers/ai-solutions" 42529 } 42530]; 42531function ew() { 42532 return /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cu9v0", _fgB: 1790697589549, _fgD: !0, className: "min-h-screen bg-[#0B1B2B] text-white flex flex-col", "data-fg-cu9v0": ":0:/src/app/pages/FlyersIndexPage.tsx:29:5:961:1665:e:div:xtetxte:1", children: [ 42533 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cu9v2", _fgB: 1790697589549, className: "pt-32 pb-12 px-6 text-center", "data-fg-cu9v2": ":0:/src/app/pages/FlyersIndexPage.tsx:31:7:1057:311:e:div:ete", children: [
42534 /* @__PURE__ */ i(a, { _fgT: "h1", _fgS: "cu9v3", _fgB: 1790697589549, className: "text-4xl md:text-5xl tracking-tight text-white mb-3", "data-fg-cu9v3": ":0:/src/app/pages/FlyersIndexPage.tsx:32:9:1112:105:e:h1:t", children: "Sales Flyers" }), 42535 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cu9v5", _fgB: 1790697589549, className: "text-blue-200/70 max-w-md mx-auto", "data-fg-cu9v5": ":0:/src/app/pages/FlyersIndexPage.tsx:35:9:1226:129:e:p:t", children: "Print-ready product flyers. Select one to view or print." }) 42536 ] }), 42537 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cu9v8", _fgB: 1790697589549, className: "flex-1 w-full max-w-3xl mx-auto px-6 pb-24", "data-fg-cu9v8": ":0:/src/app/pages/FlyersIndexPage.tsx:41:7:1401:1214:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cu9v9", _fgB: 1790697589549, className: "grid gap-4", "data-fg-cu9v9": ":0:/src/app/pages/FlyersIndexPage.tsx:42:9:1470:1132:e:div:x", children: Qy.map((t) => /* @__PURE__ */ c( 42538 a, 42539 { 42540 _fgT: E, 42541 _fgS: "cu9v11", 42542 _fgB: 1790697589549, 42543 href: t.href, 42544 className: "group flex items-center gap-5 bg-white/5 hover:bg-white/10 border border-white/10 hover:border-[#EFBB0F]/40 rounded-xl p-6 transition-all duration-300", 42545 "data-fg-cu9v11": ":0:node_modules/wouter:44:13:1546:1027:e:Link:etete:::::C4yE", 42546 children: [
42547 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "cu9v12", _fgB: 1790697589549, className: "shrink-0 w-12 h-12 rounded-lg bg-[#EFBB0F]/10 flex items-center justify-center text-[#EFBB0F]", "data-fg-cu9v12": ":0:/src/app/pages/FlyersIndexPage.tsx:49:15:1820:171:e:div:e", children: /* @__PURE__ */ i(a, { _fgT: G7, _fgS: "cu9v13", _fgB: 1790697589549, size: 24, "data-fg-cu9v13": ":0:node_modules/lucide-react:50:17:1948:22:e:FileText::::::B1i5" }) }), 42548 /* @__PURE__ */ c(a, { _fgT: "div", _fgS: "cu9v14", _fgB: 1790697589549, className: "flex-1 min-w-0", "data-fg-cu9v14": ":0:/src/app/pages/FlyersIndexPage.tsx:52:15:2006:346:e:div:ete", children: [ 42549 /* @__PURE__ */ i(a, { _fgT: "h2", _fgS: "cu9v15", _fgB: 1790697589549, className: "text-white group-hover:text-[#EFBB0F] transition-colors duration-300 mb-1", "data-fg-cu9v15": ":0:/src/app/pages/FlyersIndexPage.tsx:53:17:2055:144:e:h2:x", children: t.title }), 42550 /* @__PURE__ */ i(a, { _fgT: "p", _fgS: "cu9v17", _fgB: 1790697589549, className: "text-blue-200/50 text-sm leading-relaxed", "data-fg-cu9v17": ":0:/src/app/pages/FlyersIndexPage.tsx:56:17:2216:115:e:p:x", children: t.description }) 42551 ] }),
42552 /* @__PURE__ */ i( 42553 a, 42554 { 42555 _fgT: D, 42556 _fgS: "cu9v19", 42557 _fgB: 1790697589549, 42558 size: 20, 42559 className: "shrink-0 text-white/20 group-hover:text-[#EFBB0F] group-hover:translate-x-1 transition-all duration-300", 42560 "data-fg-cu9v19": ":0:node_modules/lucide-react:60:15:2367:186:e:ArrowRight::::::s5N" 42561 } 42562 ) 42563 ] 42564 }, 42565 t.href 42566 )) }) }) 42567 ] }); 42568} 42569function tw() { 42570 return /* @__PURE__ */ c(a, { _fgT: Vd, _fgS: "d3bl0", _fgB: 1790697588964, _fgD: !0, "data-fg-d3bl0": ":0:/src/app/App.tsx:36:5:2043:2136:e:ContactModalProvider:etetetete:1::::XLk", children: [ 42571 /* @__PURE__ */ i(a, { _fgT: Zd, _fgS: "d3bl1", _fgB: 1790697588964, "data-fg-d3bl1": ":0:/src/app/App.tsx:37:7:2072:10:e:Navbar::::::BXyW" }), 42572 /* @__PURE__ */ i(a, { _fgT: Wd, _fgS: "d3bl2", _fgB: 1790697588964, "data-fg-d3bl2": ":0:/src/app/App.tsx:38:7:2089:15:e:ScrollToTop::::::Domw" }), 42573 /* @__PURE__ */ i(a, { _fgT: "div", _fgS: "d3bl3", _fgB: 1790697588964, className: "relative z-10 bg-white shadow-2xl", "data-fg-d3bl3": ":0:/src/app/App.tsx:40:7:2118:1981:e:div:e", children: /* @__PURE__ */ c(a, { _fgT: Z9, _fgS: "d3bl4", _fgB: 1790697588964, "data-fg-d3bl4": ":0:node_modules/wouter:41:9:2178:1908:e:Switch:etetetetetetetetetetetetetetetetetetetetetetetetetetxte:::::dtQ", children: [
42574 /* @__PURE__ */ i(J, { path: "/", component: Va, "data-fg-d3bl5": ":0:node_modules/wouter:42:11:2197:39:e:Route::::::BI6v" }), 42575 /* @__PURE__ */ i(J, { path: "/markets/fixed-route", component: Tp, "data-fg-d3bl6": ":0:node_modules/wouter:43:11:2247:70:e:Route::::::BI6v" }), 42576 /* @__PURE__ */ i(J, { path: "/markets", component: Gg, "data-fg-d3bl7": ":0:node_modules/wouter:44:11:2328:49:e:Route::::::BI6v" }), 42577 /* @__PURE__ */ i(J, { path: "/all-in-one-platform", component: df, "data-fg-d3bl8": ":0:node_modules/wouter:45:11:2388:63:e:Route::::::BI6v" }), 42578 /* @__PURE__ */ i(J, { path: "/drivigo", component: Of, "data-fg-d3bl9": ":0:node_modules/wouter:46:11:2462:49:e:Route::::::BI6v" }), 42579 /* @__PURE__ */ i(J, { path: "/transigo", component: qf, "data-fg-d3bl10": ":0:node_modules/wouter:47:11:2522:51:e:Route::::::BI6v" }), 42580 /* @__PURE__ */ i(J, { path: "/fixed-route", component: cp, "data-fg-d3bl11": ":0:node_modules/wouter:48:11:2584:56:e:Route::::::BI6v" }), 42581 /* @__PURE__ */ i(J, { path: "/paratransit", component: Ep, "data-fg-d3bl12": ":0:node_modules/wouter:49:11:2651:57:e:Route::::::BI6v" }),
42582 /* @__PURE__ */ i(J, { path: "/microtransit", component: $p, "data-fg-d3bl13": ":0:node_modules/wouter:50:11:2719:59:e:Route::::::BI6v" }), 42583 /* @__PURE__ */ i(J, { path: "/nemt", component: Qp, "data-fg-d3bl14": ":0:node_modules/wouter:51:11:2789:43:e:Route::::::BI6v" }), 42584 /* @__PURE__ */ i(J, { path: "/taxi-dispatch", component: cM, "data-fg-d3bl15": ":0:node_modules/wouter:52:11:2843:58:e:Route::::::BI6v" }), 42585 /* @__PURE__ */ i(J, { path: "/ai-solutions", component: Ff, "data-fg-d3bl16": ":0:node_modules/wouter:53:11:2912:58:e:Route::::::BI6v" }), 42586 /* @__PURE__ */ i(J, { path: "/ai/voice", component: ax, "data-fg-d3bl17": ":0:node_modules/wouter:54:11:2981:50:e:Route::::::BI6v" }), 42587 /* @__PURE__ */ i(J, { path: "/ai/workshop", component: ox, "data-fg-d3bl18": ":0:node_modules/wouter:55:11:3042:56:e:Route::::::BI6v" }), 42588 /* @__PURE__ */ i(J, { path: "/about", component: yM, "data-fg-d3bl19": ":0:node_modules/wouter:56:11:3109:45:e:Route::::::BI6v" }), 42589 /* @__PURE__ */ i(J, { path: "/ivr", component: PM, "data-fg-d3bl20": ":0:node_modules/wouter:57:11:3165:41:e:Route::::::BI6v" }),
42590 /* @__PURE__ */ i(J, { path: "/news-articles", component: ly, "data-fg-d3bl21": ":0:node_modules/wouter:58:11:3217:62:e:Route::::::BI6v" }), 42591 /* @__PURE__ */ i(J, { path: "/news-articles/go-time-annapolis", component: hy, "data-fg-d3bl22": ":0:node_modules/wouter:59:11:3290:88:e:Route::::::BI6v" }), 42592 /* @__PURE__ */ i(J, { path: "/news-articles/:slug", component: dy, "data-fg-d3bl23": ":0:node_modules/wouter:60:11:3389:69:e:Route::::::BI6v" }), 42593 /* @__PURE__ */ i(J, { path: "/contact", component: Gm, "data-fg-d3bl24": ":0:node_modules/wouter:61:11:3469:49:e:Route::::::BI6v" }), 42594 /* @__PURE__ */ i(J, { path: "/meet", component: Jm, "data-fg-d3bl25": ":0:node_modules/wouter:62:11:3529:50:e:Route::::::BI6v" }), 42595 /* @__PURE__ */ i(J, { path: "/flyers", component: ew, "data-fg-d3bl26": ":0:node_modules/wouter:63:11:3590:52:e:Route::::::BI6v" }), 42596 /* @__PURE__ */ i(J, { path: "/flyers/fixed-route", component: Cy, "data-fg-d3bl27": ":0:node_modules/wouter:64:11:3653:70:e:Route::::::BI6v" }),
42597 /* @__PURE__ */ i(J, { path: "/flyers/paratransit-v3", component: Oy, "data-fg-d3bl28": ":0:node_modules/wouter:65:11:3734:74:e:Route::::::BI6v" }), 42598 /* @__PURE__ */ i(J, { path: "/flyers/microtransit", component: Gy, "data-fg-d3bl29": ":0:node_modules/wouter:66:11:3819:71:e:Route::::::BI6v" }), 42599 /* @__PURE__ */ i(J, { path: "/flyers/ai-solutions", component: Xy, "data-fg-d3bl30": ":0:node_modules/wouter:67:11:3901:72:e:Route::::::BI6v" }), 42600 /* @__PURE__ */ i(J, { component: Va, "data-fg-d3bl32": ":0:node_modules/wouter:69:11:4038:30:e:Route::::::BI6v" }) 42601 ] }) }), 42602 /* @__PURE__ */ i(a, { _fgT: qd, _fgS: "d3bl33", _fgB: 1790697588964, "data-fg-d3bl33": ":0:/src/app/App.tsx:73:7:4107:16:e:ContactModal::::::B2Kq" }), 42603 /* @__PURE__ */ i(a, { _fgT: $d, _fgS: "d3bl34", _fgB: 1790697588964, "data-fg-d3bl34": ":0:/src/app/App.tsx:74:7:4130:21:e:FlexAgentsChatbot::::::kng" }) 42604 ] }); 42605} 42606const aw = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ 42607 __proto__: null, 42608 default: tw 42609}, Symbol.toStringTag, { value: "Module" })); 42610export { 42611 sw as Code0_8 42612};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.