{"version":3,"file":"bundle.min.js","sources":["../../../../frontend/src/utils/django.js","../../../../frontend/src/capabilities/favoriteField.js","../../../../frontend/src/capabilities/disableSubmitOnClick.js","../../../../frontend/src/utils/imageCompression.js","../../../../frontend/src/capabilities/compressImageInputs.js","../../../../frontend/node_modules/swiper/shared/ssr-window.esm.mjs","../../../../frontend/node_modules/swiper/shared/utils.mjs","../../../../frontend/node_modules/swiper/shared/swiper-core.mjs","../../../../frontend/node_modules/swiper/modules/keyboard.mjs","../../../../frontend/node_modules/swiper/shared/create-element-if-not-defined.mjs","../../../../frontend/node_modules/swiper/modules/navigation.mjs","../../../../frontend/node_modules/swiper/shared/classes-to-selector.mjs","../../../../frontend/node_modules/swiper/modules/pagination.mjs","../../../../frontend/node_modules/swiper/modules/zoom.mjs","../../../../frontend/src/pages/listing.js","../../../../frontend/src/utils/linkify.js","../../../../frontend/src/pages/room/roomAppContainer.js","../../../../frontend/node_modules/preact/dist/preact.mjs","../../../../frontend/node_modules/preact/hooks/dist/hooks.mjs","../../../../frontend/node_modules/htm/dist/htm.mjs","../../../../frontend/node_modules/preact-feather/dist/icons/arrow-down.js","../../../../frontend/node_modules/preact-feather/dist/icons/image.js","../../../../frontend/node_modules/preact-feather/dist/icons/send.js","../../../../frontend/node_modules/preact-feather/dist/icons/x-circle.js","../../../../frontend/src/pages/room/roomApp.js","../../../../frontend/src/utils/setAllCheckboxes.js","../../../../frontend/src/capabilities/selectUSStatesHelperButtons.js","../../../../frontend/src/capabilities/selectFieldsHelperButtons.js","../../../../frontend/src/main.js","../../../../frontend/src/pages/contact_us.js","../../../../frontend/src/pages/edit_listing_wtt.js","../../../../frontend/src/pages/my_favorite_fields.js","../../../../frontend/src/pages/menu.js","../../../../frontend/src/pages/room/room.js","../../../../frontend/src/pages/user_select_us_states.js","../../../../frontend/src/pages/user_select_fields.js"],"sourcesContent":["export function getCRSFToken() {\n  const $token = document.querySelector(\"[name=csrfmiddlewaretoken]\");\n  if (!$token) {\n    throw new Error(`CSRF token not found`);\n  }\n  return $token.value;\n}\n\nlet _globalContext; // cache\n\nexport function getGlobalContext() {\n  if (!_globalContext) {\n    const $globalContextJson = document.querySelector(\"#global_context_json\");\n    if (!$globalContextJson) {\n      throw new Error(`Global context not found`);\n    }\n    _globalContext = JSON.parse($globalContextJson.textContent);\n  }\n  return _globalContext;\n}\n","import { getGlobalContext, getCRSFToken } from \"../utils/django\";\n\n/**\n * Attaches a click event listener to all elements with the class \"favorite-field\".\n * When clicked, the element will send a POST request to the URL specified in the element's\n * dataset.favoriteFieldUrl attribute. The request will include the CSRF token in the\n * \"X-CSRFToken\" header.\n * If the request is successful, the element's innerHTML will be updated to reflect the\n * new favorite status.\n *\n * If the element does not have a dataset.favoriteFieldUrl attribute, or if the element does\n * not have a button descendant, then the function will do nothing.\n *\n * @returns {void}\n */\nexport function favoriteField() {\n  if (!getGlobalContext()?.request?.user?.is_authenticated) {\n    return;\n  }\n  const crsfToken = getCRSFToken();\n  const els = document.querySelectorAll(\".favorite-field\");\n  els.forEach((el) => {\n    const favoriteFieldUrl = el.dataset.favoriteFieldUrl;\n    if (!favoriteFieldUrl) {\n      console.error(\"favoriteFieldUrl not found on element\", el);\n      return;\n    }\n    const button = el.querySelector(\"button\");\n    const favoriteWord = \"Favorite\";\n    const unfavoriteWord = \"Unfavorite\";\n    const favoriteSpan = \"<span>☆</span>\";\n    const unfavoriteSpan =\n      '<span style=\"color: var(--favorited-color);\">★</span>';\n    if (!button) {\n      console.error(\"Button not found in favorite field element\", el);\n      return;\n    }\n    button.addEventListener(\"click\", () => {\n      fetch(favoriteFieldUrl, {\n        method: \"POST\",\n        headers: {\n          \"X-CSRFToken\": crsfToken,\n          \"Content-Type\": \"application/json\",\n        },\n      })\n        .then((response) => response.json())\n        .then((data) => {\n          if (data.favorite) {\n            button.innerHTML = button.innerHTML\n              .replace(favoriteSpan, unfavoriteSpan)\n              .replace(favoriteWord, unfavoriteWord);\n          } else {\n            button.innerHTML = button.innerHTML\n              .replace(unfavoriteSpan, favoriteSpan)\n              .replace(unfavoriteWord, favoriteWord);\n          }\n        })\n        .catch((error) => {\n          console.error(\"Error:\", error);\n          button.innerHTML =\n            '<span style=\"color: var(--alert-l1-color);\">☹</span>&nbsp;Error';\n        });\n    });\n  });\n}\n","export function disableSubmitOnClick() {\n  const $form = document.querySelector(\"form\");\n  if (!$form) {\n    console.info(\"Form not found\");\n    return;\n  }\n  $form.addEventListener(\"submit\", (e) => {\n    const button = document.querySelector('button[type=\"submit\"]');\n    if (!button) {\n      return;\n    }\n    button.disabled = true;\n    button.innerText = \"Submitting...\";\n  });\n}\n","export function toBase64(file) {\n  return new Promise((resolve, reject) => {\n    const r = new FileReader();\n    r.onload = () => resolve(r.result);\n    r.onerror = reject;\n    r.readAsDataURL(file);\n  });\n}\n\nexport function formatBytes(bytes) {\n  if (typeof bytes !== \"number\" || isNaN(bytes) || bytes <= 0) return \"0 B\";\n  const k = 1024;\n  const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  const value = bytes / Math.pow(k, i);\n  return `${value.toFixed(i === 0 ? 0 : 2)} ${units[i]}`;\n}\n\n// --- Feature detection for canvas MIME support (cached) ---\nlet _supportsWebPCanvas = null;\nasync function supportsCanvasType(type) {\n  const canvas = new OffscreenCanvas(2, 2);\n  const ctx = canvas.getContext(\"2d\"); // Chrome will throw an error if we don't call getContext. So it's required, even though it's not used.\n  const blob = await canvas.convertToBlob({ type, quality: 0.8 });\n  return blob.type === type;\n}\n\nasync function getPreferredOutputType() {\n  if (_supportsWebPCanvas == null) {\n    _supportsWebPCanvas = await supportsCanvasType(\"image/webp\");\n  }\n  return _supportsWebPCanvas ? \"image/webp\" : \"image/jpeg\";\n}\n\nexport const defaultOptions = {\n  quality: 0.8,\n  maxWidth: 1200, // Set your desired max width\n  maxHeight: 1200, // Set your desired max height\n  verbose: true,\n};\n\nexport async function compress(\n  file,\n  { quality = 1, maxWidth = 1200, maxHeight = 1200, verbose = false },\n) {\n  /**\n   * Most of this image compression logic is derived from https://pqina.nl/blog/compress-image-before-upload/\n   * I had gpt modify it to support resizing.\n   */\n  const start = performance.now();\n  const type = await getPreferredOutputType();\n\n  // Store original file info for verbose output\n  const originalSize = file.size;\n  const originalType = file.type;\n\n  // Get as image data\n  const imageBitmap = await createImageBitmap(file);\n\n  // Calculate the new dimensions\n  let { width, height } = imageBitmap;\n  const originalWidth = width;\n  const originalHeight = height;\n\n  if (width > maxWidth || height > maxHeight) {\n    if (width / height > maxWidth / maxHeight) {\n      width = maxWidth;\n      height = Math.round(maxWidth * (imageBitmap.height / imageBitmap.width));\n    } else {\n      height = maxHeight;\n      width = Math.round(maxHeight * (imageBitmap.width / imageBitmap.height));\n    }\n  }\n\n  // Draw to canvas with new dimensions\n  const canvas = new OffscreenCanvas(width, height);\n  const ctx = canvas.getContext(\"2d\");\n  ctx.drawImage(imageBitmap, 0, 0, width, height);\n  if (imageBitmap.close) imageBitmap.close(); // free memory\n\n  // Turn into Blob\n  const blob = await canvas.convertToBlob({ type, quality });\n\n  // Turn Blob into File\n  const compressedFile = new File([blob], file.name, {\n    type: blob.type,\n  });\n\n  // Log compression diff if verbose\n  if (verbose) {\n    const durationMs = Math.round(performance.now() - start);\n    const percentReduction = (\n      (1 - compressedFile.size / originalSize) *\n      100\n    ).toFixed(1);\n    console.groupCollapsed(`[imageCompression] ${file.name}`);\n    console.table({\n      Before: {\n        name: file.name,\n        size: `${originalSize} (${formatBytes(originalSize)})`,\n        type: originalType || \"unknown\",\n        dimensions: `${originalWidth}x${originalHeight}`,\n      },\n      After: {\n        name: compressedFile.name,\n        size: `${compressedFile.size} (${formatBytes(compressedFile.size)})`,\n        type: compressedFile.type || \"unknown\",\n        dimensions: `${width}x${height}`,\n      },\n    });\n    console.log(`Duration: ${durationMs} ms | Reduction: ${percentReduction}%`);\n    console.groupEnd();\n  }\n\n  return compressedFile;\n}\n\n/**\n * Class representing a pool of workers for image compression.\n *\n * This class is responsible for spawning the necessary number of workers\n * and distributing the compression tasks among them. It also handles the\n * distribution of files to be processed and the tracking of processed files.\n *\n * Performance\n *   Apple M2 Pro\n *   Google Chrome\n *   50 files, each png 12MB 2000×2000\n *   Total: 600MB\n *   Compression Settings: {quality: 0.8, maxWidth: 1200, maxHeight: 1200}, image/webp\n *     1 Worker\n *     Total Compression Time: 10,657 ms\n *\n *     12 Workers\n *     Total Compression Time: 1,695 ms\n *\n * @example\n * const compressionPool = new CompressionPool();\n * compressionPool.spawnWorkers(); // pre-spawn workers so they're ready to go\n *\n * const files = Array.from(input.files);\n * const { success, failed } = await compressionPool.compress(files);\n * // Do something with the compressed files\n */\nexport class CompressionPool {\n  constructor() {\n    const $workerPath = document.getElementById(\"worker-path\");\n    if (!$workerPath) {\n      throw new Error(\"Cannot find worker-path element\");\n    }\n    if (!$workerPath?.dataset?.path) {\n      throw new Error(`workerPath.dataset.path is falsy`);\n    }\n    this.workerUrl = `/static/${$workerPath?.dataset?.path}`;\n\n    this.MAX_WORKERS = navigator.hardwareConcurrency || 4;\n    console.log(\"MAX_WORKERS\", this.MAX_WORKERS);\n    \n    this.filesQueue = []; // This will hold the files to be processed\n    this.originalFilesQueue = []; // Serves as a copy of filesQueue, but contents remain unchanged\n    this.originalFilesQueueLength = 0; // This will hold the original length of the files queue\n    this.idleWorkers = []; // This will hold workers that are currently available/idle\n    this.allWorkers = []; // Keep track of all worker instances for termination if needed\n    this.filesSuccess = []; // To store processed files\n    this.filesFailed = []; // To store failed files\n    this.processed = 0;\n\n    this._pending = null; // { resolve, reject } for current batch\n  }\n\n  spawnWorkers() {\n    if (this.allWorkers.length > 0) {\n      console.warn(\"Workers already spawned\", this.allWorkers);\n      return;\n    }\n\n    for (let i = 0; i < this.MAX_WORKERS; i++) {\n      const worker = new Worker(this.workerUrl, { type: \"module\" });\n      worker.onmessage = (e) => {\n        const { op, data } = e.data || {};\n        switch (op) {\n          case \"DONE\":\n            this.filesSuccess[data.index] = data.file;\n            this.processed++;\n            this.idleWorkers.push(worker);\n            this.tryDispatchTask();\n            break;\n          case \"ERROR\":\n            console.error(data);\n            const index = data.original.data.index;\n            this.filesFailed[index] = this.originalFilesQueue[index].file;\n            this.processed++;\n            this.idleWorkers.push(worker);\n            this.tryDispatchTask();\n            break;\n          default:\n            break;\n        }\n      };\n\n      worker.onerror = (e) => {\n        console.error(e);\n        const { reject } = this._pending;\n        reject(e);\n      };\n\n      this.allWorkers.push(worker);\n      this.idleWorkers.push(worker); // Initially, all workers are idle\n    }\n  }\n\n  tryDispatchTask() {\n    if (this.filesQueue.length > 0 && this.idleWorkers.length > 0) {\n      const { index, file } = this.filesQueue.shift();\n      const worker = this.idleWorkers.shift();\n      worker.postMessage({ op: \"COMPRESS_IMAGE\", data: { index, file } });\n    } else if (this.processed === this.originalFilesQueueLength) {\n      this.resolve();\n    }\n  }\n\n  resolve() {\n    const { resolve } = this._pending;\n    this._pending = null;\n    resolve({\n      filesSuccess: this.filesSuccess, // Preserves ordering, but also includes nulls\n      filesFailed: this.filesFailed, // Preserves ordering, but also includes nulls\n      success: this.filesSuccess.filter(Boolean), // Preserves ordering with all nulls removed\n      failed: this.filesFailed.filter(Boolean), // Preserves ordering with all nulls removed\n    });\n  }\n\n  async compress(files) {\n    if (this._pending) {\n      return Promise.reject(\n        new Error(`${CompressionPool.name} is already processing a batch`),\n      );\n    }\n    if (!Array.isArray(files)) {\n      return Promise.reject(new Error(`Expected array. Instead got ${files}`));\n    }\n    // queue with indices so we can preserve input order in results\n    this.filesQueue = files.map((file, index) => ({ index, file }));\n    this.originalFilesQueue = Array.from(this.filesQueue);\n    this.originalFilesQueueLength = this.originalFilesQueue.length;\n    // fixed-length arrays preserve ordering\n    this.filesSuccess = new Array(this.originalFilesQueueLength);\n    this.filesFailed = new Array(this.originalFilesQueueLength);\n    this.processed = 0;\n    const promise = new Promise((resolve, reject) => {\n      this._pending = { resolve, reject };\n    });\n    const min = Math.min(this.MAX_WORKERS, this.originalFilesQueueLength);\n    if (min > 0) {\n      if (this.allWorkers.length === 0) {\n        // spawn workers if needed (prevents foot-gun if forgot to in advance)\n        this.spawnWorkers();\n      }\n      for (let i = 0; i < min; i++) {\n        this.tryDispatchTask();\n      }\n    } else {\n      this.tryDispatchTask();\n    }\n    return promise;\n  }\n}\n","import { formatBytes, CompressionPool } from \"../utils/imageCompression\";\nimport { getGlobalContext } from \"../utils/django.js\";\n\nexport function compressImageInputs() {\n  const compressionPool = new CompressionPool();\n  compressionPool.spawnWorkers();\n\n  const inputs = document.querySelectorAll('input[type=\"file\"]');\n  const submit = document.querySelector('button[type=\"submit\"]');\n\n  for (let input of inputs) {\n    input.addEventListener(\"change\", async (e) => {\n      submit.disabled = true;\n\n      const files = Array.from(e.target.files);\n\n      if (!files.length) {\n        submit.disabled = false;\n        return;\n      }\n\n      const maxFiles = e.target.dataset?.maxFiles;\n      if (maxFiles) {\n        if (files.length > Number(maxFiles)) {\n          alert(\n            `You can only upload ${maxFiles} images. You selected ${files.length}.`,\n          );\n          submit.disabled = false;\n          return;\n        }\n      }\n\n      // We'll store the files in this data transfer object\n      const dataTransfer = new DataTransfer();\n\n      let originalTotalSize = files.reduce(\n        (total, file) => total + file.size,\n        0,\n      );\n      console.log(\n        `Original total size: ${originalTotalSize} (${formatBytes(originalTotalSize)})`,\n      );\n\n      const start = performance.now();\n\n      const { success, failed } = await compressionPool.compress(files);\n\n      if (failed.length > 0) {\n        console.error(`Failed to compress`, failed);\n        window.alert(`Failed to compress ${failed.length} files.`);\n      }\n\n      console.log(success);\n\n      // Save back the compressed file instead of the original file\n      success.forEach((file) => {\n        dataTransfer.items.add(file);\n      });\n\n      const end = performance.now();\n      console.log(`Total compression time`, end - start);\n\n      // Set value of the file input to our new files list\n      e.target.files = dataTransfer.files;\n\n      let newTotalSize = 0;\n      for (const file of dataTransfer.files) {\n        newTotalSize += file.size;\n      }\n      console.log(\n        `New total size: ${newTotalSize} (${formatBytes(newTotalSize)})`,\n      );\n\n      submit.disabled = false;\n    });\n  }\n}\n","/**\n * SSR Window 5.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: June 27, 2025\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target = {}, src = {}) {\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n      extend(target[key], src[key]);\n    }\n  });\n}\nconst ssrDocument = {\n  body: {},\n  addEventListener() {},\n  removeEventListener() {},\n  activeElement: {\n    blur() {},\n    nodeName: ''\n  },\n  querySelector() {\n    return null;\n  },\n  querySelectorAll() {\n    return [];\n  },\n  getElementById() {\n    return null;\n  },\n  createEvent() {\n    return {\n      initEvent() {}\n    };\n  },\n  createElement() {\n    return {\n      children: [],\n      childNodes: [],\n      style: {},\n      setAttribute() {},\n      getElementsByTagName() {\n        return [];\n      }\n    };\n  },\n  createElementNS() {\n    return {};\n  },\n  importNode() {\n    return null;\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  }\n};\nfunction getDocument() {\n  const doc = typeof document !== 'undefined' ? document : {};\n  extend(doc, ssrDocument);\n  return doc;\n}\nconst ssrWindow = {\n  document: ssrDocument,\n  navigator: {\n    userAgent: ''\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  },\n  history: {\n    replaceState() {},\n    pushState() {},\n    go() {},\n    back() {}\n  },\n  CustomEvent: function CustomEvent() {\n    return this;\n  },\n  addEventListener() {},\n  removeEventListener() {},\n  getComputedStyle() {\n    return {\n      getPropertyValue() {\n        return '';\n      }\n    };\n  },\n  Image() {},\n  Date() {},\n  screen: {},\n  setTimeout() {},\n  clearTimeout() {},\n  matchMedia() {\n    return {};\n  },\n  requestAnimationFrame(callback) {\n    if (typeof setTimeout === 'undefined') {\n      callback();\n      return null;\n    }\n    return setTimeout(callback, 0);\n  },\n  cancelAnimationFrame(id) {\n    if (typeof setTimeout === 'undefined') {\n      return;\n    }\n    clearTimeout(id);\n  }\n};\nfunction getWindow() {\n  const win = typeof window !== 'undefined' ? window : {};\n  extend(win, ssrWindow);\n  return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes = '') {\n  return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {\n      // no getter for object\n    }\n    try {\n      delete object[key];\n    } catch (e) {\n      // something got wrong\n    }\n  });\n}\nfunction nextTick(callback, delay = 0) {\n  return setTimeout(callback, delay);\n}\nfunction now() {\n  return Date.now();\n}\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n  if (!style) {\n    style = el.style;\n  }\n  return style;\n}\nfunction getTranslate(el, axis = 'x') {\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el);\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    }\n    // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n  return curTransform || 0;\n}\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n  const to = Object(args[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  for (let i = 1; i < args.length; i += 1) {\n    const nextSource = args[i];\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n  return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n  swiper,\n  targetPosition,\n  side\n}) {\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n  const animate = () => {\n    time = new Date().getTime();\n    if (startTime === null) {\n      startTime = time;\n    }\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n  animate();\n}\nfunction getSlideTransformEl(slideEl) {\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector = '') {\n  const window = getWindow();\n  const children = [...element.children];\n  if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {\n    children.push(...element.assignedElements());\n  }\n  if (!selector) {\n    return children;\n  }\n  return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOfSlot(el, slot) {\n  // Breadth-first search through all parent's children and assigned elements\n  const elementsQueue = [slot];\n  while (elementsQueue.length > 0) {\n    const elementToCheck = elementsQueue.shift();\n    if (el === elementToCheck) {\n      return true;\n    }\n    elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : []));\n  }\n}\nfunction elementIsChildOf(el, parent) {\n  const window = getWindow();\n  let isChild = parent.contains(el);\n  if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n    const children = [...parent.assignedElements()];\n    isChild = children.includes(el);\n    if (!isChild) {\n      isChild = elementIsChildOfSlot(el, parent);\n    }\n  }\n  return isChild;\n}\nfunction showWarning(text) {\n  try {\n    console.warn(text);\n    return;\n  } catch (err) {\n    // err\n  }\n}\nfunction createElement(tag, classes = []) {\n  const el = document.createElement(tag);\n  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n  return el;\n}\nfunction elementOffset(el) {\n  const window = getWindow();\n  const document = getDocument();\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\nfunction elementPrevAll(el, selector) {\n  const prevEls = [];\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if (prev.matches(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return prevEls;\n}\nfunction elementNextAll(el, selector) {\n  const nextEls = [];\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if (next.matches(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return nextEls;\n}\nfunction elementStyle(el, prop) {\n  const window = getWindow();\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n  let child = el;\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\nfunction elementParents(el, selector) {\n  const parents = []; // eslint-disable-line\n  let parent = el.parentElement; // eslint-disable-line\n  while (parent) {\n    if (selector) {\n      if (parent.matches(selector)) parents.push(parent);\n    } else {\n      parents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n  function fireCallBack(e) {\n    if (e.target !== el) return;\n    callback.call(el, e);\n    el.removeEventListener('transitionend', fireCallBack);\n  }\n  if (callback) {\n    el.addEventListener('transitionend', fireCallBack);\n  }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n  const window = getWindow();\n  if (includeMargins) {\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n  }\n  return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n  return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n  return v => {\n    if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n      return v + 0.001;\n    }\n    return v;\n  };\n}\nfunction setInnerHTML(el, html = '') {\n  if (typeof trustedTypes !== 'undefined') {\n    el.innerHTML = trustedTypes.createPolicy('html', {\n      createHTML: s => s\n    }).createHTML(html);\n  } else {\n    el.innerHTML = html;\n  }\n}\n\nexport { setCSSProperty as a, elementParents as b, createElement as c, elementOffset as d, elementChildren as e, now as f, getSlideTransformEl as g, elementOuterSize as h, elementIndex as i, classesToTokens as j, getTranslate as k, elementTransitionEnd as l, makeElementsArray as m, nextTick as n, isObject as o, getRotateFix as p, elementStyle as q, elementNextAll as r, setInnerHTML as s, elementPrevAll as t, animateCSSModeScroll as u, showWarning as v, elementIsChildOf as w, extend as x, deleteProps as y };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { b as elementParents, q as elementStyle, e as elementChildren, a as setCSSProperty, h as elementOuterSize, r as elementNextAll, t as elementPrevAll, k as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, f as now, x as extend, i as elementIndex, y as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\n\nlet deviceCached;\nfunction calcDevice({\n  userAgent\n} = {}) {\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  }\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n\n  // Export object\n  return device;\n}\nfunction getDevice(overrides = {}) {\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n  return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n  const window = getWindow();\n  const device = getDevice();\n  let needPerspectiveFix = false;\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n  if (isSafari()) {\n    const ua = String(window.navigator.userAgent);\n    if (ua.includes('Version/')) {\n      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n    }\n  }\n  const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n  const isSafariBrowser = isSafari();\n  const need3dFix = isSafariBrowser || isWebView && device.ios;\n  return {\n    isSafari: needPerspectiveFix || isSafariBrowser,\n    needPerspectiveFix,\n    need3dFix,\n    isWebView\n  };\n}\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n  return browser;\n}\n\nfunction Resize({\n  swiper,\n  on,\n  emit\n}) {\n  const window = getWindow();\n  let observer = null;\n  let animationFrame = null;\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      animationFrame = window.requestAnimationFrame(() => {\n        const {\n          width,\n          height\n        } = swiper;\n        let newWidth = width;\n        let newHeight = height;\n        entries.forEach(({\n          contentBoxSize,\n          contentRect,\n          target\n        }) => {\n          if (target && target !== swiper.el) return;\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n        });\n        if (newWidth !== width || newHeight !== height) {\n          resizeHandler();\n        }\n      });\n    });\n    observer.observe(swiper.el);\n  };\n  const removeObserver = () => {\n    if (animationFrame) {\n      window.cancelAnimationFrame(animationFrame);\n    }\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}\n\nfunction Observer({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const observers = [];\n  const window = getWindow();\n  const attach = (target, options = {}) => {\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (swiper.__preventObserver__) return;\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n  const init = () => {\n    if (!swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = elementParents(swiper.hostEl);\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    attach(swiper.hostEl, {\n      childList: swiper.params.observeSlideChildren\n    });\n\n    // Observe wrapper\n    attach(swiper.wrapperEl, {\n      attributes: false\n    });\n  };\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n  on(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    function onceHandler(...args) {\n      self.off(events, onceHandler);\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny(handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n    return self;\n  },\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n    return self;\n  },\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit(...args) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\n\nfunction updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const el = swiper.el;\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = el.clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = el.clientHeight;\n  }\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n  height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\n\nfunction updateSlides() {\n  const swiper = this;\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n  }\n  const params = swiper.params;\n  const {\n    wrapperEl,\n    slidesEl,\n    rtlTranslate: rtl,\n    wrongRTL\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  const swiperSize = swiper.size - offsetBefore - offsetAfter;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  swiper.virtualSize = -spaceBetween - offsetBefore - offsetAfter;\n\n  // reset margins\n  slides.forEach(slideEl => {\n    if (rtl) {\n      slideEl.style.marginLeft = '';\n    } else {\n      slideEl.style.marginRight = '';\n    }\n    slideEl.style.marginBottom = '';\n    slideEl.style.marginTop = '';\n  });\n\n  // reset cssMode offsets\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n  }\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n  if (gridEnabled) {\n    swiper.grid.initSlides(slides);\n  } else if (swiper.grid) {\n    swiper.grid.unsetSlides();\n  }\n\n  // Calc slides\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    const slide = slides[i];\n    if (slide) {\n      if (gridEnabled) {\n        swiper.grid.updateSlide(i, slide, slides);\n      }\n      if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n    }\n\n    if (isVirtual && params.slidesPerView === 'auto') {\n      if (params.virtual.slidesPerViewAutoSlideSize) {\n        slideSize = params.virtual.slidesPerViewAutoSlideSize;\n      }\n      if (slideSize && slide) {\n        if (params.roundLengths) slideSize = Math.floor(slideSize);\n        slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    } else if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slide.style[swiper.getDirectionLabel('width')] = ``;\n      }\n      const slideStyles = getComputedStyle(slide);\n      const currentTransform = slide.style.transform;\n      const currentWebKitTransform = slide.style.webkitTransform;\n      if (currentTransform) {\n        slide.style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const {\n            clientWidth,\n            offsetWidth\n          } = slide;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n      if (currentTransform) {\n        slide.style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n      if (slide) {\n        slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n    if (slide) {\n      slide.swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (params.setWrapperSize) {\n    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid);\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (isVirtual && params.loop) {\n    const size = slidesSizesGrid[0] + spaceBetween;\n    if (params.slidesPerGroup > 1) {\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n      const groupSize = size * params.slidesPerGroup;\n      for (let i = 0; i < groups; i += 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n      }\n    }\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n      if (params.slidesPerGroup === 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n      }\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n      swiper.virtualSize += size;\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n  if (spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode || params.loop) return true;\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }).forEach(slideEl => {\n      slideEl.style[key] = `${spaceBetween}px`;\n    });\n  }\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n    snapGrid = snapGrid.map(snap => {\n      if (snap <= 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const offsetSize = (offsetBefore || 0) + (offsetAfter || 0);\n    if (allSlidesSize + offsetSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  swiper.emit('slidesUpdated');\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n    } else if (hasClassBackfaceClassAdded) {\n      swiper.el.classList.remove(backFaceHiddenClass);\n    }\n  }\n}\n\nfunction updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides[swiper.getSlideIndexByData(index)];\n    }\n    return swiper.slides[index];\n  };\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      (swiper.visibleSlides || []).forEach(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n  // eslint-disable-next-line\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n  }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesProgress(translate = this && this.translate || 0) {\n  const swiper = this;\n  const params = swiper.params;\n  const {\n    slides,\n    rtlTranslate: rtl,\n    snapGrid\n  } = swiper;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n  let spaceBetween = params.spaceBetween;\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n    }\n    toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n    toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n}\n\nfunction updateProgress(translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let {\n    progress,\n    isBeginning,\n    isEnd,\n    progressLoop\n  } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n    isBeginning = isBeginningRounded || progress <= 0;\n    isEnd = isEndRounded || progress >= 1;\n    if (isBeginningRounded) progress = 0;\n    if (isEndRounded) progress = 1;\n  }\n  if (params.loop) {\n    const firstSlideIndex = swiper.getSlideIndexByData(0);\n    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n    const translateAbs = Math.abs(translate);\n    if (translateAbs >= firstSlideTranslate) {\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n    } else {\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n    }\n    if (progressLoop > 1) progressLoop -= 1;\n  }\n  Object.assign(swiper, {\n    progress,\n    progressLoop,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n  swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesClasses() {\n  const swiper = this;\n  const {\n    slides,\n    params,\n    slidesEl,\n    activeIndex\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const getFilteredSlide = selector => {\n    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n  };\n  let activeSlide;\n  let prevSlide;\n  let nextSlide;\n  if (isVirtual) {\n    if (params.loop) {\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n    } else {\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n    }\n  } else {\n    if (gridEnabled) {\n      activeSlide = slides.find(slideEl => slideEl.column === activeIndex);\n      nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);\n      prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);\n    } else {\n      activeSlide = slides[activeIndex];\n    }\n  }\n  if (activeSlide) {\n    if (!gridEnabled) {\n      // Next Slide\n      nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !nextSlide) {\n        nextSlide = slides[0];\n      }\n\n      // Prev Slide\n      prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !prevSlide === 0) {\n        prevSlide = slides[slides.length - 1];\n      }\n    }\n  }\n  slides.forEach(slideEl => {\n    toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n    toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n    toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n  });\n  swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  const slideEl = imageEl.closest(slideSelector());\n  if (slideEl) {\n    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n    if (!lazyEl && swiper.isElement) {\n      if (slideEl.shadowRoot) {\n        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n      } else {\n        // init later\n        requestAnimationFrame(() => {\n          if (slideEl.shadowRoot) {\n            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n            if (lazyEl) lazyEl.remove();\n          }\n        });\n      }\n    }\n    if (lazyEl) lazyEl.remove();\n  }\n};\nconst unlazy = (swiper, index) => {\n  if (!swiper.slides[index]) return;\n  const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n  if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  let amount = swiper.params.lazyPreloadPrevNext;\n  const len = swiper.slides.length;\n  if (!len || !amount || amount < 0) return;\n  amount = Math.min(amount, len);\n  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n  const activeIndex = swiper.activeIndex;\n  if (swiper.params.grid && swiper.params.grid.rows > 1) {\n    const activeColumn = activeIndex;\n    const preloadColumns = [activeColumn - amount];\n    preloadColumns.push(...Array.from({\n      length: amount\n    }).map((_, i) => {\n      return activeColumn + slidesPerView + i;\n    }));\n    swiper.slides.forEach((slideEl, i) => {\n      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n    });\n    return;\n  }\n  const slideIndexLastInView = activeIndex + slidesPerView - 1;\n  if (swiper.params.rewind || swiper.params.loop) {\n    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n      const realIndex = (i % len + len) % len;\n      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n    }\n  } else {\n    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n        unlazy(swiper, i);\n      }\n    }\n  }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n  const {\n    slidesGrid,\n    params\n  } = swiper;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  let activeIndex;\n  for (let i = 0; i < slidesGrid.length; i += 1) {\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n        activeIndex = i;\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n        activeIndex = i + 1;\n      }\n    } else if (translate >= slidesGrid[i]) {\n      activeIndex = i;\n    }\n  }\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n  }\n  return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    snapGrid,\n    params,\n    activeIndex: previousIndex,\n    realIndex: previousRealIndex,\n    snapIndex: previousSnapIndex\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  const getVirtualRealIndex = aIndex => {\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\n    if (realIndex < 0) {\n      realIndex = swiper.virtual.slides.length + realIndex;\n    }\n    if (realIndex >= swiper.virtual.slides.length) {\n      realIndex -= swiper.virtual.slides.length;\n    }\n    return realIndex;\n  };\n  if (typeof activeIndex === 'undefined') {\n    activeIndex = getActiveIndexByTranslate(swiper);\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex && !swiper.params.loop) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n    swiper.realIndex = getVirtualRealIndex(activeIndex);\n    return;\n  }\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n  // Get real index\n  let realIndex;\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\n    realIndex = getVirtualRealIndex(activeIndex);\n  } else if (gridEnabled) {\n    const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);\n    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n    if (Number.isNaN(activeSlideIndex)) {\n      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n    }\n    realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n  } else if (swiper.slides[activeIndex]) {\n    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n    if (slideIndex) {\n      realIndex = parseInt(slideIndex, 10);\n    } else {\n      realIndex = activeIndex;\n    }\n  } else {\n    realIndex = activeIndex;\n  }\n  Object.assign(swiper, {\n    previousSnapIndex,\n    snapIndex,\n    previousRealIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  if (swiper.initialized) {\n    preload(swiper);\n  }\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    swiper.emit('slideChange');\n  }\n}\n\nfunction updateClickedSlide(el, path) {\n  const swiper = this;\n  const params = swiper.params;\n  let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n        slide = pathEl;\n      }\n    });\n  }\n  let slideFound = false;\n  let slideIndex;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n  const swiper = this;\n  const {\n    params,\n    rtlTranslate: rtl,\n    translate,\n    wrapperEl\n  } = swiper;\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n  let currentTranslate = getTranslate(wrapperEl, axis);\n  currentTranslate += swiper.cssOverflowAdjustment();\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl,\n    params,\n    wrapperEl,\n    progress\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    if (swiper.isHorizontal()) {\n      x -= swiper.cssOverflowAdjustment();\n    } else {\n      y -= swiper.cssOverflowAdjustment();\n    }\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n  }\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n  const swiper = this;\n  const {\n    params,\n    wrapperEl\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          swiper.animating = false;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n  return true;\n}\n\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};\n\nfunction setTransition(duration, byController) {\n  const swiper = this;\n  if (!swiper.params.cssMode) {\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n  }\n  swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit({\n  swiper,\n  runCallbacks,\n  direction,\n  step\n}) {\n  const {\n    activeIndex,\n    previousIndex\n  } = swiper;\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n  swiper.emit(`transition${step}`);\n  if (runCallbacks && dir === 'reset') {\n    swiper.emit(`slideResetTransition${step}`);\n  } else if (runCallbacks && activeIndex !== previousIndex) {\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\n\nfunction transitionStart(runCallbacks = true, direction) {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}\n\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n  if (typeof index === 'string') {\n    index = parseInt(index, 10);\n  }\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    previousIndex,\n    activeIndex,\n    rtlTranslate: rtl,\n    wrapperEl,\n    enabled\n  } = swiper;\n  if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  const translate = -snapGrid[snapIndex];\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) {\n        return false;\n      }\n    }\n  }\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  // Update progress\n  swiper.updateProgress(translate);\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n  // initial virtual\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  const isInitialVirtual = isVirtual && initial;\n  // Update Index\n  if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n    if (speed === 0) {\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n        swiper._cssModeVirtualInitialSet = true;\n        requestAnimationFrame(() => {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._immediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  const browser = getBrowser();\n  const isSafari = browser.isSafari;\n  if (isVirtual && !initial && isSafari && swiper.isElement) {\n    swiper.virtual.update(false, false, slideIndex);\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\n\nfunction slideToLoop(index = 0, speed, runCallbacks = true, internal) {\n  if (typeof index === 'string') {\n    const indexAsNumber = parseInt(index, 10);\n    index = indexAsNumber;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      // eslint-disable-next-line\n      newIndex = newIndex + swiper.virtual.slidesBefore;\n    } else {\n      let targetSlideIndex;\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n      } else {\n        targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n      }\n      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n      const {\n        centeredSlides,\n        slidesOffsetBefore,\n        slidesOffsetAfter\n      } = swiper.params;\n      const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n      let slidesPerView = swiper.params.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = swiper.slidesPerViewDynamic();\n      } else {\n        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n        if (bothDirections && slidesPerView % 2 === 0) {\n          slidesPerView = slidesPerView + 1;\n        }\n      }\n      let needLoopFix = cols - targetSlideIndex < slidesPerView;\n      if (bothDirections) {\n        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n      }\n      if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n        needLoopFix = false;\n      }\n      if (needLoopFix) {\n        const direction = bothDirections ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n        swiper.loopFix({\n          direction,\n          slideTo: true,\n          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n        });\n      }\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n      } else {\n        newIndex = swiper.getSlideIndexByData(newIndex);\n      }\n    }\n  }\n  requestAnimationFrame(() => {\n    swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  });\n  return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    enabled,\n    params,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let perGroup = params.slidesPerGroup;\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'next'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n      requestAnimationFrame(() => {\n        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n      });\n      return true;\n    }\n  }\n  if (params.rewind && swiper.isEnd) {\n    return swiper.slideTo(0, speed, runCallbacks, internal);\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks = true, internal) {\n  const swiper = this;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    rtlTranslate,\n    enabled,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'prev'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  const isFreeMode = params.freeMode && params.freeMode.enabled;\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks = true, internal) {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks = true, internal, threshold = 0.5) {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      swiper.slideToLoop(realIndex);\n    } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex, initial) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const clearBlankSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n    slides.forEach(el => {\n      el.remove();\n    });\n    if (slides.length > 0) {\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    }\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n    clearBlankSlides();\n  }\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n  swiper.loopFix({\n    slideRealIndex,\n    direction: bothDirections ? undefined : 'next',\n    initial\n  });\n}\n\nfunction loopFix({\n  slideRealIndex,\n  slideTo = true,\n  direction,\n  setTranslate,\n  activeSlideIndex,\n  initial,\n  byController,\n  byMousewheel\n} = {}) {\n  const swiper = this;\n  if (!swiper.params.loop) return;\n  swiper.emit('beforeLoopFix');\n  const {\n    slides,\n    allowSlidePrev,\n    allowSlideNext,\n    slidesEl,\n    params\n  } = swiper;\n  const {\n    centeredSlides,\n    slidesOffsetBefore,\n    slidesOffsetAfter,\n    initialSlide\n  } = params;\n  const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  if (swiper.virtual && params.virtual.enabled) {\n    if (slideTo) {\n      if (!bothDirections && swiper.snapIndex === 0) {\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n      } else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n    return;\n  }\n  let slidesPerView = params.slidesPerView;\n  if (slidesPerView === 'auto') {\n    slidesPerView = swiper.slidesPerViewDynamic();\n  } else {\n    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n    if (bothDirections && slidesPerView % 2 === 0) {\n      slidesPerView = slidesPerView + 1;\n    }\n  }\n  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n  let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  loopedSlides += params.loopAdditionalSlides;\n  swiper.loopedSlides = loopedSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n  let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (bothDirections && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n  // prepend last slides before start\n  if (activeColIndexWithShift < loopedSlides) {\n    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        const colIndexToPrepend = cols - index - 1;\n        for (let i = slides.length - 1; i >= 0; i -= 1) {\n          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n        }\n        // slides.forEach((slide, slideIndex) => {\n        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n        // });\n      } else {\n        prependSlidesIndexes.push(cols - index - 1);\n      }\n    }\n  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n    if (isInitialOverflow) {\n      slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n    }\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  swiper.__preventObserver__ = true;\n  requestAnimationFrame(() => {\n    swiper.__preventObserver__ = false;\n  });\n  if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n    if (appendSlidesIndexes.includes(activeSlideIndex)) {\n      appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n    }\n    if (prependSlidesIndexes.includes(activeSlideIndex)) {\n      prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n    }\n  }\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix({\n          ...loopParams,\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        });\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix({\n        ...loopParams,\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      });\n    }\n  }\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    if (!found && !el.getRootNode) {\n      return null;\n    }\n    return found || __closestFrom(el.getRootNode().host);\n  }\n  return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n  const window = getWindow();\n  const {\n    params\n  } = swiper;\n  const edgeSwipeDetection = params.edgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold;\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\nfunction onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const data = swiper.touchEventsData;\n  if (e.type === 'pointerdown') {\n    if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n      return;\n    }\n    data.pointerId = e.pointerId;\n  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n    data.touchId = e.targetTouches[0].identifier;\n  }\n  if (e.type === 'touchstart') {\n    // don't proceed touch event\n    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n    return;\n  }\n  const {\n    params,\n    touches,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n  let targetEl = e.target;\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n  }\n  if ('which' in e && e.which === 3) return;\n  if ('button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  // change target el for shadow root component\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n  // eslint-disable-next-line\n  const eventPath = e.composedPath ? e.composedPath() : e.path;\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n    targetEl = eventPath[0];\n  }\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!targetEl.closest(params.swipeHandler)) return;\n  }\n  touches.currentX = e.pageX;\n  touches.currentY = e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  if (!preventEdgeSwipe(swiper, e, startX)) {\n    return;\n  }\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  let preventDefault = true;\n  if (targetEl.matches(data.focusableElements)) {\n    preventDefault = false;\n    if (targetEl.nodeName === 'SELECT') {\n      data.isTouched = false;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n    document.activeElement.blur();\n  }\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n    e.preventDefault();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n    swiper.freeMode.onTouchStart();\n  }\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (e.type === 'pointermove') {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    const id = e.pointerId;\n    if (id !== data.pointerId) return;\n  }\n  let targetTouch;\n  if (e.type === 'touchmove') {\n    targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  } else {\n    targetTouch = e;\n  }\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  const pageX = targetTouch.pageX;\n  const pageY = targetTouch.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    if (!e.target.matches(data.focusableElements)) {\n      swiper.allowClick = false;\n    }\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n    return;\n  }\n  if (params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n      return;\n    } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n      return;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n    document.activeElement.blur();\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          bySwiperTouchMove: true\n        }\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let targetTouch;\n  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n  if (!isTouchEvent) {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    if (e.pointerId !== data.pointerId) return;\n    targetTouch = e;\n  } else {\n    targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  }\n  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n    if (!proceed) {\n      return;\n    }\n  }\n  data.pointerId = null;\n  data.touchId = null;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    slidesGrid,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n  if (params.cssMode) {\n    return;\n  }\n  if (params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  }\n\n  // Find current slide\n  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n  let rewindFirstIndex = null;\n  let rewindLastIndex = null;\n  if (params.rewind) {\n    if (swiper.isBeginning) {\n      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    } else if (swiper.isEnd) {\n      rewindFirstIndex = 0;\n    }\n  }\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) {\n        swiper.slideTo(stopIndex + increment);\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n        swiper.slideTo(rewindLastIndex);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n\nfunction onResize() {\n  const swiper = this;\n  const {\n    params,\n    el\n  } = swiper;\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const {\n    allowSlideNext,\n    allowSlidePrev,\n    snapGrid\n  } = swiper;\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n  const isVirtualLoop = isVirtual && params.loop;\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    if (swiper.params.loop && !isVirtual) {\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n  }\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    clearTimeout(swiper.autoplay.resizeTimeout);\n    swiper.autoplay.resizeTimeout = setTimeout(() => {\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.resume();\n      }\n    }, 500);\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n\nfunction onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n\nfunction onScroll() {\n  const swiper = this;\n  const {\n    wrapperEl,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === 0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n  const swiper = this;\n  processLazyPreloader(swiper, e.target);\n  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n    return;\n  }\n  swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n  const swiper = this;\n  if (swiper.documentTouchHandlerProceeded) return;\n  swiper.documentTouchHandlerProceeded = true;\n  if (swiper.params.touchReleaseOnEdges) {\n    swiper.el.style.touchAction = 'auto';\n  }\n}\n\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const {\n    params,\n    el,\n    wrapperEl,\n    device\n  } = swiper;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method;\n  if (!el || typeof el === 'string') return;\n\n  // Touch Events\n  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n    passive: false,\n    capture\n  });\n  el[domMethod]('touchstart', swiper.onTouchStart, {\n    passive: false\n  });\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\n    passive: false\n  });\n  document[domMethod]('touchmove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('pointermove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('touchend', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('touchcancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('contextmenu', swiper.onTouchEnd, {\n    passive: true\n  });\n\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n\n  // Images loader\n  el[domMethod]('load', swiper.onLoad, {\n    capture: true\n  });\n};\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n  swiper.onClick = onClick.bind(swiper);\n  swiper.onLoad = onLoad.bind(swiper);\n  events(swiper, 'on');\n}\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\nvar events$1 = {\n  attachEvents,\n  detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n  const swiper = this;\n  const {\n    realIndex,\n    initialized,\n    params,\n    el\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n  const document = getDocument();\n\n  // Get breakpoint for window/container width and update parameters\n  const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n  const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);\n  const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasGrabCursor = swiper.params.grabCursor;\n  const isGrabCursor = breakpointParams.grabCursor;\n  const wasEnabled = params.enabled;\n  if (wasMultiRow && !isMultiRow) {\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    el.classList.add(`${params.containerModifierClass}grid`);\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      el.classList.add(`${params.containerModifierClass}grid-column`);\n    }\n    swiper.emitContainerClasses();\n  }\n  if (wasGrabCursor && !isGrabCursor) {\n    swiper.unsetGrabCursor();\n  } else if (!wasGrabCursor && isGrabCursor) {\n    swiper.setGrabCursor();\n  }\n\n  // Toggle navigation, pagination, scrollbar\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n    if (typeof breakpointParams[prop] === 'undefined') return;\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n    if (wasModuleEnabled && !isModuleEnabled) {\n      swiper[prop].disable();\n    }\n    if (!wasModuleEnabled && isModuleEnabled) {\n      swiper[prop].enable();\n    }\n  });\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n  const wasLoop = params.loop;\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  const hasLoop = swiper.params.loop;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n  if (initialized) {\n    if (needsReLoop) {\n      swiper.loopDestroy();\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (!wasLoop && hasLoop) {\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (wasLoop && !hasLoop) {\n      swiper.loopDestroy();\n    }\n  }\n  swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base = 'window', containerEl) {\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const {\n      point,\n      value\n    } = points[i];\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n\nvar breakpoints = {\n  setBreakpoint,\n  getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\nfunction addClasses() {\n  const swiper = this;\n  const {\n    classNames,\n    params,\n    rtl,\n    el,\n    device\n  } = swiper;\n  // prettier-ignore\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }, {\n    'watch-progress': params.watchSlidesProgress\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  el.classList.add(...classNames);\n  swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n  const swiper = this;\n  const {\n    el,\n    classNames\n  } = swiper;\n  if (!el || typeof el === 'string') return;\n  el.classList.remove(...classNames);\n  swiper.emitContainerClasses();\n}\n\nvar classes = {\n  addClasses,\n  removeClasses\n};\n\nfunction checkOverflow() {\n  const swiper = this;\n  const {\n    isLocked: wasLocked,\n    params\n  } = swiper;\n  const {\n    slidesOffsetBefore\n  } = params;\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\nvar checkOverflow$1 = {\n  checkOverflow\n};\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  oneWayMovement: false,\n  swiperElementNodeName: 'SWIPER-CONTAINER',\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  eventsPrefix: 'swiper',\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 5,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // loop\n  loop: false,\n  loopAddBlankSlides: true,\n  loopAdditionalSlides: 0,\n  loopPreventsSliding: true,\n  // rewind\n  rewind: false,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  maxBackfaceHiddenSlides: 10,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideFullyVisibleClass: 'swiper-slide-fully-visible',\n  slideNextClass: 'swiper-slide-next',\n  slidePrevClass: 'swiper-slide-prev',\n  wrapperClass: 'swiper-wrapper',\n  lazyPreloaderClass: 'swiper-lazy-preloader',\n  lazyPreloadPrevNext: 0,\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj = {}) {\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n      params[moduleParamName].auto = true;\n    }\n    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n      params[moduleParamName].auto = true;\n    }\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events: events$1,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n  constructor(...args) {\n    let el;\n    let params;\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n    const document = getDocument();\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n      const swipers = [];\n      document.querySelectorAll(params.el).forEach(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      // eslint-disable-next-line no-constructor-return\n      return swipers;\n    }\n\n    // Swiper Instance\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        params,\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = extend({}, defaults, allModulesParams);\n\n    // Extend defaults with passed params\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params);\n\n    // add event listeners\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    }\n\n    // Extend Swiper\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: [],\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      cssOverflowAdjustment() {\n        // Returns 0 unless `translate` is > 2**23\n        // Should be subtracted from css values to prevent overflow\n        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n      },\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: 0,\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        startMoving: undefined,\n        pointerId: null,\n        touchId: null\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper');\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    // eslint-disable-next-line no-constructor-return\n    return swiper;\n  }\n  getDirectionLabel(property) {\n    if (this.isHorizontal()) {\n      return property;\n    }\n    // prettier-ignore\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n  getSlideIndex(slideEl) {\n    const {\n      slidesEl,\n      params\n    } = this;\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    const firstSlideIndex = elementIndex(slides[0]);\n    return elementIndex(slideEl) - firstSlideIndex;\n  }\n  getSlideIndexByData(index) {\n    return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\n  }\n  getSlideIndexWhenGrid(index) {\n    if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n      if (this.params.grid.fill === 'column') {\n        index = Math.floor(index / this.params.grid.rows);\n      } else if (this.params.grid.fill === 'row') {\n        index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n      }\n    }\n    return index;\n  }\n  recalcSlides() {\n    const swiper = this;\n    const {\n      slidesEl,\n      params\n    } = swiper;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view = 'current', exact = false) {\n    const swiper = this;\n    const {\n      params,\n      slides,\n      slidesGrid,\n      slidesSizesGrid,\n      size: swiperSize,\n      activeIndex\n    } = swiper;\n    let spv = 1;\n    if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += Math.ceil(slides[i].swiperSlideSize);\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n    return spv;\n  }\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const {\n      snapGrid,\n      params\n    } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      }\n    });\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n      setTranslate();\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n        translated = swiper.slideTo(slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n  changeDirection(newDirection, needUpdate = true) {\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.forEach(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n  changeLanguageDirection(direction) {\n    const swiper = this;\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n    swiper.rtl = direction === 'rtl';\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n    if (swiper.rtl) {\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'rtl';\n    } else {\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'ltr';\n    }\n    swiper.update();\n  }\n  mount(element) {\n    const swiper = this;\n    if (swiper.mounted) return true;\n\n    // Find el\n    let el = element || swiper.params.el;\n    if (typeof el === 'string') {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      return false;\n    }\n    el.swiper = swiper;\n    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n      swiper.isElement = true;\n    }\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\n        // Children needs to return slot items\n        return res;\n      }\n      return elementChildren(el, getWrapperSelector())[0];\n    };\n    // Find Wrapper\n    let wrapperEl = getWrapper();\n    if (!wrapperEl && swiper.params.createElements) {\n      wrapperEl = createElement('div', swiper.params.wrapperClass);\n      el.append(wrapperEl);\n      elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n        wrapperEl.append(slideEl);\n      });\n    }\n    Object.assign(swiper, {\n      el,\n      wrapperEl,\n      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n      hostEl: swiper.isElement ? el.parentNode.host : el,\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n      wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n    });\n    return true;\n  }\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    }\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate(undefined, true);\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance = true, cleanStyles = true) {\n    const swiper = this;\n    const {\n      params,\n      el,\n      wrapperEl,\n      slides\n    } = swiper;\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      if (el && typeof el !== 'string') {\n        el.removeAttribute('style');\n      }\n      if (wrapperEl) {\n        wrapperEl.removeAttribute('style');\n      }\n      if (slides && slides.length) {\n        slides.forEach(slideEl => {\n          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n          slideEl.removeAttribute('style');\n          slideEl.removeAttribute('data-swiper-slide-index');\n        });\n      }\n    }\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n    if (deleteInstance !== false) {\n      if (swiper.el && typeof swiper.el !== 'string') {\n        swiper.el.swiper = null;\n      }\n      deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n    return null;\n  }\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n  static get defaults() {\n    return defaults;\n  }\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n    Swiper.installModule(module);\n    return Swiper;\n  }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { b as elementParents, d as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const document = getDocument();\n  const window = getWindow();\n  swiper.keyboard = {\n    enabled: false\n  };\n  extendParams({\n    keyboard: {\n      enabled: false,\n      onlyInViewport: true,\n      pageUpDown: true\n    }\n  });\n  function handle(event) {\n    if (!swiper.enabled) return;\n    const {\n      rtlTranslate: rtl\n    } = swiper;\n    let e = event;\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\n    const kc = e.keyCode || e.charCode;\n    const pageUpDown = swiper.params.keyboard.pageUpDown;\n    const isPageUp = pageUpDown && kc === 33;\n    const isPageDown = pageUpDown && kc === 34;\n    const isArrowLeft = kc === 37;\n    const isArrowRight = kc === 39;\n    const isArrowUp = kc === 38;\n    const isArrowDown = kc === 40;\n    // Directions locks\n    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n      return false;\n    }\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n      return undefined;\n    }\n    if (document.activeElement && (document.activeElement.isContentEditable || document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea'))) {\n      return undefined;\n    }\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n      let inView = false;\n      // Check that swiper should be inside of visible area of window\n      if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n        return undefined;\n      }\n      const el = swiper.el;\n      const swiperWidth = el.clientWidth;\n      const swiperHeight = el.clientHeight;\n      const windowWidth = window.innerWidth;\n      const windowHeight = window.innerHeight;\n      const swiperOffset = elementOffset(el);\n      if (rtl) swiperOffset.left -= el.scrollLeft;\n      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n      for (let i = 0; i < swiperCoord.length; i += 1) {\n        const point = swiperCoord[i];\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n          inView = true;\n        }\n      }\n      if (!inView) return undefined;\n    }\n    if (swiper.isHorizontal()) {\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n    } else {\n      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n      }\n      if (isPageDown || isArrowDown) swiper.slideNext();\n      if (isPageUp || isArrowUp) swiper.slidePrev();\n    }\n    emit('keyPress', kc);\n    return undefined;\n  }\n  function enable() {\n    if (swiper.keyboard.enabled) return;\n    document.addEventListener('keydown', handle);\n    swiper.keyboard.enabled = true;\n  }\n  function disable() {\n    if (!swiper.keyboard.enabled) return;\n    document.removeEventListener('keydown', handle);\n    swiper.keyboard.enabled = false;\n  }\n  on('init', () => {\n    if (swiper.params.keyboard.enabled) {\n      enable();\n    }\n  });\n  on('destroy', () => {\n    if (swiper.keyboard.enabled) {\n      disable();\n    }\n  });\n  Object.assign(swiper.keyboard, {\n    enable,\n    disable\n  });\n}\n\nexport { Keyboard as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n        if (!element) {\n          element = createElement('div', checkProps[key]);\n          element.className = checkProps[key];\n          swiper.el.append(element);\n        }\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n  return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nfunction Navigation({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      addIcons: true,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n      navigationDisabledClass: 'swiper-navigation-disabled'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    prevEl: null\n  };\n  function getEl(el) {\n    let res;\n    if (el && typeof el === 'string' && swiper.isElement) {\n      res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n      if (res) return res;\n    }\n    if (el) {\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n        res = swiper.el.querySelector(el);\n      } else if (res && res.length === 1) {\n        res = res[0];\n      }\n    }\n    if (el && !res) return el;\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\n    return res;\n  }\n  function toggleEl(el, disabled) {\n    const params = swiper.params.navigation;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (subEl) {\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n      }\n    });\n  }\n  function update() {\n    // Update Navigation Buttons\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (swiper.params.loop) {\n      toggleEl(prevEl, false);\n      toggleEl(nextEl, false);\n      return;\n    }\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n  }\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slidePrev();\n    emit('navigationPrev');\n  }\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slideNext();\n    emit('navigationNext');\n  }\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    let nextEl = getEl(params.nextEl);\n    let prevEl = getEl(params.prevEl);\n    Object.assign(swiper.navigation, {\n      nextEl,\n      prevEl\n    });\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const initButton = (el, dir) => {\n      if (el) {\n        if (params.addIcons && el.matches('.swiper-button-next,.swiper-button-prev') && !el.querySelector('svg')) {\n          const tempEl = document.createElement('div');\n          setInnerHTML(tempEl, arrowSvg);\n          el.appendChild(tempEl.querySelector('svg'));\n          tempEl.remove();\n        }\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      }\n      if (!swiper.enabled && el) {\n        el.classList.add(...params.lockClass.split(' '));\n      }\n    };\n    nextEl.forEach(el => initButton(el, 'next'));\n    prevEl.forEach(el => initButton(el, 'prev'));\n  }\n  function destroy() {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const destroyButton = (el, dir) => {\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n    };\n    nextEl.forEach(el => destroyButton(el, 'next'));\n    prevEl.forEach(el => destroyButton(el, 'prev'));\n  }\n  on('init', () => {\n    if (swiper.params.navigation.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      update();\n    }\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (swiper.enabled) {\n      update();\n      return;\n    }\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n  });\n  on('click', (_s, e) => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const targetEl = e.target;\n    let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n    if (swiper.isElement && !targetIsButton) {\n      const path = e.path || e.composedPath && e.composedPath();\n      if (path) {\n        targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n      }\n    }\n    if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n      if (nextEl.length) {\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      } else if (prevEl.length) {\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      }\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    init();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    destroy();\n  };\n  Object.assign(swiper.navigation, {\n    enable,\n    disable,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes = '') {\n  return `.${classes.trim().replace(/([\\.:!+\\/()[\\]])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, h as elementOuterSize, i as elementIndex, s as setInnerHTML, b as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const pfx = 'swiper-pagination';\n  extendParams({\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: number => number,\n      formatFractionTotal: number => number,\n      bulletClass: `${pfx}-bullet`,\n      bulletActiveClass: `${pfx}-bullet-active`,\n      modifierClass: `${pfx}-`,\n      currentClass: `${pfx}-current`,\n      totalClass: `${pfx}-total`,\n      hiddenClass: `${pfx}-hidden`,\n      progressbarFillClass: `${pfx}-progressbar-fill`,\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n      clickableClass: `${pfx}-clickable`,\n      lockClass: `${pfx}-lock`,\n      horizontalClass: `${pfx}-horizontal`,\n      verticalClass: `${pfx}-vertical`,\n      paginationDisabledClass: `${pfx}-disabled`\n    }\n  });\n  swiper.pagination = {\n    el: null,\n    bullets: []\n  };\n  let bulletSize;\n  let dynamicBulletIndex = 0;\n  function isPaginationDisabled() {\n    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n  }\n  function setSideBullets(bulletEl, position) {\n    const {\n      bulletActiveClass\n    } = swiper.params.pagination;\n    if (!bulletEl) return;\n    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n    if (bulletEl) {\n      bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n      if (bulletEl) {\n        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n      }\n    }\n  }\n  function getMoveDirection(prevIndex, nextIndex, length) {\n    prevIndex = prevIndex % length;\n    nextIndex = nextIndex % length;\n    if (nextIndex === prevIndex + 1) {\n      return 'next';\n    } else if (nextIndex === prevIndex - 1) {\n      return 'previous';\n    }\n    return;\n  }\n  function onBulletClick(e) {\n    const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n    if (!bulletEl) {\n      return;\n    }\n    e.preventDefault();\n    const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n    if (swiper.params.loop) {\n      if (swiper.realIndex === index) return;\n      const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n      if (moveDirection === 'next') {\n        swiper.slideNext();\n      } else if (moveDirection === 'previous') {\n        swiper.slidePrev();\n      } else {\n        swiper.slideToLoop(index);\n      }\n    } else {\n      swiper.slideTo(index);\n    }\n  }\n  function update() {\n    // Render || Update Pagination bullets/items\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    // Current/Total\n    let current;\n    let previousIndex;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      previousIndex = swiper.previousRealIndex || 0;\n      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n      previousIndex = swiper.previousSnapIndex;\n    } else {\n      previousIndex = swiper.previousIndex || 0;\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n        el.forEach(subEl => {\n          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n        });\n        if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n          dynamicBulletIndex += current - (previousIndex || 0);\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (dynamicBulletIndex < 0) {\n            dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = Math.max(current - dynamicBulletIndex, 0);\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.forEach(bulletEl => {\n        const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n        bulletEl.classList.remove(...classesToRemove);\n      });\n      if (el.length > 1) {\n        bullets.forEach(bullet => {\n          const bulletIndex = elementIndex(bullet);\n          if (bulletIndex === current) {\n            bullet.classList.add(...params.bulletActiveClass.split(' '));\n          } else if (swiper.isElement) {\n            bullet.setAttribute('part', 'bullet');\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n            if (bulletIndex === firstIndex) {\n              setSideBullets(bullet, 'prev');\n            }\n            if (bulletIndex === lastIndex) {\n              setSideBullets(bullet, 'next');\n            }\n          }\n        });\n      } else {\n        const bullet = bullets[current];\n        if (bullet) {\n          bullet.classList.add(...params.bulletActiveClass.split(' '));\n        }\n        if (swiper.isElement) {\n          bullets.forEach((bulletEl, bulletIndex) => {\n            bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n          });\n        }\n        if (params.dynamicBullets) {\n          const firstDisplayedBullet = bullets[firstIndex];\n          const lastDisplayedBullet = bullets[lastIndex];\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            if (bullets[i]) {\n              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n          }\n          setSideBullets(firstDisplayedBullet, 'prev');\n          setSideBullets(lastDisplayedBullet, 'next');\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.forEach(bullet => {\n          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n        });\n      }\n    }\n    el.forEach((subEl, subElIndex) => {\n      if (params.type === 'fraction') {\n        subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n          fractionEl.textContent = params.formatFractionCurrent(current + 1);\n        });\n        subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n          totalEl.textContent = params.formatFractionTotal(total);\n        });\n      }\n      if (params.type === 'progressbar') {\n        let progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        const scale = (current + 1) / total;\n        let scaleX = 1;\n        let scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n        });\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        setInnerHTML(subEl, params.renderCustom(swiper, current + 1, total));\n        if (subElIndex === 0) emit('paginationRender', subEl);\n      } else {\n        if (subElIndex === 0) emit('paginationRender', subEl);\n        emit('paginationUpdate', subEl);\n      }\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n      }\n    });\n  }\n  function render() {\n    // Render Container\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          // prettier-ignore\n          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n      }\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n    }\n    swiper.pagination.bullets = [];\n    el.forEach(subEl => {\n      if (params.type !== 'custom') {\n        setInnerHTML(subEl, paginationHTML || '');\n      }\n      if (params.type === 'bullets') {\n        swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n      }\n    });\n    if (params.type !== 'custom') {\n      emit('paginationRender', el[0]);\n    }\n  }\n  function init() {\n    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n      el: 'swiper-pagination'\n    });\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = [...document.querySelectorAll(params.el)];\n    }\n    if (!el) {\n      el = params.el;\n    }\n    if (!el || el.length === 0) return;\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n      el = [...swiper.el.querySelectorAll(params.el)];\n      // check if it belongs to another nested Swiper\n      if (el.length > 1) {\n        el = el.find(subEl => {\n          if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n          return true;\n        });\n      }\n    }\n    if (Array.isArray(el) && el.length === 1) el = el[0];\n    Object.assign(swiper.pagination, {\n      el\n    });\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (params.type === 'bullets' && params.clickable) {\n        subEl.classList.add(...(params.clickableClass || '').split(' '));\n      }\n      subEl.classList.add(params.modifierClass + params.type);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n        dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        subEl.classList.add(params.progressbarOppositeClass);\n      }\n      if (params.clickable) {\n        subEl.addEventListener('click', onBulletClick);\n      }\n      if (!swiper.enabled) {\n        subEl.classList.add(params.lockClass);\n      }\n    });\n  }\n  function destroy() {\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => {\n        subEl.classList.remove(params.hiddenClass);\n        subEl.classList.remove(params.modifierClass + params.type);\n        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        if (params.clickable) {\n          subEl.classList.remove(...(params.clickableClass || '').split(' '));\n          subEl.removeEventListener('click', onBulletClick);\n        }\n      });\n    }\n    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n  }\n  on('changeDirection', () => {\n    if (!swiper.pagination || !swiper.pagination.el) return;\n    const params = swiper.params.pagination;\n    let {\n      el\n    } = swiper.pagination;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.pagination.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      render();\n      update();\n    }\n  });\n  on('activeIndexChange', () => {\n    if (typeof swiper.snapIndex === 'undefined') {\n      update();\n    }\n  });\n  on('snapIndexChange', () => {\n    update();\n  });\n  on('snapGridLengthChange', () => {\n    render();\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n    }\n  });\n  on('lock unlock', () => {\n    update();\n  });\n  on('click', (_s, e) => {\n    const targetEl = e.target;\n    const el = makeElementsArray(swiper.pagination.el);\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n      if (isHidden === true) {\n        emit('paginationShow');\n      } else {\n        emit('paginationHide');\n      }\n      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n    }\n    init();\n    render();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.pagination, {\n    enable,\n    disable,\n    render,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Pagination as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, b as elementParents, d as elementOffset, k as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom({\n  swiper,\n  extendParams,\n  on,\n  emit\n}) {\n  const window = getWindow();\n  extendParams({\n    zoom: {\n      enabled: false,\n      limitToOriginalSize: false,\n      maxRatio: 3,\n      minRatio: 1,\n      panOnMouseMove: false,\n      toggle: true,\n      containerClass: 'swiper-zoom-container',\n      zoomedSlideClass: 'swiper-slide-zoomed'\n    }\n  });\n  swiper.zoom = {\n    enabled: false\n  };\n  let currentScale = 1;\n  let isScaling = false;\n  let isPanningWithMouse = false;\n  let mousePanStart = {\n    x: 0,\n    y: 0\n  };\n  const mousePanSensitivity = -3; // Negative to invert pan direction\n  let fakeGestureTouched;\n  let fakeGestureMoved;\n  const evCache = [];\n  const gesture = {\n    originX: 0,\n    originY: 0,\n    slideEl: undefined,\n    slideWidth: undefined,\n    slideHeight: undefined,\n    imageEl: undefined,\n    imageWrapEl: undefined,\n    maxRatio: 3\n  };\n  const image = {\n    isTouched: undefined,\n    isMoved: undefined,\n    currentX: undefined,\n    currentY: undefined,\n    minX: undefined,\n    minY: undefined,\n    maxX: undefined,\n    maxY: undefined,\n    width: undefined,\n    height: undefined,\n    startX: undefined,\n    startY: undefined,\n    touchesStart: {},\n    touchesCurrent: {}\n  };\n  const velocity = {\n    x: undefined,\n    y: undefined,\n    prevPositionX: undefined,\n    prevPositionY: undefined,\n    prevTime: undefined\n  };\n  let scale = 1;\n  Object.defineProperty(swiper.zoom, 'scale', {\n    get() {\n      return scale;\n    },\n    set(value) {\n      if (scale !== value) {\n        const imageEl = gesture.imageEl;\n        const slideEl = gesture.slideEl;\n        emit('zoomChange', value, imageEl, slideEl);\n      }\n      scale = value;\n    }\n  });\n  function getDistanceBetweenTouches() {\n    if (evCache.length < 2) return 1;\n    const x1 = evCache[0].pageX;\n    const y1 = evCache[0].pageY;\n    const x2 = evCache[1].pageX;\n    const y2 = evCache[1].pageY;\n    const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n    return distance;\n  }\n  function getMaxRatio() {\n    const params = swiper.params.zoom;\n    const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n    if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {\n      const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;\n      return Math.min(imageMaxRatio, maxRatio);\n    }\n    return maxRatio;\n  }\n  function getScaleOrigin() {\n    if (evCache.length < 2) return {\n      x: null,\n      y: null\n    };\n    const box = gesture.imageEl.getBoundingClientRect();\n    return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];\n  }\n  function getSlideSelector() {\n    return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  }\n  function eventWithinSlide(e) {\n    const slideSelector = getSlideSelector();\n    if (e.target.matches(slideSelector)) return true;\n    if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n    return false;\n  }\n  function eventWithinZoomContainer(e) {\n    const selector = `.${swiper.params.zoom.containerClass}`;\n    if (e.target.matches(selector)) return true;\n    if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n    return false;\n  }\n\n  // Events\n  function onGestureStart(e) {\n    if (e.pointerType === 'mouse') {\n      evCache.splice(0, evCache.length);\n    }\n    if (!eventWithinSlide(e)) return;\n    const params = swiper.params.zoom;\n    fakeGestureTouched = false;\n    fakeGestureMoved = false;\n    evCache.push(e);\n    if (evCache.length < 2) {\n      return;\n    }\n    fakeGestureTouched = true;\n    gesture.scaleStart = getDistanceBetweenTouches();\n    if (!gesture.slideEl) {\n      gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n      if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n      if (!gesture.imageWrapEl) {\n        gesture.imageEl = undefined;\n        return;\n      }\n      gesture.maxRatio = getMaxRatio();\n    }\n    if (gesture.imageEl) {\n      const [originX, originY] = getScaleOrigin();\n      gesture.originX = originX;\n      gesture.originY = originY;\n      gesture.imageEl.style.transitionDuration = '0ms';\n    }\n    isScaling = true;\n  }\n  function onGestureChange(e) {\n    if (!eventWithinSlide(e)) return;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n    if (pointerIndex >= 0) evCache[pointerIndex] = e;\n    if (evCache.length < 2) {\n      return;\n    }\n    fakeGestureMoved = true;\n    gesture.scaleMove = getDistanceBetweenTouches();\n    if (!gesture.imageEl) {\n      return;\n    }\n    zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n    if (zoom.scale > gesture.maxRatio) {\n      zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n    }\n    if (zoom.scale < params.minRatio) {\n      zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n    }\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n  }\n  function onGestureEnd(e) {\n    if (!eventWithinSlide(e)) return;\n    if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n    const params = swiper.params.zoom;\n    const zoom = swiper.zoom;\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n    if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n    if (!fakeGestureTouched || !fakeGestureMoved) {\n      return;\n    }\n    fakeGestureTouched = false;\n    fakeGestureMoved = false;\n    if (!gesture.imageEl) return;\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n    gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n    currentScale = zoom.scale;\n    isScaling = false;\n    if (zoom.scale > 1 && gesture.slideEl) {\n      gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n    } else if (zoom.scale <= 1 && gesture.slideEl) {\n      gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n    }\n    if (zoom.scale === 1) {\n      gesture.originX = 0;\n      gesture.originY = 0;\n      gesture.slideEl = undefined;\n    }\n  }\n  let allowTouchMoveTimeout;\n  function allowTouchMove() {\n    swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n  }\n  function preventTouchMove() {\n    clearTimeout(allowTouchMoveTimeout);\n    swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n    allowTouchMoveTimeout = setTimeout(() => {\n      if (swiper.destroyed) return;\n      allowTouchMove();\n    });\n  }\n  function onTouchStart(e) {\n    const device = swiper.device;\n    if (!gesture.imageEl) return;\n    if (image.isTouched) return;\n    if (device.android && e.cancelable) e.preventDefault();\n    image.isTouched = true;\n    const event = evCache.length > 0 ? evCache[0] : e;\n    image.touchesStart.x = event.pageX;\n    image.touchesStart.y = event.pageY;\n  }\n  function onTouchMove(e) {\n    const isMouseEvent = e.pointerType === 'mouse';\n    const isMousePan = isMouseEvent && swiper.params.zoom.panOnMouseMove;\n    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {\n      return;\n    }\n    const zoom = swiper.zoom;\n    if (!gesture.imageEl) {\n      return;\n    }\n    if (!image.isTouched || !gesture.slideEl) {\n      if (isMousePan) onMouseMove(e);\n      return;\n    }\n    if (isMousePan) {\n      onMouseMove(e);\n      return;\n    }\n    if (!image.isMoved) {\n      image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n      image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n      image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n      image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n      gesture.slideWidth = gesture.slideEl.offsetWidth;\n      gesture.slideHeight = gesture.slideEl.offsetHeight;\n      gesture.imageWrapEl.style.transitionDuration = '0ms';\n    }\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n    image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n    const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n    if (touchesDiff > 5) {\n      swiper.allowClick = false;\n    }\n    if (!image.isMoved && !isScaling) {\n      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\n        image.isTouched = false;\n        allowTouchMove();\n        return;\n      }\n      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\n        image.isTouched = false;\n        allowTouchMove();\n        return;\n      }\n    }\n    if (e.cancelable) {\n      e.preventDefault();\n    }\n    e.stopPropagation();\n    preventTouchMove();\n    image.isMoved = true;\n    const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n    const {\n      originX,\n      originY\n    } = gesture;\n    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n    if (image.currentX < image.minX) {\n      image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n    }\n    if (image.currentX > image.maxX) {\n      image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n    }\n    if (image.currentY < image.minY) {\n      image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n    }\n    if (image.currentY > image.maxY) {\n      image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n    }\n\n    // Velocity\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n    velocity.prevPositionX = image.touchesCurrent.x;\n    velocity.prevPositionY = image.touchesCurrent.y;\n    velocity.prevTime = Date.now();\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n  }\n  function onTouchEnd() {\n    const zoom = swiper.zoom;\n    evCache.length = 0;\n    if (!gesture.imageEl) return;\n    if (!image.isTouched || !image.isMoved) {\n      image.isTouched = false;\n      image.isMoved = false;\n      return;\n    }\n    image.isTouched = false;\n    image.isMoved = false;\n    let momentumDurationX = 300;\n    let momentumDurationY = 300;\n    const momentumDistanceX = velocity.x * momentumDurationX;\n    const newPositionX = image.currentX + momentumDistanceX;\n    const momentumDistanceY = velocity.y * momentumDurationY;\n    const newPositionY = image.currentY + momentumDistanceY;\n\n    // Fix duration\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n    image.currentX = newPositionX;\n    image.currentY = newPositionY;\n    // Define if we need image drag\n    const scaledWidth = image.width * zoom.scale;\n    const scaledHeight = image.height * zoom.scale;\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n    image.maxX = -image.minX;\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n    image.maxY = -image.minY;\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n    gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n  }\n  function onTransitionEnd() {\n    const zoom = swiper.zoom;\n    if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n      if (gesture.imageEl) {\n        gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n      }\n      if (gesture.imageWrapEl) {\n        gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n      }\n      gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n      zoom.scale = 1;\n      currentScale = 1;\n      gesture.slideEl = undefined;\n      gesture.imageEl = undefined;\n      gesture.imageWrapEl = undefined;\n      gesture.originX = 0;\n      gesture.originY = 0;\n    }\n  }\n  function onMouseMove(e) {\n    // Only pan if zoomed in and mouse panning is enabled\n    if (currentScale <= 1 || !gesture.imageWrapEl) return;\n    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n    const currentTransform = window.getComputedStyle(gesture.imageWrapEl).transform;\n    const matrix = new window.DOMMatrix(currentTransform);\n    if (!isPanningWithMouse) {\n      isPanningWithMouse = true;\n      mousePanStart.x = e.clientX;\n      mousePanStart.y = e.clientY;\n      image.startX = matrix.e;\n      image.startY = matrix.f;\n      image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n      image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n      gesture.slideWidth = gesture.slideEl.offsetWidth;\n      gesture.slideHeight = gesture.slideEl.offsetHeight;\n      return;\n    }\n    const deltaX = (e.clientX - mousePanStart.x) * mousePanSensitivity;\n    const deltaY = (e.clientY - mousePanStart.y) * mousePanSensitivity;\n    const scaledWidth = image.width * currentScale;\n    const scaledHeight = image.height * currentScale;\n    const slideWidth = gesture.slideWidth;\n    const slideHeight = gesture.slideHeight;\n    const minX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n    const maxX = -minX;\n    const minY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n    const maxY = -minY;\n    const newX = Math.max(Math.min(image.startX + deltaX, maxX), minX);\n    const newY = Math.max(Math.min(image.startY + deltaY, maxY), minY);\n    gesture.imageWrapEl.style.transitionDuration = '0ms';\n    gesture.imageWrapEl.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;\n    mousePanStart.x = e.clientX;\n    mousePanStart.y = e.clientY;\n    image.startX = newX;\n    image.startY = newY;\n    image.currentX = newX;\n    image.currentY = newY;\n  }\n  function zoomIn(e) {\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    if (!gesture.slideEl) {\n      if (e && e.target) {\n        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n      }\n      if (!gesture.slideEl) {\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n          gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n        } else {\n          gesture.slideEl = swiper.slides[swiper.activeIndex];\n        }\n      }\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n    }\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.touchAction = 'none';\n    }\n    gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n    let touchX;\n    let touchY;\n    let offsetX;\n    let offsetY;\n    let diffX;\n    let diffY;\n    let translateX;\n    let translateY;\n    let imageWidth;\n    let imageHeight;\n    let scaledWidth;\n    let scaledHeight;\n    let translateMinX;\n    let translateMinY;\n    let translateMaxX;\n    let translateMaxY;\n    let slideWidth;\n    let slideHeight;\n    if (typeof image.touchesStart.x === 'undefined' && e) {\n      touchX = e.pageX;\n      touchY = e.pageY;\n    } else {\n      touchX = image.touchesStart.x;\n      touchY = image.touchesStart.y;\n    }\n    const prevScale = currentScale;\n    const forceZoomRatio = typeof e === 'number' ? e : null;\n    if (currentScale === 1 && forceZoomRatio) {\n      touchX = undefined;\n      touchY = undefined;\n      image.touchesStart.x = undefined;\n      image.touchesStart.y = undefined;\n    }\n    const maxRatio = getMaxRatio();\n    zoom.scale = forceZoomRatio || maxRatio;\n    currentScale = forceZoomRatio || maxRatio;\n    if (e && !(currentScale === 1 && forceZoomRatio)) {\n      slideWidth = gesture.slideEl.offsetWidth;\n      slideHeight = gesture.slideEl.offsetHeight;\n      offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n      offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n      diffX = offsetX + slideWidth / 2 - touchX;\n      diffY = offsetY + slideHeight / 2 - touchY;\n      imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n      imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n      scaledWidth = imageWidth * zoom.scale;\n      scaledHeight = imageHeight * zoom.scale;\n      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n      translateMaxX = -translateMinX;\n      translateMaxY = -translateMinY;\n      if (prevScale > 0 && forceZoomRatio && typeof image.currentX === 'number' && typeof image.currentY === 'number') {\n        translateX = image.currentX * zoom.scale / prevScale;\n        translateY = image.currentY * zoom.scale / prevScale;\n      } else {\n        translateX = diffX * zoom.scale;\n        translateY = diffY * zoom.scale;\n      }\n      if (translateX < translateMinX) {\n        translateX = translateMinX;\n      }\n      if (translateX > translateMaxX) {\n        translateX = translateMaxX;\n      }\n      if (translateY < translateMinY) {\n        translateY = translateMinY;\n      }\n      if (translateY > translateMaxY) {\n        translateY = translateMaxY;\n      }\n    } else {\n      translateX = 0;\n      translateY = 0;\n    }\n    if (forceZoomRatio && zoom.scale === 1) {\n      gesture.originX = 0;\n      gesture.originY = 0;\n    }\n    image.currentX = translateX;\n    image.currentY = translateY;\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\n    gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n    gesture.imageEl.style.transitionDuration = '300ms';\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n  }\n  function zoomOut() {\n    const zoom = swiper.zoom;\n    const params = swiper.params.zoom;\n    if (!gesture.slideEl) {\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n        gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n      } else {\n        gesture.slideEl = swiper.slides[swiper.activeIndex];\n      }\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n      if (imageEl) {\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n      }\n      gesture.imageEl = imageEl;\n      if (imageEl) {\n        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n      } else {\n        gesture.imageWrapEl = undefined;\n      }\n    }\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\n    if (swiper.params.cssMode) {\n      swiper.wrapperEl.style.overflow = '';\n      swiper.wrapperEl.style.touchAction = '';\n    }\n    zoom.scale = 1;\n    currentScale = 1;\n    image.currentX = undefined;\n    image.currentY = undefined;\n    image.touchesStart.x = undefined;\n    image.touchesStart.y = undefined;\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\n    gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n    gesture.imageEl.style.transitionDuration = '300ms';\n    gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n    gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n    gesture.slideEl = undefined;\n    gesture.originX = 0;\n    gesture.originY = 0;\n    if (swiper.params.zoom.panOnMouseMove) {\n      mousePanStart = {\n        x: 0,\n        y: 0\n      };\n      if (isPanningWithMouse) {\n        isPanningWithMouse = false;\n        image.startX = 0;\n        image.startY = 0;\n      }\n    }\n  }\n\n  // Toggle Zoom\n  function zoomToggle(e) {\n    const zoom = swiper.zoom;\n    if (zoom.scale && zoom.scale !== 1) {\n      // Zoom Out\n      zoomOut();\n    } else {\n      // Zoom In\n      zoomIn(e);\n    }\n  }\n  function getListeners() {\n    const passiveListener = swiper.params.passiveListeners ? {\n      passive: true,\n      capture: false\n    } : false;\n    const activeListenerWithCapture = swiper.params.passiveListeners ? {\n      passive: false,\n      capture: true\n    } : true;\n    return {\n      passiveListener,\n      activeListenerWithCapture\n    };\n  }\n\n  // Attach/Detach Events\n  function enable() {\n    const zoom = swiper.zoom;\n    if (zoom.enabled) return;\n    zoom.enabled = true;\n    const {\n      passiveListener,\n      activeListenerWithCapture\n    } = getListeners();\n\n    // Scale image\n    swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n    swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n      swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n    });\n\n    // Move image\n    swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n  }\n  function disable() {\n    const zoom = swiper.zoom;\n    if (!zoom.enabled) return;\n    zoom.enabled = false;\n    const {\n      passiveListener,\n      activeListenerWithCapture\n    } = getListeners();\n\n    // Scale image\n    swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n    swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n    ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n      swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n    });\n\n    // Move image\n    swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n  }\n  on('init', () => {\n    if (swiper.params.zoom.enabled) {\n      enable();\n    }\n  });\n  on('destroy', () => {\n    disable();\n  });\n  on('touchStart', (_s, e) => {\n    if (!swiper.zoom.enabled) return;\n    onTouchStart(e);\n  });\n  on('touchEnd', (_s, e) => {\n    if (!swiper.zoom.enabled) return;\n    onTouchEnd();\n  });\n  on('doubleTap', (_s, e) => {\n    if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n      zoomToggle(e);\n    }\n  });\n  on('transitionEnd', () => {\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n      onTransitionEnd();\n    }\n  });\n  on('slideChange', () => {\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n      onTransitionEnd();\n    }\n  });\n  Object.assign(swiper.zoom, {\n    enable,\n    disable,\n    in: zoomIn,\n    out: zoomOut,\n    toggle: zoomToggle\n  });\n}\n\nexport { Zoom as default };\n","import { getCRSFToken, getGlobalContext } from \"../utils/django.js\";\nimport { linkify } from \"../utils/linkify.js\";\nimport Swiper from \"swiper\";\nimport { Pagination, Zoom, Navigation, Keyboard } from \"swiper/modules\";\n\nexport function init() {\n  listenForFavoriteButton();\n  enableSwiperGallery();\n  runPriceWatch();\n  linkifyDescription();\n}\n\nfunction enableSwiperGallery() {\n  const globalContext = getGlobalContext();\n  const isMobile = globalContext?.request?.user?.user_agent?.is_mobile;\n  const swiperClassName = \".swiper\";\n\n  const $swiper = document.querySelector(swiperClassName);\n\n  if (!$swiper) {\n    // Not all listing types always require an image upload.\n    // So this is a valid scenario.\n    console.info(\"No el for\", swiperClassName);\n    return;\n  }\n\n  const setCalculatedVh = (el, desiredVh) => {\n    const vh = window.innerHeight * 0.01; // 1% of the viewport height\n    el.style.height = `${vh * desiredVh}px`; // For example, set height equivalent to 50vh\n  };\n\n  const desiredVh = 60;\n  setCalculatedVh($swiper, desiredVh);\n\n  const modules = [Pagination, Zoom];\n  if (!isMobile) {\n    modules.push(Navigation);\n    modules.push(Keyboard);\n  }\n\n  const swiper = new Swiper(swiperClassName, {\n    modules,\n    zoom: true,\n    navigation: {\n      nextEl: \".swiper-button-next\",\n      prevEl: \".swiper-button-prev\",\n    },\n    keyboard: {\n      enabled: true,\n    },\n    pagination: {\n      el: \".swiper-pagination\",\n    },\n  });\n}\n\n/**\n * Favorite Button Logic\n */\nconst listenForFavoriteButton = () => {\n  const button = document.querySelector(\".favorite-btn\");\n  if (!button) {\n    return;\n  }\n  button.addEventListener(\"click\", function (event) {\n    const crsfToken = getCRSFToken();\n    const postUrl = button.dataset.postUrl;\n    fetch(postUrl, {\n      method: \"POST\",\n      headers: {\n        \"X-CSRFToken\": crsfToken,\n        \"Content-Type\": \"application/json\",\n      },\n    })\n      .then((response) => response.json())\n      .then((data) => {\n        const unselected = \"unselected\";\n        const selected = \"selected\";\n        if (data.favorite) {\n          button.classList.replace(unselected, selected);\n        } else {\n          button.classList.replace(selected, unselected);\n        }\n      })\n      .catch((error) => {\n        console.error(\"Error:\", error);\n        button.innerHTML =\n          '<span style=\"color: var(--alert-l1-color);\">☹</span>&nbsp;Error';\n      });\n  });\n};\n\nconst runPriceWatch = () => {\n  const pricewatchEl = document.getElementById(\"pricewatch\");\n  if (!pricewatchEl) return;\n\n  const priceInput = pricewatchEl.querySelector(\"#pricewatch_price\");\n  const apiUrl = pricewatchEl.dataset.apiUrl;\n  const csrfToken = getCRSFToken();\n\n  const updatePriceWatch = async (targetPrice) => {\n    const formData = new FormData();\n    formData.append(\"target_price\", targetPrice);\n    formData.append(\"action\", \"create_or_update\");\n    formData.append(\"csrfmiddlewaretoken\", csrfToken);\n    pricewatchEl.classList.add(\"disabled\");\n    const response = await fetch(apiUrl, {\n      method: \"POST\",\n      body: formData,\n      credentials: \"same-origin\",\n    });\n    if (!response.ok) {\n      // Handle error, e.g., throw an error or return early.\n      pricewatchEl.classList.add(\"disabled\");\n      pricewatchEl.classList.add(\"error\");\n      pricewatchEl.classList.remove(\"created\");\n      pricewatchEl.classList.remove(\"updated\");\n      throw new Error(`Request failed with status ${response.status}`);\n    }\n    const data = await response.json();\n    pricewatchEl.classList.remove(\"disabled\");\n    pricewatchEl.classList.replace(\"does-not-exist\", \"exists\");\n    if (data.created) {\n      pricewatchEl.classList.add(\"created\");\n      pricewatchEl.classList.remove(\"updated\");\n    }\n    if (data.updated) {\n      pricewatchEl.classList.add(\"updated\");\n      pricewatchEl.classList.remove(\"created\");\n    }\n  };\n\n  const deletePriceWatch = async () => {\n    const formData = new FormData();\n    formData.append(\"action\", \"delete\");\n    formData.append(\"csrfmiddlewaretoken\", csrfToken);\n\n    pricewatchEl.classList.add(\"disabled\");\n    const response = await fetch(apiUrl, {\n      method: \"POST\",\n      body: formData,\n      credentials: \"same-origin\",\n    });\n    if (!response.ok) {\n      // Handle error, e.g., throw an error or return early.\n      pricewatchEl.classList.add(\"disabled\");\n      pricewatchEl.classList.add(\"error\");\n      pricewatchEl.classList.remove(\"created\");\n      pricewatchEl.classList.remove(\"updated\");\n      throw new Error(`Request failed with status ${response.status}`);\n    }\n    const data = await response.json();\n    pricewatchEl.classList.remove(\"disabled\");\n    pricewatchEl.classList.replace(\"exists\", \"does-not-exist\");\n    pricewatchEl.classList.remove(\"created\");\n    pricewatchEl.classList.remove(\"updated\");\n  };\n\n  // Attach event listener for the Submit button (if rendered)\n  const submitBtn = pricewatchEl.querySelector(\"#submit_pricewatch\");\n  if (submitBtn) {\n    submitBtn.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n      const targetPrice = priceInput.value;\n      updatePriceWatch(targetPrice);\n    });\n  }\n\n  // Attach event listener for the Update button (if rendered)\n  const updateBtn = pricewatchEl.querySelector(\"#update_pricewatch\");\n  if (updateBtn) {\n    updateBtn.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n      const targetPrice = priceInput.value;\n      updatePriceWatch(targetPrice);\n    });\n  }\n\n  // Attach event listener for the Remove button (if rendered)\n  const removeBtn = pricewatchEl.querySelector(\"#remove_pricewatch\");\n  if (removeBtn) {\n    removeBtn.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n      deletePriceWatch();\n    });\n  }\n\n  if (priceInput) {\n    priceInput.addEventListener(\"change\", (event) => {\n      pricewatchEl.classList.remove(\"updated\");\n    });\n  }\n};\n\nconst linkifyDescription = () => {\n  const description = document.getElementById(\"description\");\n  description.innerHTML = linkify(description.innerText);\n};\n","/**\n * Converts URLs in a given text into clickable HTML anchor links.\n *\n * This function searches for URLs in the input text using a regular expression\n * and replaces them with HTML <a> tags, making them clickable links.\n *\n * @param {string} text - The text containing URLs to be transformed.\n * @returns {string} The text with URLs replaced by clickable links.\n *\n * @example\n * const text = \"Visit https://example.com for more info.\";\n * const result = linkify(text);\n * // result: 'Visit <a href=\"https://example.com\" rel=\"noopener noreferrer\">https://example.com</a> for more info.'\n */\nexport function linkify(text) {\n  const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n  return text.replace(\n    urlRegex,\n    '<a href=\"$1\" rel=\"noopener noreferrer\">$1</a>',\n  );\n}\n","export function roomAppContainer() {\n  const container = document.getElementById(\"room-app-container\");\n  const header = document.getElementById(\"room-header\");\n  // const messages = document.getElementById(\"messages\");\n  // const textarea = document.getElementById(\"message-input\");\n\n  // Keep #room-app-container directly under the visible bottom of #room-header\n  function updateAppTop() {\n    const r = header.getBoundingClientRect();\n    container.style.setProperty(\n      \"--app-top\",\n      Math.max(0, Math.round(r.bottom)) + \"px\",\n    );\n  }\n\n  // Reserve space for on-screen keyboard (works for iOS overlay + Android resize)\n  function updateKeyboardInset() {\n    let kb = 0;\n    if (window.visualViewport) {\n      const vv = window.visualViewport;\n      // Amount of bottom overlap when keyboard overlays (iOS) or 0 when layout is resized\n      kb = Math.max(\n        0,\n        Math.round(window.innerHeight - vv.height - vv.offsetTop),\n      );\n    }\n    container.style.setProperty(\"--kb\", kb + \"px\");\n  }\n\n  // Keep only #messages scrollable: guard against accidental body scrolls on some browsers\n  // (With body overflow:hidden this is usually enough, but the handler is harmless.)\n  // function preventPageScroll(e) {\n  //   // Allow scrolling inside #messages only\n  //   if (!messages.contains(e.target)) {\n  //     e.preventDefault();\n  //   }\n  // }\n\n  function onChange() {\n    updateAppTop();\n    updateKeyboardInset();\n  }\n\n  // Listeners\n  window.addEventListener(\"resize\", onChange);\n  window.addEventListener(\"scroll\", updateAppTop, { passive: true });\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener(\"resize\", onChange);\n    window.visualViewport.addEventListener(\"scroll\", onChange);\n  }\n  if (\"ResizeObserver\" in window) {\n    new ResizeObserver(updateAppTop).observe(header);\n  }\n\n  // Extra safety: prevent body touch/trackpad scrolling outside #messages\n  // (Use {passive:false} so preventDefault works on touch devices)\n  // window.addEventListener(\"wheel\", preventPageScroll, { passive: false });\n  // window.addEventListener(\"touchmove\", preventPageScroll, { passive: false });\n\n  // Initial layout\n  onChange();\n}\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,w=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)($)}function $(){for(var n,u,t,r,o,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,r=void 0,o=(r=(u=n).__v).__e,f=[],c=[],u.__P&&((t=d({},r)).__v=r.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,r,u.__n,u.__P.namespaceURI,32&r.__u?[o]:null,f,null==o?S(r):o,!!(32&r.__u),c),t.__v=r.__v,t.__.__k[t.__i]=t,N(f,t,c),r.__e=r.__=null,t.__e!=o&&C(t)));$.__r=0}function I(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,w,d,g,_,m=t&&t.__k||v,b=l.length;for(f=P(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:m[y.__i]||p,y.__i=a,g=O(n,y,h,i,r,o,e,f,c,s),w=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&B(h.ref,null,y),s.push(y.ref,y.__c||w,y)),null==d&&null!=w&&(d=w),(_=!!(4&y.__u))||h.__k===y.__k?f=A(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:w&&(f=w.nextSibling),y.__u&=-7);return u.__e=d,f}function P(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(f=r+h,(o=n.__k[r]=\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?m(null,o,null,null,null):w(o)?m(k,{children:o},null,null,null):null==o.constructor&&o.__b>0?m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o).__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=L(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),D(e,e));return t}function A(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=A(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(w(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==n.key||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(null!=u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=E),C&&C.sub(h),h.props=b,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)||u.__v==t.__v){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=V(a.props.children)),f=I(n,w(L)?L:[L],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(T=o.length;T--;)g(o[T]);z(u)}else u.__e=t.__e,u.__k=t.__k,n.then||z(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=q(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n){n&&n.__c&&(n.__c.__e=!0),n&&n.__k&&n.__k.forEach(z)}function N(n,u,t){for(var i=0;i<t.length;i++)B(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function V(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:w(n)?n.map(V):d({},n)}function q(u,t,i,r,o,e,f,c,s){var a,h,v,y,d,_,m,b=i.props,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((d=e[a])&&\"setAttribute\"in d==!!x&&(x?d.localName==x:3==d.nodeType)){u=d,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),b=i.props||p,!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(d=u.attributes[a]).name]=d.value;for(a in b)if(d=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=d;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,d,o)}for(a in k)d=k[a],\"children\"==a?y=d:\"dangerouslySetInnerHTML\"==a?h=d:\"value\"==a?_=d:\"checked\"==a?m=d:c&&\"function\"!=typeof d||b[a]===d||j(u,a,d,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,w(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],o))}return u}function B(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function D(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||B(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&D(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function E(n,l,u){return this.constructor(n,u)}function G(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),N(e,u,f)}function J(n,l){G(n,l,J)}function K(l,u,t){var i,r,o,e,f=d({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function Q(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=d({},this.state),\"function\"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,K as cloneElement,Q as createContext,_ as createElement,b as createRef,_ as h,J as hydrate,t as isValidElement,l as options,G as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","import { h } from 'preact';\nexport const ArrowDown = (props) => {\n    const color = props.color || 'currentColor';\n    const size = props.size || 24;\n    delete props.color;\n    delete props.size;\n    return (h(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: color, \"stroke-width\": \"2\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" }, props),\n        h(\"line\", { x1: \"12\", y1: \"5\", x2: \"12\", y2: \"19\" }),\n        h(\"polyline\", { points: \"19 12 12 19 5 12\" })));\n};\n//# sourceMappingURL=arrow-down.js.map","import { h } from 'preact';\nexport const Image = (props) => {\n    const color = props.color || 'currentColor';\n    const size = props.size || 24;\n    delete props.color;\n    delete props.size;\n    return (h(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: color, \"stroke-width\": \"2\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" }, props),\n        h(\"rect\", { x: \"3\", y: \"3\", width: \"18\", height: \"18\", rx: \"2\", ry: \"2\" }),\n        h(\"circle\", { cx: \"8.5\", cy: \"8.5\", r: \"1.5\" }),\n        h(\"polyline\", { points: \"21 15 16 10 5 21\" })));\n};\n//# sourceMappingURL=image.js.map","import { h } from 'preact';\nexport const Send = (props) => {\n    const color = props.color || 'currentColor';\n    const size = props.size || 24;\n    delete props.color;\n    delete props.size;\n    return (h(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: color, \"stroke-width\": \"2\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" }, props),\n        h(\"line\", { x1: \"22\", y1: \"2\", x2: \"11\", y2: \"13\" }),\n        h(\"polygon\", { points: \"22 2 15 22 11 13 2 9 22 2\" })));\n};\n//# sourceMappingURL=send.js.map","import { h } from 'preact';\nexport const XCircle = (props) => {\n    const color = props.color || 'currentColor';\n    const size = props.size || 24;\n    delete props.color;\n    delete props.size;\n    return (h(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: size, height: size, viewBox: \"0 0 24 24\", fill: \"none\", stroke: color, \"stroke-width\": \"2\", \"stroke-linecap\": \"round\", \"stroke-linejoin\": \"round\" }, props),\n        h(\"circle\", { cx: \"12\", cy: \"12\", r: \"10\" }),\n        h(\"line\", { x1: \"15\", y1: \"9\", x2: \"9\", y2: \"15\" }),\n        h(\"line\", { x1: \"9\", y1: \"9\", x2: \"15\", y2: \"15\" })));\n};\n//# sourceMappingURL=x-circle.js.map","import { h, render, createContext } from \"preact\";\nimport {\n  useState,\n  useEffect,\n  useRef,\n  useMemo,\n  useCallback,\n  useContext,\n} from \"preact/hooks\";\nimport htm from \"htm\";\nimport { Image, Send, XCircle, ArrowDown } from \"preact-feather\";\nimport { getGlobalContext } from \"../../utils/django.js\";\nimport { CompressionPool, toBase64 } from \"../../utils/imageCompression.js\";\n\nexport function roomApp() {\n  const html = htm.bind(h);\n\n  const globalContext = getGlobalContext();\n\n  const isMobile = globalContext?.request?.user?.user_agent?.is_mobile;\n\n  const js_context = JSON.parse(\n    document.getElementById(\"js_context\").textContent,\n  );\n  const webSocketUrl = `wss://${window.location.host}/ws/room/${js_context.id}/`;\n\n  const isMe = (userId) => js_context.request_user.id === userId;\n  const getAvatarUrl = (userId) =>\n    isMe(userId)\n      ? js_context.request_user.avatar_64x64_url\n      : js_context.other_user.avatar_64x64_url;\n  const classNames = (...classes) => classes.filter(Boolean).join(\" \");\n\n  const compressionPool = new CompressionPool();\n  compressionPool.spawnWorkers();\n\n  const MAX_CHARACTERS = 1_500;\n\n  // Track original document title and notification state\n  const ORIGINAL_TITLE = document.title;\n  let hasUnreadNotification = false;\n\n  const updateTabTitle = (hasNewMessage = false) => {\n    if (hasNewMessage && document.visibilityState !== \"visible\") {\n      if (!hasUnreadNotification) {\n        document.title = `💬 New message from ${js_context.other_user.public_name}`;\n        hasUnreadNotification = true;\n      }\n    } else if (\n      document.visibilityState === \"visible\" &&\n      hasUnreadNotification\n    ) {\n      document.title = ORIGINAL_TITLE;\n      hasUnreadNotification = false;\n    }\n  };\n\n  const sendFocus = (wsRef) => {\n    if (document.visibilityState !== \"visible\") {\n      return;\n    }\n    const ws = wsRef?.current;\n    if (ws && ws.readyState === WebSocket.OPEN) {\n      ws.send(\n        JSON.stringify({\n          event: \"FOCUS\",\n          user_id: `${js_context.request_user.id}`,\n          room_id: `${js_context.id}`,\n        }),\n      );\n    }\n  };\n\n  const AppContext = createContext();\n  function AppProvider({ children }) {\n    const [fullScreenImage, setFullScreenImage] = useState(null);\n    const messageState = useMessages();\n\n    return html`\n      <${AppContext.Provider}\n        value=${{\n          fullScreenImage,\n          setFullScreenImage,\n          messageState,\n        }}\n      >\n        ${children}\n      <//>\n    `;\n  }\n\n  function AppWithProvider(props) {\n    return html`\n      <${AppProvider}>\n        <${App} />\n      <//>\n    `;\n  }\n\n  function connect({ webSocketUrl, onOpen, onMessage, onClose, onError }) {\n    const ws = new WebSocket(webSocketUrl);\n\n    ws.onopen = onOpen;\n\n    ws.onmessage = onMessage;\n\n    ws.onclose = onClose;\n\n    ws.onerror = onError;\n\n    return ws;\n  }\n\n  function App() {\n    const wsRef = useRef(null);\n    const [initialFetched, setInitialFetched] = useState(false);\n    const retryTimeoutRef = useRef(null);\n    const didRequestInitialRef = useRef(false); // <— ensure we only request once\n    const [statusMsg, setStatusMsg] = useState(\"\");\n    const { fullScreenImage, setFullScreenImage } = useContext(AppContext);\n    const { messageState } = useContext(AppContext); // ← Get from context\n    const [connectionTrigger, setConnectionTrigger] = useState(0); // Separate trigger for connections\n    const retryCountRef = useRef(0); // Keep current retry count to avoid stale closures\n    const [isOnline, setIsOnline] = useState(navigator.onLine);\n    const [otherIsTyping, setOtherIsTyping] = useState(false);\n    const typingClearRef = useRef(null);\n\n    const isWebSocketReady = (wsRef, isOnline) => {\n      const ws = wsRef?.current;\n      return ws && ws.readyState === WebSocket.OPEN && isOnline;\n    };\n\n    const fetchMissingMessages = (ws) => {\n      if (!ws || ws.readyState !== WebSocket.OPEN) {\n        console.log(\"WebSocket not connected, cannot fetch missing messages\");\n        return;\n      }\n      const latestMessage = messageState.latest;\n\n      if (latestMessage) {\n        console.log(\n          \"🔄 Fetching missed messages since:\",\n          latestMessage.created_at,\n        );\n        ws.send(\n          JSON.stringify({\n            event: \"FETCH_MESSAGES\",\n            created_at__gt: latestMessage.created_at,\n          }),\n        );\n      } else {\n        console.log(\"🔄 No messages found, fetching all messages\");\n        // No messages yet, fetch all\n        ws.send(\n          JSON.stringify({\n            event: \"FETCH_MESSAGES\",\n          }),\n        );\n      }\n    };\n\n    useEffect(() => {\n      const handleOnline = () => {\n        setIsOnline(true);\n      };\n      const handleOffline = () => {\n        setIsOnline(false);\n      };\n\n      window.addEventListener(\"online\", handleOnline);\n      window.addEventListener(\"offline\", handleOffline);\n\n      return () => {\n        window.removeEventListener(\"online\", handleOnline);\n        window.removeEventListener(\"offline\", handleOffline);\n      };\n    }, []);\n\n    const MAX_RETRIES = 5; // stop after 5 failed reconnect attempts\n    const RETRY_DELAYS = [1_000, 5_000, 10_000, 30_000, 60_000]; // exponential backoff delays in ms (1s, 5s, 10s, 30s, 60s)\n\n    const onOpen = (e) => {\n      console.log(\"✅ WebSocket connected\");\n\n      // Clear any pending retry timeout since we're now connected\n      if (retryTimeoutRef.current) {\n        clearTimeout(retryTimeoutRef.current);\n        retryTimeoutRef.current = null;\n      }\n\n      // Reset retry counter - don't trigger new connections\n      retryCountRef.current = 0;\n\n      // One-time initial load request\n      if (!didRequestInitialRef.current) {\n        didRequestInitialRef.current = true;\n        e.target.send(\n          JSON.stringify({\n            event: \"FETCH_MESSAGES\",\n          }),\n        );\n      } else {\n        // Reconnection - fetch messages newer than the latest we have\n        console.log(\"🔄 Reconnection detected!\");\n        console.log(\"messages count:\", messageState.count);\n        console.log(\"messages array length:\", messageState.messages.length);\n        fetchMissingMessages(e.target);\n      }\n\n      setStatusMsg(\"\");\n    };\n\n    const onMessage = (e) => {\n      const data = JSON.parse(e.data);\n      console.log(\"📨 WebSocket message received:\", data.event);\n\n      switch (data.event) {\n        case \"FETCH_MESSAGES\":\n          messageState.upsertMessages(data.messages);\n          setInitialFetched(true);\n          sendFocus(wsRef);\n          break;\n        case \"FETCH_MESSAGE\":\n          messageState.upsertMessage(data.message);\n          break;\n        case \"NEW_MESSAGE\":\n        case \"NEW_IMAGE\":\n        case \"SOFT_DELETE_MESSAGE\":\n          console.log(\"🔄 About to call upsertMessage...\");\n          messageState.upsertMessage(data.message);\n          console.log(\"✅ upsertMessage completed\");\n          sendFocus(wsRef);\n          if (!isMe(data.message.user.id)) {\n            updateTabTitle(true); // Update tab title on new message\n          }\n          break;\n        case \"TYPING\":\n          // ignore our own echoes\n          if (data.user_id === js_context.request_user.id) {\n            break;\n          }\n\n          setOtherIsTyping(Boolean(data.is_typing));\n\n          // safety auto-clear in case a \"stop\" is missed\n          if (typingClearRef.current) {\n            clearTimeout(typingClearRef.current);\n          }\n          if (data.is_typing) {\n            typingClearRef.current = setTimeout(\n              () => setOtherIsTyping(false),\n              5000,\n            );\n          }\n          break;\n        case \"USER_SUSPENDED\":\n          console.log(`🙅‍♂️ User ${data.user} suspended!`);\n          if (data.user === js_context.user1.id) {\n            console.log(`Redirecting to ${js_context.user1_suspended_url}!`);\n            window.location.href = js_context.user1_suspended_url;\n          }\n          break;\n        default:\n          break;\n      }\n    };\n\n    const onClose = (e) => {\n      console.log(\"🔌 Connection closed\");\n\n      // Clear any existing retry timeout\n      if (retryTimeoutRef.current) {\n        clearTimeout(retryTimeoutRef.current);\n      }\n\n      const currentRetryCount = retryCountRef.current;\n\n      if (e.target && !navigator.onLine) {\n        console.log(\"🌐 Network offline detected - aborting reconnection\");\n        setStatusMsg(\n          \"📡 Connection lost. Please check your internet connection.\",\n        );\n        return;\n      }\n\n      if (currentRetryCount >= MAX_RETRIES) {\n        const msg =\n          \"🚫 Max retries reached. Will not reconnect. Please check your internet connection or try again later.\";\n        console.warn(msg);\n        setStatusMsg(msg);\n        return;\n      }\n\n      const delay =\n        RETRY_DELAYS[currentRetryCount] ||\n        RETRY_DELAYS[RETRY_DELAYS.length - 1];\n      let msg = \"\";\n      if (currentRetryCount === 0) {\n        // Smartphones often lose connection when the user is not using the app. This is normal behavior. So presenting this message is less concerning.\n        msg = \"Re-establishing connection...\";\n      } else {\n        msg = `⚠️ Connection lost. Trying to reconnect in ${delay / 1_000} seconds... (attempt ${currentRetryCount + 1} of ${MAX_RETRIES})`;\n      }\n      console.log(msg);\n      setStatusMsg(msg);\n\n      retryTimeoutRef.current = setTimeout(() => {\n        retryCountRef.current = retryCountRef.current + 1;\n        setConnectionTrigger((prev) => prev + 1); // Trigger reconnection\n      }, delay);\n    };\n\n    const onError = (e) => {\n      console.error(\"❌ WebSocket error:\", e);\n      setStatusMsg(\"Connection error occurred\");\n    };\n\n    useEffect(() => {\n      if (wsRef.current && !navigator.onLine) {\n        console.log(\n          \"🌐 Network offline detected - closing WebSocket connection\",\n        );\n        wsRef.current.close();\n        wsRef.current = null;\n        return;\n      }\n\n      // Only create connection if we don't have an open one\n      if (wsRef.current && wsRef.current.readyState === WebSocket.OPEN) {\n        console.log(`WebSocket already connected. Skipping reconnect.`);\n        return;\n      }\n\n      if (retryCountRef.current >= MAX_RETRIES) {\n        const msg =\n          \"🚫 Max retries reached. Will not reconnect. Please check your internet connection or try again later.\";\n        console.warn(msg);\n        setStatusMsg(msg);\n        return;\n      }\n\n      // Close existing WebSocket if it exists and is not open (could be CLOSING, CLOSED, or CONNECTING)\n      if (wsRef.current && wsRef.current.readyState !== WebSocket.OPEN) {\n        console.log(\n          `Closing existing WebSocket in state: ${wsRef.current.readyState}`,\n        );\n        wsRef.current.close();\n        wsRef.current = null;\n      }\n\n      console.log(\n        `Creating WebSocket connection (trigger: ${connectionTrigger}, retryCount: ${retryCountRef.current})`,\n      );\n      wsRef.current = connect({\n        webSocketUrl,\n        onOpen,\n        onMessage,\n        onClose,\n        onError,\n      });\n\n      return () => {\n        if (wsRef.current) {\n          wsRef.current.close();\n        }\n        // Clear retry timeout on cleanup\n        if (retryTimeoutRef.current) {\n          clearTimeout(retryTimeoutRef.current);\n        }\n      };\n    }, [connectionTrigger, isOnline]); // Only depend on connectionTrigger, not retryCount\n\n    useEffect(() => {\n      const handleVisibilityChange = () => {\n        sendFocus(wsRef);\n        updateTabTitle(); // Update tab title on visibility change\n      };\n      document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n\n      return () => {\n        document.removeEventListener(\n          \"visibilitychange\",\n          handleVisibilityChange,\n        );\n      };\n    }, [wsRef]);\n\n    const sendMessage = (message) => {\n      const ws = wsRef.current;\n      if (ws && ws.readyState === WebSocket.OPEN) {\n        ws.send(\n          JSON.stringify({\n            event: \"NEW_MESSAGE\",\n            content: message,\n          }),\n        );\n      }\n    };\n\n    const onSubmit = (message) => {\n      sendMessage(message);\n    };\n\n    return html`\n      ${fullScreenImage &&\n      html`\n        <${FullScreenImageViewer}\n          imageUrl=${fullScreenImage}\n          onClose=${() => setFullScreenImage(null)}\n        />\n      `}\n      <${Messages}\n        messages=${messageState.messages}\n        initialFetched=${initialFetched}\n        wsRef=${wsRef}\n        otherIsTyping=${otherIsTyping}\n      />\n      <${Status} message=${statusMsg} />\n      <${Input}\n        onSubmit=${onSubmit}\n        wsRef=${wsRef}\n        isConnected=${isWebSocketReady(wsRef, isOnline)}\n      />\n    `;\n  }\n\n  function useMessages() {\n    const [map, setMap] = useState(() => new Map());\n\n    // Derive on render (no extra render pass)\n    const list = useMemo(() => {\n      if (map.size === 0) return [];\n      // If you prefer created_at: (a, b) => a.created_at - b.created_at (after parsing)\n      return Array.from(map.values()).sort((a, b) => a.id - b.id);\n    }, [map]);\n\n    const latest = list.length ? list[list.length - 1] : null;\n\n    const upsertMessage = useCallback((m) => {\n      setMap((prev) => {\n        // Optional fast path: if identical object ref already stored\n        if (prev.get(m.id) === m) return prev;\n        const next = new Map(prev);\n        next.set(m.id, m);\n        return next;\n      });\n    }, []);\n\n    const upsertMessages = useCallback((arr) => {\n      setMap((prev) => {\n        let changed = false;\n        const next = new Map(prev);\n        for (const m of arr) {\n          const before = next.get(m.id);\n          if (before !== m) {\n            next.set(m.id, m);\n            changed = true;\n          }\n        }\n        return changed ? next : prev;\n      });\n    }, []);\n\n    const getMessage = useCallback((id) => map.get(id) ?? null, [map]);\n\n    return {\n      messages: list, // matches existing API\n      latest,\n      count: map.size,\n      getMessage,\n      upsertMessage,\n      upsertMessages,\n    };\n  }\n\n  function FullScreenImageViewer({ imageUrl, onClose }) {\n    useEffect(() => {\n      const handleEscape = (e) => {\n        if (e.key === \"Escape\") {\n          onClose();\n        }\n      };\n\n      document.addEventListener(\"keydown\", handleEscape);\n      return () => document.removeEventListener(\"keydown\", handleEscape);\n    }, [onClose]);\n\n    return html`\n      <div\n        class=\"full-screen-overlay\"\n        onclick=${onClose}\n        style=${{\n          position: \"fixed\",\n          top: 0,\n          left: 0,\n          width: \"100%\",\n          height: \"100%\",\n          backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n          backdropFilter: \"blur(2px)\",\n          display: \"flex\",\n          justifyContent: \"center\",\n          alignItems: \"center\",\n          zIndex: 1000,\n          cursor: \"pointer\",\n          padding: \"12px\",\n        }}\n      >\n        <img\n          src=${imageUrl}\n          style=${{\n            maxWidth: \"100%\",\n            maxHeight: \"100%\",\n          }}\n        />\n      </div>\n    `;\n  }\n\n  function Message({ message, wsRef, isLast }) {\n    const me = isMe(message.user.id);\n    const messageRef = useRef(null);\n    const [imageUrl, setImageUrl] = useState(message.image_364x364 || null);\n    const [hasRequestedImage, setHasRequestedImage] = useState(false);\n    const { setFullScreenImage } = useContext(AppContext);\n\n    // Sync imageUrl state with message prop when it changes\n    useEffect(() => {\n      if (message.soft_deleted || !message.image_364x364) {\n        setImageUrl(null);\n      } else if (message.image_364x364) {\n        setImageUrl(message.image_364x364);\n      }\n    }, [message.image_364x364, message.soft_deleted]);\n\n    // Set up intersection observer for image messages\n    useEffect(() => {\n      if (message.type !== \"IMAGE\" || hasRequestedImage || imageUrl) {\n        return; // Skip if not an image message, already requested, or already has URL\n      }\n\n      const observer = new IntersectionObserver(\n        (entries) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting && !hasRequestedImage) {\n              // Message is now visible, request the image URL\n              setHasRequestedImage(true);\n\n              const ws = wsRef?.current;\n              if (ws && ws.readyState === WebSocket.OPEN) {\n                const payload = JSON.stringify({\n                  event: \"FETCH_MESSAGE\",\n                  message_id: message.id,\n                });\n                ws.send(payload);\n              }\n            }\n          });\n        },\n        {\n          threshold: 0.1, // Trigger when 10% of the element is visible\n          rootMargin: \"50px\", // Start loading 50px before the element comes into view\n        },\n      );\n\n      if (messageRef.current) {\n        observer.observe(messageRef.current);\n      }\n\n      return () => {\n        if (messageRef.current) {\n          observer.unobserve(messageRef.current);\n        }\n      };\n    }, [message.type, message.id, hasRequestedImage, imageUrl, wsRef]);\n\n    const handleThumbnailClick = () => {\n      // If we have the full resolution image, show it immediately\n      if (message.image_1200x1200) {\n        setFullScreenImage(message.image_1200x1200);\n      } else if (imageUrl) {\n        // Otherwise, request the full resolution image and show the thumbnail for now\n        const ws = wsRef?.current;\n        if (ws && ws.readyState === WebSocket.OPEN) {\n          const payload = JSON.stringify({\n            event: \"FETCH_MESSAGE\",\n            message_id: message.id,\n          });\n\n          console.log(\n            `Requesting full resolution image for message ${message.id}`,\n          );\n          ws.send(payload);\n        }\n        // Show the thumbnail while we wait for the full resolution\n        setFullScreenImage(imageUrl);\n      }\n    };\n\n    const handleDeleteClick = () => {\n      const confirmed = confirm(\n        `Are you sure you want to delete this message? ${js_context.other_user.public_name} will no longer see it.`,\n      );\n\n      if (!confirmed) {\n        return;\n      }\n\n      const ws = wsRef?.current;\n      if (ws && ws.readyState === WebSocket.OPEN) {\n        const payload = JSON.stringify({\n          event: \"SOFT_DELETE_MESSAGE\",\n          message_id: message.id,\n        });\n\n        console.log(`Soft deleting message ${message.id}`);\n        ws.send(payload);\n      }\n    };\n\n    let content = null;\n    if (message.type === \"TEXT\") {\n      content = message.decrypted_content;\n    } else if (message.type === \"IMAGE\") {\n      if (message.soft_deleted) {\n        content = \"[Image deleted.]\";\n      } else {\n        const handleImageLoad = (e) => {\n          e.target.classList.add(\"loaded\");\n        };\n\n        content = html`\n          <div class=\"img-thumbnail-container\">\n            ${imageUrl &&\n            html`<img\n              alt=\"Image message\"\n              src=\"${imageUrl}\"\n              loading=\"lazy\"\n              decoding=\"async\"\n              onclick=${handleThumbnailClick}\n              onload=${handleImageLoad}\n            />`}\n          </div>\n        `;\n      }\n    }\n\n    return html`\n      <div\n        ref=${messageRef}\n        data-id=${message.id}\n        class=${classNames(\n          \"message\",\n          me ? \"me\" : \"other-user\",\n          message.soft_deleted && \"soft-deleted\",\n          message.type.toLowerCase(),\n          isLast && \"last\",\n        )}\n      >\n        ${me && !message.soft_deleted\n          ? html`<div class=\"tools\">\n              <${XCircle}\n                class=\"delete\"\n                color=\"var(--font-color-2)\"\n                onclick=${handleDeleteClick}\n              />\n            </div>`\n          : \"\"}\n        <div class=\"bubble\">\n          <div class=\"content\">${content}</div>\n          <small class=\"meta\"\n            >${message.user.public_name} ${message.created_at_fmt}</small\n          >\n        </div>\n        <img\n          src=\"${getAvatarUrl(message.user.id)}\"\n          alt=\"Avatar\"\n          class=\"avatar\"\n          width=\"32\"\n          height=\"32\"\n        />\n      </div>\n    `;\n  }\n\n  function Messages({ messages, initialFetched, wsRef, otherIsTyping }) {\n    const messagesRef = useRef(null);\n    const prevMessagesLength = useRef(0);\n    const [isInitialScrollComplete, setIsInitialScrollComplete] =\n      useState(false);\n    const [hasUnreadMessagesBelow, setHasUnreadMessagesBelow] = useState(false);\n\n    const isNearBottom = () => {\n      const el = messagesRef.current;\n      if (!el) return false;\n      const threshold = 400; // pixels from bottom\n      return el.scrollHeight - el.scrollTop <= el.clientHeight + threshold;\n    };\n\n    const scrollToBottom = () => {\n      const el = messagesRef.current;\n      if (el) {\n        el.scrollTop = el.scrollHeight;\n      }\n    };\n\n    // Handle scroll events to hide the indicator when user scrolls near bottom\n    const handleScroll = () => {\n      if (isNearBottom()) {\n        setHasUnreadMessagesBelow(false);\n      }\n    };\n\n    useEffect(() => {\n      const el = messagesRef.current;\n      if (el) {\n        el.addEventListener(\"scroll\", handleScroll);\n        return () => el.removeEventListener(\"scroll\", handleScroll);\n      }\n    }, []);\n\n    useEffect(() => {\n      const currentLength = messages.length;\n      const previousLength = prevMessagesLength.current;\n\n      if (initialFetched && previousLength === 0) {\n        // Initial load - scroll to bottom and then show messages\n        // Use setTimeout to ensure DOM has updated with new messages\n        setTimeout(() => {\n          scrollToBottom();\n          setIsInitialScrollComplete(true);\n        }, 0);\n      } else if (currentLength > previousLength && isNearBottom()) {\n        // New message added and user is near bottom - auto scroll\n        scrollToBottom();\n      } else if (currentLength > previousLength && !isNearBottom()) {\n        // New message added but user is not near bottom - show indicator\n        setHasUnreadMessagesBelow(true);\n      }\n\n      // Update the previous length\n      prevMessagesLength.current = currentLength;\n    }, [messages, initialFetched]);\n\n    return html`\n      <div\n        id=\"messages\"\n        ref=${messagesRef}\n        style=${{\n          display: \"flex\",\n          flexDirection: \"column\",\n          overflowY: \"scroll\",\n          overflowX: \"hidden\",\n          opacity: initialFetched && !isInitialScrollComplete ? 0 : 1,\n          transition: \"opacity 0.1s ease-in-out\",\n          position: \"relative\",\n        }}\n      >\n        ${hasUnreadMessagesBelow &&\n        html`\n          <div\n            id=\"new-messages\"\n            style=${{\n              left: 0,\n              top: \"calc(100% - 56px)\",\n              position: \"sticky\",\n              width: \"100%\",\n              textAlign: \"center\",\n              zIndex: 2,\n            }}\n          >\n            <button\n              class=\"secondary\"\n              style=${{\n                filter: \"drop-shadow(0px 0px 6px rgba(0, 0, 0, 0.4))\",\n              }}\n              onClick=${scrollToBottom}\n            >\n              <div\n                style=${{\n                  display: \"flex\",\n                  alignItems: \"center\",\n                  gap: \"4px\",\n                }}\n              >\n                <${ArrowDown}\n                  color=\"var(--font-color-1)\"\n                  style=${{ width: \"18px\" }}\n                />\n                Messages Below\n              </div>\n            </button>\n          </div>\n        `}\n        <div>\n          <p style=\"text-align: center;\">\n            <small>\n              Room created ${js_context.created_at_fmt}\n              <br />\n              Use this room to ask questions, exchange contact information, and\n              schedule meeting times. Stay alert to avoid scams.\n              <br />\n              Only you, ${js_context.other_user.public_name} and admins can view\n              this conversation.\n            </small>\n          </p>\n        </div>\n        ${messages.map(\n          (message, idx, arr) =>\n            html`<${Message}\n              key=${message.id}\n              message=${message}\n              wsRef=${wsRef}\n              isLast=${idx === arr.length - 1}\n            />`,\n        )}\n        <div style=${{ opacity: otherIsTyping ? 1 : 0 }}>\n          <small>${js_context.other_user.public_name} is typing...</small>\n        </div>\n      </div>\n    `;\n  }\n\n  function AutoTextArea(props) {\n    const ref = useRef(null);\n\n    // resize once on mount and focus\n    useEffect(() => {\n      const el = ref.current;\n      if (el) {\n        el.style.height = \"auto\";\n        el.style.height = el.scrollHeight + \"px\";\n        el.focus();\n      }\n    }, []);\n\n    // Reset textarea height when value is cleared\n    useEffect(() => {\n      if (props.value === \"\" && ref.current) {\n        ref.current.style.height = \"auto\";\n        ref.current.style.height = ref.current.scrollHeight + \"px\";\n      }\n    }, [props.value]);\n\n    const onInput = (e) => {\n      const el = e.currentTarget;\n\n      // Remove character limit enforcement - allow typing beyond limit\n      // The submission will be prevented instead\n\n      el.style.height = \"auto\";\n      el.style.height = el.scrollHeight + \"px\";\n      props.onInput?.(e);\n    };\n\n    const onKeyDown = (e) => {\n      // Only trigger submit on Enter for non-mobile devices\n      if (!isMobile && e.key === \"Enter\" && !e.shiftKey) {\n        e.preventDefault();\n        props.onSubmit?.(e);\n      }\n    };\n\n    const currentLength = (props.value || \"\").length;\n    const isOverLimit = currentLength > MAX_CHARACTERS;\n    const isNearLimit = currentLength >= MAX_CHARACTERS - 100; // Show when within 100 characters\n\n    return html`\n      <div style=${{ width: \"100%\" }}>\n        <textarea\n          name=\"message\"\n          ref=${ref}\n          onInput=${onInput}\n          onKeyDown=${onKeyDown}\n          value=${props.value || \"\"}\n          style=${{\n            resize: \"none\",\n            overflowY: \"scroll\",\n            maxHeight: \"160px\",\n            margin: 0,\n            width: \"100%\",\n            border: isOverLimit ? \"1px solid var(--alert-l1-color)\" : undefined,\n          }}\n          rows=\"1\"\n          placeholder=${props.placeholder}\n        />\n        ${isNearLimit &&\n        html`\n          <div\n            style=${{\n              fontSize: \"12px\",\n              color: isOverLimit\n                ? \"var(--alert-l1-color)\"\n                : \"var(--font-color-2)\",\n              textAlign: \"right\",\n              marginTop: \"2px\",\n              fontFamily: \"monospace\",\n            }}\n          >\n            ${currentLength}/${MAX_CHARACTERS}\n          </div>\n        `}\n      </div>\n    `;\n  }\n\n  function Input({ onSubmit, wsRef, isConnected }) {\n    const TYPING_IDLE_MS = 1500; // stop after 1.5s of no keys\n    const SEND_MIN_GAP_MS = 800; // don't spam start packets\n    const typingStateRef = useRef({\n      isTyping: false,\n      lastSentAt: 0,\n      idleTimer: null,\n    });\n    const [canSubmit, setCanSubmit] = useState(false);\n    const [message, setMessage] = useState(\"\");\n    const textareaRef = useRef(null);\n\n    const sendTyping = (isTyping) => {\n      const ws = wsRef.current;\n      if (!ws || ws.readyState !== WebSocket.OPEN) return;\n\n      // Rate-limit identical state & enforce min gap for \"true\"\n      const now = Date.now();\n      if (typingStateRef.current.isTyping === isTyping) {\n        if (\n          isTyping &&\n          now - typingStateRef.current.lastSentAt < SEND_MIN_GAP_MS\n        )\n          return;\n        if (!isTyping) return; // don't repeatedly send false\n      }\n\n      typingStateRef.current.isTyping = isTyping;\n      typingStateRef.current.lastSentAt = now;\n\n      ws.send(\n        JSON.stringify({\n          event: \"TYPING\",\n          is_typing: isTyping,\n          user_id: js_context.request_user.id,\n        }),\n      );\n    };\n\n    const onInput = (e) => {\n      const value = e.target.value;\n      setMessage(value);\n\n      // Only allow submit if message has content and is within character limit\n      if (value.length > 0 && value.length <= MAX_CHARACTERS) {\n        setCanSubmit(true);\n      } else {\n        setCanSubmit(false);\n      }\n\n      // NEW: typing start + idle stop timer\n      sendTyping(true);\n      if (typingStateRef.current.idleTimer) {\n        clearTimeout(typingStateRef.current.idleTimer);\n      }\n      typingStateRef.current.idleTimer = setTimeout(\n        () => sendTyping(false),\n        TYPING_IDLE_MS,\n      );\n    };\n\n    const handleSubmit = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n\n      if (!canSubmit || !isConnected || message.length > MAX_CHARACTERS) {\n        console.log(\"Submit blocked due to validation\");\n        return;\n      }\n\n      console.log(\"Submit allowed, sending message\");\n      onSubmit(message);\n      setMessage(\"\");\n      setCanSubmit(false);\n      sendTyping(false);\n    };\n\n    const handleAutoTextAreaSubmit = (e) => {\n      if (!canSubmit || !isConnected || message.length > MAX_CHARACTERS) {\n        console.log(\"Auto submit blocked due to validation\");\n        return;\n      }\n\n      console.log(\"Auto submit allowed, sending message\");\n      onSubmit(message);\n      setMessage(\"\");\n      setCanSubmit(false);\n      sendTyping(false);\n    };\n\n    const handleUploadImageClick = (e) => {\n      // Don't allow image upload if WebSocket is not ready\n      if (!isConnected) {\n        return;\n      }\n\n      // Create a hidden file input element\n      const fileInput = document.createElement(\"input\");\n      fileInput.type = \"file\";\n      fileInput.accept = globalContext.settings.IMAGE_ACCEPT;\n      fileInput.multiple = true; // Enable multiple selection\n      fileInput.style.display = \"none\";\n\n      // Add the input to the DOM temporarily\n      document.body.appendChild(fileInput);\n\n      // Handle file selection\n      fileInput.addEventListener(\"change\", async (event) => {\n        const files = Array.from(event.target.files); // Get all selected files\n        if (!files.length) return;\n        const MAX_FILES = 10;\n        if (files.length > MAX_FILES) {\n          alert(`You can only upload up to ${MAX_FILES} images.`);\n          // Reset so the user can pick again\n          fileInput.value = \"\";\n          return;\n        }\n\n        console.log(\"Selected files:\", files);\n        const { success, failed } = await compressionPool.compress(files);\n\n        if (failed.length > 0) {\n          console.error(`Failed to compress`, failed);\n          window.alert(`Failed to compress ${failed.length} files.`);\n        }\n\n        console.log(success);\n\n        for (let compressedFile of success) {\n          const base64 = await toBase64(compressedFile);\n          // Send the image to the WebSocket\n          const ws = wsRef.current;\n          if (ws && ws.readyState === WebSocket.OPEN) {\n            const payload = JSON.stringify({\n              event: \"NEW_IMAGE\",\n              filename: compressedFile.name,\n              content_type: compressedFile.type,\n              size: compressedFile.size,\n              data_url: base64, // include the data URL so server can parse mime easily\n            });\n\n            console.log(`Sending image`, compressedFile.name);\n            ws.send(payload);\n          } else {\n            console.error(\"WebSocket is not connected. Cannot send image.\");\n          }\n        }\n\n        // Clean up - remove the input element\n        document.body.removeChild(fileInput);\n      });\n\n      // Trigger the file picker\n      fileInput.click();\n    };\n\n    return html`\n    <div id=\"input\">\n      <section style=${{ padding: \"4px\", width: \"100%\" }}>\n        <div style=${{ display: \"flex\", flexDirection: \"row\", gap: 8, alignItems: \"end\" }}>\n          <button \n            class=\"secondary\" \n            onclick=${handleUploadImageClick} \n            disabled=${!isConnected}\n            style=${{\n              width: \"32px\",\n              padding: \"4px\",\n              display: \"flex\",\n              justifyContent: \"center\",\n              alignItems: \"center\",\n              opacity: isConnected ? 1 : 0.5,\n              cursor: isConnected ? \"pointer\" : \"not-allowed\",\n            }}\n          >\n            <${Image} color=\"var(--font-color-1)\" />\n          </button>\n          <${AutoTextArea} ref=${textareaRef} onInput=${onInput} onSubmit=${handleAutoTextAreaSubmit} value=${message} placeholder=\"Write a message...\" />\n          <button \n            onmousedown=${handleSubmit} \n            class=\"primary\" \n            disabled=${!canSubmit || !isConnected} \n            style=${{\n              width: \"32px\",\n              height: \"32px\",\n              padding: \"4px\",\n              display: \"flex\",\n              justifyContent: \"center\",\n              alignItems: \"center\",\n              alignSelf: \"end\",\n              opacity: canSubmit && isConnected ? 1 : 0.5,\n              cursor: canSubmit && isConnected ? \"pointer\" : \"not-allowed\",\n            }}\n          >\n            <${Send} color=\"var(--font-color-4)\"></Send>\n          </button>\n        </div>\n      </section>\n\n    </div>\n  `;\n  }\n\n  function Status({ message }) {\n    return html`\n      <div\n        id=\"status\"\n        style=${{\n          display: message ? \"block\" : \"none\",\n          padding: \"8px 0 0px 0\",\n        }}\n      >\n        <section style=${{ padding: \"8px\" }}>${message}</section>\n      </div>\n    `;\n  }\n\n  render(html`<${AppWithProvider} />`, document.getElementById(\"room-app\"));\n}\n","export function setAllCheckboxes(checked) {\n  const checkboxes = document.querySelectorAll('input[type=\"checkbox\"]');\n  checkboxes.forEach((checkbox) => {\n    checkbox.checked = checked;\n  });\n}\n","import { setAllCheckboxes } from \"../utils/setAllCheckboxes.js\";\n\n/**\n * Intended to be used for the *_select_us_states pages.\n */\nexport function selectUSStatesHelperButtons() {\n  const $selectAll = document.getElementById(\"select-all\");\n  const $deselectAll = document.getElementById(\"deselect-all\");\n\n  $selectAll.addEventListener(\"click\", (e) => {\n    setAllCheckboxes(true);\n  });\n  $deselectAll.addEventListener(\"click\", (e) => {\n    setAllCheckboxes(false);\n  });\n}\n","import { setAllCheckboxes } from \"../utils/setAllCheckboxes.js\";\n\n/**\n * Intended to be used for the *_select_fields pages.\n */\nexport function selectFieldsHelperButtons() {\n  const $selectAll = document.getElementById(\"select-all\");\n  const $deselectAll = document.getElementById(\"deselect-all\");\n  const $selectMyFavorites = document.getElementById(\"select-my-favorites\");\n\n  $selectAll.addEventListener(\"click\", (e) => {\n    setAllCheckboxes(true);\n  });\n  $deselectAll.addEventListener(\"click\", (e) => {\n    setAllCheckboxes(false);\n  });\n  if ($selectMyFavorites) {\n    $selectMyFavorites.addEventListener(\"click\", (e) => {\n      selectMyFavorites();\n    });\n  }\n}\n\nfunction selectMyFavorites() {\n  const favorites = JSON.parse(\n    document.getElementById(\"favorite-fields-ids\").textContent,\n  );\n  const checkboxes = document.querySelectorAll('form input[type=\"checkbox\"]');\n  checkboxes.forEach(function (checkbox) {\n    const fieldId = parseInt(checkbox.value, 10);\n    checkbox.checked = favorites.includes(fieldId);\n  });\n}\n","import { init as index } from \"./pages/index.js\";\nimport { init as account_signup } from \"./pages/account_signup.js\";\nimport { init as contact_us } from \"./pages/contact_us.js\";\nimport { init as create_listing_wtb } from \"./pages/create_listing_wtb.js\";\nimport { init as create_listing_wts } from \"./pages/create_listing_wts.js\";\nimport { init as create_listing_wts_wtt } from \"./pages/create_listing_wts_wtt.js\";\nimport { init as create_listing_wtt } from \"./pages/create_listing_wtt.js\";\nimport { init as debug_form } from \"./pages/debug_form.js\";\nimport { init as edit_avatar } from \"./pages/edit_avatar.js\";\nimport { init as edit_listing_wtb } from \"./pages/edit_listing_wtb.js\";\nimport { init as edit_listing_wts } from \"./pages/edit_listing_wts.js\";\nimport { init as edit_listing_wts_wtt } from \"./pages/edit_listing_wts_wtt.js\";\nimport { init as edit_listing_wtt } from \"./pages/edit_listing_wtt.js\";\nimport { init as field } from \"./pages/field.js\";\nimport { init as listing } from \"./pages/listing.js\";\nimport { init as menu } from \"./pages/menu.js\";\nimport { init as my_favorite_fields } from \"./pages/my_favorite_fields.js\";\nimport { init as room } from \"./pages/room/room.js\";\nimport { init as listings_select_us_states } from \"./pages/listings_select_us_states.js\";\nimport { init as my_pricewatches_select_us_states } from \"./pages/my_pricewatches_select_us_states.js\";\nimport { init as my_favorite_listings_select_us_states } from \"./pages/my_favorite_listings_select_us_states.js\";\nimport { init as my_listings_select_us_states } from \"./pages/my_listings_select_us_states.js\";\nimport { init as user_select_us_states } from \"./pages/user_select_us_states.js\";\nimport { init as listings_select_fields } from \"./pages/listings_select_fields.js\";\nimport { init as my_pricewatches_select_fields } from \"./pages/my_pricewatches_select_fields.js\";\nimport { init as my_favorite_listings_select_fields } from \"./pages/my_favorite_listings_select_fields.js\";\nimport { init as my_listings_select_fields } from \"./pages/my_listings_select_fields.js\";\nimport { init as user_select_fields } from \"./pages/user_select_fields.js\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const page = document.body.dataset.page;\n  console.log(\"📄 page:\", page);\n\n  switch (page) {\n    case \"account_signup\":\n      // signup.html\n      account_signup();\n      break;\n    case \"contact_us\":\n      // contact_us.html\n      contact_us();\n      break;\n    case \"create_listing_wtb\":\n      // create_listing_wtb.html\n      create_listing_wtb();\n      break;\n    case \"create_listing_wts\":\n      // create_listing_wts.html\n      create_listing_wts();\n      break;\n    case \"create_listing_wts_wtt\":\n      // create_listing_wts_wtt.html\n      create_listing_wts_wtt();\n      break;\n    case \"create_listing_wtt\":\n      // create_listing_wtt.html\n      create_listing_wtt();\n      break;\n    case \"debug_form\":\n      // debug_form.html\n      debug_form();\n      break;\n    case \"edit_avatar\":\n      // edit_avatar.html\n      edit_avatar();\n      break;\n    case \"edit_listing_wtb\":\n      // edit_listing_wtb.html\n      edit_listing_wtb();\n      break;\n    case \"edit_listing_wts\":\n      // edit_listing_wts.html\n      edit_listing_wts();\n      break;\n    case \"edit_listing_wts_wtt\":\n      // edit_listing_wts_wtt.html\n      edit_listing_wts_wtt();\n      break;\n    case \"edit_listing_wtt\":\n      // edit_listing_wtt.html\n      edit_listing_wtt();\n      break;\n    case \"field\":\n      // field.html\n      field();\n      break;\n    case \"index\":\n      // index.html\n      index();\n      break;\n    case \"listing\":\n      // listing.html\n      listing();\n      break;\n    case \"menu\":\n      // menu.html\n      menu();\n      break;\n    case \"my_favorite_fields\":\n      // my_favorite_fields.html\n      my_favorite_fields();\n      break;\n    case \"room\":\n      // room.html\n      room();\n      break;\n    case \"listings_select_us_states\":\n      // select_us_states.html\n      listings_select_us_states();\n      break;\n    case \"my_pricewatches_select_us_states\":\n      // select_us_states.html\n      my_pricewatches_select_us_states();\n      break;\n    case \"my_favorite_listings_select_us_states\":\n      // select_us_states.html\n      my_favorite_listings_select_us_states();\n      break;\n    case \"my_listings_select_us_states\":\n      // select_us_states.html\n      my_listings_select_us_states();\n      break;\n    case \"user_select_us_states\":\n      // select_us_states.html\n      user_select_us_states();\n      break;\n    case \"listings_select_fields\":\n      // select_fields.html\n      listings_select_fields();\n      break;\n    case \"my_pricewatches_select_fields\":\n      // select_fields.html\n      my_pricewatches_select_fields();\n      break;\n    case \"my_favorite_listings_select_fields\":\n      // select_fields.html\n      my_favorite_listings_select_fields();\n      break;\n    case \"my_listings_select_fields\":\n      // select_fields.html\n      my_listings_select_fields();\n      break;\n    case \"user_select_fields\":\n      // select_fields.html\n      user_select_fields();\n      break;\n    default:\n      console.log(\"No page match\");\n      break;\n  }\n});\n","import { disableSubmitOnClick } from \"../capabilities/disableSubmitOnClick.js\";\n\nexport function init() {\n  disableSubmitOnClick();\n}\n","import { disableSubmitOnClick } from \"../capabilities/disableSubmitOnClick.js\";\nimport { compressImageInputs } from \"../capabilities/compressImageInputs.js\";\n\nexport function init() {\n  disableSubmitOnClick();\n  compressImageInputs();\n}\n","import { favoriteField } from \"../capabilities/favoriteField.js\";\n\nexport function init() {\n  favoriteField();\n}\n","export function init() {\n  document.getElementById(\"menu\").addEventListener(\"click\", (event) => {\n    event.preventDefault();\n\n    const sameOrigin =\n      document.referrer &&\n      new URL(document.referrer).origin === window.location.origin;\n    if (sameOrigin) {\n      history.back();\n    } else {\n      window.location.href = \"/\"; // fallback URL\n    }\n  });\n}\n","import { roomAppContainer } from \"./roomAppContainer.js\";\nimport { roomApp } from \"./roomApp.js\";\n\nexport function init() {\n  roomAppContainer();\n  roomApp();\n}\n","import { selectUSStatesHelperButtons } from \"../capabilities/selectUSStatesHelperButtons.js\";\n\nexport function init() {\n  selectUSStatesHelperButtons();\n}\n","import { selectFieldsHelperButtons } from \"../capabilities/selectFieldsHelperButtons.js\";\n\nexport function init() {\n  selectFieldsHelperButtons();\n}\n"],"names":["getCRSFToken","$token","document","querySelector","Error","value","_globalContext","getGlobalContext","$globalContextJson","JSON","parse","textContent","favoriteField","request","user","is_authenticated","crsfToken","querySelectorAll","forEach","el","favoriteFieldUrl","dataset","console","error","button","favoriteWord","unfavoriteWord","favoriteSpan","unfavoriteSpan","addEventListener","fetch","method","headers","then","response","json","data","favorite","innerHTML","replace","catch","disableSubmitOnClick","$form","e","disabled","innerText","info","toBase64","file","Promise","resolve","reject","r","FileReader","onload","result","onerror","readAsDataURL","formatBytes","bytes","isNaN","i","Math","floor","log","pow","toFixed","CompressionPool","constructor","$workerPath","getElementById","path","this","workerUrl","MAX_WORKERS","navigator","hardwareConcurrency","filesQueue","originalFilesQueue","originalFilesQueueLength","idleWorkers","allWorkers","filesSuccess","filesFailed","processed","_pending","spawnWorkers","length","warn","worker","Worker","type","onmessage","op","index","push","tryDispatchTask","original","shift","postMessage","success","filter","Boolean","failed","compress","files","name","Array","isArray","map","from","promise","min","compressImageInputs","compressionPool","inputs","submit","input","async","target","maxFiles","Number","alert","dataTransfer","DataTransfer","originalTotalSize","reduce","total","size","start","performance","now","window","items","add","end","newTotalSize","isObject","obj","Object","extend","src","noExtend","keys","key","indexOf","ssrDocument","body","removeEventListener","activeElement","blur","nodeName","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","ssrWindow","userAgent","history","replaceState","pushState","go","back","CustomEvent","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","nextTick","delay","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","transform","webkitTransform","split","a","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","parseFloat","m42","o","prototype","call","slice","isNode","node","HTMLElement","nodeType","args","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","undefined","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","max","easeProgress","cos","PI","currentPosition","scrollTo","overflow","elementChildren","element","selector","HTMLSlotElement","assignedElements","matches","showWarning","text","err","tag","classes","classList","trim","c","classesToTokens","elementOffset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","elementStyle","prop","elementIndex","child","previousSibling","elementParents","parents","parent","parentElement","elementOuterSize","includeMargins","makeElementsArray","setInnerHTML","html","trustedTypes","createPolicy","createHTML","s","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","calcSupport","getDevice","overrides","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","toLowerCase","String","includes","major","minor","num","isWebView","test","isSafariBrowser","need3dFix","calcBrowser","eventsEmitter","on","events","handler","priority","self","eventsListeners","destroyed","event","once","onceHandler","off","__emitterProxy","apply","onAny","eventsAnyListeners","offAny","splice","eventHandler","emit","context","unshift","toggleSlideClasses$1","slideEl","condition","className","contains","remove","toggleSlideClasses","processLazyPreloader","imageEl","closest","isElement","slideClass","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","slides","removeAttribute","preload","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","_","column","slideIndexLastInView","rewind","loop","realIndex","update","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","assign","updateSlides","getDirectionPropertyValue","label","getDirectionLabel","slidesEl","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","swiperSize","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slidesPerViewAutoSlideSize","roundLengths","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","boxSizing","offsetWidth","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","slideVisibleClass","slideFullyVisibleClass","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","find","nextEls","nextElementSibling","next","elementNextAll","prevEls","previousElementSibling","prev","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","getAttribute","initialized","runCallbacksOnInit","updateClickedSlide","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","slideTo","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","bothDirections","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","isFreeMode","freeMode","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","getSlideIndexWhenGrid","slideSelector","isGrid","getSlideIndex","loopCreate","loopAddBlankSlides","slideBlankClass","recalcSlides","clearBlankSlides","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","append","byMousewheel","loopedSlides","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isInitialOverflow","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","diff","touchEventsData","startTranslate","controller","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","preventDefault","onTouchStart","originalEvent","pointerId","targetTouches","touchId","identifier","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","isChild","slot","elementsQueue","elementToCheck","elementIsChildOfSlot","elementIsChildOf","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","preventTouchMoveFromPointerMove","cancelable","touchMoveStopPropagation","nested","stopPropagation","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","evt","bubbles","detail","bySwiperTouchMove","dispatchEvent","allowMomentumBounce","grabCursor","setGrabCursor","_loopSwapReset","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","breakpointsBase","breakpointContainer","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","unsetGrabCursor","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","defaults","init","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","url","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","transition","transitionDuration","transitionDelay","moving","isLocked","cursor","attachEvents","bind","detachEvents","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","entries","prefix","resultClasses","item","prepareClasses","autoheight","centered","removeClasses","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","parentNode","toUpperCase","getWrapperSelector","getWrapper","slideSlots","hostEl","lazyElements","destroy","deleteInstance","cleanStyles","object","deleteProps","extendDefaults","newDefaults","installModule","use","module","m","Keyboard","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","createElementIfNotDefined","checkProps","prototypeGroup","protoMethod","observer","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","options","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","Navigation","getEl","res","toggleEl","subEl","disabledClass","tagName","lockClass","onPrevClick","onNextClick","initButton","addIcons","tempEl","appendChild","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","_s","targetIsButton","pagination","clickable","isHidden","toggle","classesToSelector","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","moveDirection","firstIndex","midIndex","classesToRemove","suffix","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","render","paginationHTML","numberOfBullets","Zoom","zoom","limitToOriginalSize","maxRatio","panOnMouseMove","containerClass","zoomedSlideClass","currentScale","isScaling","isPanningWithMouse","mousePanStart","fakeGestureTouched","fakeGestureMoved","evCache","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","allowTouchMoveTimeout","getDistanceBetweenTouches","x1","y1","x2","y2","getMaxRatio","naturalWidth","imageMaxRatio","eventWithinSlide","eventWithinZoomContainer","onGestureStart","scaleStart","getScaleOrigin","onGestureChange","pointerIndex","findIndex","cachedEv","scaleMove","onGestureEnd","isMousePan","onMouseMove","scaledWidth","scaledHeight","scaleRatio","onTransitionEnd","DOMMatrix","clientX","clientY","f","deltaX","deltaY","newX","newY","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","prevScale","forceZoomRatio","zoomOut","zoomToggle","getListeners","passiveListener","activeListenerWithCapture","defineProperty","get","set","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","listenForFavoriteButton","globalContext","isMobile","user_agent","is_mobile","swiperClassName","$swiper","setCalculatedVh","desiredVh","vh","enableSwiperGallery","runPriceWatch","linkifyDescription","postUrl","unselected","selected","pricewatchEl","priceInput","apiUrl","csrfToken","updatePriceWatch","targetPrice","formData","FormData","credentials","ok","status","created","updated","submitBtn","updateBtn","removeBtn","deletePriceWatch","description","roomAppContainer","container","header","updateAppTop","round","bottom","onChange","kb","visualViewport","vv","updateKeyboardInset","n","l","u","h","p","w","d","g","removeChild","arguments","defaultProps","props","ref","__k","__","__b","__e","__c","__v","__i","__u","vnode","k","S","C","M","__d","$","__r","debounceRendering","__P","O","__n","namespaceURI","N","I","L","D","P","B","A","nextSibling","insertBefore","T","j","cssText","F","H","contextType","__E","E","sub","state","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","some","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","V","z","q","diffed","localName","createTextNode","is","__m","__html","content","unmount","componentWillUnmount","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","__H","__N","__f","every","Map","htm","ArrowDown","color","xmlns","viewBox","stroke","rx","ry","cx","cy","Send","XCircle","roomApp","js_context","webSocketUrl","isMe","userId","request_user","MAX_CHARACTERS","ORIGINAL_TITLE","title","hasUnreadNotification","updateTabTitle","hasNewMessage","visibilityState","other_user","public_name","sendFocus","wsRef","ws","readyState","WebSocket","OPEN","send","stringify","user_id","room_id","AppContext","Set","delete","Provider","__l","Consumer","createContext","AppProvider","fullScreenImage","setFullScreenImage","useState","messageState","setMap","list","useMemo","values","latest","upsertMessage","useCallback","upsertMessages","arr","changed","getMessage","messages","count","useMessages","App","useRef","initialFetched","setInitialFetched","retryTimeoutRef","didRequestInitialRef","statusMsg","setStatusMsg","useContext","connectionTrigger","setConnectionTrigger","retryCountRef","isOnline","setIsOnline","onLine","otherIsTyping","setOtherIsTyping","typingClearRef","useEffect","handleOnline","handleOffline","RETRY_DELAYS","onOpen","latestMessage","created_at","created_at__gt","fetchMissingMessages","onMessage","message","is_typing","user1","user1_suspended_url","onClose","currentRetryCount","msg","onError","close","onopen","onclose","connect","handleVisibilityChange","FullScreenImageViewer","Messages","Status","Input","sendMessage","isWebSocketReady","imageUrl","handleEscape","backgroundColor","backdropFilter","display","justifyContent","alignItems","zIndex","padding","maxWidth","maxHeight","Message","isLast","me","messageRef","setImageUrl","image_364x364","hasRequestedImage","setHasRequestedImage","soft_deleted","IntersectionObserver","entry","isIntersecting","payload","message_id","rootMargin","handleThumbnailClick","image_1200x1200","decrypted_content","handleImageLoad","confirm","created_at_fmt","avatar_64x64_url","messagesRef","prevMessagesLength","isInitialScrollComplete","setIsInitialScrollComplete","hasUnreadMessagesBelow","setHasUnreadMessagesBelow","isNearBottom","scrollHeight","scrollToBottom","handleScroll","currentLength","previousLength","flexDirection","overflowY","overflowX","opacity","textAlign","gap","idx","AutoTextArea","focus","isOverLimit","isNearLimit","currentTarget","onInput","onSubmit","resize","margin","border","placeholder","fontSize","fontFamily","isConnected","typingStateRef","isTyping","lastSentAt","idleTimer","canSubmit","setCanSubmit","setMessage","textareaRef","sendTyping","fileInput","accept","settings","IMAGE_ACCEPT","multiple","compressedFile","base64","filename","content_type","data_url","click","alignSelf","firstChild","setAllCheckboxes","checked","checkbox","selectUSStatesHelperButtons","$selectAll","$deselectAll","selectFieldsHelperButtons","$selectMyFavorites","favorites","fieldId","selectMyFavorites","page","listing","referrer","URL"],"mappings":"AAAO,SAASA,IACd,MAAMC,EAASC,SAASC,cAAc,8BACtC,IAAKF,EACH,MAAM,IAAIG,MAAM,wBAElB,OAAOH,EAAOI,KAChB,CAEA,IAAIC,EAEG,SAASC,IACd,IAAKD,EAAgB,CACnB,MAAME,EAAqBN,SAASC,cAAc,wBAClD,IAAKK,EACH,MAAM,IAAIJ,MAAM,4BAElBE,EAAiBG,KAAKC,MAAMF,EAAmBG,YACjD,CACA,OAAOL,CACT,CCJO,SAASM,IACd,IAAKL,KAAoBM,SAASC,MAAMC,iBACtC,OAEF,MAAMC,EAAYhB,IACNE,SAASe,iBAAiB,mBAClCC,QAASC,IACX,MAAMC,EAAmBD,EAAGE,QAAQD,iBACpC,IAAKA,EAEH,YADAE,QAAQC,MAAM,wCAAyCJ,GAGzD,MAAMK,EAASL,EAAGhB,cAAc,UAC1BsB,EAAe,WACfC,EAAiB,aACjBC,EAAe,iBACfC,EACJ,wDACGJ,EAILA,EAAOK,iBAAiB,QAAS,KAC/BC,MAAMV,EAAkB,CACtBW,OAAQ,OACRC,QAAS,CACP,cAAehB,EACf,eAAgB,sBAGjBiB,KAAMC,GAAaA,EAASC,QAC5BF,KAAMG,IACDA,EAAKC,SACPb,EAAOc,UAAYd,EAAOc,UACvBC,QAAQZ,EAAcC,GACtBW,QAAQd,EAAcC,GAEzBF,EAAOc,UAAYd,EAAOc,UACvBC,QAAQX,EAAgBD,GACxBY,QAAQb,EAAgBD,KAG9Be,MAAOjB,IACND,QAAQC,MAAM,SAAUA,GACxBC,EAAOc,UACL,sEA1BNhB,QAAQC,MAAM,6CAA8CJ,IA8BlE,CChEO,SAASsB,IACd,MAAMC,EAAQxC,SAASC,cAAc,QAChCuC,EAILA,EAAMb,iBAAiB,SAAWc,IAChC,MAAMnB,EAAStB,SAASC,cAAc,yBACjCqB,IAGLA,EAAOoB,UAAW,EAClBpB,EAAOqB,UAAY,mBATnBvB,QAAQwB,KAAK,iBAWjB,CCdO,SAASC,EAASC,GACvB,OAAO,IAAIC,QAAQ,CAACC,EAASC,KAC3B,MAAMC,EAAI,IAAIC,WACdD,EAAEE,OAAS,IAAMJ,EAAQE,EAAEG,QAC3BH,EAAEI,QAAUL,EACZC,EAAEK,cAAcT,IAEpB,CAEO,SAASU,EAAYC,GAC1B,GAAqB,iBAAVA,GAAsBC,MAAMD,IAAUA,GAAS,EAAG,MAAO,MACpE,MAEME,EAAIC,KAAKC,MAAMD,KAAKE,IAAIL,GAASG,KAAKE,IAFlC,OAIV,MAAO,IADOL,EAAQG,KAAKG,IAHjB,KAGwBJ,IAClBK,QAAc,IAANL,EAAU,EAAI,MAHxB,CAAC,IAAK,KAAM,KAAM,KAAM,MAGYA,IACpD,CAgIO,MAAMM,EACX,WAAAC,GACE,MAAMC,EAAcnE,SAASoE,eAAe,eAC5C,IAAKD,EACH,MAAM,IAAIjE,MAAM,mCAElB,IAAKiE,GAAahD,SAASkD,KACzB,MAAM,IAAInE,MAAM,oCAElBoE,KAAKC,UAAY,WAAWJ,GAAahD,SAASkD,OAElDC,KAAKE,YAAcC,UAAUC,qBAAuB,EACpDtD,QAAQ0C,IAAI,cAAeQ,KAAKE,aAEhCF,KAAKK,WAAa,GAClBL,KAAKM,mBAAqB,GAC1BN,KAAKO,yBAA2B,EAChCP,KAAKQ,YAAc,GACnBR,KAAKS,WAAa,GAClBT,KAAKU,aAAe,GACpBV,KAAKW,YAAc,GACnBX,KAAKY,UAAY,EAEjBZ,KAAKa,SAAW,IAClB,CAEA,YAAAC,GACE,GAAId,KAAKS,WAAWM,OAAS,EAC3BjE,QAAQkE,KAAK,0BAA2BhB,KAAKS,iBAI/C,IAAK,IAAIpB,EAAI,EAAGA,EAAIW,KAAKE,YAAab,IAAK,CACzC,MAAM4B,EAAS,IAAIC,OAAOlB,KAAKC,UAAW,CAAEkB,KAAM,WAClDF,EAAOG,UAAajD,IAClB,MAAMkD,GAAEA,EAAEzD,KAAEA,GAASO,EAAEP,MAAQ,CAAA,EAC/B,OAAQyD,GACN,IAAK,OACHrB,KAAKU,aAAa9C,EAAK0D,OAAS1D,EAAKY,KACrCwB,KAAKY,YACLZ,KAAKQ,YAAYe,KAAKN,GACtBjB,KAAKwB,kBACL,MACF,IAAK,QACH1E,QAAQC,MAAMa,GACd,MAAM0D,EAAQ1D,EAAK6D,SAAS7D,KAAK0D,MACjCtB,KAAKW,YAAYW,GAAStB,KAAKM,mBAAmBgB,GAAO9C,KACzDwB,KAAKY,YACLZ,KAAKQ,YAAYe,KAAKN,GACtBjB,KAAKwB,oBAOXP,EAAOjC,QAAWb,IAChBrB,QAAQC,MAAMoB,GACd,MAAMQ,OAAEA,GAAWqB,KAAKa,SACxBlC,EAAOR,IAGT6B,KAAKS,WAAWc,KAAKN,GACrBjB,KAAKQ,YAAYe,KAAKN,EACxB,CACF,CAEA,eAAAO,GACE,GAAIxB,KAAKK,WAAWU,OAAS,GAAKf,KAAKQ,YAAYO,OAAS,EAAG,CAC7D,MAAMO,MAAEA,EAAK9C,KAAEA,GAASwB,KAAKK,WAAWqB,QACzB1B,KAAKQ,YAAYkB,QACzBC,YAAY,CAAEN,GAAI,iBAAkBzD,KAAM,CAAE0D,QAAO9C,SAC5D,MAAWwB,KAAKY,YAAcZ,KAAKO,0BACjCP,KAAKtB,SAET,CAEA,OAAAA,GACE,MAAMA,QAAEA,GAAYsB,KAAKa,SACzBb,KAAKa,SAAW,KAChBnC,EAAQ,CACNgC,aAAcV,KAAKU,aACnBC,YAAaX,KAAKW,YAClBiB,QAAS5B,KAAKU,aAAamB,OAAOC,SAClCC,OAAQ/B,KAAKW,YAAYkB,OAAOC,UAEpC,CAEA,cAAME,CAASC,GACb,GAAIjC,KAAKa,SACP,OAAOpC,QAAQE,OACb,IAAI/C,MAAM,GAAG+D,EAAgBuC,uCAGjC,IAAKC,MAAMC,QAAQH,GACjB,OAAOxD,QAAQE,OAAO,IAAI/C,MAAM,+BAA+BqG,MAGjEjC,KAAKK,WAAa4B,EAAMI,IAAI,CAAC7D,EAAM8C,MAAaA,QAAO9C,UACvDwB,KAAKM,mBAAqB6B,MAAMG,KAAKtC,KAAKK,YAC1CL,KAAKO,yBAA2BP,KAAKM,mBAAmBS,OAExDf,KAAKU,aAAe,IAAIyB,MAAMnC,KAAKO,0BACnCP,KAAKW,YAAc,IAAIwB,MAAMnC,KAAKO,0BAClCP,KAAKY,UAAY,EACjB,MAAM2B,EAAU,IAAI9D,QAAQ,CAACC,EAASC,KACpCqB,KAAKa,SAAW,CAAEnC,UAASC,YAEvB6D,EAAMlD,KAAKkD,IAAIxC,KAAKE,YAAaF,KAAKO,0BAC5C,GAAIiC,EAAM,EAAG,CACoB,IAA3BxC,KAAKS,WAAWM,QAElBf,KAAKc,eAEP,IAAK,IAAIzB,EAAI,EAAGA,EAAImD,EAAKnD,IACvBW,KAAKwB,iBAET,MACExB,KAAKwB,kBAEP,OAAOe,CACT,ECtQK,SAASE,IACd,MAAMC,EAAkB,IAAI/C,EAC5B+C,EAAgB5B,eAEhB,MAAM6B,EAASjH,SAASe,iBAAiB,sBACnCmG,EAASlH,SAASC,cAAc,yBAEtC,IAAK,IAAIkH,KAASF,EAChBE,EAAMxF,iBAAiB,SAAUyF,MAAO3E,IACtCyE,EAAOxE,UAAW,EAElB,MAAM6D,EAAQE,MAAMG,KAAKnE,EAAE4E,OAAOd,OAElC,IAAKA,EAAMlB,OAET,YADA6B,EAAOxE,UAAW,GAIpB,MAAM4E,EAAW7E,EAAE4E,OAAOlG,SAASmG,SACnC,GAAIA,GACEf,EAAMlB,OAASkC,OAAOD,GAKxB,OAJAE,MACE,uBAAuBF,0BAAiCf,EAAMlB,gBAEhE6B,EAAOxE,UAAW,GAMtB,MAAM+E,EAAe,IAAIC,aAEzB,IAAIC,EAAoBpB,EAAMqB,OAC5B,CAACC,EAAO/E,IAAS+E,EAAQ/E,EAAKgF,KAC9B,GAEF1G,QAAQ0C,IACN,wBAAwB6D,MAAsBnE,EAAYmE,OAG5D,MAAMI,EAAQC,YAAYC,OAEpB/B,QAAEA,EAAOG,OAAEA,SAAiBW,EAAgBV,SAASC,GAEvDF,EAAOhB,OAAS,IAClBjE,QAAQC,MAAM,qBAAsBgF,GACpC6B,OAAOV,MAAM,sBAAsBnB,EAAOhB,kBAG5CjE,QAAQ0C,IAAIoC,GAGZA,EAAQlF,QAAS8B,IACf2E,EAAaU,MAAMC,IAAItF,KAGzB,MAAMuF,EAAML,YAAYC,MACxB7G,QAAQ0C,IAAI,yBAA0BuE,EAAMN,GAG5CtF,EAAE4E,OAAOd,MAAQkB,EAAalB,MAE9B,IAAI+B,EAAe,EACnB,IAAK,MAAMxF,KAAQ2E,EAAalB,MAC9B+B,GAAgBxF,EAAKgF,KAEvB1G,QAAQ0C,IACN,mBAAmBwE,MAAiB9E,EAAY8E,OAGlDpB,EAAOxE,UAAW,GAGxB,CChEA,SAAS6F,EAASC,GAChB,OAAe,OAARA,GAA+B,iBAARA,GAAoB,gBAAiBA,GAAOA,EAAItE,cAAgBuE,MAChG,CACA,SAASC,EAAOrB,EAAS,GAAIsB,EAAM,CAAA,GACjC,MAAMC,EAAW,CAAC,YAAa,cAAe,aAC9CH,OAAOI,KAAKF,GAAKxC,OAAO2C,GAAOF,EAASG,QAAQD,GAAO,GAAG9H,QAAQ8H,SACrC,IAAhBzB,EAAOyB,GAAsBzB,EAAOyB,GAAOH,EAAIG,GAAcP,EAASI,EAAIG,KAASP,EAASlB,EAAOyB,KAASL,OAAOI,KAAKF,EAAIG,IAAMzD,OAAS,GACpJqD,EAAOrB,EAAOyB,GAAMH,EAAIG,KAG9B,CACA,MAAME,EAAc,CAClBC,KAAM,CAAA,EACN,gBAAAtH,GAAoB,EACpB,mBAAAuH,GAAuB,EACvBC,cAAe,CACb,IAAAC,GAAQ,EACRC,SAAU,IAEZpJ,cAAa,IACJ,KAETc,iBAAgB,IACP,GAETqD,eAAc,IACL,KAETkF,YAAW,KACF,CACL,SAAAC,GAAa,IAGjBC,cAAa,KACJ,CACLC,SAAU,GACVC,WAAY,GACZC,MAAO,CAAA,EACP,YAAAC,GAAgB,EAChBC,qBAAoB,IACX,KAIbC,gBAAe,KACN,CAAA,GAETC,WAAU,IACD,KAETC,SAAU,CACRC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,KAGZ,SAASC,IACP,MAAMC,EAA0B,oBAAb1K,SAA2BA,SAAW,CAAA,EAEzD,OADA0I,EAAOgC,EAAK1B,GACL0B,CACT,CACA,MAAMC,EAAY,CAChB3K,SAAUgJ,EACVvE,UAAW,CACTmG,UAAW,IAEbZ,SAAU,CACRC,KAAM,GACNC,KAAM,GACNC,SAAU,GACVC,KAAM,GACNC,OAAQ,GACRC,SAAU,GACVC,SAAU,GACVC,OAAQ,IAEVK,QAAS,CACP,YAAAC,GAAgB,EAChB,SAAAC,GAAa,EACb,EAAAC,GAAM,EACN,IAAAC,GAAQ,GAEVC,YAAa,WACX,OAAO5G,IACT,EACA,gBAAA3C,GAAoB,EACpB,mBAAAuH,GAAuB,EACvBiC,iBAAgB,KACP,CACLC,iBAAgB,IACP,KAIb,KAAAC,GAAS,EACT,IAAAC,GAAQ,EACRC,OAAQ,CAAA,EACR,UAAAC,GAAc,EACd,YAAAC,GAAgB,EAChBC,WAAU,KACD,CAAA,GAETC,sBAAsBC,GACM,oBAAfJ,YACTI,IACO,MAEFJ,WAAWI,EAAU,GAE9B,oBAAAC,CAAqBC,GACO,oBAAfN,YAGXC,aAAaK,EACf,GAEF,SAASC,IACP,MAAMC,EAAwB,oBAAX9D,OAAyBA,OAAS,CAAA,EAErD,OADAQ,EAAOsD,EAAKrB,GACLqB,CACT,CCpHA,SAASC,EAASL,EAAUM,EAAQ,GAClC,OAAOV,WAAWI,EAAUM,EAC9B,CACA,SAASjE,IACP,OAAOqD,KAAKrD,KACd,CAeA,SAASkE,EAAalL,EAAImL,EAAO,KAC/B,MAAMlE,EAAS6D,IACf,IAAIM,EACAC,EACAC,EACJ,MAAMC,EAnBR,SAA0BvL,GACxB,MAAMiH,EAAS6D,IACf,IAAIpC,EAUJ,OATIzB,EAAOiD,mBACTxB,EAAQzB,EAAOiD,iBAAiBlK,EAAI,QAEjC0I,GAAS1I,EAAGwL,eACf9C,EAAQ1I,EAAGwL,cAER9C,IACHA,EAAQ1I,EAAG0I,OAENA,CACT,CAMmBwB,CAAiBlK,GA6BlC,OA5BIiH,EAAOwE,iBACTJ,EAAeE,EAASG,WAAaH,EAASI,gBAC1CN,EAAaO,MAAM,KAAKxH,OAAS,IACnCiH,EAAeA,EAAaO,MAAM,MAAMlG,IAAImG,GAAKA,EAAEzK,QAAQ,IAAK,MAAM0K,KAAK,OAI7ER,EAAkB,IAAIrE,EAAOwE,gBAAiC,SAAjBJ,EAA0B,GAAKA,KAE5EC,EAAkBC,EAASQ,cAAgBR,EAASS,YAAcT,EAASU,aAAeV,EAASW,aAAeX,EAASG,WAAaH,EAASpB,iBAAiB,aAAa/I,QAAQ,aAAc,sBACrMgK,EAASE,EAAgBa,WAAWP,MAAM,MAE/B,MAATT,IAE0BE,EAAxBpE,EAAOwE,gBAAgCH,EAAgBc,IAEhC,KAAlBhB,EAAOhH,OAA8BiI,WAAWjB,EAAO,KAE5CiB,WAAWjB,EAAO,KAE3B,MAATD,IAE0BE,EAAxBpE,EAAOwE,gBAAgCH,EAAgBgB,IAEhC,KAAlBlB,EAAOhH,OAA8BiI,WAAWjB,EAAO,KAE5CiB,WAAWjB,EAAO,KAEjCC,GAAgB,CACzB,CACA,SAAS/D,EAASiF,GAChB,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAEtJ,aAAkE,WAAnDuE,OAAOgF,UAAUL,SAASM,KAAKF,GAAGG,MAAM,GAAG,EAC5G,CACA,SAASC,EAAOC,GAEd,MAAsB,oBAAX3F,aAAwD,IAAvBA,OAAO4F,YAC1CD,aAAgBC,YAElBD,IAA2B,IAAlBA,EAAKE,UAAoC,KAAlBF,EAAKE,SAC9C,CACA,SAASrF,KAAUsF,GACjB,MAAMC,EAAKxF,OAAOuF,EAAK,IACjBpF,EAAW,CAAC,YAAa,cAAe,aAC9C,IAAK,IAAIjF,EAAI,EAAGA,EAAIqK,EAAK3I,OAAQ1B,GAAK,EAAG,CACvC,MAAMuK,EAAaF,EAAKrK,GACxB,GAAIuK,UAAoDN,EAAOM,GAAa,CAC1E,MAAMC,EAAY1F,OAAOI,KAAKJ,OAAOyF,IAAa/H,OAAO2C,GAAOF,EAASG,QAAQD,GAAO,GACxF,IAAK,IAAIsF,EAAY,EAAGC,EAAMF,EAAU9I,OAAQ+I,EAAYC,EAAKD,GAAa,EAAG,CAC/E,MAAME,EAAUH,EAAUC,GACpBG,EAAO9F,OAAO+F,yBAAyBN,EAAYI,QAC5CG,IAATF,GAAsBA,EAAKG,aACzBnG,EAAS0F,EAAGK,KAAa/F,EAAS2F,EAAWI,IAC3CJ,EAAWI,GAASK,WACtBV,EAAGK,GAAWJ,EAAWI,GAEzB5F,EAAOuF,EAAGK,GAAUJ,EAAWI,KAEvB/F,EAAS0F,EAAGK,KAAa/F,EAAS2F,EAAWI,KACvDL,EAAGK,GAAW,CAAA,EACVJ,EAAWI,GAASK,WACtBV,EAAGK,GAAWJ,EAAWI,GAEzB5F,EAAOuF,EAAGK,GAAUJ,EAAWI,KAGjCL,EAAGK,GAAWJ,EAAWI,GAG/B,CACF,CACF,CACA,OAAOL,CACT,CACA,SAASW,EAAe3N,EAAI4N,EAASC,GACnC7N,EAAG0I,MAAMoF,YAAYF,EAASC,EAChC,CACA,SAASE,GAAqBC,OAC5BA,EAAMC,eACNA,EAAcC,KACdA,IAEA,MAAMjH,EAAS6D,IACTqD,GAAiBH,EAAOI,UAC9B,IACIC,EADAC,EAAY,KAEhB,MAAMC,EAAWP,EAAOQ,OAAOC,MAC/BT,EAAOU,UAAUhG,MAAMiG,eAAiB,OACxC1H,EAAO2D,qBAAqBoD,EAAOY,gBACnC,MAAMC,EAAMZ,EAAiBE,EAAgB,OAAS,OAChDW,EAAe,CAACC,EAAS3I,IACd,SAARyI,GAAkBE,GAAW3I,GAAkB,SAARyI,GAAkBE,GAAW3I,EAEvE4I,EAAU,KACdX,GAAO,IAAIhE,MAAO4E,UACA,OAAdX,IACFA,EAAYD,GAEd,MAAMa,EAAWvM,KAAKwM,IAAIxM,KAAKkD,KAAKwI,EAAOC,GAAaC,EAAU,GAAI,GAChEa,EAAe,GAAMzM,KAAK0M,IAAIH,EAAWvM,KAAK2M,IAAM,EAC1D,IAAIC,EAAkBpB,EAAgBiB,GAAgBnB,EAAiBE,GAOvE,GANIW,EAAaS,EAAiBtB,KAChCsB,EAAkBtB,GAEpBD,EAAOU,UAAUc,SAAS,CACxBtB,CAACA,GAAOqB,IAENT,EAAaS,EAAiBtB,GAUhC,OATAD,EAAOU,UAAUhG,MAAM+G,SAAW,SAClCzB,EAAOU,UAAUhG,MAAMiG,eAAiB,GACxCpE,WAAW,KACTyD,EAAOU,UAAUhG,MAAM+G,SAAW,GAClCzB,EAAOU,UAAUc,SAAS,CACxBtB,CAACA,GAAOqB,WAGZtI,EAAO2D,qBAAqBoD,EAAOY,gBAGrCZ,EAAOY,eAAiB3H,EAAOyD,sBAAsBsE,IAEvDA,GACF,CAIA,SAASU,EAAgBC,EAASC,EAAW,IAC3C,MAAM3I,EAAS6D,IACTtC,EAAW,IAAImH,EAAQnH,UAI7B,OAHIvB,EAAO4I,iBAAmBF,aAAmBE,iBAC/CrH,EAAS5D,QAAQ+K,EAAQG,oBAEtBF,EAGEpH,EAAStD,OAAOlF,GAAMA,EAAG+P,QAAQH,IAF/BpH,CAGX,CAwBA,SAASwH,EAAYC,GACnB,IAEE,YADA9P,QAAQkE,KAAK4L,EAEf,CAAE,MAAOC,GAET,CACF,CACA,SAAS3H,EAAc4H,EAAKC,EAAU,IACpC,MAAMpQ,EAAKjB,SAASwJ,cAAc4H,GAElC,OADAnQ,EAAGqQ,UAAUlJ,OAAQ3B,MAAMC,QAAQ2K,GAAWA,EAtNhD,SAAyBA,EAAU,IACjC,OAAOA,EAAQE,OAAO1E,MAAM,KAAK1G,OAAOqL,KAAOA,EAAED,OACnD,CAoN0DE,CAAgBJ,IACjEpQ,CACT,CACA,SAASyQ,EAAczQ,GACrB,MAAMiH,EAAS6D,IACT/L,EAAWyK,IACXkH,EAAM1Q,EAAG2Q,wBACT3I,EAAOjJ,EAASiJ,KAChB4I,EAAY5Q,EAAG4Q,WAAa5I,EAAK4I,WAAa,EAC9CC,EAAa7Q,EAAG6Q,YAAc7I,EAAK6I,YAAc,EACjDC,EAAY9Q,IAAOiH,EAASA,EAAO8J,QAAU/Q,EAAG8Q,UAChDE,EAAahR,IAAOiH,EAASA,EAAOgK,QAAUjR,EAAGgR,WACvD,MAAO,CACLE,IAAKR,EAAIQ,IAAMJ,EAAYF,EAC3BO,KAAMT,EAAIS,KAAOH,EAAaH,EAElC,CAuBA,SAASO,EAAapR,EAAIqR,GAExB,OADevG,IACDZ,iBAAiBlK,EAAI,MAAMmK,iBAAiBkH,EAC5D,CACA,SAASC,EAAatR,GACpB,IACI0C,EADA6O,EAAQvR,EAEZ,GAAIuR,EAAO,CAGT,IAFA7O,EAAI,EAEuC,QAAnC6O,EAAQA,EAAMC,kBACG,IAAnBD,EAAMzE,WAAgBpK,GAAK,GAEjC,OAAOA,CACT,CAEF,CACA,SAAS+O,EAAezR,EAAI4P,GAC1B,MAAM8B,EAAU,GAChB,IAAIC,EAAS3R,EAAG4R,cAChB,KAAOD,GACD/B,EACE+B,EAAO5B,QAAQH,IAAW8B,EAAQ9M,KAAK+M,GAE3CD,EAAQ9M,KAAK+M,GAEfA,EAASA,EAAOC,cAElB,OAAOF,CACT,CAWA,SAASG,EAAiB7R,EAAI6G,EAAMiL,GAClC,MAAM7K,EAAS6D,IAEb,OAAO9K,EAAY,UAAT6G,EAAmB,cAAgB,gBAAkBwF,WAAWpF,EAAOiD,iBAAiBlK,EAAI,MAAMmK,iBAA0B,UAATtD,EAAmB,eAAiB,eAAiBwF,WAAWpF,EAAOiD,iBAAiBlK,EAAI,MAAMmK,iBAA0B,UAATtD,EAAmB,cAAgB,iBAGvR,CACA,SAASkL,EAAkB/R,GACzB,OAAQwF,MAAMC,QAAQzF,GAAMA,EAAK,CAACA,IAAKkF,OAAO1D,KAAOA,EACvD,CASA,SAASwQ,EAAahS,EAAIiS,EAAO,IACH,oBAAjBC,aACTlS,EAAGmB,UAAY+Q,aAAaC,aAAa,OAAQ,CAC/CC,WAAYC,GAAKA,IAChBD,WAAWH,GAEdjS,EAAGmB,UAAY8Q,CAEnB,CC9TA,IAAIK,EAgBAC,EAiDAC,EAxDJ,SAASC,IAIP,OAHKH,IACHA,EAVJ,WACE,MAAMrL,EAAS6D,IACT/L,EAAWyK,IACjB,MAAO,CACLkJ,aAAc3T,EAAS4T,iBAAmB5T,EAAS4T,gBAAgBjK,OAAS,mBAAoB3J,EAAS4T,gBAAgBjK,MACzHkK,SAAU,iBAAkB3L,GAAUA,EAAO4L,eAAiB9T,aAAoBkI,EAAO4L,eAE7F,CAGcC,IAELR,CACT,CA4CA,SAASS,EAAUC,EAAY,IAI7B,OAHKT,IACHA,EA3CJ,UAAoB5I,UAClBA,GACE,IACF,MAAM2I,EAAUG,IACVxL,EAAS6D,IACTmI,EAAWhM,EAAOzD,UAAUyP,SAC5BC,EAAKvJ,GAAa1C,EAAOzD,UAAUmG,UACnCwJ,EAAS,CACbC,KAAK,EACLC,SAAS,GAELC,EAAcrM,EAAOqD,OAAOiJ,MAC5BC,EAAevM,EAAOqD,OAAOmJ,OAC7BJ,EAAUH,EAAGQ,MAAM,+BACzB,IAAIC,EAAOT,EAAGQ,MAAM,8BACpB,MAAME,EAAOV,EAAGQ,MAAM,2BAChBG,GAAUF,GAAQT,EAAGQ,MAAM,8BAC3BI,EAAuB,UAAbb,EAChB,IAAIc,EAAqB,aAAbd,EAqBZ,OAjBKU,GAAQI,GAASzB,EAAQM,OADV,CAAC,YAAa,YAAa,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YACxG9K,QAAQ,GAAGwL,KAAeE,MAAmB,IAC9FG,EAAOT,EAAGQ,MAAM,uBACXC,IAAMA,EAAO,CAAC,EAAG,EAAG,WACzBI,GAAQ,GAINV,IAAYS,IACdX,EAAOa,GAAK,UACZb,EAAOE,SAAU,IAEfM,GAAQE,GAAUD,KACpBT,EAAOa,GAAK,MACZb,EAAOC,KAAM,GAIRD,CACT,CAGmBc,CAAWjB,IAErBT,CACT,CA4BA,SAAS2B,IAIP,OAHK1B,IACHA,EA3BJ,WACE,MAAMvL,EAAS6D,IACTqI,EAASJ,IACf,IAAIoB,GAAqB,EACzB,SAASC,IACP,MAAMlB,EAAKjM,EAAOzD,UAAUmG,UAAU0K,cACtC,OAAOnB,EAAGpL,QAAQ,WAAa,GAAKoL,EAAGpL,QAAQ,UAAY,GAAKoL,EAAGpL,QAAQ,WAAa,CAC1F,CACA,GAAIsM,IAAY,CACd,MAAMlB,EAAKoB,OAAOrN,EAAOzD,UAAUmG,WACnC,GAAIuJ,EAAGqB,SAAS,YAAa,CAC3B,MAAOC,EAAOC,GAASvB,EAAGtH,MAAM,YAAY,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAKlG,IAAIgP,GAAOpO,OAAOoO,IAC1FP,EAAqBK,EAAQ,IAAgB,KAAVA,GAAgBC,EAAQ,CAC7D,CACF,CACA,MAAME,EAAY,+CAA+CC,KAAK3N,EAAOzD,UAAUmG,WACjFkL,EAAkBT,IAExB,MAAO,CACLA,SAAUD,GAAsBU,EAChCV,qBACAW,UAJgBD,GAAmBF,GAAaxB,EAAOC,IAKvDuB,YAEJ,CAGcI,IAELvC,CACT,CA2IA,IAAIwC,EAAgB,CAClB,EAAAC,CAAGC,EAAQC,EAASC,GAClB,MAAMC,EAAOhS,KACb,IAAKgS,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMzU,EAASwU,EAAW,UAAY,OAKtC,OAJAF,EAAOtJ,MAAM,KAAK7L,QAAQyV,IACnBH,EAAKC,gBAAgBE,KAAQH,EAAKC,gBAAgBE,GAAS,IAChEH,EAAKC,gBAAgBE,GAAO5U,GAAQuU,KAE/BE,CACT,EACA,IAAAI,CAAKP,EAAQC,EAASC,GACpB,MAAMC,EAAOhS,KACb,IAAKgS,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,SAASK,KAAe3I,GACtBsI,EAAKM,IAAIT,EAAQQ,GACbA,EAAYE,uBACPF,EAAYE,eAErBT,EAAQU,MAAMR,EAAMtI,EACtB,CAEA,OADA2I,EAAYE,eAAiBT,EACtBE,EAAKJ,GAAGC,EAAQQ,EAAaN,EACtC,EACA,KAAAU,CAAMX,EAASC,GACb,MAAMC,EAAOhS,KACb,IAAKgS,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,GAAuB,mBAAZF,EAAwB,OAAOE,EAC1C,MAAMzU,EAASwU,EAAW,UAAY,OAItC,OAHIC,EAAKU,mBAAmBjO,QAAQqN,GAAW,GAC7CE,EAAKU,mBAAmBnV,GAAQuU,GAE3BE,CACT,EACA,MAAAW,CAAOb,GACL,MAAME,EAAOhS,KACb,IAAKgS,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKU,mBAAoB,OAAOV,EACrC,MAAM1Q,EAAQ0Q,EAAKU,mBAAmBjO,QAAQqN,GAI9C,OAHIxQ,GAAS,GACX0Q,EAAKU,mBAAmBE,OAAOtR,EAAO,GAEjC0Q,CACT,EACA,GAAAM,CAAIT,EAAQC,GACV,MAAME,EAAOhS,KACb,OAAKgS,EAAKC,iBAAmBD,EAAKE,UAAkBF,EAC/CA,EAAKC,iBACVJ,EAAOtJ,MAAM,KAAK7L,QAAQyV,SACD,IAAZL,EACTE,EAAKC,gBAAgBE,GAAS,GACrBH,EAAKC,gBAAgBE,IAC9BH,EAAKC,gBAAgBE,GAAOzV,QAAQ,CAACmW,EAAcvR,MAC7CuR,IAAiBf,GAAWe,EAAaN,gBAAkBM,EAAaN,iBAAmBT,IAC7FE,EAAKC,gBAAgBE,GAAOS,OAAOtR,EAAO,OAK3C0Q,GAZ2BA,CAapC,EACA,IAAAc,IAAQpJ,GACN,MAAMsI,EAAOhS,KACb,IAAKgS,EAAKC,iBAAmBD,EAAKE,UAAW,OAAOF,EACpD,IAAKA,EAAKC,gBAAiB,OAAOD,EAClC,IAAIH,EACAjU,EACAmV,EACmB,iBAAZrJ,EAAK,IAAmBvH,MAAMC,QAAQsH,EAAK,KACpDmI,EAASnI,EAAK,GACd9L,EAAO8L,EAAKL,MAAM,EAAGK,EAAK3I,QAC1BgS,EAAUf,IAEVH,EAASnI,EAAK,GAAGmI,OACjBjU,EAAO8L,EAAK,GAAG9L,KACfmV,EAAUrJ,EAAK,GAAGqJ,SAAWf,GAE/BpU,EAAKoV,QAAQD,GAcb,OAboB5Q,MAAMC,QAAQyP,GAAUA,EAASA,EAAOtJ,MAAM,MACtD7L,QAAQyV,IACdH,EAAKU,oBAAsBV,EAAKU,mBAAmB3R,QACrDiR,EAAKU,mBAAmBhW,QAAQmW,IAC9BA,EAAaL,MAAMO,EAAS,CAACZ,KAAUvU,MAGvCoU,EAAKC,iBAAmBD,EAAKC,gBAAgBE,IAC/CH,EAAKC,gBAAgBE,GAAOzV,QAAQmW,IAClCA,EAAaL,MAAMO,EAASnV,OAI3BoU,CACT,GAsXF,MAAMiB,EAAuB,CAACC,EAASC,EAAWC,KAC5CD,IAAcD,EAAQlG,UAAUqG,SAASD,GAC3CF,EAAQlG,UAAUlJ,IAAIsP,IACZD,GAAaD,EAAQlG,UAAUqG,SAASD,IAClDF,EAAQlG,UAAUsG,OAAOF,IA6G7B,MAAMG,EAAqB,CAACL,EAASC,EAAWC,KAC1CD,IAAcD,EAAQlG,UAAUqG,SAASD,GAC3CF,EAAQlG,UAAUlJ,IAAIsP,IACZD,GAAaD,EAAQlG,UAAUqG,SAASD,IAClDF,EAAQlG,UAAUsG,OAAOF,IA4D7B,MAAMI,EAAuB,CAAC7I,EAAQ8I,KACpC,IAAK9I,GAAUA,EAAOuH,YAAcvH,EAAOQ,OAAQ,OACnD,MACM+H,EAAUO,EAAQC,QADI/I,EAAOgJ,UAAY,eAAiB,IAAIhJ,EAAOQ,OAAOyI,cAElF,GAAIV,EAAS,CACX,IAAIW,EAASX,EAAQvX,cAAc,IAAIgP,EAAOQ,OAAO2I,uBAChDD,GAAUlJ,EAAOgJ,YAChBT,EAAQa,WACVF,EAASX,EAAQa,WAAWpY,cAAc,IAAIgP,EAAOQ,OAAO2I,sBAG5DzM,sBAAsB,KAChB6L,EAAQa,aACVF,EAASX,EAAQa,WAAWpY,cAAc,IAAIgP,EAAOQ,OAAO2I,sBACxDD,GAAQA,EAAOP,aAKvBO,GAAQA,EAAOP,QACrB,GAEIU,EAAS,CAACrJ,EAAQrJ,KACtB,IAAKqJ,EAAOsJ,OAAO3S,GAAQ,OAC3B,MAAMmS,EAAU9I,EAAOsJ,OAAO3S,GAAO3F,cAAc,oBAC/C8X,GAASA,EAAQS,gBAAgB,YAEjCC,EAAUxJ,IACd,IAAKA,GAAUA,EAAOuH,YAAcvH,EAAOQ,OAAQ,OACnD,IAAIiJ,EAASzJ,EAAOQ,OAAOkJ,oBAC3B,MAAMtK,EAAMY,EAAOsJ,OAAOlT,OAC1B,IAAKgJ,IAAQqK,GAAUA,EAAS,EAAG,OACnCA,EAAS9U,KAAKkD,IAAI4R,EAAQrK,GAC1B,MAAMuK,EAAgD,SAAhC3J,EAAOQ,OAAOmJ,cAA2B3J,EAAO4J,uBAAyBjV,KAAKkV,KAAK7J,EAAOQ,OAAOmJ,eACjHG,EAAc9J,EAAO8J,YAC3B,GAAI9J,EAAOQ,OAAOuJ,MAAQ/J,EAAOQ,OAAOuJ,KAAKC,KAAO,EAAG,CACrD,MAAMC,EAAeH,EACfI,EAAiB,CAACD,EAAeR,GASvC,OARAS,EAAetT,QAAQY,MAAMG,KAAK,CAChCvB,OAAQqT,IACP/R,IAAI,CAACyS,EAAGzV,IACFuV,EAAeN,EAAgBjV,SAExCsL,EAAOsJ,OAAOvX,QAAQ,CAACwW,EAAS7T,KAC1BwV,EAAe3D,SAASgC,EAAQ6B,SAASf,EAAOrJ,EAAQtL,IAGhE,CACA,MAAM2V,EAAuBP,EAAcH,EAAgB,EAC3D,GAAI3J,EAAOQ,OAAO8J,QAAUtK,EAAOQ,OAAO+J,KACxC,IAAK,IAAI7V,EAAIoV,EAAcL,EAAQ/U,GAAK2V,EAAuBZ,EAAQ/U,GAAK,EAAG,CAC7E,MAAM8V,GAAa9V,EAAI0K,EAAMA,GAAOA,GAChCoL,EAAYV,GAAeU,EAAYH,IAAsBhB,EAAOrJ,EAAQwK,EAClF,MAEA,IAAK,IAAI9V,EAAIC,KAAKwM,IAAI2I,EAAcL,EAAQ,GAAI/U,GAAKC,KAAKkD,IAAIwS,EAAuBZ,EAAQrK,EAAM,GAAI1K,GAAK,EACtGA,IAAMoV,IAAgBpV,EAAI2V,GAAwB3V,EAAIoV,IACxDT,EAAOrJ,EAAQtL,IA4JvB,IAAI+V,EAAS,CACXC,WA1vBF,WACE,MAAM1K,EAAS3K,KACf,IAAIkQ,EACAE,EACJ,MAAMzT,EAAKgO,EAAOhO,GAEhBuT,OADiC,IAAxBvF,EAAOQ,OAAO+E,OAAiD,OAAxBvF,EAAOQ,OAAO+E,MACtDvF,EAAOQ,OAAO+E,MAEdvT,EAAG2Y,YAGXlF,OADkC,IAAzBzF,EAAOQ,OAAOiF,QAAmD,OAAzBzF,EAAOQ,OAAOiF,OACtDzF,EAAOQ,OAAOiF,OAEdzT,EAAG4Y,aAEA,IAAVrF,GAAevF,EAAO6K,gBAA6B,IAAXpF,GAAgBzF,EAAO8K,eAKnEvF,EAAQA,EAAQwF,SAAS3H,EAAapR,EAAI,iBAAmB,EAAG,IAAM+Y,SAAS3H,EAAapR,EAAI,kBAAoB,EAAG,IACvHyT,EAASA,EAASsF,SAAS3H,EAAapR,EAAI,gBAAkB,EAAG,IAAM+Y,SAAS3H,EAAapR,EAAI,mBAAqB,EAAG,IACrHsG,OAAO7D,MAAM8Q,KAAQA,EAAQ,GAC7BjN,OAAO7D,MAAMgR,KAASA,EAAS,GACnCjM,OAAOwR,OAAOhL,EAAQ,CACpBuF,QACAE,SACA5M,KAAMmH,EAAO6K,eAAiBtF,EAAQE,IAE1C,EA8tBEwF,aA5tBF,WACE,MAAMjL,EAAS3K,KACf,SAAS6V,EAA0BtM,EAAMuM,GACvC,OAAO9M,WAAWO,EAAKzC,iBAAiB6D,EAAOoL,kBAAkBD,KAAW,EAC9E,CACA,MAAM3K,EAASR,EAAOQ,QAChBE,UACJA,EAAS2K,SACTA,EACAC,aAAcC,EAAGC,SACjBA,GACExL,EACEyL,EAAYzL,EAAO0L,SAAWlL,EAAOkL,QAAQC,QAC7CC,EAAuBH,EAAYzL,EAAO0L,QAAQpC,OAAOlT,OAAS4J,EAAOsJ,OAAOlT,OAChFkT,EAAS5H,EAAgB2J,EAAU,IAAIrL,EAAOQ,OAAOyI,4BACrD4C,EAAeJ,EAAYzL,EAAO0L,QAAQpC,OAAOlT,OAASkT,EAAOlT,OACvE,IAAI0V,EAAW,GACf,MAAMC,EAAa,GACbC,EAAkB,GACxB,IAAIC,EAAezL,EAAO0L,mBACE,mBAAjBD,IACTA,EAAezL,EAAO0L,mBAAmBzN,KAAKuB,IAEhD,IAAImM,EAAc3L,EAAO4L,kBACE,mBAAhBD,IACTA,EAAc3L,EAAO4L,kBAAkB3N,KAAKuB,IAE9C,MAAMqM,EAAyBrM,EAAO8L,SAAS1V,OACzCkW,EAA2BtM,EAAO+L,WAAW3V,OAC7CmW,EAAavM,EAAOnH,KAAOoT,EAAeE,EAChD,IAAIK,EAAehM,EAAOgM,aACtBC,GAAiBR,EACjBS,EAAgB,EAChB/V,EAAQ,EACZ,QAA0B,IAAf4V,EACT,OAE0B,iBAAjBC,GAA6BA,EAAa1S,QAAQ,MAAQ,EACnE0S,EAAenO,WAAWmO,EAAapZ,QAAQ,IAAK,KAAO,IAAMmZ,EAChC,iBAAjBC,IAChBA,EAAenO,WAAWmO,IAE5BxM,EAAO2M,aAAeH,EAAeP,EAAeE,EAGpD7C,EAAOvX,QAAQwW,IACTgD,EACFhD,EAAQ7N,MAAMkS,WAAa,GAE3BrE,EAAQ7N,MAAMmS,YAAc,GAE9BtE,EAAQ7N,MAAMoS,aAAe,GAC7BvE,EAAQ7N,MAAMqS,UAAY,KAIxBvM,EAAOwM,gBAAkBxM,EAAOyM,UAClCtN,EAAee,EAAW,kCAAmC,IAC7Df,EAAee,EAAW,iCAAkC,KAE9D,MAAMwM,EAAc1M,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,GAAKhK,EAAO+J,KAQlE,IAAIoD,EAPAD,EACFlN,EAAO+J,KAAKqD,WAAW9D,GACdtJ,EAAO+J,MAChB/J,EAAO+J,KAAKsD,cAKd,MAAMC,EAAgD,SAAzB9M,EAAOmJ,eAA4BnJ,EAAO+M,aAAe/T,OAAOI,KAAK4G,EAAO+M,aAAarW,OAAO2C,QACnE,IAA1C2G,EAAO+M,YAAY1T,GAAK8P,eACrCvT,OAAS,EACZ,IAAK,IAAI1B,EAAI,EAAGA,EAAImX,EAAcnX,GAAK,EAAG,CACxCyY,EAAY,EACZ,MAAMK,EAAQlE,EAAO5U,GACrB,IAAI8Y,IACEN,GACFlN,EAAO+J,KAAK0D,YAAY/Y,EAAG8Y,EAAOlE,GAEG,SAAnClG,EAAaoK,EAAO,YAJ1B,CAOA,GAAI/B,GAAsC,SAAzBjL,EAAOmJ,cAClBnJ,EAAOkL,QAAQgC,6BACjBP,EAAY3M,EAAOkL,QAAQgC,4BAEzBP,GAAaK,IACXhN,EAAOmN,eAAcR,EAAYxY,KAAKC,MAAMuY,IAChDK,EAAM9S,MAAMsF,EAAOoL,kBAAkB,UAAY,GAAG+B,YAEjD,GAA6B,SAAzB3M,EAAOmJ,cAA0B,CACtC2D,IACFE,EAAM9S,MAAMsF,EAAOoL,kBAAkB,UAAY,IAEnD,MAAMwC,EAAc1R,iBAAiBsR,GAC/BK,EAAmBL,EAAM9S,MAAMgD,UAC/BoQ,EAAyBN,EAAM9S,MAAMiD,gBAO3C,GANIkQ,IACFL,EAAM9S,MAAMgD,UAAY,QAEtBoQ,IACFN,EAAM9S,MAAMiD,gBAAkB,QAE5B6C,EAAOmN,aACTR,EAAYnN,EAAO6K,eAAiBhH,EAAiB2J,EAAO,SAAiB3J,EAAiB2J,EAAO,cAChG,CAEL,MAAMjI,EAAQ2F,EAA0B0C,EAAa,SAC/CG,EAAc7C,EAA0B0C,EAAa,gBACrDI,EAAe9C,EAA0B0C,EAAa,iBACtDhB,EAAa1B,EAA0B0C,EAAa,eACpDf,EAAc3B,EAA0B0C,EAAa,gBACrDK,EAAYL,EAAYzR,iBAAiB,cAC/C,GAAI8R,GAA2B,eAAdA,EACfd,EAAY5H,EAAQqH,EAAaC,MAC5B,CACL,MAAMlC,YACJA,EAAWuD,YACXA,GACEV,EACJL,EAAY5H,EAAQwI,EAAcC,EAAepB,EAAaC,GAAeqB,EAAcvD,EAC7F,CACF,CACIkD,IACFL,EAAM9S,MAAMgD,UAAYmQ,GAEtBC,IACFN,EAAM9S,MAAMiD,gBAAkBmQ,GAE5BtN,EAAOmN,eAAcR,EAAYxY,KAAKC,MAAMuY,GAClD,MACEA,GAAaZ,GAAc/L,EAAOmJ,cAAgB,GAAK6C,GAAgBhM,EAAOmJ,cAC1EnJ,EAAOmN,eAAcR,EAAYxY,KAAKC,MAAMuY,IAC5CK,IACFA,EAAM9S,MAAMsF,EAAOoL,kBAAkB,UAAY,GAAG+B,OAGpDK,IACFA,EAAMW,gBAAkBhB,GAE1BnB,EAAgBpV,KAAKuW,GACjB3M,EAAOwM,gBACTP,EAAgBA,EAAgBU,EAAY,EAAIT,EAAgB,EAAIF,EAC9C,IAAlBE,GAA6B,IAANhY,IAAS+X,EAAgBA,EAAgBF,EAAa,EAAIC,GAC3E,IAAN9X,IAAS+X,EAAgBA,EAAgBF,EAAa,EAAIC,GAC1D7X,KAAKyZ,IAAI3B,GAAiB,OAAUA,EAAgB,GACpDjM,EAAOmN,eAAclB,EAAgB9X,KAAKC,MAAM6X,IAChD9V,EAAQ6J,EAAO6N,iBAAmB,GAAGvC,EAASlV,KAAK6V,GACvDV,EAAWnV,KAAK6V,KAEZjM,EAAOmN,eAAclB,EAAgB9X,KAAKC,MAAM6X,KAC/C9V,EAAQhC,KAAKkD,IAAImI,EAAOQ,OAAO8N,mBAAoB3X,IAAUqJ,EAAOQ,OAAO6N,iBAAmB,GAAGvC,EAASlV,KAAK6V,GACpHV,EAAWnV,KAAK6V,GAChBA,EAAgBA,EAAgBU,EAAYX,GAE9CxM,EAAO2M,aAAeQ,EAAYX,EAClCE,EAAgBS,EAChBxW,GAAS,CA7ET,CA8EF,CAaA,GAZAqJ,EAAO2M,YAAchY,KAAKwM,IAAInB,EAAO2M,YAAaJ,GAAcJ,EAC5DZ,GAAOC,IAA+B,UAAlBhL,EAAO+N,QAAwC,cAAlB/N,EAAO+N,UAC1D7N,EAAUhG,MAAM6K,MAAQ,GAAGvF,EAAO2M,YAAcH,OAE9ChM,EAAOgO,iBACT9N,EAAUhG,MAAMsF,EAAOoL,kBAAkB,UAAY,GAAGpL,EAAO2M,YAAcH,OAE3EU,GACFlN,EAAO+J,KAAK0E,kBAAkBtB,EAAWrB,IAItCtL,EAAOwM,eAAgB,CAC1B,MAAM0B,EAAgB,GACtB,IAAK,IAAIha,EAAI,EAAGA,EAAIoX,EAAS1V,OAAQ1B,GAAK,EAAG,CAC3C,IAAIia,EAAiB7C,EAASpX,GAC1B8L,EAAOmN,eAAcgB,EAAiBha,KAAKC,MAAM+Z,IACjD7C,EAASpX,IAAMsL,EAAO2M,YAAcJ,GACtCmC,EAAc9X,KAAK+X,EAEvB,CACA7C,EAAW4C,EACP/Z,KAAKC,MAAMoL,EAAO2M,YAAcJ,GAAc5X,KAAKC,MAAMkX,EAASA,EAAS1V,OAAS,IAAM,GAC5F0V,EAASlV,KAAKoJ,EAAO2M,YAAcJ,EAEvC,CACA,GAAId,GAAajL,EAAO+J,KAAM,CAC5B,MAAM1R,EAAOmT,EAAgB,GAAKQ,EAClC,GAAIhM,EAAO6N,eAAiB,EAAG,CAC7B,MAAMO,EAASja,KAAKkV,MAAM7J,EAAO0L,QAAQmD,aAAe7O,EAAO0L,QAAQoD,aAAetO,EAAO6N,gBACvFU,EAAYlW,EAAO2H,EAAO6N,eAChC,IAAK,IAAI3Z,EAAI,EAAGA,EAAIka,EAAQla,GAAK,EAC/BoX,EAASlV,KAAKkV,EAASA,EAAS1V,OAAS,GAAK2Y,EAElD,CACA,IAAK,IAAIra,EAAI,EAAGA,EAAIsL,EAAO0L,QAAQmD,aAAe7O,EAAO0L,QAAQoD,YAAapa,GAAK,EACnD,IAA1B8L,EAAO6N,gBACTvC,EAASlV,KAAKkV,EAASA,EAAS1V,OAAS,GAAKyC,GAEhDkT,EAAWnV,KAAKmV,EAAWA,EAAW3V,OAAS,GAAKyC,GACpDmH,EAAO2M,aAAe9T,CAE1B,CAEA,GADwB,IAApBiT,EAAS1V,SAAc0V,EAAW,CAAC,IAClB,IAAjBU,EAAoB,CACtB,MAAM3S,EAAMmG,EAAO6K,gBAAkBU,EAAM,aAAevL,EAAOoL,kBAAkB,eACnF9B,EAAOpS,OAAO,CAACiT,EAAG6E,MACXxO,EAAOyM,UAAWzM,EAAO+J,OAC1ByE,IAAe1F,EAAOlT,OAAS,GAIlCrE,QAAQwW,IACTA,EAAQ7N,MAAMb,GAAO,GAAG2S,OAE5B,CACA,GAAIhM,EAAOwM,gBAAkBxM,EAAOyO,qBAAsB,CACxD,IAAIC,EAAgB,EACpBlD,EAAgBja,QAAQod,IACtBD,GAAiBC,GAAkB3C,GAAgB,KAErD0C,GAAiB1C,EACjB,MAAM4C,EAAUF,EAAgB3C,EAAa2C,EAAgB3C,EAAa,EAC1ET,EAAWA,EAASpU,IAAI2X,GAClBA,GAAQ,GAAWpD,EACnBoD,EAAOD,EAAgBA,EAAUjD,EAC9BkD,EAEX,CACA,GAAI7O,EAAO8O,yBAA0B,CACnC,IAAIJ,EAAgB,EACpBlD,EAAgBja,QAAQod,IACtBD,GAAiBC,GAAkB3C,GAAgB,KAErD0C,GAAiB1C,EACjB,MAAM+C,GAActD,GAAgB,IAAME,GAAe,GACzD,GAAI+C,EAAgBK,EAAahD,EAAY,CAC3C,MAAMiD,GAAmBjD,EAAa2C,EAAgBK,GAAc,EACpEzD,EAAS/Z,QAAQ,CAACsd,EAAMI,KACtB3D,EAAS2D,GAAaJ,EAAOG,IAE/BzD,EAAWha,QAAQ,CAACsd,EAAMI,KACxB1D,EAAW0D,GAAaJ,EAAOG,GAEnC,CACF,CAOA,GANAhW,OAAOwR,OAAOhL,EAAQ,CACpBsJ,SACAwC,WACAC,aACAC,oBAEExL,EAAOwM,gBAAkBxM,EAAOyM,UAAYzM,EAAOyO,qBAAsB,CAC3EtP,EAAee,EAAW,mCAAuCoL,EAAS,GAAb,MAC7DnM,EAAee,EAAW,iCAAqCV,EAAOnH,KAAO,EAAImT,EAAgBA,EAAgB5V,OAAS,GAAK,EAAnE,MAC5D,MAAMsZ,GAAiB1P,EAAO8L,SAAS,GACjC6D,GAAmB3P,EAAO+L,WAAW,GAC3C/L,EAAO8L,SAAW9L,EAAO8L,SAASpU,IAAIkY,GAAKA,EAAIF,GAC/C1P,EAAO+L,WAAa/L,EAAO+L,WAAWrU,IAAIkY,GAAKA,EAAID,EACrD,CAeA,GAdI9D,IAAiBD,GACnB5L,EAAOmI,KAAK,sBAEV2D,EAAS1V,SAAWiW,IAClBrM,EAAOQ,OAAOqP,eAAe7P,EAAO8P,gBACxC9P,EAAOmI,KAAK,yBAEV4D,EAAW3V,SAAWkW,GACxBtM,EAAOmI,KAAK,0BAEV3H,EAAOuP,qBACT/P,EAAOgQ,qBAEThQ,EAAOmI,KAAK,mBACPsD,GAAcjL,EAAOyM,SAA8B,UAAlBzM,EAAO+N,QAAwC,SAAlB/N,EAAO+N,QAAoB,CAC5F,MAAM0B,EAAsB,GAAGzP,EAAO0P,wCAChCC,EAA6BnQ,EAAOhO,GAAGqQ,UAAUqG,SAASuH,GAC5DpE,GAAgBrL,EAAO4P,wBACpBD,GAA4BnQ,EAAOhO,GAAGqQ,UAAUlJ,IAAI8W,GAChDE,GACTnQ,EAAOhO,GAAGqQ,UAAUsG,OAAOsH,EAE/B,CACF,EAmcEI,iBAjcF,SAA0B5P,GACxB,MAAMT,EAAS3K,KACTib,EAAe,GACf7E,EAAYzL,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAC1D,IACIjX,EADA6b,EAAY,EAEK,iBAAV9P,EACTT,EAAOwQ,cAAc/P,IACF,IAAVA,GACTT,EAAOwQ,cAAcxQ,EAAOQ,OAAOC,OAErC,MAAMgQ,EAAkB9Z,GAClB8U,EACKzL,EAAOsJ,OAAOtJ,EAAO0Q,oBAAoB/Z,IAE3CqJ,EAAOsJ,OAAO3S,GAGvB,GAAoC,SAAhCqJ,EAAOQ,OAAOmJ,eAA4B3J,EAAOQ,OAAOmJ,cAAgB,EAC1E,GAAI3J,EAAOQ,OAAOwM,gBACfhN,EAAO2Q,eAAiB,IAAI5e,QAAQyb,IACnC8C,EAAa1Z,KAAK4W,UAGpB,IAAK9Y,EAAI,EAAGA,EAAIC,KAAKkV,KAAK7J,EAAOQ,OAAOmJ,eAAgBjV,GAAK,EAAG,CAC9D,MAAMiC,EAAQqJ,EAAO8J,YAAcpV,EACnC,GAAIiC,EAAQqJ,EAAOsJ,OAAOlT,SAAWqV,EAAW,MAChD6E,EAAa1Z,KAAK6Z,EAAgB9Z,GACpC,MAGF2Z,EAAa1Z,KAAK6Z,EAAgBzQ,EAAO8J,cAI3C,IAAKpV,EAAI,EAAGA,EAAI4b,EAAala,OAAQ1B,GAAK,EACxC,QAA+B,IAApB4b,EAAa5b,GAAoB,CAC1C,MAAM+Q,EAAS6K,EAAa5b,GAAGkc,aAC/BL,EAAY9K,EAAS8K,EAAY9K,EAAS8K,CAC5C,EAIEA,GAA2B,IAAdA,KAAiBvQ,EAAOU,UAAUhG,MAAM+K,OAAS,GAAG8K,MACvE,EAsZEP,mBApZF,WACE,MAAMhQ,EAAS3K,KACTiU,EAAStJ,EAAOsJ,OAEhBuH,EAAc7Q,EAAOgJ,UAAYhJ,EAAO6K,eAAiB7K,EAAOU,UAAUoQ,WAAa9Q,EAAOU,UAAUqQ,UAAY,EAC1H,IAAK,IAAIrc,EAAI,EAAGA,EAAI4U,EAAOlT,OAAQ1B,GAAK,EACtC4U,EAAO5U,GAAGsc,mBAAqBhR,EAAO6K,eAAiBvB,EAAO5U,GAAGoc,WAAaxH,EAAO5U,GAAGqc,WAAaF,EAAc7Q,EAAOiR,uBAE9H,EA6YEC,qBApYF,SAA8B9Q,EAAY/K,MAAQA,KAAK+K,WAAa,GAClE,MAAMJ,EAAS3K,KACTmL,EAASR,EAAOQ,QAChB8I,OACJA,EACAgC,aAAcC,EAAGO,SACjBA,GACE9L,EACJ,GAAsB,IAAlBsJ,EAAOlT,OAAc,YACkB,IAAhCkT,EAAO,GAAG0H,mBAAmChR,EAAOgQ,qBAC/D,IAAImB,GAAgB/Q,EAChBmL,IAAK4F,EAAe/Q,GACxBJ,EAAOoR,qBAAuB,GAC9BpR,EAAO2Q,cAAgB,GACvB,IAAInE,EAAehM,EAAOgM,aACE,iBAAjBA,GAA6BA,EAAa1S,QAAQ,MAAQ,EACnE0S,EAAenO,WAAWmO,EAAapZ,QAAQ,IAAK,KAAO,IAAM4M,EAAOnH,KACvC,iBAAjB2T,IAChBA,EAAenO,WAAWmO,IAE5B,IAAK,IAAI9X,EAAI,EAAGA,EAAI4U,EAAOlT,OAAQ1B,GAAK,EAAG,CACzC,MAAM8Y,EAAQlE,EAAO5U,GACrB,IAAI2c,EAAc7D,EAAMwD,kBACpBxQ,EAAOyM,SAAWzM,EAAOwM,iBAC3BqE,GAAe/H,EAAO,GAAG0H,mBAE3B,MAAMM,GAAiBH,GAAgB3Q,EAAOwM,eAAiBhN,EAAOuR,eAAiB,GAAKF,IAAgB7D,EAAMW,gBAAkB3B,GAC9HgF,GAAyBL,EAAerF,EAAS,IAAMtL,EAAOwM,eAAiBhN,EAAOuR,eAAiB,GAAKF,IAAgB7D,EAAMW,gBAAkB3B,GACpJiF,IAAgBN,EAAeE,GAC/BK,EAAaD,EAAczR,EAAOgM,gBAAgBtX,GAClDid,EAAiBF,GAAe,GAAKA,GAAezR,EAAOnH,KAAOmH,EAAOgM,gBAAgBtX,GACzFkd,EAAYH,GAAe,GAAKA,EAAczR,EAAOnH,KAAO,GAAK6Y,EAAa,GAAKA,GAAc1R,EAAOnH,MAAQ4Y,GAAe,GAAKC,GAAc1R,EAAOnH,KAC3J+Y,IACF5R,EAAO2Q,cAAc/Z,KAAK4W,GAC1BxN,EAAOoR,qBAAqBxa,KAAKlC,IAEnC4T,EAAqBkF,EAAOoE,EAAWpR,EAAOqR,mBAC9CvJ,EAAqBkF,EAAOmE,EAAgBnR,EAAOsR,wBACnDtE,EAAMtM,SAAWqK,GAAO+F,EAAgBA,EACxC9D,EAAMuE,iBAAmBxG,GAAOiG,EAAwBA,CAC1D,CACF,EA4VEQ,eA1VF,SAAwB5R,GACtB,MAAMJ,EAAS3K,KACf,QAAyB,IAAd+K,EAA2B,CACpC,MAAM6R,EAAajS,EAAOsL,cAAe,EAAK,EAE9ClL,EAAYJ,GAAUA,EAAOI,WAAaJ,EAAOI,UAAY6R,GAAc,CAC7E,CACA,MAAMzR,EAASR,EAAOQ,OAChB0R,EAAiBlS,EAAOmS,eAAiBnS,EAAOuR,eACtD,IAAIrQ,SACFA,EAAQkR,YACRA,EAAWC,MACXA,EAAKC,aACLA,GACEtS,EACJ,MAAMuS,EAAeH,EACfI,EAASH,EACf,GAAuB,IAAnBH,EACFhR,EAAW,EACXkR,GAAc,EACdC,GAAQ,MACH,CACLnR,GAAYd,EAAYJ,EAAOuR,gBAAkBW,EACjD,MAAMO,EAAqB9d,KAAKyZ,IAAIhO,EAAYJ,EAAOuR,gBAAkB,EACnEmB,EAAe/d,KAAKyZ,IAAIhO,EAAYJ,EAAOmS,gBAAkB,EACnEC,EAAcK,GAAsBvR,GAAY,EAChDmR,EAAQK,GAAgBxR,GAAY,EAChCuR,IAAoBvR,EAAW,GAC/BwR,IAAcxR,EAAW,EAC/B,CACA,GAAIV,EAAO+J,KAAM,CACf,MAAMoI,EAAkB3S,EAAO0Q,oBAAoB,GAC7CkC,EAAiB5S,EAAO0Q,oBAAoB1Q,EAAOsJ,OAAOlT,OAAS,GACnEyc,EAAsB7S,EAAO+L,WAAW4G,GACxCG,EAAqB9S,EAAO+L,WAAW6G,GACvCG,EAAe/S,EAAO+L,WAAW/L,EAAO+L,WAAW3V,OAAS,GAC5D4c,EAAere,KAAKyZ,IAAIhO,GAE5BkS,EADEU,GAAgBH,GACFG,EAAeH,GAAuBE,GAEtCC,EAAeD,EAAeD,GAAsBC,EAElET,EAAe,IAAGA,GAAgB,EACxC,CACA9Y,OAAOwR,OAAOhL,EAAQ,CACpBkB,WACAoR,eACAF,cACAC,WAEE7R,EAAOuP,qBAAuBvP,EAAOwM,gBAAkBxM,EAAOyS,aAAYjT,EAAOkR,qBAAqB9Q,GACtGgS,IAAgBG,GAClBvS,EAAOmI,KAAK,yBAEVkK,IAAUG,GACZxS,EAAOmI,KAAK,oBAEVoK,IAAiBH,GAAeI,IAAWH,IAC7CrS,EAAOmI,KAAK,YAEdnI,EAAOmI,KAAK,WAAYjH,EAC1B,EA8REgS,oBArRF,WACE,MAAMlT,EAAS3K,MACTiU,OACJA,EAAM9I,OACNA,EAAM6K,SACNA,EAAQvB,YACRA,GACE9J,EACEyL,EAAYzL,EAAO0L,SAAWlL,EAAOkL,QAAQC,QAC7CuB,EAAclN,EAAO+J,MAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,EAC/DmJ,EAAmBvR,GAChBF,EAAgB2J,EAAU,IAAI7K,EAAOyI,aAAarH,kBAAyBA,KAAY,GAEhG,IAAIwR,EACAC,EACAC,EACJ,GAAI7H,EACF,GAAIjL,EAAO+J,KAAM,CACf,IAAIyE,EAAalF,EAAc9J,EAAO0L,QAAQmD,aAC1CG,EAAa,IAAGA,EAAahP,EAAO0L,QAAQpC,OAAOlT,OAAS4Y,GAC5DA,GAAchP,EAAO0L,QAAQpC,OAAOlT,SAAQ4Y,GAAchP,EAAO0L,QAAQpC,OAAOlT,QACpFgd,EAAcD,EAAiB,6BAA6BnE,MAC9D,MACEoE,EAAcD,EAAiB,6BAA6BrJ,YAG1DoD,GACFkG,EAAc9J,EAAOiK,KAAKhL,GAAWA,EAAQ6B,SAAWN,GACxDwJ,EAAYhK,EAAOiK,KAAKhL,GAAWA,EAAQ6B,SAAWN,EAAc,GACpEuJ,EAAY/J,EAAOiK,KAAKhL,GAAWA,EAAQ6B,SAAWN,EAAc,IAEpEsJ,EAAc9J,EAAOQ,GAGrBsJ,IACGlG,IAEHoG,ED3mBN,SAAwBthB,EAAI4P,GAC1B,MAAM4R,EAAU,GAChB,KAAOxhB,EAAGyhB,oBAAoB,CAC5B,MAAMC,EAAO1hB,EAAGyhB,mBACZ7R,EACE8R,EAAK3R,QAAQH,IAAW4R,EAAQ5c,KAAK8c,GACpCF,EAAQ5c,KAAK8c,GACpB1hB,EAAK0hB,CACP,CACA,OAAOF,CACT,CCimBkBG,CAAeP,EAAa,IAAI5S,EAAOyI,4BAA4B,GAC3EzI,EAAO+J,OAAS+I,IAClBA,EAAYhK,EAAO,IAIrB+J,ED5nBN,SAAwBrhB,EAAI4P,GAC1B,MAAMgS,EAAU,GAChB,KAAO5hB,EAAG6hB,wBAAwB,CAChC,MAAMC,EAAO9hB,EAAG6hB,uBACZjS,EACEkS,EAAK/R,QAAQH,IAAWgS,EAAQhd,KAAKkd,GACpCF,EAAQhd,KAAKkd,GACpB9hB,EAAK8hB,CACP,CACA,OAAOF,CACT,CCknBkBG,CAAeX,EAAa,IAAI5S,EAAOyI,4BAA4B,GAC3EzI,EAAO+J,MAAuB,KAAd8I,IAClBA,EAAY/J,EAAOA,EAAOlT,OAAS,MAIzCkT,EAAOvX,QAAQwW,IACbK,EAAmBL,EAASA,IAAY6K,EAAa5S,EAAOwT,kBAC5DpL,EAAmBL,EAASA,IAAY+K,EAAW9S,EAAOyT,gBAC1DrL,EAAmBL,EAASA,IAAY8K,EAAW7S,EAAO0T,kBAE5DlU,EAAOmU,mBACT,EA+NEC,kBAtIF,SAA2BC,GACzB,MAAMrU,EAAS3K,KACT+K,EAAYJ,EAAOsL,aAAetL,EAAOI,WAAaJ,EAAOI,WAC7D0L,SACJA,EAAQtL,OACRA,EACAsJ,YAAawK,EACb9J,UAAW+J,EACX9E,UAAW+E,GACTxU,EACJ,IACIyP,EADA3F,EAAcuK,EAElB,MAAMI,EAAsBC,IAC1B,IAAIlK,EAAYkK,EAAS1U,EAAO0L,QAAQmD,aAOxC,OANIrE,EAAY,IACdA,EAAYxK,EAAO0L,QAAQpC,OAAOlT,OAASoU,GAEzCA,GAAaxK,EAAO0L,QAAQpC,OAAOlT,SACrCoU,GAAaxK,EAAO0L,QAAQpC,OAAOlT,QAE9BoU,GAKT,QAH2B,IAAhBV,IACTA,EA/CJ,SAAmC9J,GACjC,MAAM+L,WACJA,EAAUvL,OACVA,GACER,EACEI,EAAYJ,EAAOsL,aAAetL,EAAOI,WAAaJ,EAAOI,UACnE,IAAI0J,EACJ,IAAK,IAAIpV,EAAI,EAAGA,EAAIqX,EAAW3V,OAAQ1B,GAAK,OACT,IAAtBqX,EAAWrX,EAAI,GACpB0L,GAAa2L,EAAWrX,IAAM0L,EAAY2L,EAAWrX,EAAI,IAAMqX,EAAWrX,EAAI,GAAKqX,EAAWrX,IAAM,EACtGoV,EAAcpV,EACL0L,GAAa2L,EAAWrX,IAAM0L,EAAY2L,EAAWrX,EAAI,KAClEoV,EAAcpV,EAAI,GAEX0L,GAAa2L,EAAWrX,KACjCoV,EAAcpV,GAOlB,OAHI8L,EAAOmU,sBACL7K,EAAc,QAA4B,IAAhBA,KAA6BA,EAAc,GAEpEA,CACT,CAwBkB8K,CAA0B5U,IAEtC8L,EAAShS,QAAQsG,IAAc,EACjCqP,EAAY3D,EAAShS,QAAQsG,OACxB,CACL,MAAMyU,EAAOlgB,KAAKkD,IAAI2I,EAAO8N,mBAAoBxE,GACjD2F,EAAYoF,EAAOlgB,KAAKC,OAAOkV,EAAc+K,GAAQrU,EAAO6N,eAC9D,CAEA,GADIoB,GAAa3D,EAAS1V,SAAQqZ,EAAY3D,EAAS1V,OAAS,GAC5D0T,IAAgBwK,IAAkBtU,EAAOQ,OAAO+J,KAKlD,YAJIkF,IAAc+E,IAChBxU,EAAOyP,UAAYA,EACnBzP,EAAOmI,KAAK,qBAIhB,GAAI2B,IAAgBwK,GAAiBtU,EAAOQ,OAAO+J,MAAQvK,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAEjG,YADA3L,EAAOwK,UAAYiK,EAAoB3K,IAGzC,MAAMoD,EAAclN,EAAO+J,MAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,EAGrE,IAAIQ,EACJ,GAAIxK,EAAO0L,SAAWlL,EAAOkL,QAAQC,SAAWnL,EAAO+J,KACrDC,EAAYiK,EAAoB3K,QAC3B,GAAIoD,EAAa,CACtB,MAAM4H,EAAqB9U,EAAOsJ,OAAOiK,KAAKhL,GAAWA,EAAQ6B,SAAWN,GAC5E,IAAIiL,EAAmBhK,SAAS+J,EAAmBE,aAAa,2BAA4B,IACxF1c,OAAO7D,MAAMsgB,KACfA,EAAmBpgB,KAAKwM,IAAInB,EAAOsJ,OAAOxP,QAAQgb,GAAqB,IAEzEtK,EAAY7V,KAAKC,MAAMmgB,EAAmBvU,EAAOuJ,KAAKC,KACxD,MAAO,GAAIhK,EAAOsJ,OAAOQ,GAAc,CACrC,MAAMkF,EAAahP,EAAOsJ,OAAOQ,GAAakL,aAAa,2BAEzDxK,EADEwE,EACUjE,SAASiE,EAAY,IAErBlF,CAEhB,MACEU,EAAYV,EAEdtQ,OAAOwR,OAAOhL,EAAQ,CACpBwU,oBACA/E,YACA8E,oBACA/J,YACA8J,gBACAxK,gBAEE9J,EAAOiV,aACTzL,EAAQxJ,GAEVA,EAAOmI,KAAK,qBACZnI,EAAOmI,KAAK,oBACRnI,EAAOiV,aAAejV,EAAOQ,OAAO0U,sBAClCX,IAAsB/J,GACxBxK,EAAOmI,KAAK,mBAEdnI,EAAOmI,KAAK,eAEhB,EAkDEgN,mBAhDF,SAA4BnjB,EAAIoD,GAC9B,MAAM4K,EAAS3K,KACTmL,EAASR,EAAOQ,OACtB,IAAIgN,EAAQxb,EAAG+W,QAAQ,IAAIvI,EAAOyI,6BAC7BuE,GAASxN,EAAOgJ,WAAa5T,GAAQA,EAAKgB,OAAS,GAAKhB,EAAKmR,SAASvU,IACzE,IAAIoD,EAAKsJ,MAAMtJ,EAAK0E,QAAQ9H,GAAM,EAAGoD,EAAKgB,SAASrE,QAAQqjB,KACpD5H,GAAS4H,EAAOrT,SAAWqT,EAAOrT,QAAQ,IAAIvB,EAAOyI,8BACxDuE,EAAQ4H,KAId,IACIpG,EADAqG,GAAa,EAEjB,GAAI7H,EACF,IAAK,IAAI9Y,EAAI,EAAGA,EAAIsL,EAAOsJ,OAAOlT,OAAQ1B,GAAK,EAC7C,GAAIsL,EAAOsJ,OAAO5U,KAAO8Y,EAAO,CAC9B6H,GAAa,EACbrG,EAAata,EACb,KACF,CAGJ,IAAI8Y,IAAS6H,EAUX,OAFArV,EAAOsV,kBAAe9V,OACtBQ,EAAOuV,kBAAe/V,GARtBQ,EAAOsV,aAAe9H,EAClBxN,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAC1C3L,EAAOuV,aAAexK,SAASyC,EAAMwH,aAAa,2BAA4B,IAE9EhV,EAAOuV,aAAevG,EAOtBxO,EAAOgV,0BAA+ChW,IAAxBQ,EAAOuV,cAA8BvV,EAAOuV,eAAiBvV,EAAO8J,aACpG9J,EAAOwV,qBAEX,GAgKA,IAAIpV,EAAY,CACdlD,aAnJF,SAA4BC,GAAO9H,KAAKwV,eAAiB,IAAM,MAC7D,MACMrK,OACJA,EACA8K,aAAcC,EAAGnL,UACjBA,EAASM,UACTA,GALarL,KAOf,GAAImL,EAAOiV,iBACT,OAAOlK,GAAOnL,EAAYA,EAE5B,GAAII,EAAOyM,QACT,OAAO7M,EAET,IAAIsV,EAAmBxY,EAAawD,EAAWvD,GAG/C,OAFAuY,GAdergB,KAcY4b,wBACvB1F,IAAKmK,GAAoBA,GACtBA,GAAoB,CAC7B,EAkIEC,aAhIF,SAAsBvV,EAAWwV,GAC/B,MAAM5V,EAAS3K,MAEbiW,aAAcC,EAAG/K,OACjBA,EAAME,UACNA,EAASQ,SACTA,GACElB,EACJ,IA0BI6V,EA1BAC,EAAI,EACJC,EAAI,EAEJ/V,EAAO6K,eACTiL,EAAIvK,GAAOnL,EAAYA,EAEvB2V,EAAI3V,EAEFI,EAAOmN,eACTmI,EAAInhB,KAAKC,MAAMkhB,GACfC,EAAIphB,KAAKC,MAAMmhB,IAEjB/V,EAAOgW,kBAAoBhW,EAAOI,UAClCJ,EAAOI,UAAYJ,EAAO6K,eAAiBiL,EAAIC,EAC3CvV,EAAOyM,QACTvM,EAAUV,EAAO6K,eAAiB,aAAe,aAAe7K,EAAO6K,gBAAkBiL,GAAKC,EACpFvV,EAAOiV,mBACbzV,EAAO6K,eACTiL,GAAK9V,EAAOiR,wBAEZ8E,GAAK/V,EAAOiR,wBAEdvQ,EAAUhG,MAAMgD,UAAY,eAAeoY,QAAQC,aAKrD,MAAM7D,EAAiBlS,EAAOmS,eAAiBnS,EAAOuR,eAEpDsE,EADqB,IAAnB3D,EACY,GAEC9R,EAAYJ,EAAOuR,gBAAkBW,EAElD2D,IAAgB3U,GAClBlB,EAAOgS,eAAe5R,GAExBJ,EAAOmI,KAAK,eAAgBnI,EAAOI,UAAWwV,EAChD,EAoFErE,aAlFF,WACE,OAAQlc,KAAKyW,SAAS,EACxB,EAiFEqG,aA/EF,WACE,OAAQ9c,KAAKyW,SAASzW,KAAKyW,SAAS1V,OAAS,EAC/C,EA8EE6f,YA5EF,SAAqB7V,EAAY,EAAGK,EAAQpL,KAAKmL,OAAOC,MAAOyV,GAAe,EAAMC,GAAkB,EAAMC,GAC1G,MAAMpW,EAAS3K,MACTmL,OACJA,EAAME,UACNA,GACEV,EACJ,GAAIA,EAAOqW,WAAa7V,EAAO8V,+BAC7B,OAAO,EAET,MAAM/E,EAAevR,EAAOuR,eACtBY,EAAenS,EAAOmS,eAC5B,IAAIoE,EAKJ,GAJiDA,EAA7CJ,GAAmB/V,EAAYmR,EAA6BA,EAAsB4E,GAAmB/V,EAAY+R,EAA6BA,EAAiC/R,EAGnLJ,EAAOgS,eAAeuE,GAClB/V,EAAOyM,QAAS,CAClB,MAAMuJ,EAAMxW,EAAO6K,eACnB,GAAc,IAAVpK,EACFC,EAAU8V,EAAM,aAAe,cAAgBD,MAC1C,CACL,IAAKvW,EAAOsE,QAAQI,aAMlB,OALA3E,EAAqB,CACnBC,SACAC,gBAAiBsW,EACjBrW,KAAMsW,EAAM,OAAS,SAEhB,EAET9V,EAAUc,SAAS,CACjB,CAACgV,EAAM,OAAS,QAASD,EACzBE,SAAU,UAEd,CACA,OAAO,CACT,CAiCA,OAhCc,IAAVhW,GACFT,EAAOwQ,cAAc,GACrBxQ,EAAO2V,aAAaY,GAChBL,IACFlW,EAAOmI,KAAK,wBAAyB1H,EAAO2V,GAC5CpW,EAAOmI,KAAK,oBAGdnI,EAAOwQ,cAAc/P,GACrBT,EAAO2V,aAAaY,GAChBL,IACFlW,EAAOmI,KAAK,wBAAyB1H,EAAO2V,GAC5CpW,EAAOmI,KAAK,oBAETnI,EAAOqW,YACVrW,EAAOqW,WAAY,EACdrW,EAAO0W,oCACV1W,EAAO0W,kCAAoC,SAAuBljB,GAC3DwM,IAAUA,EAAOuH,WAClB/T,EAAE4E,SAAW/C,OACjB2K,EAAOU,UAAUzG,oBAAoB,gBAAiB+F,EAAO0W,mCAC7D1W,EAAO0W,kCAAoC,YACpC1W,EAAO0W,kCACd1W,EAAOqW,WAAY,EACfH,GACFlW,EAAOmI,KAAK,iBAEhB,GAEFnI,EAAOU,UAAUhO,iBAAiB,gBAAiBsN,EAAO0W,sCAGvD,CACT,GAmBA,SAASC,GAAe3W,OACtBA,EAAMkW,aACNA,EAAYU,UACZA,EAASC,KACTA,IAEA,MAAM/M,YACJA,EAAWwK,cACXA,GACEtU,EACJ,IAAIa,EAAM+V,EACL/V,IAC8BA,EAA7BiJ,EAAcwK,EAAqB,OAAgBxK,EAAcwK,EAAqB,OAAkB,SAE9GtU,EAAOmI,KAAK,aAAa0O,KACrBX,GAAwB,UAARrV,EAClBb,EAAOmI,KAAK,uBAAuB0O,KAC1BX,GAAgBpM,IAAgBwK,IACzCtU,EAAOmI,KAAK,wBAAwB0O,KACxB,SAARhW,EACFb,EAAOmI,KAAK,sBAAsB0O,KAElC7W,EAAOmI,KAAK,sBAAsB0O,KAGxC,CAybA,IAAIrJ,EAAQ,CACVsJ,QAjZF,SAAiBngB,EAAQ,EAAG8J,EAAOyV,GAAe,EAAME,EAAUW,GAC3C,iBAAVpgB,IACTA,EAAQoU,SAASpU,EAAO,KAE1B,MAAMqJ,EAAS3K,KACf,IAAI2Z,EAAarY,EACbqY,EAAa,IAAGA,EAAa,GACjC,MAAMxO,OACJA,EAAMsL,SACNA,EAAQC,WACRA,EAAUuI,cACVA,EAAaxK,YACbA,EACAwB,aAAcC,EAAG7K,UACjBA,EAASiL,QACTA,GACE3L,EACJ,IAAK2L,IAAYyK,IAAaW,GAAW/W,EAAOuH,WAAavH,EAAOqW,WAAa7V,EAAO8V,+BACtF,OAAO,OAEY,IAAV7V,IACTA,EAAQT,EAAOQ,OAAOC,OAExB,MAAMoU,EAAOlgB,KAAKkD,IAAImI,EAAOQ,OAAO8N,mBAAoBU,GACxD,IAAIS,EAAYoF,EAAOlgB,KAAKC,OAAOoa,EAAa6F,GAAQ7U,EAAOQ,OAAO6N,gBAClEoB,GAAa3D,EAAS1V,SAAQqZ,EAAY3D,EAAS1V,OAAS,GAChE,MAAMgK,GAAa0L,EAAS2D,GAE5B,GAAIjP,EAAOmU,oBACT,IAAK,IAAIjgB,EAAI,EAAGA,EAAIqX,EAAW3V,OAAQ1B,GAAK,EAAG,CAC7C,MAAMsiB,GAAuBriB,KAAKC,MAAkB,IAAZwL,GAClC6W,EAAiBtiB,KAAKC,MAAsB,IAAhBmX,EAAWrX,IACvCwiB,EAAqBviB,KAAKC,MAA0B,IAApBmX,EAAWrX,EAAI,SACpB,IAAtBqX,EAAWrX,EAAI,GACpBsiB,GAAuBC,GAAkBD,EAAsBE,GAAsBA,EAAqBD,GAAkB,EAC9HjI,EAAata,EACJsiB,GAAuBC,GAAkBD,EAAsBE,IACxElI,EAAata,EAAI,GAEVsiB,GAAuBC,IAChCjI,EAAata,EAEjB,CAGF,GAAIsL,EAAOiV,aAAejG,IAAelF,EAAa,CACpD,IAAK9J,EAAOmX,iBAAmB5L,EAAMnL,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOuR,eAAiBnR,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOuR,gBAC1J,OAAO,EAET,IAAKvR,EAAOoX,gBAAkBhX,EAAYJ,EAAOI,WAAaA,EAAYJ,EAAOmS,iBAC1ErI,GAAe,KAAOkF,EACzB,OAAO,CAGb,CAOA,IAAI4H,EANA5H,KAAgBsF,GAAiB,IAAM4B,GACzClW,EAAOmI,KAAK,0BAIdnI,EAAOgS,eAAe5R,GAEQwW,EAA1B5H,EAAalF,EAAyB,OAAgBkF,EAAalF,EAAyB,OAAwB,QAGxH,MAAM2B,EAAYzL,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAG1D,KAFyBF,GAAasL,KAEZxL,IAAQnL,IAAcJ,EAAOI,YAAcmL,GAAOnL,IAAcJ,EAAOI,WAc/F,OAbAJ,EAAOoU,kBAAkBpF,GAErBxO,EAAOyS,YACTjT,EAAOqQ,mBAETrQ,EAAOkT,sBACe,UAAlB1S,EAAO+N,QACTvO,EAAO2V,aAAavV,GAEJ,UAAdwW,IACF5W,EAAOqX,gBAAgBnB,EAAcU,GACrC5W,EAAOsX,cAAcpB,EAAcU,KAE9B,EAET,GAAIpW,EAAOyM,QAAS,CAClB,MAAMuJ,EAAMxW,EAAO6K,eACb0M,EAAIhM,EAAMnL,GAAaA,EAC7B,GAAc,IAAVK,EACEgL,IACFzL,EAAOU,UAAUhG,MAAMiG,eAAiB,OACxCX,EAAOwX,mBAAoB,GAEzB/L,IAAczL,EAAOyX,2BAA6BzX,EAAOQ,OAAOkX,aAAe,GACjF1X,EAAOyX,2BAA4B,EACnC/a,sBAAsB,KACpBgE,EAAU8V,EAAM,aAAe,aAAee,KAGhD7W,EAAU8V,EAAM,aAAe,aAAee,EAE5C9L,GACF/O,sBAAsB,KACpBsD,EAAOU,UAAUhG,MAAMiG,eAAiB,GACxCX,EAAOwX,mBAAoB,QAG1B,CACL,IAAKxX,EAAOsE,QAAQI,aAMlB,OALA3E,EAAqB,CACnBC,SACAC,eAAgBsX,EAChBrX,KAAMsW,EAAM,OAAS,SAEhB,EAET9V,EAAUc,SAAS,CACjB,CAACgV,EAAM,OAAS,OAAQe,EACxBd,SAAU,UAEd,CACA,OAAO,CACT,CACA,MACMrQ,EADUF,IACSE,SA0BzB,OAzBIqF,IAAcsL,GAAW3Q,GAAYpG,EAAOgJ,WAC9ChJ,EAAO0L,QAAQjB,QAAO,GAAO,EAAOuE,GAEtChP,EAAOwQ,cAAc/P,GACrBT,EAAO2V,aAAavV,GACpBJ,EAAOoU,kBAAkBpF,GACzBhP,EAAOkT,sBACPlT,EAAOmI,KAAK,wBAAyB1H,EAAO2V,GAC5CpW,EAAOqX,gBAAgBnB,EAAcU,GACvB,IAAVnW,EACFT,EAAOsX,cAAcpB,EAAcU,GACzB5W,EAAOqW,YACjBrW,EAAOqW,WAAY,EACdrW,EAAO2X,gCACV3X,EAAO2X,8BAAgC,SAAuBnkB,GACvDwM,IAAUA,EAAOuH,WAClB/T,EAAE4E,SAAW/C,OACjB2K,EAAOU,UAAUzG,oBAAoB,gBAAiB+F,EAAO2X,+BAC7D3X,EAAO2X,8BAAgC,YAChC3X,EAAO2X,8BACd3X,EAAOsX,cAAcpB,EAAcU,GACrC,GAEF5W,EAAOU,UAAUhO,iBAAiB,gBAAiBsN,EAAO2X,iCAErD,CACT,EA4PEC,YA1PF,SAAqBjhB,EAAQ,EAAG8J,EAAOyV,GAAe,EAAME,GAC1D,GAAqB,iBAAVzf,EAAoB,CAE7BA,EADsBoU,SAASpU,EAAO,GAExC,CACA,MAAMqJ,EAAS3K,KACf,GAAI2K,EAAOuH,UAAW,YACD,IAAV9G,IACTA,EAAQT,EAAOQ,OAAOC,OAExB,MAAMyM,EAAclN,EAAO+J,MAAQ/J,EAAOQ,OAAOuJ,MAAQ/J,EAAOQ,OAAOuJ,KAAKC,KAAO,EACnF,IAAI6N,EAAWlhB,EACf,GAAIqJ,EAAOQ,OAAO+J,KAChB,GAAIvK,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAE1CkM,GAAsB7X,EAAO0L,QAAQmD,iBAChC,CACL,IAAIiJ,EACJ,GAAI5K,EAAa,CACf,MAAM8B,EAAa6I,EAAW7X,EAAOQ,OAAOuJ,KAAKC,KACjD8N,EAAmB9X,EAAOsJ,OAAOiK,KAAKhL,GAA6D,EAAlDA,EAAQyM,aAAa,6BAAmChG,GAAY5E,MACvH,MACE0N,EAAmB9X,EAAO0Q,oBAAoBmH,GAEhD,MAAME,EAAO7K,EAAcvY,KAAKkV,KAAK7J,EAAOsJ,OAAOlT,OAAS4J,EAAOQ,OAAOuJ,KAAKC,MAAQhK,EAAOsJ,OAAOlT,QAC/F4W,eACJA,EAAcd,mBACdA,EAAkBE,kBAClBA,GACEpM,EAAOQ,OACLwX,EAAiBhL,KAAoBd,KAAwBE,EACnE,IAAIzC,EAAgB3J,EAAOQ,OAAOmJ,cACZ,SAAlBA,EACFA,EAAgB3J,EAAO4J,wBAEvBD,EAAgBhV,KAAKkV,KAAKxL,WAAW2B,EAAOQ,OAAOmJ,cAAe,KAC9DqO,GAAkBrO,EAAgB,GAAM,IAC1CA,GAAgC,IAGpC,IAAIsO,EAAcF,EAAOD,EAAmBnO,EAO5C,GANIqO,IACFC,EAAcA,GAAeH,EAAmBnjB,KAAKkV,KAAKF,EAAgB,IAExEyM,GAAY4B,GAAkD,SAAhChY,EAAOQ,OAAOmJ,gBAA6BuD,IAC3E+K,GAAc,GAEZA,EAAa,CACf,MAAMrB,EAAYoB,EAAiBF,EAAmB9X,EAAO8J,YAAc,OAAS,OAASgO,EAAmB9X,EAAO8J,YAAc,EAAI9J,EAAOQ,OAAOmJ,cAAgB,OAAS,OAChL3J,EAAOkY,QAAQ,CACbtB,YACAE,SAAS,EACT/B,iBAAgC,SAAd6B,EAAuBkB,EAAmB,EAAIA,EAAmBC,EAAO,EAC1FI,eAA8B,SAAdvB,EAAuB5W,EAAOwK,eAAYhL,GAE9D,CACA,GAAI0N,EAAa,CACf,MAAM8B,EAAa6I,EAAW7X,EAAOQ,OAAOuJ,KAAKC,KACjD6N,EAAW7X,EAAOsJ,OAAOiK,KAAKhL,GAA6D,EAAlDA,EAAQyM,aAAa,6BAAmChG,GAAY5E,MAC/G,MACEyN,EAAW7X,EAAO0Q,oBAAoBmH,EAE1C,CAKF,OAHAnb,sBAAsB,KACpBsD,EAAO8W,QAAQe,EAAUpX,EAAOyV,EAAcE,KAEzCpW,CACT,EAuLEoY,UApLF,SAAmB3X,EAAOyV,GAAe,EAAME,GAC7C,MAAMpW,EAAS3K,MACTsW,QACJA,EAAOnL,OACPA,EAAM6V,UACNA,GACErW,EACJ,IAAK2L,GAAW3L,EAAOuH,UAAW,OAAOvH,OACpB,IAAVS,IACTA,EAAQT,EAAOQ,OAAOC,OAExB,IAAI4X,EAAW7X,EAAO6N,eACO,SAAzB7N,EAAOmJ,eAAsD,IAA1BnJ,EAAO6N,gBAAwB7N,EAAO8X,qBAC3ED,EAAW1jB,KAAKwM,IAAInB,EAAO4J,qBAAqB,WAAW,GAAO,IAEpE,MAAM2O,EAAYvY,EAAO8J,YAActJ,EAAO8N,mBAAqB,EAAI+J,EACjE5M,EAAYzL,EAAO0L,SAAWlL,EAAOkL,QAAQC,QACnD,GAAInL,EAAO+J,KAAM,CACf,GAAI8L,IAAc5K,GAAajL,EAAOgY,oBAAqB,OAAO,EAMlE,GALAxY,EAAOkY,QAAQ,CACbtB,UAAW,SAGb5W,EAAOyY,YAAczY,EAAOU,UAAUmC,WAClC7C,EAAO8J,cAAgB9J,EAAOsJ,OAAOlT,OAAS,GAAKoK,EAAOyM,QAI5D,OAHAvQ,sBAAsB,KACpBsD,EAAO8W,QAAQ9W,EAAO8J,YAAcyO,EAAW9X,EAAOyV,EAAcE,MAE/D,CAEX,CACA,OAAI5V,EAAO8J,QAAUtK,EAAOqS,MACnBrS,EAAO8W,QAAQ,EAAGrW,EAAOyV,EAAcE,GAEzCpW,EAAO8W,QAAQ9W,EAAO8J,YAAcyO,EAAW9X,EAAOyV,EAAcE,EAC7E,EAkJEsC,UA/IF,SAAmBjY,EAAOyV,GAAe,EAAME,GAC7C,MAAMpW,EAAS3K,MACTmL,OACJA,EAAMsL,SACNA,EAAQC,WACRA,EAAUT,aACVA,EAAYK,QACZA,EAAO0K,UACPA,GACErW,EACJ,IAAK2L,GAAW3L,EAAOuH,UAAW,OAAOvH,OACpB,IAAVS,IACTA,EAAQT,EAAOQ,OAAOC,OAExB,MAAMgL,EAAYzL,EAAO0L,SAAWlL,EAAOkL,QAAQC,QACnD,GAAInL,EAAO+J,KAAM,CACf,GAAI8L,IAAc5K,GAAajL,EAAOgY,oBAAqB,OAAO,EAClExY,EAAOkY,QAAQ,CACbtB,UAAW,SAGb5W,EAAOyY,YAAczY,EAAOU,UAAUmC,UACxC,CAEA,SAAS8V,EAAUC,GACjB,OAAIA,EAAM,GAAWjkB,KAAKC,MAAMD,KAAKyZ,IAAIwK,IAClCjkB,KAAKC,MAAMgkB,EACpB,CACA,MAAM5B,EAAsB2B,EALVrN,EAAetL,EAAOI,WAAaJ,EAAOI,WAMtDyY,EAAqB/M,EAASpU,IAAIkhB,GAAOD,EAAUC,IACnDE,EAAatY,EAAOuY,UAAYvY,EAAOuY,SAASpN,QACtD,IAAIqN,EAAWlN,EAAS+M,EAAmB/e,QAAQkd,GAAuB,GAC1E,QAAwB,IAAbgC,IAA6BxY,EAAOyM,SAAW6L,GAAa,CACrE,IAAIG,EACJnN,EAAS/Z,QAAQ,CAACsd,EAAMI,KAClBuH,GAAuB3H,IAEzB4J,EAAgBxJ,UAGS,IAAlBwJ,IACTD,EAAWF,EAAahN,EAASmN,GAAiBnN,EAASmN,EAAgB,EAAIA,EAAgB,EAAIA,GAEvG,CACA,IAAIC,EAAY,EAShB,QARwB,IAAbF,IACTE,EAAYnN,EAAWjS,QAAQkf,GAC3BE,EAAY,IAAGA,EAAYlZ,EAAO8J,YAAc,GACvB,SAAzBtJ,EAAOmJ,eAAsD,IAA1BnJ,EAAO6N,gBAAwB7N,EAAO8X,qBAC3EY,EAAYA,EAAYlZ,EAAO4J,qBAAqB,YAAY,GAAQ,EACxEsP,EAAYvkB,KAAKwM,IAAI+X,EAAW,KAGhC1Y,EAAO8J,QAAUtK,EAAOoS,YAAa,CACvC,MAAM+G,EAAYnZ,EAAOQ,OAAOkL,SAAW1L,EAAOQ,OAAOkL,QAAQC,SAAW3L,EAAO0L,QAAU1L,EAAO0L,QAAQpC,OAAOlT,OAAS,EAAI4J,EAAOsJ,OAAOlT,OAAS,EACvJ,OAAO4J,EAAO8W,QAAQqC,EAAW1Y,EAAOyV,EAAcE,EACxD,CAAO,OAAI5V,EAAO+J,MAA+B,IAAvBvK,EAAO8J,aAAqBtJ,EAAOyM,SAC3DvQ,sBAAsB,KACpBsD,EAAO8W,QAAQoC,EAAWzY,EAAOyV,EAAcE,MAE1C,GAEFpW,EAAO8W,QAAQoC,EAAWzY,EAAOyV,EAAcE,EACxD,EAiFEgD,WA9EF,SAAoB3Y,EAAOyV,GAAe,EAAME,GAC9C,MAAMpW,EAAS3K,KACf,IAAI2K,EAAOuH,UAIX,YAHqB,IAAV9G,IACTA,EAAQT,EAAOQ,OAAOC,OAEjBT,EAAO8W,QAAQ9W,EAAO8J,YAAarJ,EAAOyV,EAAcE,EACjE,EAwEEiD,eArEF,SAAwB5Y,EAAOyV,GAAe,EAAME,EAAUkD,EAAY,IACxE,MAAMtZ,EAAS3K,KACf,GAAI2K,EAAOuH,UAAW,YACD,IAAV9G,IACTA,EAAQT,EAAOQ,OAAOC,OAExB,IAAI9J,EAAQqJ,EAAO8J,YACnB,MAAM+K,EAAOlgB,KAAKkD,IAAImI,EAAOQ,OAAO8N,mBAAoB3X,GAClD8Y,EAAYoF,EAAOlgB,KAAKC,OAAO+B,EAAQke,GAAQ7U,EAAOQ,OAAO6N,gBAC7DjO,EAAYJ,EAAOsL,aAAetL,EAAOI,WAAaJ,EAAOI,UACnE,GAAIA,GAAaJ,EAAO8L,SAAS2D,GAAY,CAG3C,MAAM8J,EAAcvZ,EAAO8L,SAAS2D,GAEhCrP,EAAYmZ,GADCvZ,EAAO8L,SAAS2D,EAAY,GACH8J,GAAeD,IACvD3iB,GAASqJ,EAAOQ,OAAO6N,eAE3B,KAAO,CAGL,MAAM2K,EAAWhZ,EAAO8L,SAAS2D,EAAY,GAEzCrP,EAAY4Y,IADIhZ,EAAO8L,SAAS2D,GACOuJ,GAAYM,IACrD3iB,GAASqJ,EAAOQ,OAAO6N,eAE3B,CAGA,OAFA1X,EAAQhC,KAAKwM,IAAIxK,EAAO,GACxBA,EAAQhC,KAAKkD,IAAIlB,EAAOqJ,EAAO+L,WAAW3V,OAAS,GAC5C4J,EAAO8W,QAAQngB,EAAO8J,EAAOyV,EAAcE,EACpD,EAwCEZ,oBAtCF,WACE,MAAMxV,EAAS3K,KACf,GAAI2K,EAAOuH,UAAW,OACtB,MAAM/G,OACJA,EAAM6K,SACNA,GACErL,EACE2J,EAAyC,SAAzBnJ,EAAOmJ,cAA2B3J,EAAO4J,uBAAyBpJ,EAAOmJ,cAC/F,IACIa,EADAgP,EAAexZ,EAAOyZ,sBAAsBzZ,EAAOuV,cAEvD,MAAMmE,EAAgB1Z,EAAOgJ,UAAY,eAAiB,IAAIxI,EAAOyI,aAC/D0Q,EAAS3Z,EAAO+J,MAAQ/J,EAAOQ,OAAOuJ,MAAQ/J,EAAOQ,OAAOuJ,KAAKC,KAAO,EAC9E,GAAIxJ,EAAO+J,KAAM,CACf,GAAIvK,EAAOqW,UAAW,OACtB7L,EAAYO,SAAS/K,EAAOsV,aAAaN,aAAa,2BAA4B,IAC9ExU,EAAOwM,eACThN,EAAO4X,YAAYpN,GACVgP,GAAgBG,GAAU3Z,EAAOsJ,OAAOlT,OAASuT,GAAiB,GAAK3J,EAAOQ,OAAOuJ,KAAKC,KAAO,GAAKhK,EAAOsJ,OAAOlT,OAASuT,IACtI3J,EAAOkY,UACPsB,EAAexZ,EAAO4Z,cAAclY,EAAgB2J,EAAU,GAAGqO,8BAA0ClP,OAAe,IAC1HxN,EAAS,KACPgD,EAAO8W,QAAQ0C,MAGjBxZ,EAAO8W,QAAQ0C,EAEnB,MACExZ,EAAO8W,QAAQ0C,EAEnB,GAmUA,IAAIjP,EAAO,CACTsP,WAxTF,SAAoB1B,EAAgBpB,GAClC,MAAM/W,EAAS3K,MACTmL,OACJA,EAAM6K,SACNA,GACErL,EACJ,IAAKQ,EAAO+J,MAAQvK,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAAS,OACrE,MAAMyB,EAAa,KACF1L,EAAgB2J,EAAU,IAAI7K,EAAOyI,4BAC7ClX,QAAQ,CAACC,EAAI2E,KAClB3E,EAAG2I,aAAa,0BAA2BhE,MAazCuW,EAAclN,EAAO+J,MAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,EACjExJ,EAAOsZ,qBAAuBtZ,EAAO6N,eAAiB,GAAKnB,IAXtC,MACvB,MAAM5D,EAAS5H,EAAgB2J,EAAU,IAAI7K,EAAOuZ,mBACpDzQ,EAAOvX,QAAQC,IACbA,EAAG2W,WAEDW,EAAOlT,OAAS,IAClB4J,EAAOga,eACPha,EAAOiL,iBAKTgP,GAEF,MAAM5L,EAAiB7N,EAAO6N,gBAAkBnB,EAAc1M,EAAOuJ,KAAKC,KAAO,GAC3EkQ,EAAkBla,EAAOsJ,OAAOlT,OAASiY,IAAmB,EAC5D8L,EAAiBjN,GAAelN,EAAOsJ,OAAOlT,OAASoK,EAAOuJ,KAAKC,OAAS,EAC5EoQ,EAAiBC,IACrB,IAAK,IAAI3lB,EAAI,EAAGA,EAAI2lB,EAAgB3lB,GAAK,EAAG,CAC1C,MAAM6T,EAAUvI,EAAOgJ,UAAYzO,EAAc,eAAgB,CAACiG,EAAOuZ,kBAAoBxf,EAAc,MAAO,CAACiG,EAAOyI,WAAYzI,EAAOuZ,kBAC7I/Z,EAAOqL,SAASiP,OAAO/R,EACzB,GAEF,GAAI2R,EAAiB,CACnB,GAAI1Z,EAAOsZ,mBAAoB,CAE7BM,EADoB/L,EAAiBrO,EAAOsJ,OAAOlT,OAASiY,GAE5DrO,EAAOga,eACPha,EAAOiL,cACT,MACEjJ,EAAY,mLAEdoL,GACF,MAAO,GAAI+M,EAAgB,CACzB,GAAI3Z,EAAOsZ,mBAAoB,CAE7BM,EADoB5Z,EAAOuJ,KAAKC,KAAOhK,EAAOsJ,OAAOlT,OAASoK,EAAOuJ,KAAKC,MAE1EhK,EAAOga,eACPha,EAAOiL,cACT,MACEjJ,EAAY,8KAEdoL,GACF,MACEA,IAEF,MAAM4K,EAAiBxX,EAAOwM,kBAAoBxM,EAAO0L,sBAAwB1L,EAAO4L,kBACxFpM,EAAOkY,QAAQ,CACbC,iBACAvB,UAAWoB,OAAiBxY,EAAY,OACxCuX,WAEJ,EAwPEmB,QAtPF,UAAiBC,eACfA,EAAcrB,QACdA,GAAU,EAAIF,UACdA,EAASjB,aACTA,EAAYZ,iBACZA,EAAgBgC,QAChBA,EAAOnB,aACPA,EAAY2E,aACZA,GACE,IACF,MAAMva,EAAS3K,KACf,IAAK2K,EAAOQ,OAAO+J,KAAM,OACzBvK,EAAOmI,KAAK,iBACZ,MAAMmB,OACJA,EAAM8N,eACNA,EAAcD,eACdA,EAAc9L,SACdA,EAAQ7K,OACRA,GACER,GACEgN,eACJA,EAAcd,mBACdA,EAAkBE,kBAClBA,EAAiBsL,aACjBA,GACElX,EACEwX,EAAiBhL,KAAoBd,KAAwBE,EAGnE,GAFApM,EAAOoX,gBAAiB,EACxBpX,EAAOmX,gBAAiB,EACpBnX,EAAO0L,SAAWlL,EAAOkL,QAAQC,QAanC,OAZImL,IACGkB,GAAuC,IAArBhY,EAAOyP,UAEnBuI,GAAkBhY,EAAOyP,UAAYjP,EAAOmJ,cACrD3J,EAAO8W,QAAQ9W,EAAO0L,QAAQpC,OAAOlT,OAAS4J,EAAOyP,UAAW,GAAG,GAAO,GACjEzP,EAAOyP,YAAczP,EAAO8L,SAAS1V,OAAS,GACvD4J,EAAO8W,QAAQ9W,EAAO0L,QAAQmD,aAAc,GAAG,GAAO,GAJtD7O,EAAO8W,QAAQ9W,EAAO0L,QAAQpC,OAAOlT,OAAQ,GAAG,GAAO,IAO3D4J,EAAOoX,eAAiBA,EACxBpX,EAAOmX,eAAiBA,OACxBnX,EAAOmI,KAAK,WAGd,IAAIwB,EAAgBnJ,EAAOmJ,cACL,SAAlBA,EACFA,EAAgB3J,EAAO4J,wBAEvBD,EAAgBhV,KAAKkV,KAAKxL,WAAWmC,EAAOmJ,cAAe,KACvDqO,GAAkBrO,EAAgB,GAAM,IAC1CA,GAAgC,IAGpC,MAAM0E,EAAiB7N,EAAO8X,mBAAqB3O,EAAgBnJ,EAAO6N,eAC1E,IAAImM,EAAexC,EAAiBrjB,KAAKwM,IAAIkN,EAAgB1Z,KAAKkV,KAAKF,EAAgB,IAAM0E,EACzFmM,EAAenM,IAAmB,IACpCmM,GAAgBnM,EAAiBmM,EAAenM,GAElDmM,GAAgBha,EAAOia,qBACvBza,EAAOwa,aAAeA,EACtB,MAAMtN,EAAclN,EAAO+J,MAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,EACjEV,EAAOlT,OAASuT,EAAgB6Q,GAAyC,UAAzBxa,EAAOQ,OAAO+N,QAAsBjF,EAAOlT,OAASuT,EAA+B,EAAf6Q,EACtHxY,EAAY,4OACHkL,GAAoC,QAArB1M,EAAOuJ,KAAK2Q,MACpC1Y,EAAY,2EAEd,MAAM2Y,EAAuB,GACvBC,EAAsB,GACtB7C,EAAO7K,EAAcvY,KAAKkV,KAAKP,EAAOlT,OAASoK,EAAOuJ,KAAKC,MAAQV,EAAOlT,OAC1EykB,EAAoB9D,GAAWgB,EAAOL,EAAe/N,IAAkBqO,EAC7E,IAAIlO,EAAc+Q,EAAoBnD,EAAe1X,EAAO8J,iBAC5B,IAArBiL,EACTA,EAAmB/U,EAAO4Z,cAActQ,EAAOiK,KAAKvhB,GAAMA,EAAGqQ,UAAUqG,SAASlI,EAAOwT,oBAEvFlK,EAAciL,EAEhB,MAAM+F,EAAuB,SAAdlE,IAAyBA,EAClCmE,EAAuB,SAAdnE,IAAyBA,EACxC,IAAIoE,EAAkB,EAClBC,EAAiB,EACrB,MACMC,GADiBhO,EAAc5D,EAAOyL,GAAkB3K,OAAS2K,IACrBiD,QAA0C,IAAjBrC,GAAgChM,EAAgB,EAAI,GAAM,GAErI,GAAIuR,EAA0BV,EAAc,CAC1CQ,EAAkBrmB,KAAKwM,IAAIqZ,EAAeU,EAAyB7M,GACnE,IAAK,IAAI3Z,EAAI,EAAGA,EAAI8lB,EAAeU,EAAyBxmB,GAAK,EAAG,CAClE,MAAMiC,EAAQjC,EAAIC,KAAKC,MAAMF,EAAIqjB,GAAQA,EACzC,GAAI7K,EAAa,CACf,MAAMiO,EAAoBpD,EAAOphB,EAAQ,EACzC,IAAK,IAAIjC,EAAI4U,EAAOlT,OAAS,EAAG1B,GAAK,EAAGA,GAAK,EACvC4U,EAAO5U,GAAG0V,SAAW+Q,GAAmBR,EAAqB/jB,KAAKlC,EAK1E,MACEimB,EAAqB/jB,KAAKmhB,EAAOphB,EAAQ,EAE7C,CACF,MAAO,GAAIukB,EAA0BvR,EAAgBoO,EAAOyC,EAAc,CACxES,EAAiBtmB,KAAKwM,IAAI+Z,GAA2BnD,EAAsB,EAAfyC,GAAmBnM,GAC3EwM,IACFI,EAAiBtmB,KAAKwM,IAAI8Z,EAAgBtR,EAAgBoO,EAAOL,EAAe,IAElF,IAAK,IAAIhjB,EAAI,EAAGA,EAAIumB,EAAgBvmB,GAAK,EAAG,CAC1C,MAAMiC,EAAQjC,EAAIC,KAAKC,MAAMF,EAAIqjB,GAAQA,EACrC7K,EACF5D,EAAOvX,QAAQ,CAACyb,EAAOwB,KACjBxB,EAAMpD,SAAWzT,GAAOikB,EAAoBhkB,KAAKoY,KAGvD4L,EAAoBhkB,KAAKD,EAE7B,CACF,CAsCA,GArCAqJ,EAAOob,qBAAsB,EAC7B1e,sBAAsB,KACpBsD,EAAOob,qBAAsB,IAEF,UAAzBpb,EAAOQ,OAAO+N,QAAsBjF,EAAOlT,OAASuT,EAA+B,EAAf6Q,IAClEI,EAAoBrU,SAASwO,IAC/B6F,EAAoB3S,OAAO2S,EAAoB9gB,QAAQib,GAAmB,GAExE4F,EAAqBpU,SAASwO,IAChC4F,EAAqB1S,OAAO0S,EAAqB7gB,QAAQib,GAAmB,IAG5EgG,GACFJ,EAAqB5oB,QAAQ4E,IAC3B2S,EAAO3S,GAAO0kB,mBAAoB,EAClChQ,EAASiQ,QAAQhS,EAAO3S,IACxB2S,EAAO3S,GAAO0kB,mBAAoB,IAGlCP,GACFF,EAAoB7oB,QAAQ4E,IAC1B2S,EAAO3S,GAAO0kB,mBAAoB,EAClChQ,EAASiP,OAAOhR,EAAO3S,IACvB2S,EAAO3S,GAAO0kB,mBAAoB,IAGtCrb,EAAOga,eACsB,SAAzBxZ,EAAOmJ,cACT3J,EAAOiL,eACEiC,IAAgByN,EAAqBvkB,OAAS,GAAK2kB,GAAUH,EAAoBxkB,OAAS,GAAK0kB,IACxG9a,EAAOsJ,OAAOvX,QAAQ,CAACyb,EAAOwB,KAC5BhP,EAAO+J,KAAK0D,YAAYuB,EAAYxB,EAAOxN,EAAOsJ,UAGlD9I,EAAOuP,qBACT/P,EAAOgQ,qBAEL8G,EACF,GAAI6D,EAAqBvkB,OAAS,GAAK2kB,GACrC,QAA8B,IAAnB5C,EAAgC,CACzC,MAAMoD,EAAwBvb,EAAO+L,WAAWjC,GAE1C0R,EADoBxb,EAAO+L,WAAWjC,EAAckR,GACzBO,EAC7BhB,EACFva,EAAO2V,aAAa3V,EAAOI,UAAYob,IAEvCxb,EAAO8W,QAAQhN,EAAcnV,KAAKkV,KAAKmR,GAAkB,GAAG,GAAO,GAC/DrF,IACF3V,EAAOyb,gBAAgBC,eAAiB1b,EAAOyb,gBAAgBC,eAAiBF,EAChFxb,EAAOyb,gBAAgB/F,iBAAmB1V,EAAOyb,gBAAgB/F,iBAAmB8F,GAG1F,MACE,GAAI7F,EAAc,CAChB,MAAM5e,EAAQmW,EAAcyN,EAAqBvkB,OAASoK,EAAOuJ,KAAKC,KAAO2Q,EAAqBvkB,OAClG4J,EAAO8W,QAAQ9W,EAAO8J,YAAc/S,EAAO,GAAG,GAAO,GACrDiJ,EAAOyb,gBAAgB/F,iBAAmB1V,EAAOI,SACnD,OAEG,GAAIwa,EAAoBxkB,OAAS,GAAK0kB,EAC3C,QAA8B,IAAnB3C,EAAgC,CACzC,MAAMoD,EAAwBvb,EAAO+L,WAAWjC,GAE1C0R,EADoBxb,EAAO+L,WAAWjC,EAAcmR,GACzBM,EAC7BhB,EACFva,EAAO2V,aAAa3V,EAAOI,UAAYob,IAEvCxb,EAAO8W,QAAQhN,EAAcmR,EAAgB,GAAG,GAAO,GACnDtF,IACF3V,EAAOyb,gBAAgBC,eAAiB1b,EAAOyb,gBAAgBC,eAAiBF,EAChFxb,EAAOyb,gBAAgB/F,iBAAmB1V,EAAOyb,gBAAgB/F,iBAAmB8F,GAG1F,KAAO,CACL,MAAMzkB,EAAQmW,EAAc0N,EAAoBxkB,OAASoK,EAAOuJ,KAAKC,KAAO4Q,EAAoBxkB,OAChG4J,EAAO8W,QAAQ9W,EAAO8J,YAAc/S,EAAO,GAAG,GAAO,EACvD,CAKJ,GAFAiJ,EAAOoX,eAAiBA,EACxBpX,EAAOmX,eAAiBA,EACpBnX,EAAO2b,YAAc3b,EAAO2b,WAAWC,UAAYhG,EAAc,CACnE,MAAMiG,EAAa,CACjB1D,iBACAvB,YACAjB,eACAZ,mBACAa,cAAc,GAEZpe,MAAMC,QAAQuI,EAAO2b,WAAWC,SAClC5b,EAAO2b,WAAWC,QAAQ7pB,QAAQwQ,KAC3BA,EAAEgF,WAAahF,EAAE/B,OAAO+J,MAAMhI,EAAE2V,QAAQ,IACxC2D,EACH/E,QAASvU,EAAE/B,OAAOmJ,gBAAkBnJ,EAAOmJ,eAAgBmN,MAGtD9W,EAAO2b,WAAWC,mBAAmB5b,EAAO/K,aAAe+K,EAAO2b,WAAWC,QAAQpb,OAAO+J,MACrGvK,EAAO2b,WAAWC,QAAQ1D,QAAQ,IAC7B2D,EACH/E,QAAS9W,EAAO2b,WAAWC,QAAQpb,OAAOmJ,gBAAkBnJ,EAAOmJ,eAAgBmN,GAGzF,CACA9W,EAAOmI,KAAK,UACd,EA4BE2T,YA1BF,WACE,MAAM9b,EAAS3K,MACTmL,OACJA,EAAM6K,SACNA,GACErL,EACJ,IAAKQ,EAAO+J,OAASc,GAAYrL,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAAS,OAClF3L,EAAOga,eACP,MAAM+B,EAAiB,GACvB/b,EAAOsJ,OAAOvX,QAAQwW,IACpB,MAAM5R,OAA4C,IAA7B4R,EAAQyT,iBAAqF,EAAlDzT,EAAQyM,aAAa,2BAAiCzM,EAAQyT,iBAC9HD,EAAeplB,GAAS4R,IAE1BvI,EAAOsJ,OAAOvX,QAAQwW,IACpBA,EAAQgB,gBAAgB,6BAE1BwS,EAAehqB,QAAQwW,IACrB8C,EAASiP,OAAO/R,KAElBvI,EAAOga,eACPha,EAAO8W,QAAQ9W,EAAOwK,UAAW,EACnC,GA0DA,SAASyR,EAAiBjc,EAAQwH,EAAO0U,GACvC,MAAMjjB,EAAS6D,KACT0D,OACJA,GACER,EACEmc,EAAqB3b,EAAO2b,mBAC5BC,EAAqB5b,EAAO4b,mBAClC,OAAID,KAAuBD,GAAUE,GAAsBF,GAAUjjB,EAAOojB,WAAaD,IAC5D,YAAvBD,IACF3U,EAAM8U,kBACC,EAKb,CACA,SAASC,EAAa/U,GACpB,MAAMxH,EAAS3K,KACTtE,EAAWyK,IACjB,IAAIhI,EAAIgU,EACJhU,EAAEgpB,gBAAehpB,EAAIA,EAAEgpB,eAC3B,MAAMvpB,EAAO+M,EAAOyb,gBACpB,GAAe,gBAAXjoB,EAAEgD,KAAwB,CAC5B,GAAuB,OAAnBvD,EAAKwpB,WAAsBxpB,EAAKwpB,YAAcjpB,EAAEipB,UAClD,OAEFxpB,EAAKwpB,UAAYjpB,EAAEipB,SACrB,KAAsB,eAAXjpB,EAAEgD,MAAoD,IAA3BhD,EAAEkpB,cAActmB,SACpDnD,EAAK0pB,QAAUnpB,EAAEkpB,cAAc,GAAGE,YAEpC,GAAe,eAAXppB,EAAEgD,KAGJ,YADAylB,EAAiBjc,EAAQxM,EAAGA,EAAEkpB,cAAc,GAAGG,OAGjD,MAAMrc,OACJA,EAAMsc,QACNA,EAAOnR,QACPA,GACE3L,EACJ,IAAK2L,EAAS,OACd,IAAKnL,EAAOuc,eAAmC,UAAlBvpB,EAAEwpB,YAAyB,OACxD,GAAIhd,EAAOqW,WAAa7V,EAAO8V,+BAC7B,QAEGtW,EAAOqW,WAAa7V,EAAOyM,SAAWzM,EAAO+J,MAChDvK,EAAOkY,UAET,IAAI+E,EAAWzpB,EAAE4E,OACjB,GAAiC,YAA7BoI,EAAO0c,oBDj7Db,SAA0BlrB,EAAI2R,GAC5B,MAAM1K,EAAS6D,IACf,IAAIqgB,EAAUxZ,EAAO+E,SAAS1W,IACzBmrB,GAAWlkB,EAAO4I,iBAAmB8B,aAAkB9B,kBAE1Dsb,EADiB,IAAIxZ,EAAO7B,oBACTyE,SAASvU,GACvBmrB,IACHA,EAlBN,SAA8BnrB,EAAIorB,GAEhC,MAAMC,EAAgB,CAACD,GACvB,KAAOC,EAAcjnB,OAAS,GAAG,CAC/B,MAAMknB,EAAiBD,EAActmB,QACrC,GAAI/E,IAAOsrB,EACT,OAAO,EAETD,EAAczmB,QAAQ0mB,EAAe9iB,YAAc8iB,EAAelU,WAAakU,EAAelU,WAAW5O,SAAW,MAAS8iB,EAAexb,iBAAmBwb,EAAexb,mBAAqB,GACrM,CACF,CAQgByb,CAAqBvrB,EAAI2R,KAGvC,OAAOwZ,CACT,CCu6DSK,CAAiBP,EAAUjd,EAAOU,WAAY,OAErD,GAAI,UAAWlN,GAAiB,IAAZA,EAAEiqB,MAAa,OACnC,GAAI,WAAYjqB,GAAKA,EAAEnB,OAAS,EAAG,OACnC,GAAIY,EAAKyqB,WAAazqB,EAAK0qB,QAAS,OAGpC,MAAMC,IAAyBpd,EAAOqd,gBAA4C,KAA1Brd,EAAOqd,eAEzDC,EAAYtqB,EAAEuqB,aAAevqB,EAAEuqB,eAAiBvqB,EAAE4B,KACpDwoB,GAAwBpqB,EAAE4E,QAAU5E,EAAE4E,OAAOgR,YAAc0U,IAC7Db,EAAWa,EAAU,IAEvB,MAAME,EAAoBxd,EAAOwd,kBAAoBxd,EAAOwd,kBAAoB,IAAIxd,EAAOqd,iBACrFI,KAAoBzqB,EAAE4E,SAAU5E,EAAE4E,OAAOgR,YAG/C,GAAI5I,EAAO0d,YAAcD,EA/E3B,SAAwBrc,EAAUuc,EAAO9oB,MAUvC,OATA,SAAS+oB,EAAcpsB,GACrB,IAAKA,GAAMA,IAAOwJ,KAAiBxJ,IAAO8K,IAAa,OAAO,KAC1D9K,EAAGqsB,eAAcrsB,EAAKA,EAAGqsB,cAC7B,MAAMC,EAAQtsB,EAAG+W,QAAQnH,GACzB,OAAK0c,GAAUtsB,EAAGusB,YAGXD,GAASF,EAAcpsB,EAAGusB,cAActjB,MAFtC,IAGX,CACOmjB,CAAcD,EACvB,CAoE4CK,CAAeR,EAAmBf,GAAYA,EAASlU,QAAQiV,IAEvG,YADAhe,EAAOye,YAAa,GAGtB,GAAIje,EAAOke,eACJzB,EAASlU,QAAQvI,EAAOke,cAAe,OAE9C5B,EAAQ6B,SAAWnrB,EAAEqpB,MACrBC,EAAQ8B,SAAWprB,EAAEqrB,MACrB,MAAM3C,EAASY,EAAQ6B,SACjBG,EAAShC,EAAQ8B,SAIvB,IAAK3C,EAAiBjc,EAAQxM,EAAG0oB,GAC/B,OAEF1iB,OAAOwR,OAAO/X,EAAM,CAClByqB,WAAW,EACXC,SAAS,EACToB,qBAAqB,EACrBC,iBAAaxf,EACbyf,iBAAazf,IAEfsd,EAAQZ,OAASA,EACjBY,EAAQgC,OAASA,EACjB7rB,EAAKisB,eAAiBlmB,IACtBgH,EAAOye,YAAa,EACpBze,EAAO0K,aACP1K,EAAOmf,oBAAiB3f,EACpBgB,EAAO8Y,UAAY,IAAGrmB,EAAKmsB,oBAAqB,GACpD,IAAI9C,GAAiB,EACjBW,EAASlb,QAAQ9O,EAAKosB,qBACxB/C,GAAiB,EACS,WAAtBW,EAAS7iB,WACXnH,EAAKyqB,WAAY,IAGjB3sB,EAASmJ,eAAiBnJ,EAASmJ,cAAc6H,QAAQ9O,EAAKosB,oBAAsBtuB,EAASmJ,gBAAkB+iB,IAA+B,UAAlBzpB,EAAEwpB,aAA6C,UAAlBxpB,EAAEwpB,cAA4BC,EAASlb,QAAQ9O,EAAKosB,qBAC/MtuB,EAASmJ,cAAcC,OAEzB,MAAMmlB,EAAuBhD,GAAkBtc,EAAOuf,gBAAkB/e,EAAOgf,0BAC1Ehf,EAAOif,gCAAiCH,GAA0BrC,EAASyC,mBAC9ElsB,EAAE8oB,iBAEA9b,EAAOuY,UAAYvY,EAAOuY,SAASpN,SAAW3L,EAAO+Y,UAAY/Y,EAAOqW,YAAc7V,EAAOyM,SAC/FjN,EAAO+Y,SAASwD,eAElBvc,EAAOmI,KAAK,aAAc3U,EAC5B,CAEA,SAASmsB,EAAYnY,GACnB,MAAMzW,EAAWyK,IACXwE,EAAS3K,KACTpC,EAAO+M,EAAOyb,iBACdjb,OACJA,EAAMsc,QACNA,EACAxR,aAAcC,EAAGI,QACjBA,GACE3L,EACJ,IAAK2L,EAAS,OACd,IAAKnL,EAAOuc,eAAuC,UAAtBvV,EAAMwV,YAAyB,OAC5D,IAOI4C,EAPApsB,EAAIgU,EAER,GADIhU,EAAEgpB,gBAAehpB,EAAIA,EAAEgpB,eACZ,gBAAXhpB,EAAEgD,KAAwB,CAC5B,GAAqB,OAAjBvD,EAAK0pB,QAAkB,OAE3B,GADWnpB,EAAEipB,YACFxpB,EAAKwpB,UAAW,MAC7B,CAEA,GAAe,cAAXjpB,EAAEgD,MAEJ,GADAopB,EAAc,IAAIpsB,EAAEqsB,gBAAgBtM,KAAKgE,GAAKA,EAAEqF,aAAe3pB,EAAK0pB,UAC/DiD,GAAeA,EAAYhD,aAAe3pB,EAAK0pB,QAAS,YAE7DiD,EAAcpsB,EAEhB,IAAKP,EAAKyqB,UAIR,YAHIzqB,EAAKgsB,aAAehsB,EAAK+rB,aAC3Bhf,EAAOmI,KAAK,oBAAqB3U,IAIrC,MAAMqpB,EAAQ+C,EAAY/C,MACpBgC,EAAQe,EAAYf,MAC1B,GAAIrrB,EAAEssB,wBAGJ,OAFAhD,EAAQZ,OAASW,OACjBC,EAAQgC,OAASD,GAGnB,IAAK7e,EAAOuf,eAaV,OAZK/rB,EAAE4E,OAAO2J,QAAQ9O,EAAKosB,qBACzBrf,EAAOye,YAAa,QAElBxrB,EAAKyqB,YACPlkB,OAAOwR,OAAO8R,EAAS,CACrBZ,OAAQW,EACRiC,OAAQD,EACRF,SAAU9B,EACV+B,SAAUC,IAEZ5rB,EAAKisB,eAAiBlmB,MAI1B,GAAIwH,EAAOuf,sBAAwBvf,EAAO+J,KACxC,GAAIvK,EAAO8K,cAET,GAAI+T,EAAQ/B,EAAQgC,QAAU9e,EAAOI,WAAaJ,EAAOmS,gBAAkB0M,EAAQ/B,EAAQgC,QAAU9e,EAAOI,WAAaJ,EAAOuR,eAG9H,OAFAte,EAAKyqB,WAAY,OACjBzqB,EAAK0qB,SAAU,OAGZ,IAAIpS,IAAQsR,EAAQC,EAAQZ,SAAWlc,EAAOI,WAAaJ,EAAOmS,gBAAkB0K,EAAQC,EAAQZ,SAAWlc,EAAOI,WAAaJ,EAAOuR,gBAC/I,OACK,IAAKhG,IAAQsR,EAAQC,EAAQZ,QAAUlc,EAAOI,WAAaJ,EAAOmS,gBAAkB0K,EAAQC,EAAQZ,QAAUlc,EAAOI,WAAaJ,EAAOuR,gBAC9I,MACF,CAKF,GAHIxgB,EAASmJ,eAAiBnJ,EAASmJ,cAAc6H,QAAQ9O,EAAKosB,oBAAsBtuB,EAASmJ,gBAAkB1G,EAAE4E,QAA4B,UAAlB5E,EAAEwpB,aAC/HjsB,EAASmJ,cAAcC,OAErBpJ,EAASmJ,eACP1G,EAAE4E,SAAWrH,EAASmJ,eAAiB1G,EAAE4E,OAAO2J,QAAQ9O,EAAKosB,mBAG/D,OAFApsB,EAAK0qB,SAAU,OACf3d,EAAOye,YAAa,GAIpBxrB,EAAK8rB,qBACP/e,EAAOmI,KAAK,YAAa3U,GAE3BspB,EAAQkD,UAAYlD,EAAQ6B,SAC5B7B,EAAQmD,UAAYnD,EAAQ8B,SAC5B9B,EAAQ6B,SAAW9B,EACnBC,EAAQ8B,SAAWC,EACnB,MAAMqB,EAAQpD,EAAQ6B,SAAW7B,EAAQZ,OACnCiE,EAAQrD,EAAQ8B,SAAW9B,EAAQgC,OACzC,GAAI9e,EAAOQ,OAAO8Y,WAAa3kB,KAAKyrB,KAAKF,GAAS,EAAIC,GAAS,GAAKngB,EAAOQ,OAAO8Y,UAAW,OAC7F,QAAgC,IAArBrmB,EAAK+rB,YAA6B,CAC3C,IAAIqB,EACArgB,EAAO6K,gBAAkBiS,EAAQ8B,WAAa9B,EAAQgC,QAAU9e,EAAO8K,cAAgBgS,EAAQ6B,WAAa7B,EAAQZ,OACtHjpB,EAAK+rB,aAAc,EAGfkB,EAAQA,EAAQC,EAAQA,GAAS,KACnCE,EAA4D,IAA/C1rB,KAAK2rB,MAAM3rB,KAAKyZ,IAAI+R,GAAQxrB,KAAKyZ,IAAI8R,IAAgBvrB,KAAK2M,GACvErO,EAAK+rB,YAAchf,EAAO6K,eAAiBwV,EAAa7f,EAAO6f,WAAa,GAAKA,EAAa7f,EAAO6f,WAG3G,CASA,GARIptB,EAAK+rB,aACPhf,EAAOmI,KAAK,oBAAqB3U,QAEH,IAArBP,EAAKgsB,cACVnC,EAAQ6B,WAAa7B,EAAQZ,QAAUY,EAAQ8B,WAAa9B,EAAQgC,SACtE7rB,EAAKgsB,aAAc,IAGnBhsB,EAAK+rB,aAA0B,cAAXxrB,EAAEgD,MAAwBvD,EAAKstB,gCAErD,YADAttB,EAAKyqB,WAAY,GAGnB,IAAKzqB,EAAKgsB,YACR,OAEFjf,EAAOye,YAAa,GACfje,EAAOyM,SAAWzZ,EAAEgtB,YACvBhtB,EAAE8oB,iBAEA9b,EAAOigB,2BAA6BjgB,EAAOkgB,QAC7CltB,EAAEmtB,kBAEJ,IAAInF,EAAOxb,EAAO6K,eAAiBqV,EAAQC,EACvCS,EAAc5gB,EAAO6K,eAAiBiS,EAAQ6B,SAAW7B,EAAQkD,UAAYlD,EAAQ8B,SAAW9B,EAAQmD,UACxGzf,EAAOqgB,iBACTrF,EAAO7mB,KAAKyZ,IAAIoN,IAASjQ,EAAM,MAC/BqV,EAAcjsB,KAAKyZ,IAAIwS,IAAgBrV,EAAM,OAE/CuR,EAAQtB,KAAOA,EACfA,GAAQhb,EAAOsgB,WACXvV,IACFiQ,GAAQA,EACRoF,GAAeA,GAEjB,MAAMG,EAAuB/gB,EAAOghB,iBACpChhB,EAAOmf,eAAiB3D,EAAO,EAAI,OAAS,OAC5Cxb,EAAOghB,iBAAmBJ,EAAc,EAAI,OAAS,OACrD,MAAMK,EAASjhB,EAAOQ,OAAO+J,OAAS/J,EAAOyM,QACvCiU,EAA2C,SAA5BlhB,EAAOghB,kBAA+BhhB,EAAOmX,gBAA8C,SAA5BnX,EAAOghB,kBAA+BhhB,EAAOoX,eACjI,IAAKnkB,EAAK0qB,QAAS,CAQjB,GAPIsD,GAAUC,GACZlhB,EAAOkY,QAAQ,CACbtB,UAAW5W,EAAOmf,iBAGtBlsB,EAAKyoB,eAAiB1b,EAAO9C,eAC7B8C,EAAOwQ,cAAc,GACjBxQ,EAAOqW,UAAW,CACpB,MAAM8K,EAAM,IAAIloB,OAAOgD,YAAY,gBAAiB,CAClDmlB,SAAS,EACTZ,YAAY,EACZa,OAAQ,CACNC,mBAAmB,KAGvBthB,EAAOU,UAAU6gB,cAAcJ,EACjC,CACAluB,EAAKuuB,qBAAsB,GAEvBhhB,EAAOihB,aAAyC,IAA1BzhB,EAAOmX,iBAAqD,IAA1BnX,EAAOoX,gBACjEpX,EAAO0hB,eAAc,GAEvB1hB,EAAOmI,KAAK,kBAAmB3U,EACjC,CAGA,IADA,IAAI6I,MAAO4E,WACmB,IAA1BT,EAAOmhB,gBAA4B1uB,EAAK0qB,SAAW1qB,EAAKmsB,oBAAsB2B,IAAyB/gB,EAAOghB,kBAAoBC,GAAUC,GAAgBvsB,KAAKyZ,IAAIoN,IAAS,EAUhL,OATAhiB,OAAOwR,OAAO8R,EAAS,CACrBZ,OAAQW,EACRiC,OAAQD,EACRF,SAAU9B,EACV+B,SAAUC,EACVnD,eAAgBzoB,EAAKyiB,mBAEvBziB,EAAK2uB,eAAgB,OACrB3uB,EAAKyoB,eAAiBzoB,EAAKyiB,kBAG7B1V,EAAOmI,KAAK,aAAc3U,GAC1BP,EAAK0qB,SAAU,EACf1qB,EAAKyiB,iBAAmB8F,EAAOvoB,EAAKyoB,eACpC,IAAImG,GAAsB,EACtBC,EAAkBthB,EAAOshB,gBAiD7B,GAhDIthB,EAAOuf,sBACT+B,EAAkB,GAEhBtG,EAAO,GACLyF,GAAUC,GAA8BjuB,EAAKmsB,oBAAsBnsB,EAAKyiB,kBAAoBlV,EAAOwM,eAAiBhN,EAAOuR,eAAiBvR,EAAOgM,gBAAgBhM,EAAO8J,YAAc,IAA+B,SAAzBtJ,EAAOmJ,eAA4B3J,EAAOsJ,OAAOlT,OAASoK,EAAOmJ,eAAiB,EAAI3J,EAAOgM,gBAAgBhM,EAAO8J,YAAc,GAAK9J,EAAOQ,OAAOgM,aAAe,GAAKxM,EAAOQ,OAAOgM,aAAexM,EAAOuR,iBAC7YvR,EAAOkY,QAAQ,CACbtB,UAAW,OACXjB,cAAc,EACdZ,iBAAkB,IAGlB9hB,EAAKyiB,iBAAmB1V,EAAOuR,iBACjCsQ,GAAsB,EAClBrhB,EAAOuhB,aACT9uB,EAAKyiB,iBAAmB1V,EAAOuR,eAAiB,IAAMvR,EAAOuR,eAAiBte,EAAKyoB,eAAiBF,IAASsG,KAGxGtG,EAAO,IACZyF,GAAUC,GAA8BjuB,EAAKmsB,oBAAsBnsB,EAAKyiB,kBAAoBlV,EAAOwM,eAAiBhN,EAAOmS,eAAiBnS,EAAOgM,gBAAgBhM,EAAOgM,gBAAgB5V,OAAS,GAAK4J,EAAOQ,OAAOgM,cAAyC,SAAzBhM,EAAOmJ,eAA4B3J,EAAOsJ,OAAOlT,OAASoK,EAAOmJ,eAAiB,EAAI3J,EAAOgM,gBAAgBhM,EAAOgM,gBAAgB5V,OAAS,GAAK4J,EAAOQ,OAAOgM,aAAe,GAAKxM,EAAOmS,iBACnanS,EAAOkY,QAAQ,CACbtB,UAAW,OACXjB,cAAc,EACdZ,iBAAkB/U,EAAOsJ,OAAOlT,QAAmC,SAAzBoK,EAAOmJ,cAA2B3J,EAAO4J,uBAAyBjV,KAAKkV,KAAKxL,WAAWmC,EAAOmJ,cAAe,QAGvJ1W,EAAKyiB,iBAAmB1V,EAAOmS,iBACjC0P,GAAsB,EAClBrhB,EAAOuhB,aACT9uB,EAAKyiB,iBAAmB1V,EAAOmS,eAAiB,GAAKnS,EAAOmS,eAAiBlf,EAAKyoB,eAAiBF,IAASsG,KAI9GD,IACFruB,EAAEssB,yBAA0B,IAIzB9f,EAAOmX,gBAA4C,SAA1BnX,EAAOmf,gBAA6BlsB,EAAKyiB,iBAAmBziB,EAAKyoB,iBAC7FzoB,EAAKyiB,iBAAmBziB,EAAKyoB,iBAE1B1b,EAAOoX,gBAA4C,SAA1BpX,EAAOmf,gBAA6BlsB,EAAKyiB,iBAAmBziB,EAAKyoB,iBAC7FzoB,EAAKyiB,iBAAmBziB,EAAKyoB,gBAE1B1b,EAAOoX,gBAAmBpX,EAAOmX,iBACpClkB,EAAKyiB,iBAAmBziB,EAAKyoB,gBAI3Blb,EAAO8Y,UAAY,EAAG,CACxB,KAAI3kB,KAAKyZ,IAAIoN,GAAQhb,EAAO8Y,WAAarmB,EAAKmsB,oBAW5C,YADAnsB,EAAKyiB,iBAAmBziB,EAAKyoB,gBAT7B,IAAKzoB,EAAKmsB,mBAMR,OALAnsB,EAAKmsB,oBAAqB,EAC1BtC,EAAQZ,OAASY,EAAQ6B,SACzB7B,EAAQgC,OAAShC,EAAQ8B,SACzB3rB,EAAKyiB,iBAAmBziB,EAAKyoB,oBAC7BoB,EAAQtB,KAAOxb,EAAO6K,eAAiBiS,EAAQ6B,SAAW7B,EAAQZ,OAASY,EAAQ8B,SAAW9B,EAAQgC,OAO5G,CACKte,EAAOwhB,eAAgBxhB,EAAOyM,WAG/BzM,EAAOuY,UAAYvY,EAAOuY,SAASpN,SAAW3L,EAAO+Y,UAAYvY,EAAOuP,uBAC1E/P,EAAOoU,oBACPpU,EAAOkT,uBAEL1S,EAAOuY,UAAYvY,EAAOuY,SAASpN,SAAW3L,EAAO+Y,UACvD/Y,EAAO+Y,SAAS4G,cAGlB3f,EAAOgS,eAAe/e,EAAKyiB,kBAE3B1V,EAAO2V,aAAa1iB,EAAKyiB,kBAC3B,CAEA,SAASuM,EAAWza,GAClB,MAAMxH,EAAS3K,KACTpC,EAAO+M,EAAOyb,gBACpB,IAEImE,EAFApsB,EAAIgU,EACJhU,EAAEgpB,gBAAehpB,EAAIA,EAAEgpB,eAG3B,GADgC,aAAXhpB,EAAEgD,MAAkC,gBAAXhD,EAAEgD,MAO9C,GADAopB,EAAc,IAAIpsB,EAAEqsB,gBAAgBtM,KAAKgE,GAAKA,EAAEqF,aAAe3pB,EAAK0pB,UAC/DiD,GAAeA,EAAYhD,aAAe3pB,EAAK0pB,QAAS,WAN5C,CACjB,GAAqB,OAAjB1pB,EAAK0pB,QAAkB,OAC3B,GAAInpB,EAAEipB,YAAcxpB,EAAKwpB,UAAW,OACpCmD,EAAcpsB,CAChB,CAIA,GAAI,CAAC,gBAAiB,aAAc,eAAgB,eAAe+S,SAAS/S,EAAEgD,MAAO,CAEnF,KADgB,CAAC,gBAAiB,eAAe+P,SAAS/S,EAAEgD,QAAUwJ,EAAOwE,QAAQ4B,UAAYpG,EAAOwE,QAAQmC,YAE9G,MAEJ,CACA1T,EAAKwpB,UAAY,KACjBxpB,EAAK0pB,QAAU,KACf,MAAMnc,OACJA,EAAMsc,QACNA,EACAxR,aAAcC,EAAGQ,WACjBA,EAAUJ,QACVA,GACE3L,EACJ,IAAK2L,EAAS,OACd,IAAKnL,EAAOuc,eAAmC,UAAlBvpB,EAAEwpB,YAAyB,OAKxD,GAJI/pB,EAAK8rB,qBACP/e,EAAOmI,KAAK,WAAY3U,GAE1BP,EAAK8rB,qBAAsB,GACtB9rB,EAAKyqB,UAMR,OALIzqB,EAAK0qB,SAAWnd,EAAOihB,YACzBzhB,EAAO0hB,eAAc,GAEvBzuB,EAAK0qB,SAAU,OACf1qB,EAAKgsB,aAAc,GAKjBze,EAAOihB,YAAcxuB,EAAK0qB,SAAW1qB,EAAKyqB,aAAwC,IAA1B1d,EAAOmX,iBAAqD,IAA1BnX,EAAOoX,iBACnGpX,EAAO0hB,eAAc,GAIvB,MAAMQ,EAAelpB,IACfmpB,EAAWD,EAAejvB,EAAKisB,eAGrC,GAAIlf,EAAOye,WAAY,CACrB,MAAM2D,EAAW5uB,EAAE4B,MAAQ5B,EAAEuqB,cAAgBvqB,EAAEuqB,eAC/C/d,EAAOmV,mBAAmBiN,GAAYA,EAAS,IAAM5uB,EAAE4E,OAAQgqB,GAC/DpiB,EAAOmI,KAAK,YAAa3U,GACrB2uB,EAAW,KAAOD,EAAejvB,EAAKovB,cAAgB,KACxDriB,EAAOmI,KAAK,wBAAyB3U,EAEzC,CAKA,GAJAP,EAAKovB,cAAgBrpB,IACrBgE,EAAS,KACFgD,EAAOuH,YAAWvH,EAAOye,YAAa,MAExCxrB,EAAKyqB,YAAczqB,EAAK0qB,UAAY3d,EAAOmf,gBAAmC,IAAjBrC,EAAQtB,OAAevoB,EAAK2uB,eAAiB3uB,EAAKyiB,mBAAqBziB,EAAKyoB,iBAAmBzoB,EAAK2uB,cAIpK,OAHA3uB,EAAKyqB,WAAY,EACjBzqB,EAAK0qB,SAAU,OACf1qB,EAAKgsB,aAAc,GAMrB,IAAIqD,EAMJ,GATArvB,EAAKyqB,WAAY,EACjBzqB,EAAK0qB,SAAU,EACf1qB,EAAKgsB,aAAc,EAGjBqD,EADE9hB,EAAOwhB,aACIzW,EAAMvL,EAAOI,WAAaJ,EAAOI,WAEhCnN,EAAKyiB,iBAEjBlV,EAAOyM,QACT,OAEF,GAAIzM,EAAOuY,UAAYvY,EAAOuY,SAASpN,QAIrC,YAHA3L,EAAO+Y,SAASkJ,WAAW,CACzBK,eAMJ,MAAMC,EAAcD,IAAetiB,EAAOmS,iBAAmBnS,EAAOQ,OAAO+J,KAC3E,IAAIiY,EAAY,EACZzT,EAAY/O,EAAOgM,gBAAgB,GACvC,IAAK,IAAItX,EAAI,EAAGA,EAAIqX,EAAW3V,OAAQ1B,GAAKA,EAAI8L,EAAO8N,mBAAqB,EAAI9N,EAAO6N,eAAgB,CACrG,MAAMkK,EAAY7jB,EAAI8L,EAAO8N,mBAAqB,EAAI,EAAI9N,EAAO6N,oBACxB,IAA9BtC,EAAWrX,EAAI6jB,IACpBgK,GAAeD,GAAcvW,EAAWrX,IAAM4tB,EAAavW,EAAWrX,EAAI6jB,MAC5EiK,EAAY9tB,EACZqa,EAAYhD,EAAWrX,EAAI6jB,GAAaxM,EAAWrX,KAE5C6tB,GAAeD,GAAcvW,EAAWrX,MACjD8tB,EAAY9tB,EACZqa,EAAYhD,EAAWA,EAAW3V,OAAS,GAAK2V,EAAWA,EAAW3V,OAAS,GAEnF,CACA,IAAIqsB,EAAmB,KACnBC,EAAkB,KAClBliB,EAAO8J,SACLtK,EAAOoS,YACTsQ,EAAkBliB,EAAOkL,SAAWlL,EAAOkL,QAAQC,SAAW3L,EAAO0L,QAAU1L,EAAO0L,QAAQpC,OAAOlT,OAAS,EAAI4J,EAAOsJ,OAAOlT,OAAS,EAChI4J,EAAOqS,QAChBoQ,EAAmB,IAIvB,MAAME,GAASL,EAAavW,EAAWyW,IAAczT,EAC/CwJ,EAAYiK,EAAYhiB,EAAO8N,mBAAqB,EAAI,EAAI9N,EAAO6N,eACzE,GAAI8T,EAAW3hB,EAAOoiB,aAAc,CAElC,IAAKpiB,EAAOqiB,WAEV,YADA7iB,EAAO8W,QAAQ9W,EAAO8J,aAGM,SAA1B9J,EAAOmf,iBACLwD,GAASniB,EAAOsiB,gBAAiB9iB,EAAO8W,QAAQtW,EAAO8J,QAAUtK,EAAOqS,MAAQoQ,EAAmBD,EAAYjK,GAAgBvY,EAAO8W,QAAQ0L,IAEtH,SAA1BxiB,EAAOmf,iBACLwD,EAAQ,EAAIniB,EAAOsiB,gBACrB9iB,EAAO8W,QAAQ0L,EAAYjK,GACE,OAApBmK,GAA4BC,EAAQ,GAAKhuB,KAAKyZ,IAAIuU,GAASniB,EAAOsiB,gBAC3E9iB,EAAO8W,QAAQ4L,GAEf1iB,EAAO8W,QAAQ0L,GAGrB,KAAO,CAEL,IAAKhiB,EAAOuiB,YAEV,YADA/iB,EAAO8W,QAAQ9W,EAAO8J,aAGE9J,EAAOgjB,aAAexvB,EAAE4E,SAAW4H,EAAOgjB,WAAWC,QAAUzvB,EAAE4E,SAAW4H,EAAOgjB,WAAWE,QAQ7G1vB,EAAE4E,SAAW4H,EAAOgjB,WAAWC,OACxCjjB,EAAO8W,QAAQ0L,EAAYjK,GAE3BvY,EAAO8W,QAAQ0L,IATe,SAA1BxiB,EAAOmf,gBACTnf,EAAO8W,QAA6B,OAArB2L,EAA4BA,EAAmBD,EAAYjK,GAE9C,SAA1BvY,EAAOmf,gBACTnf,EAAO8W,QAA4B,OAApB4L,EAA2BA,EAAkBF,GAOlE,CACF,CAEA,SAASW,KACP,MAAMnjB,EAAS3K,MACTmL,OACJA,EAAMxO,GACNA,GACEgO,EACJ,GAAIhO,GAAyB,IAAnBA,EAAGkc,YAAmB,OAG5B1N,EAAO+M,aACTvN,EAAOojB,gBAIT,MAAMjM,eACJA,EAAcC,eACdA,EAActL,SACdA,GACE9L,EACEyL,EAAYzL,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAG1D3L,EAAOmX,gBAAiB,EACxBnX,EAAOoX,gBAAiB,EACxBpX,EAAO0K,aACP1K,EAAOiL,eACPjL,EAAOkT,sBACP,MAAMmQ,EAAgB5X,GAAajL,EAAO+J,OACZ,SAAzB/J,EAAOmJ,eAA4BnJ,EAAOmJ,cAAgB,KAAM3J,EAAOqS,OAAUrS,EAAOoS,aAAgBpS,EAAOQ,OAAOwM,gBAAmBqW,EAGxIrjB,EAAOQ,OAAO+J,OAASkB,EACzBzL,EAAO4X,YAAY5X,EAAOwK,UAAW,GAAG,GAAO,GAE/CxK,EAAO8W,QAAQ9W,EAAO8J,YAAa,GAAG,GAAO,GAL/C9J,EAAO8W,QAAQ9W,EAAOsJ,OAAOlT,OAAS,EAAG,GAAG,GAAO,GAQjD4J,EAAOsjB,UAAYtjB,EAAOsjB,SAASC,SAAWvjB,EAAOsjB,SAASE,SAChEhnB,aAAawD,EAAOsjB,SAASG,eAC7BzjB,EAAOsjB,SAASG,cAAgBlnB,WAAW,KACrCyD,EAAOsjB,UAAYtjB,EAAOsjB,SAASC,SAAWvjB,EAAOsjB,SAASE,QAChExjB,EAAOsjB,SAASI,UAEjB,MAGL1jB,EAAOoX,eAAiBA,EACxBpX,EAAOmX,eAAiBA,EACpBnX,EAAOQ,OAAOqP,eAAiB/D,IAAa9L,EAAO8L,UACrD9L,EAAO8P,eAEX,CAEA,SAAS6T,GAAQnwB,GACf,MAAMwM,EAAS3K,KACV2K,EAAO2L,UACP3L,EAAOye,aACNze,EAAOQ,OAAOojB,eAAepwB,EAAE8oB,iBAC/Btc,EAAOQ,OAAOqjB,0BAA4B7jB,EAAOqW,YACnD7iB,EAAEmtB,kBACFntB,EAAEswB,6BAGR,CAEA,SAASC,KACP,MAAM/jB,EAAS3K,MACTqL,UACJA,EAAS4K,aACTA,EAAYK,QACZA,GACE3L,EACJ,IAAK2L,EAAS,OAWd,IAAIkK,EAVJ7V,EAAOgW,kBAAoBhW,EAAOI,UAC9BJ,EAAO6K,eACT7K,EAAOI,WAAaM,EAAUsC,WAE9BhD,EAAOI,WAAaM,EAAUoC,UAGP,IAArB9C,EAAOI,YAAiBJ,EAAOI,UAAY,GAC/CJ,EAAOoU,oBACPpU,EAAOkT,sBAEP,MAAMhB,EAAiBlS,EAAOmS,eAAiBnS,EAAOuR,eAEpDsE,EADqB,IAAnB3D,EACY,GAEClS,EAAOI,UAAYJ,EAAOuR,gBAAkBW,EAEzD2D,IAAgB7V,EAAOkB,UACzBlB,EAAOgS,eAAe1G,GAAgBtL,EAAOI,UAAYJ,EAAOI,WAElEJ,EAAOmI,KAAK,eAAgBnI,EAAOI,WAAW,EAChD,CAEA,SAAS4jB,GAAOxwB,GACd,MAAMwM,EAAS3K,KACfwT,EAAqB7I,EAAQxM,EAAE4E,QAC3B4H,EAAOQ,OAAOyM,SAA2C,SAAhCjN,EAAOQ,OAAOmJ,gBAA6B3J,EAAOQ,OAAOyS,YAGtFjT,EAAOyK,QACT,CAEA,SAASwZ,KACP,MAAMjkB,EAAS3K,KACX2K,EAAOkkB,gCACXlkB,EAAOkkB,+BAAgC,EACnClkB,EAAOQ,OAAOuf,sBAChB/f,EAAOhO,GAAG0I,MAAMypB,YAAc,QAElC,CAEA,MAAMjd,GAAS,CAAClH,EAAQpN,KACtB,MAAM7B,EAAWyK,KACXgF,OACJA,EAAMxO,GACNA,EAAE0O,UACFA,EAASyE,OACTA,GACEnF,EACEokB,IAAY5jB,EAAOkgB,OACnB2D,EAAuB,OAAXzxB,EAAkB,mBAAqB,sBACnD0xB,EAAe1xB,EAChBZ,GAAoB,iBAAPA,IAGlBjB,EAASszB,GAAW,aAAcrkB,EAAOikB,qBAAsB,CAC7DM,SAAS,EACTH,YAEFpyB,EAAGqyB,GAAW,aAAcrkB,EAAOuc,aAAc,CAC/CgI,SAAS,IAEXvyB,EAAGqyB,GAAW,cAAerkB,EAAOuc,aAAc,CAChDgI,SAAS,IAEXxzB,EAASszB,GAAW,YAAarkB,EAAO2f,YAAa,CACnD4E,SAAS,EACTH,YAEFrzB,EAASszB,GAAW,cAAerkB,EAAO2f,YAAa,CACrD4E,SAAS,EACTH,YAEFrzB,EAASszB,GAAW,WAAYrkB,EAAOiiB,WAAY,CACjDsC,SAAS,IAEXxzB,EAASszB,GAAW,YAAarkB,EAAOiiB,WAAY,CAClDsC,SAAS,IAEXxzB,EAASszB,GAAW,gBAAiBrkB,EAAOiiB,WAAY,CACtDsC,SAAS,IAEXxzB,EAASszB,GAAW,cAAerkB,EAAOiiB,WAAY,CACpDsC,SAAS,IAEXxzB,EAASszB,GAAW,aAAcrkB,EAAOiiB,WAAY,CACnDsC,SAAS,IAEXxzB,EAASszB,GAAW,eAAgBrkB,EAAOiiB,WAAY,CACrDsC,SAAS,IAEXxzB,EAASszB,GAAW,cAAerkB,EAAOiiB,WAAY,CACpDsC,SAAS,KAIP/jB,EAAOojB,eAAiBpjB,EAAOqjB,2BACjC7xB,EAAGqyB,GAAW,QAASrkB,EAAO2jB,SAAS,GAErCnjB,EAAOyM,SACTvM,EAAU2jB,GAAW,SAAUrkB,EAAO+jB,UAIpCvjB,EAAOgkB,qBACTxkB,EAAOskB,GAAcnf,EAAOC,KAAOD,EAAOE,QAAU,0CAA4C,wBAAyB8d,IAAU,GAEnInjB,EAAOskB,GAAc,iBAAkBnB,IAAU,GAInDnxB,EAAGqyB,GAAW,OAAQrkB,EAAOgkB,OAAQ,CACnCI,SAAS,MA4Bb,MAAMK,GAAgB,CAACzkB,EAAQQ,IACtBR,EAAO+J,MAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,EA8H1D,IAAIuD,GAAc,CAChB6V,cA7HF,WACE,MAAMpjB,EAAS3K,MACTmV,UACJA,EAASyK,YACTA,EAAWzU,OACXA,EAAMxO,GACNA,GACEgO,EACEuN,EAAc/M,EAAO+M,YAC3B,IAAKA,GAAeA,GAAmD,IAApC/T,OAAOI,KAAK2T,GAAanX,OAAc,OAC1E,MAAMrF,EAAWyK,IAGXkpB,EAA6C,WAA3BlkB,EAAOkkB,iBAAiClkB,EAAOkkB,gBAA2C,YAAzBlkB,EAAOkkB,gBAC1FC,EAAsB,CAAC,SAAU,aAAape,SAAS/F,EAAOkkB,mBAAqBlkB,EAAOkkB,gBAAkB1kB,EAAOhO,GAAKjB,EAASC,cAAcwP,EAAOkkB,iBACtJE,EAAa5kB,EAAO6kB,cAActX,EAAamX,EAAiBC,GACtE,IAAKC,GAAc5kB,EAAO8kB,oBAAsBF,EAAY,OAC5D,MACMG,GADuBH,KAAcrX,EAAcA,EAAYqX,QAAcplB,IAClCQ,EAAOglB,eAClDC,EAAcR,GAAczkB,EAAQQ,GACpC0kB,EAAaT,GAAczkB,EAAQ+kB,GACnCI,EAAgBnlB,EAAOQ,OAAOihB,WAC9B2D,EAAeL,EAAiBtD,WAChC4D,EAAa7kB,EAAOmL,QACtBsZ,IAAgBC,GAClBlzB,EAAGqQ,UAAUsG,OAAO,GAAGnI,EAAO0P,6BAA8B,GAAG1P,EAAO0P,qCACtElQ,EAAOslB,yBACGL,GAAeC,IACzBlzB,EAAGqQ,UAAUlJ,IAAI,GAAGqH,EAAO0P,+BACvB6U,EAAiBhb,KAAK2Q,MAAuC,WAA/BqK,EAAiBhb,KAAK2Q,OAAsBqK,EAAiBhb,KAAK2Q,MAA6B,WAArBla,EAAOuJ,KAAK2Q,OACtH1oB,EAAGqQ,UAAUlJ,IAAI,GAAGqH,EAAO0P,qCAE7BlQ,EAAOslB,wBAELH,IAAkBC,EACpBplB,EAAOulB,mBACGJ,GAAiBC,GAC3BplB,EAAO0hB,gBAIT,CAAC,aAAc,aAAc,aAAa3vB,QAAQsR,IAChD,QAAsC,IAA3B0hB,EAAiB1hB,GAAuB,OACnD,MAAMmiB,EAAmBhlB,EAAO6C,IAAS7C,EAAO6C,GAAMsI,QAChD8Z,EAAkBV,EAAiB1hB,IAAS0hB,EAAiB1hB,GAAMsI,QACrE6Z,IAAqBC,GACvBzlB,EAAOqD,GAAMqiB,WAEVF,GAAoBC,GACvBzlB,EAAOqD,GAAMsiB,WAGjB,MAAMC,EAAmBb,EAAiBnO,WAAamO,EAAiBnO,YAAcpW,EAAOoW,UACvFiP,EAAcrlB,EAAO+J,OAASwa,EAAiBpb,gBAAkBnJ,EAAOmJ,eAAiBic,GACzFE,EAAUtlB,EAAO+J,KACnBqb,GAAoB3Q,GACtBjV,EAAO+lB,kBAETtsB,EAAOuG,EAAOQ,OAAQukB,GACtB,MAAMiB,EAAYhmB,EAAOQ,OAAOmL,QAC1Bsa,EAAUjmB,EAAOQ,OAAO+J,KAC9B/Q,OAAOwR,OAAOhL,EAAQ,CACpBuf,eAAgBvf,EAAOQ,OAAO+e,eAC9BpI,eAAgBnX,EAAOQ,OAAO2W,eAC9BC,eAAgBpX,EAAOQ,OAAO4W,iBAE5BiO,IAAeW,EACjBhmB,EAAO0lB,WACGL,GAAcW,GACxBhmB,EAAO2lB,SAET3lB,EAAO8kB,kBAAoBF,EAC3B5kB,EAAOmI,KAAK,oBAAqB4c,GAC7B9P,IACE4Q,GACF7lB,EAAO8b,cACP9b,EAAO6Z,WAAWrP,GAClBxK,EAAOiL,iBACG6a,GAAWG,GACrBjmB,EAAO6Z,WAAWrP,GAClBxK,EAAOiL,gBACE6a,IAAYG,GACrBjmB,EAAO8b,eAGX9b,EAAOmI,KAAK,aAAc4c,EAC5B,EAwCEF,cAtCF,SAAuBtX,EAAa4Q,EAAO,SAAU+H,GACnD,IAAK3Y,GAAwB,cAAT4Q,IAAyB+H,EAAa,OAC1D,IAAItB,GAAa,EACjB,MAAM3rB,EAAS6D,IACTqpB,EAAyB,WAAThI,EAAoBllB,EAAOmtB,YAAcF,EAAYtb,aACrEyb,EAAS7sB,OAAOI,KAAK2T,GAAa7V,IAAI4uB,IAC1C,GAAqB,iBAAVA,GAA6C,IAAvBA,EAAMxsB,QAAQ,KAAY,CACzD,MAAMysB,EAAWloB,WAAWioB,EAAME,OAAO,IAEzC,MAAO,CACLt1B,MAFYi1B,EAAgBI,EAG5BD,QAEJ,CACA,MAAO,CACLp1B,MAAOo1B,EACPA,WAGJD,EAAOI,KAAK,CAAC5oB,EAAG6oB,IAAM3b,SAASlN,EAAE3M,MAAO,IAAM6Z,SAAS2b,EAAEx1B,MAAO,KAChE,IAAK,IAAIwD,EAAI,EAAGA,EAAI2xB,EAAOjwB,OAAQ1B,GAAK,EAAG,CACzC,MAAM4xB,MACJA,EAAKp1B,MACLA,GACEm1B,EAAO3xB,GACE,WAATypB,EACEllB,EAAOwD,WAAW,eAAevL,QAAY6Q,UAC/C6iB,EAAa0B,GAENp1B,GAASg1B,EAAYvb,cAC9Bia,EAAa0B,EAEjB,CACA,OAAO1B,GAAc,KACvB,GAuGA,IAII+B,GAAW,CACbC,MAAM,EACNhQ,UAAW,aACXiK,gBAAgB,EAChBgG,sBAAuB,mBACvB3J,kBAAmB,UACnBxF,aAAc,EACdjX,MAAO,IACPwM,SAAS,EACTuX,sBAAsB,EACtBsC,gBAAgB,EAChBpG,QAAQ,EACRqG,gBAAgB,EAChBC,aAAc,SACdrb,SAAS,EACT0T,kBAAmB,wDAEnB9Z,MAAO,KACPE,OAAQ,KAER6Q,gCAAgC,EAEhC3a,UAAW,KACXsrB,IAAK,KAEL9K,oBAAoB,EACpBC,mBAAoB,GAEpBnJ,YAAY,EAEZzE,gBAAgB,EAEhBiH,kBAAkB,EAElBlH,OAAQ,QAIRhB,iBAAa/N,EACbklB,gBAAiB,SAEjBlY,aAAc,EACd7C,cAAe,EACf0E,eAAgB,EAChBC,mBAAoB,EACpBgK,oBAAoB,EACpBtL,gBAAgB,EAChBiC,sBAAsB,EACtB/C,mBAAoB,EAEpBE,kBAAmB,EAEnBuI,qBAAqB,EACrBrF,0BAA0B,EAE1BO,eAAe,EAEflC,cAAc,EAEdmT,WAAY,EACZT,WAAY,GACZtD,eAAe,EACfgG,aAAa,EACbF,YAAY,EACZC,gBAAiB,GACjBF,aAAc,IACdZ,cAAc,EACdzC,gBAAgB,EAChBjG,UAAW,EACXmH,0BAA0B,EAC1BjB,0BAA0B,EAC1BC,+BAA+B,EAC/BM,qBAAqB,EAErBmH,mBAAmB,EAEnBnF,YAAY,EACZD,gBAAiB,IAEjB/R,qBAAqB,EAErB0R,YAAY,EAEZmC,eAAe,EACfC,0BAA0B,EAC1BrO,qBAAqB,EAErBjL,MAAM,EACNuP,oBAAoB,EACpBW,qBAAsB,EACtBjC,qBAAqB,EAErBlO,QAAQ,EAER8M,gBAAgB,EAChBD,gBAAgB,EAChBuH,aAAc,KAEdR,WAAW,EACXL,eAAgB,oBAChBG,kBAAmB,KAEnBmJ,kBAAkB,EAClB/W,wBAAyB,GAEzBF,uBAAwB,UAExBjH,WAAY,eACZ8Q,gBAAiB,qBACjB/F,iBAAkB,sBAClBnC,kBAAmB,uBACnBC,uBAAwB,6BACxBmC,eAAgB,oBAChBC,eAAgB,oBAChBkT,aAAc,iBACdje,mBAAoB,wBACpBO,oBAAqB,EAErBwL,oBAAoB,EAEpBmS,cAAc,GAGhB,SAASC,GAAmB9mB,EAAQ+mB,GAClC,OAAO,SAAsBhuB,EAAM,IACjC,MAAMiuB,EAAkBhuB,OAAOI,KAAKL,GAAK,GACnCkuB,EAAeluB,EAAIiuB,GACG,iBAAjBC,GAA8C,OAAjBA,IAIR,IAA5BjnB,EAAOgnB,KACThnB,EAAOgnB,GAAmB,CACxB7b,SAAS,IAGW,eAApB6b,GAAoChnB,EAAOgnB,IAAoBhnB,EAAOgnB,GAAiB7b,UAAYnL,EAAOgnB,GAAiBtE,SAAW1iB,EAAOgnB,GAAiBvE,SAChKziB,EAAOgnB,GAAiBE,MAAO,GAE7B,CAAC,aAAc,aAAa5tB,QAAQ0tB,IAAoB,GAAKhnB,EAAOgnB,IAAoBhnB,EAAOgnB,GAAiB7b,UAAYnL,EAAOgnB,GAAiBx1B,KACtJwO,EAAOgnB,GAAiBE,MAAO,GAE3BF,KAAmBhnB,GAAU,YAAainB,GAIT,iBAA5BjnB,EAAOgnB,IAAmC,YAAahnB,EAAOgnB,KACvEhnB,EAAOgnB,GAAiB7b,SAAU,GAE/BnL,EAAOgnB,KAAkBhnB,EAAOgnB,GAAmB,CACtD7b,SAAS,IAEXlS,EAAO8tB,EAAkBhuB,IATvBE,EAAO8tB,EAAkBhuB,IAfzBE,EAAO8tB,EAAkBhuB,EAyB7B,CACF,CAGA,MAAMouB,GAAa,CACjB3gB,gBACAyD,SACArK,YACAwnB,WAz4De,CACfpX,cAtEF,SAAuBjQ,EAAUqV,GAC/B,MAAM5V,EAAS3K,KACV2K,EAAOQ,OAAOyM,UACjBjN,EAAOU,UAAUhG,MAAMmtB,mBAAqB,GAAGtnB,MAC/CP,EAAOU,UAAUhG,MAAMotB,gBAA+B,IAAbvnB,EAAiB,MAAQ,IAEpEP,EAAOmI,KAAK,gBAAiB5H,EAAUqV,EACzC,EAgEEyB,gBAnCF,SAAyBnB,GAAe,EAAMU,GAC5C,MAAM5W,EAAS3K,MACTmL,OACJA,GACER,EACAQ,EAAOyM,UACPzM,EAAOyS,YACTjT,EAAOqQ,mBAETsG,EAAe,CACb3W,SACAkW,eACAU,YACAC,KAAM,UAEV,EAqBES,cAnBF,SAAuBpB,GAAe,EAAMU,GAC1C,MAAM5W,EAAS3K,MACTmL,OACJA,GACER,EACJA,EAAOqW,WAAY,EACf7V,EAAOyM,UACXjN,EAAOwQ,cAAc,GACrBmG,EAAe,CACb3W,SACAkW,eACAU,YACAC,KAAM,QAEV,GA44DErJ,QACAjD,OACAkX,WA/oCe,CACfC,cAjCF,SAAuBqG,GACrB,MAAM/nB,EAAS3K,KACf,IAAK2K,EAAOQ,OAAOuc,eAAiB/c,EAAOQ,OAAOqP,eAAiB7P,EAAOgoB,UAAYhoB,EAAOQ,OAAOyM,QAAS,OAC7G,MAAMjb,EAAyC,cAApCgO,EAAOQ,OAAO0c,kBAAoCld,EAAOhO,GAAKgO,EAAOU,UAC5EV,EAAOgJ,YACThJ,EAAOob,qBAAsB,GAE/BppB,EAAG0I,MAAMutB,OAAS,OAClBj2B,EAAG0I,MAAMutB,OAASF,EAAS,WAAa,OACpC/nB,EAAOgJ,WACTtM,sBAAsB,KACpBsD,EAAOob,qBAAsB,GAGnC,EAoBEmK,gBAlBF,WACE,MAAMvlB,EAAS3K,KACX2K,EAAOQ,OAAOqP,eAAiB7P,EAAOgoB,UAAYhoB,EAAOQ,OAAOyM,UAGhEjN,EAAOgJ,YACThJ,EAAOob,qBAAsB,GAE/Bpb,EAA2C,cAApCA,EAAOQ,OAAO0c,kBAAoC,KAAO,aAAaxiB,MAAMutB,OAAS,GACxFjoB,EAAOgJ,WACTtM,sBAAsB,KACpBsD,EAAOob,qBAAsB,IAGnC,GAkpCElU,OAlZa,CACbghB,aArBF,WACE,MAAMloB,EAAS3K,MACTmL,OACJA,GACER,EACJA,EAAOuc,aAAeA,EAAa4L,KAAKnoB,GACxCA,EAAO2f,YAAcA,EAAYwI,KAAKnoB,GACtCA,EAAOiiB,WAAaA,EAAWkG,KAAKnoB,GACpCA,EAAOikB,qBAAuBA,GAAqBkE,KAAKnoB,GACpDQ,EAAOyM,UACTjN,EAAO+jB,SAAWA,GAASoE,KAAKnoB,IAElCA,EAAO2jB,QAAUA,GAAQwE,KAAKnoB,GAC9BA,EAAOgkB,OAASA,GAAOmE,KAAKnoB,GAC5BkH,GAAOlH,EAAQ,KACjB,EAOEooB,aANF,WAEElhB,GADe7R,KACA,MACjB,GAoZEkY,eACAuC,cA3KoB,CACpBA,cA9BF,WACE,MAAM9P,EAAS3K,MAEb2yB,SAAUK,EAAS7nB,OACnBA,GACER,GACEkM,mBACJA,GACE1L,EACJ,GAAI0L,EAAoB,CACtB,MAAM0G,EAAiB5S,EAAOsJ,OAAOlT,OAAS,EACxCkyB,EAAqBtoB,EAAO+L,WAAW6G,GAAkB5S,EAAOgM,gBAAgB4G,GAAuC,EAArB1G,EACxGlM,EAAOgoB,SAAWhoB,EAAOnH,KAAOyvB,CAClC,MACEtoB,EAAOgoB,SAAsC,IAA3BhoB,EAAO8L,SAAS1V,QAEN,IAA1BoK,EAAO2W,iBACTnX,EAAOmX,gBAAkBnX,EAAOgoB,WAEJ,IAA1BxnB,EAAO4W,iBACTpX,EAAOoX,gBAAkBpX,EAAOgoB,UAE9BK,GAAaA,IAAcroB,EAAOgoB,WACpChoB,EAAOqS,OAAQ,GAEbgW,IAAcroB,EAAOgoB,UACvBhoB,EAAOmI,KAAKnI,EAAOgoB,SAAW,OAAS,SAE3C,GA6KE5lB,QA9MY,CACZmmB,WAhDF,WACE,MAAMvoB,EAAS3K,MACTmzB,WACJA,EAAUhoB,OACVA,EAAM+K,IACNA,EAAGvZ,GACHA,EAAEmT,OACFA,GACEnF,EAEEyoB,EAzBR,SAAwBC,EAASC,GAC/B,MAAMC,EAAgB,GAYtB,OAXAF,EAAQ32B,QAAQ82B,IACM,iBAATA,EACTrvB,OAAOI,KAAKivB,GAAM92B,QAAQy2B,IACpBK,EAAKL,IACPI,EAAchyB,KAAK+xB,EAASH,KAGP,iBAATK,GAChBD,EAAchyB,KAAK+xB,EAASE,KAGzBD,CACT,CAWmBE,CAAe,CAAC,cAAetoB,EAAOoW,UAAW,CAChE,YAAa5W,EAAOQ,OAAOuY,UAAYvY,EAAOuY,SAASpN,SACtD,CACDod,WAAcvoB,EAAOyS,YACpB,CACD1H,IAAOA,GACN,CACDxB,KAAQvJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,GACzC,CACD,cAAexJ,EAAOuJ,MAAQvJ,EAAOuJ,KAAKC,KAAO,GAA0B,WAArBxJ,EAAOuJ,KAAK2Q,MACjE,CACDrV,QAAWF,EAAOE,SACjB,CACDD,IAAOD,EAAOC,KACb,CACD,WAAY5E,EAAOyM,SAClB,CACD+b,SAAYxoB,EAAOyM,SAAWzM,EAAOwM,gBACpC,CACD,iBAAkBxM,EAAOuP,sBACvBvP,EAAO0P,wBACXsY,EAAW5xB,QAAQ6xB,GACnBz2B,EAAGqQ,UAAUlJ,OAAOqvB,GACpBxoB,EAAOslB,sBACT,EAeE2D,cAbF,WACE,MACMj3B,GACJA,EAAEw2B,WACFA,GAHanzB,KAKVrD,GAAoB,iBAAPA,IAClBA,EAAGqQ,UAAUsG,UAAU6f,GANRnzB,KAORiwB,uBACT,IAkNM4D,GAAmB,CAAA,EACzB,MAAMC,GACJ,WAAAl0B,IAAe8J,GACb,IAAI/M,EACAwO,EACgB,IAAhBzB,EAAK3I,QAAgB2I,EAAK,GAAG9J,aAAwE,WAAzDuE,OAAOgF,UAAUL,SAASM,KAAKM,EAAK,IAAIL,MAAM,GAAG,GAC/F8B,EAASzB,EAAK,IAEb/M,EAAIwO,GAAUzB,EAEZyB,IAAQA,EAAS,CAAA,GACtBA,EAAS/G,EAAO,CAAA,EAAI+G,GAChBxO,IAAOwO,EAAOxO,KAAIwO,EAAOxO,GAAKA,GAClC,MAAMjB,EAAWyK,IACjB,GAAIgF,EAAOxO,IAA2B,iBAAdwO,EAAOxO,IAAmBjB,EAASe,iBAAiB0O,EAAOxO,IAAIoE,OAAS,EAAG,CACjG,MAAMgzB,EAAU,GAQhB,OAPAr4B,EAASe,iBAAiB0O,EAAOxO,IAAID,QAAQm0B,IAC3C,MAAMmD,EAAY5vB,EAAO,CAAA,EAAI+G,EAAQ,CACnCxO,GAAIk0B,IAENkD,EAAQxyB,KAAK,IAAIuyB,GAAOE,MAGnBD,CACT,CAGA,MAAMppB,EAAS3K,KACf2K,EAAON,YAAa,EACpBM,EAAOsE,QAAUG,IACjBzE,EAAOmF,OAASJ,EAAU,CACxBpJ,UAAW6E,EAAO7E,YAEpBqE,EAAOwE,QAAU0B,IACjBlG,EAAOsH,gBAAkB,CAAA,EACzBtH,EAAO+H,mBAAqB,GAC5B/H,EAAOspB,QAAU,IAAItpB,EAAOupB,aACxB/oB,EAAO8oB,SAAW9xB,MAAMC,QAAQ+I,EAAO8oB,UACzCtpB,EAAOspB,QAAQ1yB,QAAQ4J,EAAO8oB,SAEhC,MAAM/B,EAAmB,CAAA,EACzBvnB,EAAOspB,QAAQv3B,QAAQy3B,IACrBA,EAAI,CACFhpB,SACAR,SACAypB,aAAcnC,GAAmB9mB,EAAQ+mB,GACzCtgB,GAAIjH,EAAOiH,GAAGkhB,KAAKnoB,GACnByH,KAAMzH,EAAOyH,KAAK0gB,KAAKnoB,GACvB2H,IAAK3H,EAAO2H,IAAIwgB,KAAKnoB,GACrBmI,KAAMnI,EAAOmI,KAAKggB,KAAKnoB,OAK3B,MAAM0pB,EAAejwB,EAAO,GAAIktB,GAAUY,GAqG1C,OAlGAvnB,EAAOQ,OAAS/G,EAAO,CAAA,EAAIiwB,EAAcR,GAAkB1oB,GAC3DR,EAAOglB,eAAiBvrB,EAAO,CAAA,EAAIuG,EAAOQ,QAC1CR,EAAO2pB,aAAelwB,EAAO,CAAA,EAAI+G,GAG7BR,EAAOQ,QAAUR,EAAOQ,OAAOyG,IACjCzN,OAAOI,KAAKoG,EAAOQ,OAAOyG,IAAIlV,QAAQ63B,IACpC5pB,EAAOiH,GAAG2iB,EAAW5pB,EAAOQ,OAAOyG,GAAG2iB,MAGtC5pB,EAAOQ,QAAUR,EAAOQ,OAAOsH,OACjC9H,EAAO8H,MAAM9H,EAAOQ,OAAOsH,OAI7BtO,OAAOwR,OAAOhL,EAAQ,CACpB2L,QAAS3L,EAAOQ,OAAOmL,QACvB3Z,KAEAw2B,WAAY,GAEZlf,OAAQ,GACRyC,WAAY,GACZD,SAAU,GACVE,gBAAiB,GAEjBnB,aAAY,IACyB,eAA5B7K,EAAOQ,OAAOoW,UAEvB9L,WAAU,IAC2B,aAA5B9K,EAAOQ,OAAOoW,UAGvB9M,YAAa,EACbU,UAAW,EAEX4H,aAAa,EACbC,OAAO,EAEPjS,UAAW,EACX4V,kBAAmB,EACnB9U,SAAU,EACV2oB,SAAU,EACVxT,WAAW,EACX,qBAAApF,GAGE,OAAOtc,KAAKm1B,MAAMz0B,KAAK+K,UAAY,GAAK,IAAM,GAAK,EACrD,EAEA+W,eAAgBnX,EAAOQ,OAAO2W,eAC9BC,eAAgBpX,EAAOQ,OAAO4W,eAE9BqE,gBAAiB,CACfiC,eAAWle,EACXme,aAASne,EACTuf,yBAAqBvf,EACrB0f,oBAAgB1f,EAChBwf,iBAAaxf,EACbkW,sBAAkBlW,EAClBkc,oBAAgBlc,EAChB4f,wBAAoB5f,EAEpB6f,kBAAmBrf,EAAOQ,OAAO6e,kBAEjCgD,cAAe,EACf0H,kBAAcvqB,EAEdwqB,WAAY,GACZxI,yBAAqBhiB,EACrByf,iBAAazf,EACbid,UAAW,KACXE,QAAS,MAGX8B,YAAY,EAEZc,eAAgBvf,EAAOQ,OAAO+e,eAC9BzC,QAAS,CACPZ,OAAQ,EACR4C,OAAQ,EACRH,SAAU,EACVC,SAAU,EACVpD,KAAM,GAGRyO,aAAc,GACdC,aAAc,IAEhBlqB,EAAOmI,KAAK,WAGRnI,EAAOQ,OAAOomB,MAChB5mB,EAAO4mB,OAKF5mB,CACT,CACA,iBAAAoL,CAAkB+e,GAChB,OAAI90B,KAAKwV,eACAsf,EAGF,CACL5kB,MAAS,SACT,aAAc,cACd,iBAAkB,eAClB,cAAe,aACf,eAAgB,gBAChB,eAAgB,cAChB,gBAAiB,iBACjBsH,YAAe,gBACfsd,EACJ,CACA,aAAAvQ,CAAcrR,GACZ,MAAM8C,SACJA,EAAQ7K,OACRA,GACEnL,KAEEsd,EAAkBrP,EADT5B,EAAgB2J,EAAU,IAAI7K,EAAOyI,4BACR,IAC5C,OAAO3F,EAAaiF,GAAWoK,CACjC,CACA,mBAAAjC,CAAoB/Z,GAClB,OAAOtB,KAAKukB,cAAcvkB,KAAKiU,OAAOiK,KAAKhL,GAA6D,EAAlDA,EAAQyM,aAAa,6BAAmCre,GAChH,CACA,qBAAA8iB,CAAsB9iB,GAQpB,OAPItB,KAAK0U,MAAQ1U,KAAKmL,OAAOuJ,MAAQ1U,KAAKmL,OAAOuJ,KAAKC,KAAO,IAC7B,WAA1B3U,KAAKmL,OAAOuJ,KAAK2Q,KACnB/jB,EAAQhC,KAAKC,MAAM+B,EAAQtB,KAAKmL,OAAOuJ,KAAKC,MACT,QAA1B3U,KAAKmL,OAAOuJ,KAAK2Q,OAC1B/jB,GAAgBhC,KAAKkV,KAAKxU,KAAKiU,OAAOlT,OAASf,KAAKmL,OAAOuJ,KAAKC,QAG7DrT,CACT,CACA,YAAAqjB,GACE,MACM3O,SACJA,EAAQ7K,OACRA,GAHanL,UAKRiU,OAAS5H,EAAgB2J,EAAU,IAAI7K,EAAOyI,2BACvD,CACA,MAAA0c,GACE,MAAM3lB,EAAS3K,KACX2K,EAAO2L,UACX3L,EAAO2L,SAAU,EACb3L,EAAOQ,OAAOihB,YAChBzhB,EAAO0hB,gBAET1hB,EAAOmI,KAAK,UACd,CACA,OAAAud,GACE,MAAM1lB,EAAS3K,KACV2K,EAAO2L,UACZ3L,EAAO2L,SAAU,EACb3L,EAAOQ,OAAOihB,YAChBzhB,EAAOulB,kBAETvlB,EAAOmI,KAAK,WACd,CACA,WAAAiiB,CAAYlpB,EAAUT,GACpB,MAAMT,EAAS3K,KACf6L,EAAWvM,KAAKkD,IAAIlD,KAAKwM,IAAID,EAAU,GAAI,GAC3C,MAAMrJ,EAAMmI,EAAOuR,eAEbxQ,GADMf,EAAOmS,eACIta,GAAOqJ,EAAWrJ,EACzCmI,EAAOiW,YAAYlV,OAA0B,IAAVN,EAAwB,EAAIA,GAC/DT,EAAOoU,oBACPpU,EAAOkT,qBACT,CACA,oBAAAoS,GACE,MAAMtlB,EAAS3K,KACf,IAAK2K,EAAOQ,OAAO6mB,eAAiBrnB,EAAOhO,GAAI,OAC/C,MAAMq4B,EAAMrqB,EAAOhO,GAAGyW,UAAU7K,MAAM,KAAK1G,OAAOuR,GACT,IAAhCA,EAAU3O,QAAQ,WAA+E,IAA5D2O,EAAU3O,QAAQkG,EAAOQ,OAAO0P,yBAE9ElQ,EAAOmI,KAAK,oBAAqBkiB,EAAIvsB,KAAK,KAC5C,CACA,eAAAwsB,CAAgB/hB,GACd,MAAMvI,EAAS3K,KACf,OAAI2K,EAAOuH,UAAkB,GACtBgB,EAAQE,UAAU7K,MAAM,KAAK1G,OAAOuR,GACI,IAAtCA,EAAU3O,QAAQ,iBAAyE,IAAhD2O,EAAU3O,QAAQkG,EAAOQ,OAAOyI,aACjFnL,KAAK,IACV,CACA,iBAAAqW,GACE,MAAMnU,EAAS3K,KACf,IAAK2K,EAAOQ,OAAO6mB,eAAiBrnB,EAAOhO,GAAI,OAC/C,MAAMu4B,EAAU,GAChBvqB,EAAOsJ,OAAOvX,QAAQwW,IACpB,MAAMigB,EAAaxoB,EAAOsqB,gBAAgB/hB,GAC1CgiB,EAAQ3zB,KAAK,CACX2R,UACAigB,eAEFxoB,EAAOmI,KAAK,cAAeI,EAASigB,KAEtCxoB,EAAOmI,KAAK,gBAAiBoiB,EAC/B,CACA,oBAAA3gB,CAAqB4gB,EAAO,UAAWC,GAAQ,GAC7C,MACMjqB,OACJA,EAAM8I,OACNA,EAAMyC,WACNA,EAAUC,gBACVA,EACAnT,KAAM0T,EAAUzC,YAChBA,GAPazU,KASf,IAAIq1B,EAAM,EACV,GAAoC,iBAAzBlqB,EAAOmJ,cAA4B,OAAOnJ,EAAOmJ,cAC5D,GAAInJ,EAAOwM,eAAgB,CACzB,IACI2d,EADAxd,EAAY7D,EAAOQ,GAAenV,KAAKkV,KAAKP,EAAOQ,GAAaqE,iBAAmB,EAEvF,IAAK,IAAIzZ,EAAIoV,EAAc,EAAGpV,EAAI4U,EAAOlT,OAAQ1B,GAAK,EAChD4U,EAAO5U,KAAOi2B,IAChBxd,GAAaxY,KAAKkV,KAAKP,EAAO5U,GAAGyZ,iBACjCuc,GAAO,EACHvd,EAAYZ,IAAYoe,GAAY,IAG5C,IAAK,IAAIj2B,EAAIoV,EAAc,EAAGpV,GAAK,EAAGA,GAAK,EACrC4U,EAAO5U,KAAOi2B,IAChBxd,GAAa7D,EAAO5U,GAAGyZ,gBACvBuc,GAAO,EACHvd,EAAYZ,IAAYoe,GAAY,GAG9C,MAEE,GAAa,YAATH,EACF,IAAK,IAAI91B,EAAIoV,EAAc,EAAGpV,EAAI4U,EAAOlT,OAAQ1B,GAAK,EAAG,EACnC+1B,EAAQ1e,EAAWrX,GAAKsX,EAAgBtX,GAAKqX,EAAWjC,GAAeyC,EAAaR,EAAWrX,GAAKqX,EAAWjC,GAAeyC,KAEhJme,GAAO,EAEX,MAGA,IAAK,IAAIh2B,EAAIoV,EAAc,EAAGpV,GAAK,EAAGA,GAAK,EAAG,CACxBqX,EAAWjC,GAAeiC,EAAWrX,GAAK6X,IAE5Dme,GAAO,EAEX,CAGJ,OAAOA,CACT,CACA,MAAAjgB,GACE,MAAMzK,EAAS3K,KACf,IAAK2K,GAAUA,EAAOuH,UAAW,OACjC,MAAMuE,SACJA,EAAQtL,OACRA,GACER,EAcJ,SAAS2V,IACP,MAAMiV,EAAiB5qB,EAAOsL,cAAkC,EAAnBtL,EAAOI,UAAiBJ,EAAOI,UACtEmW,EAAe5hB,KAAKkD,IAAIlD,KAAKwM,IAAIypB,EAAgB5qB,EAAOmS,gBAAiBnS,EAAOuR,gBACtFvR,EAAO2V,aAAaY,GACpBvW,EAAOoU,oBACPpU,EAAOkT,qBACT,CACA,IAAI2X,EACJ,GApBIrqB,EAAO+M,aACTvN,EAAOojB,gBAET,IAAIpjB,EAAOhO,GAAGF,iBAAiB,qBAAqBC,QAAQ+W,IACtDA,EAAQgiB,UACVjiB,EAAqB7I,EAAQ8I,KAGjC9I,EAAO0K,aACP1K,EAAOiL,eACPjL,EAAOgS,iBACPhS,EAAOkT,sBASH1S,EAAOuY,UAAYvY,EAAOuY,SAASpN,UAAYnL,EAAOyM,QACxD0I,IACInV,EAAOyS,YACTjT,EAAOqQ,uBAEJ,CACL,IAA8B,SAAzB7P,EAAOmJ,eAA4BnJ,EAAOmJ,cAAgB,IAAM3J,EAAOqS,QAAU7R,EAAOwM,eAAgB,CAC3G,MAAM1D,EAAStJ,EAAO0L,SAAWlL,EAAOkL,QAAQC,QAAU3L,EAAO0L,QAAQpC,OAAStJ,EAAOsJ,OACzFuhB,EAAa7qB,EAAO8W,QAAQxN,EAAOlT,OAAS,EAAG,GAAG,GAAO,EAC3D,MACEy0B,EAAa7qB,EAAO8W,QAAQ9W,EAAO8J,YAAa,GAAG,GAAO,GAEvD+gB,GACHlV,GAEJ,CACInV,EAAOqP,eAAiB/D,IAAa9L,EAAO8L,UAC9C9L,EAAO8P,gBAET9P,EAAOmI,KAAK,SACd,CACA,eAAA4d,CAAgBgF,EAAcC,GAAa,GACzC,MAAMhrB,EAAS3K,KACT41B,EAAmBjrB,EAAOQ,OAAOoW,UAKvC,OAJKmU,IAEHA,EAAoC,eAArBE,EAAoC,WAAa,cAE9DF,IAAiBE,GAAqC,eAAjBF,GAAkD,aAAjBA,IAG1E/qB,EAAOhO,GAAGqQ,UAAUsG,OAAO,GAAG3I,EAAOQ,OAAO0P,yBAAyB+a,KACrEjrB,EAAOhO,GAAGqQ,UAAUlJ,IAAI,GAAG6G,EAAOQ,OAAO0P,yBAAyB6a,KAClE/qB,EAAOslB,uBACPtlB,EAAOQ,OAAOoW,UAAYmU,EAC1B/qB,EAAOsJ,OAAOvX,QAAQwW,IACC,aAAjBwiB,EACFxiB,EAAQ7N,MAAM6K,MAAQ,GAEtBgD,EAAQ7N,MAAM+K,OAAS,KAG3BzF,EAAOmI,KAAK,mBACR6iB,GAAYhrB,EAAOyK,UAddzK,CAgBX,CACA,uBAAAkrB,CAAwBtU,GACtB,MAAM5W,EAAS3K,KACX2K,EAAOuL,KAAqB,QAAdqL,IAAwB5W,EAAOuL,KAAqB,QAAdqL,IACxD5W,EAAOuL,IAAoB,QAAdqL,EACb5W,EAAOsL,aAA2C,eAA5BtL,EAAOQ,OAAOoW,WAA8B5W,EAAOuL,IACrEvL,EAAOuL,KACTvL,EAAOhO,GAAGqQ,UAAUlJ,IAAI,GAAG6G,EAAOQ,OAAO0P,6BACzClQ,EAAOhO,GAAG6O,IAAM,QAEhBb,EAAOhO,GAAGqQ,UAAUsG,OAAO,GAAG3I,EAAOQ,OAAO0P,6BAC5ClQ,EAAOhO,GAAG6O,IAAM,OAElBb,EAAOyK,SACT,CACA,KAAA0gB,CAAMxpB,GACJ,MAAM3B,EAAS3K,KACf,GAAI2K,EAAOorB,QAAS,OAAO,EAG3B,IAAIp5B,EAAK2P,GAAW3B,EAAOQ,OAAOxO,GAIlC,GAHkB,iBAAPA,IACTA,EAAKjB,SAASC,cAAcgB,KAEzBA,EACH,OAAO,EAETA,EAAGgO,OAASA,EACRhO,EAAGq5B,YAAcr5B,EAAGq5B,WAAWpwB,MAAQjJ,EAAGq5B,WAAWpwB,KAAKb,WAAa4F,EAAOQ,OAAOqmB,sBAAsByE,gBAC7GtrB,EAAOgJ,WAAY,GAErB,MAAMuiB,EAAqB,IAClB,KAAKvrB,EAAOQ,OAAO4mB,cAAgB,IAAI9kB,OAAO1E,MAAM,KAAKE,KAAK,OAWvE,IAAI4C,EATe,MACjB,GAAI1O,GAAMA,EAAGoX,YAAcpX,EAAGoX,WAAWpY,cAAe,CAGtD,OAFYgB,EAAGoX,WAAWpY,cAAcu6B,IAG1C,CACA,OAAO7pB,EAAgB1P,EAAIu5B,KAAsB,IAGnCC,GAmBhB,OAlBK9qB,GAAaV,EAAOQ,OAAOumB,iBAC9BrmB,EAAYnG,EAAc,MAAOyF,EAAOQ,OAAO4mB,cAC/Cp1B,EAAGsoB,OAAO5Z,GACVgB,EAAgB1P,EAAI,IAAIgO,EAAOQ,OAAOyI,cAAclX,QAAQwW,IAC1D7H,EAAU4Z,OAAO/R,MAGrB/O,OAAOwR,OAAOhL,EAAQ,CACpBhO,KACA0O,YACA2K,SAAUrL,EAAOgJ,YAAchX,EAAGq5B,WAAWpwB,KAAKwwB,WAAaz5B,EAAGq5B,WAAWpwB,KAAOyF,EACpFgrB,OAAQ1rB,EAAOgJ,UAAYhX,EAAGq5B,WAAWpwB,KAAOjJ,EAChDo5B,SAAS,EAET7f,IAA8B,QAAzBvZ,EAAG6O,IAAIwF,eAA6D,QAAlCjD,EAAapR,EAAI,aACxDsZ,aAA0C,eAA5BtL,EAAOQ,OAAOoW,YAAwD,QAAzB5kB,EAAG6O,IAAIwF,eAA6D,QAAlCjD,EAAapR,EAAI,cAC9GwZ,SAAiD,gBAAvCpI,EAAa1C,EAAW,cAE7B,CACT,CACA,IAAAkmB,CAAK50B,GACH,MAAMgO,EAAS3K,KACf,GAAI2K,EAAOiV,YAAa,OAAOjV,EAE/B,IAAgB,IADAA,EAAOmrB,MAAMn5B,GACN,OAAOgO,EAC9BA,EAAOmI,KAAK,cAGRnI,EAAOQ,OAAO+M,aAChBvN,EAAOojB,gBAITpjB,EAAOuoB,aAGPvoB,EAAO0K,aAGP1K,EAAOiL,eACHjL,EAAOQ,OAAOqP,eAChB7P,EAAO8P,gBAIL9P,EAAOQ,OAAOihB,YAAczhB,EAAO2L,SACrC3L,EAAO0hB,gBAIL1hB,EAAOQ,OAAO+J,MAAQvK,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAChE3L,EAAO8W,QAAQ9W,EAAOQ,OAAOkX,aAAe1X,EAAO0L,QAAQmD,aAAc,EAAG7O,EAAOQ,OAAO0U,oBAAoB,GAAO,GAErHlV,EAAO8W,QAAQ9W,EAAOQ,OAAOkX,aAAc,EAAG1X,EAAOQ,OAAO0U,oBAAoB,GAAO,GAIrFlV,EAAOQ,OAAO+J,MAChBvK,EAAO6Z,gBAAWra,GAAW,GAI/BQ,EAAOkoB,eACP,MAAMyD,EAAe,IAAI3rB,EAAOhO,GAAGF,iBAAiB,qBAsBpD,OArBIkO,EAAOgJ,WACT2iB,EAAa/0B,QAAQoJ,EAAO0rB,OAAO55B,iBAAiB,qBAEtD65B,EAAa55B,QAAQ+W,IACfA,EAAQgiB,SACVjiB,EAAqB7I,EAAQ8I,GAE7BA,EAAQpW,iBAAiB,OAAQc,IAC/BqV,EAAqB7I,EAAQxM,EAAE4E,YAIrCoR,EAAQxJ,GAGRA,EAAOiV,aAAc,EACrBzL,EAAQxJ,GAGRA,EAAOmI,KAAK,QACZnI,EAAOmI,KAAK,aACLnI,CACT,CACA,OAAA4rB,CAAQC,GAAiB,EAAMC,GAAc,GAC3C,MAAM9rB,EAAS3K,MACTmL,OACJA,EAAMxO,GACNA,EAAE0O,UACFA,EAAS4I,OACTA,GACEtJ,EACJ,YAA6B,IAAlBA,EAAOQ,QAA0BR,EAAOuH,YAGnDvH,EAAOmI,KAAK,iBAGZnI,EAAOiV,aAAc,EAGrBjV,EAAOooB,eAGH5nB,EAAO+J,MACTvK,EAAO8b,cAILgQ,IACF9rB,EAAOipB,gBACHj3B,GAAoB,iBAAPA,GACfA,EAAGuX,gBAAgB,SAEjB7I,GACFA,EAAU6I,gBAAgB,SAExBD,GAAUA,EAAOlT,QACnBkT,EAAOvX,QAAQwW,IACbA,EAAQlG,UAAUsG,OAAOnI,EAAOqR,kBAAmBrR,EAAOsR,uBAAwBtR,EAAOwT,iBAAkBxT,EAAOyT,eAAgBzT,EAAO0T,gBACzI3L,EAAQgB,gBAAgB,SACxBhB,EAAQgB,gBAAgB,8BAI9BvJ,EAAOmI,KAAK,WAGZ3O,OAAOI,KAAKoG,EAAOsH,iBAAiBvV,QAAQ63B,IAC1C5pB,EAAO2H,IAAIiiB,MAEU,IAAnBiC,IACE7rB,EAAOhO,IAA2B,iBAAdgO,EAAOhO,KAC7BgO,EAAOhO,GAAGgO,OAAS,MDlvH3B,SAAqBzG,GACnB,MAAMwyB,EAASxyB,EACfC,OAAOI,KAAKmyB,GAAQh6B,QAAQ8H,IAC1B,IACEkyB,EAAOlyB,GAAO,IAChB,CAAE,MAAOrG,GAET,CACA,WACSu4B,EAAOlyB,EAChB,CAAE,MAAOrG,GAET,GAEJ,CCsuHMw4B,CAAYhsB,IAEdA,EAAOuH,WAAY,GA5CV,IA8CX,CACA,qBAAO0kB,CAAeC,GACpBzyB,EAAOyvB,GAAkBgD,EAC3B,CACA,2BAAWhD,GACT,OAAOA,EACT,CACA,mBAAWvC,GACT,OAAOA,EACT,CACA,oBAAOwF,CAAc3C,GACdL,GAAO3qB,UAAU+qB,cAAaJ,GAAO3qB,UAAU+qB,YAAc,IAClE,MAAMD,EAAUH,GAAO3qB,UAAU+qB,YACd,mBAARC,GAAsBF,EAAQxvB,QAAQ0vB,GAAO,GACtDF,EAAQ1yB,KAAK4yB,EAEjB,CACA,UAAO4C,CAAIC,GACT,OAAI70B,MAAMC,QAAQ40B,IAChBA,EAAOt6B,QAAQu6B,GAAKnD,GAAOgD,cAAcG,IAClCnD,KAETA,GAAOgD,cAAcE,GACdlD,GACT,EClxHF,SAASoD,IAASvsB,OAChBA,EAAMypB,aACNA,EAAYxiB,GACZA,EAAEkB,KACFA,IAEA,MAAMpX,EAAWyK,IACXvC,EAAS6D,IAWf,SAAS0vB,EAAOhlB,GACd,IAAKxH,EAAO2L,QAAS,OACrB,MACEL,aAAcC,GACZvL,EACJ,IAAIxM,EAAIgU,EACJhU,EAAEgpB,gBAAehpB,EAAIA,EAAEgpB,eAC3B,MAAMiQ,EAAKj5B,EAAEk5B,SAAWl5B,EAAEm5B,SACpBC,EAAa5sB,EAAOQ,OAAOqsB,SAASD,WACpCE,EAAWF,GAAqB,KAAPH,EACzBM,EAAaH,GAAqB,KAAPH,EAC3BO,EAAqB,KAAPP,EACdQ,EAAsB,KAAPR,EACfS,EAAmB,KAAPT,EACZU,EAAqB,KAAPV,EAEpB,IAAKzsB,EAAOmX,iBAAmBnX,EAAO6K,gBAAkBoiB,GAAgBjtB,EAAO8K,cAAgBqiB,GAAeJ,GAC5G,OAAO,EAET,IAAK/sB,EAAOoX,iBAAmBpX,EAAO6K,gBAAkBmiB,GAAehtB,EAAO8K,cAAgBoiB,GAAaJ,GACzG,OAAO,EAET,KAAIt5B,EAAE45B,UAAY55B,EAAE65B,QAAU75B,EAAE85B,SAAW95B,EAAE+5B,SAGzCx8B,EAASmJ,gBAAkBnJ,EAASmJ,cAAcwlB,mBAAqB3uB,EAASmJ,cAAcE,WAA+D,UAAlDrJ,EAASmJ,cAAcE,SAASiM,eAA+E,aAAlDtV,EAASmJ,cAAcE,SAASiM,iBAA5M,CAGA,GAAIrG,EAAOQ,OAAOqsB,SAASW,iBAAmBV,GAAYC,GAAcC,GAAeC,GAAgBC,GAAaC,GAAc,CAChI,IAAIM,GAAS,EAEb,GAAIhqB,EAAezD,EAAOhO,GAAI,IAAIgO,EAAOQ,OAAOyI,4BAA4B7S,OAAS,GAAgF,IAA3EqN,EAAezD,EAAOhO,GAAI,IAAIgO,EAAOQ,OAAOwT,oBAAoB5d,OACxJ,OAEF,MAAMpE,EAAKgO,EAAOhO,GACZ07B,EAAc17B,EAAG2Y,YACjBgjB,EAAe37B,EAAG4Y,aAClBgjB,EAAc30B,EAAOojB,WACrBwR,EAAe50B,EAAOmtB,YACtB0H,EAAerrB,EAAczQ,GAC/BuZ,IAAKuiB,EAAa3qB,MAAQnR,EAAGgR,YACjC,MAAM+qB,EAAc,CAAC,CAACD,EAAa3qB,KAAM2qB,EAAa5qB,KAAM,CAAC4qB,EAAa3qB,KAAOuqB,EAAaI,EAAa5qB,KAAM,CAAC4qB,EAAa3qB,KAAM2qB,EAAa5qB,IAAMyqB,GAAe,CAACG,EAAa3qB,KAAOuqB,EAAaI,EAAa5qB,IAAMyqB,IAC5N,IAAK,IAAIj5B,EAAI,EAAGA,EAAIq5B,EAAY33B,OAAQ1B,GAAK,EAAG,CAC9C,MAAM4xB,EAAQyH,EAAYr5B,GAC1B,GAAI4xB,EAAM,IAAM,GAAKA,EAAM,IAAMsH,GAAetH,EAAM,IAAM,GAAKA,EAAM,IAAMuH,EAAc,CACzF,GAAiB,IAAbvH,EAAM,IAAyB,IAAbA,EAAM,GAAU,SACtCmH,GAAS,CACX,CACF,CACA,IAAKA,EAAQ,MACf,CACIztB,EAAO6K,iBACLiiB,GAAYC,GAAcC,GAAeC,KACvCz5B,EAAE8oB,eAAgB9oB,EAAE8oB,iBAAsB9oB,EAAEw6B,aAAc,KAE3DjB,GAAcE,KAAkB1hB,IAAQuhB,GAAYE,IAAgBzhB,IAAKvL,EAAOoY,cAChF0U,GAAYE,KAAiBzhB,IAAQwhB,GAAcE,IAAiB1hB,IAAKvL,EAAO0Y,eAEjFoU,GAAYC,GAAcG,GAAaC,KACrC35B,EAAE8oB,eAAgB9oB,EAAE8oB,iBAAsB9oB,EAAEw6B,aAAc,IAE5DjB,GAAcI,IAAantB,EAAOoY,aAClC0U,GAAYI,IAAWltB,EAAO0Y,aAEpCvQ,EAAK,WAAYskB,EArCjB,CAuCF,CACA,SAAS9G,IACH3lB,EAAO6sB,SAASlhB,UACpB5a,EAAS2B,iBAAiB,UAAW85B,GACrCxsB,EAAO6sB,SAASlhB,SAAU,EAC5B,CACA,SAAS+Z,IACF1lB,EAAO6sB,SAASlhB,UACrB5a,EAASkJ,oBAAoB,UAAWuyB,GACxCxsB,EAAO6sB,SAASlhB,SAAU,EAC5B,CAtFA3L,EAAO6sB,SAAW,CAChBlhB,SAAS,GAEX8d,EAAa,CACXoD,SAAU,CACRlhB,SAAS,EACT6hB,gBAAgB,EAChBZ,YAAY,KAgFhB3lB,EAAG,OAAQ,KACLjH,EAAOQ,OAAOqsB,SAASlhB,SACzBga,MAGJ1e,EAAG,UAAW,KACRjH,EAAO6sB,SAASlhB,SAClB+Z,MAGJlsB,OAAOwR,OAAOhL,EAAO6sB,SAAU,CAC7BlH,SACAD,WAEJ,CC/GA,SAASuI,GAA0BjuB,EAAQglB,EAAgBxkB,EAAQ0tB,GAejE,OAdIluB,EAAOQ,OAAOumB,gBAChBvtB,OAAOI,KAAKs0B,GAAYn8B,QAAQ8H,IAC9B,IAAK2G,EAAO3G,KAAwB,IAAhB2G,EAAOknB,KAAe,CACxC,IAAI/lB,EAAUD,EAAgB1B,EAAOhO,GAAI,IAAIk8B,EAAWr0B,MAAQ,GAC3D8H,IACHA,EAAUpH,EAAc,MAAO2zB,EAAWr0B,IAC1C8H,EAAQ8G,UAAYylB,EAAWr0B,GAC/BmG,EAAOhO,GAAGsoB,OAAO3Y,IAEnBnB,EAAO3G,GAAO8H,EACdqjB,EAAenrB,GAAO8H,CACxB,IAGGnB,CACT,CFswHAhH,OAAOI,KAAK+tB,IAAY51B,QAAQo8B,IAC9B30B,OAAOI,KAAK+tB,GAAWwG,IAAiBp8B,QAAQq8B,IAC9CjF,GAAO3qB,UAAU4vB,GAAezG,GAAWwG,GAAgBC,OAG/DjF,GAAOiD,IAAI,CAxrHX,UAAgBpsB,OACdA,EAAMiH,GACNA,EAAEkB,KACFA,IAEA,MAAMlP,EAAS6D,IACf,IAAIuxB,EAAW,KACXC,EAAiB,KACrB,MAAMC,EAAgB,KACfvuB,IAAUA,EAAOuH,WAAcvH,EAAOiV,cAC3C9M,EAAK,gBACLA,EAAK,YAqCDqmB,EAA2B,KAC1BxuB,IAAUA,EAAOuH,WAAcvH,EAAOiV,aAC3C9M,EAAK,sBAEPlB,EAAG,OAAQ,KACLjH,EAAOQ,OAAOsmB,qBAAmD,IAA1B7tB,EAAOw1B,eAvC7CzuB,IAAUA,EAAOuH,WAAcvH,EAAOiV,cAC3CoZ,EAAW,IAAII,eAAe/F,IAC5B4F,EAAiBr1B,EAAOyD,sBAAsB,KAC5C,MAAM6I,MACJA,EAAKE,OACLA,GACEzF,EACJ,IAAI0uB,EAAWnpB,EACXgL,EAAY9K,EAChBijB,EAAQ32B,QAAQ,EACd48B,iBACAC,cACAx2B,aAEIA,GAAUA,IAAW4H,EAAOhO,KAChC08B,EAAWE,EAAcA,EAAYrpB,OAASopB,EAAe,IAAMA,GAAgBE,WACnFte,EAAYqe,EAAcA,EAAYnpB,QAAUkpB,EAAe,IAAMA,GAAgBG,aAEnFJ,IAAanpB,GAASgL,IAAc9K,GACtC8oB,QAINF,EAASU,QAAQ/uB,EAAOhO,MAoBxBiH,EAAOvG,iBAAiB,SAAU67B,GAClCt1B,EAAOvG,iBAAiB,oBAAqB87B,MAE/CvnB,EAAG,UAAW,KApBRqnB,GACFr1B,EAAO2D,qBAAqB0xB,GAE1BD,GAAYA,EAASW,WAAahvB,EAAOhO,KAC3Cq8B,EAASW,UAAUhvB,EAAOhO,IAC1Bq8B,EAAW,MAiBbp1B,EAAOgB,oBAAoB,SAAUs0B,GACrCt1B,EAAOgB,oBAAoB,oBAAqBu0B,IAEpD,EAEA,UAAkBxuB,OAChBA,EAAMypB,aACNA,EAAYxiB,GACZA,EAAEkB,KACFA,IAEA,MAAM8mB,EAAY,GACZh2B,EAAS6D,IACToyB,EAAS,CAAC92B,EAAQ+2B,EAAU,CAAA,KAChC,MACMd,EAAW,IADIp1B,EAAOm2B,kBAAoBn2B,EAAOo2B,wBACrBC,IAIhC,GAAItvB,EAAOob,oBAAqB,OAChC,GAAyB,IAArBkU,EAAUl5B,OAEZ,YADA+R,EAAK,iBAAkBmnB,EAAU,IAGnC,MAAMC,EAAiB,WACrBpnB,EAAK,iBAAkBmnB,EAAU,GACnC,EACIr2B,EAAOyD,sBACTzD,EAAOyD,sBAAsB6yB,GAE7Bt2B,EAAOsD,WAAWgzB,EAAgB,KAGtClB,EAASU,QAAQ32B,EAAQ,CACvBo3B,gBAA0C,IAAvBL,EAAQK,YAAoCL,EAAQK,WACvEC,UAAWzvB,EAAOgJ,iBAA2C,IAAtBmmB,EAAQM,WAAmCN,GAASM,UAC3FC,mBAAgD,IAA1BP,EAAQO,eAAuCP,EAAQO,gBAE/ET,EAAUr4B,KAAKy3B,IA0BjB5E,EAAa,CACX4E,UAAU,EACVsB,gBAAgB,EAChBC,sBAAsB,IAExB3oB,EAAG,OA7BU,KACX,GAAKjH,EAAOQ,OAAO6tB,SAAnB,CACA,GAAIruB,EAAOQ,OAAOmvB,eAAgB,CAChC,MAAME,EAAmBpsB,EAAezD,EAAO0rB,QAC/C,IAAK,IAAIh3B,EAAI,EAAGA,EAAIm7B,EAAiBz5B,OAAQ1B,GAAK,EAChDw6B,EAAOW,EAAiBn7B,GAE5B,CAEAw6B,EAAOlvB,EAAO0rB,OAAQ,CACpB+D,UAAWzvB,EAAOQ,OAAOovB,uBAI3BV,EAAOlvB,EAAOU,UAAW,CACvB8uB,YAAY,GAde,IA6B/BvoB,EAAG,UAZa,KACdgoB,EAAUl9B,QAAQs8B,IAChBA,EAASyB,eAEXb,EAAUhnB,OAAO,EAAGgnB,EAAU74B,SASlC,IGtOA,SAAS25B,IAAW/vB,OAClBA,EAAMypB,aACNA,EAAYxiB,GACZA,EAAEkB,KACFA,IAkBA,SAAS6nB,EAAMh+B,GACb,IAAIi+B,EACJ,OAAIj+B,GAAoB,iBAAPA,GAAmBgO,EAAOgJ,YACzCinB,EAAMjwB,EAAOhO,GAAGhB,cAAcgB,IAAOgO,EAAO0rB,OAAO16B,cAAcgB,GAC7Di+B,GAAYA,GAEdj+B,IACgB,iBAAPA,IAAiBi+B,EAAM,IAAIl/B,SAASe,iBAAiBE,KAC5DgO,EAAOQ,OAAO0mB,mBAAmC,iBAAPl1B,GAAmBi+B,GAAOA,EAAI75B,OAAS,GAA+C,IAA1C4J,EAAOhO,GAAGF,iBAAiBE,GAAIoE,OACvH65B,EAAMjwB,EAAOhO,GAAGhB,cAAcgB,GACrBi+B,GAAsB,IAAfA,EAAI75B,SACpB65B,EAAMA,EAAI,KAGVj+B,IAAOi+B,EAAYj+B,EAEhBi+B,EACT,CACA,SAASC,EAASl+B,EAAIyB,GACpB,MAAM+M,EAASR,EAAOQ,OAAOwiB,YAC7BhxB,EAAK+R,EAAkB/R,IACpBD,QAAQo+B,IACLA,IACFA,EAAM9tB,UAAU5O,EAAW,MAAQ,aAAa+M,EAAO4vB,cAAcxyB,MAAM,MACrD,WAAlBuyB,EAAME,UAAsBF,EAAM18B,SAAWA,GAC7CuM,EAAOQ,OAAOqP,eAAiB7P,EAAO2L,SACxCwkB,EAAM9tB,UAAUrC,EAAOgoB,SAAW,MAAQ,UAAUxnB,EAAO8vB,aAInE,CACA,SAAS7lB,IAEP,MAAMwY,OACJA,EAAMC,OACNA,GACEljB,EAAOgjB,WACX,GAAIhjB,EAAOQ,OAAO+J,KAGhB,OAFA2lB,EAAShN,GAAQ,QACjBgN,EAASjN,GAAQ,GAGnBiN,EAAShN,EAAQljB,EAAOoS,cAAgBpS,EAAOQ,OAAO8J,QACtD4lB,EAASjN,EAAQjjB,EAAOqS,QAAUrS,EAAOQ,OAAO8J,OAClD,CACA,SAASimB,EAAY/8B,GACnBA,EAAE8oB,mBACEtc,EAAOoS,aAAgBpS,EAAOQ,OAAO+J,MAASvK,EAAOQ,OAAO8J,UAChEtK,EAAO0Y,YACPvQ,EAAK,kBACP,CACA,SAASqoB,EAAYh9B,GACnBA,EAAE8oB,mBACEtc,EAAOqS,OAAUrS,EAAOQ,OAAO+J,MAASvK,EAAOQ,OAAO8J,UAC1DtK,EAAOoY,YACPjQ,EAAK,kBACP,CACA,SAASye,IACP,MAAMpmB,EAASR,EAAOQ,OAAOwiB,WAK7B,GAJAhjB,EAAOQ,OAAOwiB,WAAaiL,GAA0BjuB,EAAQA,EAAOglB,eAAehC,WAAYhjB,EAAOQ,OAAOwiB,WAAY,CACvHC,OAAQ,qBACRC,OAAQ,wBAEJ1iB,EAAOyiB,SAAUziB,EAAO0iB,OAAS,OACvC,IAAID,EAAS+M,EAAMxvB,EAAOyiB,QACtBC,EAAS8M,EAAMxvB,EAAO0iB,QAC1B1pB,OAAOwR,OAAOhL,EAAOgjB,WAAY,CAC/BC,SACAC,WAEFD,EAASlf,EAAkBkf,GAC3BC,EAASnf,EAAkBmf,GAC3B,MAAMuN,EAAa,CAACz+B,EAAI6O,KACtB,GAAI7O,EAAI,CACN,GAAIwO,EAAOkwB,UAAY1+B,EAAG+P,QAAQ,6CAA+C/P,EAAGhB,cAAc,OAAQ,CACxG,MAAM2/B,EAAS5/B,SAASwJ,cAAc,OACtCyJ,EAAa2sB,EAnGN,ifAoGP3+B,EAAG4+B,YAAYD,EAAO3/B,cAAc,QACpC2/B,EAAOhoB,QACT,CACA3W,EAAGU,iBAAiB,QAAiB,SAARmO,EAAiB2vB,EAAcD,EAC9D,EACKvwB,EAAO2L,SAAW3Z,GACrBA,EAAGqQ,UAAUlJ,OAAOqH,EAAO8vB,UAAU1yB,MAAM,OAG/CqlB,EAAOlxB,QAAQC,GAAMy+B,EAAWz+B,EAAI,SACpCkxB,EAAOnxB,QAAQC,GAAMy+B,EAAWz+B,EAAI,QACtC,CACA,SAAS45B,IACP,IAAI3I,OACFA,EAAMC,OACNA,GACEljB,EAAOgjB,WACXC,EAASlf,EAAkBkf,GAC3BC,EAASnf,EAAkBmf,GAC3B,MAAM2N,EAAgB,CAAC7+B,EAAI6O,KACzB7O,EAAGiI,oBAAoB,QAAiB,SAAR4G,EAAiB2vB,EAAcD,GAC/Dv+B,EAAGqQ,UAAUsG,UAAU3I,EAAOQ,OAAOwiB,WAAWoN,cAAcxyB,MAAM,OAEtEqlB,EAAOlxB,QAAQC,GAAM6+B,EAAc7+B,EAAI,SACvCkxB,EAAOnxB,QAAQC,GAAM6+B,EAAc7+B,EAAI,QACzC,CAtHAy3B,EAAa,CACXzG,WAAY,CACVC,OAAQ,KACRC,OAAQ,KACRwN,UAAU,EACVI,aAAa,EACbV,cAAe,yBACfW,YAAa,uBACbT,UAAW,qBACXU,wBAAyB,gCAG7BhxB,EAAOgjB,WAAa,CAClBC,OAAQ,KACRC,OAAQ,MAyGVjc,EAAG,OAAQ,MACgC,IAArCjH,EAAOQ,OAAOwiB,WAAWrX,QAE3B+Z,KAEAkB,IACAnc,OAGJxD,EAAG,8BAA+B,KAChCwD,MAEFxD,EAAG,UAAW,KACZ2kB,MAEF3kB,EAAG,iBAAkB,KACnB,IAAIgc,OACFA,EAAMC,OACNA,GACEljB,EAAOgjB,WACXC,EAASlf,EAAkBkf,GAC3BC,EAASnf,EAAkBmf,GACvBljB,EAAO2L,QACTlB,IAGF,IAAIwY,KAAWC,GAAQhsB,OAAOlF,KAAQA,GAAID,QAAQC,GAAMA,EAAGqQ,UAAUlJ,IAAI6G,EAAOQ,OAAOwiB,WAAWsN,cAEpGrpB,EAAG,QAAS,CAACgqB,EAAIz9B,KACf,IAAIyvB,OACFA,EAAMC,OACNA,GACEljB,EAAOgjB,WACXC,EAASlf,EAAkBkf,GAC3BC,EAASnf,EAAkBmf,GAC3B,MAAMjG,EAAWzpB,EAAE4E,OACnB,IAAI84B,EAAiBhO,EAAO3c,SAAS0W,IAAagG,EAAO1c,SAAS0W,GAClE,GAAIjd,EAAOgJ,YAAckoB,EAAgB,CACvC,MAAM97B,EAAO5B,EAAE4B,MAAQ5B,EAAEuqB,cAAgBvqB,EAAEuqB,eACvC3oB,IACF87B,EAAiB97B,EAAKme,KAAK6B,GAAU6N,EAAO1c,SAAS6O,IAAW8N,EAAO3c,SAAS6O,IAEpF,CACA,GAAIpV,EAAOQ,OAAOwiB,WAAW8N,cAAgBI,EAAgB,CAC3D,GAAIlxB,EAAOmxB,YAAcnxB,EAAOQ,OAAO2wB,YAAcnxB,EAAOQ,OAAO2wB,WAAWC,YAAcpxB,EAAOmxB,WAAWn/B,KAAOirB,GAAYjd,EAAOmxB,WAAWn/B,GAAG0W,SAASuU,IAAY,OAC3K,IAAIoU,EACApO,EAAO7sB,OACTi7B,EAAWpO,EAAO,GAAG5gB,UAAUqG,SAAS1I,EAAOQ,OAAOwiB,WAAW+N,aACxD7N,EAAO9sB,SAChBi7B,EAAWnO,EAAO,GAAG7gB,UAAUqG,SAAS1I,EAAOQ,OAAOwiB,WAAW+N,cAGjE5oB,GADe,IAAbkpB,EACG,iBAEA,kBAEP,IAAIpO,KAAWC,GAAQhsB,OAAOlF,KAAQA,GAAID,QAAQC,GAAMA,EAAGqQ,UAAUivB,OAAOtxB,EAAOQ,OAAOwiB,WAAW+N,aACvG,IAEF,MAKMrL,EAAU,KACd1lB,EAAOhO,GAAGqQ,UAAUlJ,OAAO6G,EAAOQ,OAAOwiB,WAAWgO,wBAAwBpzB,MAAM,MAClFguB,KAEFpyB,OAAOwR,OAAOhL,EAAOgjB,WAAY,CAC/B2C,OAVa,KACb3lB,EAAOhO,GAAGqQ,UAAUsG,UAAU3I,EAAOQ,OAAOwiB,WAAWgO,wBAAwBpzB,MAAM,MACrFgpB,IACAnc,KAQAib,UACAjb,SACAmc,OACAgF,WAEJ,CC5MA,SAAS2F,GAAkBnvB,EAAU,IACnC,MAAO,IAAIA,EAAQE,OAAOlP,QAAQ,oBAAqB,QACtDA,QAAQ,KAAM,MACjB,CCCA,SAASo+B,IAAWxxB,OAClBA,EAAMypB,aACNA,EAAYxiB,GACZA,EAAEkB,KACFA,IAEA,MAAMspB,EAAM,oBAqCZ,IAAIC,EApCJjI,EAAa,CACX0H,WAAY,CACVn/B,GAAI,KACJ2/B,cAAe,OACfP,WAAW,EACXN,aAAa,EACbc,aAAc,KACdC,kBAAmB,KACnBC,eAAgB,KAChBC,aAAc,KACdC,qBAAqB,EACrBx7B,KAAM,UAENy7B,gBAAgB,EAChBC,mBAAoB,EACpBC,sBAAuBC,GAAUA,EACjCC,oBAAqBD,GAAUA,EAC/BE,YAAa,GAAGb,WAChBc,kBAAmB,GAAGd,kBACtBe,cAAe,GAAGf,KAClBgB,aAAc,GAAGhB,YACjBiB,WAAY,GAAGjB,UACfV,YAAa,GAAGU,WAChBkB,qBAAsB,GAAGlB,qBACzBmB,yBAA0B,GAAGnB,yBAC7BoB,eAAgB,GAAGpB,cACnBnB,UAAW,GAAGmB,SACdqB,gBAAiB,GAAGrB,eACpBsB,cAAe,GAAGtB,aAClBuB,wBAAyB,GAAGvB,gBAGhCzxB,EAAOmxB,WAAa,CAClBn/B,GAAI,KACJihC,QAAS,IAGX,IAAIC,EAAqB,EACzB,SAASC,IACP,OAAQnzB,EAAOQ,OAAO2wB,WAAWn/B,KAAOgO,EAAOmxB,WAAWn/B,IAAMwF,MAAMC,QAAQuI,EAAOmxB,WAAWn/B,KAAuC,IAAhCgO,EAAOmxB,WAAWn/B,GAAGoE,MAC9H,CACA,SAASg9B,EAAeC,EAAUC,GAChC,MAAMf,kBACJA,GACEvyB,EAAOQ,OAAO2wB,WACbkC,IACLA,EAAWA,GAAyB,SAAbC,EAAsB,WAAa,QAAtC,qBAElBD,EAAShxB,UAAUlJ,IAAI,GAAGo5B,KAAqBe,MAC/CD,EAAWA,GAAyB,SAAbC,EAAsB,WAAa,QAAtC,oBAElBD,EAAShxB,UAAUlJ,IAAI,GAAGo5B,KAAqBe,KAAYA,KAGjE,CAWA,SAASC,EAAc//B,GACrB,MAAM6/B,EAAW7/B,EAAE4E,OAAO2Q,QAAQwoB,GAAkBvxB,EAAOQ,OAAO2wB,WAAWmB,cAC7E,IAAKe,EACH,OAEF7/B,EAAE8oB,iBACF,MAAM3lB,EAAQ2M,EAAa+vB,GAAYrzB,EAAOQ,OAAO6N,eACrD,GAAIrO,EAAOQ,OAAO+J,KAAM,CACtB,GAAIvK,EAAOwK,YAAc7T,EAAO,OAChC,MAAM68B,GAnBgBta,EAmBiBlZ,EAAOwK,UAnBbrL,EAmBwBxI,EAnBbP,EAmBoB4J,EAAOsJ,OAAOlT,QAjBhF+I,GAAwB/I,KACM,GAF9B8iB,GAAwB9iB,GAGf,OACE+I,IAAc+Z,EAAY,EAC5B,gBADF,GAeiB,SAAlBsa,EACFxzB,EAAOoY,YACoB,aAAlBob,EACTxzB,EAAO0Y,YAEP1Y,EAAO4X,YAAYjhB,EAEvB,MACEqJ,EAAO8W,QAAQngB,GA5BnB,IAA0BuiB,EAAW/Z,EAAW/I,CA8BhD,CACA,SAASqU,IAEP,MAAMc,EAAMvL,EAAOuL,IACb/K,EAASR,EAAOQ,OAAO2wB,WAC7B,GAAIgC,IAAwB,OAC5B,IAGIpyB,EACAuT,EAJAtiB,EAAKgO,EAAOmxB,WAAWn/B,GAC3BA,EAAK+R,EAAkB/R,GAIvB,MAAM6Z,EAAe7L,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAAU3L,EAAO0L,QAAQpC,OAAOlT,OAAS4J,EAAOsJ,OAAOlT,OAC9GwC,EAAQoH,EAAOQ,OAAO+J,KAAO5V,KAAKkV,KAAKgC,EAAe7L,EAAOQ,OAAO6N,gBAAkBrO,EAAO8L,SAAS1V,OAY5G,GAXI4J,EAAOQ,OAAO+J,MAChB+J,EAAgBtU,EAAOuU,mBAAqB,EAC5CxT,EAAUf,EAAOQ,OAAO6N,eAAiB,EAAI1Z,KAAKC,MAAMoL,EAAOwK,UAAYxK,EAAOQ,OAAO6N,gBAAkBrO,EAAOwK,gBAC7E,IAArBxK,EAAOyP,WACvB1O,EAAUf,EAAOyP,UACjB6E,EAAgBtU,EAAOwU,oBAEvBF,EAAgBtU,EAAOsU,eAAiB,EACxCvT,EAAUf,EAAO8J,aAAe,GAGd,YAAhBtJ,EAAOhK,MAAsBwJ,EAAOmxB,WAAW8B,SAAWjzB,EAAOmxB,WAAW8B,QAAQ78B,OAAS,EAAG,CAClG,MAAM68B,EAAUjzB,EAAOmxB,WAAW8B,QAClC,IAAIQ,EACAta,EACAua,EAsBJ,GArBIlzB,EAAOyxB,iBACTP,EAAa7tB,EAAiBovB,EAAQ,GAAIjzB,EAAO6K,eAAiB,QAAU,UAC5E7Y,EAAGD,QAAQo+B,IACTA,EAAMz1B,MAAMsF,EAAO6K,eAAiB,QAAU,UAAe6mB,GAAclxB,EAAO0xB,mBAAqB,GAA7C,OAExD1xB,EAAO0xB,mBAAqB,QAAuB1yB,IAAlB8U,IACnC4e,GAAsBnyB,GAAWuT,GAAiB,GAC9C4e,EAAqB1yB,EAAO0xB,mBAAqB,EACnDgB,EAAqB1yB,EAAO0xB,mBAAqB,EACxCgB,EAAqB,IAC9BA,EAAqB,IAGzBO,EAAa9+B,KAAKwM,IAAIJ,EAAUmyB,EAAoB,GACpD/Z,EAAYsa,GAAc9+B,KAAKkD,IAAIo7B,EAAQ78B,OAAQoK,EAAO0xB,oBAAsB,GAChFwB,GAAYva,EAAYsa,GAAc,GAExCR,EAAQlhC,QAAQshC,IACd,MAAMM,EAAkB,IAAI,CAAC,GAAI,QAAS,aAAc,QAAS,aAAc,SAASj8B,IAAIk8B,GAAU,GAAGpzB,EAAO+xB,oBAAoBqB,MAAWl8B,IAAI2M,GAAkB,iBAANA,GAAkBA,EAAEkC,SAAS,KAAOlC,EAAEzG,MAAM,KAAOyG,GAAGwvB,OACrNR,EAAShxB,UAAUsG,UAAUgrB,KAE3B3hC,EAAGoE,OAAS,EACd68B,EAAQlhC,QAAQ+hC,IACd,MAAMC,EAAczwB,EAAawwB,GAC7BC,IAAgBhzB,EAClB+yB,EAAOzxB,UAAUlJ,OAAOqH,EAAO+xB,kBAAkB30B,MAAM,MAC9CoC,EAAOgJ,WAChB8qB,EAAOn5B,aAAa,OAAQ,UAE1B6F,EAAOyxB,iBACL8B,GAAeN,GAAcM,GAAe5a,GAC9C2a,EAAOzxB,UAAUlJ,OAAO,GAAGqH,EAAO+xB,yBAAyB30B,MAAM,MAE/Dm2B,IAAgBN,GAClBL,EAAeU,EAAQ,QAErBC,IAAgB5a,GAClBia,EAAeU,EAAQ,eAIxB,CACL,MAAMA,EAASb,EAAQlyB,GASvB,GARI+yB,GACFA,EAAOzxB,UAAUlJ,OAAOqH,EAAO+xB,kBAAkB30B,MAAM,MAErDoC,EAAOgJ,WACTiqB,EAAQlhC,QAAQ,CAACshC,EAAUU,KACzBV,EAAS14B,aAAa,OAAQo5B,IAAgBhzB,EAAU,gBAAkB,YAG1EP,EAAOyxB,eAAgB,CACzB,MAAM+B,EAAuBf,EAAQQ,GAC/BQ,EAAsBhB,EAAQ9Z,GACpC,IAAK,IAAIzkB,EAAI++B,EAAY/+B,GAAKykB,EAAWzkB,GAAK,EACxCu+B,EAAQv+B,IACVu+B,EAAQv+B,GAAG2N,UAAUlJ,OAAO,GAAGqH,EAAO+xB,yBAAyB30B,MAAM,MAGzEw1B,EAAeY,EAAsB,QACrCZ,EAAea,EAAqB,OACtC,CACF,CACA,GAAIzzB,EAAOyxB,eAAgB,CACzB,MAAMiC,EAAuBv/B,KAAKkD,IAAIo7B,EAAQ78B,OAAQoK,EAAO0xB,mBAAqB,GAC5EiC,GAAiBzC,EAAawC,EAAuBxC,GAAc,EAAIgC,EAAWhC,EAClF0C,EAAa7oB,EAAM,QAAU,OACnC0nB,EAAQlhC,QAAQ+hC,IACdA,EAAOp5B,MAAMsF,EAAO6K,eAAiBupB,EAAa,OAAS,GAAGD,OAElE,CACF,CACAniC,EAAGD,QAAQ,CAACo+B,EAAOkE,KASjB,GARoB,aAAhB7zB,EAAOhK,OACT25B,EAAMr+B,iBAAiBy/B,GAAkB/wB,EAAOiyB,eAAe1gC,QAAQuiC,IACrEA,EAAW9iC,YAAcgP,EAAO2xB,sBAAsBpxB,EAAU,KAElEovB,EAAMr+B,iBAAiBy/B,GAAkB/wB,EAAOkyB,aAAa3gC,QAAQwiC,IACnEA,EAAQ/iC,YAAcgP,EAAO6xB,oBAAoBz5B,MAGjC,gBAAhB4H,EAAOhK,KAAwB,CACjC,IAAIg+B,EAEFA,EADEh0B,EAAOwxB,oBACchyB,EAAO6K,eAAiB,WAAa,aAErC7K,EAAO6K,eAAiB,aAAe,WAEhE,MAAM4pB,GAAS1zB,EAAU,GAAKnI,EAC9B,IAAI87B,EAAS,EACTC,EAAS,EACgB,eAAzBH,EACFE,EAASD,EAETE,EAASF,EAEXtE,EAAMr+B,iBAAiBy/B,GAAkB/wB,EAAOmyB,uBAAuB5gC,QAAQ6iC,IAC7EA,EAAWl6B,MAAMgD,UAAY,6BAA6Bg3B,aAAkBC,KAC5EC,EAAWl6B,MAAMmtB,mBAAqB,GAAG7nB,EAAOQ,OAAOC,WAE3D,CACoB,WAAhBD,EAAOhK,MAAqBgK,EAAOuxB,cACrC/tB,EAAamsB,EAAO3vB,EAAOuxB,aAAa/xB,EAAQe,EAAU,EAAGnI,IAC1C,IAAfy7B,GAAkBlsB,EAAK,mBAAoBgoB,KAE5B,IAAfkE,GAAkBlsB,EAAK,mBAAoBgoB,GAC/ChoB,EAAK,mBAAoBgoB,IAEvBnwB,EAAOQ,OAAOqP,eAAiB7P,EAAO2L,SACxCwkB,EAAM9tB,UAAUrC,EAAOgoB,SAAW,MAAQ,UAAUxnB,EAAO8vB,YAGjE,CACA,SAASuE,IAEP,MAAMr0B,EAASR,EAAOQ,OAAO2wB,WAC7B,GAAIgC,IAAwB,OAC5B,MAAMtnB,EAAe7L,EAAO0L,SAAW1L,EAAOQ,OAAOkL,QAAQC,QAAU3L,EAAO0L,QAAQpC,OAAOlT,OAAS4J,EAAO+J,MAAQ/J,EAAOQ,OAAOuJ,KAAKC,KAAO,EAAIhK,EAAOsJ,OAAOlT,OAASzB,KAAKkV,KAAK7J,EAAOQ,OAAOuJ,KAAKC,MAAQhK,EAAOsJ,OAAOlT,OAC7N,IAAIpE,EAAKgO,EAAOmxB,WAAWn/B,GAC3BA,EAAK+R,EAAkB/R,GACvB,IAAI8iC,EAAiB,GACrB,GAAoB,YAAhBt0B,EAAOhK,KAAoB,CAC7B,IAAIu+B,EAAkB/0B,EAAOQ,OAAO+J,KAAO5V,KAAKkV,KAAKgC,EAAe7L,EAAOQ,OAAO6N,gBAAkBrO,EAAO8L,SAAS1V,OAChH4J,EAAOQ,OAAOuY,UAAY/Y,EAAOQ,OAAOuY,SAASpN,SAAWopB,EAAkBlpB,IAChFkpB,EAAkBlpB,GAEpB,IAAK,IAAInX,EAAI,EAAGA,EAAIqgC,EAAiBrgC,GAAK,EACpC8L,EAAOoxB,aACTkD,GAAkBt0B,EAAOoxB,aAAanzB,KAAKuB,EAAQtL,EAAG8L,EAAO8xB,aAG7DwC,GAAkB,IAAIt0B,EAAOmxB,iBAAiB3xB,EAAOgJ,UAAY,gBAAkB,aAAaxI,EAAO8xB,kBAAkB9xB,EAAOmxB,gBAGtI,CACoB,aAAhBnxB,EAAOhK,OAEPs+B,EADEt0B,EAAOsxB,eACQtxB,EAAOsxB,eAAerzB,KAAKuB,EAAQQ,EAAOiyB,aAAcjyB,EAAOkyB,YAE/D,gBAAgBlyB,EAAOiyB,wCAAkDjyB,EAAOkyB,uBAGjF,gBAAhBlyB,EAAOhK,OAEPs+B,EADEt0B,EAAOqxB,kBACQrxB,EAAOqxB,kBAAkBpzB,KAAKuB,EAAQQ,EAAOmyB,sBAE7C,gBAAgBnyB,EAAOmyB,iCAG5C3yB,EAAOmxB,WAAW8B,QAAU,GAC5BjhC,EAAGD,QAAQo+B,IACW,WAAhB3vB,EAAOhK,MACTwN,EAAamsB,EAAO2E,GAAkB,IAEpB,YAAhBt0B,EAAOhK,MACTwJ,EAAOmxB,WAAW8B,QAAQr8B,QAAQu5B,EAAMr+B,iBAAiBy/B,GAAkB/wB,EAAO8xB,iBAGlE,WAAhB9xB,EAAOhK,MACT2R,EAAK,mBAAoBnW,EAAG,GAEhC,CACA,SAAS40B,IACP5mB,EAAOQ,OAAO2wB,WAAalD,GAA0BjuB,EAAQA,EAAOglB,eAAemM,WAAYnxB,EAAOQ,OAAO2wB,WAAY,CACvHn/B,GAAI,sBAEN,MAAMwO,EAASR,EAAOQ,OAAO2wB,WAC7B,IAAK3wB,EAAOxO,GAAI,OAChB,IAAIA,EACqB,iBAAdwO,EAAOxO,IAAmBgO,EAAOgJ,YAC1ChX,EAAKgO,EAAOhO,GAAGhB,cAAcwP,EAAOxO,KAEjCA,GAA2B,iBAAdwO,EAAOxO,KACvBA,EAAK,IAAIjB,SAASe,iBAAiB0O,EAAOxO,MAEvCA,IACHA,EAAKwO,EAAOxO,IAETA,GAAoB,IAAdA,EAAGoE,SACV4J,EAAOQ,OAAO0mB,mBAA0C,iBAAd1mB,EAAOxO,IAAmBwF,MAAMC,QAAQzF,IAAOA,EAAGoE,OAAS,IACvGpE,EAAK,IAAIgO,EAAOhO,GAAGF,iBAAiB0O,EAAOxO,KAEvCA,EAAGoE,OAAS,IACdpE,EAAKA,EAAGuhB,KAAK4c,GACP1sB,EAAe0sB,EAAO,WAAW,KAAOnwB,EAAOhO,MAKrDwF,MAAMC,QAAQzF,IAAqB,IAAdA,EAAGoE,SAAcpE,EAAKA,EAAG,IAClDwH,OAAOwR,OAAOhL,EAAOmxB,WAAY,CAC/Bn/B,OAEFA,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,IACW,YAAhB3vB,EAAOhK,MAAsBgK,EAAO4wB,WACtCjB,EAAM9tB,UAAUlJ,QAAQqH,EAAOqyB,gBAAkB,IAAIj1B,MAAM,MAE7DuyB,EAAM9tB,UAAUlJ,IAAIqH,EAAOgyB,cAAgBhyB,EAAOhK,MAClD25B,EAAM9tB,UAAUlJ,IAAI6G,EAAO6K,eAAiBrK,EAAOsyB,gBAAkBtyB,EAAOuyB,eACxD,YAAhBvyB,EAAOhK,MAAsBgK,EAAOyxB,iBACtC9B,EAAM9tB,UAAUlJ,IAAI,GAAGqH,EAAOgyB,gBAAgBhyB,EAAOhK,gBACrD08B,EAAqB,EACjB1yB,EAAO0xB,mBAAqB,IAC9B1xB,EAAO0xB,mBAAqB,IAGZ,gBAAhB1xB,EAAOhK,MAA0BgK,EAAOwxB,qBAC1C7B,EAAM9tB,UAAUlJ,IAAIqH,EAAOoyB,0BAEzBpyB,EAAO4wB,WACTjB,EAAMz9B,iBAAiB,QAAS6gC,GAE7BvzB,EAAO2L,SACVwkB,EAAM9tB,UAAUlJ,IAAIqH,EAAO8vB,aAGjC,CACA,SAAS1E,IACP,MAAMprB,EAASR,EAAOQ,OAAO2wB,WAC7B,GAAIgC,IAAwB,OAC5B,IAAInhC,EAAKgO,EAAOmxB,WAAWn/B,GACvBA,IACFA,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,IACTA,EAAM9tB,UAAUsG,OAAOnI,EAAOuwB,aAC9BZ,EAAM9tB,UAAUsG,OAAOnI,EAAOgyB,cAAgBhyB,EAAOhK,MACrD25B,EAAM9tB,UAAUsG,OAAO3I,EAAO6K,eAAiBrK,EAAOsyB,gBAAkBtyB,EAAOuyB,eAC3EvyB,EAAO4wB,YACTjB,EAAM9tB,UAAUsG,WAAWnI,EAAOqyB,gBAAkB,IAAIj1B,MAAM,MAC9DuyB,EAAMl2B,oBAAoB,QAASs5B,OAIrCvzB,EAAOmxB,WAAW8B,SAASjzB,EAAOmxB,WAAW8B,QAAQlhC,QAAQo+B,GAASA,EAAM9tB,UAAUsG,UAAUnI,EAAO+xB,kBAAkB30B,MAAM,MACrI,CACAqJ,EAAG,kBAAmB,KACpB,IAAKjH,EAAOmxB,aAAenxB,EAAOmxB,WAAWn/B,GAAI,OACjD,MAAMwO,EAASR,EAAOQ,OAAO2wB,WAC7B,IAAIn/B,GACFA,GACEgO,EAAOmxB,WACXn/B,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,IACTA,EAAM9tB,UAAUsG,OAAOnI,EAAOsyB,gBAAiBtyB,EAAOuyB,eACtD5C,EAAM9tB,UAAUlJ,IAAI6G,EAAO6K,eAAiBrK,EAAOsyB,gBAAkBtyB,EAAOuyB,mBAGhF9rB,EAAG,OAAQ,MACgC,IAArCjH,EAAOQ,OAAO2wB,WAAWxlB,QAE3B+Z,KAEAkB,IACAiO,IACApqB,OAGJxD,EAAG,oBAAqB,UACU,IAArBjH,EAAOyP,WAChBhF,MAGJxD,EAAG,kBAAmB,KACpBwD,MAEFxD,EAAG,uBAAwB,KACzB4tB,IACApqB,MAEFxD,EAAG,UAAW,KACZ2kB,MAEF3kB,EAAG,iBAAkB,KACnB,IAAIjV,GACFA,GACEgO,EAAOmxB,WACPn/B,IACFA,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,GAASA,EAAM9tB,UAAUrC,EAAO2L,QAAU,SAAW,OAAO3L,EAAOQ,OAAO2wB,WAAWb,eAGpGrpB,EAAG,cAAe,KAChBwD,MAEFxD,EAAG,QAAS,CAACgqB,EAAIz9B,KACf,MAAMypB,EAAWzpB,EAAE4E,OACbpG,EAAK+R,EAAkB/D,EAAOmxB,WAAWn/B,IAC/C,GAAIgO,EAAOQ,OAAO2wB,WAAWn/B,IAAMgO,EAAOQ,OAAO2wB,WAAWL,aAAe9+B,GAAMA,EAAGoE,OAAS,IAAM6mB,EAAS5a,UAAUqG,SAAS1I,EAAOQ,OAAO2wB,WAAWmB,aAAc,CACpK,GAAItyB,EAAOgjB,aAAehjB,EAAOgjB,WAAWC,QAAUhG,IAAajd,EAAOgjB,WAAWC,QAAUjjB,EAAOgjB,WAAWE,QAAUjG,IAAajd,EAAOgjB,WAAWE,QAAS,OACnK,MAAMmO,EAAWr/B,EAAG,GAAGqQ,UAAUqG,SAAS1I,EAAOQ,OAAO2wB,WAAWJ,aAEjE5oB,GADe,IAAbkpB,EACG,iBAEA,kBAEPr/B,EAAGD,QAAQo+B,GAASA,EAAM9tB,UAAUivB,OAAOtxB,EAAOQ,OAAO2wB,WAAWJ,aACtE,IAEF,MAaMrL,EAAU,KACd1lB,EAAOhO,GAAGqQ,UAAUlJ,IAAI6G,EAAOQ,OAAO2wB,WAAW6B,yBACjD,IAAIhhC,GACFA,GACEgO,EAAOmxB,WACPn/B,IACFA,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,GAASA,EAAM9tB,UAAUlJ,IAAI6G,EAAOQ,OAAO2wB,WAAW6B,2BAEnEpH,KAEFpyB,OAAOwR,OAAOhL,EAAOmxB,WAAY,CAC/BxL,OAzBa,KACb3lB,EAAOhO,GAAGqQ,UAAUsG,OAAO3I,EAAOQ,OAAO2wB,WAAW6B,yBACpD,IAAIhhC,GACFA,GACEgO,EAAOmxB,WACPn/B,IACFA,EAAK+R,EAAkB/R,GACvBA,EAAGD,QAAQo+B,GAASA,EAAM9tB,UAAUsG,OAAO3I,EAAOQ,OAAO2wB,WAAW6B,2BAEtEpM,IACAiO,IACApqB,KAeAib,UACAmP,SACApqB,SACAmc,OACAgF,WAEJ,CCrcA,SAASoJ,IAAKh1B,OACZA,EAAMypB,aACNA,EAAYxiB,GACZA,EAAEkB,KACFA,IAEA,MAAMlP,EAAS6D,IACf2sB,EAAa,CACXwL,KAAM,CACJtpB,SAAS,EACTupB,qBAAqB,EACrBC,SAAU,EACV5O,SAAU,EACV6O,gBAAgB,EAChB9D,QAAQ,EACR+D,eAAgB,wBAChBC,iBAAkB,yBAGtBt1B,EAAOi1B,KAAO,CACZtpB,SAAS,GAEX,IAAI4pB,EAAe,EACfC,GAAY,EACZC,GAAqB,EACrBC,EAAgB,CAClB5f,EAAG,EACHC,EAAG,GAGL,IAAI4f,EACAC,EACJ,MAAMC,EAAU,GACVC,EAAU,CACdC,QAAS,EACTC,QAAS,EACTztB,aAAS/I,EACTy2B,gBAAYz2B,EACZ02B,iBAAa12B,EACbsJ,aAAStJ,EACT22B,iBAAa32B,EACb21B,SAAU,GAENiB,EAAQ,CACZ1Y,eAAWle,EACXme,aAASne,EACTmf,cAAUnf,EACVof,cAAUpf,EACV62B,UAAM72B,EACN82B,UAAM92B,EACN+2B,UAAM/2B,EACNg3B,UAAMh3B,EACN+F,WAAO/F,EACPiG,YAAQjG,EACR0c,YAAQ1c,EACRsf,YAAQtf,EACRi3B,aAAc,CAAA,EACdC,eAAgB,CAAA,GAEZ7M,EAAW,CACf/T,OAAGtW,EACHuW,OAAGvW,EACHm3B,mBAAen3B,EACfo3B,mBAAep3B,EACfq3B,cAAUr3B,GAEZ,IAsJIs3B,EAtJArC,EAAQ,EAcZ,SAASsC,IACP,GAAIlB,EAAQz/B,OAAS,EAAG,OAAO,EAC/B,MAAM4gC,EAAKnB,EAAQ,GAAGhZ,MAChBoa,EAAKpB,EAAQ,GAAGhX,MAChBqY,EAAKrB,EAAQ,GAAGhZ,MAChBsa,EAAKtB,EAAQ,GAAGhX,MAEtB,OADiBlqB,KAAKyrB,MAAM8W,EAAKF,IAAO,GAAKG,EAAKF,IAAO,EAE3D,CACA,SAASG,IACP,MAAM52B,EAASR,EAAOQ,OAAOy0B,KACvBE,EAAWW,EAAQK,YAAYnhB,aAAa,qBAAuBxU,EAAO20B,SAChF,GAAI30B,EAAO00B,qBAAuBY,EAAQhtB,SAAWgtB,EAAQhtB,QAAQuuB,aAAc,CACjF,MAAMC,EAAgBxB,EAAQhtB,QAAQuuB,aAAevB,EAAQhtB,QAAQoF,YACrE,OAAOvZ,KAAKkD,IAAIy/B,EAAenC,EACjC,CACA,OAAOA,CACT,CAYA,SAASoC,EAAiB/jC,GACxB,MAAMkmB,EAHC1Z,EAAOgJ,UAAY,eAAiB,IAAIhJ,EAAOQ,OAAOyI,aAI7D,QAAIzV,EAAE4E,OAAO2J,QAAQ2X,IACjB1Z,EAAOsJ,OAAOpS,OAAOqR,GAAWA,EAAQG,SAASlV,EAAE4E,SAAShC,OAAS,CAE3E,CACA,SAASohC,EAAyBhkC,GAChC,MAAMoO,EAAW,IAAI5B,EAAOQ,OAAOy0B,KAAKI,iBACxC,QAAI7hC,EAAE4E,OAAO2J,QAAQH,IACjB,IAAI5B,EAAO0rB,OAAO55B,iBAAiB8P,IAAW1K,OAAOgvB,GAAeA,EAAYxd,SAASlV,EAAE4E,SAAShC,OAAS,CAEnH,CAGA,SAASqhC,EAAejkC,GAItB,GAHsB,UAAlBA,EAAEwpB,aACJ6Y,EAAQ5tB,OAAO,EAAG4tB,EAAQz/B,SAEvBmhC,EAAiB/jC,GAAI,OAC1B,MAAMgN,EAASR,EAAOQ,OAAOy0B,KAI7B,GAHAU,GAAqB,EACrBC,GAAmB,EACnBC,EAAQj/B,KAAKpD,KACTqiC,EAAQz/B,OAAS,GAArB,CAKA,GAFAu/B,GAAqB,EACrBG,EAAQ4B,WAAaX,KAChBjB,EAAQvtB,QAAS,CACpButB,EAAQvtB,QAAU/U,EAAE4E,OAAO2Q,QAAQ,IAAI/I,EAAOQ,OAAOyI,4BAChD6sB,EAAQvtB,UAASutB,EAAQvtB,QAAUvI,EAAOsJ,OAAOtJ,EAAO8J,cAC7D,IAAIhB,EAAUgtB,EAAQvtB,QAAQvX,cAAc,IAAIwP,EAAO60B,kBAUvD,GATIvsB,IACFA,EAAUA,EAAQhX,iBAAiB,kDAAkD,IAEvFgkC,EAAQhtB,QAAUA,EAEhBgtB,EAAQK,YADNrtB,EACoBrF,EAAeqyB,EAAQhtB,QAAS,IAAItI,EAAO60B,kBAAkB,QAE7D71B,GAEnBs2B,EAAQK,YAEX,YADAL,EAAQhtB,aAAUtJ,GAGpBs2B,EAAQX,SAAWiC,GACrB,CACA,GAAItB,EAAQhtB,QAAS,CACnB,MAAOitB,EAASC,GA3DpB,WACE,GAAIH,EAAQz/B,OAAS,EAAG,MAAO,CAC7B0f,EAAG,KACHC,EAAG,MAEL,MAAMrT,EAAMozB,EAAQhtB,QAAQnG,wBAC5B,MAAO,EAAEkzB,EAAQ,GAAGhZ,OAASgZ,EAAQ,GAAGhZ,MAAQgZ,EAAQ,GAAGhZ,OAAS,EAAIna,EAAIoT,EAAI7c,EAAOgK,SAAWsyB,GAAeM,EAAQ,GAAGhX,OAASgX,EAAQ,GAAGhX,MAAQgX,EAAQ,GAAGhX,OAAS,EAAInc,EAAIqT,EAAI9c,EAAO8J,SAAWwyB,EAC5M,CAoD+BoC,GAC3B7B,EAAQC,QAAUA,EAClBD,EAAQE,QAAUA,EAClBF,EAAQhtB,QAAQpO,MAAMmtB,mBAAqB,KAC7C,CACA2N,GAAY,CA5BZ,CA6BF,CACA,SAASoC,EAAgBpkC,GACvB,IAAK+jC,EAAiB/jC,GAAI,OAC1B,MAAMgN,EAASR,EAAOQ,OAAOy0B,KACvBA,EAAOj1B,EAAOi1B,KACd4C,EAAehC,EAAQiC,UAAUC,GAAYA,EAAStb,YAAcjpB,EAAEipB,WACxEob,GAAgB,IAAGhC,EAAQgC,GAAgBrkC,GAC3CqiC,EAAQz/B,OAAS,IAGrBw/B,GAAmB,EACnBE,EAAQkC,UAAYjB,IACfjB,EAAQhtB,UAGbmsB,EAAKR,MAAQqB,EAAQkC,UAAYlC,EAAQ4B,WAAanC,EAClDN,EAAKR,MAAQqB,EAAQX,WACvBF,EAAKR,MAAQqB,EAAQX,SAAW,GAAKF,EAAKR,MAAQqB,EAAQX,SAAW,IAAM,IAEzEF,EAAKR,MAAQj0B,EAAO+lB,WACtB0O,EAAKR,MAAQj0B,EAAO+lB,SAAW,GAAK/lB,EAAO+lB,SAAW0O,EAAKR,MAAQ,IAAM,IAE3EqB,EAAQhtB,QAAQpO,MAAMgD,UAAY,4BAA4Bu3B,EAAKR,UACrE,CACA,SAASwD,EAAazkC,GACpB,IAAK+jC,EAAiB/jC,GAAI,OAC1B,GAAsB,UAAlBA,EAAEwpB,aAAsC,eAAXxpB,EAAEgD,KAAuB,OAC1D,MAAMgK,EAASR,EAAOQ,OAAOy0B,KACvBA,EAAOj1B,EAAOi1B,KACd4C,EAAehC,EAAQiC,UAAUC,GAAYA,EAAStb,YAAcjpB,EAAEipB,WACxEob,GAAgB,GAAGhC,EAAQ5tB,OAAO4vB,EAAc,GAC/ClC,GAAuBC,IAG5BD,GAAqB,EACrBC,GAAmB,EACdE,EAAQhtB,UACbmsB,EAAKR,MAAQ9/B,KAAKwM,IAAIxM,KAAKkD,IAAIo9B,EAAKR,MAAOqB,EAAQX,UAAW30B,EAAO+lB,UACrEuP,EAAQhtB,QAAQpO,MAAMmtB,mBAAqB,GAAG7nB,EAAOQ,OAAOC,UAC5Dq1B,EAAQhtB,QAAQpO,MAAMgD,UAAY,4BAA4Bu3B,EAAKR,SACnEc,EAAeN,EAAKR,MACpBe,GAAY,EACRP,EAAKR,MAAQ,GAAKqB,EAAQvtB,QAC5ButB,EAAQvtB,QAAQlG,UAAUlJ,IAAI,GAAGqH,EAAO80B,oBAC/BL,EAAKR,OAAS,GAAKqB,EAAQvtB,SACpCutB,EAAQvtB,QAAQlG,UAAUsG,OAAO,GAAGnI,EAAO80B,oBAE1B,IAAfL,EAAKR,QACPqB,EAAQC,QAAU,EAClBD,EAAQE,QAAU,EAClBF,EAAQvtB,aAAU/I,IAEtB,CAEA,SAAS+f,IACPvf,EAAOyb,gBAAgB8E,iCAAkC,CAC3D,CAmBA,SAASZ,EAAYnsB,GACnB,MACM0kC,EADiC,UAAlB1kC,EAAEwpB,aACYhd,EAAOQ,OAAOy0B,KAAKG,eACtD,IAAKmC,EAAiB/jC,KAAOgkC,EAAyBhkC,GACpD,OAEF,MAAMyhC,EAAOj1B,EAAOi1B,KACpB,IAAKa,EAAQhtB,QACX,OAEF,IAAKstB,EAAM1Y,YAAcoY,EAAQvtB,QAE/B,YADI2vB,GAAYC,EAAY3kC,IAG9B,GAAI0kC,EAEF,YADAC,EAAY3kC,GAGT4iC,EAAMzY,UACTyY,EAAM7wB,MAAQuwB,EAAQhtB,QAAQoF,aAAe4nB,EAAQhtB,QAAQ6B,YAC7DyrB,EAAM3wB,OAASqwB,EAAQhtB,QAAQ8H,cAAgBklB,EAAQhtB,QAAQ8B,aAC/DwrB,EAAMla,OAAShf,EAAa44B,EAAQK,YAAa,MAAQ,EACzDC,EAAMtX,OAAS5hB,EAAa44B,EAAQK,YAAa,MAAQ,EACzDL,EAAQG,WAAaH,EAAQvtB,QAAQ2F,YACrC4nB,EAAQI,YAAcJ,EAAQvtB,QAAQqI,aACtCklB,EAAQK,YAAYz7B,MAAMmtB,mBAAqB,OAGjD,MAAMuQ,EAAchC,EAAM7wB,MAAQ0vB,EAAKR,MACjC4D,EAAejC,EAAM3wB,OAASwvB,EAAKR,MACzC2B,EAAMC,KAAO1hC,KAAKkD,IAAIi+B,EAAQG,WAAa,EAAImC,EAAc,EAAG,GAChEhC,EAAMG,MAAQH,EAAMC,KACpBD,EAAME,KAAO3hC,KAAKkD,IAAIi+B,EAAQI,YAAc,EAAImC,EAAe,EAAG,GAClEjC,EAAMI,MAAQJ,EAAME,KACpBF,EAAMM,eAAe5gB,EAAI+f,EAAQz/B,OAAS,EAAIy/B,EAAQ,GAAGhZ,MAAQrpB,EAAEqpB,MACnEuZ,EAAMM,eAAe3gB,EAAI8f,EAAQz/B,OAAS,EAAIy/B,EAAQ,GAAGhX,MAAQrrB,EAAEqrB,MAKnE,GAJoBlqB,KAAKwM,IAAIxM,KAAKyZ,IAAIgoB,EAAMM,eAAe5gB,EAAIsgB,EAAMK,aAAa3gB,GAAInhB,KAAKyZ,IAAIgoB,EAAMM,eAAe3gB,EAAIqgB,EAAMK,aAAa1gB,IACzH,IAChB/V,EAAOye,YAAa,IAEjB2X,EAAMzY,UAAY6X,EAAW,CAChC,GAAIx1B,EAAO6K,iBAAmBlW,KAAKC,MAAMwhC,EAAMC,QAAU1hC,KAAKC,MAAMwhC,EAAMla,SAAWka,EAAMM,eAAe5gB,EAAIsgB,EAAMK,aAAa3gB,GAAKnhB,KAAKC,MAAMwhC,EAAMG,QAAU5hC,KAAKC,MAAMwhC,EAAMla,SAAWka,EAAMM,eAAe5gB,EAAIsgB,EAAMK,aAAa3gB,GAGvO,OAFAsgB,EAAM1Y,WAAY,OAClB6B,IAGF,IAAKvf,EAAO6K,iBAAmBlW,KAAKC,MAAMwhC,EAAME,QAAU3hC,KAAKC,MAAMwhC,EAAMtX,SAAWsX,EAAMM,eAAe3gB,EAAIqgB,EAAMK,aAAa1gB,GAAKphB,KAAKC,MAAMwhC,EAAMI,QAAU7hC,KAAKC,MAAMwhC,EAAMtX,SAAWsX,EAAMM,eAAe3gB,EAAIqgB,EAAMK,aAAa1gB,GAGxO,OAFAqgB,EAAM1Y,WAAY,OAClB6B,GAGJ,CACI/rB,EAAEgtB,YACJhtB,EAAE8oB,iBAEJ9oB,EAAEmtB,kBAxEFnkB,aAAas6B,GACb92B,EAAOyb,gBAAgB8E,iCAAkC,EACzDuW,EAAwBv6B,WAAW,KAC7ByD,EAAOuH,WACXgY,MAsEF6W,EAAMzY,SAAU,EAChB,MAAM2a,GAAcrD,EAAKR,MAAQc,IAAiBO,EAAQX,SAAWn1B,EAAOQ,OAAOy0B,KAAK1O,WAClFwP,QACJA,EAAOC,QACPA,GACEF,EACJM,EAAMzX,SAAWyX,EAAMM,eAAe5gB,EAAIsgB,EAAMK,aAAa3gB,EAAIsgB,EAAMla,OAASoc,GAAclC,EAAM7wB,MAAkB,EAAVwwB,GAC5GK,EAAMxX,SAAWwX,EAAMM,eAAe3gB,EAAIqgB,EAAMK,aAAa1gB,EAAIqgB,EAAMtX,OAASwZ,GAAclC,EAAM3wB,OAAmB,EAAVuwB,GACzGI,EAAMzX,SAAWyX,EAAMC,OACzBD,EAAMzX,SAAWyX,EAAMC,KAAO,GAAKD,EAAMC,KAAOD,EAAMzX,SAAW,IAAM,IAErEyX,EAAMzX,SAAWyX,EAAMG,OACzBH,EAAMzX,SAAWyX,EAAMG,KAAO,GAAKH,EAAMzX,SAAWyX,EAAMG,KAAO,IAAM,IAErEH,EAAMxX,SAAWwX,EAAME,OACzBF,EAAMxX,SAAWwX,EAAME,KAAO,GAAKF,EAAME,KAAOF,EAAMxX,SAAW,IAAM,IAErEwX,EAAMxX,SAAWwX,EAAMI,OACzBJ,EAAMxX,SAAWwX,EAAMI,KAAO,GAAKJ,EAAMxX,SAAWwX,EAAMI,KAAO,IAAM,IAIpE3M,EAAS8M,gBAAe9M,EAAS8M,cAAgBP,EAAMM,eAAe5gB,GACtE+T,EAAS+M,gBAAe/M,EAAS+M,cAAgBR,EAAMM,eAAe3gB,GACtE8T,EAASgN,WAAUhN,EAASgN,SAAWx6B,KAAKrD,OACjD6wB,EAAS/T,GAAKsgB,EAAMM,eAAe5gB,EAAI+T,EAAS8M,gBAAkBt6B,KAAKrD,MAAQ6wB,EAASgN,UAAY,EACpGhN,EAAS9T,GAAKqgB,EAAMM,eAAe3gB,EAAI8T,EAAS+M,gBAAkBv6B,KAAKrD,MAAQ6wB,EAASgN,UAAY,EAChGliC,KAAKyZ,IAAIgoB,EAAMM,eAAe5gB,EAAI+T,EAAS8M,eAAiB,IAAG9M,EAAS/T,EAAI,GAC5EnhB,KAAKyZ,IAAIgoB,EAAMM,eAAe3gB,EAAI8T,EAAS+M,eAAiB,IAAG/M,EAAS9T,EAAI,GAChF8T,EAAS8M,cAAgBP,EAAMM,eAAe5gB,EAC9C+T,EAAS+M,cAAgBR,EAAMM,eAAe3gB,EAC9C8T,EAASgN,SAAWx6B,KAAKrD,MACzB88B,EAAQK,YAAYz7B,MAAMgD,UAAY,eAAe04B,EAAMzX,eAAeyX,EAAMxX,eAClF,CAqCA,SAAS2Z,IACP,MAAMtD,EAAOj1B,EAAOi1B,KAChBa,EAAQvtB,SAAWvI,EAAO8J,cAAgB9J,EAAOsJ,OAAOxP,QAAQg8B,EAAQvtB,WACtEutB,EAAQhtB,UACVgtB,EAAQhtB,QAAQpO,MAAMgD,UAAY,+BAEhCo4B,EAAQK,cACVL,EAAQK,YAAYz7B,MAAMgD,UAAY,sBAExCo4B,EAAQvtB,QAAQlG,UAAUsG,OAAO,GAAG3I,EAAOQ,OAAOy0B,KAAKK,oBACvDL,EAAKR,MAAQ,EACbc,EAAe,EACfO,EAAQvtB,aAAU/I,EAClBs2B,EAAQhtB,aAAUtJ,EAClBs2B,EAAQK,iBAAc32B,EACtBs2B,EAAQC,QAAU,EAClBD,EAAQE,QAAU,EAEtB,CACA,SAASmC,EAAY3kC,GAEnB,GAAI+hC,GAAgB,IAAMO,EAAQK,YAAa,OAC/C,IAAKoB,EAAiB/jC,KAAOgkC,EAAyBhkC,GAAI,OAC1D,MAAMqa,EAAmB5U,EAAOiD,iBAAiB45B,EAAQK,aAAaz4B,UAChEN,EAAS,IAAInE,EAAOu/B,UAAU3qB,GACpC,IAAK4nB,EAUH,OATAA,GAAqB,EACrBC,EAAc5f,EAAItiB,EAAEilC,QACpB/C,EAAc3f,EAAIviB,EAAEklC,QACpBtC,EAAMla,OAAS9e,EAAO5J,EACtB4iC,EAAMtX,OAAS1hB,EAAOu7B,EACtBvC,EAAM7wB,MAAQuwB,EAAQhtB,QAAQoF,aAAe4nB,EAAQhtB,QAAQ6B,YAC7DyrB,EAAM3wB,OAASqwB,EAAQhtB,QAAQ8H,cAAgBklB,EAAQhtB,QAAQ8B,aAC/DkrB,EAAQG,WAAaH,EAAQvtB,QAAQ2F,iBACrC4nB,EAAQI,YAAcJ,EAAQvtB,QAAQqI,cAGxC,MAAMgoB,GArXoB,GAqXVplC,EAAEilC,QAAU/C,EAAc5f,GACpC+iB,GAtXoB,GAsXVrlC,EAAEklC,QAAUhD,EAAc3f,GACpCqiB,EAAchC,EAAM7wB,MAAQgwB,EAC5B8C,EAAejC,EAAM3wB,OAAS8vB,EAC9BU,EAAaH,EAAQG,WACrBC,EAAcJ,EAAQI,YACtBG,EAAO1hC,KAAKkD,IAAIo+B,EAAa,EAAImC,EAAc,EAAG,GAClD7B,GAAQF,EACRC,EAAO3hC,KAAKkD,IAAIq+B,EAAc,EAAImC,EAAe,EAAG,GACpD7B,GAAQF,EACRwC,EAAOnkC,KAAKwM,IAAIxM,KAAKkD,IAAIu+B,EAAMla,OAAS0c,EAAQrC,GAAOF,GACvD0C,EAAOpkC,KAAKwM,IAAIxM,KAAKkD,IAAIu+B,EAAMtX,OAAS+Z,EAAQrC,GAAOF,GAC7DR,EAAQK,YAAYz7B,MAAMmtB,mBAAqB,MAC/CiO,EAAQK,YAAYz7B,MAAMgD,UAAY,eAAeo7B,QAAWC,UAChErD,EAAc5f,EAAItiB,EAAEilC,QACpB/C,EAAc3f,EAAIviB,EAAEklC,QACpBtC,EAAMla,OAAS4c,EACf1C,EAAMtX,OAASia,EACf3C,EAAMzX,SAAWma,EACjB1C,EAAMxX,SAAWma,CACnB,CACA,SAASC,EAAOxlC,GACd,MAAMyhC,EAAOj1B,EAAOi1B,KACdz0B,EAASR,EAAOQ,OAAOy0B,KAC7B,IAAKa,EAAQvtB,QAAS,CAChB/U,GAAKA,EAAE4E,SACT09B,EAAQvtB,QAAU/U,EAAE4E,OAAO2Q,QAAQ,IAAI/I,EAAOQ,OAAOyI,6BAElD6sB,EAAQvtB,UACPvI,EAAOQ,OAAOkL,SAAW1L,EAAOQ,OAAOkL,QAAQC,SAAW3L,EAAO0L,QACnEoqB,EAAQvtB,QAAU7G,EAAgB1B,EAAOqL,SAAU,IAAIrL,EAAOQ,OAAOwT,oBAAoB,GAEzF8hB,EAAQvtB,QAAUvI,EAAOsJ,OAAOtJ,EAAO8J,cAG3C,IAAIhB,EAAUgtB,EAAQvtB,QAAQvX,cAAc,IAAIwP,EAAO60B,kBACnDvsB,IACFA,EAAUA,EAAQhX,iBAAiB,kDAAkD,IAEvFgkC,EAAQhtB,QAAUA,EAEhBgtB,EAAQK,YADNrtB,EACoBrF,EAAeqyB,EAAQhtB,QAAS,IAAItI,EAAO60B,kBAAkB,QAE7D71B,CAE1B,CACA,IAAKs2B,EAAQhtB,UAAYgtB,EAAQK,YAAa,OAM9C,IAAI8C,EACAC,EACAC,EACAC,EACAlZ,EACAC,EACAkZ,EACAC,EACAC,EACAC,EACApB,EACAC,EACAoB,EACAC,EACAC,EACAC,EACA3D,EACAC,EAtBAl2B,EAAOQ,OAAOyM,UAChBjN,EAAOU,UAAUhG,MAAM+G,SAAW,SAClCzB,EAAOU,UAAUhG,MAAMypB,YAAc,QAEvC2R,EAAQvtB,QAAQlG,UAAUlJ,IAAI,GAAGqH,EAAO80B,yBAmBJ,IAAzBc,EAAMK,aAAa3gB,GAAqBtiB,GACjDylC,EAASzlC,EAAEqpB,MACXqc,EAAS1lC,EAAEqrB,QAEXoa,EAAS7C,EAAMK,aAAa3gB,EAC5BojB,EAAS9C,EAAMK,aAAa1gB,GAE9B,MAAM8jB,EAAYtE,EACZuE,EAA8B,iBAANtmC,EAAiBA,EAAI,KAC9B,IAAjB+hC,GAAsBuE,IACxBb,OAASz5B,EACT05B,OAAS15B,EACT42B,EAAMK,aAAa3gB,OAAItW,EACvB42B,EAAMK,aAAa1gB,OAAIvW,GAEzB,MAAM21B,EAAWiC,IACjBnC,EAAKR,MAAQqF,GAAkB3E,EAC/BI,EAAeuE,GAAkB3E,GAC7B3hC,GAAwB,IAAjB+hC,GAAsBuE,GAmC/BT,EAAa,EACbC,EAAa,IAnCbrD,EAAaH,EAAQvtB,QAAQ2F,YAC7BgoB,EAAcJ,EAAQvtB,QAAQqI,aAC9BuoB,EAAU12B,EAAcqzB,EAAQvtB,SAASpF,KAAOlK,EAAOgK,QACvDm2B,EAAU32B,EAAcqzB,EAAQvtB,SAASrF,IAAMjK,EAAO8J,QACtDmd,EAAQiZ,EAAUlD,EAAa,EAAIgD,EACnC9Y,EAAQiZ,EAAUlD,EAAc,EAAIgD,EACpCK,EAAazD,EAAQhtB,QAAQoF,aAAe4nB,EAAQhtB,QAAQ6B,YAC5D6uB,EAAc1D,EAAQhtB,QAAQ8H,cAAgBklB,EAAQhtB,QAAQ8B,aAC9DwtB,EAAcmB,EAAatE,EAAKR,MAChC4D,EAAemB,EAAcvE,EAAKR,MAClCgF,EAAgB9kC,KAAKkD,IAAIo+B,EAAa,EAAImC,EAAc,EAAG,GAC3DsB,EAAgB/kC,KAAKkD,IAAIq+B,EAAc,EAAImC,EAAe,EAAG,GAC7DsB,GAAiBF,EACjBG,GAAiBF,EACbG,EAAY,GAAKC,GAA4C,iBAAnB1D,EAAMzX,UAAmD,iBAAnByX,EAAMxX,UACxFya,EAAajD,EAAMzX,SAAWsW,EAAKR,MAAQoF,EAC3CP,EAAalD,EAAMxX,SAAWqW,EAAKR,MAAQoF,IAE3CR,EAAanZ,EAAQ+U,EAAKR,MAC1B6E,EAAanZ,EAAQ8U,EAAKR,OAExB4E,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,GAEXL,EAAaI,IACfJ,EAAaI,GAEXJ,EAAaM,IACfN,EAAaM,IAMbE,GAAiC,IAAf7E,EAAKR,QACzBqB,EAAQC,QAAU,EAClBD,EAAQE,QAAU,GAEpBI,EAAMzX,SAAW0a,EACjBjD,EAAMxX,SAAW0a,EACjBxD,EAAQK,YAAYz7B,MAAMmtB,mBAAqB,QAC/CiO,EAAQK,YAAYz7B,MAAMgD,UAAY,eAAe27B,QAAiBC,SACtExD,EAAQhtB,QAAQpO,MAAMmtB,mBAAqB,QAC3CiO,EAAQhtB,QAAQpO,MAAMgD,UAAY,4BAA4Bu3B,EAAKR,QACrE,CACA,SAASsF,IACP,MAAM9E,EAAOj1B,EAAOi1B,KACdz0B,EAASR,EAAOQ,OAAOy0B,KAC7B,IAAKa,EAAQvtB,QAAS,CAChBvI,EAAOQ,OAAOkL,SAAW1L,EAAOQ,OAAOkL,QAAQC,SAAW3L,EAAO0L,QACnEoqB,EAAQvtB,QAAU7G,EAAgB1B,EAAOqL,SAAU,IAAIrL,EAAOQ,OAAOwT,oBAAoB,GAEzF8hB,EAAQvtB,QAAUvI,EAAOsJ,OAAOtJ,EAAO8J,aAEzC,IAAIhB,EAAUgtB,EAAQvtB,QAAQvX,cAAc,IAAIwP,EAAO60B,kBACnDvsB,IACFA,EAAUA,EAAQhX,iBAAiB,kDAAkD,IAEvFgkC,EAAQhtB,QAAUA,EAEhBgtB,EAAQK,YADNrtB,EACoBrF,EAAeqyB,EAAQhtB,QAAS,IAAItI,EAAO60B,kBAAkB,QAE7D71B,CAE1B,CACKs2B,EAAQhtB,SAAYgtB,EAAQK,cAC7Bn2B,EAAOQ,OAAOyM,UAChBjN,EAAOU,UAAUhG,MAAM+G,SAAW,GAClCzB,EAAOU,UAAUhG,MAAMypB,YAAc,IAEvC8Q,EAAKR,MAAQ,EACbc,EAAe,EACfa,EAAMzX,cAAWnf,EACjB42B,EAAMxX,cAAWpf,EACjB42B,EAAMK,aAAa3gB,OAAItW,EACvB42B,EAAMK,aAAa1gB,OAAIvW,EACvBs2B,EAAQK,YAAYz7B,MAAMmtB,mBAAqB,QAC/CiO,EAAQK,YAAYz7B,MAAMgD,UAAY,qBACtCo4B,EAAQhtB,QAAQpO,MAAMmtB,mBAAqB,QAC3CiO,EAAQhtB,QAAQpO,MAAMgD,UAAY,8BAClCo4B,EAAQvtB,QAAQlG,UAAUsG,OAAO,GAAGnI,EAAO80B,oBAC3CQ,EAAQvtB,aAAU/I,EAClBs2B,EAAQC,QAAU,EAClBD,EAAQE,QAAU,EACdh2B,EAAOQ,OAAOy0B,KAAKG,iBACrBM,EAAgB,CACd5f,EAAG,EACHC,EAAG,GAED0f,IACFA,GAAqB,EACrBW,EAAMla,OAAS,EACfka,EAAMtX,OAAS,IAGrB,CAGA,SAASkb,EAAWxmC,GAClB,MAAMyhC,EAAOj1B,EAAOi1B,KAChBA,EAAKR,OAAwB,IAAfQ,EAAKR,MAErBsF,IAGAf,EAAOxlC,EAEX,CACA,SAASymC,IASP,MAAO,CACLC,kBATsBl6B,EAAOQ,OAAO2mB,kBAAmB,CACvD5C,SAAS,EACTH,SAAS,GAQT+V,2BANgCn6B,EAAOQ,OAAO2mB,kBAAmB,CACjE5C,SAAS,EACTH,SAAS,GAMb,CAGA,SAASuB,IACP,MAAMsP,EAAOj1B,EAAOi1B,KACpB,GAAIA,EAAKtpB,QAAS,OAClBspB,EAAKtpB,SAAU,EACf,MAAMuuB,gBACJA,EAAeC,0BACfA,GACEF,IAGJj6B,EAAOU,UAAUhO,iBAAiB,cAAe+kC,EAAgByC,GACjEl6B,EAAOU,UAAUhO,iBAAiB,cAAeklC,EAAiBuC,GAClE,CAAC,YAAa,gBAAiB,cAAcpoC,QAAQ63B,IACnD5pB,EAAOU,UAAUhO,iBAAiBk3B,EAAWqO,EAAciC,KAI7Dl6B,EAAOU,UAAUhO,iBAAiB,cAAeitB,EAAawa,EAChE,CACA,SAASzU,IACP,MAAMuP,EAAOj1B,EAAOi1B,KACpB,IAAKA,EAAKtpB,QAAS,OACnBspB,EAAKtpB,SAAU,EACf,MAAMuuB,gBACJA,EAAeC,0BACfA,GACEF,IAGJj6B,EAAOU,UAAUzG,oBAAoB,cAAew9B,EAAgByC,GACpEl6B,EAAOU,UAAUzG,oBAAoB,cAAe29B,EAAiBuC,GACrE,CAAC,YAAa,gBAAiB,cAAcpoC,QAAQ63B,IACnD5pB,EAAOU,UAAUzG,oBAAoB2vB,EAAWqO,EAAciC,KAIhEl6B,EAAOU,UAAUzG,oBAAoB,cAAe0lB,EAAawa,EACnE,CA5kBA3gC,OAAO4gC,eAAep6B,EAAOi1B,KAAM,QAAS,CAC1CoF,IAAG,IACM5F,EAET,GAAA6F,CAAIppC,GACF,GAAIujC,IAAUvjC,EAAO,CACnB,MAAM4X,EAAUgtB,EAAQhtB,QAClBP,EAAUutB,EAAQvtB,QACxBJ,EAAK,aAAcjX,EAAO4X,EAASP,EACrC,CACAksB,EAAQvjC,CACV,IAkkBF+V,EAAG,OAAQ,KACLjH,EAAOQ,OAAOy0B,KAAKtpB,SACrBga,MAGJ1e,EAAG,UAAW,KACZye,MAEFze,EAAG,aAAc,CAACgqB,EAAIz9B,KACfwM,EAAOi1B,KAAKtpB,SArbnB,SAAsBnY,GACpB,MAAM2R,EAASnF,EAAOmF,OACtB,IAAK2wB,EAAQhtB,QAAS,OACtB,GAAIstB,EAAM1Y,UAAW,OACjBvY,EAAOE,SAAW7R,EAAEgtB,YAAYhtB,EAAE8oB,iBACtC8Z,EAAM1Y,WAAY,EAClB,MAAMlW,EAAQquB,EAAQz/B,OAAS,EAAIy/B,EAAQ,GAAKriC,EAChD4iC,EAAMK,aAAa3gB,EAAItO,EAAMqV,MAC7BuZ,EAAMK,aAAa1gB,EAAIvO,EAAMqX,KAC/B,CA6aEtC,CAAa/oB,KAEfyT,EAAG,WAAY,CAACgqB,EAAIz9B,KACbwM,EAAOi1B,KAAKtpB,SApVnB,WACE,MAAMspB,EAAOj1B,EAAOi1B,KAEpB,GADAY,EAAQz/B,OAAS,GACZ0/B,EAAQhtB,QAAS,OACtB,IAAKstB,EAAM1Y,YAAc0Y,EAAMzY,QAG7B,OAFAyY,EAAM1Y,WAAY,OAClB0Y,EAAMzY,SAAU,GAGlByY,EAAM1Y,WAAY,EAClB0Y,EAAMzY,SAAU,EAChB,IAAI4c,EAAoB,IACpBC,EAAoB,IACxB,MAAMC,EAAoB5Q,EAAS/T,EAAIykB,EACjCG,EAAetE,EAAMzX,SAAW8b,EAChCE,EAAoB9Q,EAAS9T,EAAIykB,EACjCI,EAAexE,EAAMxX,SAAW+b,EAGnB,IAAf9Q,EAAS/T,IAASykB,EAAoB5lC,KAAKyZ,KAAKssB,EAAetE,EAAMzX,UAAYkL,EAAS/T,IAC3E,IAAf+T,EAAS9T,IAASykB,EAAoB7lC,KAAKyZ,KAAKwsB,EAAexE,EAAMxX,UAAYiL,EAAS9T,IAC9F,MAAM8kB,EAAmBlmC,KAAKwM,IAAIo5B,EAAmBC,GACrDpE,EAAMzX,SAAW+b,EACjBtE,EAAMxX,SAAWgc,EAEjB,MAAMxC,EAAchC,EAAM7wB,MAAQ0vB,EAAKR,MACjC4D,EAAejC,EAAM3wB,OAASwvB,EAAKR,MACzC2B,EAAMC,KAAO1hC,KAAKkD,IAAIi+B,EAAQG,WAAa,EAAImC,EAAc,EAAG,GAChEhC,EAAMG,MAAQH,EAAMC,KACpBD,EAAME,KAAO3hC,KAAKkD,IAAIi+B,EAAQI,YAAc,EAAImC,EAAe,EAAG,GAClEjC,EAAMI,MAAQJ,EAAME,KACpBF,EAAMzX,SAAWhqB,KAAKwM,IAAIxM,KAAKkD,IAAIu+B,EAAMzX,SAAUyX,EAAMG,MAAOH,EAAMC,MACtED,EAAMxX,SAAWjqB,KAAKwM,IAAIxM,KAAKkD,IAAIu+B,EAAMxX,SAAUwX,EAAMI,MAAOJ,EAAME,MACtER,EAAQK,YAAYz7B,MAAMmtB,mBAAqB,GAAGgT,MAClD/E,EAAQK,YAAYz7B,MAAMgD,UAAY,eAAe04B,EAAMzX,eAAeyX,EAAMxX,eAClF,CAkTEqD,KAEFhb,EAAG,YAAa,CAACgqB,EAAIz9B,MACdwM,EAAOqW,WAAarW,EAAOQ,OAAOy0B,KAAKtpB,SAAW3L,EAAOi1B,KAAKtpB,SAAW3L,EAAOQ,OAAOy0B,KAAK3D,QAC/F0I,EAAWxmC,KAGfyT,EAAG,gBAAiB,KACdjH,EAAOi1B,KAAKtpB,SAAW3L,EAAOQ,OAAOy0B,KAAKtpB,SAC5C4sB,MAGJtxB,EAAG,cAAe,KACZjH,EAAOi1B,KAAKtpB,SAAW3L,EAAOQ,OAAOy0B,KAAKtpB,SAAW3L,EAAOQ,OAAOyM,SACrEsrB,MAGJ/+B,OAAOwR,OAAOhL,EAAOi1B,KAAM,CACzBtP,SACAD,UACAoV,GAAI9B,EACJ+B,IAAKhB,EACLzI,OAAQ0I,GAEZ,CCprBO,SAASpT,KACdoU,KAMF,WACE,MAAMC,EAAgB7pC,IAChB8pC,EAAWD,GAAevpC,SAASC,MAAMwpC,YAAYC,UACrDC,EAAkB,UAElBC,EAAUvqC,SAASC,cAAcqqC,GAEvC,IAAKC,EAIH,YADAnpC,QAAQwB,KAAK,YAAa0nC,GAI5B,MAAME,EAAkB,CAACvpC,EAAIwpC,KAC3B,MAAMC,EAA0B,IAArBxiC,OAAOmtB,YAClBp0B,EAAG0I,MAAM+K,OAAYg2B,EAAKD,EAAR,MAIpBD,EAAgBD,EADE,IAGlB,MAAMhS,EAAU,CAACkI,GAAYwD,IACxBkG,IACH5R,EAAQ1yB,KAAKm5B,IACbzG,EAAQ1yB,KAAK21B,KAGA,IAAIpD,GAAOkS,EAAiB,CACzC/R,UACA2L,MAAM,EACNjS,WAAY,CACVC,OAAQ,sBACRC,OAAQ,uBAEV2J,SAAU,CACRlhB,SAAS,GAEXwlB,WAAY,CACVn/B,GAAI,uBAGV,CA/CE0pC,GACAC,KACAC,IACF,CAiDA,MAAMZ,GAA0B,KAC9B,MAAM3oC,EAAStB,SAASC,cAAc,iBACjCqB,GAGLA,EAAOK,iBAAiB,QAAS,SAAU8U,GACzC,MAAM3V,EAAYhB,IACZgrC,EAAUxpC,EAAOH,QAAQ2pC,QAC/BlpC,MAAMkpC,EAAS,CACbjpC,OAAQ,OACRC,QAAS,CACP,cAAehB,EACf,eAAgB,sBAGjBiB,KAAMC,GAAaA,EAASC,QAC5BF,KAAMG,IACL,MAAM6oC,EAAa,aACbC,EAAW,WACb9oC,EAAKC,SACPb,EAAOgQ,UAAUjP,QAAQ0oC,EAAYC,GAErC1pC,EAAOgQ,UAAUjP,QAAQ2oC,EAAUD,KAGtCzoC,MAAOjB,IACND,QAAQC,MAAM,SAAUA,GACxBC,EAAOc,UACL,mEAER,IAGIwoC,GAAgB,KACpB,MAAMK,EAAejrC,SAASoE,eAAe,cAC7C,IAAK6mC,EAAc,OAEnB,MAAMC,EAAaD,EAAahrC,cAAc,qBACxCkrC,EAASF,EAAa9pC,QAAQgqC,OAC9BC,EAAYtrC,IAEZurC,EAAmBjkC,MAAOkkC,IAC9B,MAAMC,EAAW,IAAIC,SACrBD,EAAShiB,OAAO,eAAgB+hB,GAChCC,EAAShiB,OAAO,SAAU,oBAC1BgiB,EAAShiB,OAAO,sBAAuB6hB,GACvCH,EAAa35B,UAAUlJ,IAAI,YAC3B,MAAMpG,QAAiBJ,MAAMupC,EAAQ,CACnCtpC,OAAQ,OACRoH,KAAMsiC,EACNE,YAAa,gBAEf,IAAKzpC,EAAS0pC,GAMZ,MAJAT,EAAa35B,UAAUlJ,IAAI,YAC3B6iC,EAAa35B,UAAUlJ,IAAI,SAC3B6iC,EAAa35B,UAAUsG,OAAO,WAC9BqzB,EAAa35B,UAAUsG,OAAO,WACxB,IAAI1X,MAAM,8BAA8B8B,EAAS2pC,UAEzD,MAAMzpC,QAAaF,EAASC,OAC5BgpC,EAAa35B,UAAUsG,OAAO,YAC9BqzB,EAAa35B,UAAUjP,QAAQ,iBAAkB,UAC7CH,EAAK0pC,UACPX,EAAa35B,UAAUlJ,IAAI,WAC3B6iC,EAAa35B,UAAUsG,OAAO,YAE5B1V,EAAK2pC,UACPZ,EAAa35B,UAAUlJ,IAAI,WAC3B6iC,EAAa35B,UAAUsG,OAAO,aA+B5Bk0B,EAAYb,EAAahrC,cAAc,sBACzC6rC,GACFA,EAAUnqC,iBAAiB,QAAU8U,IACnCA,EAAM8U,iBACN,MAAM+f,EAAcJ,EAAW/qC,MAC/BkrC,EAAiBC,KAKrB,MAAMS,EAAYd,EAAahrC,cAAc,sBACzC8rC,GACFA,EAAUpqC,iBAAiB,QAAU8U,IACnCA,EAAM8U,iBACN,MAAM+f,EAAcJ,EAAW/qC,MAC/BkrC,EAAiBC,KAKrB,MAAMU,EAAYf,EAAahrC,cAAc,sBACzC+rC,GACFA,EAAUrqC,iBAAiB,QAAU8U,IACnCA,EAAM8U,iBAlDenkB,WACvB,MAAMmkC,EAAW,IAAIC,SACrBD,EAAShiB,OAAO,SAAU,UAC1BgiB,EAAShiB,OAAO,sBAAuB6hB,GAEvCH,EAAa35B,UAAUlJ,IAAI,YAC3B,MAAMpG,QAAiBJ,MAAMupC,EAAQ,CACnCtpC,OAAQ,OACRoH,KAAMsiC,EACNE,YAAa,gBAEf,IAAKzpC,EAAS0pC,GAMZ,MAJAT,EAAa35B,UAAUlJ,IAAI,YAC3B6iC,EAAa35B,UAAUlJ,IAAI,SAC3B6iC,EAAa35B,UAAUsG,OAAO,WAC9BqzB,EAAa35B,UAAUsG,OAAO,WACxB,IAAI1X,MAAM,8BAA8B8B,EAAS2pC,gBAEtC3pC,EAASC,OAC5BgpC,EAAa35B,UAAUsG,OAAO,YAC9BqzB,EAAa35B,UAAUjP,QAAQ,SAAU,kBACzC4oC,EAAa35B,UAAUsG,OAAO,WAC9BqzB,EAAa35B,UAAUsG,OAAO,YA4B5Bq0B,KAIAf,GACFA,EAAWvpC,iBAAiB,SAAW8U,IACrCw0B,EAAa35B,UAAUsG,OAAO,cAK9BizB,GAAqB,KACzB,MAAMqB,EAAclsC,SAASoE,eAAe,eAC5C8nC,EAAY9pC,UAAoB8pC,EAAYvpC,UCpLhCN,QADK,uBAGf,kDClBG,SAAS8pC,KACd,MAAMC,EAAYpsC,SAASoE,eAAe,sBACpCioC,EAASrsC,SAASoE,eAAe,eAKvC,SAASkoC,IACP,MAAMppC,EAAImpC,EAAOz6B,wBACjBw6B,EAAUziC,MAAMoF,YACd,YACAnL,KAAKwM,IAAI,EAAGxM,KAAK2oC,MAAMrpC,EAAEspC,SAAW,KAExC,CAyBA,SAASC,IACPH,IAvBF,WACE,IAAII,EAAK,EACT,GAAIxkC,OAAOykC,eAAgB,CACzB,MAAMC,EAAK1kC,OAAOykC,eAElBD,EAAK9oC,KAAKwM,IACR,EACAxM,KAAK2oC,MAAMrkC,OAAOmtB,YAAcuX,EAAGl4B,OAASk4B,EAAG5sB,WAEnD,CACAosB,EAAUziC,MAAMoF,YAAY,OAAQ29B,EAAK,KAC3C,CAaEG,EACF,CAGA3kC,OAAOvG,iBAAiB,SAAU8qC,GAClCvkC,OAAOvG,iBAAiB,SAAU2qC,EAAc,CAAE9Y,SAAS,IACvDtrB,OAAOykC,iBACTzkC,OAAOykC,eAAehrC,iBAAiB,SAAU8qC,GACjDvkC,OAAOykC,eAAehrC,iBAAiB,SAAU8qC,IAE/C,mBAAoBvkC,QACtB,IAAIw1B,eAAe4O,GAActO,QAAQqO,GAS3CI,GACF,CC7DG,IAACK,GAAEC,GAAEC,GAAIrpC,GAAET,GAAEsK,GAAE/K,GAAEmlC,GAAEp2B,GAAE8B,GAAExG,GAAEmgC,GAAEC,GAAE,GAAGruB,GAAE,GAAGmG,GAAE,oEAAoEmoB,GAAE1mC,MAAMC,QAAQ,SAAS0mC,GAAEN,EAAEC,GAAG,IAAI,IAAIC,KAAKD,EAAED,EAAEE,GAAGD,EAAEC,GAAG,OAAOF,CAAC,CAAC,SAASO,GAAEP,GAAGA,GAAGA,EAAExS,YAAYwS,EAAExS,WAAWgT,YAAYR,EAAE,CAAC,SAAS1zB,GAAE2zB,EAAEC,EAAExmB,GAAG,IAAI7iB,EAAET,EAAEsK,EAAE/K,EAAE,CAAA,EAAG,IAAI+K,KAAKw/B,EAAE,OAAOx/B,EAAE7J,EAAEqpC,EAAEx/B,GAAG,OAAOA,EAAEtK,EAAE8pC,EAAEx/B,GAAG/K,EAAE+K,GAAGw/B,EAAEx/B,GAAG,GAAG+/B,UAAUloC,OAAO,IAAI5C,EAAEgH,SAAS8jC,UAAUloC,OAAO,EAAEynC,GAAEp/B,KAAK6/B,UAAU,GAAG/mB,GAAG,mBAAmBumB,GAAG,MAAMA,EAAES,aAAa,IAAIhgC,KAAKu/B,EAAES,kBAAa,IAAS/qC,EAAE+K,KAAK/K,EAAE+K,GAAGu/B,EAAES,aAAahgC,IAAI,OAAO+tB,GAAEwR,EAAEtqC,EAAEkB,EAAET,EAAE,KAAK,CAAC,SAASq4B,GAAEuR,EAAEtmB,EAAE7iB,EAAET,EAAEsK,GAAG,IAAI/K,EAAE,CAACgD,KAAKqnC,EAAEW,MAAMjnB,EAAE1d,IAAInF,EAAE+pC,IAAIxqC,EAAEyqC,IAAI,KAAKC,GAAG,KAAKC,IAAI,EAAEC,IAAI,KAAKC,IAAI,KAAK7pC,iBAAY,EAAO8pC,IAAI,MAAMxgC,IAAIw/B,GAAEx/B,EAAEygC,KAAI,EAAGC,IAAI,GAAG,OAAO,MAAM1gC,GAAG,MAAMu/B,GAAEoB,OAAOpB,GAAEoB,MAAM1rC,GAAGA,CAAC,CAAmC,SAAS2rC,GAAEtB,GAAG,OAAOA,EAAErjC,QAAQ,CAAC,SAASsb,GAAE+nB,EAAEC,GAAGzoC,KAAKmpC,MAAMX,EAAExoC,KAAK+S,QAAQ01B,CAAC,CAAC,SAASsB,GAAEvB,EAAEC,GAAG,GAAG,MAAMA,EAAE,OAAOD,EAAEc,GAAGS,GAAEvB,EAAEc,GAAGd,EAAEmB,IAAI,GAAG,KAAK,IAAI,IAAIjB,EAAED,EAAED,EAAEa,IAAItoC,OAAO0nC,IAAI,GAAG,OAAOC,EAAEF,EAAEa,IAAIZ,KAAK,MAAMC,EAAEc,IAAI,OAAOd,EAAEc,IAAI,MAAM,mBAAmBhB,EAAErnC,KAAK4oC,GAAEvB,GAAG,IAAI,CAAC,SAASwB,GAAExB,GAAG,IAAIC,EAAEC,EAAE,GAAG,OAAOF,EAAEA,EAAEc,KAAK,MAAMd,EAAEiB,IAAI,CAAC,IAAIjB,EAAEgB,IAAIhB,EAAEiB,IAAI3gB,KAAK,KAAK2f,EAAE,EAAEA,EAAED,EAAEa,IAAItoC,OAAO0nC,IAAI,GAAG,OAAOC,EAAEF,EAAEa,IAAIZ,KAAK,MAAMC,EAAEc,IAAI,CAAChB,EAAEgB,IAAIhB,EAAEiB,IAAI3gB,KAAK4f,EAAEc,IAAI,KAAK,CAAC,OAAOQ,GAAExB,EAAE,CAAC,CAAC,SAASyB,GAAEzB,KAAKA,EAAE0B,MAAM1B,EAAE0B,KAAI,IAAK7qC,GAAEkC,KAAKinC,KAAK2B,GAAEC,OAAOxrC,IAAG6pC,GAAE4B,sBAAsBzrC,GAAE6pC,GAAE4B,oBAAoBnhC,IAAGihC,GAAE,CAAC,SAASA,KAAI,IAAI,IAAI3B,EAAEE,EAAExmB,EAAEtjB,EAAEsK,EAAEo6B,EAAEp2B,EAAE8B,EAAE,EAAE3P,GAAE0B,QAAQ1B,GAAE0B,OAAOiO,GAAG3P,GAAE+xB,KAAKjzB,IAAGqqC,EAAEnpC,GAAEqC,QAAQsN,EAAE3P,GAAE0B,OAAOynC,EAAE0B,MAAMhoB,OAAE,EAAOtjB,OAAE,EAAOsK,GAAGtK,GAAG8pC,EAAEF,GAAGkB,KAAKF,IAAIlG,EAAE,GAAGp2B,EAAE,GAAGw7B,EAAE4B,OAAOpoB,EAAE4mB,GAAE,CAAA,EAAGlqC,IAAI8qC,IAAI9qC,EAAE8qC,IAAI,EAAEjB,GAAEoB,OAAOpB,GAAEoB,MAAM3nB,GAAGqoB,GAAE7B,EAAE4B,IAAIpoB,EAAEtjB,EAAE8pC,EAAE8B,IAAI9B,EAAE4B,IAAIG,aAAa,GAAG7rC,EAAEgrC,IAAI,CAAC1gC,GAAG,KAAKo6B,EAAE,MAAMp6B,EAAE6gC,GAAEnrC,GAAGsK,KAAK,GAAGtK,EAAEgrC,KAAK18B,GAAGgV,EAAEwnB,IAAI9qC,EAAE8qC,IAAIxnB,EAAEonB,GAAGD,IAAInnB,EAAEynB,KAAKznB,EAAEwoB,GAAEpH,EAAEphB,EAAEhV,GAAGtO,EAAE4qC,IAAI5qC,EAAE0qC,GAAG,KAAKpnB,EAAEsnB,KAAKtgC,GAAG8gC,GAAE9nB,KAAKioB,GAAEC,IAAI,CAAC,CAAC,SAASO,GAAEnC,EAAEC,EAAEC,EAAExmB,EAAE7iB,EAAET,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,GAAG,IAAIxG,EAAEmgC,EAAEjoB,EAAEmoB,EAAEC,EAAEC,EAAEj0B,EAAEmiB,EAAE/U,GAAGA,EAAEmnB,KAAK9uB,GAAE8W,EAAEoX,EAAE1nC,OAAO,IAAIuiC,EAAyV,SAAWkF,EAAEC,EAAEC,EAAExmB,EAAE7iB,GAAG,IAAIT,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,EAAE05B,EAAE3nC,OAAOyH,EAAEwG,EAAE25B,EAAE,EAAE,IAAIH,EAAEa,IAAI,IAAIlnC,MAAM9C,GAAGT,EAAE,EAAEA,EAAES,EAAET,IAAI,OAAOsK,EAAEu/B,EAAE7pC,KAAK,kBAAkBsK,GAAG,mBAAmBA,GAAGo6B,EAAE1kC,EAAE+pC,GAAGz/B,EAAEs/B,EAAEa,IAAIzqC,GAAG,iBAAiBsK,GAAG,iBAAiBA,GAAG,iBAAiBA,GAAGA,EAAEtJ,aAAaqR,OAAOgmB,GAAE,KAAK/tB,EAAE,KAAK,KAAK,MAAM2/B,GAAE3/B,GAAG+tB,GAAE6S,GAAE,CAAC3kC,SAAS+D,GAAG,KAAK,KAAK,MAAM,MAAMA,EAAEtJ,aAAasJ,EAAEqgC,IAAI,EAAEtS,GAAE/tB,EAAE/H,KAAK+H,EAAEigC,MAAMjgC,EAAE1E,IAAI0E,EAAEkgC,IAAIlgC,EAAEkgC,IAAI,KAAKlgC,EAAEwgC,KAAKxgC,GAAGogC,GAAGd,EAAEt/B,EAAEqgC,IAAIf,EAAEe,IAAI,EAAEprC,EAAE,UAAU+O,EAAEhE,EAAEygC,IAAIiB,GAAE1hC,EAAEw/B,EAAEpF,EAAE96B,MAAMA,KAAKrK,EAAEuqC,EAAEx7B,MAAM/O,EAAEyrC,KAAK,IAAI,MAAMzrC,GAAG,MAAMA,EAAEurC,MAAK,GAAIx8B,IAAI7N,EAAE2P,EAAE25B,IAAItpC,EAAE2P,GAAG25B,KAAK,mBAAmBz/B,EAAE/H,OAAO+H,EAAE0gC,KAAK,IAAI18B,GAAGo2B,IAAIp2B,GAAGo2B,EAAE,EAAEqF,IAAIz7B,GAAGo2B,EAAE,EAAEqF,KAAKz7B,EAAEo2B,EAAEqF,IAAIA,IAAIz/B,EAAE0gC,KAAK,KAAKpB,EAAEa,IAAIzqC,GAAG,KAAK,GAAG4J,EAAE,IAAI5J,EAAE,EAAEA,EAAEoQ,EAAEpQ,IAAI,OAAOT,EAAEuqC,EAAE9pC,OAAS,EAAET,EAAEyrC,OAAOzrC,EAAEqrC,KAAKtnB,IAAIA,EAAE6nB,GAAE5rC,IAAI0sC,GAAE1sC,EAAEA,IAAI,OAAO+jB,CAAC,CAA/hC4oB,CAAEpC,EAAED,EAAExR,EAAEqM,EAAEjS,GAAG7oB,EAAE,EAAEA,EAAE6oB,EAAE7oB,IAAI,OAAOkY,EAAEgoB,EAAEW,IAAI7gC,MAAMmgC,GAAE,GAAIjoB,EAAEipB,IAAIf,GAAE3R,EAAEvW,EAAEipB,MAAMf,GAAEloB,EAAEipB,IAAInhC,EAAEugC,EAAEwB,GAAE/B,EAAE9nB,EAAEioB,EAAEtpC,EAAET,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,GAAG65B,EAAEnoB,EAAE8oB,IAAI9oB,EAAE0oB,KAAKT,EAAES,KAAK1oB,EAAE0oB,MAAMT,EAAES,KAAK2B,GAAEpC,EAAES,IAAI,KAAK1oB,GAAG1R,EAAEzN,KAAKmf,EAAE0oB,IAAI1oB,EAAE+oB,KAAKZ,EAAEnoB,IAAI,MAAMooB,GAAG,MAAMD,IAAIC,EAAED,IAAI/zB,KAAK,EAAE4L,EAAEkpB,OAAOjB,EAAEU,MAAM3oB,EAAE2oB,IAAI/F,EAAE0H,GAAEtqB,EAAE4iB,EAAEkF,EAAE1zB,GAAG,mBAAmB4L,EAAEvf,WAAM,IAAS4nC,EAAEzF,EAAEyF,EAAEF,IAAIvF,EAAEuF,EAAEoC,aAAavqB,EAAEkpB,MAAK,GAAI,OAAOlB,EAAEc,IAAIV,EAAExF,CAAC,CAA0sB,SAAS0H,GAAExC,EAAEC,EAAEC,EAAExmB,GAAG,IAAI7iB,EAAET,EAAE,GAAG,mBAAmB4pC,EAAErnC,KAAK,CAAC,IAAI9B,EAAEmpC,EAAEa,IAAIzqC,EAAE,EAAES,GAAGT,EAAES,EAAE0B,OAAOnC,IAAIS,EAAET,KAAKS,EAAET,GAAG0qC,GAAGd,EAAEC,EAAEuC,GAAE3rC,EAAET,GAAG6pC,EAAEC,EAAExmB,IAAI,OAAOumB,CAAC,CAACD,EAAEgB,KAAKf,IAAIvmB,IAAIumB,GAAGD,EAAErnC,OAAOsnC,EAAEzS,aAAayS,EAAEsB,GAAEvB,IAAIE,EAAEwC,aAAa1C,EAAEgB,IAAIf,GAAG,OAAOA,EAAED,EAAEgB,KAAK,GAAGf,EAAEA,GAAGA,EAAEwC,kBAAkB,MAAMxC,GAAG,GAAGA,EAAEh/B,UAAU,OAAOg/B,CAAC,CAA6G,SAASmC,GAAEpC,EAAEC,EAAEC,EAAExmB,GAAG,IAAI7iB,EAAET,EAAEsK,EAAE/K,EAAEqqC,EAAEhkC,IAAI8+B,EAAEkF,EAAErnC,KAAK+L,EAAEu7B,EAAEC,GAAG15B,EAAE,MAAM9B,KAAO,EAAEA,EAAE08B,KAAK,GAAG,OAAO18B,GAAG,MAAMs7B,EAAEhkC,KAAKwK,GAAG7Q,GAAG+O,EAAE1I,KAAK8+B,GAAGp2B,EAAE/L,KAAK,OAAOunC,EAAE,GAAGxmB,GAAGlT,EAAE,EAAE,GAAG,IAAI3P,EAAEqpC,EAAE,EAAE9pC,EAAE8pC,EAAE,EAAErpC,GAAG,GAAGT,EAAE6pC,EAAE1nC,QAAQ,GAAG,OAAOmM,EAAEu7B,EAAEv/B,EAAE7J,GAAG,EAAEA,IAAIT,SAAW,EAAEsO,EAAE08B,MAAMzrC,GAAG+O,EAAE1I,KAAK8+B,GAAGp2B,EAAE/L,KAAK,OAAO+H,EAAE,OAAM,CAAE,CAAC,SAASiiC,GAAE3C,EAAEC,EAAEC,GAAG,KAAKD,EAAE,GAAGD,EAAE/9B,YAAYg+B,EAAE,MAAMC,EAAE,GAAGA,GAAGF,EAAEC,GAAG,MAAMC,EAAE,GAAG,iBAAiBA,GAAGhoB,GAAEnP,KAAKk3B,GAAGC,EAAEA,EAAE,IAAI,CAAC,SAAS0C,GAAE5C,EAAEC,EAAEC,EAAExmB,EAAE7iB,GAAG,IAAIT,EAAEsK,EAAEs/B,EAAE,GAAG,SAASC,EAAE,GAAG,iBAAiBC,EAAEF,EAAEnjC,MAAMgmC,QAAQ3C,MAAM,CAAC,GAAG,iBAAiBxmB,IAAIsmB,EAAEnjC,MAAMgmC,QAAQnpB,EAAE,IAAIA,EAAE,IAAIumB,KAAKvmB,EAAEwmB,GAAGD,KAAKC,GAAGyC,GAAE3C,EAAEnjC,MAAMojC,EAAE,IAAI,GAAGC,EAAE,IAAID,KAAKC,EAAExmB,GAAGwmB,EAAED,IAAIvmB,EAAEumB,IAAI0C,GAAE3C,EAAEnjC,MAAMojC,EAAEC,EAAED,GAAG,MAAM,GAAG,KAAKA,EAAE,IAAI,KAAKA,EAAE,GAAG7pC,EAAE6pC,IAAIA,EAAEA,EAAE1qC,QAAQulC,GAAE,OAAOp6B,EAAEu/B,EAAEz3B,cAAcy3B,EAAEv/B,KAAKs/B,GAAG,cAAcC,GAAG,aAAaA,EAAEv/B,EAAEG,MAAM,GAAGo/B,EAAEp/B,MAAM,GAAGm/B,EAAEC,IAAID,EAAEC,EAAE,CAAA,GAAID,EAAEC,EAAEA,EAAE7pC,GAAG8pC,EAAEA,EAAExmB,EAAEwmB,EAAEA,EAAExmB,EAAEwmB,GAAGA,EAAEA,EAAEx7B,GAAEs7B,EAAEnrC,iBAAiBorC,EAAE7pC,EAAE4J,GAAEwG,GAAEpQ,IAAI4pC,EAAE5jC,oBAAoB6jC,EAAE7pC,EAAE4J,GAAEwG,GAAEpQ,OAAO,CAAC,GAAG,8BAA8BS,EAAEopC,EAAEA,EAAE1qC,QAAQ,cAAc,KAAKA,QAAQ,SAAS,UAAU,GAAG,SAAS0qC,GAAG,UAAUA,GAAG,QAAQA,GAAG,QAAQA,GAAG,QAAQA,GAAG,YAAYA,GAAG,YAAYA,GAAG,WAAWA,GAAG,WAAWA,GAAG,QAAQA,GAAG,WAAWA,GAAGA,KAAKD,EAAE,IAAIA,EAAEC,GAAG,MAAMC,EAAE,GAAGA,EAAE,MAAMF,CAAC,CAAC,MAAMA,GAAG,CAAC,mBAAmBE,IAAI,MAAMA,IAAG,IAAKA,GAAG,KAAKD,EAAE,GAAGD,EAAEt0B,gBAAgBu0B,GAAGD,EAAEljC,aAAamjC,EAAE,WAAWA,GAAG,GAAGC,EAAE,GAAGA,GAAG,CAAC,CAAC,SAAS4C,GAAE9C,GAAG,OAAO,SAASE,GAAG,GAAG1oC,KAAKyoC,EAAE,CAAC,IAAIvmB,EAAEliB,KAAKyoC,EAAEC,EAAEvnC,KAAKqnC,GAAG,GAAG,MAAME,EAAExmB,EAAEwmB,EAAExmB,EAAEhV,UAAS,GAAGw7B,EAAExmB,EAAEA,EAAEwmB,EAAE,OAAO,OAAOxmB,EAAEumB,GAAEt2B,MAAMs2B,GAAEt2B,MAAMu2B,GAAGA,EAAE,CAAC,CAAC,CAAC,SAAS6B,GAAE/B,EAAEE,EAAExmB,EAAE7iB,EAAET,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,GAAG,IAAIxG,EAAEmgC,EAAEC,EAAEruB,EAAEmG,EAAE5L,EAAEmiB,EAAE5F,EAAE0Y,EAAEC,EAAEC,EAAEE,EAAEW,EAAEE,EAAEO,EAAEX,EAAEO,EAAEC,EAAE1C,EAAEvnC,KAAK,GAAG,MAAMunC,EAAE9oC,YAAY,OAAO,KAAK,IAAIsiB,EAAE0nB,MAAM18B,KAAK,GAAGgV,EAAE0nB,KAAK1gC,EAAE,CAACo6B,EAAEoF,EAAEc,IAAItnB,EAAEsnB,OAAOhhC,EAAEigC,GAAEc,MAAM/gC,EAAEkgC,GAAGF,EAAE,GAAG,mBAAmB4C,EAAE,IAAI,GAAG/Z,EAAEqX,EAAES,MAAMY,EAAE,cAAcqB,GAAGA,EAAEjiC,UAAUq2B,OAAOwK,GAAGxhC,EAAE4iC,EAAEI,cAAcnsC,EAAEmJ,EAAEihC,KAAKQ,EAAEzhC,EAAEwhC,EAAEA,EAAEb,MAAMttC,MAAM2M,EAAE8gC,GAAGjqC,EAAE6iB,EAAEunB,IAAIxS,GAAG0R,EAAED,EAAEe,IAAIvnB,EAAEunB,KAAKH,GAAGX,EAAE8C,KAAK1B,EAAErB,EAAEe,IAAId,EAAE,IAAIyC,EAAE/Z,EAAE4Y,IAAIvB,EAAEe,IAAId,EAAE,IAAIloB,GAAE4Q,EAAE4Y,GAAGtB,EAAE/oC,YAAYwrC,EAAEzC,EAAEnJ,OAAOkM,IAAG1B,GAAGA,EAAE2B,IAAIhD,GAAGA,EAAEQ,MAAM9X,EAAEsX,EAAEiD,QAAQjD,EAAEiD,MAAM,IAAIjD,EAAE51B,QAAQk3B,EAAEtB,EAAE6B,IAAInrC,EAAEupC,EAAED,EAAEuB,KAAI,EAAGvB,EAAEkD,IAAI,GAAGlD,EAAEmD,IAAI,IAAI/B,GAAG,MAAMpB,EAAEoD,MAAMpD,EAAEoD,IAAIpD,EAAEiD,OAAO7B,GAAG,MAAMqB,EAAEY,2BAA2BrD,EAAEoD,KAAKpD,EAAEiD,QAAQjD,EAAEoD,IAAIjD,GAAE,CAAA,EAAGH,EAAEoD,MAAMjD,GAAEH,EAAEoD,IAAIX,EAAEY,yBAAyB3a,EAAEsX,EAAEoD,OAAOxxB,EAAEouB,EAAEQ,MAAMzoB,EAAEioB,EAAEiD,MAAMjD,EAAEe,IAAIhB,EAAEE,EAAEmB,GAAG,MAAMqB,EAAEY,0BAA0B,MAAMrD,EAAEsD,oBAAoBtD,EAAEsD,qBAAqBlC,GAAG,MAAMpB,EAAEuD,mBAAmBvD,EAAEkD,IAAItqC,KAAKonC,EAAEuD,uBAAuB,CAAC,GAAGnC,GAAG,MAAMqB,EAAEY,0BAA0B3a,IAAI9W,GAAG,MAAMouB,EAAEwD,2BAA2BxD,EAAEwD,0BAA0B9a,EAAE4Y,IAAItB,EAAEa,KAAK,MAAMb,EAAEyD,wBAAuB,IAAKzD,EAAEyD,sBAAsB/a,EAAEsX,EAAEoD,IAAI9B,IAAIvB,EAAEgB,KAAKxnB,EAAEwnB,IAAI,CAAC,IAAIhB,EAAEgB,KAAKxnB,EAAEwnB,MAAMf,EAAEQ,MAAM9X,EAAEsX,EAAEiD,MAAMjD,EAAEoD,IAAIpD,EAAEuB,KAAI,GAAIxB,EAAEc,IAAItnB,EAAEsnB,IAAId,EAAEW,IAAInnB,EAAEmnB,IAAIX,EAAEW,IAAIgD,KAAK,SAAS7D,GAAGA,IAAIA,EAAEc,GAAGZ,EAAE,GAAGyB,EAAE,EAAEA,EAAExB,EAAEmD,IAAI/qC,OAAOopC,IAAIxB,EAAEkD,IAAItqC,KAAKonC,EAAEmD,IAAI3B,IAAIxB,EAAEmD,IAAI,GAAGnD,EAAEkD,IAAI9qC,QAAQ5C,EAAEoD,KAAKonC,GAAG,MAAMH,CAAC,CAAC,MAAMG,EAAE2D,qBAAqB3D,EAAE2D,oBAAoBjb,EAAEsX,EAAEoD,IAAI9B,GAAGF,GAAG,MAAMpB,EAAE4D,oBAAoB5D,EAAEkD,IAAItqC,KAAK,WAAWonC,EAAE4D,mBAAmBhyB,EAAEmG,EAAE5L,EAAE,EAAE,CAAC,GAAG6zB,EAAE51B,QAAQk3B,EAAEtB,EAAEQ,MAAM9X,EAAEsX,EAAE2B,IAAI9B,EAAEG,EAAEa,KAAI,EAAGsB,EAAErC,GAAE2B,IAAIY,EAAE,EAAEjB,EAAE,CAAC,IAAIpB,EAAEiD,MAAMjD,EAAEoD,IAAIpD,EAAEuB,KAAI,EAAGY,GAAGA,EAAEpC,GAAGlgC,EAAEmgC,EAAEnJ,OAAOmJ,EAAEQ,MAAMR,EAAEiD,MAAMjD,EAAE51B,SAASw4B,EAAE,EAAEA,EAAE5C,EAAEmD,IAAI/qC,OAAOwqC,IAAI5C,EAAEkD,IAAItqC,KAAKonC,EAAEmD,IAAIP,IAAI5C,EAAEmD,IAAI,EAAE,MAAM,GAAGnD,EAAEuB,KAAI,EAAGY,GAAGA,EAAEpC,GAAGlgC,EAAEmgC,EAAEnJ,OAAOmJ,EAAEQ,MAAMR,EAAEiD,MAAMjD,EAAE51B,SAAS41B,EAAEiD,MAAMjD,EAAEoD,UAAUpD,EAAEuB,OAAOc,EAAE,IAAIrC,EAAEiD,MAAMjD,EAAEoD,IAAI,MAAMpD,EAAE6D,kBAAkBntC,EAAEypC,GAAEA,GAAE,GAAGzpC,GAAGspC,EAAE6D,oBAAoBzC,IAAInB,GAAG,MAAMD,EAAE8D,0BAA0B33B,EAAE6zB,EAAE8D,wBAAwBlyB,EAAEmG,IAAIkqB,EAAEpiC,EAAE,MAAMA,GAAGA,EAAErH,OAAO2oC,IAAG,MAAMthC,EAAEhE,MAAMomC,EAAE8B,GAAElkC,EAAE2gC,MAAMhkC,WAAWm+B,EAAEqH,GAAEnC,EAAEK,GAAE+B,GAAGA,EAAE,CAACA,GAAGlC,EAAExmB,EAAE7iB,EAAET,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,GAAG25B,EAAE7f,KAAK4f,EAAEc,IAAId,EAAEkB,MAAM,IAAIjB,EAAEkD,IAAI9qC,QAAQ5C,EAAEoD,KAAKonC,GAAG1R,IAAI0R,EAAE8C,IAAI9C,EAAEW,GAAG,KAAK,CAAC,MAAMd,GAAG,GAAGE,EAAEgB,IAAI,KAAKx8B,GAAG,MAAMhE,EAAE,GAAGs/B,EAAE/qC,KAAK,CAAC,IAAIirC,EAAEkB,KAAK18B,EAAE,IAAI,IAAIo2B,GAAG,GAAGA,EAAE75B,UAAU65B,EAAE2H,aAAa3H,EAAEA,EAAE2H,YAAY/hC,EAAEA,EAAEzE,QAAQ6+B,IAAI,KAAKoF,EAAEc,IAAIlG,CAAC,KAAK,CAAC,IAAI6H,EAAEjiC,EAAEnI,OAAOoqC,KAAKpC,GAAE7/B,EAAEiiC,IAAIwB,GAAEjE,EAAE,MAAMA,EAAEc,IAAItnB,EAAEsnB,IAAId,EAAEW,IAAInnB,EAAEmnB,IAAIb,EAAE/qC,MAAMkvC,GAAEjE,GAAGD,GAAEe,IAAIhB,EAAEE,EAAExmB,EAAE,MAAM,MAAMhZ,GAAGw/B,EAAEgB,KAAKxnB,EAAEwnB,KAAKhB,EAAEW,IAAInnB,EAAEmnB,IAAIX,EAAEc,IAAItnB,EAAEsnB,KAAKlG,EAAEoF,EAAEc,IAAIoD,GAAE1qB,EAAEsnB,IAAId,EAAExmB,EAAE7iB,EAAET,EAAEsK,EAAE/K,EAAE+O,EAAE8B,GAAG,OAAOxG,EAAEigC,GAAEoE,SAASrkC,EAAEkgC,GAAG,IAAIA,EAAEkB,SAAI,EAAOtG,CAAC,CAAC,SAASqJ,GAAEnE,GAAGA,GAAGA,EAAEiB,MAAMjB,EAAEiB,IAAID,KAAI,GAAIhB,GAAGA,EAAEa,KAAKb,EAAEa,IAAI3sC,QAAQiwC,GAAE,CAAC,SAASjC,GAAElC,EAAEE,EAAExmB,GAAG,IAAI,IAAI7iB,EAAE,EAAEA,EAAE6iB,EAAEnhB,OAAO1B,IAAI0rC,GAAE7oB,EAAE7iB,GAAG6iB,IAAI7iB,GAAG6iB,IAAI7iB,IAAIopC,GAAEgB,KAAKhB,GAAEgB,IAAIf,EAAEF,GAAGA,EAAE6D,KAAK,SAAS3D,GAAG,IAAIF,EAAEE,EAAEmD,IAAInD,EAAEmD,IAAI,GAAGrD,EAAE6D,KAAK,SAAS7D,GAAGA,EAAEp/B,KAAKs/B,EAAE,EAAE,CAAC,MAAMF,GAAGC,GAAEe,IAAIhB,EAAEE,EAAEgB,IAAI,CAAC,EAAE,CAAC,SAASgD,GAAElE,GAAG,MAAM,iBAAiBA,GAAG,MAAMA,GAAGA,EAAEe,KAAKf,EAAEe,IAAI,EAAEf,EAAEK,GAAEL,GAAGA,EAAEnmC,IAAIqqC,IAAG5D,GAAE,CAAA,EAAGN,EAAE,CAAC,SAASoE,GAAElE,EAAExmB,EAAE7iB,EAAET,EAAEsK,EAAE/K,EAAEmlC,EAAEp2B,EAAE8B,GAAG,IAAIxG,EAAEmgC,EAAEpuB,EAAEmG,EAAEooB,EAAEh0B,EAAEmiB,EAAE5F,EAAEhyB,EAAE8pC,MAAMW,EAAE5nB,EAAEinB,MAAM1oB,EAAEyB,EAAE/gB,KAAK,GAAG,OAAOsf,EAAEvX,EAAE,6BAA6B,QAAQuX,EAAEvX,EAAE,qCAAqCA,IAAIA,EAAE,gCAAgC,MAAM/K,EAAE,IAAIqK,EAAE,EAAEA,EAAErK,EAAE4C,OAAOyH,IAAI,IAAIsgC,EAAE3qC,EAAEqK,KAAK,iBAAiBsgC,KAAKroB,IAAIA,EAAEqoB,EAAEgE,WAAWrsB,EAAE,GAAGqoB,EAAEr/B,UAAU,CAACi/B,EAAEI,EAAE3qC,EAAEqK,GAAG,KAAK,KAAK,CAAC,GAAG,MAAMkgC,EAAE,CAAC,GAAG,MAAMjoB,EAAE,OAAO/kB,SAASqxC,eAAejD,GAAGpB,EAAEhtC,SAAS8J,gBAAgB0D,EAAEuX,EAAEqpB,EAAEkD,IAAIlD,GAAG58B,IAAIu7B,GAAEwE,KAAKxE,GAAEwE,IAAI/qB,EAAE/jB,GAAG+O,GAAE,GAAI/O,EAAE,IAAI,CAAC,GAAG,MAAMsiB,EAAE4Q,IAAIyY,GAAG58B,GAAGw7B,EAAE9qC,MAAMksC,IAAIpB,EAAE9qC,KAAKksC,OAAO,CAAC,GAAG3rC,EAAEA,GAAGqqC,GAAEp/B,KAAKs/B,EAAEtjC,YAAYisB,EAAEhyB,EAAE8pC,OAAOP,IAAG17B,GAAG,MAAM/O,EAAE,IAAIkzB,EAAE,CAAA,EAAG7oB,EAAE,EAAEA,EAAEkgC,EAAEvO,WAAWp5B,OAAOyH,IAAI6oB,GAAGyX,EAAEJ,EAAEvO,WAAW3xB,IAAItG,MAAM4mC,EAAEjtC,MAAM,IAAI2M,KAAK6oB,EAAE,GAAGyX,EAAEzX,EAAE7oB,GAAG,YAAYA,QAAQ,GAAG,2BAA2BA,EAAE+R,EAAEuuB,OAAO,KAAKtgC,KAAKshC,GAAG,CAAC,GAAG,SAASthC,GAAG,iBAAiBshC,GAAG,WAAWthC,GAAG,mBAAmBshC,EAAE,SAASsB,GAAE1C,EAAElgC,EAAE,KAAKsgC,EAAE5/B,EAAE,CAAC,IAAIV,KAAKshC,EAAEhB,EAAEgB,EAAEthC,GAAG,YAAYA,EAAEkY,EAAEooB,EAAE,2BAA2BtgC,EAAEmgC,EAAEG,EAAE,SAAStgC,EAAEsM,EAAEg0B,EAAE,WAAWtgC,EAAEyuB,EAAE6R,EAAE57B,GAAG,mBAAmB47B,GAAGzX,EAAE7oB,KAAKsgC,GAAGsC,GAAE1C,EAAElgC,EAAEsgC,EAAEzX,EAAE7oB,GAAGU,GAAG,GAAGy/B,EAAEz7B,GAAGqN,IAAIouB,EAAEuE,QAAQ3yB,EAAE2yB,QAAQvE,EAAEuE,QAAQxE,EAAE5qC,aAAa4qC,EAAE5qC,UAAU6qC,EAAEuE,QAAQhrB,EAAEmnB,IAAI,QAAQ,GAAG9uB,IAAImuB,EAAE5qC,UAAU,IAAI6sC,GAAE,YAAYzoB,EAAE/gB,KAAKunC,EAAEyE,QAAQzE,EAAEG,GAAEnoB,GAAGA,EAAE,CAACA,GAAGwB,EAAE7iB,EAAET,EAAE,iBAAiB6hB,EAAE,+BAA+BvX,EAAE/K,EAAEmlC,EAAEnlC,EAAEA,EAAE,GAAGkB,EAAEgqC,KAAKU,GAAE1qC,EAAE,GAAG6N,EAAE8B,GAAG,MAAM7Q,EAAE,IAAIqK,EAAErK,EAAE4C,OAAOyH,KAAKugC,GAAE5qC,EAAEqK,IAAI0E,IAAI1E,EAAE,QAAQ,YAAYiY,GAAG,MAAM3L,EAAE4zB,EAAEx0B,gBAAgB,SAAS,MAAMY,IAAIA,IAAI4zB,EAAElgC,IAAI,YAAYiY,IAAI3L,GAAG,UAAU2L,GAAG3L,GAAGuc,EAAE7oB,KAAK4iC,GAAE1C,EAAElgC,EAAEsM,EAAEuc,EAAE7oB,GAAGU,GAAGV,EAAE,UAAU,MAAMyuB,GAAGA,GAAGyR,EAAElgC,IAAI4iC,GAAE1C,EAAElgC,EAAEyuB,EAAE5F,EAAE7oB,GAAGU,GAAG,CAAC,OAAOw/B,CAAC,CAAC,SAASqC,GAAEvC,EAAEE,EAAExmB,GAAG,IAAI,GAAG,mBAAmBsmB,EAAE,CAAC,IAAInpC,EAAE,mBAAmBmpC,EAAEoB,IAAIvqC,GAAGmpC,EAAEoB,MAAMvqC,GAAG,MAAMqpC,IAAIF,EAAEoB,IAAIpB,EAAEE,GAAG,MAAMF,EAAE98B,QAAQg9B,CAAC,CAAC,MAAMF,GAAGC,GAAEe,IAAIhB,EAAEtmB,EAAE,CAAC,CAAC,SAAS2oB,GAAErC,EAAEE,EAAExmB,GAAG,IAAI7iB,EAAET,EAAE,GAAG6pC,GAAE2E,SAAS3E,GAAE2E,QAAQ5E,IAAInpC,EAAEmpC,EAAEY,OAAO/pC,EAAEqM,SAASrM,EAAEqM,SAAS88B,EAAEgB,KAAKuB,GAAE1rC,EAAE,KAAKqpC,IAAI,OAAOrpC,EAAEmpC,EAAEiB,KAAK,CAAC,GAAGpqC,EAAEguC,qBAAqB,IAAIhuC,EAAEguC,sBAAsB,CAAC,MAAM7E,GAAGC,GAAEe,IAAIhB,EAAEE,EAAE,CAACrpC,EAAEypB,KAAKzpB,EAAEirC,IAAI,IAAI,CAAC,GAAGjrC,EAAEmpC,EAAEa,IAAI,IAAIzqC,EAAE,EAAEA,EAAES,EAAE0B,OAAOnC,IAAIS,EAAET,IAAIisC,GAAExrC,EAAET,GAAG8pC,EAAExmB,GAAG,mBAAmBsmB,EAAErnC,MAAM+gB,GAAG6mB,GAAEP,EAAEgB,KAAKhB,EAAEiB,IAAIjB,EAAEc,GAAGd,EAAEgB,SAAI,CAAM,CAAC,SAASkC,GAAElD,EAAEC,EAAEC,GAAG,OAAO1oC,KAAKJ,YAAY4oC,EAAEE,EAAE,CAAyoCF,GAAEjuB,GAAElR,MAAMo/B,GAAE,CAACe,IAAI,SAAShB,EAAEC,EAAEC,EAAExmB,GAAG,IAAI,IAAI7iB,EAAET,EAAEsK,EAAEu/B,EAAEA,EAAEa,IAAI,IAAIjqC,EAAEopC,EAAEgB,OAAOpqC,EAAEiqC,GAAG,IAAI,IAAI1qC,EAAES,EAAEO,cAAc,MAAMhB,EAAE0uC,2BAA2BjuC,EAAEkuC,SAAS3uC,EAAE0uC,yBAAyB9E,IAAIt/B,EAAE7J,EAAE6qC,KAAK,MAAM7qC,EAAEmuC,oBAAoBnuC,EAAEmuC,kBAAkBhF,EAAEtmB,GAAG,CAAA,GAAIhZ,EAAE7J,EAAE6qC,KAAKhhC,EAAE,OAAO7J,EAAEosC,IAAIpsC,CAAC,CAAC,MAAMopC,GAAGD,EAAEC,CAAC,CAAC,MAAMD,CAAC,GAAGE,GAAE,EAAqDjoB,GAAEtX,UAAUokC,SAAS,SAAS/E,EAAEC,GAAG,IAAIC,EAAEA,EAAE,MAAM1oC,KAAK+rC,KAAK/rC,KAAK+rC,KAAK/rC,KAAK4rC,MAAM5rC,KAAK+rC,IAAI/rC,KAAK+rC,IAAIjD,GAAE,CAAA,EAAG9oC,KAAK4rC,OAAO,mBAAmBpD,IAAIA,EAAEA,EAAEM,GAAE,GAAGJ,GAAG1oC,KAAKmpC,QAAQX,GAAGM,GAAEJ,EAAEF,GAAG,MAAMA,GAAGxoC,KAAK0pC,MAAMjB,GAAGzoC,KAAK8rC,IAAIvqC,KAAKknC,GAAGwB,GAAEjqC,MAAM,EAAEygB,GAAEtX,UAAUskC,YAAY,SAASjF,GAAGxoC,KAAK0pC,MAAM1pC,KAAKwpC,KAAI,EAAGhB,GAAGxoC,KAAK6rC,IAAItqC,KAAKinC,GAAGyB,GAAEjqC,MAAM,EAAEygB,GAAEtX,UAAUq2B,OAAOsK,GAAEzqC,GAAE,GAAG6J,GAAE,mBAAmBzK,QAAQA,QAAQ0K,UAAU1L,KAAKq1B,KAAKr0B,QAAQC,WAAWwI,WAAW/I,GAAE,SAASqqC,EAAEC,GAAG,OAAOD,EAAEkB,IAAIH,IAAId,EAAEiB,IAAIH,GAAG,EAAEY,GAAEC,IAAI,EAAE9G,GAAE,8BAA8Bp2B,GAAE,EAAE8B,GAAEs8B,IAAE,GAAI9iC,GAAE8iC,IAAE,GAAI3C,GAAE,ECAhjW,IAAIzmB,GAAEtjB,GAAE8pC,GAAErpC,GAAE6J,GAAE,EAAEo6B,GAAE,GAAGp2B,GAAEs7B,GAAErqC,GAAE+O,GAAEq8B,IAAI/gC,GAAE0E,GAAEk9B,IAAI7vB,GAAErN,GAAE2/B,OAAOpE,GAAEv7B,GAAEu8B,IAAIxS,GAAE/pB,GAAEkgC,QAAQp+B,GAAE9B,GAAEo8B,GAAG,SAASV,GAAEJ,EAAEtmB,GAAGhV,GAAE2+B,KAAK3+B,GAAE2+B,IAAIjtC,GAAE4pC,EAAEt/B,IAAGgZ,GAAGhZ,GAAE,EAAE,IAAIw/B,EAAE9pC,GAAE8uC,MAAM9uC,GAAE8uC,IAAI,CAACpE,GAAG,GAAGuC,IAAI,KAAK,OAAOrD,GAAGE,EAAEY,GAAGvoC,QAAQ2nC,EAAEY,GAAG/nC,KAAK,CAAA,GAAImnC,EAAEY,GAAGd,EAAE,CAAC,SAASM,GAAEN,GAAG,OAAOt/B,GAAE,EAAS,SAAWs/B,EAAEE,GAAK,IAAIx/B,EAAE0/B,GAAE1mB,KAAI,GAAG,GAAGhZ,EAAEgZ,EAAEsmB,GAAGt/B,EAAEugC,MAAMvgC,EAAEogC,GAAG,CAAQuB,QAAE,EAAOnC,GAAG,SAASF,GAAG,IAAItmB,EAAEhZ,EAAEykC,IAAIzkC,EAAEykC,IAAI,GAAGzkC,EAAEogC,GAAG,GAAG1qC,EAAEsK,EAAEgZ,EAAEA,EAAEsmB,GAAGtmB,IAAItjB,IAAIsK,EAAEykC,IAAI,CAAC/uC,EAAEsK,EAAEogC,GAAG,IAAIpgC,EAAEugC,IAAI8D,SAAS,CAAA,GAAI,GAAGrkC,EAAEugC,IAAI7qC,IAAGA,GAAEgvC,KAAK,CAAC,IAAItK,EAAE,SAASkF,EAAEtmB,EAAEtjB,GAAG,IAAIsK,EAAEugC,IAAIiE,IAAI,SAAS,IAAIhF,EAAEx/B,EAAEugC,IAAIiE,IAAIpE,GAAGznC,OAAO,SAAS2mC,GAAG,QAAQA,EAAEiB,GAAG,GAAG,GAAGf,EAAEmF,MAAM,SAASrF,GAAG,OAAOA,EAAEmF,GAAG,GAAG,OAAOzgC,GAAGA,EAAE9D,KAAKpJ,KAAKwoC,EAAEtmB,EAAEtjB,GAAG,IAAIS,EAAE6J,EAAEugC,IAAIN,QAAQX,EAAE,OAAOE,EAAEhsC,QAAQ,SAAS8rC,GAAG,GAAGA,EAAEmF,IAAI,CAAC,IAAIzrB,EAAEsmB,EAAEc,GAAG,GAAGd,EAAEc,GAAGd,EAAEmF,IAAInF,EAAEmF,SAAI,EAAOzrB,IAAIsmB,EAAEc,GAAG,KAAKjqC,GAAE,EAAG,CAAC,GAAG6N,GAAGA,EAAE9D,KAAKpJ,KAAKwoC,EAAEtmB,EAAEtjB,IAAIS,CAAC,EAAET,GAAEgvC,KAAI,EAAG,IAAI1gC,EAAEtO,GAAEwtC,sBAAsBjuC,EAAES,GAAE0tC,oBAAoB1tC,GAAE0tC,oBAAoB,SAAS9D,EAAEtmB,EAAEtjB,GAAG,GAAGoB,KAAKwpC,IAAI,CAAC,IAAId,EAAEx7B,EAAEA,OAAE,EAAOo2B,EAAEkF,EAAEtmB,EAAEtjB,GAAGsO,EAAEw7B,CAAC,CAACvqC,GAAGA,EAAEiL,KAAKpJ,KAAKwoC,EAAEtmB,EAAEtjB,EAAE,EAAEA,GAAEwtC,sBAAsB9I,CAAC,CAAC,OAAOp6B,EAAEykC,KAAKzkC,EAAEogC,EAAE,CAArtBX,CAAEkC,GAAErC,EAAE,CAAgtB,SAAS9nB,GAAE8nB,EAAEE,GAAG,IAAIrpC,EAAEupC,GAAE1mB,KAAI,IAAIhV,GAAE6+B,KAAK/B,GAAE3qC,EAAEquC,IAAIhF,KAAKrpC,EAAEiqC,GAAGd,EAAEnpC,EAAEqpC,EAAEA,EAAE9pC,GAAE8uC,IAAI7B,IAAItqC,KAAKlC,GAAG,CAAiF,SAAS2rC,GAAExC,GAAG,OAAOt/B,GAAE,EAAEiiC,GAAE,WAAW,MAAM,CAACz/B,QAAQ88B,EAAE,EAAE,GAAG,CAAsN,SAAS2C,GAAE3C,EAAE5pC,GAAG,IAAI8pC,EAAEE,GAAE1mB,KAAI,GAAG,OAAO8nB,GAAEtB,EAAEgF,IAAI9uC,KAAK8pC,EAAEY,GAAGd,IAAIE,EAAEgF,IAAI9uC,EAAE8pC,EAAEmD,IAAIrD,GAAGE,EAAEY,EAAE,CAAC,SAASsD,GAAEpE,EAAEtmB,GAAG,OAAOhZ,GAAE,EAAEiiC,GAAE,WAAW,OAAO3C,CAAC,EAAEtmB,EAAE,CAAC,SAASzB,GAAE+nB,GAAG,IAAIE,EAAE9pC,GAAEmU,QAAQy1B,EAAEiB,KAAKpqC,EAAEupC,GAAE1mB,KAAI,GAAG,OAAO7iB,EAAE6N,EAAEs7B,EAAEE,GAAG,MAAMrpC,EAAEiqC,KAAKjqC,EAAEiqC,IAAG,EAAGZ,EAAEiD,IAAI/sC,KAAI8pC,EAAES,MAAMttC,OAAO2sC,EAAEc,EAAE,CAA6X,SAAS8B,KAAI,IAAI,IAAI5C,EAAEA,EAAElF,GAAE5hC,SAAS,GAAG8mC,EAAE8B,KAAK9B,EAAEkF,IAAI,IAAIlF,EAAEkF,IAAI7B,IAAInvC,QAAQiwC,IAAGnE,EAAEkF,IAAI7B,IAAInvC,QAAQquC,IAAGvC,EAAEkF,IAAI7B,IAAI,EAAE,CAAC,MAAM3pB,GAAGsmB,EAAEkF,IAAI7B,IAAI,GAAG3+B,GAAEs8B,IAAItnB,EAAEsmB,EAAEkB,IAAI,CAAC,CAACx8B,GAAEq8B,IAAI,SAASf,GAAG5pC,GAAE,KAAKT,IAAGA,GAAEqqC,EAAE,EAAEt7B,GAAEo8B,GAAG,SAASd,EAAEtmB,GAAGsmB,GAAGtmB,EAAEmnB,KAAKnnB,EAAEmnB,IAAI4D,MAAMzE,EAAEyE,IAAI/qB,EAAEmnB,IAAI4D,KAAKj+B,IAAGA,GAAEw5B,EAAEtmB,EAAE,EAAEhV,GAAEk9B,IAAI,SAAS5B,GAAGhgC,IAAGA,GAAEggC,GAAGtmB,GAAE,EAAE,IAAI7iB,GAAGT,GAAE4pC,EAAEiB,KAAKiE,IAAIruC,IAAIqpC,KAAI9pC,IAAGS,EAAEwsC,IAAI,GAAGjtC,GAAEitC,IAAI,GAAGxsC,EAAEiqC,GAAG5sC,QAAQ,SAAS8rC,GAAGA,EAAEmF,MAAMnF,EAAEc,GAAGd,EAAEmF,KAAKnF,EAAEE,EAAEF,EAAEmF,SAAI,CAAM,KAAKtuC,EAAEwsC,IAAInvC,QAAQiwC,IAAGttC,EAAEwsC,IAAInvC,QAAQquC,IAAG1rC,EAAEwsC,IAAI,GAAG3pB,GAAE,IAAIwmB,GAAE9pC,EAAC,EAAEsO,GAAE2/B,OAAO,SAASrE,GAAGjuB,IAAGA,GAAEiuB,GAAG,IAAItmB,EAAEsmB,EAAEiB,IAAIvnB,GAAGA,EAAEwrB,MAAMxrB,EAAEwrB,IAAI7B,IAAI9qC,SAAS,IAAIuiC,GAAE/hC,KAAK2gB,IAAI7iB,KAAI6N,GAAE7F,yBAAyBhI,GAAE6N,GAAE7F,wBAAwBwhC,IAAGuC,KAAIlpB,EAAEwrB,IAAIpE,GAAG5sC,QAAQ,SAAS8rC,GAAGA,EAAEE,IAAIF,EAAEkF,IAAIlF,EAAEE,GAAGF,EAAEE,OAAE,CAAM,IAAIA,GAAE9pC,GAAE,IAAI,EAAEsO,GAAEu8B,IAAI,SAASjB,EAAEtmB,GAAGA,EAAEmqB,KAAK,SAAS7D,GAAG,IAAIA,EAAEqD,IAAInvC,QAAQiwC,IAAGnE,EAAEqD,IAAIrD,EAAEqD,IAAIhqC,OAAO,SAAS2mC,GAAG,OAAOA,EAAEc,IAAIyB,GAAEvC,EAAE,EAAE,CAAC,MAAM5pC,GAAGsjB,EAAEmqB,KAAK,SAAS7D,GAAGA,EAAEqD,MAAMrD,EAAEqD,IAAI,GAAG,GAAG3pB,EAAE,GAAGhV,GAAEs8B,IAAI5qC,EAAE4pC,EAAEkB,IAAI,CAAC,GAAGjB,IAAGA,GAAED,EAAEtmB,EAAE,EAAEhV,GAAEkgC,QAAQ,SAAS5E,GAAGvR,IAAGA,GAAEuR,GAAG,IAAItmB,EAAEtjB,EAAE4pC,EAAEiB,IAAI7qC,GAAGA,EAAE8uC,MAAM9uC,EAAE8uC,IAAIpE,GAAG5sC,QAAQ,SAAS8rC,GAAG,IAAImE,GAAEnE,EAAE,CAAC,MAAMA,GAAGtmB,EAAEsmB,CAAC,CAAC,GAAG5pC,EAAE8uC,SAAI,EAAOxrB,GAAGhV,GAAEs8B,IAAItnB,EAAEtjB,EAAE8qC,KAAK,EAAE,IAAII,GAAE,mBAAmBziC,sBAAsB,SAASwhC,GAAEL,GAAG,IAAItmB,EAAEtjB,EAAE,WAAWuI,aAAauhC,GAAGoB,IAAGviC,qBAAqB2a,GAAGhb,WAAWshC,EAAE,EAAEE,EAAExhC,WAAWtI,EAAE,IAAIkrC,KAAI5nB,EAAE7a,sBAAsBzI,GAAG,CAAC,SAAS+tC,GAAEnE,GAAG,IAAItmB,EAAEtjB,GAAE8pC,EAAEF,EAAEiB,IAAI,mBAAmBf,IAAIF,EAAEiB,SAAI,EAAOf,KAAK9pC,GAAEsjB,CAAC,CAAC,SAAS6oB,GAAEvC,GAAG,IAAItmB,EAAEtjB,GAAE4pC,EAAEiB,IAAIjB,EAAEc,KAAK1qC,GAAEsjB,CAAC,CAAC,SAAS8nB,GAAExB,EAAEtmB,GAAG,OAAOsmB,GAAGA,EAAEznC,SAASmhB,EAAEnhB,QAAQmhB,EAAEmqB,KAAK,SAASnqB,EAAEtjB,GAAG,OAAOsjB,IAAIsmB,EAAE5pC,EAAE,EAAE,CAAC,SAASisC,GAAErC,EAAEtmB,GAAG,MAAM,mBAAmBA,EAAEA,EAAEsmB,GAAGtmB,CAAC,CCA76G,IAAIsmB,GAAE,SAAStmB,EAAElT,EAAEpQ,EAAET,GAAG,IAAIuqC,EAAE15B,EAAE,GAAG,EAAE,IAAI,IAAI25B,EAAE,EAAEA,EAAE35B,EAAEjO,OAAO4nC,IAAI,CAAC,IAAIC,EAAE55B,EAAE25B,KAAKngC,EAAEwG,EAAE25B,IAAI35B,EAAE,IAAI45B,EAAE,EAAE,EAAEhqC,EAAEoQ,EAAE25B,OAAO35B,IAAI25B,GAAG,IAAIC,EAAEzqC,EAAE,GAAGqK,EAAE,IAAIogC,EAAEzqC,EAAE,GAAGgG,OAAOwR,OAAOxX,EAAE,IAAI,CAAA,EAAGqK,GAAG,IAAIogC,GAAGzqC,EAAE,GAAGA,EAAE,IAAI,IAAI6Q,IAAI25B,IAAIngC,EAAE,IAAIogC,EAAEzqC,EAAE,GAAG6Q,IAAI25B,KAAKngC,EAAE,GAAGogC,GAAGF,EAAExmB,EAAE1P,MAAMhK,EAAEggC,GAAEtmB,EAAE1Z,EAAE5J,EAAE,CAAC,GAAG,QAAQT,EAAEoD,KAAKmnC,GAAGlgC,EAAE,GAAGwG,EAAE,IAAI,GAAGA,EAAE25B,EAAE,GAAG,EAAE35B,EAAE25B,GAAGD,IAAIvqC,EAAEoD,KAAKiH,EAAE,CAAC,OAAOrK,CAAC,EAAE+jB,GAAE,IAAI4rB,IAAmB,SAAAC,GAAS/+B,GAAG,IAAIpQ,EAAEsjB,GAAE8iB,IAAIhlC,MAAM,OAAOpB,IAAIA,EAAE,IAAIkvC,IAAI5rB,GAAE+iB,IAAIjlC,KAAKpB,KAAKA,EAAE4pC,GAAExoC,KAAKpB,EAAEomC,IAAIh2B,KAAKpQ,EAAEqmC,IAAIj2B,EAAEpQ,EAAE,SAAS4pC,GAAG,IAAI,IAAItmB,EAAElT,EAAEpQ,EAAE,EAAET,EAAE,GAAGuqC,EAAE,GAAGC,EAAE,CAAC,GAAGC,EAAE,SAASJ,GAAG,IAAI5pC,IAAI4pC,IAAIrqC,EAAEA,EAAEJ,QAAQ,uBAAuB,MAAM4qC,EAAEpnC,KAAK,EAAEinC,EAAErqC,GAAG,IAAIS,IAAI4pC,GAAGrqC,IAAIwqC,EAAEpnC,KAAK,EAAEinC,EAAErqC,GAAGS,EAAE,GAAG,IAAIA,GAAG,QAAQT,GAAGqqC,EAAEG,EAAEpnC,KAAK,EAAEinC,EAAE,GAAG,IAAI5pC,GAAGT,IAAIqqC,EAAEG,EAAEpnC,KAAK,EAAE,GAAE,EAAGpD,GAAGS,GAAG,KAAKT,IAAIqqC,GAAG,IAAI5pC,KAAK+pC,EAAEpnC,KAAK3C,EAAE,EAAET,EAAE6Q,GAAGpQ,EAAE,GAAG4pC,IAAIG,EAAEpnC,KAAK3C,EAAE4pC,EAAE,EAAEx5B,GAAGpQ,EAAE,IAAIT,EAAE,EAAE,EAAEqK,EAAE,EAAEA,EAAEggC,EAAEznC,OAAOyH,IAAI,CAACA,IAAI,IAAI5J,GAAGgqC,IAAIA,EAAEpgC,IAAI,IAAI,IAAIigC,EAAE,EAAEA,EAAED,EAAEhgC,GAAGzH,OAAO0nC,IAAIvmB,EAAEsmB,EAAEhgC,GAAGigC,GAAG,IAAI7pC,EAAE,MAAMsjB,GAAG0mB,IAAID,EAAE,CAACA,GAAG/pC,EAAE,GAAGT,GAAG+jB,EAAE,IAAItjB,EAAE,OAAOT,GAAG,MAAM+jB,GAAGtjB,EAAE,EAAET,EAAE,IAAIA,EAAE+jB,EAAE/jB,EAAE,GAAGuqC,EAAExmB,IAAIwmB,EAAEA,EAAE,GAAGvqC,GAAG+jB,EAAE,MAAMA,GAAG,MAAMA,EAAEwmB,EAAExmB,EAAE,MAAMA,GAAG0mB,IAAIhqC,EAAE,GAAGA,IAAI,MAAMsjB,GAAGtjB,EAAE,EAAEoQ,EAAE7Q,EAAEA,EAAE,IAAI,MAAM+jB,IAAItjB,EAAE,GAAG,MAAM4pC,EAAEhgC,GAAGigC,EAAE,KAAKG,IAAI,IAAIhqC,IAAI+pC,EAAEA,EAAE,IAAI/pC,EAAE+pC,GAAGA,EAAEA,EAAE,IAAIpnC,KAAK,EAAE,EAAE3C,GAAGA,EAAE,GAAG,MAAMsjB,GAAG,OAAOA,GAAG,OAAOA,GAAG,OAAOA,GAAG0mB,IAAIhqC,EAAE,GAAGT,GAAG+jB,GAAG,IAAItjB,GAAG,QAAQT,IAAIS,EAAE,EAAE+pC,EAAEA,EAAE,GAAG,CAAC,OAAOC,IAAID,CAAC,CAAptB,CAAstB35B,IAAIpQ,GAAGqqC,UAAU,KAAKloC,OAAO,EAAEnC,EAAEA,EAAE,EAAE,CCC9qC,MAAMovC,GAAa7E,IACtB,MAAM8E,EAAQ9E,EAAM8E,OAAS,eACvBzqC,EAAO2lC,EAAM3lC,MAAQ,GAG3B,cAFO2lC,EAAM8E,aACN9E,EAAM3lC,KACLmlC,GAAE,MAAOxkC,OAAOwR,OAAO,CAAEu4B,MAAO,6BAA8Bh+B,MAAO1M,EAAM4M,OAAQ5M,EAAM2qC,QAAS,YAAa9oB,KAAM,OAAQ+oB,OAAQH,EAAO,eAAgB,IAAK,iBAAkB,QAAS,kBAAmB,SAAW9E,GAC9NR,GAAE,OAAQ,CAAEhH,GAAI,KAAMC,GAAI,IAAKC,GAAI,KAAMC,GAAI,OAC7C6G,GAAE,WAAY,CAAE3X,OAAQ,uBCPnBjqB,GAASoiC,IAClB,MAAM8E,EAAQ9E,EAAM8E,OAAS,eACvBzqC,EAAO2lC,EAAM3lC,MAAQ,GAG3B,cAFO2lC,EAAM8E,aACN9E,EAAM3lC,KACLmlC,GAAE,MAAOxkC,OAAOwR,OAAO,CAAEu4B,MAAO,6BAA8Bh+B,MAAO1M,EAAM4M,OAAQ5M,EAAM2qC,QAAS,YAAa9oB,KAAM,OAAQ+oB,OAAQH,EAAO,eAAgB,IAAK,iBAAkB,QAAS,kBAAmB,SAAW9E,GAC9NR,GAAE,OAAQ,CAAEloB,EAAG,IAAKC,EAAG,IAAKxQ,MAAO,KAAME,OAAQ,KAAMi+B,GAAI,IAAKC,GAAI,MACpE3F,GAAE,SAAU,CAAE4F,GAAI,MAAOC,GAAI,MAAO5vC,EAAG,QACvC+pC,GAAE,WAAY,CAAE3X,OAAQ,uBCRnByd,GAAQtF,IACjB,MAAM8E,EAAQ9E,EAAM8E,OAAS,eACvBzqC,EAAO2lC,EAAM3lC,MAAQ,GAG3B,cAFO2lC,EAAM8E,aACN9E,EAAM3lC,KACLmlC,GAAE,MAAOxkC,OAAOwR,OAAO,CAAEu4B,MAAO,6BAA8Bh+B,MAAO1M,EAAM4M,OAAQ5M,EAAM2qC,QAAS,YAAa9oB,KAAM,OAAQ+oB,OAAQH,EAAO,eAAgB,IAAK,iBAAkB,QAAS,kBAAmB,SAAW9E,GAC9NR,GAAE,OAAQ,CAAEhH,GAAI,KAAMC,GAAI,IAAKC,GAAI,KAAMC,GAAI,OAC7C6G,GAAE,UAAW,CAAE3X,OAAQ,gCCPlB0d,GAAWvF,IACpB,MAAM8E,EAAQ9E,EAAM8E,OAAS,eACvBzqC,EAAO2lC,EAAM3lC,MAAQ,GAG3B,cAFO2lC,EAAM8E,aACN9E,EAAM3lC,KACLmlC,GAAE,MAAOxkC,OAAOwR,OAAO,CAAEu4B,MAAO,6BAA8Bh+B,MAAO1M,EAAM4M,OAAQ5M,EAAM2qC,QAAS,YAAa9oB,KAAM,OAAQ+oB,OAAQH,EAAO,eAAgB,IAAK,iBAAkB,QAAS,kBAAmB,SAAW9E,GAC9NR,GAAE,SAAU,CAAE4F,GAAI,KAAMC,GAAI,KAAM5vC,EAAG,OACrC+pC,GAAE,OAAQ,CAAEhH,GAAI,KAAMC,GAAI,IAAKC,GAAI,IAAKC,GAAI,OAC5C6G,GAAE,OAAQ,CAAEhH,GAAI,IAAKC,GAAI,IAAKC,GAAI,KAAMC,GAAI,SCK7C,SAAS6M,KACd,MAAM//B,EAAOm/B,GAAIjb,KAAK6V,IAEhB/C,EAAgB7pC,IAEhB8pC,EAAWD,GAAevpC,SAASC,MAAMwpC,YAAYC,UAErD6I,EAAa3yC,KAAKC,MACtBR,SAASoE,eAAe,cAAc3D,aAElC0yC,EAAe,SAASjrC,OAAO8B,SAASE,gBAAgBgpC,EAAWpnC,MAEnEsnC,EAAQC,GAAWH,EAAWI,aAAaxnC,KAAOunC,EAOlDrsC,EAAkB,IAAI/C,EAC5B+C,EAAgB5B,eAEhB,MAAMmuC,EAAiB,KAGjBC,EAAiBxzC,SAASyzC,MAChC,IAAIC,GAAwB,EAE5B,MAAMC,EAAiB,CAACC,GAAgB,KAClCA,GAA8C,YAA7B5zC,SAAS6zC,gBACvBH,IACH1zC,SAASyzC,MAAQ,uBAAuBP,EAAWY,WAAWC,cAC9DL,GAAwB,GAGG,YAA7B1zC,SAAS6zC,iBACTH,IAEA1zC,SAASyzC,MAAQD,EACjBE,GAAwB,IAItBM,EAAaC,IACjB,GAAiC,YAA7Bj0C,SAAS6zC,gBACX,OAEF,MAAMK,EAAKD,GAAOjkC,QACdkkC,GAAMA,EAAGC,aAAeC,UAAUC,MACpCH,EAAGI,KACD/zC,KAAKg0C,UAAU,CACb99B,MAAO,QACP+9B,QAAS,GAAGtB,EAAWI,aAAaxnC,KACpC2oC,QAAS,GAAGvB,EAAWpnC,SAMzB4oC,EPzEisT,SAAW5H,GAAG,SAASC,EAAED,GAAG,IAAIE,EAAExmB,EAAE,OAAOliB,KAAKwsC,kBAAkB9D,EAAE,IAAI2H,KAAKnuB,EAAE,IAAIumB,EAAEgB,KAAKzpC,KAAKA,KAAKwsC,gBAAgB,WAAW,OAAOtqB,CAAC,EAAEliB,KAAKqtC,qBAAqB,WAAW3E,EAAE,IAAI,EAAE1oC,KAAKosC,sBAAsB,SAAS5D,GAAGxoC,KAAKmpC,MAAMttC,OAAO2sC,EAAE3sC,OAAO6sC,EAAEhsC,QAAQ,SAAS8rC,GAAGA,EAAEgB,KAAI,EAAGS,GAAEzB,EAAE,EAAE,EAAExoC,KAAK2rC,IAAI,SAASnD,GAAGE,EAAE5kC,IAAI0kC,GAAG,IAAIC,EAAED,EAAE6E,qBAAqB7E,EAAE6E,qBAAqB,WAAW3E,GAAGA,EAAE4H,OAAO9H,GAAGC,GAAGA,EAAEr/B,KAAKo/B,EAAE,CAAC,GAAGA,EAAErjC,QAAQ,CAAC,OAAOsjC,EAAEgB,IAAI,OAAOd,KAAIF,EAAEa,GAAGd,EAAEC,EAAE8H,SAAS9H,EAAE+H,KAAK/H,EAAEgI,SAAS,SAASjI,EAAEC,GAAG,OAAOD,EAAErjC,SAASsjC,EAAE,GAAG+C,YAAY/C,EAAEA,CAAC,COyE1sUiI,GACnB,SAASC,GAAYxrC,SAAEA,IACrB,MAAOyrC,EAAiBC,GAAsBC,GAAS,MACjDC,EA8VR,WACE,MAAO1uC,EAAK2uC,GAAUF,GAAS,IAAM,IAAIhD,KAGnCmD,EAAOC,GAAQ,IACF,IAAb7uC,EAAImB,KAAmB,GAEpBrB,MAAMG,KAAKD,EAAI8uC,UAAU/f,KAAK,CAAC5oB,EAAG6oB,IAAM7oB,EAAEhB,GAAK6pB,EAAE7pB,IACvD,CAACnF,IAEE+uC,EAASH,EAAKlwC,OAASkwC,EAAKA,EAAKlwC,OAAS,GAAK,KAE/CswC,EAAgBC,GAAara,IACjC+Z,EAAQvyB,IAEN,GAAIA,EAAKumB,IAAI/N,EAAEzvB,MAAQyvB,EAAG,OAAOxY,EACjC,MAAMJ,EAAO,IAAIyvB,IAAIrvB,GAErB,OADAJ,EAAK4mB,IAAIhO,EAAEzvB,GAAIyvB,GACR5Y,KAER,IAEGkzB,EAAiBD,GAAaE,IAClCR,EAAQvyB,IACN,IAAIgzB,GAAU,EACd,MAAMpzB,EAAO,IAAIyvB,IAAIrvB,GACrB,IAAK,MAAMwY,KAAKua,EAAK,CACJnzB,EAAK2mB,IAAI/N,EAAEzvB,MACXyvB,IACb5Y,EAAK4mB,IAAIhO,EAAEzvB,GAAIyvB,GACfwa,GAAU,EAEd,CACA,OAAOA,EAAUpzB,EAAOI,KAEzB,IAEGizB,EAAaJ,GAAa9pC,GAAOnF,EAAI2iC,IAAIx9B,IAAO,KAAM,CAACnF,IAE7D,MAAO,CACLsvC,SAAUV,EACVG,SACAQ,MAAOvvC,EAAImB,KACXkuC,aACAL,gBACAE,iBAEJ,CA7YuBM,GAErB,OAAOjjC,CAAI;SACNwhC,EAAWG;gBACJ,CACNK,kBACAC,qBACAE;;UAGA5rC;;KAGR,CAwBA,SAAS2sC,IACP,MAAMnC,EAAQoC,GAAO,OACdC,EAAgBC,GAAqBnB,IAAS,GAC/CoB,EAAkBH,GAAO,MACzBI,EAAuBJ,IAAO,IAC7BK,EAAWC,GAAgBvB,GAAS,KACrCF,gBAAEA,EAAeC,mBAAEA,GAAuByB,GAAWlC,IACrDW,aAAEA,GAAiBuB,GAAWlC,IAC7BmC,EAAmBC,GAAwB1B,GAAS,GACrD2B,EAAgBV,GAAO,IACtBW,EAAUC,GAAe7B,GAAS3wC,UAAUyyC,SAC5CC,EAAeC,GAAoBhC,IAAS,GAC7CiC,EAAiBhB,GAAO,MAoC9BiB,GAAU,KACR,MAAMC,EAAe,KACnBN,GAAY,IAERO,EAAgB,KACpBP,GAAY,IAMd,OAHA/uC,OAAOvG,iBAAiB,SAAU41C,GAClCrvC,OAAOvG,iBAAiB,UAAW61C,GAE5B,KACLtvC,OAAOgB,oBAAoB,SAAUquC,GACrCrvC,OAAOgB,oBAAoB,UAAWsuC,KAEvC,IAEH,MACMC,EAAe,CAAC,IAAO,IAAO,IAAQ,IAAQ,KAE9CC,EAAUj1C,IACdrB,QAAQ0C,IAAI,yBAGR0yC,EAAgBxmC,UAClBvE,aAAa+qC,EAAgBxmC,SAC7BwmC,EAAgBxmC,QAAU,MAI5B+mC,EAAc/mC,QAAU,EAGnBymC,EAAqBzmC,SASxB5O,QAAQ0C,IAAI,6BACZ1C,QAAQ0C,IAAI,kBAAmBuxC,EAAaa,OAC5C90C,QAAQ0C,IAAI,yBAA0BuxC,EAAaY,SAAS5wC,QAzEnC,CAAC6uC,IAC5B,IAAKA,GAAMA,EAAGC,aAAeC,UAAUC,KAErC,YADAjzC,QAAQ0C,IAAI,0DAGd,MAAM6zC,EAAgBtC,EAAaK,OAE/BiC,GACFv2C,QAAQ0C,IACN,qCACA6zC,EAAcC,YAEhB1D,EAAGI,KACD/zC,KAAKg0C,UAAU,CACb99B,MAAO,iBACPohC,eAAgBF,EAAcC,gBAIlCx2C,QAAQ0C,IAAI,+CAEZowC,EAAGI,KACD/zC,KAAKg0C,UAAU,CACb99B,MAAO,sBAmDXqhC,CAAqBr1C,EAAE4E,UAXvBovC,EAAqBzmC,SAAU,EAC/BvN,EAAE4E,OAAOitC,KACP/zC,KAAKg0C,UAAU,CACb99B,MAAO,qBAWbkgC,EAAa,KAGToB,EAAat1C,IACjB,MAAMP,EAAO3B,KAAKC,MAAMiC,EAAEP,MAG1B,OAFAd,QAAQ0C,IAAI,iCAAkC5B,EAAKuU,OAE3CvU,EAAKuU,OACX,IAAK,iBACH4+B,EAAaQ,eAAe3zC,EAAK+zC,UACjCM,GAAkB,GAClBvC,EAAUC,GACV,MACF,IAAK,gBACHoB,EAAaM,cAAczzC,EAAK81C,SAChC,MACF,IAAK,cACL,IAAK,YACL,IAAK,sBACH52C,QAAQ0C,IAAI,qCACZuxC,EAAaM,cAAczzC,EAAK81C,SAChC52C,QAAQ0C,IAAI,6BACZkwC,EAAUC,GACLb,EAAKlxC,EAAK81C,QAAQp3C,KAAKkL,KAC1B6nC,GAAe,GAEjB,MACF,IAAK,SAEH,GAAIzxC,EAAKsyC,UAAYtB,EAAWI,aAAaxnC,GAC3C,MAGFsrC,EAAiBhxC,QAAQlE,EAAK+1C,YAG1BZ,EAAernC,SACjBvE,aAAa4rC,EAAernC,SAE1B9N,EAAK+1C,YACPZ,EAAernC,QAAUxE,WACvB,IAAM4rC,GAAiB,GACvB,MAGJ,MACF,IAAK,iBACHh2C,QAAQ0C,IAAI,cAAc5B,EAAKtB,mBAC3BsB,EAAKtB,OAASsyC,EAAWgF,MAAMpsC,KACjC1K,QAAQ0C,IAAI,kBAAkBovC,EAAWiF,wBACzCjwC,OAAO8B,SAASI,KAAO8oC,EAAWiF,uBAQpCC,EAAW31C,IACfrB,QAAQ0C,IAAI,wBAGR0yC,EAAgBxmC,SAClBvE,aAAa+qC,EAAgBxmC,SAG/B,MAAMqoC,EAAoBtB,EAAc/mC,QAExC,GAAIvN,EAAE4E,SAAW5C,UAAUyyC,OAKzB,OAJA91C,QAAQ0C,IAAI,4DACZ6yC,EACE,8DAKJ,GAAI0B,GA3Gc,EA2GoB,CACpC,MAAMC,EACJ,wGAGF,OAFAl3C,QAAQkE,KAAKgzC,QACb3B,EAAa2B,EAEf,CAEA,MAAMpsC,EACJurC,EAAaY,IACbZ,EAAaA,EAAapyC,OAAS,GACrC,IAAIizC,EAAM,GAGRA,EAFwB,IAAtBD,EAEI,gCAEA,8CAA8CnsC,EAAQ,2BAA6BmsC,EAAoB,UAE/Gj3C,QAAQ0C,IAAIw0C,GACZ3B,EAAa2B,GAEb9B,EAAgBxmC,QAAUxE,WAAW,KACnCurC,EAAc/mC,QAAU+mC,EAAc/mC,QAAU,EAChD8mC,EAAsB/zB,GAASA,EAAO,IACrC7W,IAGCqsC,EAAW91C,IACfrB,QAAQC,MAAM,qBAAsBoB,GACpCk0C,EAAa,8BAGfW,GAAU,KACR,GAAIrD,EAAMjkC,UAAYvL,UAAUyyC,OAM9B,OALA91C,QAAQ0C,IACN,8DAEFmwC,EAAMjkC,QAAQwoC,aACdvE,EAAMjkC,QAAU,MAKlB,IAAIikC,EAAMjkC,SAAWikC,EAAMjkC,QAAQmkC,aAAeC,UAAUC,KAA5D,CAKA,GAAI0C,EAAc/mC,SA3JA,EA2JwB,CACxC,MAAMsoC,EACJ,wGAGF,OAFAl3C,QAAQkE,KAAKgzC,QACb3B,EAAa2B,EAEf,CAsBA,OAnBIrE,EAAMjkC,SAAWikC,EAAMjkC,QAAQmkC,aAAeC,UAAUC,OAC1DjzC,QAAQ0C,IACN,wCAAwCmwC,EAAMjkC,QAAQmkC,cAExDF,EAAMjkC,QAAQwoC,QACdvE,EAAMjkC,QAAU,MAGlB5O,QAAQ0C,IACN,2CAA2C+yC,kBAAkCE,EAAc/mC,YAE7FikC,EAAMjkC,QA9PV,UAAiBmjC,aAAEA,EAAYuE,OAAEA,EAAMK,UAAEA,EAASK,QAAEA,EAAOG,QAAEA,IAC3D,MAAMrE,EAAK,IAAIE,UAAUjB,GAUzB,OARAe,EAAGuE,OAASf,EAEZxD,EAAGxuC,UAAYqyC,EAEf7D,EAAGwE,QAAUN,EAEblE,EAAG5wC,QAAUi1C,EAENrE,CACT,CAkPoByE,CAAQ,CACtBxF,eACAuE,SACAK,YACAK,UACAG,YAGK,KACDtE,EAAMjkC,SACRikC,EAAMjkC,QAAQwoC,QAGZhC,EAAgBxmC,SAClBvE,aAAa+qC,EAAgBxmC,SApCjC,CAFE5O,QAAQ0C,IAAI,qDAyCb,CAAC+yC,EAAmBG,IAEvBM,GAAU,KACR,MAAMsB,EAAyB,KAC7B5E,EAAUC,GACVN,KAIF,OAFA3zC,SAAS2B,iBAAiB,mBAAoBi3C,GAEvC,KACL54C,SAASkJ,oBACP,mBACA0vC,KAGH,CAAC3E,IAkBJ,OAAO/gC,CAAI;QACPgiC,GACFhiC,CAAI;WACC2lC;qBACU3D;oBACD,IAAMC,EAAmB;;;SAGpC2D;mBACUzD,EAAaY;yBACPK;gBACTrC;wBACQkD;;SAEf4B,aAAkBrC;SAClBsC;mBAnBahB,IAZE,CAACA,IACnB,MAAM9D,EAAKD,EAAMjkC,QACbkkC,GAAMA,EAAGC,aAAeC,UAAUC,MACpCH,EAAGI,KACD/zC,KAAKg0C,UAAU,CACb99B,MAAO,cACPg7B,QAASuG,MAOfiB,CAAYjB;gBAoBF/D;sBArSa,EAACA,EAAO+C,KAC/B,MAAM9C,EAAKD,GAAOjkC,QAClB,OAAOkkC,GAAMA,EAAGC,aAAeC,UAAUC,MAAQ2C,GAoSjCkC,CAAiBjF,EAAO+C;;KAG5C,CAmDA,SAAS6B,GAAsBM,SAAEA,EAAQf,QAAEA,IAYzC,OAXAd,GAAU,KACR,MAAM8B,EAAgB32C,IACN,WAAVA,EAAEqG,KACJsvC,KAKJ,OADAp4C,SAAS2B,iBAAiB,UAAWy3C,GAC9B,IAAMp5C,SAASkJ,oBAAoB,UAAWkwC,IACpD,CAAChB,IAEGllC,CAAI;;;kBAGGklC;gBACF,CACN7V,SAAU,QACVpwB,IAAK,EACLC,KAAM,EACNoC,MAAO,OACPE,OAAQ,OACR2kC,gBAAiB,qBACjBC,eAAgB,YAChBC,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZC,OAAQ,IACRxiB,OAAQ,UACRyiB,QAAS;;;gBAIHR;kBACE,CACNS,SAAU,OACVC,UAAW;;;KAKrB,CAEA,SAASC,GAAQ9B,QAAEA,EAAO/D,MAAEA,EAAK8F,OAAEA,IACjC,MAAMC,EAAK5G,EAAK4E,EAAQp3C,KAAKkL,IACvBmuC,EAAa5D,GAAO,OACnB8C,EAAUe,GAAe9E,GAAS4C,EAAQmC,eAAiB,OAC3DC,EAAmBC,GAAwBjF,IAAS,IACrDD,mBAAEA,GAAuByB,GAAWlC,GAG1C4C,GAAU,KACJU,EAAQsC,eAAiBtC,EAAQmC,cACnCD,EAAY,MACHlC,EAAQmC,eACjBD,EAAYlC,EAAQmC,gBAErB,CAACnC,EAAQmC,cAAenC,EAAQsC,eAGnChD,GAAU,KACR,GAAqB,UAAjBU,EAAQvyC,MAAoB20C,GAAqBjB,EACnD,OAGF,MAAM7b,EAAW,IAAIid,qBAClB5iB,IACCA,EAAQ32B,QAASw5C,IACf,GAAIA,EAAMC,iBAAmBL,EAAmB,CAE9CC,GAAqB,GAErB,MAAMnG,EAAKD,GAAOjkC,QAClB,GAAIkkC,GAAMA,EAAGC,aAAeC,UAAUC,KAAM,CAC1C,MAAMqG,EAAUn6C,KAAKg0C,UAAU,CAC7B99B,MAAO,gBACPkkC,WAAY3C,EAAQlsC,KAEtBooC,EAAGI,KAAKoG,EACV,CACF,KAGJ,CACEnyB,UAAW,GACXqyB,WAAY,SAQhB,OAJIX,EAAWjqC,SACbstB,EAASU,QAAQic,EAAWjqC,SAGvB,KACDiqC,EAAWjqC,SACbstB,EAASW,UAAUgc,EAAWjqC,WAGjC,CAACgoC,EAAQvyC,KAAMuyC,EAAQlsC,GAAIsuC,EAAmBjB,EAAUlF,IAE3D,MAAM4G,EAAuB,KAE3B,GAAI7C,EAAQ8C,gBACV3F,EAAmB6C,EAAQ8C,sBACtB,GAAI3B,EAAU,CAEnB,MAAMjF,EAAKD,GAAOjkC,QAClB,GAAIkkC,GAAMA,EAAGC,aAAeC,UAAUC,KAAM,CAC1C,MAAMqG,EAAUn6C,KAAKg0C,UAAU,CAC7B99B,MAAO,gBACPkkC,WAAY3C,EAAQlsC,KAGtB1K,QAAQ0C,IACN,gDAAgDk0C,EAAQlsC,MAE1DooC,EAAGI,KAAKoG,EACV,CAEAvF,EAAmBgE,EACrB,GAwBF,IAAI1H,EAAU,KACd,GAAqB,SAAjBuG,EAAQvyC,KACVgsC,EAAUuG,EAAQ+C,uBACb,GAAqB,UAAjB/C,EAAQvyC,KACjB,GAAIuyC,EAAQsC,aACV7I,EAAU,uBACL,CACL,MAAMuJ,EAAmBv4C,IACvBA,EAAE4E,OAAOiK,UAAUlJ,IAAI,WAGzBqpC,EAAUv+B,CAAI;;cAERimC,GACFjmC,CAAI;;qBAEKimC;;;wBAGG0B;uBACDG;;;SAIjB,CAGF,OAAO9nC,CAAI;;cAED+mC;kBACIjC,EAAQlsC;gBA1mBL,KAAIuF,IAAYA,EAAQlL,OAAOC,SAAS2G,KAAK,KA2mBlD0qB,CACN,UACAuiB,EAAK,KAAO,aACZhC,EAAQsC,cAAgB,eACxBtC,EAAQvyC,KAAK6P,cACbykC,GAAU;;UAGVC,IAAOhC,EAAQsC,aACbpnC,CAAI;iBACC8/B;;;0BA9Da,KAKxB,IAJkBiI,QAChB,iDAAiD/H,EAAWY,WAAWC,sCAIvE,OAGF,MAAMG,EAAKD,GAAOjkC,QAClB,GAAIkkC,GAAMA,EAAGC,aAAeC,UAAUC,KAAM,CAC1C,MAAMqG,EAAUn6C,KAAKg0C,UAAU,CAC7B99B,MAAO,sBACPkkC,WAAY3C,EAAQlsC,KAGtB1K,QAAQ0C,IAAI,yBAAyBk0C,EAAQlsC,MAC7CooC,EAAGI,KAAKoG,EACV;;oBAkDM;;iCAEqBjJ;;eAElBuG,EAAQp3C,KAAKmzC,eAAeiE,EAAQkD;;;;iBAnoB3B7H,EAuoBM2E,EAAQp3C,KAAKkL,GAtoBvCsnC,EAAKC,GACDH,EAAWI,aAAa6H,iBACxBjI,EAAWY,WAAWqH;;;;;;;MAHP,IAAC9H,CA+oBtB,CAEA,SAASyF,GAAS7C,SAAEA,EAAQK,eAAEA,EAAcrC,MAAEA,EAAKkD,cAAEA,IACnD,MAAMiE,EAAc/E,GAAO,MACrBgF,EAAqBhF,GAAO,IAC3BiF,EAAyBC,GAC9BnG,IAAS,IACJoG,EAAwBC,GAA6BrG,IAAS,GAE/DsG,EAAe,KACnB,MAAMz6C,EAAKm6C,EAAYprC,QACvB,IAAK/O,EAAI,OAAO,EAEhB,OAAOA,EAAG06C,aAAe16C,EAAG8Q,WAAa9Q,EAAG4Y,aAD1B,KAId+hC,EAAiB,KACrB,MAAM36C,EAAKm6C,EAAYprC,QACnB/O,IACFA,EAAG8Q,UAAY9Q,EAAG06C,eAKhBE,EAAe,KACfH,KACFD,GAA0B,IAmC9B,OA/BAnE,GAAU,KACR,MAAMr2C,EAAKm6C,EAAYprC,QACvB,GAAI/O,EAEF,OADAA,EAAGU,iBAAiB,SAAUk6C,GACvB,IAAM56C,EAAGiI,oBAAoB,SAAU2yC,IAE/C,IAEHvE,GAAU,KACR,MAAMwE,EAAgB7F,EAAS5wC,OACzB02C,EAAiBV,EAAmBrrC,QAEtCsmC,GAAqC,IAAnByF,EAGpBvwC,WAAW,KACTowC,IACAL,GAA2B,IAC1B,GACMO,EAAgBC,GAAkBL,IAE3CE,IACSE,EAAgBC,IAAmBL,KAE5CD,GAA0B,GAI5BJ,EAAmBrrC,QAAU8rC,GAC5B,CAAC7F,EAAUK,IAEPpjC,CAAI;;;cAGDkoC;gBACE,CACN7B,QAAS,OACTyC,cAAe,SACfC,UAAW,SACXC,UAAW,SACXC,QAAS7F,IAAmBgF,EAA0B,EAAI,EAC1DzkB,WAAY,2BACZ0L,SAAU;;UAGViZ,GACFtoC,CAAI;;;oBAGQ,CACNd,KAAM,EACND,IAAK,oBACLowB,SAAU,SACV/tB,MAAO,OACP4nC,UAAW,SACX1C,OAAQ;;;;sBAKA,CACNvzC,OAAQ;wBAEAy1C;;;wBAGA,CACNrC,QAAS,OACTE,WAAY,SACZ4C,IAAK;;mBAGJ/J;;0BAEO,CAAE99B,MAAO;;;;;;;;;;6BAUN0+B,EAAWgI;;;;;0BAKdhI,EAAWY,WAAWC;;;;;UAKtCkC,EAAStvC,IACT,CAACqxC,EAASsE,EAAKxG,IACb5iC,CAAI,IAAI4mC;oBACA9B,EAAQlsC;wBACJksC;sBACF/D;uBACCqI,IAAQxG,EAAIzwC,OAAS;;qBAGvB,CAAE82C,QAAShF,EAAgB,EAAI;mBACjCjE,EAAWY,WAAWC;;;KAIvC,CAEA,SAASwI,EAAa9O,GACpB,MAAMC,EAAM2I,GAAO,MAGnBiB,GAAU,KACR,MAAMr2C,EAAKysC,EAAI19B,QACX/O,IACFA,EAAG0I,MAAM+K,OAAS,OAClBzT,EAAG0I,MAAM+K,OAASzT,EAAG06C,aAAe,KACpC16C,EAAGu7C,UAEJ,IAGHlF,GAAU,KACY,KAAhB7J,EAAMttC,OAAgButC,EAAI19B,UAC5B09B,EAAI19B,QAAQrG,MAAM+K,OAAS,OAC3Bg5B,EAAI19B,QAAQrG,MAAM+K,OAASg5B,EAAI19B,QAAQ2rC,aAAe,OAEvD,CAAClO,EAAMttC,QAEV,MAmBM27C,GAAiBrO,EAAMttC,OAAS,IAAIkF,OACpCo3C,EAAcX,EAAgBvI,EAC9BmJ,EAAcZ,GAAiBvI,KAErC,OAAOrgC,CAAI;mBACI,CAAEsB,MAAO;;;gBAGZk5B;oBA3BKjrC,IACf,MAAMxB,EAAKwB,EAAEk6C,cAKb17C,EAAG0I,MAAM+K,OAAS,OAClBzT,EAAG0I,MAAM+K,OAASzT,EAAG06C,aAAe,KACpClO,EAAMmP,UAAUn6C;sBAGCA,IAEZ0nC,GAAsB,UAAV1nC,EAAEqG,KAAoBrG,EAAE45B,WACvC55B,EAAE8oB,iBACFkiB,EAAMoP,WAAWp6C;kBAePgrC,EAAMttC,OAAS;kBACf,CACN28C,OAAQ,OACRb,UAAW,SACXpC,UAAW,QACXkD,OAAQ,EACRvoC,MAAO,OACPwoC,OAAQP,EAAc,uCAAoChuC;;wBAG9Cg/B,EAAMwP;;UAEpBP,GACFxpC,CAAI;;oBAEQ,CACNgqC,SAAU,OACV3K,MAAOkK,EACH,wBACA,sBACJL,UAAW,QACXpgC,UAAW,MACXmhC,WAAY;;cAGZrB,KAAiBvI;;;;KAK7B,CAEA,SAASyF,GAAM6D,SAAEA,EAAQ5I,MAAEA,EAAKmJ,YAAEA,IAChC,MAEMC,EAAiBhH,GAAO,CAC5BiH,UAAU,EACVC,WAAY,EACZC,UAAW,QAENC,EAAWC,GAAgBtI,IAAS,IACpC4C,EAAS2F,GAAcvI,GAAS,IACjCwI,EAAcvH,GAAO,MAErBwH,EAAcP,IAClB,MAAMpJ,EAAKD,EAAMjkC,QACjB,IAAKkkC,GAAMA,EAAGC,aAAeC,UAAUC,KAAM,OAG7C,MAAMpsC,EAAMqD,KAAKrD,MACjB,GAAIo1C,EAAertC,QAAQstC,WAAaA,EAAU,CAChD,GACEA,GACAr1C,EAAMo1C,EAAertC,QAAQutC,WAnBX,IAqBlB,OACF,IAAKD,EAAU,MACjB,CAEAD,EAAertC,QAAQstC,SAAWA,EAClCD,EAAertC,QAAQutC,WAAat1C,EAEpCisC,EAAGI,KACD/zC,KAAKg0C,UAAU,CACb99B,MAAO,SACPwhC,UAAWqF,EACX9I,QAAStB,EAAWI,aAAaxnC,OA0HvC,OAAOoH,CAAI;;uBAEQ,CAAEymC,QAAS,MAAOnlC,MAAO;qBAC3B,CAAE+kC,QAAS,OAAQyC,cAAe,MAAOK,IAAK,EAAG5C,WAAY;;;sBArE9Ch3C,IAE9B,IAAK26C,EACH,OAIF,MAAMU,EAAY99C,SAASwJ,cAAc,SACzCs0C,EAAUr4C,KAAO,OACjBq4C,EAAUC,OAAS7T,EAAc8T,SAASC,aAC1CH,EAAUI,UAAW,EACrBJ,EAAUn0C,MAAM4vC,QAAU,OAG1Bv5C,SAASiJ,KAAK42B,YAAYie,GAG1BA,EAAUn8C,iBAAiB,SAAUyF,MAAOqP,IAC1C,MAAMlQ,EAAQE,MAAMG,KAAK6P,EAAMpP,OAAOd,OACtC,IAAKA,EAAMlB,OAAQ,OAEnB,GAAIkB,EAAMlB,OADQ,GAKhB,OAHAmC,MAAM,6CAENs2C,EAAU39C,MAAQ,IAIpBiB,QAAQ0C,IAAI,kBAAmByC,GAC/B,MAAML,QAAEA,EAAOG,OAAEA,SAAiBW,EAAgBV,SAASC,GAEvDF,EAAOhB,OAAS,IAClBjE,QAAQC,MAAM,qBAAsBgF,GACpC6B,OAAOV,MAAM,sBAAsBnB,EAAOhB,kBAG5CjE,QAAQ0C,IAAIoC,GAEZ,IAAK,IAAIi4C,KAAkBj4C,EAAS,CAClC,MAAMk4C,QAAev7C,EAASs7C,GAExBjK,EAAKD,EAAMjkC,QACjB,GAAIkkC,GAAMA,EAAGC,aAAeC,UAAUC,KAAM,CAC1C,MAAMqG,EAAUn6C,KAAKg0C,UAAU,CAC7B99B,MAAO,YACP4nC,SAAUF,EAAe33C,KACzB83C,aAAcH,EAAe14C,KAC7BqC,KAAMq2C,EAAer2C,KACrBy2C,SAAUH,IAGZh9C,QAAQ0C,IAAI,gBAAiBq6C,EAAe33C,MAC5C0tC,EAAGI,KAAKoG,EACV,MACEt5C,QAAQC,MAAM,iDAElB,CAGArB,SAASiJ,KAAKqkC,YAAYwQ,KAI5BA,EAAUU;wBAUQpB;oBACJ,CACN5oC,MAAO,OACPmlC,QAAS,MACTJ,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZ0C,QAASiB,EAAc,EAAI,GAC3BlmB,OAAQkmB,EAAc,UAAY;;eAGjC/xC;;aAEFkxC,SAAoBqB,aAzIZn7C,IACf,MAAMtC,EAAQsC,EAAE4E,OAAOlH,MACvBw9C,EAAWx9C,GAGPA,EAAMkF,OAAS,GAAKlF,EAAMkF,QAAUkuC,EACtCmK,GAAa,GAEbA,GAAa,GAIfG,GAAW,GACPR,EAAertC,QAAQwtC,WACzB/xC,aAAa4xC,EAAertC,QAAQwtC,WAEtCH,EAAertC,QAAQwtC,UAAYhyC,WACjC,IAAMqyC,GAAW,GAvDE,mBA4EWp7C,KAC3Bg7C,IAAcL,GAAepF,EAAQ3yC,OAASkuC,EACjDnyC,QAAQ0C,IAAI,0CAId1C,QAAQ0C,IAAI,wCACZ+4C,EAAS7E,GACT2F,EAAW,IACXD,GAAa,GACbG,GAAW,cAyF6F7F;;0BAnHpFv1C,IACpBA,EAAE8oB,iBACF9oB,EAAEmtB,mBAEG6tB,IAAcL,GAAepF,EAAQ3yC,OAASkuC,EACjDnyC,QAAQ0C,IAAI,qCAId1C,QAAQ0C,IAAI,mCACZ+4C,EAAS7E,GACT2F,EAAW,IACXD,GAAa,GACbG,GAAW;;wBA0GOJ,IAAcL;oBAClB,CACN5oC,MAAO,OACPE,OAAQ,OACRilC,QAAS,MACTJ,QAAS,OACTC,eAAgB,SAChBC,WAAY,SACZgF,UAAW,MACXtC,QAASsB,GAAaL,EAAc,EAAI,GACxClmB,OAAQumB,GAAaL,EAAc,UAAY;;eAG9CrK;;;;;;GAOb,CAEA,SAASgG,GAAOf,QAAEA,IAChB,OAAO9kC,CAAI;;;gBAGC,CACNqmC,QAASvB,EAAU,QAAU,OAC7B2B,QAAS;;yBAGM,CAAEA,QAAS,UAAW3B;;KAG7C,EP/lCslS,SAAWhL,EAAExmB,GAAK,IAAMhZ,EAAE/K,EAAEmlC,EAAEphB,GAAGxmB,WAAWwmB,EAAExmB,SAAS4T,iBAAiBm5B,GAAEa,IAAIb,GAAEa,GAAGZ,EAAExmB,GAAGhZ,EAA0CgZ,EAAEmnB,IAAIlrC,EAAE,GAAGmlC,EAAE,GAAGiH,GAAEroB,EAAEwmB,EAAE,EAAWW,IAAIv0B,GAAEg1B,GAAE,KAAK,CAACpB,IAAIx/B,GAAG0/B,GAAEA,GAAE1mB,EAAEuoB,aAAuBvhC,EAAE,KAAKgZ,EAAEk4B,WAAW5R,GAAEp/B,KAAK8Y,EAAE9c,YAAY,KAAKjH,EAAU+K,EAAEA,EAAEsgC,IAAItnB,EAAEk4B,YAA1L,EAAuM9W,GAAGoH,GAAEvsC,EAAEuqC,EAAEpF,EAAE,COimCr4S9D,CAAO5wB,CAAI,IAtgCX,SAAyBu6B,GACvB,OAAOv6B,CAAI;SACN+hC;WACEmB;;KAGT,OAggCqCp2C,SAASoE,eAAe,YAC/D,CClmCO,SAASu6C,GAAiBC,GACZ5+C,SAASe,iBAAiB,0BAClCC,QAAS69C,IAClBA,EAASD,QAAUA,GAEvB,CCAO,SAASE,KACd,MAAMC,EAAa/+C,SAASoE,eAAe,cACrC46C,EAAeh/C,SAASoE,eAAe,gBAE7C26C,EAAWp9C,iBAAiB,QAAUc,IACpCk8C,IAAiB,KAEnBK,EAAar9C,iBAAiB,QAAUc,IACtCk8C,IAAiB,IAErB,CCVO,SAASM,KACd,MAAMF,EAAa/+C,SAASoE,eAAe,cACrC46C,EAAeh/C,SAASoE,eAAe,gBACvC86C,EAAqBl/C,SAASoE,eAAe,uBAEnD26C,EAAWp9C,iBAAiB,QAAUc,IACpCk8C,IAAiB,KAEnBK,EAAar9C,iBAAiB,QAAUc,IACtCk8C,IAAiB,KAEfO,GACFA,EAAmBv9C,iBAAiB,QAAUc,KAMlD,WACE,MAAM08C,EAAY5+C,KAAKC,MACrBR,SAASoE,eAAe,uBAAuB3D,aAE9BT,SAASe,iBAAiB,+BAClCC,QAAQ,SAAU69C,GAC3B,MAAMO,EAAUplC,SAAS6kC,EAAS1+C,MAAO,IACzC0+C,EAASD,QAAUO,EAAU3pC,SAAS4pC,EACxC,EACF,CAdMC,IAGN,CCQAr/C,SAAS2B,iBAAiB,mBAAoB,KAC5C,MAAM29C,EAAOt/C,SAASiJ,KAAK9H,QAAQm+C,KAGnC,OAFAl+C,QAAQ0C,IAAI,WAAYw7C,GAEhBA,GACN,IAAK,iBAIL,IAAK,aCnCP/8C,IDsCI,MACF,IAAK,qBAIL,IAAK,qBAIL,IAAK,yBAIL,IAAK,qBAIL,IAAK,aAIL,IAAK,cAIL,IAAK,mBAIL,IAAK,mBAIL,IAAK,uBAIL,IAAK,mBE1EPA,IACAwE,IF4EI,MACF,IAAK,QAIL,IAAK,QAYL,IAAK,qBG/FPrG,IHkGI,MAXF,IAAK,UAEH6+C,KACA,MACF,IAAK,OI7FPv/C,SAASoE,eAAe,QAAQzC,iBAAiB,QAAU8U,IACzDA,EAAM8U,iBAGJvrB,SAASw/C,UACT,IAAIC,IAAIz/C,SAASw/C,UAAUn1C,SAAWnC,OAAO8B,SAASK,OAEtDQ,QAAQI,OAER/C,OAAO8B,SAASI,KAAO,MJuFvB,MAKF,IAAK,OKlGP+hC,KACA8G,KLoGI,MACF,IAAK,4BAIL,IAAK,mCAIL,IAAK,wCAIL,IAAK,+BAIL,IAAK,wBMvHP6L,KN0HI,MACF,IAAK,yBAIL,IAAK,gCAIL,IAAK,qCAIL,IAAK,4BAIL,IAAK,qBO3IPG,KP8II,MACF,QACE79C,QAAQ0C,IAAI","x_google_ignoreList":[5,6,7,8,9,10,11,12,13,17,18,19,20,21,22,23]}