{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/tb-collection.js?x=1794560340710"],
  "sourcesContent": ["/* Toybox collection page: filters and sort, load more.\n   Desktop: filters and sort apply as soon as they change.\n   Phones (up to 749px): Filter opens a bottom sheet where choices are staged and the button shows the live\n   result count (\"Show 24 results\"); Sort opens its own sheet; quick price chips; load-more progress bar.\n   Category chips (phones) and the category rail (tablets and desktops, snippets/tb-col-desk-top) switch category\n   in place: the chip or card lights up at once, the page dims, only this section is fetched (prefetched on\n   touch or hover), then it cross-fades in and the address bar updates. */\nclass TbCollection extends HTMLElement {\n  connectedCallback() {\n    this.phone = window.matchMedia('(max-width: 749px)');\n    this.form = this.querySelector('[data-filters]');\n    this.sort = this.querySelector('[data-sort]');\n    this.panel = this.querySelector('.tb-facets-wrap');\n    this.toggleBtn = this.querySelector('[data-filter-toggle]');\n    this.scrim = this.querySelector('[data-filter-scrim]');\n    this.applyBtn = this.querySelector('[data-apply]');\n    this.applyCount = this.querySelector('[data-apply-count]');\n\n    this.form?.querySelectorAll('input[type=\"checkbox\"]').forEach((i) => i.addEventListener('change', () => {\n      if (this.isSheet()) this.preview(); else this.go();\n    }));\n    this.form?.addEventListener('submit', (e) => { e.preventDefault(); this.go(); });\n    this.form?.querySelectorAll('input[type=\"number\"]').forEach((i) => i.addEventListener('change', () => { if (this.isSheet()) this.preview(); }));\n    this.sort?.addEventListener('change', () => this.go());\n\n    this.toggleBtn?.addEventListener('click', () => this.setPanel(!this.panel.classList.contains('is-open')));\n    this.querySelectorAll('[data-filter-close]').forEach((b) => b.addEventListener('click', () => this.setPanel(false)));\n    this.scrim?.addEventListener('click', () => this.setPanel(false));\n    this.onKey = (e) => { if (e.key === 'Escape' && this.isSheet()) this.setPanel(false); };\n    document.addEventListener('keydown', this.onKey);\n\n    this.querySelectorAll('[data-show-all]').forEach((b) => b.addEventListener('click', () => {\n      const f = b.closest('.tb-facet'); const on = !f.classList.contains('show-all');\n      f.classList.toggle('show-all', on); b.textContent = on ? 'Show fewer' : b.dataset.label; b.setAttribute('aria-expanded', on ? 'true' : 'false');\n    }));\n\n    // Sort sheet (phones)\n    const sheet = this.querySelector('[data-sort-sheet]');\n    this.querySelector('[data-sort-open]')?.addEventListener('click', () => { if (sheet?.showModal) sheet.showModal(); });\n    sheet?.querySelectorAll('[data-sort-close]').forEach((b) => b.addEventListener('click', () => sheet.close()));\n    sheet?.addEventListener('click', (e) => { if (e.target === sheet) sheet.close(); });\n    sheet?.querySelectorAll('[data-sort-value]').forEach((b) => b.addEventListener('click', () => {\n      if (this.sort) this.sort.value = b.dataset.sortValue;\n      sheet.close();\n      this.go();\n    }));\n\n    // Quick price chips (phones): \"Under \u20B9499\" etc.\n    this.querySelectorAll('[data-price-max]').forEach((b) => b.addEventListener('click', () => {\n      const url = new URL(location.href);\n      url.searchParams.delete('page');\n      url.searchParams.delete(b.dataset.minParam);\n      if (b.getAttribute('aria-pressed') === 'true') url.searchParams.delete(b.dataset.maxParam);\n      else url.searchParams.set(b.dataset.maxParam, b.dataset.priceMax);\n      location.href = url.pathname + url.search;\n    }));\n\n    // Category banner video: the phone banner and the desktop banner each carry one; only the one on screen plays,\n    // muted on a loop, with a pause/play button. Paused for reduced motion.\n    const reduceMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    this.querySelectorAll('[data-hero-video]').forEach((box) => {\n      const v = box.querySelector('video');\n      const btn = box.querySelector('[data-hero-toggle]');\n      if (!v) return;\n      const sync = () => {\n        btn?.classList.toggle('is-paused', v.paused);\n        btn?.setAttribute('aria-label', v.paused ? 'Play video' : 'Pause video');\n      };\n      v.addEventListener('play', sync);\n      v.addEventListener('pause', sync);\n      btn?.addEventListener('click', () => {\n        if (v.paused) { delete v.dataset.userPaused; v.play().catch(() => {}); } else { v.dataset.userPaused = '1'; v.pause(); }\n      });\n      const shown = () => box.getClientRects().length > 0;\n      if (reduceMotion) { v.removeAttribute('autoplay'); v.pause(); }\n      else {\n        // Start it ourselves, muted and looping: a banner swapped in by a category switch is not always autoplayed,\n        // and phones in power saving block autoplay until the first touch, so try again then.\n        v.muted = true; v.defaultMuted = true; v.loop = true; v.playsInline = true; v.setAttribute('playsinline', '');\n        if (!shown()) { v.removeAttribute('autoplay'); v.pause(); }\n        const go = () => { if (v.isConnected && v.paused && !v.dataset.userPaused && shown()) v.play().catch(() => {}); };\n        go();\n        v.addEventListener('loadeddata', go, { once: true });\n        v.addEventListener('ended', () => { v.currentTime = 0; go(); });\n        const kick = (e) => {\n          if (e.target.closest && e.target.closest('[data-hero-toggle]')) return;\n          document.removeEventListener('touchstart', kick);\n          document.removeEventListener('click', kick);\n          go();\n        };\n        document.addEventListener('touchstart', kick, { passive: true });\n        document.addEventListener('click', kick);\n        // Crossing the phone breakpoint: play the banner now on screen, pause the hidden one.\n        this.onBp = this.onBp || [];\n        const onBp = () => { if (shown()) go(); else if (!v.paused) v.pause(); };\n        this.phone.addEventListener('change', onBp);\n        this.onBp.push(onBp);\n      }\n      sync();\n    });\n\n    // Keep the current category chip in view (after an in-place switch, glide from where the row was)\n    const row = this.querySelector('.tb-mcats');\n    const cur = row?.querySelector('[aria-current=\"page\"]');\n    if (row && cur && this.phone.matches && row.classList.contains('tb-mcats--rail')) {\n      // Side rail: keep where it was scrolled to, or bring the current category into view on arrival\n      if (TbCollection.chipTop != null) { row.scrollTop = TbCollection.chipTop; TbCollection.chipTop = null; }\n      else row.scrollTop = cur.offsetTop - (row.clientHeight - cur.offsetHeight) / 2;\n      TbCollection.placeRail();\n    } else if (row && cur && this.phone.matches) {\n      const center = () => row.scrollLeft + cur.getBoundingClientRect().left - row.getBoundingClientRect().left - (row.clientWidth - cur.offsetWidth) / 2;\n      if (TbCollection.chipLeft != null) {\n        row.scrollLeft = TbCollection.chipLeft;\n        TbCollection.chipLeft = null;\n        requestAnimationFrame(() => row.scrollTo({ left: center(), behavior: 'smooth' }));\n      } else {\n        row.scrollLeft = center();\n      }\n    }\n\n    // Category rail (tablets and desktops): keep the current card in view, gliding from where the rail was\n    const drow = this.querySelector('[data-dcats]');\n    const dcur = drow?.querySelector('[aria-current=\"page\"]');\n    if (drow && !this.phone.matches) {\n      const dcenter = () => (dcur ? drow.scrollTop + dcur.getBoundingClientRect().top - drow.getBoundingClientRect().top - (drow.clientHeight - dcur.offsetHeight) / 2 : drow.scrollTop);\n      if (TbCollection.cardTop != null) {\n        drow.scrollTop = TbCollection.cardTop;\n        TbCollection.cardTop = null;\n        requestAnimationFrame(() => drow.scrollTo({ top: dcenter(), behavior: 'smooth' }));\n      } else if (dcur) {\n        drow.scrollTop = dcenter();\n      }\n    }\n\n    // Category chips (phones) and cards (tablets and desktops): switch in place\n    row?.querySelectorAll('a[href]').forEach((a) => {\n      a.addEventListener('pointerdown', () => TbCollection.fetchSection(a.href, this.dataset.sectionId), { passive: true });\n      a.addEventListener('click', (e) => {\n        if (!this.phone.matches || e.metaKey || e.ctrlKey || e.shiftKey || a.getAttribute('aria-current') === 'page') return;\n        e.preventDefault();\n        this.switchTo(a.href, a);\n      });\n    });\n    drow?.querySelectorAll('a[href]').forEach((a) => {\n      const pre = () => TbCollection.fetchSection(a.href, this.dataset.sectionId);\n      a.addEventListener('pointerenter', pre, { passive: true });\n      a.addEventListener('pointerdown', pre, { passive: true });\n      a.addEventListener('click', (e) => {\n        if (this.phone.matches || e.metaKey || e.ctrlKey || e.shiftKey || e.button > 0) return;\n        e.preventDefault();\n        if (a.getAttribute('aria-current') === 'page') return;\n        this.switchTo(a.href, a);\n      });\n    });\n\n    // Load more\n    const more = this.querySelector('[data-load-more]');\n    more?.addEventListener('click', async (e) => {\n      e.preventDefault();\n      more.classList.add('is-loading');\n      try {\n        const html = await (await fetch(more.href)).text();\n        const doc = new DOMParser().parseFromString(html, 'text/html');\n        const grid = this.querySelector('[data-grid]');\n        doc.querySelectorAll('[data-grid] > *').forEach((n) => grid.appendChild(n));\n        const next = doc.querySelector('[data-load-more]');\n        const status = this.querySelector('[data-showing]');\n        const nstatus = doc.querySelector('[data-showing]');\n        if (status && nstatus) status.textContent = nstatus.textContent;\n        const bar = this.querySelector('[data-progress]');\n        const nbar = doc.querySelector('[data-progress]');\n        if (bar && nbar) bar.style.width = nbar.style.width;\n        if (next) { more.href = next.href; more.classList.remove('is-loading'); } else { more.closest('.tb-loadmore').remove(); }\n        document.dispatchEvent(new CustomEvent('tb:cards-added'));\n      } catch (err) { location.href = more.href; }\n    });\n  }\n\n  disconnectedCallback() {\n    document.removeEventListener('keydown', this.onKey);\n    (this.onBp || []).forEach((fn) => this.phone.removeEventListener('change', fn));\n    this.onBp = [];\n    this.abort?.abort();\n    this.unlock();\n  }\n\n  static cache = new Map();\n  static chipLeft = null;\n  static chipTop = null;\n  static cardTop = null;\n\n  /* Side rail (assets/tb-m-rail.css): from under the sticky header to the bottom bar, and never past the end of the products. */\n  static placeRail() {\n    const rail = document.querySelector('.tb-mcats--rail');\n    if (!rail || !window.matchMedia('(max-width: 749px)').matches) return;\n    const hd = document.getElementById('header-component');\n    let top = 0;\n    if (hd) { const r = hd.getBoundingClientRect(); if (r.bottom > 0 && getComputedStyle(hd).opacity !== '0') top = r.bottom; }\n    const nav = document.querySelector('.tb-mnav');\n    let bot = nav && getComputedStyle(nav).display !== 'none' ? nav.getBoundingClientRect().height : 0;\n    const col = rail.closest('tb-collection');\n    if (col) bot = Math.max(bot, window.innerHeight - col.getBoundingClientRect().bottom);\n    rail.style.setProperty('--rail-top', Math.round(top) + 'px');\n    rail.style.setProperty('--rail-bot', Math.round(bot) + 'px');\n  }\n\n  /* Fetch just this section for another collection URL; reused if already on its way. */\n  static fetchSection(url, sid) {\n    const u = new URL(url, location.href);\n    u.searchParams.set('section_id', sid);\n    const key = u.toString();\n    if (!TbCollection.cache.has(key)) {\n      const p = fetch(key, { credentials: 'same-origin' }).then((r) => { if (!r.ok) throw new Error(r.status); return r.text(); });\n      p.catch(() => TbCollection.cache.delete(key));\n      TbCollection.cache.set(key, p);\n      setTimeout(() => TbCollection.cache.delete(key), 60000);\n    }\n    return TbCollection.cache.get(key);\n  }\n\n  async switchTo(url, chip, push = true) {\n    if (chip) {\n      this.querySelectorAll('.tb-mcats [aria-current], .tb-dcats [aria-current]').forEach((x) => x.removeAttribute('aria-current'));\n      chip.setAttribute('aria-current', 'page');\n      const row = chip.parentElement;\n      if (row.hasAttribute('data-dcats')) row.scrollTo({ top: row.scrollTop + chip.getBoundingClientRect().top - row.getBoundingClientRect().top - (row.clientHeight - chip.offsetHeight) / 2, behavior: 'smooth' });\n      else if (!row.classList.contains('tb-mcats--rail')) row.scrollTo({ left: row.scrollLeft + chip.getBoundingClientRect().left - row.getBoundingClientRect().left - (row.clientWidth - chip.offsetWidth) / 2, behavior: 'smooth' });\n    }\n    this.classList.add('is-switching');\n    this.setAttribute('aria-busy', 'true');\n    const tok = (this.switchTok = (this.switchTok || 0) + 1);\n    try {\n      const html = await TbCollection.fetchSection(url, this.dataset.sectionId);\n      if (tok !== this.switchTok || !this.isConnected) return; // a newer tap won\n      const doc = new DOMParser().parseFromString(html, 'text/html');\n      const fresh = doc.querySelector('tb-collection');\n      if (!fresh) throw new Error('no section');\n      const titleOf = (root) => root.querySelector('#col-h')?.textContent.trim().replace(/[.]$/, '');\n      const oldTitle = titleOf(this);\n      const row = this.querySelector('.tb-mcats');\n      TbCollection.chipLeft = row ? row.scrollLeft : null;\n      TbCollection.chipTop = row ? row.scrollTop : null;\n      const drow = this.querySelector('[data-dcats]');\n      TbCollection.cardTop = drow ? drow.scrollTop : null;\n      const swap = () => { this.replaceWith(fresh); };\n      const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      if (document.startViewTransition && !reduce) {\n        await document.startViewTransition(swap).updateCallbackDone;\n      } else {\n        if (!reduce) fresh.classList.add('is-arriving');\n        swap();\n        requestAnimationFrame(() => requestAnimationFrame(() => fresh.classList.remove('is-arriving')));\n      }\n      if (push) history.pushState({ tbCol: true }, '', url);\n      const newTitle = titleOf(fresh);\n      if (oldTitle && newTitle) document.title = document.title.replace(oldTitle, newTitle);\n      document.dispatchEvent(new CustomEvent('tb:cards-added'));\n      const top = fresh.getBoundingClientRect().top;\n      if (top < 0) window.scrollBy({ top: top - 8, behavior: reduce ? 'auto' : 'smooth' });\n    } catch (err) {\n      if (tok === this.switchTok) location.href = url;\n    }\n  }\n\n  isSheet() { return this.phone.matches && !!this.panel?.classList.contains('is-open'); }\n\n  params() {\n    const params = new URLSearchParams(this.form ? new FormData(this.form) : undefined);\n    for (const [k, v] of [...params]) { if (v === '') params.delete(k); }\n    if (this.sort && this.sort.value) params.set('sort_by', this.sort.value);\n    return params;\n  }\n\n  go() {\n    const params = this.params();\n    location.href = location.pathname + (params.toString() ? '?' + params.toString() : '');\n  }\n\n  setPanel(open) {\n    if (!this.panel) return;\n    this.panel.classList.toggle('is-open', open);\n    this.toggleBtn?.setAttribute('aria-expanded', open ? 'true' : 'false');\n    if (!this.phone.matches) return;\n    if (this.scrim) this.scrim.hidden = !open;\n    if (open) {\n      this.panel.setAttribute('role', 'dialog');\n      this.panel.setAttribute('aria-modal', 'true');\n      document.documentElement.classList.add('tb-lock');\n      this.panel.querySelector('[data-filter-close]')?.focus();\n    } else {\n      this.panel.removeAttribute('role');\n      this.panel.removeAttribute('aria-modal');\n      this.unlock();\n      this.toggleBtn?.focus();\n    }\n  }\n\n  unlock() { document.documentElement.classList.remove('tb-lock'); }\n\n  /* Ask the section for the result count with the staged filters, without leaving the page. */\n  preview() {\n    if (!this.applyBtn) return;\n    clearTimeout(this.t);\n    this.t = setTimeout(async () => {\n      this.abort?.abort();\n      this.abort = new AbortController();\n      const params = this.params();\n      params.set('section_id', this.dataset.sectionId);\n      this.applyBtn.classList.add('is-loading');\n      try {\n        const res = await fetch(location.pathname + '?' + params.toString(), { signal: this.abort.signal });\n        const doc = new DOMParser().parseFromString(await res.text(), 'text/html');\n        const n = doc.querySelector('[data-total]');\n        if (n && this.applyCount) {\n          const total = parseInt(n.dataset.total, 10) || 0;\n          this.applyCount.textContent = total === 1 ? 'Show 1 result' : total === 0 ? 'No matches, try fewer' : 'Show ' + total + ' results';\n          this.applyBtn.disabled = false;\n        }\n      } catch (err) {\n        if (err.name !== 'AbortError' && this.applyCount) this.applyCount.textContent = 'Show results';\n      } finally {\n        this.applyBtn.classList.remove('is-loading');\n      }\n    }, 250);\n  }\n}\ncustomElements.get('tb-collection') || customElements.define('tb-collection', TbCollection);\nif (!window.tbRailOn) {\n  window.tbRailOn = true;\n  let queued = false;\n  const ask = () => { if (!queued) { queued = true; requestAnimationFrame(() => { queued = false; TbCollection.placeRail(); }); } };\n  window.addEventListener('scroll', ask, { passive: true });\n  window.addEventListener('resize', ask);\n}\nif (!window.tbColPop) {\n  window.tbColPop = true;\n  window.addEventListener('popstate', () => {\n    if (window.TbPv && window.TbPv.isOpen()) return; // closing a product card (assets/tb-m-pcard.js)\n    if (history.state && (history.state.tbPv || history.state.tbSm || history.state.tbQs || history.state.tbSd)) return;\n    // Back closing a phone overlay (search, quick cart, Star dash, coupons) is handled by that overlay.\n    const lock = document.documentElement.classList;\n    if (lock.contains('sm-lock') || lock.contains('qs-lock') || lock.contains('sd-lock') || lock.contains('cm-lock')) return;\n    const col = document.querySelector('tb-collection');\n    const phone = window.matchMedia('(max-width: 749px)').matches;\n    const inPlace = phone ? document.querySelector('.tb-mcats') : document.querySelector('.tb-dcats');\n    if (col && col.switchTo && inPlace) col.switchTo(location.href, null, false);\n    else location.reload();\n  });\n  if (!history.state) history.replaceState({ tbCol: true }, '');\n}\n"],
  "mappings": "AAOA,MAAM,qBAAqB,WAAY,CACrC,mBAAoB,CAClB,KAAK,MAAQ,OAAO,WAAW,oBAAoB,EACnD,KAAK,KAAO,KAAK,cAAc,gBAAgB,EAC/C,KAAK,KAAO,KAAK,cAAc,aAAa,EAC5C,KAAK,MAAQ,KAAK,cAAc,iBAAiB,EACjD,KAAK,UAAY,KAAK,cAAc,sBAAsB,EAC1D,KAAK,MAAQ,KAAK,cAAc,qBAAqB,EACrD,KAAK,SAAW,KAAK,cAAc,cAAc,EACjD,KAAK,WAAa,KAAK,cAAc,oBAAoB,EAEzD,KAAK,MAAM,iBAAiB,wBAAwB,EAAE,QAAS,GAAM,EAAE,iBAAiB,SAAU,IAAM,CAClG,KAAK,QAAQ,EAAG,KAAK,QAAQ,EAAQ,KAAK,GAAG,CACnD,CAAC,CAAC,EACF,KAAK,MAAM,iBAAiB,SAAW,GAAM,CAAE,EAAE,eAAe,EAAG,KAAK,GAAG,CAAG,CAAC,EAC/E,KAAK,MAAM,iBAAiB,sBAAsB,EAAE,QAAS,GAAM,EAAE,iBAAiB,SAAU,IAAM,CAAM,KAAK,QAAQ,GAAG,KAAK,QAAQ,CAAG,CAAC,CAAC,EAC9I,KAAK,MAAM,iBAAiB,SAAU,IAAM,KAAK,GAAG,CAAC,EAErD,KAAK,WAAW,iBAAiB,QAAS,IAAM,KAAK,SAAS,CAAC,KAAK,MAAM,UAAU,SAAS,SAAS,CAAC,CAAC,EACxG,KAAK,iBAAiB,qBAAqB,EAAE,QAAS,GAAM,EAAE,iBAAiB,QAAS,IAAM,KAAK,SAAS,EAAK,CAAC,CAAC,EACnH,KAAK,OAAO,iBAAiB,QAAS,IAAM,KAAK,SAAS,EAAK,CAAC,EAChE,KAAK,MAAS,GAAM,CAAM,EAAE,MAAQ,UAAY,KAAK,QAAQ,GAAG,KAAK,SAAS,EAAK,CAAG,EACtF,SAAS,iBAAiB,UAAW,KAAK,KAAK,EAE/C,KAAK,iBAAiB,iBAAiB,EAAE,QAAS,GAAM,EAAE,iBAAiB,QAAS,IAAM,CACxF,MAAM,EAAI,EAAE,QAAQ,WAAW,EAAS,GAAK,CAAC,EAAE,UAAU,SAAS,UAAU,EAC7E,EAAE,UAAU,OAAO,WAAY,EAAE,EAAG,EAAE,YAAc,GAAK,aAAe,EAAE,QAAQ,MAAO,EAAE,aAAa,gBAAiB,GAAK,OAAS,OAAO,CAChJ,CAAC,CAAC,EAGF,MAAM,MAAQ,KAAK,cAAc,mBAAmB,EACpD,KAAK,cAAc,kBAAkB,GAAG,iBAAiB,QAAS,IAAM,CAAM,OAAO,WAAW,MAAM,UAAU,CAAG,CAAC,EACpH,OAAO,iBAAiB,mBAAmB,EAAE,QAAS,GAAM,EAAE,iBAAiB,QAAS,IAAM,MAAM,MAAM,CAAC,CAAC,EAC5G,OAAO,iBAAiB,QAAU,GAAM,CAAM,EAAE,SAAW,OAAO,MAAM,MAAM,CAAG,CAAC,EAClF,OAAO,iBAAiB,mBAAmB,EAAE,QAAS,GAAM,EAAE,iBAAiB,QAAS,IAAM,CACxF,KAAK,OAAM,KAAK,KAAK,MAAQ,EAAE,QAAQ,WAC3C,MAAM,MAAM,EACZ,KAAK,GAAG,CACV,CAAC,CAAC,EAGF,KAAK,iBAAiB,kBAAkB,EAAE,QAAS,GAAM,EAAE,iBAAiB,QAAS,IAAM,CACzF,MAAM,IAAM,IAAI,IAAI,SAAS,IAAI,EACjC,IAAI,aAAa,OAAO,MAAM,EAC9B,IAAI,aAAa,OAAO,EAAE,QAAQ,QAAQ,EACtC,EAAE,aAAa,cAAc,IAAM,OAAQ,IAAI,aAAa,OAAO,EAAE,QAAQ,QAAQ,EACpF,IAAI,aAAa,IAAI,EAAE,QAAQ,SAAU,EAAE,QAAQ,QAAQ,EAChE,SAAS,KAAO,IAAI,SAAW,IAAI,MACrC,CAAC,CAAC,EAIF,MAAM,aAAe,OAAO,WAAW,kCAAkC,EAAE,QAC3E,KAAK,iBAAiB,mBAAmB,EAAE,QAAS,KAAQ,CAC1D,MAAM,EAAI,IAAI,cAAc,OAAO,EAC7B,IAAM,IAAI,cAAc,oBAAoB,EAClD,GAAI,CAAC,EAAG,OACR,MAAM,KAAO,IAAM,CACjB,KAAK,UAAU,OAAO,YAAa,EAAE,MAAM,EAC3C,KAAK,aAAa,aAAc,EAAE,OAAS,aAAe,aAAa,CACzE,EACA,EAAE,iBAAiB,OAAQ,IAAI,EAC/B,EAAE,iBAAiB,QAAS,IAAI,EAChC,KAAK,iBAAiB,QAAS,IAAM,CAC/B,EAAE,QAAU,OAAO,EAAE,QAAQ,WAAY,EAAE,KAAK,EAAE,MAAM,IAAM,CAAC,CAAC,IAAY,EAAE,QAAQ,WAAa,IAAK,EAAE,MAAM,EACtH,CAAC,EACD,MAAM,MAAQ,IAAM,IAAI,eAAe,EAAE,OAAS,EAClD,GAAI,aAAgB,EAAE,gBAAgB,UAAU,EAAG,EAAE,MAAM,MACtD,CAGH,EAAE,MAAQ,GAAM,EAAE,aAAe,GAAM,EAAE,KAAO,GAAM,EAAE,YAAc,GAAM,EAAE,aAAa,cAAe,EAAE,EACvG,MAAM,IAAK,EAAE,gBAAgB,UAAU,EAAG,EAAE,MAAM,GACvD,MAAM,GAAK,IAAM,CAAM,EAAE,aAAe,EAAE,QAAU,CAAC,EAAE,QAAQ,YAAc,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,IAAM,CAAC,CAAC,CAAG,EAChH,GAAG,EACH,EAAE,iBAAiB,aAAc,GAAI,CAAE,KAAM,EAAK,CAAC,EACnD,EAAE,iBAAiB,QAAS,IAAM,CAAE,EAAE,YAAc,EAAG,GAAG,CAAG,CAAC,EAC9D,MAAM,KAAQ,GAAM,CACd,EAAE,OAAO,SAAW,EAAE,OAAO,QAAQ,oBAAoB,IAC7D,SAAS,oBAAoB,aAAc,IAAI,EAC/C,SAAS,oBAAoB,QAAS,IAAI,EAC1C,GAAG,EACL,EACA,SAAS,iBAAiB,aAAc,KAAM,CAAE,QAAS,EAAK,CAAC,EAC/D,SAAS,iBAAiB,QAAS,IAAI,EAEvC,KAAK,KAAO,KAAK,MAAQ,CAAC,EAC1B,MAAM,KAAO,IAAM,CAAM,MAAM,EAAG,GAAG,EAAa,EAAE,QAAQ,EAAE,MAAM,CAAG,EACvE,KAAK,MAAM,iBAAiB,SAAU,IAAI,EAC1C,KAAK,KAAK,KAAK,IAAI,CACrB,CACA,KAAK,CACP,CAAC,EAGD,MAAM,IAAM,KAAK,cAAc,WAAW,EACpC,IAAM,KAAK,cAAc,uBAAuB,EACtD,GAAI,KAAO,KAAO,KAAK,MAAM,SAAW,IAAI,UAAU,SAAS,gBAAgB,EAEzE,aAAa,SAAW,MAAQ,IAAI,UAAY,aAAa,QAAS,aAAa,QAAU,MAC5F,IAAI,UAAY,IAAI,WAAa,IAAI,aAAe,IAAI,cAAgB,EAC7E,aAAa,UAAU,UACd,KAAO,KAAO,KAAK,MAAM,QAAS,CAC3C,MAAM,OAAS,IAAM,IAAI,WAAa,IAAI,sBAAsB,EAAE,KAAO,IAAI,sBAAsB,EAAE,MAAQ,IAAI,YAAc,IAAI,aAAe,EAC9I,aAAa,UAAY,MAC3B,IAAI,WAAa,aAAa,SAC9B,aAAa,SAAW,KACxB,sBAAsB,IAAM,IAAI,SAAS,CAAE,KAAM,OAAO,EAAG,SAAU,QAAS,CAAC,CAAC,GAEhF,IAAI,WAAa,OAAO,CAE5B,CAGA,MAAM,KAAO,KAAK,cAAc,cAAc,EACxC,KAAO,MAAM,cAAc,uBAAuB,EACxD,GAAI,MAAQ,CAAC,KAAK,MAAM,QAAS,CAC/B,MAAM,QAAU,IAAO,KAAO,KAAK,UAAY,KAAK,sBAAsB,EAAE,IAAM,KAAK,sBAAsB,EAAE,KAAO,KAAK,aAAe,KAAK,cAAgB,EAAI,KAAK,UACpK,aAAa,SAAW,MAC1B,KAAK,UAAY,aAAa,QAC9B,aAAa,QAAU,KACvB,sBAAsB,IAAM,KAAK,SAAS,CAAE,IAAK,QAAQ,EAAG,SAAU,QAAS,CAAC,CAAC,GACxE,OACT,KAAK,UAAY,QAAQ,EAE7B,CAGA,KAAK,iBAAiB,SAAS,EAAE,QAAS,GAAM,CAC9C,EAAE,iBAAiB,cAAe,IAAM,aAAa,aAAa,EAAE,KAAM,KAAK,QAAQ,SAAS,EAAG,CAAE,QAAS,EAAK,CAAC,EACpH,EAAE,iBAAiB,QAAU,GAAM,CAC7B,CAAC,KAAK,MAAM,SAAW,EAAE,SAAW,EAAE,SAAW,EAAE,UAAY,EAAE,aAAa,cAAc,IAAM,SACtG,EAAE,eAAe,EACjB,KAAK,SAAS,EAAE,KAAM,CAAC,EACzB,CAAC,CACH,CAAC,EACD,MAAM,iBAAiB,SAAS,EAAE,QAAS,GAAM,CAC/C,MAAM,IAAM,IAAM,aAAa,aAAa,EAAE,KAAM,KAAK,QAAQ,SAAS,EAC1E,EAAE,iBAAiB,eAAgB,IAAK,CAAE,QAAS,EAAK,CAAC,EACzD,EAAE,iBAAiB,cAAe,IAAK,CAAE,QAAS,EAAK,CAAC,EACxD,EAAE,iBAAiB,QAAU,GAAM,CAC7B,KAAK,MAAM,SAAW,EAAE,SAAW,EAAE,SAAW,EAAE,UAAY,EAAE,OAAS,IAC7E,EAAE,eAAe,EACb,EAAE,aAAa,cAAc,IAAM,QACvC,KAAK,SAAS,EAAE,KAAM,CAAC,EACzB,CAAC,CACH,CAAC,EAGD,MAAM,KAAO,KAAK,cAAc,kBAAkB,EAClD,MAAM,iBAAiB,QAAS,MAAO,GAAM,CAC3C,EAAE,eAAe,EACjB,KAAK,UAAU,IAAI,YAAY,EAC/B,GAAI,CACF,MAAM,KAAO,MAAO,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,EAC3C,IAAM,IAAI,UAAU,EAAE,gBAAgB,KAAM,WAAW,EACvD,KAAO,KAAK,cAAc,aAAa,EAC7C,IAAI,iBAAiB,iBAAiB,EAAE,QAAS,GAAM,KAAK,YAAY,CAAC,CAAC,EAC1E,MAAM,KAAO,IAAI,cAAc,kBAAkB,EAC3C,OAAS,KAAK,cAAc,gBAAgB,EAC5C,QAAU,IAAI,cAAc,gBAAgB,EAC9C,QAAU,UAAS,OAAO,YAAc,QAAQ,aACpD,MAAM,IAAM,KAAK,cAAc,iBAAiB,EAC1C,KAAO,IAAI,cAAc,iBAAiB,EAC5C,KAAO,OAAM,IAAI,MAAM,MAAQ,KAAK,MAAM,OAC1C,MAAQ,KAAK,KAAO,KAAK,KAAM,KAAK,UAAU,OAAO,YAAY,GAAY,KAAK,QAAQ,cAAc,EAAE,OAAO,EACrH,SAAS,cAAc,IAAI,YAAY,gBAAgB,CAAC,CAC1D,MAAc,CAAE,SAAS,KAAO,KAAK,IAAM,CAC7C,CAAC,CACH,CAEA,sBAAuB,CACrB,SAAS,oBAAoB,UAAW,KAAK,KAAK,GACjD,KAAK,MAAQ,CAAC,GAAG,QAAS,IAAO,KAAK,MAAM,oBAAoB,SAAU,EAAE,CAAC,EAC9E,KAAK,KAAO,CAAC,EACb,KAAK,OAAO,MAAM,EAClB,KAAK,OAAO,CACd,CAEA,OAAO,MAAQ,IAAI,IACnB,OAAO,SAAW,KAClB,OAAO,QAAU,KACjB,OAAO,QAAU,KAGjB,OAAO,WAAY,CACjB,MAAM,KAAO,SAAS,cAAc,iBAAiB,EACrD,GAAI,CAAC,MAAQ,CAAC,OAAO,WAAW,oBAAoB,EAAE,QAAS,OAC/D,MAAM,GAAK,SAAS,eAAe,kBAAkB,EACrD,IAAI,IAAM,EACV,GAAI,GAAI,CAAE,MAAM,EAAI,GAAG,sBAAsB,EAAO,EAAE,OAAS,GAAK,iBAAiB,EAAE,EAAE,UAAY,MAAK,IAAM,EAAE,OAAQ,CAC1H,MAAM,IAAM,SAAS,cAAc,UAAU,EAC7C,IAAI,IAAM,KAAO,iBAAiB,GAAG,EAAE,UAAY,OAAS,IAAI,sBAAsB,EAAE,OAAS,EACjG,MAAM,IAAM,KAAK,QAAQ,eAAe,EACpC,MAAK,IAAM,KAAK,IAAI,IAAK,OAAO,YAAc,IAAI,sBAAsB,EAAE,MAAM,GACpF,KAAK,MAAM,YAAY,aAAc,KAAK,MAAM,GAAG,EAAI,IAAI,EAC3D,KAAK,MAAM,YAAY,aAAc,KAAK,MAAM,GAAG,EAAI,IAAI,CAC7D,CAGA,OAAO,aAAa,IAAK,IAAK,CAC5B,MAAM,EAAI,IAAI,IAAI,IAAK,SAAS,IAAI,EACpC,EAAE,aAAa,IAAI,aAAc,GAAG,EACpC,MAAM,IAAM,EAAE,SAAS,EACvB,GAAI,CAAC,aAAa,MAAM,IAAI,GAAG,EAAG,CAChC,MAAM,EAAI,MAAM,IAAK,CAAE,YAAa,aAAc,CAAC,EAAE,KAAM,GAAM,CAAE,GAAI,CAAC,EAAE,GAAI,MAAM,IAAI,MAAM,EAAE,MAAM,EAAG,OAAO,EAAE,KAAK,CAAG,CAAC,EAC3H,EAAE,MAAM,IAAM,aAAa,MAAM,OAAO,GAAG,CAAC,EAC5C,aAAa,MAAM,IAAI,IAAK,CAAC,EAC7B,WAAW,IAAM,aAAa,MAAM,OAAO,GAAG,EAAG,GAAK,CACxD,CACA,OAAO,aAAa,MAAM,IAAI,GAAG,CACnC,CAEA,MAAM,SAAS,IAAK,KAAM,KAAO,GAAM,CACrC,GAAI,KAAM,CACR,KAAK,iBAAiB,oDAAoD,EAAE,QAAS,GAAM,EAAE,gBAAgB,cAAc,CAAC,EAC5H,KAAK,aAAa,eAAgB,MAAM,EACxC,MAAM,IAAM,KAAK,cACb,IAAI,aAAa,YAAY,EAAG,IAAI,SAAS,CAAE,IAAK,IAAI,UAAY,KAAK,sBAAsB,EAAE,IAAM,IAAI,sBAAsB,EAAE,KAAO,IAAI,aAAe,KAAK,cAAgB,EAAG,SAAU,QAAS,CAAC,EACnM,IAAI,UAAU,SAAS,gBAAgB,GAAG,IAAI,SAAS,CAAE,KAAM,IAAI,WAAa,KAAK,sBAAsB,EAAE,KAAO,IAAI,sBAAsB,EAAE,MAAQ,IAAI,YAAc,KAAK,aAAe,EAAG,SAAU,QAAS,CAAC,CACjO,CACA,KAAK,UAAU,IAAI,cAAc,EACjC,KAAK,aAAa,YAAa,MAAM,EACrC,MAAM,IAAO,KAAK,WAAa,KAAK,WAAa,GAAK,EACtD,GAAI,CACF,MAAM,KAAO,MAAM,aAAa,aAAa,IAAK,KAAK,QAAQ,SAAS,EACxE,GAAI,MAAQ,KAAK,WAAa,CAAC,KAAK,YAAa,OAEjD,MAAM,MADM,IAAI,UAAU,EAAE,gBAAgB,KAAM,WAAW,EAC3C,cAAc,eAAe,EAC/C,GAAI,CAAC,MAAO,MAAM,IAAI,MAAM,YAAY,EACxC,MAAM,QAAW,MAAS,KAAK,cAAc,QAAQ,GAAG,YAAY,KAAK,EAAE,QAAQ,OAAQ,EAAE,EACvF,SAAW,QAAQ,IAAI,EACvB,IAAM,KAAK,cAAc,WAAW,EAC1C,aAAa,SAAW,IAAM,IAAI,WAAa,KAC/C,aAAa,QAAU,IAAM,IAAI,UAAY,KAC7C,MAAM,KAAO,KAAK,cAAc,cAAc,EAC9C,aAAa,QAAU,KAAO,KAAK,UAAY,KAC/C,MAAM,KAAO,IAAM,CAAE,KAAK,YAAY,KAAK,CAAG,EACxC,OAAS,OAAO,WAAW,kCAAkC,EAAE,QACjE,SAAS,qBAAuB,CAAC,OACnC,MAAM,SAAS,oBAAoB,IAAI,EAAE,oBAEpC,QAAQ,MAAM,UAAU,IAAI,aAAa,EAC9C,KAAK,EACL,sBAAsB,IAAM,sBAAsB,IAAM,MAAM,UAAU,OAAO,aAAa,CAAC,CAAC,GAE5F,MAAM,QAAQ,UAAU,CAAE,MAAO,EAAK,EAAG,GAAI,GAAG,EACpD,MAAM,SAAW,QAAQ,KAAK,EAC1B,UAAY,WAAU,SAAS,MAAQ,SAAS,MAAM,QAAQ,SAAU,QAAQ,GACpF,SAAS,cAAc,IAAI,YAAY,gBAAgB,CAAC,EACxD,MAAM,IAAM,MAAM,sBAAsB,EAAE,IACtC,IAAM,GAAG,OAAO,SAAS,CAAE,IAAK,IAAM,EAAG,SAAU,OAAS,OAAS,QAAS,CAAC,CACrF,MAAc,CACR,MAAQ,KAAK,YAAW,SAAS,KAAO,IAC9C,CACF,CAEA,SAAU,CAAE,OAAO,KAAK,MAAM,SAAW,CAAC,CAAC,KAAK,OAAO,UAAU,SAAS,SAAS,CAAG,CAEtF,QAAS,CACP,MAAM,OAAS,IAAI,gBAAgB,KAAK,KAAO,IAAI,SAAS,KAAK,IAAI,EAAI,MAAS,EAClF,SAAW,CAAC,EAAG,CAAC,GAAK,CAAC,GAAG,MAAM,EAAS,IAAM,IAAI,OAAO,OAAO,CAAC,EACjE,OAAI,KAAK,MAAQ,KAAK,KAAK,OAAO,OAAO,IAAI,UAAW,KAAK,KAAK,KAAK,EAChE,MACT,CAEA,IAAK,CACH,MAAM,OAAS,KAAK,OAAO,EAC3B,SAAS,KAAO,SAAS,UAAY,OAAO,SAAS,EAAI,IAAM,OAAO,SAAS,EAAI,GACrF,CAEA,SAAS,KAAM,CACR,KAAK,QACV,KAAK,MAAM,UAAU,OAAO,UAAW,IAAI,EAC3C,KAAK,WAAW,aAAa,gBAAiB,KAAO,OAAS,OAAO,EAChE,KAAK,MAAM,UACZ,KAAK,QAAO,KAAK,MAAM,OAAS,CAAC,MACjC,MACF,KAAK,MAAM,aAAa,OAAQ,QAAQ,EACxC,KAAK,MAAM,aAAa,aAAc,MAAM,EAC5C,SAAS,gBAAgB,UAAU,IAAI,SAAS,EAChD,KAAK,MAAM,cAAc,qBAAqB,GAAG,MAAM,IAEvD,KAAK,MAAM,gBAAgB,MAAM,EACjC,KAAK,MAAM,gBAAgB,YAAY,EACvC,KAAK,OAAO,EACZ,KAAK,WAAW,MAAM,IAE1B,CAEA,QAAS,CAAE,SAAS,gBAAgB,UAAU,OAAO,SAAS,CAAG,CAGjE,SAAU,CACH,KAAK,WACV,aAAa,KAAK,CAAC,EACnB,KAAK,EAAI,WAAW,SAAY,CAC9B,KAAK,OAAO,MAAM,EAClB,KAAK,MAAQ,IAAI,gBACjB,MAAM,OAAS,KAAK,OAAO,EAC3B,OAAO,IAAI,aAAc,KAAK,QAAQ,SAAS,EAC/C,KAAK,SAAS,UAAU,IAAI,YAAY,EACxC,GAAI,CACF,MAAM,IAAM,MAAM,MAAM,SAAS,SAAW,IAAM,OAAO,SAAS,EAAG,CAAE,OAAQ,KAAK,MAAM,MAAO,CAAC,EAE5F,EADM,IAAI,UAAU,EAAE,gBAAgB,MAAM,IAAI,KAAK,EAAG,WAAW,EAC3D,cAAc,cAAc,EAC1C,GAAI,GAAK,KAAK,WAAY,CACxB,MAAM,MAAQ,SAAS,EAAE,QAAQ,MAAO,EAAE,GAAK,EAC/C,KAAK,WAAW,YAAc,QAAU,EAAI,gBAAkB,QAAU,EAAI,wBAA0B,QAAU,MAAQ,WACxH,KAAK,SAAS,SAAW,EAC3B,CACF,OAAS,IAAK,CACR,IAAI,OAAS,cAAgB,KAAK,aAAY,KAAK,WAAW,YAAc,eAClF,QAAE,CACA,KAAK,SAAS,UAAU,OAAO,YAAY,CAC7C,CACF,EAAG,GAAG,EACR,CACF,CAEA,GADA,eAAe,IAAI,eAAe,GAAK,eAAe,OAAO,gBAAiB,YAAY,EACtF,CAAC,OAAO,SAAU,CACpB,OAAO,SAAW,GAClB,IAAI,OAAS,GACb,MAAM,IAAM,IAAM,CAAO,SAAU,OAAS,GAAM,sBAAsB,IAAM,CAAE,OAAS,GAAO,aAAa,UAAU,CAAG,CAAC,EAAK,EAChI,OAAO,iBAAiB,SAAU,IAAK,CAAE,QAAS,EAAK,CAAC,EACxD,OAAO,iBAAiB,SAAU,GAAG,CACvC,CACK,OAAO,WACV,OAAO,SAAW,GAClB,OAAO,iBAAiB,WAAY,IAAM,CAExC,GADI,OAAO,MAAQ,OAAO,KAAK,OAAO,GAClC,QAAQ,QAAU,QAAQ,MAAM,MAAQ,QAAQ,MAAM,MAAQ,QAAQ,MAAM,MAAQ,QAAQ,MAAM,MAAO,OAE7G,MAAM,KAAO,SAAS,gBAAgB,UACtC,GAAI,KAAK,SAAS,SAAS,GAAK,KAAK,SAAS,SAAS,GAAK,KAAK,SAAS,SAAS,GAAK,KAAK,SAAS,SAAS,EAAG,OAClH,MAAM,IAAM,SAAS,cAAc,eAAe,EAE5C,QADQ,OAAO,WAAW,oBAAoB,EAAE,QAC9B,SAAS,cAAc,WAAW,EAAI,SAAS,cAAc,WAAW,EAC5F,KAAO,IAAI,UAAY,QAAS,IAAI,SAAS,SAAS,KAAM,KAAM,EAAK,EACtE,SAAS,OAAO,CACvB,CAAC,EACI,QAAQ,OAAO,QAAQ,aAAa,CAAE,MAAO,EAAK,EAAG,EAAE",
  "names": []
}
