{
  "version": 3,
  "sources": ["/cdn/shop/t/28/assets/algolia-discogs-collection.js?fr_recent_sellers=20260709a"],
  "sourcesContent": ["(function () {\n  const FACETS = [\n    { attribute: 'meta.custom.genre', label: 'Genre' },\n    { attribute: 'meta.custom.style', label: 'Style' },\n    { attribute: 'format_groups', label: 'Format' },\n    { attribute: 'meta.custom.release_year', label: 'Year' },\n  ];\n\n  const PRICE_RANGES = [\n    { label: 'Under $10', min: null, max: 10 },\n    { label: '$10-$20', min: 10, max: 20 },\n    { label: '$20-$30', min: 20, max: 30 },\n    { label: '$30-$50', min: 30, max: 50 },\n    { label: '$50+', min: 50, max: null },\n  ];\n\n  const AVAILABILITY_FILTERS = [\n    { label: 'In stock', value: 'true' },\n    { label: 'Sold out', value: 'false' },\n  ];\n\n  const FORMAT_FACET_ATTRIBUTE = 'format_groups';\n  const RAW_FORMAT_FACET_ATTRIBUTE = 'meta.custom.format';\n  const STICKY_FACET_ATTRIBUTES = new Set([FORMAT_FACET_ATTRIBUTE, 'meta.custom.release_year']);\n  const FORMAT_GROUPS = [\n    { label: 'LP', value: 'format_lp', test: function (value) { return hasFormatToken(value, 'LP'); } },\n    { label: '12\"', value: 'format_12_inch', test: function (value) { return value.indexOf('12\"') !== -1; } },\n    { label: '7\"', value: 'format_7_inch', test: function (value) { return value.indexOf('7\"') !== -1; } },\n    { label: '10\"', value: 'format_10_inch', test: function (value) { return value.indexOf('10\"') !== -1 || value.indexOf('9\"') !== -1 || value.indexOf('8\"') !== -1; } },\n    { label: 'CD', value: 'format_cd', test: function (value) { return hasFormatToken(value, 'CD'); } },\n    { label: 'Cassette', value: 'format_cassette', test: function (value) { return /cassette/i.test(value); } },\n    { label: 'Box Set', value: 'format_box_set', test: function (value) { return /box set/i.test(value); } },\n    { label: 'DVD', value: 'format_dvd', test: function (value) { return hasFormatToken(value, 'DVD') || /dvd-video/i.test(value); } },\n    { label: 'Books / Magazines', value: 'format_books_magazines', test: function (value) { return /\\bbook\\b|magazine/i.test(value); } },\n  ];\n\n  const FACET_COLLAPSED_LIMIT = 20;\n  const FACET_EXPANDED_LIMIT = 100;\n  const FACET_COLLAPSED_LIMITS = {\n    'meta.custom.genre': 5,\n    'meta.custom.style': 10,\n    'format_groups': 5,\n    'meta.custom.release_year': 5,\n  };\n  const FACETS_COLLAPSED_BY_DEFAULT = new Set();\n  const AVAILABILITY_LOCKED_ROUTES = new Set(['back-in-stock', 'best-sellers']);\n  const TAG_BACKED_COLLECTION_HANDLES = new Set(['styles', 'labels', 'artists']);\n  const GENRE_FACET_ROUTES = new Set(['all', 'back-in-stock', 'best-sellers', 'on-sale', 'used']);\n  const FORMAT_ROUTES = {\n    'format-lp': 'format_lp',\n    'format-12-inch': 'format_12_inch',\n    'format-10-inch': 'format_10_inch',\n    'format-7-inch': 'format_7_inch',\n    'format-cd': 'format_cd',\n    'format-cassette': 'format_cassette',\n    'format-box-set': 'format_box_set',\n    'format-dvd': 'format_dvd',\n    'books-magazines': 'format_books_magazines',\n  };\n  const RAW_FORMAT_ROUTE_VALUES = {\n    format_lp: ['LP', '2xLP', '3xLP', '4xLP', '5xLP', 'LP+LP', 'LP+CD', '2xLP+CD', 'LP+7\"', '2xLP+7\"', '3xLP+7\"', 'Box Set+LP', 'Box Set+5xLP'],\n    format_12_inch: ['12\"', '2x12\"', '3x12\"', '4x12\"', '5x12\"', '12\"+7\"', 'LP+12\"', '2xLP+12\"', 'Box Set+12\"'],\n    format_10_inch: ['10\"', '2x10\"', '8\"', '9\"', '10\"+7\"', 'LP+10\"', 'Box Set+10\"'],\n    format_7_inch: ['7\"', '2x7\"', '3x7\"', '4x7\"', '5x7\"', '7\"+7\"', '10\"+7\"', '12\"+7\"', 'LP+7\"', '2xLP+7\"', '3xLP+7\"', '5x7\"+Box Set'],\n    format_cd: ['CD', '2xCD', '3xCD', '4xCD', '5xCD', '6xCD', '7xCD', '8xCD', '9xCD', '10xCD', '17xCD+Box Set', '19xCD+Box Set', 'CD+DVD', 'LP+CD', '2xLP+CD', '2xCD+12\"', 'Box Set+CD'],\n    format_cassette: ['Cassette', '2xCassette', '3xCassette', '4xCassette', 'Cassette+Cassette', 'Box Set+Cassette'],\n    format_box_set: ['Box Set', 'Box Set+LP', 'Box Set+5xLP', 'Box Set+CD', '17xCD+Box Set', '19xCD+Box Set', '5x7\"+Box Set'],\n    format_dvd: ['DVD', '2xDVD', 'DVD-Video', 'CD+DVD', 'LP+DVD'],\n    format_books_magazines: ['Book', 'Magazine', 'Books', 'Magazines'],\n  };\n\n  const GENRE_ROUTES = {\n    electronic: 'Electronic',\n    'funk-soul': 'Funk / Soul',\n    rock: 'Rock',\n    jazz: 'Jazz',\n    'folk-world-country': 'Folk, World, & Country',\n    pop: 'Pop',\n    latin: 'Latin',\n    'hip-hop': 'Hip Hop',\n    reggae: 'Reggae',\n    'stage-screen': 'Stage & Screen',\n    classical: 'Classical',\n    blues: 'Blues',\n    'non-music': 'Non-Music',\n  };\n\n  const TAG_ROUTE_FILTERS = {\n    'house-techno-electro': [\n      'House',\n      'Acid House',\n      'Deep House',\n      'Electro House',\n      'Euro House',\n      'Garage House',\n      'Ghetto House',\n      'Hard House',\n      'Italo House',\n      'Tech House',\n      'Tribal House',\n      'Tropical House',\n      'Hip-House',\n      'Witch House',\n      'Techno',\n      'Deep Techno',\n      'Dub Techno',\n      'Hard Techno',\n      'Minimal Techno',\n      'Ghettotech',\n      'Tech Trance',\n      'Trance',\n      'Neo Trance',\n      'Electro',\n      'Dark Electro',\n      'Gqom',\n      'Progressive House',\n      'Progressive Trance',\n    ],\n    'funk-soul-disco': [\n      'Funk / Soul',\n      'Disco',\n      'Italo-Disco',\n      'Euro-Disco',\n      'Boogie',\n      'Hi NRG',\n      'Balearic',\n      'Nu-Disco',\n      'Jazzdance',\n      'Freestyle',\n    ],\n    'hip-hop-breakbeat': [\n      'EBM',\n      'Hip Hop',\n      'Boogie',\n      'Jungle',\n      'Drum n Bass',\n      'Breakbeat',\n      'Broken Beat',\n      'Bass Music',\n      'Breaks',\n      'Future Jazz',\n      'Breakcore',\n      'UK Garage',\n      'UK Funky',\n      'IDM',\n      'Dubstep',\n      'Trip Hop',\n      'Footwork',\n      'Trap',\n      'Favela Funk',\n    ],\n    'jazz-international': [\n      'Jazz-Funk',\n      'Jazz-Rock',\n      'Jazzdance',\n      'Afro-Cuban Jazz',\n      'Acid Jazz',\n      'Soul-Jazz',\n      'Avant-garde Jazz',\n      'Free Jazz',\n      'Hard Bop',\n      'Zouk',\n      'African',\n      'Afrobeat',\n      'Highlife',\n      'MPB',\n      'Calypso',\n      'Samba',\n      'Funan\u00E1',\n      'Bossanova',\n      'Soukous',\n      'Cumbia',\n      'Latin',\n      'Reggae',\n      'Ra\u00EF',\n      'Ranchera',\n      'Son',\n      'Merengue',\n      'Gamelan',\n      'Chanson',\n      'Krautrock',\n      'Kwaito',\n      'Mugham',\n      'Indian Classical',\n      'Carnatic',\n      'Persian Classical',\n      'Maloya',\n      'Chinese Classical',\n      'Religious',\n      'Latin Jazz',\n      'Boogaloo',\n      'Yemenite Jewish',\n      'Gqom',\n      'Cubano',\n      'Nh\u1EA1c V\u00E0ng',\n      'City pop',\n      'Hawaiian',\n      'Aboriginal',\n      'Kaseko',\n      'Rebetiko',\n      'Nordic',\n      'Volksmusik',\n      'Jazz',\n      'Fusion',\n      'Candombe',\n      'Griot',\n      'Luk Krung',\n      'Andean Music',\n      'Bengali Music',\n      'Mo Lam',\n    ],\n    'ambient-experimental': [\n      'Ambient',\n      'Dark Ambient',\n      'Experimental',\n      'Downtempo',\n      'Leftfield',\n      'Drone',\n      'IDM',\n      'Bass Music',\n      'Electroacoustic',\n      'Musique Concr\u00E8te',\n      'Abstract',\n      'Noise',\n      'Field Recording',\n      'No Wave',\n      'Avantgarde',\n      'New Age',\n    ],\n    'rock-pop-blues': [\n      'Rock',\n      'Pop',\n      'Blues',\n      'Folk',\n      'Psychedelic Rock',\n      'Folk Rock',\n      'Indie Rock',\n      'New Wave',\n      'Punk',\n      'Pop Rock',\n      'Chanson',\n      'Krautrock',\n      'Synthwave',\n      'No Wave',\n      'Synth-pop',\n      'City pop',\n      'Dance-pop',\n    ],\n    'soundtrack-classical': [\n      'Classical',\n      'Stage & Screen',\n      'Non-Music',\n      'Indian Classical',\n      'Persian Classical',\n      'Chinese Classical',\n      'Religious',\n      'Score',\n      'Theme',\n      'Soundtrack',\n      'Sound Effects',\n    ],\n    magazine: ['Magazine', 'Book'],\n    'record-store-day': ['RSD'],\n    used: ['used'],\n  };\n\n  const RETRIEVE = [\n    'title',\n    'vendor',\n    'handle',\n    'price',\n    'compare_at_price',\n    'product_image',\n    'image',\n    'sku',\n    'tags',\n    'inventory_available',\n    'id',\n    'objectID',\n    'meta.artists.name',\n    'meta.labels.name',\n    'meta.custom.series',\n    'series_names',\n    'meta.custom.genre',\n    'meta.custom.style',\n    'format_groups',\n    'meta.custom.format_group',\n    'meta.custom.format',\n    'meta.custom.release_year',\n    'meta.custom.audio',\n    'audio_tracks',\n    'has_audio',\n  ];\n\n  function boot() {\n    document.querySelectorAll('[data-algolia-discogs-root]').forEach(initRoot);\n    document.querySelectorAll('[data-algolia-recent-sellers-root]').forEach(initRecentSellers);\n  }\n\n  function initRoot(root) {\n    const configEl = root.querySelector('[data-algolia-discogs-config]');\n    if (!configEl) return;\n\n    const config = JSON.parse(configEl.textContent || '{}');\n    const els = {\n      count: root.querySelector('[data-algolia-count]'),\n      error: root.querySelector('[data-algolia-error]'),\n      empty: root.querySelector('[data-algolia-empty]'),\n      facets: root.querySelector('[data-algolia-facets]'),\n      hits: root.querySelector('[data-algolia-hits]'),\n      pagination: root.querySelector('[data-algolia-pagination]'),\n      clear: root.querySelector('[data-algolia-clear]'),\n      sort: root.querySelector('[data-algolia-sort]'),\n      drawer: root.querySelector('[data-algolia-filter-drawer]'),\n      filterOpen: root.querySelector('[data-algolia-filter-open]'),\n      filterClose: root.querySelectorAll('[data-algolia-filter-close]'),\n      enhancements: root.querySelectorAll('[data-algolia-enhancement]'),\n    };\n\n    const state = {\n      config: config,\n      page: getInitialPage(),\n      sort: config.collectionHandle === 'best-sellers' ? 'popular' : config.defaultSort || 'newest',\n      refinements: new Map(),\n      priceRanges: new Set(),\n      availability: new Set(),\n      condition: new Set(),\n      expandedFacets: new Set(),\n      openedFacets: new Set(),\n      formatFacetValues: {},\n      stickyFacetValues: {},\n      lockedFilters: getInitialFilters(config),\n      lockedNumericFilters: getInitialNumericFilters(config),\n      availabilityLocked: AVAILABILITY_LOCKED_ROUTES.has(config.collectionHandle),\n      unavailableSorts: new Set(),\n      focusResultsAfterSearch: false,\n    };\n\n    if (!config.appId || !config.searchApiKey || !config.indexName) {\n      showError(els, 'Add the Algolia app ID, search-only API key, and product index name in this section settings.');\n      return;\n    }\n\n    if (!window.algoliasearch) {\n      showError(els, 'Algolia client failed to load.');\n      return;\n    }\n\n    const client = window.algoliasearch(config.appId, config.searchApiKey);\n    initInsights(config);\n\n    if (els.filterOpen && els.drawer) {\n      els.filterOpen.addEventListener('click', function () {\n        trackGa4('algolia_filter_drawer_opened', baseEventParams(config, state));\n        setFilterDrawer(els, true);\n      });\n    }\n\n    els.filterClose.forEach(function (button) {\n      button.addEventListener('click', function () {\n        setFilterDrawer(els, false);\n      });\n    });\n\n    if (els.sort) {\n      els.sort.value = state.sort;\n      els.sort.addEventListener('change', function () {\n        state.sort = els.sort.value;\n        state.page = 0;\n        updatePageUrl(state.page, true);\n        trackGa4(\n          'algolia_sort_changed',\n          Object.assign(baseEventParams(config, state), {\n            sort: state.sort,\n          })\n        );\n        search(client, config, els, state);\n      });\n    }\n\n    if (els.clear) {\n      els.clear.addEventListener('click', function () {\n        state.refinements.clear();\n        state.priceRanges.clear();\n        state.availability.clear();\n        state.condition.clear();\n        state.page = 0;\n        updatePageUrl(state.page, true);\n        trackGa4('algolia_filters_cleared', baseEventParams(config, state));\n        search(client, config, els, state);\n      });\n    }\n\n    els.facets.addEventListener('change', function (event) {\n      const input = event.target.closest('input[type=\"checkbox\"][data-facet-attribute]');\n      if (!input) return;\n\n      toggleRefinement(state, input.dataset.facetAttribute, input.value, input.checked);\n      state.page = 0;\n      updatePageUrl(state.page, true);\n      trackFilterEvent(config, state, input.dataset.facetAttribute, input.value, input.checked);\n      search(client, config, els, state);\n    });\n\n    els.facets.addEventListener('click', function (event) {\n      const button = event.target.closest('[data-facet-toggle]');\n      if (!button) return;\n\n      const attribute = button.dataset.facetToggle;\n      if (state.expandedFacets.has(attribute)) {\n        state.expandedFacets.delete(attribute);\n      } else {\n        state.expandedFacets.add(attribute);\n      }\n      renderFacets(els, state.lastResults, state);\n    });\n\n    els.facets.addEventListener('click', function (event) {\n      const button = event.target.closest('[data-facet-open]');\n      if (!button) return;\n\n      const attribute = button.dataset.facetOpen;\n      if (state.openedFacets.has(attribute)) {\n        state.openedFacets.delete(attribute);\n      } else {\n        state.openedFacets.add(attribute);\n      }\n      renderFacets(els, state.lastResults, state);\n    });\n\n    els.facets.addEventListener('change', function (event) {\n      const input = event.target.closest('input[type=\"checkbox\"][data-price-range]');\n      if (!input) return;\n\n      if (input.checked) {\n        state.priceRanges.add(input.value);\n      } else {\n        state.priceRanges.delete(input.value);\n      }\n      state.page = 0;\n      updatePageUrl(state.page, true);\n      trackGa4(\n        'algolia_price_filter_changed',\n        Object.assign(baseEventParams(config, state), {\n          filter_value: PRICE_RANGES[Number(input.value)] ? PRICE_RANGES[Number(input.value)].label : input.value,\n          checked: input.checked,\n        })\n      );\n      search(client, config, els, state);\n    });\n\n    els.facets.addEventListener('change', function (event) {\n      const input = event.target.closest('input[type=\"checkbox\"][data-availability]');\n      if (!input) return;\n\n      if (input.checked) {\n        state.availability.add(input.value);\n      } else {\n        state.availability.delete(input.value);\n      }\n      state.page = 0;\n      updatePageUrl(state.page, true);\n      trackGa4(\n        'algolia_availability_filter_changed',\n        Object.assign(baseEventParams(config, state), {\n          filter_value: input.value,\n          checked: input.checked,\n        })\n      );\n      search(client, config, els, state);\n    });\n\n    els.facets.addEventListener('change', function (event) {\n      const input = event.target.closest('input[type=\"checkbox\"][data-condition]');\n      if (!input) return;\n\n      if (input.checked) {\n        state.condition.add(input.value);\n      } else {\n        state.condition.delete(input.value);\n      }\n      state.page = 0;\n      updatePageUrl(state.page, true);\n      trackFilterEvent(config, state, 'tags', input.value === 'new' ? '-used' : 'used', input.checked);\n      search(client, config, els, state);\n    });\n\n    els.hits.addEventListener('click', function (event) {\n      const productLink = event.target.closest('[data-algolia-product-link]');\n      const miniPlay = event.target.closest('.mini-player-play');\n\n      if (productLink) {\n        trackProductClick(productLink, config, state);\n        return;\n      }\n\n      if (miniPlay) {\n        const player = miniPlay.closest('.mini-audio-player');\n        if (player) trackMiniPlayerPlay(player, config, state);\n      }\n    });\n    bindQuickAddForms(els.hits);\n\n    els.pagination.addEventListener('click', function (event) {\n      const link = event.target.closest('a[data-page]');\n      if (!link || els.hits.dataset.serverRendered === 'true' || !shouldHandlePaginationClick(event, link)) return;\n\n      const nextPage = Number(link.dataset.page);\n      if (!Number.isFinite(nextPage) || nextPage < 0) return;\n\n      event.preventDefault();\n      if (nextPage === state.page) return;\n\n      state.page = nextPage;\n      state.focusResultsAfterSearch = true;\n      updatePageUrl(state.page, false);\n      trackGa4(\n        'algolia_page_changed',\n        Object.assign(baseEventParams(config, state), {\n          page: state.page + 1,\n        })\n      );\n      search(client, config, els, state);\n    });\n\n    window.addEventListener('popstate', function () {\n      const nextPage = getInitialPage();\n      if (nextPage === state.page) return;\n\n      state.page = nextPage;\n      search(client, config, els, state);\n      root.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n\n    search(client, config, els, state);\n  }\n\n  function initRecentSellers(root) {\n    const configEl = root.querySelector('[data-algolia-recent-sellers-config]');\n    if (!configEl) return;\n\n    const config = JSON.parse(configEl.textContent || '{}');\n    const els = {\n      error: root.querySelector('[data-algolia-recent-sellers-error]'),\n      empty: root.querySelector('[data-algolia-recent-sellers-empty]'),\n      hits: root.querySelector('[data-algolia-recent-sellers-hits]'),\n    };\n    const state = {\n      config: config,\n      page: 0,\n      sort: 'popular',\n      refinements: new Map(),\n      priceRanges: new Set(),\n      availability: new Set(),\n      expandedFacets: new Set(),\n      openedFacets: new Set(),\n      formatFacetValues: {},\n      stickyFacetValues: {},\n      lockedFilters: [],\n      lockedNumericFilters: ['sales_60d > 0'],\n      availabilityLocked: false,\n      unavailableSorts: new Set(),\n    };\n\n    if (!config.appId || !config.searchApiKey || !config.indexName || !els.hits) {\n      showRecentSellersError(els, 'Add the Algolia app ID, search-only API key, and product index name.');\n      return;\n    }\n\n    if (!window.algoliasearch) {\n      showRecentSellersError(els, 'Algolia client failed to load.');\n      return;\n    }\n\n    const client = window.algoliasearch(config.appId, config.searchApiKey);\n    const indexName = config.indexName + '_sales_60d_desc';\n    const index = client.initIndex(indexName);\n    initInsights(config);\n\n    els.hits.addEventListener('click', function (event) {\n      const productLink = event.target.closest('[data-algolia-product-link]');\n      const miniPlay = event.target.closest('.mini-player-play');\n\n      if (productLink) {\n        trackProductClick(productLink, config, state);\n        return;\n      }\n\n      if (miniPlay) {\n        const player = miniPlay.closest('.mini-audio-player');\n        if (player) trackMiniPlayerPlay(player, config, state);\n      }\n    });\n    bindQuickAddForms(els.hits);\n\n    els.hits.classList.add('loading');\n    index\n      .search('', {\n        hitsPerPage: Number(config.hitsPerPage || 10),\n        page: 0,\n        attributesToRetrieve: RETRIEVE,\n        clickAnalytics: true,\n        numericFilters: ['sales_60d > 0'],\n        facetFilters: ['inventory_available:true'],\n      })\n      .then(function (results) {\n        results.indexName = results.index || indexName;\n        els.hits.classList.remove('loading');\n        if (els.empty) els.empty.hidden = results.hits.length > 0;\n        els.hits.innerHTML = results.hits\n          .map(function (hit, index) {\n            return '<li class=\"grid__item\">' + renderCard(hit, config, results, index + 1) + '</li>';\n          })\n          .join('');\n        syncWishlistButtons(els.hits);\n        syncNotificationSignup(els.hits);\n        syncMiniPlayers(els.hits);\n      })\n      .catch(function (error) {\n        els.hits.classList.remove('loading');\n        showRecentSellersError(els, error && error.message ? error.message : 'Algolia recent sellers unavailable.');\n      });\n  }\n\n  function showRecentSellersError(els, message) {\n    if (!els.error) return;\n    els.error.textContent = message;\n    els.error.hidden = false;\n  }\n\n  function setFilterDrawer(els, open) {\n    if (!els.drawer) return;\n\n    els.drawer.classList.toggle('is-open', open);\n    els.drawer.setAttribute('aria-hidden', open ? 'false' : 'true');\n    els.filterClose.forEach(function (element) {\n      if (element.classList.contains('algolia-discogs__overlay')) {\n        element.hidden = !open;\n      }\n    });\n    document.documentElement.classList.toggle('algolia-discogs-drawer-open', open);\n  }\n\n  function getInitialFilters(config) {\n    const tag = config.currentTag || inferTagFromPath(config);\n\n    if (TAG_BACKED_COLLECTION_HANDLES.has(config.collectionHandle) && tag) {\n      config.currentTag = tag;\n      return [['tags:' + tag]];\n    }\n\n    const routeFacets = {\n      series: 'series_names',\n    };\n    const facet = routeFacets[config.collectionHandle];\n\n    if (facet && tag) {\n      config.currentTag = tag;\n      return [[facet + ':' + tag]];\n    }\n\n    if (GENRE_ROUTES[config.collectionHandle]) {\n      return [['meta.custom.genre:' + GENRE_ROUTES[config.collectionHandle]]];\n    }\n\n    if (FORMAT_ROUTES[config.collectionHandle]) {\n      const group = formatGroupByValue(FORMAT_ROUTES[config.collectionHandle]);\n      if (group) {\n        return [[FORMAT_FACET_ATTRIBUTE + ':' + group.value]];\n      }\n      return [[FORMAT_FACET_ATTRIBUTE + ':' + FORMAT_ROUTES[config.collectionHandle]]];\n    }\n\n    if (TAG_ROUTE_FILTERS[config.collectionHandle]) {\n      return [\n        TAG_ROUTE_FILTERS[config.collectionHandle].map(function (tagValue) {\n          return 'tags:' + tagValue;\n        }),\n      ];\n    }\n\n    if (config.collectionHandle === 'back-in-stock') {\n      return [['in_back_in_stock:true']];\n    }\n\n    if (config.collectionHandle === 'on-sale') {\n      return [['tags:sale']];\n    }\n\n    return [];\n  }\n\n  function getInitialNumericFilters(config) {\n    if (config.collectionHandle === 'best-sellers') {\n      return ['sales_60d > 0'];\n    }\n\n    return [];\n  }\n\n  function inferTagFromPath(config) {\n    const path = config.requestPath || '';\n    const prefix = '/collections/' + config.collectionHandle + '/';\n    if (!path.startsWith(prefix)) return '';\n\n    const slug = decodeURIComponent(path.slice(prefix.length).split('/')[0] || '');\n    if (!slug) return '';\n\n    return slug\n      .split('-')\n      .filter(Boolean)\n      .map(function (word) {\n        return word.charAt(0).toUpperCase() + word.slice(1);\n      })\n      .join(' ');\n  }\n\n  function toggleRefinement(state, attribute, value, checked) {\n    const values = new Set(state.refinements.get(attribute) || []);\n    if (checked) {\n      values.add(value);\n    } else {\n      values.delete(value);\n    }\n\n    if (values.size) {\n      state.refinements.set(attribute, values);\n    } else {\n      state.refinements.delete(attribute);\n    }\n  }\n\n  function buildFacetFilters(state) {\n    const filters = state.lockedFilters.map(function (group) {\n      return group.slice();\n    });\n\n    state.refinements.forEach(function (values, attribute) {\n      if (attribute === FORMAT_FACET_ATTRIBUTE) {\n        const formatFilters = expandFormatRefinements(values, state.formatFacetValues);\n        if (formatFilters.length) filters.push(formatFilters);\n        return;\n      }\n\n      filters.push(\n        Array.from(values).map(function (value) {\n          return attribute + ':' + value;\n        })\n      );\n    });\n\n    if (state.availability.size === 1) {\n      filters.push(\n        Array.from(state.availability).map(function (value) {\n          return 'inventory_available:' + value;\n        })\n      );\n    }\n\n    if (state.condition.size === 1) {\n      const condition = Array.from(state.condition)[0];\n      filters.push('tags:' + (condition === 'new' ? '-used' : 'used'));\n    }\n\n    return filters;\n  }\n\n  function expandFormatRefinements(values, knownFormatValues) {\n    const filters = [];\n    values.forEach(function (value) {\n      const group = FORMAT_GROUPS.find(function (item) {\n        return item.value === value || item.label === value;\n      });\n\n      filters.push(FORMAT_FACET_ATTRIBUTE + ':' + (group ? group.value : value));\n    });\n    return Array.from(new Set(filters));\n  }\n\n  function formatGroupByValue(value) {\n    return FORMAT_GROUPS.find(function (item) {\n      return item.value === value;\n    });\n  }\n\n  function getIndexName(config, state) {\n    const base = config.indexName;\n    const replicas = {\n      newest: base + '_newest_added_desc',\n      popular: base + '_sales_60d_desc',\n    };\n\n    if (config.collectionHandle === 'back-in-stock' && state.sort === 'newest') {\n      return base + '_back_in_stock_recent';\n    }\n\n    if (config.collectionHandle === 'best-sellers') {\n      return replicas.popular;\n    }\n\n    if (state.unavailableSorts.has(state.sort)) return base;\n    return replicas[state.sort] || base;\n  }\n\n  function search(client, config, els, state) {\n    setLoading(els, true);\n    hideError(els);\n\n    const indexName = getIndexName(config, state);\n    const index = client.initIndex(indexName);\n    const visibleFacets = getVisibleFacets(config);\n\n    index\n      .search('', {\n        attributesToRetrieve: RETRIEVE,\n        facets: visibleFacets.map(function (facet) {\n          return facet.attribute;\n        }).concat([RAW_FORMAT_FACET_ATTRIBUTE]),\n        facetFilters: buildFacetFilters(state),\n        numericFilters: buildNumericFilters(state),\n        hitsPerPage: Number(config.hitsPerPage) || 20,\n        clickAnalytics: true,\n        maxValuesPerFacet: FACET_EXPANDED_LIMIT,\n        page: state.page,\n      })\n      .then(function (results) {\n        results.indexName = indexName;\n        const nextHits = buildHitsFragment(results, config);\n        const nextPagination = buildPaginationFragment(results);\n\n        assertUsableInitialResults(els.hits, results);\n        state.lastResults = results;\n        renderFacets(els, results, state);\n        renderCount(els, results, config);\n        commitHits(els, results, nextHits);\n        commitPagination(els, nextPagination);\n        setEnhancementsReady(els);\n        setLoading(els, false);\n\n        if (state.focusResultsAfterSearch) {\n          state.focusResultsAfterSearch = false;\n          els.hits.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          if (els.count) els.count.focus({ preventScroll: true });\n        }\n      })\n      .catch(function (error) {\n        if (isMissingIndexError(error) && state.sort !== 'newest') {\n          state.unavailableSorts.add(state.sort);\n          showError(els, 'This sort needs an Algolia replica before it can be used. Showing Newest added for now.');\n          state.sort = 'newest';\n          if (els.sort) els.sort.value = state.sort;\n          search(client, config, els, state);\n          return;\n        }\n\n        const showingFallback = els.hits.dataset.serverRendered === 'true';\n        const message = error && error.code === 'STOREFRONT_EMPTY_RESULTS'\n          ? 'Live filters are temporarily unavailable because store and search results are still syncing. Showing the store collection.'\n          : showingFallback\n            ? 'Live filters are temporarily unavailable. Showing the store collection.'\n            : 'Live filters are temporarily unavailable. Showing the last successful results.';\n        showError(els, message);\n        state.focusResultsAfterSearch = false;\n        setLoading(els, false);\n      });\n  }\n\n  function assertUsableInitialResults(hitsElement, results) {\n    if (!hitsElement || hitsElement.dataset.serverRendered !== 'true') return;\n\n    const serverItems = Array.from(hitsElement.querySelectorAll('[data-server-product-handle]'));\n    if (serverItems.length && !results.hits.length) {\n      const emptyError = new Error('Algolia returned no products for a nonempty Shopify collection page.');\n      emptyError.code = 'STOREFRONT_EMPTY_RESULTS';\n      throw emptyError;\n    }\n  }\n\n  function setEnhancementsReady(els) {\n    els.enhancements.forEach(function (element) {\n      element.hidden = false;\n    });\n  }\n\n  function buildNumericFilters(state) {\n    const filters = state.lockedNumericFilters.slice();\n    if (!state.priceRanges.size) return filters;\n\n    filters.push(\n      Array.from(state.priceRanges)\n        .map(function (value) {\n          const range = PRICE_RANGES[Number(value)];\n          if (!range) return null;\n          if (range.min === null) return 'price < ' + range.max;\n          if (range.max === null) return 'price >= ' + range.min;\n          return 'price:' + range.min + ' TO ' + range.max;\n        })\n        .filter(Boolean)\n    );\n\n    return filters;\n  }\n\n  function isMissingIndexError(error) {\n    const message = error && error.message ? error.message : '';\n    return /index .* does not exist|Index .* does not exist|does not exist/i.test(message);\n  }\n\n  function setLoading(els, loading) {\n    if (!els.hits) return;\n    els.hits.classList.toggle('loading', loading);\n    els.hits.setAttribute('aria-busy', loading ? 'true' : 'false');\n  }\n\n  function renderCount(els, results, config) {\n    const label = config.currentTag || config.collectionTitle || 'collection';\n    els.count.textContent = results.nbHits + ' products for ' + label;\n  }\n\n  function buildHitsFragment(results, config) {\n    const template = document.createElement('template');\n    template.innerHTML = results.hits\n      .map(function (hit, index) {\n        const position = results.page * results.hitsPerPage + index + 1;\n        return '<li class=\"grid__item\">' + renderCard(hit, config, results, position) + '</li>';\n      })\n      .join('');\n    return template.content;\n  }\n\n  function commitHits(els, results, fragment) {\n    els.empty.hidden = results.hits.length > 0;\n    els.hits.replaceChildren(fragment);\n    els.hits.dataset.serverRendered = 'false';\n    trackRenderedSearchAttribution(els.hits);\n    syncWishlistButtons(els.hits);\n    syncNotificationSignup(els.hits);\n    syncMiniPlayers(els.hits);\n  }\n\n  function renderCard(hit, config, results, position) {\n    const rawProductId = String(hit.id || '');\n    const rawVariantId = String(hit.objectID || '');\n    const productId = escapeHtml(rawProductId || rawVariantId);\n    const objectId = escapeAttribute(rawVariantId);\n    const indexName = escapeAttribute(results.indexName || config.indexName || '');\n    const queryId = escapeAttribute(results.queryID || '');\n    const title = escapeHtml(hit.title || 'Untitled product');\n    const vendor = escapeHtml(hit.vendor || '');\n    const url = hit.handle ? '/products/' + encodeURIComponent(hit.handle) : '#';\n    const image = getImageUrl(hit);\n    const available = hit.inventory_available !== false;\n    const compareAt = parseMoneyValue(hit.compare_at_price);\n    const price = parseMoneyValue(hit.price);\n    const freeWithOrder = hitHasTag(hit, 'free-with-order');\n    const onSale = available && !freeWithOrder && compareAt !== null && price !== null && compareAt > price;\n    const audioTracks = getAudioTracks(hit);\n\n    return [\n      '<div class=\"card-wrapper product-card-wrapper underline-links-hover\">',\n      '<div class=\"card card--standard ' + (image ? 'card--media' : 'card--text') + '\" style=\"--ratio-percent: 100%;\">',\n      '<div class=\"card__inner color-background-1 gradient ratio\" style=\"--ratio-percent: 100%;\">',\n      image ? renderImage(image, title, position, config, results) : '',\n      '<div class=\"card__content\">',\n      '<div class=\"card__information\">',\n      '<h3 class=\"card__heading\" id=\"title-algolia-' + productId + '\" aria-hidden=\"true\">',\n      '<a href=\"' + escapeAttribute(url) + '\" id=\"CardImageLink-algolia-' + productId + '\" class=\"full-unstyled-link\" aria-hidden=\"true\" tabindex=\"-1\" data-algolia-product-link data-object-id=\"' + objectId + '\" data-index-name=\"' + indexName + '\" data-query-id=\"' + queryId + '\" data-position=\"' + position + '\" data-product-id=\"' + productId + '\" data-product-title=\"' + escapeAttribute(hit.title || '') + '\">' + title + '</a>',\n      '</h3>',\n      '</div>',\n      renderBadge(productId, available, onSale, 'top'),\n      '</div>',\n      '</div>',\n      '<div class=\"card__content\">',\n      '<div class=\"card__information\">',\n      '<h3 class=\"card__heading h5\" id=\"title-algolia-bottom-' + productId + '\">',\n      '<a href=\"' + escapeAttribute(url) + '\" id=\"CardLink-algolia-' + productId + '\" class=\"full-unstyled-link\" data-algolia-product-link data-object-id=\"' + objectId + '\" data-index-name=\"' + indexName + '\" data-query-id=\"' + queryId + '\" data-position=\"' + position + '\" data-product-id=\"' + productId + '\" data-product-title=\"' + escapeAttribute(hit.title || '') + '\">' + title + '</a>',\n      '</h3>',\n      '<div class=\"card-information\">',\n      config.showVendor && vendor ? '<span class=\"visually-hidden\">Vendor</span><div class=\"caption-with-letter-spacing light\">' + vendor + '</div>' : '',\n      renderPrice(price, compareAt, config, freeWithOrder),\n      '</div>',\n      '<div class=\"algolia-discogs__card-actions\">',\n      audioTracks.length ? renderMiniPlayer(productId, audioTracks) : '',\n      renderAddToCart(productId, objectId, indexName, queryId, available, hit.title || '', rawProductId, config, freeWithOrder),\n      '</div>',\n      '</div>',\n      renderBadge(productId, available, onSale, 'bottom'),\n      '</div>',\n      '</div>',\n      renderWishlistButton(hit, rawProductId, rawVariantId, available, price, compareAt, image, url),\n      '</div>',\n    ].join('');\n  }\n\n  function renderWishlistButton(hit, productId, variantId, available, price, compareAt, image, url) {\n    if (!productId && !variantId && !hit.sku) return '';\n\n    return [\n      '<button type=\"button\" class=\"further-wishlist-button further-wishlist-button--icon further-wishlist-button--card\"',\n      ' data-further-wishlist-toggle',\n      ' data-wishlist-product-id=\"' + escapeAttribute(productId) + '\"',\n      ' data-wishlist-variant-id=\"' + escapeAttribute(variantId) + '\"',\n      ' data-wishlist-sku=\"' + escapeAttribute(hit.sku || '') + '\"',\n      ' data-wishlist-title=\"' + escapeAttribute(hit.title || '') + '\"',\n      ' data-wishlist-vendor=\"' + escapeAttribute(hit.vendor || '') + '\"',\n      ' data-wishlist-handle=\"' + escapeAttribute(hit.handle || '') + '\"',\n      ' data-wishlist-url=\"' + escapeAttribute(url) + '\"',\n      ' data-wishlist-image=\"' + escapeAttribute(image || '') + '\"',\n      ' data-wishlist-price=\"' + escapeAttribute(price === null ? '' : String(price)) + '\"',\n      ' data-wishlist-compare-at-price=\"' + escapeAttribute(compareAt === null ? '' : String(compareAt)) + '\"',\n      ' data-wishlist-available=\"' + (available ? 'true' : 'false') + '\"',\n      ' data-wishlist-source=\"native\"',\n      ' data-wishlist-add-label=\"Save\"',\n      ' data-wishlist-remove-label=\"Saved\"',\n      ' aria-pressed=\"false\"',\n      '>',\n      '<span class=\"further-wishlist-button__icon\" aria-hidden=\"true\">&#9825;</span>',\n      '<span class=\"visually-hidden\">Save</span>',\n      '</button>',\n    ].join('');\n  }\n\n  function renderMiniPlayer(productId, tracks) {\n    const tracksJson = escapeAttribute(JSON.stringify(tracks));\n\n    return [\n      '<div id=\"mini-audio-player-' + productId + '\" class=\"mini-audio-player\" data-audio-tracks=\"' + tracksJson + '\" data-product-id=\"' + productId + '\">',\n      '<audio id=\"audio-player-' + productId + '\" preload=\"none\"></audio>',\n      '<div class=\"mini-player-controls\">',\n      '<button type=\"button\" class=\"mini-player-previous\" aria-label=\"Previous Track\" onclick=\"miniPlayer.previousTrack(event, \\'' + productId + '\\')\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 6h2v12H6zm3.5 6l8.5 6V6z\"/></svg></button>',\n      '<button type=\"button\" class=\"mini-player-play\" aria-label=\"Play/Pause\" onclick=\"miniPlayer.togglePlayPause(event, \\'' + productId + '\\')\" data-play-icon=\"&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M8 5v14l11-7z&quot;/&gt;&lt;/svg&gt;\" data-pause-icon=\"&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot;&gt;&lt;path d=&quot;M6 4h4v16H6V4zm8 0h4v16h-4V4z&quot;/&gt;&lt;/svg&gt;\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M8 5v14l11-7z\"/></svg></button>',\n      '<button type=\"button\" class=\"mini-player-next\" aria-label=\"Next Track\" onclick=\"miniPlayer.nextTrack(event, \\'' + productId + '\\')\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z\"/></svg></button>',\n      '</div>',\n      '<div class=\"mini-player-progress-container\"><progress id=\"progress-bar-' + productId + '\" class=\"mini-progress\" value=\"0\" max=\"1\"></progress></div>',\n      '</div>',\n    ].join('');\n  }\n\n  function renderAddToCart(productId, variantId, indexName, queryId, available, productTitle, rawProductId, config, freeWithOrder) {\n    if (!variantId) return '';\n    if (!available) return renderNotifySignup(productId, productTitle, rawProductId, config);\n\n    const buttonLabel = freeWithOrder ? 'Add free with any other item' : 'Add to cart';\n    const freeAttrs = freeWithOrder ? ' data-free-with-order=\"true\"' : '';\n\n    return [\n      '<form method=\"post\" action=\"/cart/add\" class=\"algolia-discogs__quick-add\" enctype=\"multipart/form-data\" data-algolia-quick-add data-object-id=\"' + escapeAttribute(variantId) + '\" data-index-name=\"' + escapeAttribute(indexName) + '\" data-query-id=\"' + escapeAttribute(queryId) + '\" data-product-id=\"' + escapeAttribute(rawProductId || productId) + '\"' + freeAttrs + '>',\n      '<input type=\"hidden\" name=\"id\" value=\"' + escapeAttribute(variantId) + '\">',\n      '<input type=\"hidden\" name=\"quantity\" value=\"1\">',\n      '<button type=\"submit\" name=\"add\" class=\"quick-add__submit button button--full-width button--secondary algolia-discogs__add-button\" data-product-id=\"' + productId + '\">',\n      '<span>' + buttonLabel + '</span>',\n      '</button>',\n      '<p class=\"algolia-discogs__free-error\" data-algolia-cart-message role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" style=\"min-height:1.4em\"></p>',\n      '</form>',\n    ].join('');\n  }\n\n  function hitHasTag(hit, tagName) {\n    const wanted = String(tagName || '').trim().toLowerCase();\n    const tags = hit && hit.tags;\n    if (!wanted || !Array.isArray(tags)) return false;\n    return tags.some(function (tag) {\n      return String(tag).trim().toLowerCase() === wanted;\n    });\n  }\n\n  // Serialize additions so rapid clicks on different cards also keep cart UI in order.\n  let quickAddQueue = Promise.resolve();\n\n  function bindQuickAddForms(root) {\n    if (!root || root.dataset.algoliaQuickAddBound === 'true' || !window.fetch || !window.FormData) return;\n    root.dataset.algoliaQuickAddBound = 'true';\n    root.addEventListener('submit', function (event) {\n      const form = event.target;\n      if (!form || form.tagName !== 'FORM' || !form.hasAttribute('data-algolia-quick-add')) return;\n      event.preventDefault();\n      if (form.dataset.cartPending === 'true') return;\n      form.dataset.cartPending = 'true';\n      const button = form.querySelector('[type=\"submit\"]');\n      if (button) {\n        button.setAttribute('aria-disabled', 'true');\n        button.setAttribute('aria-busy', 'true');\n      }\n      setQuickAddMessage(form, 'Adding\u2026');\n      quickAddQueue = quickAddQueue.then(function () {\n        return submitQuickAdd(form);\n      }).catch(function () {\n        setQuickAddMessage(form, 'Could not confirm the add. Check your cart before trying again.');\n      }).finally(function () {\n        delete form.dataset.cartPending;\n        if (button) {\n          button.removeAttribute('aria-disabled');\n          button.removeAttribute('aria-busy');\n        }\n      });\n    });\n  }\n\n  function cartRoot() {\n    return (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/';\n  }\n\n  function setQuickAddMessage(form, message) {\n    const element = form.querySelector('[data-algolia-cart-message]');\n    if (!element) return;\n    element.hidden = false;\n    element.textContent = message;\n  }\n\n  async function submitQuickAdd(form) {\n    let addAttempted = false;\n    try {\n      if (form.dataset.freeWithOrder === 'true') {\n        const response = await fetch(cartRoot() + 'cart.js', { headers: { Accept: 'application/json' } });\n        if (!response.ok) throw new Error('Could not check your cart. Try again.');\n        const cart = await response.json();\n        const variantId = String(form.querySelector('input[name=\"id\"]').value);\n        const items = cart.items || [];\n        const hasCompanion = items.some(function (item) {\n          return String(item.variant_id) !== variantId;\n        });\n        const alreadyInCart = items.some(function (item) {\n          return String(item.variant_id) === variantId;\n        });\n        if (!hasCompanion) {\n          setQuickAddMessage(form, 'Add another item to your cart first. This record is free with any other purchase.');\n          return;\n        }\n        if (alreadyInCart) {\n          setQuickAddMessage(form, 'Limit 1 free copy per order.');\n          return;\n        }\n      }\n      const body = new FormData(form);\n      body.append('sections', 'cart-icon-bubble');\n      body.append('sections_url', window.location.pathname);\n      trackSearchAttributionFromElement(form);\n      addAttempted = true;\n      const response = await fetch(cartRoot() + 'cart/add.js', {\n        method: 'POST',\n        headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n        body: body,\n      });\n      const added = await response.json();\n      if (!response.ok || added.status) {\n        setQuickAddMessage(form, (added.description || added.message || 'Could not add this record.') + ' Check your cart before trying again.');\n        await refreshQuickAddCart();\n        return;\n      }\n      // A UI refresh failure must never turn a confirmed add into a retry prompt.\n      setQuickAddMessage(form, 'Added to cart.');\n      await refreshQuickAddCart(added.sections);\n      try {\n        if (typeof publish === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n          publish(PUB_SUB_EVENTS.cartUpdate, { source: 'algolia-quick-add', productVariantId: body.get('id'), cartData: added });\n        }\n      } catch (error) {\n        console.error(error);\n      }\n    } catch (error) {\n      setQuickAddMessage(form, addAttempted\n        ? 'Could not confirm the add. Check your cart before trying again.'\n        : 'Could not check your cart. Try again.');\n      if (addAttempted) await refreshQuickAddCart();\n    }\n  }\n\n  async function refreshQuickAddCart(sections) {\n    try {\n      if (!sections || !sections['cart-icon-bubble']) {\n        const response = await fetch(cartRoot() + '?sections=cart-icon-bubble', { headers: { Accept: 'application/json' } });\n        if (!response.ok) return;\n        sections = await response.json();\n      }\n      const icon = document.getElementById('cart-icon-bubble');\n      const html = sections && sections['cart-icon-bubble'];\n      if (!icon || !html) return;\n      const section = new DOMParser().parseFromString(html, 'text/html').querySelector('.shopify-section');\n      if (section) icon.innerHTML = section.innerHTML;\n    } catch (error) {\n      console.error(error);\n    }\n  }\n\n  function renderNotifySignup(productId, productTitle, rawProductId, config) {\n    const gid = productGid(rawProductId);\n    if (!gid) return '';\n    const email = config.customerEmail || '';\n    const endpoint = config.notificationEndpoint || 'https://record-notifications.orders-e73.workers.dev';\n    const inputId = 'NotifyEmail-algolia-' + cleanId(productId);\n\n    return [\n      '<form class=\"notification-signup-form notification-signup--card algolia-discogs__quick-add algolia-discogs__notify-form\"',\n      ' data-endpoint=\"' + escapeAttribute(endpoint) + '\"',\n      ' data-target-type=\"product\"',\n      ' data-target-label=\"' + escapeAttribute(productTitle || '') + '\"',\n      ' data-product-gid=\"' + escapeAttribute(gid) + '\"',\n      '>',\n      email\n        ? '<input type=\"hidden\" name=\"email\" value=\"' + escapeAttribute(email) + '\"><button type=\"submit\" class=\"quick-add__submit button button--full-width button--secondary algolia-discogs__add-button\"><span>Notify me</span></button>'\n        : [\n          '<button type=\"button\" class=\"quick-add__submit button button--full-width button--secondary notification-signup-toggle algolia-discogs__add-button\" aria-expanded=\"false\"><span>Notify me</span></button>',\n          '<div class=\"notification-signup-panel\" hidden>',\n          '<p class=\"notification-signup-copy\">We\\'ll email you when this is back in stock.</p>',\n          '<div class=\"field\">',\n          '<input id=\"' + inputId + '\" class=\"field__input\" type=\"email\" name=\"email\" placeholder=\"Email address\" autocomplete=\"email\" required>',\n          '<label class=\"field__label\" for=\"' + inputId + '\">Email address</label>',\n          '</div>',\n          '<button type=\"submit\" class=\"button button--full-width button--secondary\">Notify me</button>',\n          '</div>',\n        ].join(''),\n      '<p class=\"notification-signup-message\" aria-live=\"polite\"></p>',\n      '</form>',\n    ].join('');\n  }\n\n  function renderImage(image, title, position, config, results) {\n    const responsive = getResponsiveImage(image);\n    const hitsPerPage = Number(results.hitsPerPage) || Number(config.hitsPerPage) || 40;\n    const positionOnPage = position - results.page * hitsPerPage;\n    const loading = positionOnPage === 1\n      ? ' loading=\"eager\" fetchpriority=\"high\"'\n      : ' loading=\"lazy\"';\n    const srcset = responsive.srcset\n      ? ' srcset=\"' + escapeAttribute(responsive.srcset) + '\" sizes=\"' + escapeAttribute(getImageSizes(config)) + '\"'\n      : '';\n\n    return [\n      '<div class=\"card__media\">',\n      '<div class=\"media media--transparent media--hover-effect\">',\n      '<img src=\"' + escapeAttribute(responsive.src) + '\"' + srcset + ' width=\"533\" height=\"533\" alt=\"' + title + '\" class=\"motion-reduce\" decoding=\"async\"' + loading + '>',\n      '</div>',\n      '</div>',\n    ].join('');\n  }\n\n  function getResponsiveImage(image) {\n    let parsed;\n    try {\n      parsed = new URL(image, window.location.origin);\n    } catch (error) {\n      return { src: image, srcset: '' };\n    }\n\n    const host = parsed.hostname.toLowerCase();\n    const isShopifyCdn = host === 'cdn.shopify.com'\n      || parsed.pathname.indexOf('/cdn/shop/') !== -1\n      || parsed.pathname.indexOf('/s/files/') !== -1;\n    if (!isShopifyCdn) return { src: image, srcset: '' };\n\n    const widths = [165, 360, 533, 720];\n    return {\n      src: imageWithWidth(parsed, 533),\n      srcset: widths.map(function (width) {\n        return imageWithWidth(parsed, width) + ' ' + width + 'w';\n      }).join(', '),\n    };\n  }\n\n  function imageWithWidth(parsedUrl, width) {\n    const candidate = new URL(parsedUrl.toString());\n    candidate.searchParams.set('width', String(width));\n    return candidate.toString();\n  }\n\n  function getImageSizes(config) {\n    const desktopColumns = Math.max(1, Number(config.columnsDesktop) || 5);\n    const mobileColumns = Math.max(1, Number(config.columnsMobile) || 2);\n    return '(min-width: 990px) calc((100vw - 32rem) / ' + desktopColumns + '), '\n      + '(min-width: 750px) calc((100vw - 8rem) / 3), '\n      + 'calc((100vw - 3.5rem) / ' + mobileColumns + ')';\n  }\n\n  function renderBadge(productId, available, onSale, placement) {\n    const badgeId = 'Badge-algolia-' + productId + '-' + placement;\n    const hidden = placement === 'top' ? ' aria-hidden=\"true\"' : '';\n    if (!available) {\n      return '<div class=\"card__badge bottom left\"' + hidden + '><span id=\"' + badgeId + '\" class=\"badge badge--bottom-left color-inverse\">Sold out</span></div>';\n    }\n    if (onSale) {\n      return '<div class=\"card__badge bottom left\"' + hidden + '><span id=\"' + badgeId + '\" class=\"badge badge--bottom-left color-accent-2\">Sale</span></div>';\n    }\n    return '<div class=\"card__badge bottom left\"' + hidden + '></div>';\n  }\n\n  function renderPrice(price, compareAt, config, freeWithOrder) {\n    if (price === null) return '';\n\n    if (freeWithOrder && price === 0) {\n      return [\n        '<div class=\"price\">',\n        '<div class=\"price__container\">',\n        '<div class=\"price__regular\"><span class=\"visually-hidden\">Regular price</span><span class=\"price-item price-item--regular\">FREE</span></div>',\n        '</div>',\n        '</div>',\n      ].join('');\n    }\n\n    const sale = compareAt !== null && compareAt > price;\n    return [\n      '<div class=\"price' + (sale ? ' price--on-sale' : '') + '\">',\n      '<div class=\"price__container\">',\n      '<div class=\"price__regular\"><span class=\"visually-hidden\">Regular price</span><span class=\"price-item price-item--regular\">' + formatMoney(price, config) + '</span></div>',\n      sale\n        ? '<div class=\"price__sale\"><span class=\"visually-hidden\">Sale price</span><span class=\"price-item price-item--sale price-item--last\">' + formatMoney(price, config) + '</span><span class=\"visually-hidden\">Regular price</span><span><s class=\"price-item price-item--regular\">' + formatMoney(compareAt, config) + '</s></span></div>'\n        : '',\n      '</div>',\n      '</div>',\n    ].join('');\n  }\n\n  function renderFacets(els, results, state) {\n    if (!results) return;\n\n    const showAvailability = !state.availabilityLocked;\n    els.clear.hidden = state.refinements.size === 0 && state.priceRanges.size === 0 && state.availability.size === 0 && state.condition.size === 0;\n    const lockedValues = getLockedValues(state);\n    const visibleFacets = getVisibleFacets(state.config);\n    const facetValues = Object.keys(results.facets || {}).length ? results.facets : deriveFacetsFromHits(results.hits || []);\n    const selectedFormats = state.refinements.get(FORMAT_FACET_ATTRIBUTE) || new Set();\n    if (!selectedFormats.size && facetValues && facetValues[FORMAT_FACET_ATTRIBUTE]) {\n      state.formatFacetValues = Object.assign({}, facetValues[FORMAT_FACET_ATTRIBUTE]);\n    }\n    rememberStickyFacetValues(state, facetValues);\n\n    const showCondition = state.config.collectionHandle === 'all';\n    els.facets.innerHTML = (showAvailability ? renderAvailabilityFacet(state) : '') + (showCondition ? renderConditionFacet(state) : '') + renderPriceFacet(state) + visibleFacets.map(function (facet) {\n      const values = facetValues && facetValues[facet.attribute] ? facetValues[facet.attribute] : {};\n      const selected = state.refinements.get(facet.attribute) || new Set();\n      const locked = lockedValues.get(facet.attribute) || new Set();\n      const items = getFacetItems(facet.attribute, values, selected, locked, state);\n      const defaultCollapsed = FACETS_COLLAPSED_BY_DEFAULT.has(facet.attribute);\n      const opened = !defaultCollapsed || state.openedFacets.has(facet.attribute) || selected.size > 0 || locked.size > 0;\n      const expanded = state.expandedFacets.has(facet.attribute);\n      const collapsedLimit = getFacetCollapsedLimit(facet);\n      const visibleItems = expanded ? items : items.slice(0, collapsedLimit);\n      const canToggle = items.length > collapsedLimit;\n\n      if (!items.length) return '';\n\n      return [\n        '<section class=\"algolia-discogs__facet' + (opened ? '' : ' is-collapsed') + '\">',\n        defaultCollapsed\n          ? '<button type=\"button\" class=\"algolia-discogs__facet-heading\" data-facet-open=\"' + escapeAttribute(facet.attribute) + '\" aria-expanded=\"' + (opened ? 'true' : 'false') + '\"><span>' + escapeHtml(facet.label) + '</span><span>' + (opened ? '-' : '+') + '</span></button>'\n          : '<h3 class=\"algolia-discogs__facet-title\">' + escapeHtml(facet.label) + '</h3>',\n        opened ? [\n        '<ul class=\"algolia-discogs__facet-list\">',\n        visibleItems\n          .map(function (item) {\n            const isLocked = locked.has(item.value);\n            const checked = selected.has(item.value) || isLocked ? ' checked' : '';\n            const disabled = isLocked ? ' disabled' : '';\n            return [\n              '<li>',\n              '<label class=\"algolia-discogs__facet-label\">',\n              '<input type=\"checkbox\" data-facet-attribute=\"' + escapeAttribute(facet.attribute) + '\" value=\"' + escapeAttribute(item.value) + '\"' + checked + disabled + '>',\n              '<span>' + escapeHtml(item.label || item.value) + '</span>',\n              '<span class=\"algolia-discogs__facet-count\">' + item.count + '</span>',\n              '</label>',\n              '</li>',\n            ].join('');\n          })\n          .join(''),\n        '</ul>',\n        canToggle\n          ? '<button type=\"button\" class=\"algolia-discogs__show-more\" data-facet-toggle=\"' + escapeAttribute(facet.attribute) + '\">' + (expanded ? 'Show less' : 'Show more') + '</button>'\n          : '',\n        ].join('') : '',\n        '</section>',\n      ].join('');\n    }).join('');\n  }\n\n  function getFacetCollapsedLimit(facet) {\n    return FACET_COLLAPSED_LIMITS[facet.attribute] || FACET_COLLAPSED_LIMIT;\n  }\n\n  function renderAvailabilityFacet(state) {\n    return [\n      '<section class=\"algolia-discogs__facet\">',\n      '<h3 class=\"algolia-discogs__facet-title\">Availability</h3>',\n      '<ul class=\"algolia-discogs__facet-list\">',\n      AVAILABILITY_FILTERS.map(function (item) {\n        const checked = state.availability.has(item.value) ? ' checked' : '';\n        return [\n          '<li>',\n          '<label class=\"algolia-discogs__facet-label algolia-discogs__facet-label--availability\">',\n          '<input type=\"checkbox\" data-availability value=\"' + escapeAttribute(item.value) + '\"' + checked + '>',\n          '<span>' + escapeHtml(item.label) + '</span>',\n          '</label>',\n          '</li>',\n        ].join('');\n      }).join(''),\n      '</ul>',\n      '</section>',\n    ].join('');\n  }\n\n  function renderConditionFacet(state) {\n    return [\n      '<section class=\"algolia-discogs__facet\">',\n      '<h3 class=\"algolia-discogs__facet-title\">Condition</h3>',\n      '<ul class=\"algolia-discogs__facet-list\">',\n      [\n        { label: 'New', value: 'new' },\n        { label: 'Used', value: 'used' },\n      ].map(function (item) {\n        const checked = state.condition.has(item.value) ? ' checked' : '';\n        return [\n          '<li>',\n          '<label class=\"algolia-discogs__facet-label algolia-discogs__facet-label--availability\">',\n          '<input type=\"checkbox\" data-condition value=\"' + escapeAttribute(item.value) + '\"' + checked + '>',\n          '<span>' + escapeHtml(item.label) + '</span>',\n          '</label>',\n          '</li>',\n        ].join('');\n      }).join(''),\n      '</ul>',\n      '</section>',\n    ].join('');\n  }\n\n  function getVisibleFacets(config) {\n    return FACETS.filter(function (facet) {\n      return facet.attribute !== 'meta.custom.genre' || GENRE_FACET_ROUTES.has(config.collectionHandle);\n    });\n  }\n\n  function getInitialPage() {\n    const page = Number(new URLSearchParams(window.location.search).get('page'));\n    return Number.isFinite(page) && page > 1 ? Math.floor(page) - 1 : 0;\n  }\n\n  function updatePageUrl(page, replace) {\n    if (!window.history || !window.history.pushState) return;\n\n    const url = new URL(window.location.href);\n    const publicPage = Number(page) + 1;\n    if (publicPage > 1) {\n      url.searchParams.set('page', String(publicPage));\n    } else {\n      url.searchParams.delete('page');\n    }\n\n    const nextUrl = url.pathname + url.search + url.hash;\n    const currentUrl = window.location.pathname + window.location.search + window.location.hash;\n    if (nextUrl === currentUrl) return;\n\n    if (replace) {\n      window.history.replaceState({ algoliaPage: page }, '', nextUrl);\n    } else {\n      window.history.pushState({ algoliaPage: page }, '', nextUrl);\n    }\n  }\n\n  function renderPriceFacet(state) {\n    return [\n      '<section class=\"algolia-discogs__facet\">',\n      '<h3 class=\"algolia-discogs__facet-title\">Price</h3>',\n      '<ul class=\"algolia-discogs__facet-list\">',\n      PRICE_RANGES.map(function (range, index) {\n        const checked = state.priceRanges.has(String(index)) ? ' checked' : '';\n        return [\n          '<li>',\n          '<label class=\"algolia-discogs__facet-label algolia-discogs__facet-label--price\">',\n          '<input type=\"checkbox\" data-price-range value=\"' + index + '\"' + checked + '>',\n          '<span>' + escapeHtml(range.label) + '</span>',\n          '</label>',\n          '</li>',\n        ].join('');\n      }).join(''),\n      '</ul>',\n      '</section>',\n    ].join('');\n  }\n\n  function deriveFacetsFromHits(hits) {\n    const facets = {};\n\n    FACETS.forEach(function (facet) {\n      facets[facet.attribute] = {};\n    });\n\n    hits.forEach(function (hit) {\n      addHitFacetValues(facets, 'meta.custom.genre', getNested(hit, ['meta', 'custom', 'genre']));\n      addHitFacetValues(facets, 'meta.custom.style', getNested(hit, ['meta', 'custom', 'style']));\n      addHitFacetValues(facets, FORMAT_FACET_ATTRIBUTE, hit.format_groups || getNested(hit, ['meta', 'custom', 'format_group']));\n      addHitFacetValues(facets, RAW_FORMAT_FACET_ATTRIBUTE, getNested(hit, ['meta', 'custom', 'format']));\n      addHitFacetValues(facets, 'meta.custom.release_year', getNested(hit, ['meta', 'custom', 'release_year']));\n    });\n\n    return facets;\n  }\n\n  function addHitFacetValues(facets, attribute, value) {\n    if (value === null || value === undefined || value === '') return;\n    if (!facets[attribute]) return;\n\n    const values = Array.isArray(value) ? value : [value];\n    values.forEach(function (item) {\n      const label = String(item);\n      facets[attribute][label] = (facets[attribute][label] || 0) + 1;\n    });\n  }\n\n  function rememberStickyFacetValues(state, facetValues) {\n    STICKY_FACET_ATTRIBUTES.forEach(function (attribute) {\n      const selected = state.refinements.get(attribute) || new Set();\n      const values = facetValues && facetValues[attribute] ? facetValues[attribute] : null;\n      if (!values) return;\n\n      if (!selected.size || !state.stickyFacetValues[attribute]) {\n        state.stickyFacetValues[attribute] = Object.assign({}, values);\n      }\n    });\n  }\n\n  function getFacetItems(attribute, values, selected, locked, state) {\n    if (attribute === FORMAT_FACET_ATTRIBUTE) {\n      return mergeFormatFacetValues(values, selected, locked, state);\n    }\n\n    return mergeFacetValues(getStickyFacetSourceValues(attribute, values, state), selected, locked, attribute);\n  }\n\n  function getStickyFacetSourceValues(attribute, values, state) {\n    if (!STICKY_FACET_ATTRIBUTES.has(attribute)) return values;\n    return Object.assign({}, state.stickyFacetValues[attribute] || {}, values || {});\n  }\n\n  function mergeFormatFacetValues(values, selected, locked, state) {\n    const sourceValues = Object.assign({}, state.formatFacetValues || {}, values || {});\n    const items = FORMAT_GROUPS.map(function (group) {\n      const directCount = Number((values && values[group.value]) || sourceValues[group.value] || 0);\n      const matches = directCount ? [] : getFormatGroupMatches(group, sourceValues);\n      const count = directCount || matches.reduce(function (sum, value) {\n        return sum + Number((values && values[value]) || sourceValues[value] || 0);\n      }, 0);\n      return {\n        value: group.value,\n        label: group.label,\n        count: count,\n        sortCount: count || (selected.has(group.value) ? 1 : 0),\n      };\n    }).filter(function (item) {\n      return item.sortCount > 0 || selected.has(item.value);\n    });\n\n    selected.forEach(function (value) {\n      if (!items.some(function (item) { return item.value === value; })) {\n        items.unshift({ value: value, label: formatFacetLabel(value), count: 0, sortCount: 0 });\n      }\n    });\n\n    locked.forEach(function (value) {\n      if (!items.some(function (item) { return item.value === value; })) {\n        items.unshift({ value: value, label: formatFacetLabel(value), count: 0, sortCount: 0 });\n      }\n    });\n\n    return items.sort(function (a, b) {\n      return b.sortCount - a.sortCount || a.label.localeCompare(b.label);\n    });\n  }\n\n  function formatFacetLabel(value) {\n    const group = FORMAT_GROUPS.find(function (item) {\n      return item.value === value || item.label === value;\n    });\n    return group ? group.label : value;\n  }\n\n  function hasFormatToken(value, token) {\n    const escapedToken = token.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    const pattern = new RegExp('(^|[^A-Z]|[0-9]+x)' + escapedToken + '($|[^A-Z])', 'i');\n    return pattern.test(value);\n  }\n\n  function getFormatGroupMatches(group, values) {\n    return Object.keys(values || {}).filter(function (value) {\n      return group.test(value);\n    });\n  }\n\n  function getLockedValues(state) {\n    const locked = new Map();\n\n    state.lockedFilters.flat().forEach(function (filter) {\n      const splitAt = filter.indexOf(':');\n      if (splitAt === -1) return;\n\n      const attribute = filter.slice(0, splitAt);\n      const value = filter.slice(splitAt + 1);\n      const values = locked.get(attribute) || new Set();\n      values.add(value);\n      locked.set(attribute, values);\n    });\n\n    return locked;\n  }\n\n  function mergeFacetValues(values, selected, locked, attribute) {\n    const items = Object.keys(values)\n      .map(function (value) {\n        return { value: value, count: values[value] };\n      })\n      .sort(function (a, b) {\n        if (attribute === 'meta.custom.release_year') {\n          return Number(b.value) - Number(a.value);\n        }\n\n        return b.count - a.count || a.value.localeCompare(b.value);\n      });\n\n    selected.forEach(function (value) {\n      if (!items.some(function (item) { return item.value === value; })) {\n        items.unshift({ value: value, count: 0 });\n      }\n    });\n\n    locked.forEach(function (value) {\n      if (!items.some(function (item) { return item.value === value; })) {\n        items.unshift({ value: value, count: 0 });\n      }\n    });\n\n    return items;\n  }\n\n  function buildPaginationFragment(results) {\n    const template = document.createElement('template');\n    if (results.nbPages <= 1) return template.content;\n\n    const page = results.page;\n    const last = results.nbPages - 1;\n    const pages = [];\n    const start = Math.max(0, page - 2);\n    const end = Math.min(last, page + 2);\n\n    if (page > 0) {\n      pages.push('<a class=\"algolia-discogs__page\" href=\"' + escapeAttribute(getPageUrl(page - 1)) + '\" rel=\"prev\" data-page=\"' + (page - 1) + '\" aria-label=\"Previous page\">Previous</a>');\n    }\n    for (let i = start; i <= end; i += 1) {\n      pages.push('<a class=\"algolia-discogs__page\" href=\"' + escapeAttribute(getPageUrl(i)) + '\" data-page=\"' + i + '\" aria-label=\"Page ' + (i + 1) + (i === page ? ', current page' : '') + '\"' + (i === page ? ' aria-current=\"page\"' : '') + '>' + (i + 1) + '</a>');\n    }\n    if (page < last) {\n      pages.push('<a class=\"algolia-discogs__page\" href=\"' + escapeAttribute(getPageUrl(page + 1)) + '\" rel=\"next\" data-page=\"' + (page + 1) + '\" aria-label=\"Next page\">Next</a>');\n    }\n\n    template.innerHTML = pages.join('');\n    return template.content;\n  }\n\n  function commitPagination(els, fragment) {\n    els.pagination.replaceChildren(fragment);\n    els.pagination.dataset.serverRendered = 'false';\n  }\n\n  function getPageUrl(page) {\n    const url = new URL(window.location.href);\n    const publicPage = Number(page) + 1;\n    if (publicPage > 1) {\n      url.searchParams.set('page', String(publicPage));\n    } else {\n      url.searchParams.delete('page');\n    }\n    return url.pathname + url.search + url.hash;\n  }\n\n  function shouldHandlePaginationClick(event, link) {\n    const target = (link.getAttribute('target') || '').toLowerCase();\n    return !event.defaultPrevented\n      && event.button === 0\n      && !event.metaKey\n      && !event.ctrlKey\n      && !event.shiftKey\n      && !event.altKey\n      && (!target || target === '_self')\n      && !link.hasAttribute('download');\n  }\n\n  function getImageUrl(hit) {\n    const image = hit.product_image || hit.image;\n    if (!image) return '';\n    if (typeof image === 'string') return image;\n    if (image.src) return image.src;\n    if (image.url) return image.url;\n    return '';\n  }\n\n  function syncWishlistButtons(root) {\n    if (!window.FurtherWishlist || typeof window.FurtherWishlist.syncButtons !== 'function') return;\n    window.FurtherWishlist.syncButtons(root || document);\n  }\n\n  function syncNotificationSignup(root) {\n    if (!window.FurtherNotificationSignup || typeof window.FurtherNotificationSignup.bind !== 'function') return;\n    window.FurtherNotificationSignup.bind(root || document);\n  }\n\n  function syncMiniPlayers(root) {\n    if (!window.miniPlayer || typeof window.miniPlayer.initializeMiniPlayers !== 'function') return;\n    window.miniPlayer.initializeMiniPlayers(root || document);\n  }\n\n  function getAudioTracks(hit) {\n    const audio = getNested(hit, ['meta', 'custom', 'audio']) || hit.audio_tracks;\n    if (!audio) return [];\n    return (Array.isArray(audio) ? audio : [audio]).filter(function (track) {\n      return typeof track === 'string' && track.length > 0;\n    });\n  }\n\n  function initInsights(config) {\n    const aa = getInsightsClient();\n    if (!aa || !config.appId || !config.searchApiKey) return;\n\n    try {\n      aa('init', {\n        appId: config.appId,\n        apiKey: config.searchApiKey,\n        useCookie: true,\n      });\n    } catch (error) {\n      // Analytics must never block browsing.\n    }\n  }\n\n  function trackProductClick(link, config, state) {\n    const objectId = link.dataset.objectId;\n    const indexName = link.dataset.indexName || getIndexName(config, state);\n    const queryId = link.dataset.queryId;\n    const position = Number(link.dataset.position);\n\n    trackSearchAttributionFromElement(link);\n\n    trackGa4(\n      'algolia_product_clicked',\n      Object.assign(baseEventParams(config, state), {\n        product_id: link.dataset.productId,\n        product_title: link.dataset.productTitle,\n        object_id: objectId,\n        index_name: indexName,\n        position: position,\n      })\n    );\n\n    trackAlgoliaObjectEvent('Product Clicked', indexName, objectId, queryId, position);\n  }\n\n  function trackRenderedSearchAttribution(root) {\n    if (!root) return;\n    root.querySelectorAll('[data-algolia-product-link]').forEach(trackSearchAttributionFromElement);\n  }\n\n  function trackSearchAttributionFromElement(element) {\n    if (!element || !element.dataset) return;\n    trackSearchAttribution(\n      element.dataset.queryId,\n      element.dataset.objectId,\n      element.dataset.productId,\n      element.dataset.indexName\n    );\n  }\n\n  function trackSearchAttribution(queryId, variantId, productId, indexName) {\n    if (!queryId || !variantId || !indexName) return;\n\n    const clickData = {\n      eventName: 'Added to cart',\n      index: indexName,\n      queryID: queryId,\n      objectIDs: [variantId],\n      productId: productId,\n    };\n\n    try {\n      const localStorageKey = 'algolia_analytics_clicked_objects';\n      const previousClickItems = JSON.parse(localStorage.getItem(localStorageKey) || '[]');\n      const deduplicatedItems = Array.isArray(previousClickItems)\n        ? previousClickItems.filter(function (item) {\n            return !(\n              item &&\n              item.index === indexName &&\n              Array.isArray(item.objectIDs) &&\n              item.objectIDs.includes(variantId)\n            );\n          })\n        : [];\n\n      deduplicatedItems.push(clickData);\n      localStorage.setItem(localStorageKey, JSON.stringify(deduplicatedItems));\n    } catch (error) {\n      // Attribution storage must never block browsing or adding to cart.\n    }\n  }\n\n  function trackMiniPlayerPlay(player, config, state) {\n    const link = player.closest('.card-wrapper') ? player.closest('.card-wrapper').querySelector('[data-algolia-product-link]') : null;\n    const objectId = link ? link.dataset.objectId : '';\n    const indexName = link ? link.dataset.indexName : getIndexName(config, state);\n    const queryId = link ? link.dataset.queryId : '';\n    const position = link ? Number(link.dataset.position) : undefined;\n\n    trackGa4(\n      'algolia_mini_player_played',\n      Object.assign(baseEventParams(config, state), {\n        product_id: player.dataset.productId,\n        object_id: objectId,\n        index_name: indexName,\n        position: position,\n      })\n    );\n\n    if (objectId) {\n      trackAlgoliaObjectEvent('Mini Player Played', indexName, objectId, queryId, position);\n    }\n  }\n\n  function trackFilterEvent(config, state, attribute, value, checked) {\n    trackGa4(\n      'algolia_filter_changed',\n      Object.assign(baseEventParams(config, state), {\n        filter_attribute: attribute,\n        filter_value: value,\n        checked: checked,\n      })\n    );\n\n    if (!checked) return;\n\n    const aa = getInsightsClient();\n    if (!aa) return;\n\n    try {\n      aa('clickedFilters', {\n        eventName: 'Filter Clicked',\n        index: getIndexName(config, state),\n        filters: [attribute + ':' + value],\n      });\n    } catch (error) {\n      // Analytics must never block browsing.\n    }\n  }\n\n  function trackAlgoliaObjectEvent(eventName, indexName, objectId, queryId, position) {\n    const aa = getInsightsClient();\n    if (!aa || !objectId || !indexName) return;\n\n    try {\n      if (queryId) {\n        aa('clickedObjectIDsAfterSearch', {\n          eventName: eventName,\n          index: indexName,\n          objectIDs: [objectId],\n          positions: [position || 1],\n          queryID: queryId,\n        });\n      } else {\n        aa('clickedObjectIDs', {\n          eventName: eventName,\n          index: indexName,\n          objectIDs: [objectId],\n        });\n      }\n    } catch (error) {\n      // Analytics must never block browsing.\n    }\n  }\n\n  function trackGa4(eventName, params) {\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', eventName, params);\n      return;\n    }\n\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push(Object.assign({ event: eventName }, params));\n  }\n\n  function baseEventParams(config, state) {\n    return {\n      collection_handle: config.collectionHandle || '',\n      collection_title: config.collectionTitle || '',\n      current_tag: config.currentTag || '',\n      request_path: config.requestPath || window.location.pathname,\n      sort: state.sort || '',\n      page: (state.page || 0) + 1,\n    };\n  }\n\n  function getInsightsClient() {\n    return typeof window.aa === 'function' ? window.aa : null;\n  }\n\n  function getNested(object, path) {\n    return path.reduce(function (value, key) {\n      return value && value[key] !== undefined ? value[key] : undefined;\n    }, object);\n  }\n\n  function parseMoneyValue(value) {\n    if (value === null || value === undefined || value === '') return null;\n    const number = Number(value);\n    return Number.isFinite(number) ? number : null;\n  }\n\n  function formatMoney(value, config) {\n    try {\n      return new Intl.NumberFormat(undefined, {\n        style: 'currency',\n        currency: config.shopCurrency || 'USD',\n      }).format(value);\n    } catch (error) {\n      return '$' + value.toFixed(2);\n    }\n  }\n\n  function showError(els, message) {\n    if (els.error) {\n      els.error.hidden = false;\n      els.error.textContent = message;\n    }\n    if (els.count) els.count.textContent = 'Algolia collection unavailable';\n  }\n\n  function hideError(els) {\n    if (!els.error) return;\n    els.error.hidden = true;\n    els.error.textContent = '';\n  }\n\n  function escapeHtml(value) {\n    return String(value).replace(/[&<>\"']/g, function (char) {\n      return {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        '\"': '&quot;',\n        \"'\": '&#39;',\n      }[char];\n    });\n  }\n\n  function escapeAttribute(value) {\n    return escapeHtml(value);\n  }\n\n  function productGid(value) {\n    const cleaned = String(value || '').trim();\n    if (!cleaned) return '';\n    if (cleaned.indexOf('gid://shopify/Product/') === 0) return cleaned;\n    const match = cleaned.match(/\\/(\\d+)$/);\n    const numericId = match ? match[1] : cleaned;\n    return /^\\d+$/.test(numericId) ? 'gid://shopify/Product/' + numericId : '';\n  }\n\n  function cleanId(value) {\n    return String(value || '').trim().replace(/[^a-zA-Z0-9_-]/g, '-') || 'item';\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', boot);\n  } else {\n    boot();\n  }\n})();\n"],
  "mappings": "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,KAAM,OACN,KAAM,OACN,qBAAsB,yBACtB,IAAK,MACL,MAAO,QACP,UAAW,UACX,OAAQ,SACR,eAAgB,iBAChB,UAAW,YACX,MAAO,QACP,YAAa,WACf,EAEM,kBAAoB,CACxB,uBAAwB,CACtB,QACA,aACA,aACA,gBACA,aACA,eACA,eACA,aACA,cACA,aACA,eACA,iBACA,YACA,cACA,SACA,cACA,aACA,cACA,iBACA,aACA,cACA,SACA,aACA,UACA,eACA,OACA,oBACA,oBACF,EACA,kBAAmB,CACjB,cACA,QACA,cACA,aACA,SACA,SACA,WACA,WACA,YACA,WACF,EACA,oBAAqB,CACnB,MACA,UACA,SACA,SACA,cACA,YACA,cACA,aACA,SACA,cACA,YACA,YACA,WACA,MACA,UACA,WACA,WACA,OACA,aACF,EACA,qBAAsB,CACpB,YACA,YACA,YACA,kBACA,YACA,YACA,mBACA,YACA,WACA,OACA,UACA,WACA,WACA,MACA,UACA,QACA,YACA,YACA,UACA,SACA,QACA,SACA,SACA,WACA,MACA,WACA,UACA,UACA,YACA,SACA,SACA,mBACA,WACA,oBACA,SACA,oBACA,YACA,aACA,WACA,kBACA,OACA,SACA,oBACA,WACA,WACA,aACA,SACA,WACA,SACA,aACA,OACA,SACA,WACA,QACA,YACA,eACA,gBACA,QACF,EACA,uBAAwB,CACtB,UACA,eACA,eACA,YACA,YACA,QACA,MACA,aACA,kBACA,sBACA,WACA,QACA,kBACA,UACA,aACA,SACF,EACA,iBAAkB,CAChB,OACA,MACA,QACA,OACA,mBACA,YACA,aACA,WACA,OACA,WACA,UACA,YACA,YACA,UACA,YACA,WACA,WACF,EACA,uBAAwB,CACtB,YACA,iBACA,YACA,mBACA,oBACA,oBACA,YACA,QACA,QACA,aACA,eACF,EACA,SAAU,CAAC,WAAY,MAAM,EAC7B,mBAAoB,CAAC,KAAK,EAC1B,KAAM,CAAC,MAAM,CACf,EAEM,SAAW,CACf,QACA,SACA,SACA,QACA,mBACA,gBACA,QACA,MACA,OACA,sBACA,KACA,WACA,oBACA,mBACA,qBACA,eACA,oBACA,oBACA,gBACA,2BACA,qBACA,2BACA,oBACA,eACA,WACF,EAEA,SAAS,MAAO,CACd,SAAS,iBAAiB,6BAA6B,EAAE,QAAQ,QAAQ,EACzE,SAAS,iBAAiB,oCAAoC,EAAE,QAAQ,iBAAiB,CAC3F,CAEA,SAAS,SAAS,KAAM,CACtB,MAAM,SAAW,KAAK,cAAc,+BAA+B,EACnE,GAAI,CAAC,SAAU,OAEf,MAAM,OAAS,KAAK,MAAM,SAAS,aAAe,IAAI,EAChD,IAAM,CACV,MAAO,KAAK,cAAc,sBAAsB,EAChD,MAAO,KAAK,cAAc,sBAAsB,EAChD,MAAO,KAAK,cAAc,sBAAsB,EAChD,OAAQ,KAAK,cAAc,uBAAuB,EAClD,KAAM,KAAK,cAAc,qBAAqB,EAC9C,WAAY,KAAK,cAAc,2BAA2B,EAC1D,MAAO,KAAK,cAAc,sBAAsB,EAChD,KAAM,KAAK,cAAc,qBAAqB,EAC9C,OAAQ,KAAK,cAAc,8BAA8B,EACzD,WAAY,KAAK,cAAc,4BAA4B,EAC3D,YAAa,KAAK,iBAAiB,6BAA6B,EAChE,aAAc,KAAK,iBAAiB,4BAA4B,CAClE,EAEM,MAAQ,CACZ,OACA,KAAM,eAAe,EACrB,KAAM,OAAO,mBAAqB,eAAiB,UAAY,OAAO,aAAe,SACrF,YAAa,IAAI,IACjB,YAAa,IAAI,IACjB,aAAc,IAAI,IAClB,UAAW,IAAI,IACf,eAAgB,IAAI,IACpB,aAAc,IAAI,IAClB,kBAAmB,CAAC,EACpB,kBAAmB,CAAC,EACpB,cAAe,kBAAkB,MAAM,EACvC,qBAAsB,yBAAyB,MAAM,EACrD,mBAAoB,2BAA2B,IAAI,OAAO,gBAAgB,EAC1E,iBAAkB,IAAI,IACtB,wBAAyB,EAC3B,EAEA,GAAI,CAAC,OAAO,OAAS,CAAC,OAAO,cAAgB,CAAC,OAAO,UAAW,CAC9D,UAAU,IAAK,+FAA+F,EAC9G,MACF,CAEA,GAAI,CAAC,OAAO,cAAe,CACzB,UAAU,IAAK,gCAAgC,EAC/C,MACF,CAEA,MAAM,OAAS,OAAO,cAAc,OAAO,MAAO,OAAO,YAAY,EACrE,aAAa,MAAM,EAEf,IAAI,YAAc,IAAI,QACxB,IAAI,WAAW,iBAAiB,QAAS,UAAY,CACnD,SAAS,+BAAgC,gBAAgB,OAAQ,KAAK,CAAC,EACvE,gBAAgB,IAAK,EAAI,CAC3B,CAAC,EAGH,IAAI,YAAY,QAAQ,SAAU,OAAQ,CACxC,OAAO,iBAAiB,QAAS,UAAY,CAC3C,gBAAgB,IAAK,EAAK,CAC5B,CAAC,CACH,CAAC,EAEG,IAAI,OACN,IAAI,KAAK,MAAQ,MAAM,KACvB,IAAI,KAAK,iBAAiB,SAAU,UAAY,CAC9C,MAAM,KAAO,IAAI,KAAK,MACtB,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,SACE,uBACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,KAAM,MAAM,IACd,CAAC,CACH,EACA,OAAO,OAAQ,OAAQ,IAAK,KAAK,CACnC,CAAC,GAGC,IAAI,OACN,IAAI,MAAM,iBAAiB,QAAS,UAAY,CAC9C,MAAM,YAAY,MAAM,EACxB,MAAM,YAAY,MAAM,EACxB,MAAM,aAAa,MAAM,EACzB,MAAM,UAAU,MAAM,EACtB,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,SAAS,0BAA2B,gBAAgB,OAAQ,KAAK,CAAC,EAClE,OAAO,OAAQ,OAAQ,IAAK,KAAK,CACnC,CAAC,EAGH,IAAI,OAAO,iBAAiB,SAAU,SAAU,MAAO,CACrD,MAAM,MAAQ,MAAM,OAAO,QAAQ,8CAA8C,EAC5E,QAEL,iBAAiB,MAAO,MAAM,QAAQ,eAAgB,MAAM,MAAO,MAAM,OAAO,EAChF,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,iBAAiB,OAAQ,MAAO,MAAM,QAAQ,eAAgB,MAAM,MAAO,MAAM,OAAO,EACxF,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACnC,CAAC,EAED,IAAI,OAAO,iBAAiB,QAAS,SAAU,MAAO,CACpD,MAAM,OAAS,MAAM,OAAO,QAAQ,qBAAqB,EACzD,GAAI,CAAC,OAAQ,OAEb,MAAM,UAAY,OAAO,QAAQ,YAC7B,MAAM,eAAe,IAAI,SAAS,EACpC,MAAM,eAAe,OAAO,SAAS,EAErC,MAAM,eAAe,IAAI,SAAS,EAEpC,aAAa,IAAK,MAAM,YAAa,KAAK,CAC5C,CAAC,EAED,IAAI,OAAO,iBAAiB,QAAS,SAAU,MAAO,CACpD,MAAM,OAAS,MAAM,OAAO,QAAQ,mBAAmB,EACvD,GAAI,CAAC,OAAQ,OAEb,MAAM,UAAY,OAAO,QAAQ,UAC7B,MAAM,aAAa,IAAI,SAAS,EAClC,MAAM,aAAa,OAAO,SAAS,EAEnC,MAAM,aAAa,IAAI,SAAS,EAElC,aAAa,IAAK,MAAM,YAAa,KAAK,CAC5C,CAAC,EAED,IAAI,OAAO,iBAAiB,SAAU,SAAU,MAAO,CACrD,MAAM,MAAQ,MAAM,OAAO,QAAQ,0CAA0C,EACxE,QAED,MAAM,QACR,MAAM,YAAY,IAAI,MAAM,KAAK,EAEjC,MAAM,YAAY,OAAO,MAAM,KAAK,EAEtC,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,SACE,+BACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,aAAc,aAAa,OAAO,MAAM,KAAK,CAAC,EAAI,aAAa,OAAO,MAAM,KAAK,CAAC,EAAE,MAAQ,MAAM,MAClG,QAAS,MAAM,OACjB,CAAC,CACH,EACA,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACnC,CAAC,EAED,IAAI,OAAO,iBAAiB,SAAU,SAAU,MAAO,CACrD,MAAM,MAAQ,MAAM,OAAO,QAAQ,2CAA2C,EACzE,QAED,MAAM,QACR,MAAM,aAAa,IAAI,MAAM,KAAK,EAElC,MAAM,aAAa,OAAO,MAAM,KAAK,EAEvC,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,SACE,sCACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,aAAc,MAAM,MACpB,QAAS,MAAM,OACjB,CAAC,CACH,EACA,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACnC,CAAC,EAED,IAAI,OAAO,iBAAiB,SAAU,SAAU,MAAO,CACrD,MAAM,MAAQ,MAAM,OAAO,QAAQ,wCAAwC,EACtE,QAED,MAAM,QACR,MAAM,UAAU,IAAI,MAAM,KAAK,EAE/B,MAAM,UAAU,OAAO,MAAM,KAAK,EAEpC,MAAM,KAAO,EACb,cAAc,MAAM,KAAM,EAAI,EAC9B,iBAAiB,OAAQ,MAAO,OAAQ,MAAM,QAAU,MAAQ,QAAU,OAAQ,MAAM,OAAO,EAC/F,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACnC,CAAC,EAED,IAAI,KAAK,iBAAiB,QAAS,SAAU,MAAO,CAClD,MAAM,YAAc,MAAM,OAAO,QAAQ,6BAA6B,EAChE,SAAW,MAAM,OAAO,QAAQ,mBAAmB,EAEzD,GAAI,YAAa,CACf,kBAAkB,YAAa,OAAQ,KAAK,EAC5C,MACF,CAEA,GAAI,SAAU,CACZ,MAAM,OAAS,SAAS,QAAQ,oBAAoB,EAChD,QAAQ,oBAAoB,OAAQ,OAAQ,KAAK,CACvD,CACF,CAAC,EACD,kBAAkB,IAAI,IAAI,EAE1B,IAAI,WAAW,iBAAiB,QAAS,SAAU,MAAO,CACxD,MAAM,KAAO,MAAM,OAAO,QAAQ,cAAc,EAChD,GAAI,CAAC,MAAQ,IAAI,KAAK,QAAQ,iBAAmB,QAAU,CAAC,4BAA4B,MAAO,IAAI,EAAG,OAEtG,MAAM,SAAW,OAAO,KAAK,QAAQ,IAAI,EACrC,CAAC,OAAO,SAAS,QAAQ,GAAK,SAAW,IAE7C,MAAM,eAAe,EACjB,WAAa,MAAM,OAEvB,MAAM,KAAO,SACb,MAAM,wBAA0B,GAChC,cAAc,MAAM,KAAM,EAAK,EAC/B,SACE,uBACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,KAAM,MAAM,KAAO,CACrB,CAAC,CACH,EACA,OAAO,OAAQ,OAAQ,IAAK,KAAK,GACnC,CAAC,EAED,OAAO,iBAAiB,WAAY,UAAY,CAC9C,MAAM,SAAW,eAAe,EAC5B,WAAa,MAAM,OAEvB,MAAM,KAAO,SACb,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACjC,KAAK,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,EAC5D,CAAC,EAED,OAAO,OAAQ,OAAQ,IAAK,KAAK,CACnC,CAEA,SAAS,kBAAkB,KAAM,CAC/B,MAAM,SAAW,KAAK,cAAc,sCAAsC,EAC1E,GAAI,CAAC,SAAU,OAEf,MAAM,OAAS,KAAK,MAAM,SAAS,aAAe,IAAI,EAChD,IAAM,CACV,MAAO,KAAK,cAAc,qCAAqC,EAC/D,MAAO,KAAK,cAAc,qCAAqC,EAC/D,KAAM,KAAK,cAAc,oCAAoC,CAC/D,EACM,MAAQ,CACZ,OACA,KAAM,EACN,KAAM,UACN,YAAa,IAAI,IACjB,YAAa,IAAI,IACjB,aAAc,IAAI,IAClB,eAAgB,IAAI,IACpB,aAAc,IAAI,IAClB,kBAAmB,CAAC,EACpB,kBAAmB,CAAC,EACpB,cAAe,CAAC,EAChB,qBAAsB,CAAC,eAAe,EACtC,mBAAoB,GACpB,iBAAkB,IAAI,GACxB,EAEA,GAAI,CAAC,OAAO,OAAS,CAAC,OAAO,cAAgB,CAAC,OAAO,WAAa,CAAC,IAAI,KAAM,CAC3E,uBAAuB,IAAK,sEAAsE,EAClG,MACF,CAEA,GAAI,CAAC,OAAO,cAAe,CACzB,uBAAuB,IAAK,gCAAgC,EAC5D,MACF,CAEA,MAAM,OAAS,OAAO,cAAc,OAAO,MAAO,OAAO,YAAY,EAC/D,UAAY,OAAO,UAAY,kBAC/B,MAAQ,OAAO,UAAU,SAAS,EACxC,aAAa,MAAM,EAEnB,IAAI,KAAK,iBAAiB,QAAS,SAAU,MAAO,CAClD,MAAM,YAAc,MAAM,OAAO,QAAQ,6BAA6B,EAChE,SAAW,MAAM,OAAO,QAAQ,mBAAmB,EAEzD,GAAI,YAAa,CACf,kBAAkB,YAAa,OAAQ,KAAK,EAC5C,MACF,CAEA,GAAI,SAAU,CACZ,MAAM,OAAS,SAAS,QAAQ,oBAAoB,EAChD,QAAQ,oBAAoB,OAAQ,OAAQ,KAAK,CACvD,CACF,CAAC,EACD,kBAAkB,IAAI,IAAI,EAE1B,IAAI,KAAK,UAAU,IAAI,SAAS,EAChC,MACG,OAAO,GAAI,CACV,YAAa,OAAO,OAAO,aAAe,EAAE,EAC5C,KAAM,EACN,qBAAsB,SACtB,eAAgB,GAChB,eAAgB,CAAC,eAAe,EAChC,aAAc,CAAC,0BAA0B,CAC3C,CAAC,EACA,KAAK,SAAU,QAAS,CACvB,QAAQ,UAAY,QAAQ,OAAS,UACrC,IAAI,KAAK,UAAU,OAAO,SAAS,EAC/B,IAAI,QAAO,IAAI,MAAM,OAAS,QAAQ,KAAK,OAAS,GACxD,IAAI,KAAK,UAAY,QAAQ,KAC1B,IAAI,SAAU,IAAKA,OAAO,CACzB,MAAO,0BAA4B,WAAW,IAAK,OAAQ,QAASA,OAAQ,CAAC,EAAI,OACnF,CAAC,EACA,KAAK,EAAE,EACV,oBAAoB,IAAI,IAAI,EAC5B,uBAAuB,IAAI,IAAI,EAC/B,gBAAgB,IAAI,IAAI,CAC1B,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,IAAI,KAAK,UAAU,OAAO,SAAS,EACnC,uBAAuB,IAAK,OAAS,MAAM,QAAU,MAAM,QAAU,qCAAqC,CAC5G,CAAC,CACL,CAEA,SAAS,uBAAuB,IAAK,QAAS,CACvC,IAAI,QACT,IAAI,MAAM,YAAc,QACxB,IAAI,MAAM,OAAS,GACrB,CAEA,SAAS,gBAAgB,IAAK,KAAM,CAC7B,IAAI,SAET,IAAI,OAAO,UAAU,OAAO,UAAW,IAAI,EAC3C,IAAI,OAAO,aAAa,cAAe,KAAO,QAAU,MAAM,EAC9D,IAAI,YAAY,QAAQ,SAAU,QAAS,CACrC,QAAQ,UAAU,SAAS,0BAA0B,IACvD,QAAQ,OAAS,CAAC,KAEtB,CAAC,EACD,SAAS,gBAAgB,UAAU,OAAO,8BAA+B,IAAI,EAC/E,CAEA,SAAS,kBAAkB,OAAQ,CACjC,MAAM,IAAM,OAAO,YAAc,iBAAiB,MAAM,EAExD,GAAI,8BAA8B,IAAI,OAAO,gBAAgB,GAAK,IAChE,cAAO,WAAa,IACb,CAAC,CAAC,QAAU,GAAG,CAAC,EAMzB,MAAM,MAHc,CAClB,OAAQ,cACV,EAC0B,OAAO,gBAAgB,EAEjD,GAAI,OAAS,IACX,cAAO,WAAa,IACb,CAAC,CAAC,MAAQ,IAAM,GAAG,CAAC,EAG7B,GAAI,aAAa,OAAO,gBAAgB,EACtC,MAAO,CAAC,CAAC,qBAAuB,aAAa,OAAO,gBAAgB,CAAC,CAAC,EAGxE,GAAI,cAAc,OAAO,gBAAgB,EAAG,CAC1C,MAAM,MAAQ,mBAAmB,cAAc,OAAO,gBAAgB,CAAC,EACvE,OAAI,MACK,CAAC,CAAC,uBAAyB,IAAM,MAAM,KAAK,CAAC,EAE/C,CAAC,CAAC,uBAAyB,IAAM,cAAc,OAAO,gBAAgB,CAAC,CAAC,CACjF,CAEA,OAAI,kBAAkB,OAAO,gBAAgB,EACpC,CACL,kBAAkB,OAAO,gBAAgB,EAAE,IAAI,SAAU,SAAU,CACjE,MAAO,QAAU,QACnB,CAAC,CACH,EAGE,OAAO,mBAAqB,gBACvB,CAAC,CAAC,uBAAuB,CAAC,EAG/B,OAAO,mBAAqB,UACvB,CAAC,CAAC,WAAW,CAAC,EAGhB,CAAC,CACV,CAEA,SAAS,yBAAyB,OAAQ,CACxC,OAAI,OAAO,mBAAqB,eACvB,CAAC,eAAe,EAGlB,CAAC,CACV,CAEA,SAAS,iBAAiB,OAAQ,CAChC,MAAM,KAAO,OAAO,aAAe,GAC7B,OAAS,gBAAkB,OAAO,iBAAmB,IAC3D,GAAI,CAAC,KAAK,WAAW,MAAM,EAAG,MAAO,GAErC,MAAM,KAAO,mBAAmB,KAAK,MAAM,OAAO,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,EAAE,EAC7E,OAAK,KAEE,KACJ,MAAM,GAAG,EACT,OAAO,OAAO,EACd,IAAI,SAAU,KAAM,CACnB,OAAO,KAAK,OAAO,CAAC,EAAE,YAAY,EAAI,KAAK,MAAM,CAAC,CACpD,CAAC,EACA,KAAK,GAAG,EARO,EASpB,CAEA,SAAS,iBAAiB,MAAO,UAAW,MAAO,QAAS,CAC1D,MAAM,OAAS,IAAI,IAAI,MAAM,YAAY,IAAI,SAAS,GAAK,CAAC,CAAC,EACzD,QACF,OAAO,IAAI,KAAK,EAEhB,OAAO,OAAO,KAAK,EAGjB,OAAO,KACT,MAAM,YAAY,IAAI,UAAW,MAAM,EAEvC,MAAM,YAAY,OAAO,SAAS,CAEtC,CAEA,SAAS,kBAAkB,MAAO,CAChC,MAAM,QAAU,MAAM,cAAc,IAAI,SAAU,MAAO,CACvD,OAAO,MAAM,MAAM,CACrB,CAAC,EAwBD,GAtBA,MAAM,YAAY,QAAQ,SAAU,OAAQ,UAAW,CACrD,GAAI,YAAc,uBAAwB,CACxC,MAAM,cAAgB,wBAAwB,OAAQ,MAAM,iBAAiB,EACzE,cAAc,QAAQ,QAAQ,KAAK,aAAa,EACpD,MACF,CAEA,QAAQ,KACN,MAAM,KAAK,MAAM,EAAE,IAAI,SAAU,MAAO,CACtC,OAAO,UAAY,IAAM,KAC3B,CAAC,CACH,CACF,CAAC,EAEG,MAAM,aAAa,OAAS,GAC9B,QAAQ,KACN,MAAM,KAAK,MAAM,YAAY,EAAE,IAAI,SAAU,MAAO,CAClD,MAAO,uBAAyB,KAClC,CAAC,CACH,EAGE,MAAM,UAAU,OAAS,EAAG,CAC9B,MAAM,UAAY,MAAM,KAAK,MAAM,SAAS,EAAE,CAAC,EAC/C,QAAQ,KAAK,SAAW,YAAc,MAAQ,QAAU,OAAO,CACjE,CAEA,OAAO,OACT,CAEA,SAAS,wBAAwB,OAAQ,kBAAmB,CAC1D,MAAM,QAAU,CAAC,EACjB,cAAO,QAAQ,SAAU,MAAO,CAC9B,MAAM,MAAQ,cAAc,KAAK,SAAU,KAAM,CAC/C,OAAO,KAAK,QAAU,OAAS,KAAK,QAAU,KAChD,CAAC,EAED,QAAQ,KAAK,uBAAyB,KAAO,MAAQ,MAAM,MAAQ,MAAM,CAC3E,CAAC,EACM,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,CACpC,CAEA,SAAS,mBAAmB,MAAO,CACjC,OAAO,cAAc,KAAK,SAAU,KAAM,CACxC,OAAO,KAAK,QAAU,KACxB,CAAC,CACH,CAEA,SAAS,aAAa,OAAQ,MAAO,CACnC,MAAM,KAAO,OAAO,UACd,SAAW,CACf,OAAQ,KAAO,qBACf,QAAS,KAAO,iBAClB,EAEA,OAAI,OAAO,mBAAqB,iBAAmB,MAAM,OAAS,SACzD,KAAO,wBAGZ,OAAO,mBAAqB,eACvB,SAAS,QAGd,MAAM,iBAAiB,IAAI,MAAM,IAAI,EAAU,KAC5C,SAAS,MAAM,IAAI,GAAK,IACjC,CAEA,SAAS,OAAO,OAAQ,OAAQ,IAAK,MAAO,CAC1C,WAAW,IAAK,EAAI,EACpB,UAAU,GAAG,EAEb,MAAM,UAAY,aAAa,OAAQ,KAAK,EACtC,MAAQ,OAAO,UAAU,SAAS,EAClC,cAAgB,iBAAiB,MAAM,EAE7C,MACG,OAAO,GAAI,CACV,qBAAsB,SACtB,OAAQ,cAAc,IAAI,SAAU,MAAO,CACzC,OAAO,MAAM,SACf,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,EACtC,aAAc,kBAAkB,KAAK,EACrC,eAAgB,oBAAoB,KAAK,EACzC,YAAa,OAAO,OAAO,WAAW,GAAK,GAC3C,eAAgB,GAChB,kBAAmB,qBACnB,KAAM,MAAM,IACd,CAAC,EACA,KAAK,SAAU,QAAS,CACvB,QAAQ,UAAY,UACpB,MAAM,SAAW,kBAAkB,QAAS,MAAM,EAC5C,eAAiB,wBAAwB,OAAO,EAEtD,2BAA2B,IAAI,KAAM,OAAO,EAC5C,MAAM,YAAc,QACpB,aAAa,IAAK,QAAS,KAAK,EAChC,YAAY,IAAK,QAAS,MAAM,EAChC,WAAW,IAAK,QAAS,QAAQ,EACjC,iBAAiB,IAAK,cAAc,EACpC,qBAAqB,GAAG,EACxB,WAAW,IAAK,EAAK,EAEjB,MAAM,0BACR,MAAM,wBAA0B,GAChC,IAAI,KAAK,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,EAC1D,IAAI,OAAO,IAAI,MAAM,MAAM,CAAE,cAAe,EAAK,CAAC,EAE1D,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,GAAI,oBAAoB,KAAK,GAAK,MAAM,OAAS,SAAU,CACzD,MAAM,iBAAiB,IAAI,MAAM,IAAI,EACrC,UAAU,IAAK,yFAAyF,EACxG,MAAM,KAAO,SACT,IAAI,OAAM,IAAI,KAAK,MAAQ,MAAM,MACrC,OAAO,OAAQ,OAAQ,IAAK,KAAK,EACjC,MACF,CAEA,MAAM,gBAAkB,IAAI,KAAK,QAAQ,iBAAmB,OACtD,QAAU,OAAS,MAAM,OAAS,2BACpC,6HACA,gBACE,0EACA,iFACN,UAAU,IAAK,OAAO,EACtB,MAAM,wBAA0B,GAChC,WAAW,IAAK,EAAK,CACvB,CAAC,CACL,CAEA,SAAS,2BAA2B,YAAa,QAAS,CACxD,GAAI,CAAC,aAAe,YAAY,QAAQ,iBAAmB,OAAQ,OAGnE,GADoB,MAAM,KAAK,YAAY,iBAAiB,8BAA8B,CAAC,EAC3E,QAAU,CAAC,QAAQ,KAAK,OAAQ,CAC9C,MAAM,WAAa,IAAI,MAAM,sEAAsE,EACnG,iBAAW,KAAO,2BACZ,UACR,CACF,CAEA,SAAS,qBAAqB,IAAK,CACjC,IAAI,aAAa,QAAQ,SAAU,QAAS,CAC1C,QAAQ,OAAS,EACnB,CAAC,CACH,CAEA,SAAS,oBAAoB,MAAO,CAClC,MAAM,QAAU,MAAM,qBAAqB,MAAM,EACjD,OAAK,MAAM,YAAY,MAEvB,QAAQ,KACN,MAAM,KAAK,MAAM,WAAW,EACzB,IAAI,SAAU,MAAO,CACpB,MAAM,MAAQ,aAAa,OAAO,KAAK,CAAC,EACxC,OAAK,MACD,MAAM,MAAQ,KAAa,WAAa,MAAM,IAC9C,MAAM,MAAQ,KAAa,YAAc,MAAM,IAC5C,SAAW,MAAM,IAAM,OAAS,MAAM,IAH1B,IAIrB,CAAC,EACA,OAAO,OAAO,CACnB,EAEO,OACT,CAEA,SAAS,oBAAoB,MAAO,CAClC,MAAM,QAAU,OAAS,MAAM,QAAU,MAAM,QAAU,GACzD,MAAO,kEAAkE,KAAK,OAAO,CACvF,CAEA,SAAS,WAAW,IAAK,QAAS,CAC3B,IAAI,OACT,IAAI,KAAK,UAAU,OAAO,UAAW,OAAO,EAC5C,IAAI,KAAK,aAAa,YAAa,QAAU,OAAS,OAAO,EAC/D,CAEA,SAAS,YAAY,IAAK,QAAS,OAAQ,CACzC,MAAM,MAAQ,OAAO,YAAc,OAAO,iBAAmB,aAC7D,IAAI,MAAM,YAAc,QAAQ,OAAS,iBAAmB,KAC9D,CAEA,SAAS,kBAAkB,QAAS,OAAQ,CAC1C,MAAM,SAAW,SAAS,cAAc,UAAU,EAClD,gBAAS,UAAY,QAAQ,KAC1B,IAAI,SAAU,IAAK,MAAO,CACzB,MAAM,SAAW,QAAQ,KAAO,QAAQ,YAAc,MAAQ,EAC9D,MAAO,0BAA4B,WAAW,IAAK,OAAQ,QAAS,QAAQ,EAAI,OAClF,CAAC,EACA,KAAK,EAAE,EACH,SAAS,OAClB,CAEA,SAAS,WAAW,IAAK,QAAS,SAAU,CAC1C,IAAI,MAAM,OAAS,QAAQ,KAAK,OAAS,EACzC,IAAI,KAAK,gBAAgB,QAAQ,EACjC,IAAI,KAAK,QAAQ,eAAiB,QAClC,+BAA+B,IAAI,IAAI,EACvC,oBAAoB,IAAI,IAAI,EAC5B,uBAAuB,IAAI,IAAI,EAC/B,gBAAgB,IAAI,IAAI,CAC1B,CAEA,SAAS,WAAW,IAAK,OAAQ,QAAS,SAAU,CAClD,MAAM,aAAe,OAAO,IAAI,IAAM,EAAE,EAClC,aAAe,OAAO,IAAI,UAAY,EAAE,EACxC,UAAY,WAAW,cAAgB,YAAY,EACnD,SAAW,gBAAgB,YAAY,EACvC,UAAY,gBAAgB,QAAQ,WAAa,OAAO,WAAa,EAAE,EACvE,QAAU,gBAAgB,QAAQ,SAAW,EAAE,EAC/C,MAAQ,WAAW,IAAI,OAAS,kBAAkB,EAClD,OAAS,WAAW,IAAI,QAAU,EAAE,EACpC,IAAM,IAAI,OAAS,aAAe,mBAAmB,IAAI,MAAM,EAAI,IACnE,MAAQ,YAAY,GAAG,EACvB,UAAY,IAAI,sBAAwB,GACxC,UAAY,gBAAgB,IAAI,gBAAgB,EAChD,MAAQ,gBAAgB,IAAI,KAAK,EACjC,cAAgB,UAAU,IAAK,iBAAiB,EAChD,OAAS,WAAa,CAAC,eAAiB,YAAc,MAAQ,QAAU,MAAQ,UAAY,MAC5F,YAAc,eAAe,GAAG,EAEtC,MAAO,CACL,wEACA,oCAAsC,MAAQ,cAAgB,cAAgB,oCAC9E,6FACA,MAAQ,YAAY,MAAO,MAAO,SAAU,OAAQ,OAAO,EAAI,GAC/D,8BACA,kCACA,+CAAiD,UAAY,wBAC7D,YAAc,gBAAgB,GAAG,EAAI,+BAAiC,UAAY,2GAA6G,SAAW,sBAAwB,UAAY,oBAAsB,QAAU,oBAAsB,SAAW,sBAAwB,UAAY,yBAA2B,gBAAgB,IAAI,OAAS,EAAE,EAAI,KAAO,MAAQ,OACha,QACA,SACA,YAAY,UAAW,UAAW,OAAQ,KAAK,EAC/C,SACA,SACA,8BACA,kCACA,yDAA2D,UAAY,KACvE,YAAc,gBAAgB,GAAG,EAAI,0BAA4B,UAAY,0EAA4E,SAAW,sBAAwB,UAAY,oBAAsB,QAAU,oBAAsB,SAAW,sBAAwB,UAAY,yBAA2B,gBAAgB,IAAI,OAAS,EAAE,EAAI,KAAO,MAAQ,OAC1X,QACA,iCACA,OAAO,YAAc,OAAS,6FAA+F,OAAS,SAAW,GACjJ,YAAY,MAAO,UAAW,OAAQ,aAAa,EACnD,SACA,8CACA,YAAY,OAAS,iBAAiB,UAAW,WAAW,EAAI,GAChE,gBAAgB,UAAW,SAAU,UAAW,QAAS,UAAW,IAAI,OAAS,GAAI,aAAc,OAAQ,aAAa,EACxH,SACA,SACA,YAAY,UAAW,UAAW,OAAQ,QAAQ,EAClD,SACA,SACA,qBAAqB,IAAK,aAAc,aAAc,UAAW,MAAO,UAAW,MAAO,GAAG,EAC7F,QACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,qBAAqB,IAAK,UAAW,UAAW,UAAW,MAAO,UAAW,MAAO,IAAK,CAChG,MAAI,CAAC,WAAa,CAAC,WAAa,CAAC,IAAI,IAAY,GAE1C,CACL,oHACA,gCACA,8BAAgC,gBAAgB,SAAS,EAAI,IAC7D,8BAAgC,gBAAgB,SAAS,EAAI,IAC7D,uBAAyB,gBAAgB,IAAI,KAAO,EAAE,EAAI,IAC1D,yBAA2B,gBAAgB,IAAI,OAAS,EAAE,EAAI,IAC9D,0BAA4B,gBAAgB,IAAI,QAAU,EAAE,EAAI,IAChE,0BAA4B,gBAAgB,IAAI,QAAU,EAAE,EAAI,IAChE,uBAAyB,gBAAgB,GAAG,EAAI,IAChD,yBAA2B,gBAAgB,OAAS,EAAE,EAAI,IAC1D,yBAA2B,gBAAgB,QAAU,KAAO,GAAK,OAAO,KAAK,CAAC,EAAI,IAClF,oCAAsC,gBAAgB,YAAc,KAAO,GAAK,OAAO,SAAS,CAAC,EAAI,IACrG,8BAAgC,UAAY,OAAS,SAAW,IAChE,iCACA,kCACA,sCACA,wBACA,IACA,gFACA,4CACA,WACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,iBAAiB,UAAW,OAAQ,CAC3C,MAAM,WAAa,gBAAgB,KAAK,UAAU,MAAM,CAAC,EAEzD,MAAO,CACL,8BAAgC,UAAY,kDAAoD,WAAa,sBAAwB,UAAY,KACjJ,2BAA6B,UAAY,4BACzC,qCACA,4HAA+H,UAAY,sKAC3I,sHAAyH,UAAY,6oBACrI,gHAAmH,UAAY,8KAC/H,SACA,0EAA4E,UAAY,8DACxF,QACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,gBAAgB,UAAW,UAAW,UAAW,QAAS,UAAW,aAAc,aAAc,OAAQ,cAAe,CAC/H,GAAI,CAAC,UAAW,MAAO,GACvB,GAAI,CAAC,UAAW,OAAO,mBAAmB,UAAW,aAAc,aAAc,MAAM,EAEvF,MAAM,YAAc,cAAgB,+BAAiC,cAC/D,UAAY,cAAgB,+BAAiC,GAEnE,MAAO,CACL,kJAAoJ,gBAAgB,SAAS,EAAI,sBAAwB,gBAAgB,SAAS,EAAI,oBAAsB,gBAAgB,OAAO,EAAI,sBAAwB,gBAAgB,cAAgB,SAAS,EAAI,IAAM,UAAY,IAC9W,yCAA2C,gBAAgB,SAAS,EAAI,KACxE,kDACA,uJAAyJ,UAAY,KACrK,SAAW,YAAc,UACzB,YACA,qJACA,SACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,UAAU,IAAK,QAAS,CAC/B,MAAM,OAAS,OAAO,SAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAClD,KAAO,KAAO,IAAI,KACxB,MAAI,CAAC,QAAU,CAAC,MAAM,QAAQ,IAAI,EAAU,GACrC,KAAK,KAAK,SAAU,IAAK,CAC9B,OAAO,OAAO,GAAG,EAAE,KAAK,EAAE,YAAY,IAAM,MAC9C,CAAC,CACH,CAGA,IAAI,cAAgB,QAAQ,QAAQ,EAEpC,SAAS,kBAAkB,KAAM,CAC3B,CAAC,MAAQ,KAAK,QAAQ,uBAAyB,QAAU,CAAC,OAAO,OAAS,CAAC,OAAO,WACtF,KAAK,QAAQ,qBAAuB,OACpC,KAAK,iBAAiB,SAAU,SAAU,MAAO,CAC/C,MAAM,KAAO,MAAM,OAGnB,GAFI,CAAC,MAAQ,KAAK,UAAY,QAAU,CAAC,KAAK,aAAa,wBAAwB,IACnF,MAAM,eAAe,EACjB,KAAK,QAAQ,cAAgB,QAAQ,OACzC,KAAK,QAAQ,YAAc,OAC3B,MAAM,OAAS,KAAK,cAAc,iBAAiB,EAC/C,SACF,OAAO,aAAa,gBAAiB,MAAM,EAC3C,OAAO,aAAa,YAAa,MAAM,GAEzC,mBAAmB,KAAM,cAAS,EAClC,cAAgB,cAAc,KAAK,UAAY,CAC7C,OAAO,eAAe,IAAI,CAC5B,CAAC,EAAE,MAAM,UAAY,CACnB,mBAAmB,KAAM,iEAAiE,CAC5F,CAAC,EAAE,QAAQ,UAAY,CACrB,OAAO,KAAK,QAAQ,YAChB,SACF,OAAO,gBAAgB,eAAe,EACtC,OAAO,gBAAgB,WAAW,EAEtC,CAAC,CACH,CAAC,EACH,CAEA,SAAS,UAAW,CAClB,OAAQ,OAAO,SAAW,OAAO,QAAQ,QAAU,OAAO,QAAQ,OAAO,MAAS,GACpF,CAEA,SAAS,mBAAmB,KAAM,QAAS,CACzC,MAAM,QAAU,KAAK,cAAc,6BAA6B,EAC3D,UACL,QAAQ,OAAS,GACjB,QAAQ,YAAc,QACxB,CAEA,eAAe,eAAe,KAAM,CAClC,IAAI,aAAe,GACnB,GAAI,CACF,GAAI,KAAK,QAAQ,gBAAkB,OAAQ,CACzC,MAAMC,UAAW,MAAM,MAAM,SAAS,EAAI,UAAW,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EAChG,GAAI,CAACA,UAAS,GAAI,MAAM,IAAI,MAAM,uCAAuC,EACzE,MAAM,KAAO,MAAMA,UAAS,KAAK,EAC3B,UAAY,OAAO,KAAK,cAAc,kBAAkB,EAAE,KAAK,EAC/D,MAAQ,KAAK,OAAS,CAAC,EACvB,aAAe,MAAM,KAAK,SAAU,KAAM,CAC9C,OAAO,OAAO,KAAK,UAAU,IAAM,SACrC,CAAC,EACK,cAAgB,MAAM,KAAK,SAAU,KAAM,CAC/C,OAAO,OAAO,KAAK,UAAU,IAAM,SACrC,CAAC,EACD,GAAI,CAAC,aAAc,CACjB,mBAAmB,KAAM,mFAAmF,EAC5G,MACF,CACA,GAAI,cAAe,CACjB,mBAAmB,KAAM,8BAA8B,EACvD,MACF,CACF,CACA,MAAM,KAAO,IAAI,SAAS,IAAI,EAC9B,KAAK,OAAO,WAAY,kBAAkB,EAC1C,KAAK,OAAO,eAAgB,OAAO,SAAS,QAAQ,EACpD,kCAAkC,IAAI,EACtC,aAAe,GACf,MAAM,SAAW,MAAM,MAAM,SAAS,EAAI,cAAe,CACvD,OAAQ,OACR,QAAS,CAAE,OAAQ,mBAAoB,mBAAoB,gBAAiB,EAC5E,IACF,CAAC,EACK,MAAQ,MAAM,SAAS,KAAK,EAClC,GAAI,CAAC,SAAS,IAAM,MAAM,OAAQ,CAChC,mBAAmB,MAAO,MAAM,aAAe,MAAM,SAAW,8BAAgC,uCAAuC,EACvI,MAAM,oBAAoB,EAC1B,MACF,CAEA,mBAAmB,KAAM,gBAAgB,EACzC,MAAM,oBAAoB,MAAM,QAAQ,EACxC,GAAI,CACE,OAAO,SAAY,YAAc,OAAO,eAAmB,KAC7D,QAAQ,eAAe,WAAY,CAAE,OAAQ,oBAAqB,iBAAkB,KAAK,IAAI,IAAI,EAAG,SAAU,KAAM,CAAC,CAEzH,OAAS,MAAO,CACd,QAAQ,MAAM,KAAK,CACrB,CACF,MAAgB,CACd,mBAAmB,KAAM,aACrB,kEACA,uCAAuC,EACvC,cAAc,MAAM,oBAAoB,CAC9C,CACF,CAEA,eAAe,oBAAoB,SAAU,CAC3C,GAAI,CACF,GAAI,CAAC,UAAY,CAAC,SAAS,kBAAkB,EAAG,CAC9C,MAAM,SAAW,MAAM,MAAM,SAAS,EAAI,6BAA8B,CAAE,QAAS,CAAE,OAAQ,kBAAmB,CAAE,CAAC,EACnH,GAAI,CAAC,SAAS,GAAI,OAClB,SAAW,MAAM,SAAS,KAAK,CACjC,CACA,MAAM,KAAO,SAAS,eAAe,kBAAkB,EACjD,KAAO,UAAY,SAAS,kBAAkB,EACpD,GAAI,CAAC,MAAQ,CAAC,KAAM,OACpB,MAAM,QAAU,IAAI,UAAU,EAAE,gBAAgB,KAAM,WAAW,EAAE,cAAc,kBAAkB,EAC/F,UAAS,KAAK,UAAY,QAAQ,UACxC,OAAS,MAAO,CACd,QAAQ,MAAM,KAAK,CACrB,CACF,CAEA,SAAS,mBAAmB,UAAW,aAAc,aAAc,OAAQ,CACzE,MAAM,IAAM,WAAW,YAAY,EACnC,GAAI,CAAC,IAAK,MAAO,GACjB,MAAM,MAAQ,OAAO,eAAiB,GAChC,SAAW,OAAO,sBAAwB,sDAC1C,QAAU,uBAAyB,QAAQ,SAAS,EAE1D,MAAO,CACL,2HACA,mBAAqB,gBAAgB,QAAQ,EAAI,IACjD,8BACA,uBAAyB,gBAAgB,cAAgB,EAAE,EAAI,IAC/D,sBAAwB,gBAAgB,GAAG,EAAI,IAC/C,IACA,MACI,4CAA8C,gBAAgB,KAAK,EAAI,4JACvE,CACA,2MACA,iDACA,sFACA,sBACA,cAAgB,QAAU,8GAC1B,oCAAsC,QAAU,0BAChD,SACA,+FACA,QACF,EAAE,KAAK,EAAE,EACX,iEACA,SACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,YAAY,MAAO,MAAO,SAAU,OAAQ,QAAS,CAC5D,MAAM,WAAa,mBAAmB,KAAK,EACrC,YAAc,OAAO,QAAQ,WAAW,GAAK,OAAO,OAAO,WAAW,GAAK,GAE3E,QADiB,SAAW,QAAQ,KAAO,cACd,EAC/B,wCACA,kBACE,OAAS,WAAW,OACtB,YAAc,gBAAgB,WAAW,MAAM,EAAI,YAAc,gBAAgB,cAAc,MAAM,CAAC,EAAI,IAC1G,GAEJ,MAAO,CACL,4BACA,6DACA,aAAe,gBAAgB,WAAW,GAAG,EAAI,IAAM,OAAS,kCAAoC,MAAQ,2CAA6C,QAAU,IACnK,SACA,QACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,mBAAmB,MAAO,CACjC,IAAI,OACJ,GAAI,CACF,OAAS,IAAI,IAAI,MAAO,OAAO,SAAS,MAAM,CAChD,MAAgB,CACd,MAAO,CAAE,IAAK,MAAO,OAAQ,EAAG,CAClC,CAMA,GAAI,EAJS,OAAO,SAAS,YAAY,IACX,mBACzB,OAAO,SAAS,QAAQ,YAAY,IAAM,IAC1C,OAAO,SAAS,QAAQ,WAAW,IAAM,IAC3B,MAAO,CAAE,IAAK,MAAO,OAAQ,EAAG,EAEnD,MAAM,OAAS,CAAC,IAAK,IAAK,IAAK,GAAG,EAClC,MAAO,CACL,IAAK,eAAe,OAAQ,GAAG,EAC/B,OAAQ,OAAO,IAAI,SAAU,MAAO,CAClC,OAAO,eAAe,OAAQ,KAAK,EAAI,IAAM,MAAQ,GACvD,CAAC,EAAE,KAAK,IAAI,CACd,CACF,CAEA,SAAS,eAAe,UAAW,MAAO,CACxC,MAAM,UAAY,IAAI,IAAI,UAAU,SAAS,CAAC,EAC9C,iBAAU,aAAa,IAAI,QAAS,OAAO,KAAK,CAAC,EAC1C,UAAU,SAAS,CAC5B,CAEA,SAAS,cAAc,OAAQ,CAC7B,MAAM,eAAiB,KAAK,IAAI,EAAG,OAAO,OAAO,cAAc,GAAK,CAAC,EAC/D,cAAgB,KAAK,IAAI,EAAG,OAAO,OAAO,aAAa,GAAK,CAAC,EACnE,MAAO,6CAA+C,eAAiB,2EAEtC,cAAgB,GACnD,CAEA,SAAS,YAAY,UAAW,UAAW,OAAQ,UAAW,CAC5D,MAAM,QAAU,iBAAmB,UAAY,IAAM,UAC/C,OAAS,YAAc,MAAQ,sBAAwB,GAC7D,OAAK,UAGD,OACK,uCAAyC,OAAS,cAAgB,QAAU,sEAE9E,uCAAyC,OAAS,UALhD,uCAAyC,OAAS,cAAgB,QAAU,wEAMvF,CAEA,SAAS,YAAY,MAAO,UAAW,OAAQ,cAAe,CAC5D,GAAI,QAAU,KAAM,MAAO,GAE3B,GAAI,eAAiB,QAAU,EAC7B,MAAO,CACL,sBACA,iCACA,+IACA,SACA,QACF,EAAE,KAAK,EAAE,EAGX,MAAM,KAAO,YAAc,MAAQ,UAAY,MAC/C,MAAO,CACL,qBAAuB,KAAO,kBAAoB,IAAM,KACxD,iCACA,8HAAgI,YAAY,MAAO,MAAM,EAAI,gBAC7J,KACI,sIAAwI,YAAY,MAAO,MAAM,EAAI,4GAA8G,YAAY,UAAW,MAAM,EAAI,oBACpT,GACJ,SACA,QACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,aAAa,IAAK,QAAS,MAAO,CACzC,GAAI,CAAC,QAAS,OAEd,MAAM,iBAAmB,CAAC,MAAM,mBAChC,IAAI,MAAM,OAAS,MAAM,YAAY,OAAS,GAAK,MAAM,YAAY,OAAS,GAAK,MAAM,aAAa,OAAS,GAAK,MAAM,UAAU,OAAS,EAC7I,MAAM,aAAe,gBAAgB,KAAK,EACpC,cAAgB,iBAAiB,MAAM,MAAM,EAC7C,YAAc,OAAO,KAAK,QAAQ,QAAU,CAAC,CAAC,EAAE,OAAS,QAAQ,OAAS,qBAAqB,QAAQ,MAAQ,CAAC,CAAC,EAEnH,EADoB,MAAM,YAAY,IAAI,sBAAsB,GAAK,IAAI,KACxD,MAAQ,aAAe,YAAY,sBAAsB,IAC5E,MAAM,kBAAoB,OAAO,OAAO,CAAC,EAAG,YAAY,sBAAsB,CAAC,GAEjF,0BAA0B,MAAO,WAAW,EAE5C,MAAM,cAAgB,MAAM,OAAO,mBAAqB,MACxD,IAAI,OAAO,WAAa,iBAAmB,wBAAwB,KAAK,EAAI,KAAO,cAAgB,qBAAqB,KAAK,EAAI,IAAM,iBAAiB,KAAK,EAAI,cAAc,IAAI,SAAU,MAAO,CAClM,MAAM,OAAS,aAAe,YAAY,MAAM,SAAS,EAAI,YAAY,MAAM,SAAS,EAAI,CAAC,EACvF,SAAW,MAAM,YAAY,IAAI,MAAM,SAAS,GAAK,IAAI,IACzD,OAAS,aAAa,IAAI,MAAM,SAAS,GAAK,IAAI,IAClD,MAAQ,cAAc,MAAM,UAAW,OAAQ,SAAU,OAAQ,KAAK,EACtE,iBAAmB,4BAA4B,IAAI,MAAM,SAAS,EAClE,OAAS,CAAC,kBAAoB,MAAM,aAAa,IAAI,MAAM,SAAS,GAAK,SAAS,KAAO,GAAK,OAAO,KAAO,EAC5G,SAAW,MAAM,eAAe,IAAI,MAAM,SAAS,EACnD,eAAiB,uBAAuB,KAAK,EAC7C,aAAe,SAAW,MAAQ,MAAM,MAAM,EAAG,cAAc,EAC/D,UAAY,MAAM,OAAS,eAEjC,OAAK,MAAM,OAEJ,CACL,0CAA4C,OAAS,GAAK,iBAAmB,KAC7E,iBACI,iFAAmF,gBAAgB,MAAM,SAAS,EAAI,qBAAuB,OAAS,OAAS,SAAW,WAAa,WAAW,MAAM,KAAK,EAAI,iBAAmB,OAAS,IAAM,KAAO,mBAC1P,4CAA8C,WAAW,MAAM,KAAK,EAAI,QAC5E,OAAS,CACT,2CACA,aACG,IAAI,SAAU,KAAM,CACnB,MAAM,SAAW,OAAO,IAAI,KAAK,KAAK,EAChC,QAAU,SAAS,IAAI,KAAK,KAAK,GAAK,SAAW,WAAa,GAC9D,SAAW,SAAW,YAAc,GAC1C,MAAO,CACL,OACA,+CACA,gDAAkD,gBAAgB,MAAM,SAAS,EAAI,YAAc,gBAAgB,KAAK,KAAK,EAAI,IAAM,QAAU,SAAW,IAC5J,SAAW,WAAW,KAAK,OAAS,KAAK,KAAK,EAAI,UAClD,8CAAgD,KAAK,MAAQ,UAC7D,WACA,OACF,EAAE,KAAK,EAAE,CACX,CAAC,EACA,KAAK,EAAE,EACV,QACA,UACI,+EAAiF,gBAAgB,MAAM,SAAS,EAAI,MAAQ,SAAW,YAAc,aAAe,YACpK,EACJ,EAAE,KAAK,EAAE,EAAI,GACb,YACF,EAAE,KAAK,EAAE,EA/BiB,EAgC5B,CAAC,EAAE,KAAK,EAAE,CACZ,CAEA,SAAS,uBAAuB,MAAO,CACrC,OAAO,uBAAuB,MAAM,SAAS,GAAK,qBACpD,CAEA,SAAS,wBAAwB,MAAO,CACtC,MAAO,CACL,2CACA,6DACA,2CACA,qBAAqB,IAAI,SAAU,KAAM,CACvC,MAAM,QAAU,MAAM,aAAa,IAAI,KAAK,KAAK,EAAI,WAAa,GAClE,MAAO,CACL,OACA,0FACA,mDAAqD,gBAAgB,KAAK,KAAK,EAAI,IAAM,QAAU,IACnG,SAAW,WAAW,KAAK,KAAK,EAAI,UACpC,WACA,OACF,EAAE,KAAK,EAAE,CACX,CAAC,EAAE,KAAK,EAAE,EACV,QACA,YACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,qBAAqB,MAAO,CACnC,MAAO,CACL,2CACA,0DACA,2CACA,CACE,CAAE,MAAO,MAAO,MAAO,KAAM,EAC7B,CAAE,MAAO,OAAQ,MAAO,MAAO,CACjC,EAAE,IAAI,SAAU,KAAM,CACpB,MAAM,QAAU,MAAM,UAAU,IAAI,KAAK,KAAK,EAAI,WAAa,GAC/D,MAAO,CACL,OACA,0FACA,gDAAkD,gBAAgB,KAAK,KAAK,EAAI,IAAM,QAAU,IAChG,SAAW,WAAW,KAAK,KAAK,EAAI,UACpC,WACA,OACF,EAAE,KAAK,EAAE,CACX,CAAC,EAAE,KAAK,EAAE,EACV,QACA,YACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,iBAAiB,OAAQ,CAChC,OAAO,OAAO,OAAO,SAAU,MAAO,CACpC,OAAO,MAAM,YAAc,qBAAuB,mBAAmB,IAAI,OAAO,gBAAgB,CAClG,CAAC,CACH,CAEA,SAAS,gBAAiB,CACxB,MAAM,KAAO,OAAO,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE,IAAI,MAAM,CAAC,EAC3E,OAAO,OAAO,SAAS,IAAI,GAAK,KAAO,EAAI,KAAK,MAAM,IAAI,EAAI,EAAI,CACpE,CAEA,SAAS,cAAc,KAAM,QAAS,CACpC,GAAI,CAAC,OAAO,SAAW,CAAC,OAAO,QAAQ,UAAW,OAElD,MAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EAClC,WAAa,OAAO,IAAI,EAAI,EAC9B,WAAa,EACf,IAAI,aAAa,IAAI,OAAQ,OAAO,UAAU,CAAC,EAE/C,IAAI,aAAa,OAAO,MAAM,EAGhC,MAAM,QAAU,IAAI,SAAW,IAAI,OAAS,IAAI,KAC1C,WAAa,OAAO,SAAS,SAAW,OAAO,SAAS,OAAS,OAAO,SAAS,KACnF,UAAY,aAEZ,QACF,OAAO,QAAQ,aAAa,CAAE,YAAa,IAAK,EAAG,GAAI,OAAO,EAE9D,OAAO,QAAQ,UAAU,CAAE,YAAa,IAAK,EAAG,GAAI,OAAO,EAE/D,CAEA,SAAS,iBAAiB,MAAO,CAC/B,MAAO,CACL,2CACA,sDACA,2CACA,aAAa,IAAI,SAAU,MAAO,MAAO,CACvC,MAAM,QAAU,MAAM,YAAY,IAAI,OAAO,KAAK,CAAC,EAAI,WAAa,GACpE,MAAO,CACL,OACA,mFACA,kDAAoD,MAAQ,IAAM,QAAU,IAC5E,SAAW,WAAW,MAAM,KAAK,EAAI,UACrC,WACA,OACF,EAAE,KAAK,EAAE,CACX,CAAC,EAAE,KAAK,EAAE,EACV,QACA,YACF,EAAE,KAAK,EAAE,CACX,CAEA,SAAS,qBAAqB,KAAM,CAClC,MAAM,OAAS,CAAC,EAEhB,cAAO,QAAQ,SAAU,MAAO,CAC9B,OAAO,MAAM,SAAS,EAAI,CAAC,CAC7B,CAAC,EAED,KAAK,QAAQ,SAAU,IAAK,CAC1B,kBAAkB,OAAQ,oBAAqB,UAAU,IAAK,CAAC,OAAQ,SAAU,OAAO,CAAC,CAAC,EAC1F,kBAAkB,OAAQ,oBAAqB,UAAU,IAAK,CAAC,OAAQ,SAAU,OAAO,CAAC,CAAC,EAC1F,kBAAkB,OAAQ,uBAAwB,IAAI,eAAiB,UAAU,IAAK,CAAC,OAAQ,SAAU,cAAc,CAAC,CAAC,EACzH,kBAAkB,OAAQ,2BAA4B,UAAU,IAAK,CAAC,OAAQ,SAAU,QAAQ,CAAC,CAAC,EAClG,kBAAkB,OAAQ,2BAA4B,UAAU,IAAK,CAAC,OAAQ,SAAU,cAAc,CAAC,CAAC,CAC1G,CAAC,EAEM,MACT,CAEA,SAAS,kBAAkB,OAAQ,UAAW,MAAO,CAEnD,GADI,OAAU,MAA+B,QAAU,IACnD,CAAC,OAAO,SAAS,EAAG,QAET,MAAM,QAAQ,KAAK,EAAI,MAAQ,CAAC,KAAK,GAC7C,QAAQ,SAAU,KAAM,CAC7B,MAAM,MAAQ,OAAO,IAAI,EACzB,OAAO,SAAS,EAAE,KAAK,GAAK,OAAO,SAAS,EAAE,KAAK,GAAK,GAAK,CAC/D,CAAC,CACH,CAEA,SAAS,0BAA0B,MAAO,YAAa,CACrD,wBAAwB,QAAQ,SAAU,UAAW,CACnD,MAAM,SAAW,MAAM,YAAY,IAAI,SAAS,GAAK,IAAI,IACnD,OAAS,aAAe,YAAY,SAAS,EAAI,YAAY,SAAS,EAAI,KAC3E,SAED,CAAC,SAAS,MAAQ,CAAC,MAAM,kBAAkB,SAAS,KACtD,MAAM,kBAAkB,SAAS,EAAI,OAAO,OAAO,CAAC,EAAG,MAAM,EAEjE,CAAC,CACH,CAEA,SAAS,cAAc,UAAW,OAAQ,SAAU,OAAQ,MAAO,CACjE,OAAI,YAAc,uBACT,uBAAuB,OAAQ,SAAU,OAAQ,KAAK,EAGxD,iBAAiB,2BAA2B,UAAW,OAAQ,KAAK,EAAG,SAAU,OAAQ,SAAS,CAC3G,CAEA,SAAS,2BAA2B,UAAW,OAAQ,MAAO,CAC5D,OAAK,wBAAwB,IAAI,SAAS,EACnC,OAAO,OAAO,CAAC,EAAG,MAAM,kBAAkB,SAAS,GAAK,CAAC,EAAG,QAAU,CAAC,CAAC,EAD3B,MAEtD,CAEA,SAAS,uBAAuB,OAAQ,SAAU,OAAQ,MAAO,CAC/D,MAAM,aAAe,OAAO,OAAO,CAAC,EAAG,MAAM,mBAAqB,CAAC,EAAG,QAAU,CAAC,CAAC,EAC5E,MAAQ,cAAc,IAAI,SAAU,MAAO,CAC/C,MAAM,YAAc,OAAQ,QAAU,OAAO,MAAM,KAAK,GAAM,aAAa,MAAM,KAAK,GAAK,CAAC,EACtF,QAAU,YAAc,CAAC,EAAI,sBAAsB,MAAO,YAAY,EACtE,MAAQ,aAAe,QAAQ,OAAO,SAAU,IAAK,MAAO,CAChE,OAAO,IAAM,OAAQ,QAAU,OAAO,KAAK,GAAM,aAAa,KAAK,GAAK,CAAC,CAC3E,EAAG,CAAC,EACJ,MAAO,CACL,MAAO,MAAM,MACb,MAAO,MAAM,MACb,MACA,UAAW,QAAU,SAAS,IAAI,MAAM,KAAK,EAAI,EAAI,EACvD,CACF,CAAC,EAAE,OAAO,SAAU,KAAM,CACxB,OAAO,KAAK,UAAY,GAAK,SAAS,IAAI,KAAK,KAAK,CACtD,CAAC,EAED,gBAAS,QAAQ,SAAU,MAAO,CAC3B,MAAM,KAAK,SAAU,KAAM,CAAE,OAAO,KAAK,QAAU,KAAO,CAAC,GAC9D,MAAM,QAAQ,CAAE,MAAc,MAAO,iBAAiB,KAAK,EAAG,MAAO,EAAG,UAAW,CAAE,CAAC,CAE1F,CAAC,EAED,OAAO,QAAQ,SAAU,MAAO,CACzB,MAAM,KAAK,SAAU,KAAM,CAAE,OAAO,KAAK,QAAU,KAAO,CAAC,GAC9D,MAAM,QAAQ,CAAE,MAAc,MAAO,iBAAiB,KAAK,EAAG,MAAO,EAAG,UAAW,CAAE,CAAC,CAE1F,CAAC,EAEM,MAAM,KAAK,SAAU,EAAG,EAAG,CAChC,OAAO,EAAE,UAAY,EAAE,WAAa,EAAE,MAAM,cAAc,EAAE,KAAK,CACnE,CAAC,CACH,CAEA,SAAS,iBAAiB,MAAO,CAC/B,MAAM,MAAQ,cAAc,KAAK,SAAU,KAAM,CAC/C,OAAO,KAAK,QAAU,OAAS,KAAK,QAAU,KAChD,CAAC,EACD,OAAO,MAAQ,MAAM,MAAQ,KAC/B,CAEA,SAAS,eAAe,MAAO,MAAO,CACpC,MAAM,aAAe,MAAM,QAAQ,sBAAuB,MAAM,EAEhE,OADgB,IAAI,OAAO,qBAAuB,aAAe,aAAc,GAAG,EACnE,KAAK,KAAK,CAC3B,CAEA,SAAS,sBAAsB,MAAO,OAAQ,CAC5C,OAAO,OAAO,KAAK,QAAU,CAAC,CAAC,EAAE,OAAO,SAAU,MAAO,CACvD,OAAO,MAAM,KAAK,KAAK,CACzB,CAAC,CACH,CAEA,SAAS,gBAAgB,MAAO,CAC9B,MAAM,OAAS,IAAI,IAEnB,aAAM,cAAc,KAAK,EAAE,QAAQ,SAAU,OAAQ,CACnD,MAAM,QAAU,OAAO,QAAQ,GAAG,EAClC,GAAI,UAAY,GAAI,OAEpB,MAAM,UAAY,OAAO,MAAM,EAAG,OAAO,EACnC,MAAQ,OAAO,MAAM,QAAU,CAAC,EAChC,OAAS,OAAO,IAAI,SAAS,GAAK,IAAI,IAC5C,OAAO,IAAI,KAAK,EAChB,OAAO,IAAI,UAAW,MAAM,CAC9B,CAAC,EAEM,MACT,CAEA,SAAS,iBAAiB,OAAQ,SAAU,OAAQ,UAAW,CAC7D,MAAM,MAAQ,OAAO,KAAK,MAAM,EAC7B,IAAI,SAAU,MAAO,CACpB,MAAO,CAAE,MAAc,MAAO,OAAO,KAAK,CAAE,CAC9C,CAAC,EACA,KAAK,SAAU,EAAG,EAAG,CACpB,OAAI,YAAc,2BACT,OAAO,EAAE,KAAK,EAAI,OAAO,EAAE,KAAK,EAGlC,EAAE,MAAQ,EAAE,OAAS,EAAE,MAAM,cAAc,EAAE,KAAK,CAC3D,CAAC,EAEH,gBAAS,QAAQ,SAAU,MAAO,CAC3B,MAAM,KAAK,SAAU,KAAM,CAAE,OAAO,KAAK,QAAU,KAAO,CAAC,GAC9D,MAAM,QAAQ,CAAE,MAAc,MAAO,CAAE,CAAC,CAE5C,CAAC,EAED,OAAO,QAAQ,SAAU,MAAO,CACzB,MAAM,KAAK,SAAU,KAAM,CAAE,OAAO,KAAK,QAAU,KAAO,CAAC,GAC9D,MAAM,QAAQ,CAAE,MAAc,MAAO,CAAE,CAAC,CAE5C,CAAC,EAEM,KACT,CAEA,SAAS,wBAAwB,QAAS,CACxC,MAAM,SAAW,SAAS,cAAc,UAAU,EAClD,GAAI,QAAQ,SAAW,EAAG,OAAO,SAAS,QAE1C,MAAM,KAAO,QAAQ,KACf,KAAO,QAAQ,QAAU,EACzB,MAAQ,CAAC,EACT,MAAQ,KAAK,IAAI,EAAG,KAAO,CAAC,EAC5B,IAAM,KAAK,IAAI,KAAM,KAAO,CAAC,EAE/B,KAAO,GACT,MAAM,KAAK,0CAA4C,gBAAgB,WAAW,KAAO,CAAC,CAAC,EAAI,4BAA8B,KAAO,GAAK,2CAA2C,EAEtL,QAAS,EAAI,MAAO,GAAK,IAAK,GAAK,EACjC,MAAM,KAAK,0CAA4C,gBAAgB,WAAW,CAAC,CAAC,EAAI,gBAAkB,EAAI,uBAAyB,EAAI,IAAM,IAAM,KAAO,iBAAmB,IAAM,KAAO,IAAM,KAAO,uBAAyB,IAAM,KAAO,EAAI,GAAK,MAAM,EAElQ,OAAI,KAAO,MACT,MAAM,KAAK,0CAA4C,gBAAgB,WAAW,KAAO,CAAC,CAAC,EAAI,4BAA8B,KAAO,GAAK,mCAAmC,EAG9K,SAAS,UAAY,MAAM,KAAK,EAAE,EAC3B,SAAS,OAClB,CAEA,SAAS,iBAAiB,IAAK,SAAU,CACvC,IAAI,WAAW,gBAAgB,QAAQ,EACvC,IAAI,WAAW,QAAQ,eAAiB,OAC1C,CAEA,SAAS,WAAW,KAAM,CACxB,MAAM,IAAM,IAAI,IAAI,OAAO,SAAS,IAAI,EAClC,WAAa,OAAO,IAAI,EAAI,EAClC,OAAI,WAAa,EACf,IAAI,aAAa,IAAI,OAAQ,OAAO,UAAU,CAAC,EAE/C,IAAI,aAAa,OAAO,MAAM,EAEzB,IAAI,SAAW,IAAI,OAAS,IAAI,IACzC,CAEA,SAAS,4BAA4B,MAAO,KAAM,CAChD,MAAM,QAAU,KAAK,aAAa,QAAQ,GAAK,IAAI,YAAY,EAC/D,MAAO,CAAC,MAAM,kBACT,MAAM,SAAW,GACjB,CAAC,MAAM,SACP,CAAC,MAAM,SACP,CAAC,MAAM,UACP,CAAC,MAAM,SACN,CAAC,QAAU,SAAW,UACvB,CAAC,KAAK,aAAa,UAAU,CACpC,CAEA,SAAS,YAAY,IAAK,CACxB,MAAM,MAAQ,IAAI,eAAiB,IAAI,MACvC,OAAK,MACD,OAAO,OAAU,SAAiB,MAClC,MAAM,IAAY,MAAM,IACxB,MAAM,IAAY,MAAM,IACrB,GAJY,EAKrB,CAEA,SAAS,oBAAoB,KAAM,CAC7B,CAAC,OAAO,iBAAmB,OAAO,OAAO,gBAAgB,aAAgB,YAC7E,OAAO,gBAAgB,YAAY,MAAQ,QAAQ,CACrD,CAEA,SAAS,uBAAuB,KAAM,CAChC,CAAC,OAAO,2BAA6B,OAAO,OAAO,0BAA0B,MAAS,YAC1F,OAAO,0BAA0B,KAAK,MAAQ,QAAQ,CACxD,CAEA,SAAS,gBAAgB,KAAM,CACzB,CAAC,OAAO,YAAc,OAAO,OAAO,WAAW,uBAA0B,YAC7E,OAAO,WAAW,sBAAsB,MAAQ,QAAQ,CAC1D,CAEA,SAAS,eAAe,IAAK,CAC3B,MAAM,MAAQ,UAAU,IAAK,CAAC,OAAQ,SAAU,OAAO,CAAC,GAAK,IAAI,aACjE,OAAK,OACG,MAAM,QAAQ,KAAK,EAAI,MAAQ,CAAC,KAAK,GAAG,OAAO,SAAU,MAAO,CACtE,OAAO,OAAO,OAAU,UAAY,MAAM,OAAS,CACrD,CAAC,EAHkB,CAAC,CAItB,CAEA,SAAS,aAAa,OAAQ,CAC5B,MAAM,GAAK,kBAAkB,EAC7B,GAAI,GAAC,IAAM,CAAC,OAAO,OAAS,CAAC,OAAO,cAEpC,GAAI,CACF,GAAG,OAAQ,CACT,MAAO,OAAO,MACd,OAAQ,OAAO,aACf,UAAW,EACb,CAAC,CACH,MAAgB,CAEhB,CACF,CAEA,SAAS,kBAAkB,KAAM,OAAQ,MAAO,CAC9C,MAAM,SAAW,KAAK,QAAQ,SACxB,UAAY,KAAK,QAAQ,WAAa,aAAa,OAAQ,KAAK,EAChE,QAAU,KAAK,QAAQ,QACvB,SAAW,OAAO,KAAK,QAAQ,QAAQ,EAE7C,kCAAkC,IAAI,EAEtC,SACE,0BACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,WAAY,KAAK,QAAQ,UACzB,cAAe,KAAK,QAAQ,aAC5B,UAAW,SACX,WAAY,UACZ,QACF,CAAC,CACH,EAEA,wBAAwB,kBAAmB,UAAW,SAAU,QAAS,QAAQ,CACnF,CAEA,SAAS,+BAA+B,KAAM,CACvC,MACL,KAAK,iBAAiB,6BAA6B,EAAE,QAAQ,iCAAiC,CAChG,CAEA,SAAS,kCAAkC,QAAS,CAC9C,CAAC,SAAW,CAAC,QAAQ,SACzB,uBACE,QAAQ,QAAQ,QAChB,QAAQ,QAAQ,SAChB,QAAQ,QAAQ,UAChB,QAAQ,QAAQ,SAClB,CACF,CAEA,SAAS,uBAAuB,QAAS,UAAW,UAAW,UAAW,CACxE,GAAI,CAAC,SAAW,CAAC,WAAa,CAAC,UAAW,OAE1C,MAAM,UAAY,CAChB,UAAW,gBACX,MAAO,UACP,QAAS,QACT,UAAW,CAAC,SAAS,EACrB,SACF,EAEA,GAAI,CACF,MAAM,gBAAkB,oCAClB,mBAAqB,KAAK,MAAM,aAAa,QAAQ,eAAe,GAAK,IAAI,EAC7E,kBAAoB,MAAM,QAAQ,kBAAkB,EACtD,mBAAmB,OAAO,SAAU,KAAM,CACxC,MAAO,EACL,MACA,KAAK,QAAU,WACf,MAAM,QAAQ,KAAK,SAAS,GAC5B,KAAK,UAAU,SAAS,SAAS,EAErC,CAAC,EACD,CAAC,EAEL,kBAAkB,KAAK,SAAS,EAChC,aAAa,QAAQ,gBAAiB,KAAK,UAAU,iBAAiB,CAAC,CACzE,MAAgB,CAEhB,CACF,CAEA,SAAS,oBAAoB,OAAQ,OAAQ,MAAO,CAClD,MAAM,KAAO,OAAO,QAAQ,eAAe,EAAI,OAAO,QAAQ,eAAe,EAAE,cAAc,6BAA6B,EAAI,KACxH,SAAW,KAAO,KAAK,QAAQ,SAAW,GAC1C,UAAY,KAAO,KAAK,QAAQ,UAAY,aAAa,OAAQ,KAAK,EACtE,QAAU,KAAO,KAAK,QAAQ,QAAU,GACxC,SAAW,KAAO,OAAO,KAAK,QAAQ,QAAQ,EAAI,OAExD,SACE,6BACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,WAAY,OAAO,QAAQ,UAC3B,UAAW,SACX,WAAY,UACZ,QACF,CAAC,CACH,EAEI,UACF,wBAAwB,qBAAsB,UAAW,SAAU,QAAS,QAAQ,CAExF,CAEA,SAAS,iBAAiB,OAAQ,MAAO,UAAW,MAAO,QAAS,CAUlE,GATA,SACE,yBACA,OAAO,OAAO,gBAAgB,OAAQ,KAAK,EAAG,CAC5C,iBAAkB,UAClB,aAAc,MACd,OACF,CAAC,CACH,EAEI,CAAC,QAAS,OAEd,MAAM,GAAK,kBAAkB,EAC7B,GAAK,GAEL,GAAI,CACF,GAAG,iBAAkB,CACnB,UAAW,iBACX,MAAO,aAAa,OAAQ,KAAK,EACjC,QAAS,CAAC,UAAY,IAAM,KAAK,CACnC,CAAC,CACH,MAAgB,CAEhB,CACF,CAEA,SAAS,wBAAwB,UAAW,UAAW,SAAU,QAAS,SAAU,CAClF,MAAM,GAAK,kBAAkB,EAC7B,GAAI,GAAC,IAAM,CAAC,UAAY,CAAC,WAEzB,GAAI,CACE,QACF,GAAG,8BAA+B,CAChC,UACA,MAAO,UACP,UAAW,CAAC,QAAQ,EACpB,UAAW,CAAC,UAAY,CAAC,EACzB,QAAS,OACX,CAAC,EAED,GAAG,mBAAoB,CACrB,UACA,MAAO,UACP,UAAW,CAAC,QAAQ,CACtB,CAAC,CAEL,MAAgB,CAEhB,CACF,CAEA,SAAS,SAAS,UAAW,OAAQ,CACnC,GAAI,OAAO,OAAO,MAAS,WAAY,CACrC,OAAO,KAAK,QAAS,UAAW,MAAM,EACtC,MACF,CAEA,OAAO,UAAY,OAAO,WAAa,CAAC,EACxC,OAAO,UAAU,KAAK,OAAO,OAAO,CAAE,MAAO,SAAU,EAAG,MAAM,CAAC,CACnE,CAEA,SAAS,gBAAgB,OAAQ,MAAO,CACtC,MAAO,CACL,kBAAmB,OAAO,kBAAoB,GAC9C,iBAAkB,OAAO,iBAAmB,GAC5C,YAAa,OAAO,YAAc,GAClC,aAAc,OAAO,aAAe,OAAO,SAAS,SACpD,KAAM,MAAM,MAAQ,GACpB,MAAO,MAAM,MAAQ,GAAK,CAC5B,CACF,CAEA,SAAS,mBAAoB,CAC3B,OAAO,OAAO,OAAO,IAAO,WAAa,OAAO,GAAK,IACvD,CAEA,SAAS,UAAU,OAAQ,KAAM,CAC/B,OAAO,KAAK,OAAO,SAAU,MAAO,IAAK,CACvC,OAAO,OAAS,MAAM,GAAG,IAAM,OAAY,MAAM,GAAG,EAAI,MAC1D,EAAG,MAAM,CACX,CAEA,SAAS,gBAAgB,MAAO,CAC9B,GAAI,OAAU,MAA+B,QAAU,GAAI,OAAO,KAClE,MAAM,OAAS,OAAO,KAAK,EAC3B,OAAO,OAAO,SAAS,MAAM,EAAI,OAAS,IAC5C,CAEA,SAAS,YAAY,MAAO,OAAQ,CAClC,GAAI,CACF,OAAO,IAAI,KAAK,aAAa,OAAW,CACtC,MAAO,WACP,SAAU,OAAO,cAAgB,KACnC,CAAC,EAAE,OAAO,KAAK,CACjB,MAAgB,CACd,MAAO,IAAM,MAAM,QAAQ,CAAC,CAC9B,CACF,CAEA,SAAS,UAAU,IAAK,QAAS,CAC3B,IAAI,QACN,IAAI,MAAM,OAAS,GACnB,IAAI,MAAM,YAAc,SAEtB,IAAI,QAAO,IAAI,MAAM,YAAc,iCACzC,CAEA,SAAS,UAAU,IAAK,CACjB,IAAI,QACT,IAAI,MAAM,OAAS,GACnB,IAAI,MAAM,YAAc,GAC1B,CAEA,SAAS,WAAW,MAAO,CACzB,OAAO,OAAO,KAAK,EAAE,QAAQ,WAAY,SAAU,KAAM,CACvD,MAAO,CACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,OACP,EAAE,IAAI,CACR,CAAC,CACH,CAEA,SAAS,gBAAgB,MAAO,CAC9B,OAAO,WAAW,KAAK,CACzB,CAEA,SAAS,WAAW,MAAO,CACzB,MAAM,QAAU,OAAO,OAAS,EAAE,EAAE,KAAK,EACzC,GAAI,CAAC,QAAS,MAAO,GACrB,GAAI,QAAQ,QAAQ,wBAAwB,IAAM,EAAG,OAAO,QAC5D,MAAM,MAAQ,QAAQ,MAAM,UAAU,EAChC,UAAY,MAAQ,MAAM,CAAC,EAAI,QACrC,MAAO,QAAQ,KAAK,SAAS,EAAI,yBAA2B,UAAY,EAC1E,CAEA,SAAS,QAAQ,MAAO,CACtB,OAAO,OAAO,OAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,kBAAmB,GAAG,GAAK,MACvE,CAEI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoB,IAAI,EAElD,KAAK,CAET,GAAG",
  "names": ["index", "response"]
}
