{
  "version": 3,
  "sources": ["/cdn/shop/t/152/assets/optionsight-options.js?optionsight_revision=20260906-isolated-checkout-v3"],
  "sourcesContent": ["const OPTIONSIGHT_ALLOWED_RICH_TEXT_TAGS = new Set(['A', 'B', 'BR', 'EM', 'I', 'P', 'STRONG']);\nconst OPTIONSIGHT_PROGRESS_TTL_MS = 14 * 24 * 60 * 60 * 1000;\nconst OPTIONSIGHT_RETURN_POSITION_TTL_MS = 2 * 60 * 60 * 1000;\nconst OPTIONSIGHT_OPTION_HTML_ENTITIES = {\n  amp: '&',\n  apos: \"'\",\n  gt: '>',\n  lt: '<',\n  nbsp: ' ',\n  quot: '\"',\n};\n\nfunction decodeOptionSightOptionEntities(value) {\n  let decoded = String(value || '');\n\n  for (let pass = 0; pass < 5; pass += 1) {\n    const next = decoded.replace(/&(?:#x[0-9a-f]+|#\\d+|amp|apos|gt|lt|nbsp|quot);/gi, (entity) => {\n      const key = entity.slice(1, -1).toLowerCase();\n      if (Object.hasOwn(OPTIONSIGHT_OPTION_HTML_ENTITIES, key)) return OPTIONSIGHT_OPTION_HTML_ENTITIES[key];\n\n      const isHex = key.startsWith('#x');\n      const codePoint = Number.parseInt(key.slice(isHex ? 2 : 1), isHex ? 16 : 10);\n      if (!Number.isInteger(codePoint) || codePoint < 0 || codePoint > 0x10ffff) return entity;\n\n      try {\n        return String.fromCodePoint(codePoint);\n      } catch {\n        return entity;\n      }\n    });\n    if (next === decoded) break;\n    decoded = next;\n  }\n\n  return decoded;\n}\n\nfunction isOptionSightImagePreviewTarget(choice, target) {\n  return target instanceof Node && (choice.contains(target) || choice.control === target);\n}\n\nif (!customElements.get('optionsight-options')) {\n  customElements.define(\n    'optionsight-options',\n    class OptionSightOptions extends HTMLElement {\n      constructor() {\n        super();\n        this.inputs = [];\n        this.form = null;\n        this.loaded = false;\n        this.onChange = this.onChange.bind(this);\n        this.onClick = this.onClick.bind(this);\n        this.onDocumentClick = this.onDocumentClick.bind(this);\n        this.onDocumentKeydown = this.onDocumentKeydown.bind(this);\n        this.onWindowResize = this.onWindowResize.bind(this);\n        this.onPageShow = this.onPageShow.bind(this);\n        this.onProductFormChange = this.onProductFormChange.bind(this);\n        this.onSubmit = this.onSubmit.bind(this);\n        this.onDirectCheckout = this.onDirectCheckout.bind(this);\n        this.purchaseInFlight = false;\n        this.directCheckoutButton = null;\n      }\n\n      connectedCallback() {\n        if (!this.initialized) {\n          this.initialized = true;\n          this.grid = this.querySelector('[data-optionsight-grid]');\n          this.error = this.querySelector('[data-optionsight-error]');\n          this.priceSummary = this.querySelector('[data-optionsight-price-summary]');\n          this.priceSummaryAmount = this.querySelector('[data-optionsight-price-summary-amount]');\n          this.variantPricesMinor = this.readVariantPricesMinor();\n          this.variantPrices = new Map(\n            [...this.variantPricesMinor.entries()].map(([variantId, priceMinor]) => [variantId, priceMinor / 100])\n          );\n          this.setProductSubmitDisabled(true);\n          this.loadOptions();\n        }\n\n        this.bindLifecycleListeners();\n        if (this.loaded) {\n          this.bindProductForm();\n          this.update();\n        }\n      }\n\n      bindLifecycleListeners() {\n        this.addEventListener('change', this.onChange);\n        this.addEventListener('click', this.onClick);\n        document.addEventListener('click', this.onDocumentClick);\n        document.addEventListener('keydown', this.onDocumentKeydown);\n        window.addEventListener('resize', this.onWindowResize);\n        window.addEventListener('pageshow', this.onPageShow);\n        document.addEventListener('change', this.onProductFormChange);\n      }\n\n      disconnectedCallback() {\n        this.removeEventListener('change', this.onChange);\n        this.removeEventListener('click', this.onClick);\n        document.removeEventListener('click', this.onDocumentClick);\n        document.removeEventListener('keydown', this.onDocumentKeydown);\n        window.removeEventListener('resize', this.onWindowResize);\n        window.removeEventListener('pageshow', this.onPageShow);\n        document.removeEventListener('change', this.onProductFormChange);\n        this.form?.removeEventListener('submit', this.onSubmit, true);\n        this.directCheckoutButton?.removeEventListener('click', this.onDirectCheckout, true);\n        this.form = null;\n        this.directCheckoutButton = null;\n      }\n\n      async loadOptions() {\n        const urls = (this.dataset.optionConfigUrls || '')\n          .split(',')\n          .map((url) => url.trim())\n          .filter(Boolean);\n\n        if (!this.grid || urls.length === 0) {\n          this.renderLoadError();\n          return;\n        }\n\n        this.setAttribute('aria-busy', 'true');\n\n        try {\n          const configs = await Promise.all(\n            urls.map(async (url) => {\n              const response = await fetch(url);\n              if (!response.ok) throw new Error(`Failed to load ${url}`);\n              return response.json();\n            })\n          );\n          const rows = configs.flatMap((config) => config.rows || []);\n          this.validateProductOptionRows(rows);\n          this.renderRows(rows);\n          this.inputs = Array.from(this.querySelectorAll('[data-optionsight-input]'));\n          this.applyFreeFallbackDefaults();\n          const restoredProgress = this.restoreSavedProgress();\n          this.loaded = true;\n          this.removeAttribute('aria-busy');\n          if (this.isConnected) {\n            this.bindProductForm();\n            this.update();\n          }\n          if (restoredProgress?.returnPending) this.restoreReturnPosition(restoredProgress);\n          this.dispatchEvent(new CustomEvent('optionsight:ready', { bubbles: true }));\n        } catch (error) {\n          console.error(error);\n          this.emitIntegrityDiagnostic('configuration', 'blocked', {\n            reason: this.getIntegrityErrorReason(error, 'option_configuration_unavailable'),\n          });\n          this.renderLoadError();\n        }\n      }\n\n      renderLoadError() {\n        this.loaded = false;\n        this.removeAttribute('aria-busy');\n        this.classList.add('optionsight-options--error');\n        if (this.error) {\n          this.error.hidden = false;\n          this.error.textContent = 'Custom options are temporarily unavailable. Please refresh or contact support.';\n        }\n        this.setProductSubmitDisabled(true);\n      }\n\n      validateProductOptionRows(rows) {\n        const invalidProductRow = (Array.isArray(rows) ? rows : []).find((row) => {\n          if (this.getRowKind(row?.selector) !== 'product') return false;\n          const variantId = String(row.selector || '').replace(/^variant:/i, '').trim();\n          const numericVariantId = Number(variantId);\n          return (\n            !Number.isSafeInteger(numericVariantId)\n            || numericVariantId <= 0\n            || !this.variantPricesMinor?.has(variantId)\n          );\n        });\n        if (invalidProductRow) throw this.createIntegrityError('option_config_variant_unavailable');\n      }\n\n      renderRows(rows) {\n        const fragment = document.createDocumentFragment();\n        let activeRecord = null;\n        let optionIndex = 0;\n\n        const flushGroup = () => {\n          if (!activeRecord) return;\n          fragment.append(this.createOptionGroup(activeRecord));\n          activeRecord = null;\n        };\n\n        rows.forEach((row) => {\n          const kind = this.getRowKind(row.selector);\n          const label = String(row.label || '').trim();\n          const group = String(row.group || '').trim();\n\n          if (this.isChoiceKind(kind) && label) {\n            if (!activeRecord || activeRecord.group !== (group || 'Options')) {\n              flushGroup();\n              activeRecord = { group: group || 'Options', rows: [] };\n            }\n            activeRecord.rows.push({ row, kind, index: optionIndex });\n            optionIndex += 1;\n            return;\n          }\n\n          if (activeRecord && group && activeRecord.group === group) {\n            activeRecord.rows.push({ row, kind, index: optionIndex });\n            return;\n          }\n\n          flushGroup();\n          const display = this.createDisplayRow(row, kind);\n          if (display) fragment.append(display);\n        });\n\n        flushGroup();\n        this.grid.replaceChildren(fragment);\n      }\n\n      createDisplayRow(row, kind) {\n        const label = String(row.label || '').trim();\n        const displayLabel = String(row.displayLabel || label).trim();\n        if (kind === 'divider') {\n          const divider = document.createElement('hr');\n          divider.className = 'optionsight-options__divider';\n          return divider;\n        }\n        if (!label || !['heading', 'note'].includes(kind)) return null;\n\n        const element = document.createElement('div');\n        element.className = `optionsight-options__info optionsight-options__info--${kind}`;\n        if (kind === 'note') {\n          const muted = this.normalize(row.styleToken) === 'helptext';\n          element.classList.add(`optionsight-options__info--note-${muted ? 'muted' : 'body'}`);\n        }\n        this.setSafeHtml(element, row.richTextHtml || row.sectionIntroHtml, displayLabel);\n        return element;\n      }\n\n      createOptionGroup(record) {\n        const group = document.createElement('section');\n        const titleRow = document.createElement('div');\n        const label = document.createElement('span');\n        const groupPrice = document.createElement('span');\n        const selected = document.createElement('div');\n        const choices = document.createElement('div');\n        const conflictMessage = document.createElement('div');\n        const notes = document.createElement('div');\n        const body = document.createElement('div');\n        const choiceRows = record.rows.filter(({ kind, row }) => this.isChoiceKind(kind) && row.label);\n        const metadata = choiceRows[0]?.row || record.rows[0]?.row || {};\n        const presentation = this.getGroupPresentation(metadata, record.group);\n        const required = choiceRows.some(({ row }) => this.normalize(row.requiredMark) === 'required');\n        const groupId = `OptionSightGroup-${this.safeId(record.group)}-${this.safeId(metadata.elementId || '')}`;\n\n        group.className = `optionsight-options__group optionsight-options__group--${presentation}`;\n        group.dataset.optionsightOptionGroup = record.group;\n        group.dataset.optionsightPresentation = presentation;\n        group.setAttribute('data-optionsight-option-required', String(required));\n        if (metadata.elementId) group.dataset.optionElementId = metadata.elementId;\n        if (metadata.visibilityRule) group.dataset.optionVisibilityRule = JSON.stringify(metadata.visibilityRule);\n\n        titleRow.className = 'optionsight-options__group-heading';\n        label.className = 'optionsight-options__group-label';\n        label.textContent = metadata.groupDisplayLabel || this.getGroupTitle(record.group);\n        groupPrice.className = 'optionsight-options__group-price';\n        groupPrice.dataset.optionsightOptionGroupPrice = '';\n        groupPrice.hidden = true;\n        label.append(document.createTextNode(' '), groupPrice);\n        if (required) label.classList.add('is-required');\n\n        if (this.normalize(record.group) !== 'appearance & functions') titleRow.append(label);\n\n        selected.className = 'optionsight-options__selected-value';\n        selected.dataset.optionsightOptionSelected = record.group;\n\n        choices.className = `optionsight-options__choices optionsight-options__choices--${presentation}`;\n        choices.setAttribute('role', 'list');\n        conflictMessage.className = 'optionsight-options__conflict-message';\n        conflictMessage.id = `${groupId}-conflict`;\n        conflictMessage.dataset.optionsightConflictMessage = '';\n        conflictMessage.setAttribute('role', 'status');\n        conflictMessage.hidden = true;\n        notes.className = 'optionsight-options__notes';\n        body.className = 'optionsight-options__group-body';\n        body.id = groupId;\n        body.dataset.optionsightGroupBody = '';\n\n        record.rows.forEach(({ row, kind, index }) => {\n          if (this.isChoiceKind(kind) && row.label) {\n            choices.append(this.createOptionItem(row, kind, index, presentation));\n            return;\n          }\n\n          const note = this.createDisplayRow(row, kind);\n          if (note) notes.append(note);\n        });\n\n        body.append(choices, conflictMessage);\n        if (notes.children.length) body.append(notes);\n        group.append(titleRow, selected, body);\n        return group;\n      }\n\n      createOptionItem(row, kind, index, presentation) {\n        const item = document.createElement('div');\n        const input = document.createElement('input');\n        const label = document.createElement('label');\n        const choiceId = `OptionSight-${this.safeId(this.dataset.optionSetIds || 'set')}-${index}`;\n        const mode = this.normalize(row.mode) || (kind === 'product' ? 'multi' : 'single');\n        const hasImage = Boolean(row.imageUrl);\n        const elementType = this.normalize(row.elementType || row.styleToken);\n        const isButton = elementType === 'buttons' || (!hasImage && presentation === 'horizontal');\n        const separatesImageControl = hasImage && presentation === 'vertical';\n        const priceText = this.getOptionPriceText(row, kind);\n        const optionLabel = decodeOptionSightOptionEntities(row.label).trim();\n        const optionGroup = decodeOptionSightOptionEntities(row.group).trim();\n        const displayLabel = decodeOptionSightOptionEntities(row.displayLabel || optionLabel).trim();\n\n        item.className = [\n          'optionsight-options__item',\n          hasImage ? 'optionsight-options__item--image' : 'optionsight-options__item--text',\n          isButton ? 'optionsight-options__item--button' : '',\n          presentation === 'vertical' ? 'optionsight-options__item--vertical' : '',\n          separatesImageControl ? 'optionsight-options__item--separate-copy' : '',\n        ]\n          .filter(Boolean)\n          .join(' ');\n        item.setAttribute('role', 'listitem');\n\n        input.className = 'optionsight-options__input visually-hidden';\n        input.id = choiceId;\n        input.type = mode === 'multi' ? 'checkbox' : 'radio';\n        input.name = `optionsight-${this.safeId(this.dataset.optionSetIds || 'set')}-${this.safeId(row.elementId || row.group)}`;\n        input.checked = this.normalize(row.defaultMark) === 'default';\n        input.dataset.optionsightInput = '';\n        input.dataset.optionLabel = optionLabel;\n        input.dataset.optionDisplayLabel = displayLabel;\n        input.dataset.optionKind = kind;\n        input.dataset.optionVariantId = kind === 'product' ? String(row.selector || '').replace(/^variant:/i, '') : '';\n        input.dataset.optionGroup = optionGroup;\n        input.dataset.optionDisplayGroup = this.getGroupTitle(optionGroup);\n        input.dataset.optionMode = mode;\n        input.dataset.optionConflicts = decodeOptionSightOptionEntities(row.conflicts).trim();\n        input.dataset.optionImageUrl = String(row.imageUrl || '').trim();\n        input.dataset.optionPriceText = priceText;\n        input.dataset.optionDefaultMark = String(row.defaultMark || '').trim();\n        input.dataset.optionRequiredMark = String(row.requiredMark || '').trim();\n        input.dataset.optionElementId = String(row.elementId || '').trim();\n        input.dataset.optionElementType = String(row.elementType || '').trim();\n        input.dataset.optionLabelOnCart = decodeOptionSightOptionEntities(row.labelOnCart).trim();\n        input.dataset.optionDeselectNotAllowed = String(row.deselectNotAllowed || '').trim();\n\n        label.className = 'optionsight-options__choice';\n        label.htmlFor = choiceId;\n        label.setAttribute('aria-label', [displayLabel, this.formatPrice(priceText)].filter(Boolean).join(' '));\n\n        if (hasImage && this.normalize(row.tooltipStyle).includes('zoom')) {\n          label.setAttribute('aria-expanded', 'false');\n        }\n\n        if (hasImage) label.append(this.createSwatch(row, priceText, displayLabel));\n\n        let copy = null;\n        if (!hasImage || presentation === 'vertical' || isButton) {\n          copy = document.createElement('span');\n          const title = document.createElement('span');\n          copy.className = 'optionsight-options__choice-copy';\n          title.className = 'optionsight-options__choice-title';\n          title.textContent = displayLabel;\n          copy.append(title);\n\n          const price = this.formatPrice(priceText);\n          if (price) {\n            const priceElement = document.createElement('span');\n            priceElement.className = 'optionsight-options__price';\n            priceElement.textContent = price;\n            copy.append(document.createTextNode(' '), priceElement);\n          }\n\n          if (row.choiceHelpHtml || row.helpText) {\n            const help = document.createElement('span');\n            help.className = 'optionsight-options__choice-help';\n            this.setSafeHtml(help, row.choiceHelpHtml, row.helpText);\n            copy.append(help);\n          }\n          if (!separatesImageControl) label.append(copy);\n        }\n\n        item.append(input, label);\n        if (copy && separatesImageControl) item.append(copy);\n        return item;\n      }\n\n      applyFreeFallbackDefaults() {\n        this.querySelectorAll('[data-optionsight-option-group]').forEach((group) => {\n          const inputs = Array.from(group.querySelectorAll('[data-optionsight-input]'));\n          if (inputs.length === 0 || inputs.some((input) => input.checked)) return;\n\n          const firstInput = inputs[0];\n          if (this.parsePriceAmount(firstInput.dataset.optionPriceText) > 0) return;\n\n          firstInput.checked = true;\n          firstInput.dataset.optionDefaultSource = 'free-fallback';\n        });\n      }\n\n      createSwatch(row, priceText, displayLabel) {\n        const swatch = document.createElement('span');\n        const image = document.createElement('img');\n        const tooltip = document.createElement('span');\n        const tooltipTitle = document.createElement('span');\n        const tooltipImage = document.createElement('img');\n        const [swatchWidth, swatchHeight] = this.parseDimensions(row.swatchSize, 70, 70);\n        const [tooltipWidth, tooltipHeight] = this.parseDimensions(row.tooltipImageSize, 150, 150);\n\n        swatch.className = 'optionsight-options__swatch';\n        swatch.style.setProperty('--optionsight-swatch-width', `${swatchWidth}px`);\n        swatch.style.setProperty('--optionsight-swatch-height', `${swatchHeight}px`);\n        image.src = row.imageUrl;\n        image.alt = '';\n        image.loading = 'lazy';\n        image.decoding = 'async';\n        image.width = swatchWidth;\n        image.height = swatchHeight;\n        swatch.append(image);\n\n        if (this.normalize(row.tooltipStyle).includes('zoom')) {\n          tooltip.className = 'optionsight-options__tooltip';\n          tooltip.setAttribute('role', 'tooltip');\n          tooltip.style.setProperty('--optionsight-tooltip-width', `${tooltipWidth}px`);\n          tooltip.style.setProperty('--optionsight-tooltip-height', `${tooltipHeight}px`);\n          tooltipTitle.className = 'optionsight-options__tooltip-title';\n          tooltipTitle.textContent = this.formatPreviewLabel(displayLabel, priceText);\n          tooltipImage.src = row.imageUrl;\n          tooltipImage.alt = '';\n          tooltipImage.loading = 'lazy';\n          tooltipImage.width = tooltipWidth;\n          tooltipImage.height = tooltipHeight;\n          tooltip.append(tooltipImage, tooltipTitle);\n          swatch.append(tooltip);\n        }\n\n        return swatch;\n      }\n\n      onClick(event) {\n        const helpLink = event.target.closest('a[href]');\n        if (helpLink && this.contains(helpLink)) {\n          this.rememberProgressForReturn(helpLink);\n          return;\n        }\n\n        const previewChoice = event.target.closest('.optionsight-options__choice');\n        const previewInput = previewChoice?.control;\n        const shouldKeepRequiredChoice = this.shouldKeepRequiredChoiceSelected(previewInput);\n        if (shouldKeepRequiredChoice) event.preventDefault();\n\n        if (this.shouldClearOptionalSingleChoice(previewInput)) {\n          event.preventDefault();\n          this.clearOptionalSingleChoice(previewInput);\n          this.closeImagePreviews();\n          return;\n        }\n\n        const tooltip = previewChoice?.querySelector('.optionsight-options__tooltip');\n        if (previewChoice && tooltip && this.contains(previewChoice) && this.isMobileImagePreview()) {\n          if (previewInput?.checked && !shouldKeepRequiredChoice) {\n            this.closeImagePreviews();\n            return;\n          }\n\n          const shouldOpen = !previewChoice.classList.contains('is-preview-open');\n          this.closeImagePreviews(previewChoice);\n          previewChoice.classList.toggle('is-preview-open', shouldOpen);\n          previewChoice.setAttribute('aria-expanded', String(shouldOpen));\n          if (shouldOpen) {\n            this.positionMobileImagePreview(previewChoice, tooltip);\n          } else {\n            this.resetImagePreviewPosition(tooltip);\n          }\n          return;\n        }\n      }\n\n      onDocumentClick(event) {\n        const link = event.target.closest?.('a[href]');\n        if (this.isCartPageLink(link)) this.rememberProgressForCartReturn();\n        const openChoice = this.querySelector('.optionsight-options__choice.is-preview-open');\n        if (!openChoice) return;\n        if (isOptionSightImagePreviewTarget(openChoice, event.target)) return;\n        this.closeImagePreviews();\n      }\n\n      isCartPageLink(link) {\n        if (!link) return false;\n        try {\n          const url = new URL(link.href, window.location.href);\n          return url.origin === window.location.origin && /\\/cart\\/?$/.test(url.pathname);\n        } catch {\n          return false;\n        }\n      }\n\n      onDocumentKeydown(event) {\n        if (event.key === 'Escape') {\n          this.closeImagePreviews();\n          return;\n        }\n\n        const input = event.target.closest?.('[data-optionsight-input]');\n        if (\n          (event.key === ' ' || event.code === 'Space') &&\n          this.contains(input) &&\n          this.shouldKeepRequiredChoiceSelected(input)\n        ) {\n          event.preventDefault();\n          return;\n        }\n\n        if (\n          (event.key === ' ' || event.code === 'Space') &&\n          this.contains(input) &&\n          this.shouldClearOptionalSingleChoice(input)\n        ) {\n          event.preventDefault();\n          this.clearOptionalSingleChoice(input);\n        }\n      }\n\n      onWindowResize() {\n        if (!this.isMobileImagePreview()) {\n          this.closeImagePreviews();\n          return;\n        }\n        const choice = this.querySelector('.optionsight-options__choice.is-preview-open');\n        const tooltip = choice?.querySelector('.optionsight-options__tooltip');\n        if (choice && tooltip) this.positionMobileImagePreview(choice, tooltip);\n      }\n\n      onPageShow() {\n        if (!this.loaded) return;\n        const restoredProgress = this.restoreSavedProgress();\n        if (!restoredProgress) return;\n        this.update();\n        if (restoredProgress.returnPending) this.restoreReturnPosition(restoredProgress);\n      }\n\n      onProductFormChange(event) {\n        if (!this.loaded || event.target?.form !== this.form) return;\n        if (!['id', 'quantity', 'selling_plan'].includes(event.target.name)) return;\n        const checked = this.inputs.filter((input) => input.checked && !input.disabled);\n        const completion = this.getRequiredCompletion(checked);\n        this.setProductSubmitDisabled(!completion.complete);\n      }\n\n      isMobileImagePreview() {\n        return window.matchMedia?.('(max-width: 749px)').matches ?? window.innerWidth <= 749;\n      }\n\n      positionMobileImagePreview(choice, tooltip) {\n        const viewportWidth = document.documentElement.clientWidth || window.innerWidth;\n        const viewportMargin = 12;\n        tooltip.style.removeProperty('--optionsight-tooltip-shift-x');\n        tooltip.classList.remove('is-below');\n\n        let rect = tooltip.getBoundingClientRect();\n        let shiftX = 0;\n        if (rect.left < viewportMargin) shiftX += viewportMargin - rect.left;\n        if (rect.right + shiftX > viewportWidth - viewportMargin) {\n          shiftX -= rect.right + shiftX - (viewportWidth - viewportMargin);\n        }\n        tooltip.style.setProperty('--optionsight-tooltip-shift-x', `${Math.round(shiftX)}px`);\n\n        rect = tooltip.getBoundingClientRect();\n        if (rect.top < viewportMargin) tooltip.classList.add('is-below');\n        choice.setAttribute('aria-expanded', 'true');\n      }\n\n      resetImagePreviewPosition(tooltip) {\n        tooltip?.style.removeProperty('--optionsight-tooltip-shift-x');\n        tooltip?.classList.remove('is-below');\n      }\n\n      closeImagePreviews(except = null) {\n        this.querySelectorAll('.optionsight-options__choice.is-preview-open').forEach((choice) => {\n          if (choice === except) return;\n          choice.classList.remove('is-preview-open');\n          choice.setAttribute('aria-expanded', 'false');\n          this.resetImagePreviewPosition(choice.querySelector('.optionsight-options__tooltip'));\n        });\n      }\n\n      onChange(event) {\n        const input = event.target.closest('[data-optionsight-input]');\n        if (!input || !this.contains(input)) return;\n        this.uncheckConflictingOptions(input);\n        this.update();\n        this.saveProgress();\n      }\n\n      shouldClearOptionalSingleChoice(input) {\n        if (!input?.checked || this.normalize(input.dataset.optionMode) !== 'single') return false;\n        const group = input.closest('[data-optionsight-option-group]');\n        // The visible required star is the shopper-facing contract; imported Globo deselect flags are not consistent.\n        return group?.dataset.optionsightOptionRequired !== 'true';\n      }\n\n      shouldKeepRequiredChoiceSelected(input) {\n        if (!input?.checked) return false;\n        const group = input.closest('[data-optionsight-option-group]');\n        if (group?.dataset.optionsightOptionRequired !== 'true') return false;\n\n        return !Array.from(group.querySelectorAll('[data-optionsight-input]')).some(\n          (candidate) => candidate !== input && candidate.checked && !candidate.disabled\n        );\n      }\n\n      clearOptionalSingleChoice(input) {\n        input.checked = false;\n        this.update();\n        this.saveProgress();\n      }\n\n      readVariantPrices() {\n        return new Map(\n          [...this.readVariantPricesMinor().entries()].map(([variantId, priceMinor]) => [variantId, priceMinor / 100])\n        );\n      }\n\n      readVariantPricesMinor() {\n        const source = this.querySelector('[data-optionsight-variant-prices]');\n        if (!source) return new Map();\n        try {\n          const rows = JSON.parse(source.textContent || '[]');\n          return new Map(\n            rows\n              .filter((row) => row.available !== false)\n              .map((row) => [String(row.id || ''), Number(row.priceMinor)])\n              .filter(([id, priceMinor]) => id && Number.isSafeInteger(priceMinor) && priceMinor >= 0)\n          );\n        } catch {\n          return new Map();\n        }\n      }\n\n      getOptionPriceText(row, kind) {\n        if (kind !== 'product') return String(row.price || '').trim();\n        const variantId = String(row.selector || '').replace(/^variant:/i, '');\n        if (!this.variantPrices?.has(variantId)) return String(row.price || '').trim();\n        return String(this.variantPrices.get(variantId));\n      }\n\n      getProgressStorageKey() {\n        const productKey = String(this.dataset.productId || window.location.pathname || '').trim();\n        return `optionsight:progress:v2:${productKey}:${this.dataset.optionSetIds || ''}`;\n      }\n\n      getLegacyProgressStorageKey() {\n        return `optionsight:progress:${window.location.pathname}:${this.dataset.optionSetIds || ''}`;\n      }\n\n      getInputProgressKey(input) {\n        return [\n          input.dataset.optionElementId,\n          input.dataset.optionGroup,\n          input.dataset.optionLabel,\n          input.dataset.optionVariantId,\n        ]\n          .map((value) => String(value || '').trim())\n          .join('::');\n      }\n\n      getGroupProgressKey(group) {\n        return [group.dataset.optionElementId, group.dataset.optionsightOptionGroup]\n          .map((value) => String(value || '').trim())\n          .join('::');\n      }\n\n      readProgress() {\n        const currentKey = this.getProgressStorageKey();\n        const keys = [currentKey, this.getLegacyProgressStorageKey()];\n\n        for (const storageName of ['localStorage', 'sessionStorage']) {\n          for (const key of keys) {\n            try {\n              const storage = window[storageName];\n              const raw = storage?.getItem(key);\n              if (!raw) continue;\n              const progress = JSON.parse(raw);\n              const savedAt = Number(progress?.savedAt);\n              if (!Number.isFinite(savedAt) || Date.now() - savedAt > OPTIONSIGHT_PROGRESS_TTL_MS) {\n                storage.removeItem(key);\n                continue;\n              }\n              if (key !== currentKey || storageName !== 'localStorage') this.writeProgress(progress);\n              return progress;\n            } catch {\n              // Storage can be unavailable or contain stale data; try the next available source.\n            }\n          }\n        }\n\n        return null;\n      }\n\n      writeProgress(progress) {\n        const serialized = JSON.stringify(progress);\n        for (const storageName of ['localStorage', 'sessionStorage']) {\n          try {\n            window[storageName].setItem(this.getProgressStorageKey(), serialized);\n            return;\n          } catch {\n            // Fall back to session storage when durable storage is unavailable.\n          }\n        }\n      }\n\n      saveProgress({ returnPending = false, returnAnchor = null } = {}) {\n        if (!this.inputs.length) return;\n        const selected = this.inputs.filter((input) => input.checked).map((input) => this.getInputProgressKey(input));\n        this.writeProgress({ selected, returnPending, returnAnchor, savedAt: Date.now() });\n      }\n\n      rememberProgressForReturn(link) {\n        if (link.target === '_blank' || /^(mailto:|tel:|#)/i.test(link.getAttribute('href') || '')) return;\n        // The shared product-detail transaction owns help-link anchors. Keeping\n        // a second OptionSight scroll target makes Safari apply two competing\n        // corrections after pageshow, which is visible as a small jump.\n        this.saveProgress();\n      }\n\n      rememberProgressForCartReturn() {\n        this.saveProgress({\n          returnPending: true,\n          returnAnchor: {\n            target: 'optionsight',\n            viewportTop: this.isMobileImagePreview() ? 80 : 110,\n            scrollY: window.scrollY,\n          },\n        });\n      }\n\n      restoreSavedProgress() {\n        const progress = this.readProgress();\n        if (!Array.isArray(progress?.selected)) return null;\n        const selected = new Set(progress.selected);\n        this.inputs.forEach((input) => {\n          input.checked = selected.has(this.getInputProgressKey(input));\n        });\n        this.applyFreeFallbackDefaults();\n        const shouldRestoreReturnPosition =\n          progress.returnPending\n          && progress.returnAnchor?.target === 'optionsight'\n          && Date.now() - Number(progress.savedAt) <= OPTIONSIGHT_RETURN_POSITION_TTL_MS;\n        if (progress.returnPending) this.saveProgress({ returnPending: false });\n        return { ...progress, returnPending: shouldRestoreReturnPosition };\n      }\n\n      restoreReturnPosition(progress) {\n        const anchorState = progress?.returnAnchor;\n        const restore = () => {\n          if (anchorState?.target === 'optionsight' && Number.isFinite(anchorState.viewportTop)) {\n            window.scrollBy({ top: this.getBoundingClientRect().top - anchorState.viewportTop, behavior: 'auto' });\n            return;\n          }\n          const anchor = Array.from(this.querySelectorAll('[data-optionsight-option-group]')).find(\n            (group) => this.getGroupProgressKey(group) === anchorState?.key\n          );\n          if (anchor && Number.isFinite(anchorState?.viewportTop)) {\n            window.scrollBy({ top: anchor.getBoundingClientRect().top - anchorState.viewportTop, behavior: 'auto' });\n          } else if (Number.isFinite(anchorState?.scrollY)) {\n            window.scrollTo({ top: anchorState.scrollY, behavior: 'auto' });\n          }\n        };\n        requestAnimationFrame(() => requestAnimationFrame(restore));\n        window.setTimeout(restore, 250);\n      }\n\n      update() {\n        this.applyVisibilityRules();\n        const initiallyChecked = this.inputs.filter((input) => input.checked && !input.disabled);\n        const conflictSources = new Map();\n        const groupConflicts = new Map();\n\n        initiallyChecked.forEach((input) => {\n          const sourceLabel = input.dataset.optionDisplayLabel || input.dataset.optionLabel || '';\n          this.parseConflicts(input).forEach((conflict) => {\n            const sources = conflictSources.get(conflict) || [];\n            if (sourceLabel && !sources.includes(sourceLabel)) sources.push(sourceLabel);\n            conflictSources.set(conflict, sources);\n          });\n        });\n\n        this.inputs.forEach((input) => {\n          const group = input.closest('[data-optionsight-option-group]');\n          const hidden = Boolean(group?.hidden);\n          const conflictLabels = conflictSources.get(this.normalize(input.dataset.optionLabel)) || [];\n          const blocked = !hidden && conflictLabels.length > 0 && !input.checked;\n          const item = input.closest('.optionsight-options__item');\n          const label = item?.querySelector('.optionsight-options__choice');\n          const message = group?.querySelector('[data-optionsight-conflict-message]');\n          input.disabled = hidden || blocked;\n          input.toggleAttribute('aria-disabled', hidden || blocked);\n          item?.classList.toggle('is-conflicted', blocked);\n          if (blocked && group) {\n            const sourceKey = conflictLabels.join('\\u0000');\n            const records = groupConflicts.get(group) || new Map();\n            const record = records.get(sourceKey) || { blockedLabels: [], sourceLabels: conflictLabels };\n            const blockedLabel = input.dataset.optionDisplayLabel || input.dataset.optionLabel || '';\n            if (blockedLabel && !record.blockedLabels.includes(blockedLabel)) record.blockedLabels.push(blockedLabel);\n            records.set(sourceKey, record);\n            groupConflicts.set(group, records);\n          }\n          if (label && message) {\n            if (blocked) label.setAttribute('aria-describedby', message.id);\n            else label.removeAttribute('aria-describedby');\n          }\n        });\n\n        this.querySelectorAll('[data-optionsight-option-group]').forEach((group) => {\n          const message = group.querySelector('[data-optionsight-conflict-message]');\n          if (!message) return;\n          const records = [...(groupConflicts.get(group)?.values() || [])];\n          message.textContent = records\n            .map(({ blockedLabels, sourceLabels }) => {\n              const blocked = this.formatOptionList(blockedLabels);\n              const sources = this.formatOptionList(sourceLabels);\n              const blockedVerb = blockedLabels.length === 1 ? 'is' : 'are';\n              const sourceVerb = sourceLabels.length === 1 ? 'is' : 'are';\n              return `${blocked} ${blockedVerb} unavailable while ${sources} ${sourceVerb} selected.`;\n            })\n            .join(' ');\n          message.hidden = records.length === 0;\n        });\n\n        const checked = this.inputs.filter((input) => input.checked && !input.disabled);\n        this.updateSelectedValues(checked);\n        this.updatePriceSummary(checked);\n        const completion = this.getRequiredCompletion(checked);\n        this.setProductSubmitDisabled(!this.loaded || !completion.complete);\n        this.toggleAttribute('data-optionsight-complete', completion.complete);\n      }\n\n      applyVisibilityRules() {\n        const selected = this.getSelectedValuesByElementId();\n        this.querySelectorAll('[data-option-visibility-rule]').forEach((group) => {\n          const rule = this.parseVisibilityRule(group.dataset.optionVisibilityRule);\n          const visible = this.evaluateVisibilityRule(rule, selected);\n          group.hidden = !visible;\n          group.setAttribute('aria-hidden', String(!visible));\n        });\n      }\n\n      getSelectedValuesByElementId() {\n        const values = new Map();\n        this.inputs.forEach((input) => {\n          if (!input.checked || input.disabled) return;\n          const elementId = input.dataset.optionElementId || '';\n          if (!elementId) return;\n          values.set(elementId, [...(values.get(elementId) || []), input.dataset.optionLabel || '']);\n        });\n        return values;\n      }\n\n      evaluateVisibilityRule(rule, selectedValues) {\n        if (!rule || !Array.isArray(rule.whens) || rule.whens.length === 0) return true;\n        const matches = rule.whens.map((condition) => {\n          const values = selectedValues.get(String(condition.select || '').trim()) || [];\n          if (String(condition.where || '').toUpperCase() !== 'EQUALS') return false;\n          return values.some((value) => this.normalize(value) === this.normalize(condition.value));\n        });\n        const matched = rule.match === 'any' ? matches.some(Boolean) : matches.every(Boolean);\n        return rule.display === 'hide' ? !matched : matched;\n      }\n\n      updateSelectedValues(checkedInputs) {\n        const groups = new Map();\n        checkedInputs.forEach((input) => {\n          const group = input.dataset.optionGroup || '';\n          groups.set(group, [...(groups.get(group) || []), input]);\n        });\n\n        this.querySelectorAll('[data-optionsight-option-group]').forEach((groupElement) => {\n          const group = groupElement.dataset.optionsightOptionGroup || '';\n          const selectedInputs = groups.get(group) || [];\n          const selected = selectedInputs\n            .map((input) => input.dataset.optionDisplayLabel || input.dataset.optionLabel || '')\n            .filter(Boolean);\n          const value = groupElement.querySelector('[data-optionsight-option-selected]');\n          const price = groupElement.querySelector('[data-optionsight-option-group-price]');\n          const total = selectedInputs.reduce(\n            (sum, input) => sum + this.parsePriceAmount(input.dataset.optionPriceText),\n            0\n          );\n          if (value) {\n            value.textContent = selected.join(', ');\n            value.hidden = selected.length === 0;\n          }\n          if (price) {\n            price.textContent = total > 0 ? `(+ ${this.formatMoney(total)} ${this.getCurrency()})` : '';\n            price.hidden = total <= 0;\n          }\n          groupElement.classList.toggle('is-complete', selected.length > 0);\n        });\n      }\n\n      updatePriceSummary(checkedInputs) {\n        const totalMinor = this.getChargedAddOnTotalMinor(checkedInputs);\n        const total = totalMinor / 100;\n        if (this.priceSummary && this.priceSummaryAmount) {\n          this.priceSummary.hidden = totalMinor <= 0;\n          this.priceSummaryAmount.textContent = totalMinor > 0 ? `${this.formatMoney(total)} ${this.getCurrency()}` : '';\n        }\n        this.dispatchEvent(\n          new CustomEvent('optionsight:price-change', {\n            bubbles: true,\n            detail: { addOnTotalMinor: totalMinor },\n          })\n        );\n      }\n\n      getChargedAddOnTotalMinor(checkedInputs) {\n        const chargedVariantIds = new Set();\n        return checkedInputs.reduce((totalMinor, input) => {\n          const variantId = String(input.dataset.optionVariantId || '').trim();\n          if (!variantId || chargedVariantIds.has(variantId)) return totalMinor;\n          chargedVariantIds.add(variantId);\n\n          const liveAmount = this.variantPrices?.get(variantId);\n          const amount = Number.isFinite(liveAmount)\n            ? liveAmount\n            : this.normalize(input.dataset.optionKind) === 'product'\n              ? 0\n              : this.parsePriceAmount(input.dataset.optionPriceText);\n          return totalMinor + Math.round(amount * 100);\n        }, 0);\n      }\n\n      getRequiredCompletion(checkedInputs) {\n        const checkedGroups = new Set(checkedInputs.map((input) => this.normalize(input.dataset.optionGroup)));\n        const requiredGroups = Array.from(\n          this.querySelectorAll('[data-optionsight-option-group][data-optionsight-option-required=\"true\"]')\n        )\n          .filter((group) => !group.hidden)\n          .map((group) => this.normalize(group.dataset.optionsightOptionGroup))\n          .filter(Boolean);\n        const completed = requiredGroups.filter((group) => checkedGroups.has(group)).length;\n        return { completed, required: requiredGroups.length, complete: completed === requiredGroups.length };\n      }\n\n      bindProductForm() {\n        const form = document.getElementById(this.dataset.formId || '');\n        if (!form) return;\n        this.form?.removeEventListener('submit', this.onSubmit, true);\n        this.directCheckoutButton?.removeEventListener('click', this.onDirectCheckout, true);\n        this.form = form;\n        this.form.addEventListener('submit', this.onSubmit, true);\n        this.directCheckoutButton = this.form.querySelector('[data-optionsight-direct-checkout]');\n        this.directCheckoutButton?.addEventListener('click', this.onDirectCheckout, true);\n      }\n\n      async onSubmit(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        await this.submitOptionSightPurchase({\n          mode: 'cart',\n          submitButton: event.submitter || this.form?.querySelector('[data-product-purchase-button]'),\n        });\n      }\n\n      async onDirectCheckout(event) {\n        event.preventDefault();\n        event.stopImmediatePropagation();\n        if (event.currentTarget?.disabled || event.currentTarget?.getAttribute('aria-disabled') === 'true') return;\n        await this.submitOptionSightPurchase({ mode: 'checkout', submitButton: event.currentTarget });\n      }\n\n      async submitOptionSightPurchase({ mode, submitButton }) {\n        if (this.purchaseInFlight) return;\n        const checked = this.inputs.filter((input) => input.checked && !input.disabled);\n        const completion = this.getRequiredCompletion(checked);\n        if (!this.loaded || !completion.complete || !this.form) {\n          this.renderFormError('Complete all required custom choices before continuing.');\n          this.querySelector('[data-optionsight-option-group][data-optionsight-option-required=\"true\"]:not(.is-complete)')\n            ?.scrollIntoView({ behavior: 'smooth', block: 'center' });\n          this.emitIntegrityDiagnostic('preflight', 'blocked', {\n            mode,\n            reason: this.loaded ? 'required_options_incomplete' : 'options_not_loaded',\n          });\n          return;\n        }\n\n        const formData = new FormData(this.form);\n        const cart = document.querySelector('cart-notification') || document.querySelector('cart-drawer');\n        let payload;\n        let expectation;\n        let cartSnapshot = null;\n        let addAttempted = false;\n\n        try {\n          payload = this.createCartPayload(formData, checked);\n          expectation = this.createCartExpectation(payload);\n        } catch (error) {\n          this.emitIntegrityDiagnostic('preflight', 'failed', {\n            mode,\n            reason: this.getIntegrityErrorReason(error, 'invalid_expected_cart'),\n          });\n          this.renderFormError('Custom-option pricing could not be verified. Please refresh and try again.');\n          return;\n        }\n\n        if (mode === 'cart' && cart) {\n          payload.sections = cart.getSectionsToRender().map((section) => section.id);\n          payload.sections_url = window.location.pathname;\n          cart.setActiveElement(document.activeElement);\n        }\n\n        this.purchaseInFlight = true;\n        this.setSubmitLoading(submitButton, true);\n        this.renderFormError('');\n        this.emitIntegrityDiagnostic('preflight', 'passed', this.getDiagnosticSummary(mode, expectation));\n\n        try {\n          if (mode === 'checkout') {\n            const independentCheckout = await this.createIndependentCheckout(payload);\n            cartSnapshot = independentCheckout.cart;\n            const verification = this.verifyCartExpectation(cartSnapshot, expectation);\n            if (!verification.ok) {\n              throw this.createIntegrityError(verification.reason, { cartSnapshot, verification });\n            }\n\n            const wholeCartVerification = this.verifyWholeCartIntegrity(cartSnapshot);\n            if (!wholeCartVerification.ok) {\n              throw this.createIntegrityError(wholeCartVerification.reason, {\n                cartSnapshot,\n                verification: wholeCartVerification,\n              });\n            }\n            this.emitIntegrityDiagnostic('isolated-cart-verify', 'passed', {\n              ...this.getDiagnosticSummary(mode, expectation),\n              actualLineCount: verification.actualLineCount,\n              actualAmountMinor: verification.actualAmountMinor,\n              actualVariantIds: verification.actualVariantIds,\n            });\n            this.emitIntegrityDiagnostic('redirect', 'started', this.getDiagnosticSummary(mode, expectation));\n            window.location.assign(independentCheckout.checkoutUrl);\n            return;\n          }\n\n          addAttempted = true;\n          const cartResponse = await this.addCartPayload(payload);\n          this.emitIntegrityDiagnostic('cart-add', 'passed', this.getDiagnosticSummary(mode, expectation));\n\n          cartSnapshot = await this.fetchCartSnapshot();\n          const verification = this.verifyCartExpectation(cartSnapshot, expectation);\n          if (!verification.ok) {\n            throw this.createIntegrityError(verification.reason, { cartSnapshot, verification });\n          }\n\n          this.emitIntegrityDiagnostic('cart-verify', 'passed', {\n            ...this.getDiagnosticSummary(mode, expectation),\n            actualLineCount: verification.actualLineCount,\n            actualAmountMinor: verification.actualAmountMinor,\n            actualVariantIds: verification.actualVariantIds,\n          });\n\n          if (typeof publish === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') {\n            publish(PUB_SUB_EVENTS.cartUpdate, {\n              source: 'optionsight-options',\n              productVariantId: formData.get('id'),\n              cartData: cartResponse,\n            });\n          }\n\n          if (!cart) {\n            window.location.assign(window.routes?.cart_url || '/cart');\n            return;\n          }\n          cart.renderContents(this.normalizeCartResponse(cartResponse));\n        } catch (error) {\n          const reason = this.getIntegrityErrorReason(error, 'cart_integrity_failed');\n          this.emitIntegrityDiagnostic('purchase', 'failed', {\n            ...this.getDiagnosticSummary(mode, expectation),\n            reason,\n            ...(error.verification || {}),\n          });\n\n          const rollback = addAttempted\n            ? await this.rollbackCartGroup(expectation.groupId, cartSnapshot, mode)\n            : { confirmed: true, removedLineCount: 0 };\n          const isolatedCheckoutFailed = mode === 'checkout' && !addAttempted;\n          const requiresCartReview = !isolatedCheckoutFailed && (reason.startsWith('cart_wide_') || !rollback.confirmed);\n          this.renderFormError(\n            !requiresCartReview\n              ? 'We could not verify all custom-option charges, so this item was not added. Please try again.'\n              : 'We could not verify all custom-option charges. Please review your cart before trying again.'\n          );\n        } finally {\n          this.purchaseInFlight = false;\n          this.setSubmitLoading(submitButton, false);\n          const currentChecked = this.inputs.filter((input) => input.checked && !input.disabled);\n          this.setProductSubmitDisabled(!this.getRequiredCompletion(currentChecked).complete);\n        }\n      }\n\n      async addCartPayload(payload) {\n        const response = await fetch(routes.cart_add_url, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/json',\n            Accept: 'application/javascript',\n            'X-Requested-With': 'XMLHttpRequest',\n          },\n          body: JSON.stringify(payload),\n        });\n        let cartResponse;\n        try {\n          cartResponse = await response.json();\n        } catch {\n          throw this.createIntegrityError('cart_add_invalid_response');\n        }\n        if (response.ok === false || cartResponse?.status) {\n          throw this.createIntegrityError('cart_add_rejected');\n        }\n        return cartResponse;\n      }\n\n      getIndependentCheckoutAttributes() {\n        const attributes = window.LureMarketingAttribution?.getCurrentCartAttributes?.(window) || {};\n        return Object.entries(attributes)\n          .filter(([key, value]) => key && value !== undefined && value !== null && String(value) !== '')\n          .map(([key, value]) => ({ key: String(key), value: String(value) }));\n      }\n\n      moneyAmountToMinor(amount) {\n        const match = String(amount ?? '').match(/^(\\d+)(?:\\.(\\d+))?$/);\n        if (!match) return null;\n        const fraction = `${match[2] || ''}00`.slice(0, 2);\n        const minor = Number(match[1]) * 100 + Number(fraction);\n        return Number.isSafeInteger(minor) ? minor : null;\n      }\n\n      normalizeStorefrontCart(cart) {\n        const nodes = cart?.lines?.nodes;\n        if (!Array.isArray(nodes)) throw this.createIntegrityError('isolated_cart_invalid');\n        const items = nodes.map((line, index) => {\n          const variantId = Number(String(line?.merchandise?.id || '').split('/').pop());\n          const quantity = Number(line?.quantity);\n          const originalPriceMinor = this.moneyAmountToMinor(line?.merchandise?.price?.amount);\n          if (\n            !Number.isSafeInteger(variantId)\n            || variantId <= 0\n            || !Number.isSafeInteger(quantity)\n            || quantity < 1\n            || !Number.isSafeInteger(originalPriceMinor)\n          ) {\n            throw this.createIntegrityError('isolated_cart_line_invalid');\n          }\n          return {\n            id: variantId,\n            variant_id: variantId,\n            key: String(line?.id || `isolated-line-${index}`),\n            quantity,\n            properties: Object.fromEntries(\n              (Array.isArray(line?.attributes) ? line.attributes : []).map((attribute) => [\n                String(attribute?.key || ''),\n                String(attribute?.value ?? ''),\n              ])\n            ),\n            original_price: originalPriceMinor,\n            original_line_price: originalPriceMinor * quantity,\n            final_price: originalPriceMinor,\n            final_line_price: originalPriceMinor * quantity,\n          };\n        });\n        return { items };\n      }\n\n      async createIndependentCheckout(payload) {\n        const storefrontDomain = String(this.dataset.storefrontDomain || '').trim();\n        if (!/^[a-z0-9][a-z0-9.-]*\\.myshopify\\.com$/i.test(storefrontDomain)) {\n          throw this.createIntegrityError('storefront_domain_invalid');\n        }\n\n        const lines = payload.items.map((item) => ({\n          merchandiseId: `gid://shopify/ProductVariant/${item.id}`,\n          quantity: Number(item.quantity || 1),\n          attributes: Object.entries(item.properties || {}).map(([key, value]) => ({\n            key: String(key),\n            value: String(value ?? ''),\n          })),\n          ...(item.selling_plan\n            ? { sellingPlanId: `gid://shopify/SellingPlan/${item.selling_plan}` }\n            : {}),\n        }));\n        const countryCode = String(window.Shopify?.country || '').toUpperCase();\n        const input = {\n          lines,\n          attributes: this.getIndependentCheckoutAttributes(),\n          ...(/^[A-Z]{2}$/.test(countryCode) ? { buyerIdentity: { countryCode } } : {}),\n        };\n        const query = `mutation OptionSightCartCreate($input: CartInput!) {\n          cartCreate(input: $input) {\n            cart {\n              checkoutUrl\n              lines(first: 50) {\n                nodes {\n                  id\n                  quantity\n                  attributes { key value }\n                  merchandise { ... on ProductVariant { id price { amount } } }\n                }\n              }\n            }\n            userErrors { field message }\n            warnings { message }\n          }\n        }`;\n        const response = await fetch(`https://${storefrontDomain}/api/2026-07/graphql.json`, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ query, variables: { input } }),\n        });\n        let result;\n        try {\n          result = await response.json();\n        } catch {\n          throw this.createIntegrityError('isolated_cart_invalid_response');\n        }\n        const payloadResult = result?.data?.cartCreate;\n        if (\n          response.ok === false\n          || result?.errors?.length\n          || payloadResult?.userErrors?.length\n          || payloadResult?.warnings?.length\n          || !payloadResult?.cart?.checkoutUrl\n        ) {\n          throw this.createIntegrityError('isolated_cart_rejected');\n        }\n        return {\n          checkoutUrl: String(payloadResult.cart.checkoutUrl),\n          cart: this.normalizeStorefrontCart(payloadResult.cart),\n        };\n      }\n\n      createCartPayload(formData, checkedInputs) {\n        const quantity = Number(formData.get('quantity') || 1);\n        const parentVariantId = String(formData.get('id') || '');\n        const groupId = `optionsight-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n        const properties = {};\n\n        for (const [key, value] of formData.entries()) {\n          const match = key.match(/^properties\\[(.+)\\]$/);\n          if (match && value && !match[1].startsWith('_optionsight_')) properties[match[1]] = value;\n        }\n\n        properties[this.dataset.propertyName || 'Selected custom options'] = checkedInputs\n          .map((input) => input.dataset.optionLabel)\n          .filter(Boolean)\n          .join(', ');\n        properties._optionsight_group_id = groupId;\n        properties._optionsight_option_set = this.dataset.optionSetIds || '';\n\n        const grouped = new Map();\n        checkedInputs.forEach((input) => {\n          const group = input.dataset.optionLabelOnCart || input.dataset.optionGroup || input.dataset.optionLabel;\n          const label = input.dataset.optionLabel;\n          if (!group || !label) return;\n          grouped.set(group, [...(grouped.get(group) || []), label]);\n        });\n        grouped.forEach((values, key) => {\n          properties[key] = values.join(', ');\n        });\n\n        const mainItem = { id: Number(parentVariantId), quantity, properties };\n        const sellingPlan = formData.get('selling_plan');\n        if (sellingPlan) mainItem.selling_plan = sellingPlan;\n\n        const addonsByVariantId = new Map();\n        checkedInputs.forEach((input) => {\n          const variantId = String(input.dataset.optionVariantId || '').trim();\n          const isProductChoice = this.normalize(input.dataset.optionKind) === 'product';\n          if (!variantId) {\n            if (isProductChoice) throw this.createIntegrityError('addon_variant_missing');\n            return;\n          }\n          const numericVariantId = Number(variantId);\n          if (\n            !Number.isSafeInteger(numericVariantId)\n            || numericVariantId <= 0\n            || !this.variantPricesMinor?.has(variantId)\n          ) {\n            throw this.createIntegrityError('addon_variant_invalid');\n          }\n\n          const group = String(input.dataset.optionGroup || '').trim();\n          const label = String(input.dataset.optionLabel || '').trim();\n          const addon = addonsByVariantId.get(variantId) || {\n            id: numericVariantId,\n            groups: new Set(),\n            labels: new Set(),\n          };\n          if (group) addon.groups.add(group);\n          if (label) addon.labels.add(label);\n          addonsByVariantId.set(variantId, addon);\n        });\n\n        const addons = [...addonsByVariantId.values()]\n          .map((addon) => ({\n            id: addon.id,\n            quantity,\n            properties: {\n              _optionsight_for: groupId,\n              _optionsight_group_id: groupId,\n              _optionsight_parent_variant_id: parentVariantId,\n              _optionsight_option_set: this.dataset.optionSetIds || '',\n              _optionsight_group: [...addon.groups].join(', '),\n              _optionsight_label: [...addon.labels].join(', '),\n            },\n          }))\n          .sort((left, right) => Number(left.id) - Number(right.id));\n\n        const expectedAddons = addons.map((addon) => ({\n          variantId: Number(addon.id),\n          unitsPerParent: 1,\n          unitPriceMinor: this.getAddOnUnitPriceMinor(addon.id),\n        }));\n        if (\n          expectedAddons.some(\n            (addon) =>\n              !Number.isSafeInteger(addon.variantId)\n              || !Number.isSafeInteger(addon.unitPriceMinor)\n              || addon.unitPriceMinor < 0\n          )\n        ) {\n          throw this.createIntegrityError('addon_price_unavailable');\n        }\n\n        properties._optionsight_integrity = 'v1';\n        properties._optionsight_expected_count = String(expectedAddons.length);\n        properties._optionsight_expected_amount = String(\n          expectedAddons.reduce(\n            (totalMinor, addon) => totalMinor + addon.unitsPerParent * addon.unitPriceMinor,\n            0\n          )\n        );\n        expectedAddons.forEach((addon, index) => {\n          properties[`_optionsight_item_${index + 1}`] = [\n            addon.variantId,\n            addon.unitsPerParent,\n            addon.unitPriceMinor,\n          ].join('@');\n        });\n\n        return { items: [mainItem, ...addons] };\n      }\n\n      getAddOnUnitPriceMinor(variantId) {\n        const priceMinor = this.variantPricesMinor?.get(String(variantId || ''));\n        return Number.isSafeInteger(priceMinor) && priceMinor >= 0 ? priceMinor : null;\n      }\n\n      readParentVariantPrices() {\n        const source = this.form?.querySelector('[data-optionsight-parent-variant-prices]');\n        if (!source) return new Map();\n        try {\n          const rows = JSON.parse(source.textContent || '[]');\n          return new Map(\n            rows\n              .map((row) => [String(row.id || ''), Number(row.priceMinor)])\n              .filter(([id, priceMinor]) => id && Number.isSafeInteger(priceMinor) && priceMinor >= 0)\n          );\n        } catch {\n          return new Map();\n        }\n      }\n\n      createCartExpectation(payload) {\n        const items = Array.isArray(payload?.items) ? payload.items : [];\n        const [parent, ...addons] = items;\n        const groupId = String(parent?.properties?._optionsight_group_id || '');\n        const parentPrices = this.readParentVariantPrices();\n        if (!parent || !groupId || items.length === 0) throw this.createIntegrityError('invalid_expected_cart');\n\n        const expectedItems = items.map((item, index) => {\n          const variantId = Number(item.id);\n          const quantity = Number(item.quantity || 1);\n          const unitPriceMinor =\n            index === 0\n              ? parentPrices.get(String(variantId))\n              : this.getAddOnUnitPriceMinor(variantId);\n          if (\n            !Number.isSafeInteger(variantId)\n            || !Number.isSafeInteger(quantity)\n            || quantity < 1\n            || !Number.isSafeInteger(unitPriceMinor)\n            || unitPriceMinor < 0\n          ) {\n            throw this.createIntegrityError(index === 0 ? 'parent_price_unavailable' : 'addon_price_unavailable');\n          }\n          return {\n            role: index === 0 ? 'parent' : 'addon',\n            variantId,\n            quantity,\n            unitPriceMinor,\n            originalLinePriceMinor: unitPriceMinor * quantity,\n            properties: { ...(item.properties || {}) },\n          };\n        });\n\n        return {\n          groupId,\n          items: expectedItems,\n          originalAmountMinor: expectedItems.reduce(\n            (totalMinor, item) => totalMinor + item.originalLinePriceMinor,\n            0\n          ),\n        };\n      }\n\n      getCartJsonUrl() {\n        const cartUrl = String(window.routes?.cart_url || '/cart').replace(/\\/$/, '');\n        return cartUrl.endsWith('.js') ? cartUrl : `${cartUrl}.js`;\n      }\n\n      async fetchCartSnapshot() {\n        const response = await fetch(this.getCartJsonUrl(), {\n          method: 'GET',\n          headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n          cache: 'no-store',\n        });\n        if (response.ok === false) throw this.createIntegrityError('cart_snapshot_rejected');\n        try {\n          const cart = await response.json();\n          if (!Array.isArray(cart?.items)) throw this.createIntegrityError('cart_snapshot_invalid');\n          return cart;\n        } catch (error) {\n          if (error?.optionsightReason) throw error;\n          throw this.createIntegrityError('cart_snapshot_invalid');\n        }\n      }\n\n      getCartLineVariantId(line) {\n        return Number(line?.variant_id || line?.id || 0);\n      }\n\n      getCartGroupLines(cart, groupId) {\n        return (Array.isArray(cart?.items) ? cart.items : []).filter((line) => {\n          const properties = line?.properties || {};\n          return properties._optionsight_group_id === groupId || properties._optionsight_for === groupId;\n        });\n      }\n\n      verifyCartExpectation(cart, expectation) {\n        const groupLines = this.getCartGroupLines(cart, expectation.groupId);\n        const usedLineIndexes = new Set();\n        const failures = [];\n\n        expectation.items.forEach((expectedItem) => {\n          const actualIndex = groupLines.findIndex((line, index) => {\n            if (usedLineIndexes.has(index) || this.getCartLineVariantId(line) !== expectedItem.variantId) return false;\n            const isAddon = Boolean(line?.properties?._optionsight_for);\n            return isAddon === (expectedItem.role === 'addon');\n          });\n          if (actualIndex < 0) {\n            failures.push('expected_line_missing');\n            return;\n          }\n\n          usedLineIndexes.add(actualIndex);\n          const actualLine = groupLines[actualIndex];\n          const actualProperties = actualLine.properties || {};\n          if (Number(actualLine.quantity) !== expectedItem.quantity) failures.push('line_quantity_mismatch');\n\n          Object.entries(expectedItem.properties)\n            .filter(([key]) => key.startsWith('_optionsight_'))\n            .forEach(([key, value]) => {\n              if (String(actualProperties[key] ?? '') !== String(value ?? '')) failures.push('line_group_mismatch');\n            });\n\n          const originalPriceMinor = Number(actualLine.original_price);\n          const originalLinePriceMinor = Number(actualLine.original_line_price);\n          if (originalPriceMinor !== expectedItem.unitPriceMinor) failures.push('line_price_mismatch');\n          if (originalLinePriceMinor !== expectedItem.originalLinePriceMinor) failures.push('line_amount_mismatch');\n\n          const finalPriceMinor = Number(actualLine.final_price);\n          const finalLinePriceMinor = Number(actualLine.final_line_price);\n          if (\n            !Number.isFinite(finalPriceMinor)\n            || !Number.isFinite(finalLinePriceMinor)\n            || finalPriceMinor < 0\n            || finalLinePriceMinor < 0\n            || finalPriceMinor > originalPriceMinor\n            || finalLinePriceMinor > originalLinePriceMinor\n          ) {\n            failures.push('discounted_line_amount_invalid');\n          }\n        });\n\n        if (groupLines.length !== expectation.items.length || usedLineIndexes.size !== groupLines.length) {\n          failures.push('group_line_count_mismatch');\n        }\n\n        const actualAmountMinor = groupLines.reduce(\n          (totalMinor, line) => totalMinor + Number(line.original_line_price || 0),\n          0\n        );\n        if (actualAmountMinor !== expectation.originalAmountMinor) failures.push('group_amount_mismatch');\n\n        return {\n          ok: failures.length === 0,\n          reason: failures[0] || 'verified',\n          actualLineCount: groupLines.length,\n          actualAmountMinor,\n          actualVariantIds: groupLines.map((line) => this.getCartLineVariantId(line)).filter(Boolean),\n        };\n      }\n\n      parseCartParentIntegrity(parentLine) {\n        const properties = parentLine?.properties || {};\n        const expectedCount = Number(properties._optionsight_expected_count);\n        const expectedAmountMinor = Number(properties._optionsight_expected_amount);\n        if (\n          properties._optionsight_integrity !== 'v1'\n          || !Number.isSafeInteger(expectedCount)\n          || expectedCount < 0\n          || !Number.isSafeInteger(expectedAmountMinor)\n          || expectedAmountMinor < 0\n        ) {\n          return null;\n        }\n\n        const itemKeys = Object.keys(properties)\n          .filter((key) => /^_optionsight_item_\\d+$/.test(key))\n          .sort((left, right) => Number(left.split('_').pop()) - Number(right.split('_').pop()));\n        if (itemKeys.length !== expectedCount) return null;\n\n        const items = itemKeys.map((key, index) => {\n          if (key !== `_optionsight_item_${index + 1}`) return null;\n          const [variantIdValue, unitsValue, priceMinorValue, ...extra] = String(properties[key] || '').split('@');\n          const variantId = Number(variantIdValue);\n          const unitsPerParent = Number(unitsValue);\n          const unitPriceMinor = Number(priceMinorValue);\n          if (\n            extra.length > 0\n            || !Number.isSafeInteger(variantId)\n            || variantId <= 0\n            || !Number.isSafeInteger(unitsPerParent)\n            || unitsPerParent <= 0\n            || !Number.isSafeInteger(unitPriceMinor)\n            || unitPriceMinor < 0\n          ) {\n            return null;\n          }\n          return { variantId, unitsPerParent, unitPriceMinor };\n        });\n        if (items.some((item) => !item)) return null;\n\n        const stableVariantIds = items.map((item) => item.variantId);\n        if (\n          new Set(stableVariantIds).size !== stableVariantIds.length\n          || stableVariantIds.some((variantId, index) => index > 0 && variantId <= stableVariantIds[index - 1])\n        ) {\n          return null;\n        }\n        const calculatedAmountMinor = items.reduce(\n          (totalMinor, item) => totalMinor + item.unitsPerParent * item.unitPriceMinor,\n          0\n        );\n        if (calculatedAmountMinor !== expectedAmountMinor) return null;\n        return { expectedCount, expectedAmountMinor, items };\n      }\n\n      verifyWholeCartIntegrity(cart) {\n        const cartItems = Array.isArray(cart?.items) ? cart.items : [];\n        const optionPropertyName = this.dataset.propertyName || 'Selected custom options';\n        const isAddonCandidate = (line) => {\n          const properties = line?.properties || {};\n          return Boolean(\n            properties._optionsight_for\n            || properties._optionsight_parent_variant_id\n            || this.variantPricesMinor?.has(String(this.getCartLineVariantId(line)))\n          );\n        };\n        const parents = cartItems.filter((line) => {\n          const properties = line?.properties || {};\n          const hasIntegrityMetadata = Object.keys(properties).some(\n            (key) =>\n              key === '_optionsight_integrity'\n              || key === '_optionsight_expected_count'\n              || key === '_optionsight_expected_amount'\n              || /^_optionsight_item_\\d+$/.test(key)\n          );\n          return (\n            !isAddonCandidate(line)\n            && (\n              properties._optionsight_group_id\n              || properties[optionPropertyName]\n              || properties['Selected custom options']\n              || hasIntegrityMetadata\n            )\n          );\n        });\n        const addons = cartItems.filter(isAddonCandidate);\n        const failures = [];\n        const knownGroupIds = new Set();\n\n        parents.forEach((parentLine) => {\n          const parentProperties = parentLine.properties || {};\n          const groupId = String(parentProperties._optionsight_group_id || '');\n          const parentVariantId = this.getCartLineVariantId(parentLine);\n          const parentQuantity = Number(parentLine.quantity);\n          if (!groupId || knownGroupIds.has(groupId)) {\n            failures.push('cart_wide_parent_group_invalid');\n            return;\n          }\n          knownGroupIds.add(groupId);\n\n          const integrity = this.parseCartParentIntegrity(parentLine);\n          if (!integrity || !Number.isSafeInteger(parentQuantity) || parentQuantity < 1) {\n            failures.push('cart_wide_parent_metadata_invalid');\n            return;\n          }\n\n          const groupAddons = addons.filter((line) => String(line.properties?._optionsight_for || '') === groupId);\n          if (groupAddons.length !== integrity.expectedCount) failures.push('cart_wide_group_count_mismatch');\n          const usedIndexes = new Set();\n\n          integrity.items.forEach((expectedItem) => {\n            if (this.getAddOnUnitPriceMinor(expectedItem.variantId) !== expectedItem.unitPriceMinor) {\n              failures.push('cart_wide_live_price_mismatch');\n            }\n            const addonIndex = groupAddons.findIndex(\n              (line, index) =>\n                !usedIndexes.has(index) && this.getCartLineVariantId(line) === expectedItem.variantId\n            );\n            if (addonIndex < 0) {\n              failures.push('cart_wide_expected_line_missing');\n              return;\n            }\n            usedIndexes.add(addonIndex);\n            const addonLine = groupAddons[addonIndex];\n            const addonProperties = addonLine.properties || {};\n            if (\n              String(addonProperties._optionsight_group_id || '') !== groupId\n              || String(addonProperties._optionsight_parent_variant_id || '') !== String(parentVariantId)\n            ) {\n              failures.push('cart_wide_mixed_group');\n            }\n\n            const expectedQuantity = parentQuantity * expectedItem.unitsPerParent;\n            if (Number(addonLine.quantity) !== expectedQuantity) failures.push('cart_wide_quantity_mismatch');\n            if (Number(addonLine.original_price) !== expectedItem.unitPriceMinor) {\n              failures.push('cart_wide_price_mismatch');\n            }\n            if (Number(addonLine.original_line_price) !== expectedItem.unitPriceMinor * expectedQuantity) {\n              failures.push('cart_wide_amount_mismatch');\n            }\n          });\n\n          const actualAuxiliaryAmountMinor = groupAddons.reduce(\n            (totalMinor, line) => totalMinor + Number(line.original_line_price || 0),\n            0\n          );\n          if (actualAuxiliaryAmountMinor !== integrity.expectedAmountMinor * parentQuantity) {\n            failures.push('cart_wide_group_amount_mismatch');\n          }\n        });\n\n        addons.forEach((addonLine) => {\n          const addonProperties = addonLine.properties || {};\n          const parentGroupId = String(addonProperties._optionsight_for || '');\n          if (\n            !knownGroupIds.has(parentGroupId)\n            || String(addonProperties._optionsight_group_id || '') !== parentGroupId\n          ) {\n            failures.push('cart_wide_orphan_or_mixed_addon');\n          }\n        });\n\n        const optionSightLines = [...parents, ...addons];\n        return {\n          ok: failures.length === 0,\n          reason: failures[0] || 'verified',\n          actualLineCount: optionSightLines.length,\n          actualAmountMinor: optionSightLines.reduce(\n            (totalMinor, line) => totalMinor + Number(line.original_line_price || 0),\n            0\n          ),\n          actualVariantIds: optionSightLines.map((line) => this.getCartLineVariantId(line)).filter(Boolean),\n        };\n      }\n\n      async rollbackCartGroup(groupId, cartSnapshot, mode) {\n        let cart = cartSnapshot;\n        try {\n          if (!cart) cart = await this.fetchCartSnapshot();\n          const groupLines = this.getCartGroupLines(cart, groupId);\n          const updates = {};\n          groupLines.forEach((line) => {\n            if (line?.key) updates[line.key] = 0;\n          });\n\n          if (Object.keys(updates).length > 0) {\n            const response = await fetch(routes.cart_update_url, {\n              method: 'POST',\n              headers: {\n                'Content-Type': 'application/json',\n                Accept: 'application/json',\n                'X-Requested-With': 'XMLHttpRequest',\n              },\n              body: JSON.stringify({ updates }),\n            });\n            if (response.ok === false) throw this.createIntegrityError('rollback_rejected');\n          }\n\n          const confirmedCart = await this.fetchCartSnapshot();\n          const remainingLines = this.getCartGroupLines(confirmedCart, groupId);\n          // A missing group cannot prove that a rejected/aborted add left no untagged line behind.\n          // Only report a confirmed rollback after observing and then removing this exact group.\n          const confirmed = groupLines.length > 0 && remainingLines.length === 0;\n          this.emitIntegrityDiagnostic('rollback', confirmed ? 'passed' : 'failed', {\n            mode,\n            reason: confirmed ? 'group_removed' : 'group_still_present',\n            groupId,\n            removedLineCount: groupLines.length - remainingLines.length,\n            remainingLineCount: remainingLines.length,\n          });\n          return { confirmed, removedLineCount: groupLines.length - remainingLines.length };\n        } catch (error) {\n          this.emitIntegrityDiagnostic('rollback', 'failed', {\n            mode,\n            reason: this.getIntegrityErrorReason(error, 'rollback_failed'),\n            groupId,\n          });\n          return { confirmed: false, removedLineCount: 0 };\n        }\n      }\n\n      createIntegrityError(reason, context = {}) {\n        const error = new Error('OptionSight checkout integrity failure');\n        error.optionsightReason = reason;\n        Object.assign(error, context);\n        return error;\n      }\n\n      getIntegrityErrorReason(error, fallback) {\n        return String(error?.optionsightReason || fallback);\n      }\n\n      getDiagnosticSummary(mode, expectation) {\n        return {\n          mode,\n          groupId: expectation.groupId,\n          expectedLineCount: expectation.items.length,\n          expectedAmountMinor: expectation.originalAmountMinor,\n          expectedVariantIds: expectation.items.map((item) => item.variantId),\n        };\n      }\n\n      emitIntegrityDiagnostic(stage, status, detail = {}) {\n        const diagnostic = {\n          version: 1,\n          stage,\n          status,\n          mode: detail.mode,\n          reason: detail.reason,\n          groupId: detail.groupId,\n          expectedLineCount: detail.expectedLineCount,\n          actualLineCount: detail.actualLineCount,\n          expectedAmountMinor: detail.expectedAmountMinor,\n          actualAmountMinor: detail.actualAmountMinor,\n          expectedVariantIds: detail.expectedVariantIds,\n          actualVariantIds: detail.actualVariantIds,\n          removedLineCount: detail.removedLineCount,\n          remainingLineCount: detail.remainingLineCount,\n        };\n        Object.keys(diagnostic).forEach((key) => diagnostic[key] === undefined && delete diagnostic[key]);\n        this.dispatchEvent(\n          new CustomEvent('optionsight:checkout-integrity', {\n            bubbles: true,\n            detail: diagnostic,\n          })\n        );\n        const log = status === 'failed' || status === 'blocked' ? console.error : console.info;\n        log.call(console, '[OptionSight checkout integrity]', diagnostic);\n        window.dataLayer?.push?.({ event: 'optionsight_checkout_integrity', ...diagnostic });\n      }\n\n      normalizeCartResponse(cartResponse) {\n        if (!Array.isArray(cartResponse?.items)) return cartResponse;\n        const parent = cartResponse.items.find((item) => !item?.properties?._optionsight_for) || cartResponse.items[0];\n        return parent ? { ...cartResponse, id: parent.id, key: parent.key } : cartResponse;\n      }\n\n      setProductSubmitDisabled(disabled) {\n        const form = document.getElementById(this.dataset.formId || '');\n        const buttons = Array.from(\n          form?.querySelectorAll('[data-product-purchase-button], [data-optionsight-direct-checkout]') || []\n        );\n        const productUnavailable = this.dataset.productUnavailable === 'true';\n        const checkoutDisabled = disabled || productUnavailable;\n        buttons.forEach((button) => {\n          if (checkoutDisabled) {\n            button.setAttribute('disabled', 'disabled');\n            button.setAttribute('aria-disabled', 'true');\n          } else {\n            button.removeAttribute('disabled');\n            button.removeAttribute('aria-disabled');\n          }\n        });\n\n        const productForm = form?.closest('product-form');\n        const acceleratedCheckout = form?.querySelector('[data-optionsight-accelerated-checkout]');\n        acceleratedCheckout?.toggleAttribute('inert', checkoutDisabled);\n        acceleratedCheckout?.setAttribute('aria-disabled', String(checkoutDisabled));\n        productForm?.toggleAttribute('data-optionsight-checkout-ready', !checkoutDisabled);\n      }\n\n      setSubmitLoading(button, loading) {\n        if (!button) return;\n        if (loading) button.setAttribute('aria-disabled', 'true');\n        else button.removeAttribute('aria-disabled');\n        button.classList.toggle('loading', loading);\n        button.querySelector('.loading__spinner')?.classList.toggle('hidden', !loading);\n      }\n\n      renderFormError(message) {\n        const productForm = this.form?.closest('product-form');\n        const wrapper = productForm?.querySelector('.product-form__error-message-wrapper');\n        const text = wrapper?.querySelector('.product-form__error-message');\n        if (!wrapper || !text) return;\n        wrapper.toggleAttribute('hidden', !message);\n        text.textContent = message || '';\n      }\n\n      uncheckConflictingOptions(selectedInput) {\n        const conflicts = this.parseConflicts(selectedInput);\n        if (!conflicts.length) return;\n        this.inputs.forEach((input) => {\n          if (input !== selectedInput && conflicts.includes(this.normalize(input.dataset.optionLabel))) input.checked = false;\n        });\n      }\n\n      parseConflicts(input) {\n        return (input.dataset.optionConflicts || '')\n          .split(',')\n          .map((value) => this.normalize(value))\n          .filter(Boolean);\n      }\n\n      parseVisibilityRule(value) {\n        if (!value) return null;\n        try {\n          return JSON.parse(value);\n        } catch {\n          return null;\n        }\n      }\n\n      setSafeHtml(element, html, fallback) {\n        const source = String(html || '').trim();\n        if (!source) {\n          element.textContent = fallback || '';\n          return;\n        }\n        const template = document.createElement('template');\n        template.innerHTML = source;\n        this.sanitizeRichTextFragment(template.content);\n        element.replaceChildren(template.content.cloneNode(true));\n      }\n\n      sanitizeRichTextFragment(fragment) {\n        Array.from(fragment.querySelectorAll('*')).forEach((node) => {\n          if (!OPTIONSIGHT_ALLOWED_RICH_TEXT_TAGS.has(node.tagName)) {\n            node.replaceWith(...node.childNodes);\n            return;\n          }\n          Array.from(node.attributes).forEach((attribute) => {\n            if (node.tagName === 'A' && ['href', 'title', 'target', 'rel'].includes(attribute.name)) return;\n            node.removeAttribute(attribute.name);\n          });\n          if (node.tagName === 'A') {\n            const href = node.getAttribute('href') || '';\n            if (!/^(https?:|mailto:|tel:|\\/|#)/i.test(href)) node.removeAttribute('href');\n            if (node.getAttribute('target') === '_blank') node.setAttribute('rel', 'noopener noreferrer');\n          }\n        });\n      }\n\n      getRowKind(selector) {\n        const value = String(selector || '').trim();\n        if (value === 'property' || value === 'heading' || value === 'note' || value === 'divider') return value;\n        if (value.startsWith('variant:') || /^\\d{8,}$/.test(value)) return 'product';\n        return 'property';\n      }\n\n      isChoiceKind(kind) {\n        return kind === 'property' || kind === 'product';\n      }\n\n      getGroupPresentation(row, group) {\n        const style = this.normalize(row.displayStyle);\n        if (style === 'vertical') return 'vertical';\n        if (style === 'horizontal') return 'horizontal';\n        if (/functions?\\d*|autosuck/i.test(group)) return 'vertical';\n        return 'horizontal';\n      }\n\n      getGroupTitle(group) {\n        const labels = {\n          EyeColour: 'Customize Your Doll\u2019s Eye Colour',\n          Eyecolour: 'Customize Your Doll\u2019s Eye Colour',\n          Skincolour: 'Doll\u2019s Skin Colour',\n          SkinColour: 'Doll\u2019s Skin Colour',\n          NippleColour: 'Nipple Colour',\n          Nipplecolour: 'Nipple Colour',\n          AreolaSize: 'Areola Size',\n          Areolasize: 'Areola Size',\n          AreolaSzie: 'Areola Size',\n          FingerNail: 'Fingernail Colour',\n          PublicHair: 'Pubic Hair Option',\n          PubicHair: 'Pubic Hair Option',\n          PremiumSkin: 'Premium Skin',\n          PremiumOptions: 'Premium Options',\n          Functions1: 'Premium Functions 1',\n          Functions2: 'Premium Functions 2',\n          Functions3: 'Premium Functions 3',\n        };\n        return labels[group] || group;\n      }\n\n      formatOptionList(labels) {\n        const values = [...new Set((labels || []).filter(Boolean))];\n        if (values.length <= 1) return values[0] || 'This option';\n        if (values.length === 2) return `${values[0]} and ${values[1]}`;\n        return `${values.slice(0, -1).join(', ')}, and ${values.at(-1)}`;\n      }\n\n      formatPrice(value) {\n        const source = String(value || '').trim();\n        if (!source) return '';\n        if (/free/i.test(source)) return 'Free';\n        const amount = this.parsePriceAmount(source);\n        if (amount <= 0) return source;\n        return `(+ ${this.formatMoney(amount)} ${this.getCurrency()})`;\n      }\n\n      formatPreviewLabel(label, price) {\n        const amount = this.parsePriceAmount(price);\n        if (amount <= 0) return String(label || '').trim();\n        return `+${this.formatMoney(amount)} ${this.getCurrency()} \u00B7 ${String(label || '').trim()}`;\n      }\n\n      parsePriceAmount(value) {\n        const source = String(value || '').trim();\n        if (!source || /free/i.test(source)) return 0;\n        const match = source.replace(/,/g, '').match(/-?\\d+(?:\\.\\d+)?/);\n        return match ? Math.max(0, Number(match[0])) : 0;\n      }\n\n      getCurrency() {\n        return window.Shopify?.currency?.active || 'USD';\n      }\n\n      formatMoney(amount) {\n        return new Intl.NumberFormat('en-US', {\n          style: 'currency',\n          currency: this.getCurrency(),\n        }).format(amount);\n      }\n\n      parseDimensions(value, fallbackWidth, fallbackHeight) {\n        const match = String(value || '').match(/(\\d+)x(\\d+)/i);\n        return match ? [Number(match[1]), Number(match[2])] : [fallbackWidth, fallbackHeight];\n      }\n\n      safeId(value) {\n        return String(value || 'option').replace(/[^a-z0-9_-]/gi, '-');\n      }\n\n      normalize(value) {\n        return decodeOptionSightOptionEntities(value).trim().toLowerCase();\n      }\n    }\n  );\n}\n"],
  "mappings": "AAAA,MAAM,mCAAqC,IAAI,IAAI,CAAC,IAAK,IAAK,KAAM,KAAM,IAAK,IAAK,QAAQ,CAAC,EACvF,4BAA8B,IAAU,GAAK,GAAK,IAClD,mCAAqC,KAAc,IACnD,iCAAmC,CACvC,IAAK,IACL,KAAM,IACN,GAAI,IACJ,GAAI,IACJ,KAAM,IACN,KAAM,GACR,EAEA,SAAS,gCAAgC,MAAO,CAC9C,IAAI,QAAU,OAAO,OAAS,EAAE,EAEhC,QAAS,KAAO,EAAG,KAAO,EAAG,MAAQ,EAAG,CACtC,MAAM,KAAO,QAAQ,QAAQ,oDAAsD,QAAW,CAC5F,MAAM,IAAM,OAAO,MAAM,EAAG,EAAE,EAAE,YAAY,EAC5C,GAAI,OAAO,OAAO,iCAAkC,GAAG,EAAG,OAAO,iCAAiC,GAAG,EAErG,MAAM,MAAQ,IAAI,WAAW,IAAI,EAC3B,UAAY,OAAO,SAAS,IAAI,MAAM,MAAQ,EAAI,CAAC,EAAG,MAAQ,GAAK,EAAE,EAC3E,GAAI,CAAC,OAAO,UAAU,SAAS,GAAK,UAAY,GAAK,UAAY,QAAU,OAAO,OAElF,GAAI,CACF,OAAO,OAAO,cAAc,SAAS,CACvC,MAAQ,CACN,OAAO,MACT,CACF,CAAC,EACD,GAAI,OAAS,QAAS,MACtB,QAAU,IACZ,CAEA,OAAO,OACT,CAEA,SAAS,gCAAgC,OAAQ,OAAQ,CACvD,OAAO,kBAAkB,OAAS,OAAO,SAAS,MAAM,GAAK,OAAO,UAAY,OAClF,CAEK,eAAe,IAAI,qBAAqB,GAC3C,eAAe,OACb,sBACA,cAAiC,WAAY,CAC3C,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,CAAC,EACf,KAAK,KAAO,KACZ,KAAK,OAAS,GACd,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,QAAU,KAAK,QAAQ,KAAK,IAAI,EACrC,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,WAAa,KAAK,WAAW,KAAK,IAAI,EAC3C,KAAK,oBAAsB,KAAK,oBAAoB,KAAK,IAAI,EAC7D,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EACvD,KAAK,iBAAmB,GACxB,KAAK,qBAAuB,IAC9B,CAEA,mBAAoB,CACb,KAAK,cACR,KAAK,YAAc,GACnB,KAAK,KAAO,KAAK,cAAc,yBAAyB,EACxD,KAAK,MAAQ,KAAK,cAAc,0BAA0B,EAC1D,KAAK,aAAe,KAAK,cAAc,kCAAkC,EACzE,KAAK,mBAAqB,KAAK,cAAc,yCAAyC,EACtF,KAAK,mBAAqB,KAAK,uBAAuB,EACtD,KAAK,cAAgB,IAAI,IACvB,CAAC,GAAG,KAAK,mBAAmB,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,UAAW,UAAU,IAAM,CAAC,UAAW,WAAa,GAAG,CAAC,CACvG,EACA,KAAK,yBAAyB,EAAI,EAClC,KAAK,YAAY,GAGnB,KAAK,uBAAuB,EACxB,KAAK,SACP,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAEhB,CAEA,wBAAyB,CACvB,KAAK,iBAAiB,SAAU,KAAK,QAAQ,EAC7C,KAAK,iBAAiB,QAAS,KAAK,OAAO,EAC3C,SAAS,iBAAiB,QAAS,KAAK,eAAe,EACvD,SAAS,iBAAiB,UAAW,KAAK,iBAAiB,EAC3D,OAAO,iBAAiB,SAAU,KAAK,cAAc,EACrD,OAAO,iBAAiB,WAAY,KAAK,UAAU,EACnD,SAAS,iBAAiB,SAAU,KAAK,mBAAmB,CAC9D,CAEA,sBAAuB,CACrB,KAAK,oBAAoB,SAAU,KAAK,QAAQ,EAChD,KAAK,oBAAoB,QAAS,KAAK,OAAO,EAC9C,SAAS,oBAAoB,QAAS,KAAK,eAAe,EAC1D,SAAS,oBAAoB,UAAW,KAAK,iBAAiB,EAC9D,OAAO,oBAAoB,SAAU,KAAK,cAAc,EACxD,OAAO,oBAAoB,WAAY,KAAK,UAAU,EACtD,SAAS,oBAAoB,SAAU,KAAK,mBAAmB,EAC/D,KAAK,MAAM,oBAAoB,SAAU,KAAK,SAAU,EAAI,EAC5D,KAAK,sBAAsB,oBAAoB,QAAS,KAAK,iBAAkB,EAAI,EACnF,KAAK,KAAO,KACZ,KAAK,qBAAuB,IAC9B,CAEA,MAAM,aAAc,CAClB,MAAM,MAAQ,KAAK,QAAQ,kBAAoB,IAC5C,MAAM,GAAG,EACT,IAAK,KAAQ,IAAI,KAAK,CAAC,EACvB,OAAO,OAAO,EAEjB,GAAI,CAAC,KAAK,MAAQ,KAAK,SAAW,EAAG,CACnC,KAAK,gBAAgB,EACrB,MACF,CAEA,KAAK,aAAa,YAAa,MAAM,EAErC,GAAI,CAQF,MAAM,MAPU,MAAM,QAAQ,IAC5B,KAAK,IAAI,MAAO,KAAQ,CACtB,MAAM,SAAW,MAAM,MAAM,GAAG,EAChC,GAAI,CAAC,SAAS,GAAI,MAAM,IAAI,MAAM,kBAAkB,GAAG,EAAE,EACzD,OAAO,SAAS,KAAK,CACvB,CAAC,CACH,GACqB,QAAS,QAAW,OAAO,MAAQ,CAAC,CAAC,EAC1D,KAAK,0BAA0B,IAAI,EACnC,KAAK,WAAW,IAAI,EACpB,KAAK,OAAS,MAAM,KAAK,KAAK,iBAAiB,0BAA0B,CAAC,EAC1E,KAAK,0BAA0B,EAC/B,MAAM,iBAAmB,KAAK,qBAAqB,EACnD,KAAK,OAAS,GACd,KAAK,gBAAgB,WAAW,EAC5B,KAAK,cACP,KAAK,gBAAgB,EACrB,KAAK,OAAO,GAEV,kBAAkB,eAAe,KAAK,sBAAsB,gBAAgB,EAChF,KAAK,cAAc,IAAI,YAAY,oBAAqB,CAAE,QAAS,EAAK,CAAC,CAAC,CAC5E,OAAS,MAAO,CACd,QAAQ,MAAM,KAAK,EACnB,KAAK,wBAAwB,gBAAiB,UAAW,CACvD,OAAQ,KAAK,wBAAwB,MAAO,kCAAkC,CAChF,CAAC,EACD,KAAK,gBAAgB,CACvB,CACF,CAEA,iBAAkB,CAChB,KAAK,OAAS,GACd,KAAK,gBAAgB,WAAW,EAChC,KAAK,UAAU,IAAI,4BAA4B,EAC3C,KAAK,QACP,KAAK,MAAM,OAAS,GACpB,KAAK,MAAM,YAAc,kFAE3B,KAAK,yBAAyB,EAAI,CACpC,CAEA,0BAA0B,KAAM,CAW9B,IAV2B,MAAM,QAAQ,IAAI,EAAI,KAAO,CAAC,GAAG,KAAM,KAAQ,CACxE,GAAI,KAAK,WAAW,KAAK,QAAQ,IAAM,UAAW,MAAO,GACzD,MAAM,UAAY,OAAO,IAAI,UAAY,EAAE,EAAE,QAAQ,aAAc,EAAE,EAAE,KAAK,EACtE,iBAAmB,OAAO,SAAS,EACzC,MACE,CAAC,OAAO,cAAc,gBAAgB,GACnC,kBAAoB,GACpB,CAAC,KAAK,oBAAoB,IAAI,SAAS,CAE9C,CAAC,EACsB,MAAM,KAAK,qBAAqB,mCAAmC,CAC5F,CAEA,WAAW,KAAM,CACf,MAAM,SAAW,SAAS,uBAAuB,EACjD,IAAI,aAAe,KACf,YAAc,EAElB,MAAM,WAAa,IAAM,CAClB,eACL,SAAS,OAAO,KAAK,kBAAkB,YAAY,CAAC,EACpD,aAAe,KACjB,EAEA,KAAK,QAAS,KAAQ,CACpB,MAAM,KAAO,KAAK,WAAW,IAAI,QAAQ,EACnC,MAAQ,OAAO,IAAI,OAAS,EAAE,EAAE,KAAK,EACrC,MAAQ,OAAO,IAAI,OAAS,EAAE,EAAE,KAAK,EAE3C,GAAI,KAAK,aAAa,IAAI,GAAK,MAAO,EAChC,CAAC,cAAgB,aAAa,SAAW,OAAS,cACpD,WAAW,EACX,aAAe,CAAE,MAAO,OAAS,UAAW,KAAM,CAAC,CAAE,GAEvD,aAAa,KAAK,KAAK,CAAE,IAAK,KAAM,MAAO,WAAY,CAAC,EACxD,aAAe,EACf,MACF,CAEA,GAAI,cAAgB,OAAS,aAAa,QAAU,MAAO,CACzD,aAAa,KAAK,KAAK,CAAE,IAAK,KAAM,MAAO,WAAY,CAAC,EACxD,MACF,CAEA,WAAW,EACX,MAAM,QAAU,KAAK,iBAAiB,IAAK,IAAI,EAC3C,SAAS,SAAS,OAAO,OAAO,CACtC,CAAC,EAED,WAAW,EACX,KAAK,KAAK,gBAAgB,QAAQ,CACpC,CAEA,iBAAiB,IAAK,KAAM,CAC1B,MAAM,MAAQ,OAAO,IAAI,OAAS,EAAE,EAAE,KAAK,EACrC,aAAe,OAAO,IAAI,cAAgB,KAAK,EAAE,KAAK,EAC5D,GAAI,OAAS,UAAW,CACtB,MAAM,QAAU,SAAS,cAAc,IAAI,EAC3C,eAAQ,UAAY,+BACb,OACT,CACA,GAAI,CAAC,OAAS,CAAC,CAAC,UAAW,MAAM,EAAE,SAAS,IAAI,EAAG,OAAO,KAE1D,MAAM,QAAU,SAAS,cAAc,KAAK,EAE5C,GADA,QAAQ,UAAY,wDAAwD,IAAI,GAC5E,OAAS,OAAQ,CACnB,MAAM,MAAQ,KAAK,UAAU,IAAI,UAAU,IAAM,WACjD,QAAQ,UAAU,IAAI,mCAAmC,MAAQ,QAAU,MAAM,EAAE,CACrF,CACA,YAAK,YAAY,QAAS,IAAI,cAAgB,IAAI,iBAAkB,YAAY,EACzE,OACT,CAEA,kBAAkB,OAAQ,CACxB,MAAM,MAAQ,SAAS,cAAc,SAAS,EACxC,SAAW,SAAS,cAAc,KAAK,EACvC,MAAQ,SAAS,cAAc,MAAM,EACrC,WAAa,SAAS,cAAc,MAAM,EAC1C,SAAW,SAAS,cAAc,KAAK,EACvC,QAAU,SAAS,cAAc,KAAK,EACtC,gBAAkB,SAAS,cAAc,KAAK,EAC9C,MAAQ,SAAS,cAAc,KAAK,EACpC,KAAO,SAAS,cAAc,KAAK,EACnC,WAAa,OAAO,KAAK,OAAO,CAAC,CAAE,KAAM,GAAI,IAAM,KAAK,aAAa,IAAI,GAAK,IAAI,KAAK,EACvF,SAAW,WAAW,CAAC,GAAG,KAAO,OAAO,KAAK,CAAC,GAAG,KAAO,CAAC,EACzD,aAAe,KAAK,qBAAqB,SAAU,OAAO,KAAK,EAC/D,SAAW,WAAW,KAAK,CAAC,CAAE,GAAI,IAAM,KAAK,UAAU,IAAI,YAAY,IAAM,UAAU,EACvF,QAAU,oBAAoB,KAAK,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,SAAS,WAAa,EAAE,CAAC,GAEtG,aAAM,UAAY,0DAA0D,YAAY,GACxF,MAAM,QAAQ,uBAAyB,OAAO,MAC9C,MAAM,QAAQ,wBAA0B,aACxC,MAAM,aAAa,mCAAoC,OAAO,QAAQ,CAAC,EACnE,SAAS,YAAW,MAAM,QAAQ,gBAAkB,SAAS,WAC7D,SAAS,iBAAgB,MAAM,QAAQ,qBAAuB,KAAK,UAAU,SAAS,cAAc,GAExG,SAAS,UAAY,qCACrB,MAAM,UAAY,mCAClB,MAAM,YAAc,SAAS,mBAAqB,KAAK,cAAc,OAAO,KAAK,EACjF,WAAW,UAAY,mCACvB,WAAW,QAAQ,4BAA8B,GACjD,WAAW,OAAS,GACpB,MAAM,OAAO,SAAS,eAAe,GAAG,EAAG,UAAU,EACjD,UAAU,MAAM,UAAU,IAAI,aAAa,EAE3C,KAAK,UAAU,OAAO,KAAK,IAAM,0BAA0B,SAAS,OAAO,KAAK,EAEpF,SAAS,UAAY,sCACrB,SAAS,QAAQ,0BAA4B,OAAO,MAEpD,QAAQ,UAAY,8DAA8D,YAAY,GAC9F,QAAQ,aAAa,OAAQ,MAAM,EACnC,gBAAgB,UAAY,wCAC5B,gBAAgB,GAAK,GAAG,OAAO,YAC/B,gBAAgB,QAAQ,2BAA6B,GACrD,gBAAgB,aAAa,OAAQ,QAAQ,EAC7C,gBAAgB,OAAS,GACzB,MAAM,UAAY,6BAClB,KAAK,UAAY,kCACjB,KAAK,GAAK,QACV,KAAK,QAAQ,qBAAuB,GAEpC,OAAO,KAAK,QAAQ,CAAC,CAAE,IAAK,KAAM,KAAM,IAAM,CAC5C,GAAI,KAAK,aAAa,IAAI,GAAK,IAAI,MAAO,CACxC,QAAQ,OAAO,KAAK,iBAAiB,IAAK,KAAM,MAAO,YAAY,CAAC,EACpE,MACF,CAEA,MAAM,KAAO,KAAK,iBAAiB,IAAK,IAAI,EACxC,MAAM,MAAM,OAAO,IAAI,CAC7B,CAAC,EAED,KAAK,OAAO,QAAS,eAAe,EAChC,MAAM,SAAS,QAAQ,KAAK,OAAO,KAAK,EAC5C,MAAM,OAAO,SAAU,SAAU,IAAI,EAC9B,KACT,CAEA,iBAAiB,IAAK,KAAM,MAAO,aAAc,CAC/C,MAAM,KAAO,SAAS,cAAc,KAAK,EACnC,MAAQ,SAAS,cAAc,OAAO,EACtC,MAAQ,SAAS,cAAc,OAAO,EACtC,SAAW,eAAe,KAAK,OAAO,KAAK,QAAQ,cAAgB,KAAK,CAAC,IAAI,KAAK,GAClF,KAAO,KAAK,UAAU,IAAI,IAAI,IAAM,OAAS,UAAY,QAAU,UACnE,SAAW,EAAQ,IAAI,SAEvB,SADc,KAAK,UAAU,IAAI,aAAe,IAAI,UAAU,IACnC,WAAc,CAAC,UAAY,eAAiB,aACvE,sBAAwB,UAAY,eAAiB,WACrD,UAAY,KAAK,mBAAmB,IAAK,IAAI,EAC7C,YAAc,gCAAgC,IAAI,KAAK,EAAE,KAAK,EAC9D,YAAc,gCAAgC,IAAI,KAAK,EAAE,KAAK,EAC9D,aAAe,gCAAgC,IAAI,cAAgB,WAAW,EAAE,KAAK,EAE3F,KAAK,UAAY,CACf,4BACA,SAAW,mCAAqC,kCAChD,SAAW,oCAAsC,GACjD,eAAiB,WAAa,sCAAwC,GACtE,sBAAwB,2CAA6C,EACvE,EACG,OAAO,OAAO,EACd,KAAK,GAAG,EACX,KAAK,aAAa,OAAQ,UAAU,EAEpC,MAAM,UAAY,6CAClB,MAAM,GAAK,SACX,MAAM,KAAO,OAAS,QAAU,WAAa,QAC7C,MAAM,KAAO,eAAe,KAAK,OAAO,KAAK,QAAQ,cAAgB,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,WAAa,IAAI,KAAK,CAAC,GACtH,MAAM,QAAU,KAAK,UAAU,IAAI,WAAW,IAAM,UACpD,MAAM,QAAQ,iBAAmB,GACjC,MAAM,QAAQ,YAAc,YAC5B,MAAM,QAAQ,mBAAqB,aACnC,MAAM,QAAQ,WAAa,KAC3B,MAAM,QAAQ,gBAAkB,OAAS,UAAY,OAAO,IAAI,UAAY,EAAE,EAAE,QAAQ,aAAc,EAAE,EAAI,GAC5G,MAAM,QAAQ,YAAc,YAC5B,MAAM,QAAQ,mBAAqB,KAAK,cAAc,WAAW,EACjE,MAAM,QAAQ,WAAa,KAC3B,MAAM,QAAQ,gBAAkB,gCAAgC,IAAI,SAAS,EAAE,KAAK,EACpF,MAAM,QAAQ,eAAiB,OAAO,IAAI,UAAY,EAAE,EAAE,KAAK,EAC/D,MAAM,QAAQ,gBAAkB,UAChC,MAAM,QAAQ,kBAAoB,OAAO,IAAI,aAAe,EAAE,EAAE,KAAK,EACrE,MAAM,QAAQ,mBAAqB,OAAO,IAAI,cAAgB,EAAE,EAAE,KAAK,EACvE,MAAM,QAAQ,gBAAkB,OAAO,IAAI,WAAa,EAAE,EAAE,KAAK,EACjE,MAAM,QAAQ,kBAAoB,OAAO,IAAI,aAAe,EAAE,EAAE,KAAK,EACrE,MAAM,QAAQ,kBAAoB,gCAAgC,IAAI,WAAW,EAAE,KAAK,EACxF,MAAM,QAAQ,yBAA2B,OAAO,IAAI,oBAAsB,EAAE,EAAE,KAAK,EAEnF,MAAM,UAAY,8BAClB,MAAM,QAAU,SAChB,MAAM,aAAa,aAAc,CAAC,aAAc,KAAK,YAAY,SAAS,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,EAElG,UAAY,KAAK,UAAU,IAAI,YAAY,EAAE,SAAS,MAAM,GAC9D,MAAM,aAAa,gBAAiB,OAAO,EAGzC,UAAU,MAAM,OAAO,KAAK,aAAa,IAAK,UAAW,YAAY,CAAC,EAE1E,IAAI,KAAO,KACX,GAAI,CAAC,UAAY,eAAiB,YAAc,SAAU,CACxD,KAAO,SAAS,cAAc,MAAM,EACpC,MAAM,MAAQ,SAAS,cAAc,MAAM,EAC3C,KAAK,UAAY,mCACjB,MAAM,UAAY,oCAClB,MAAM,YAAc,aACpB,KAAK,OAAO,KAAK,EAEjB,MAAM,MAAQ,KAAK,YAAY,SAAS,EACxC,GAAI,MAAO,CACT,MAAM,aAAe,SAAS,cAAc,MAAM,EAClD,aAAa,UAAY,6BACzB,aAAa,YAAc,MAC3B,KAAK,OAAO,SAAS,eAAe,GAAG,EAAG,YAAY,CACxD,CAEA,GAAI,IAAI,gBAAkB,IAAI,SAAU,CACtC,MAAM,KAAO,SAAS,cAAc,MAAM,EAC1C,KAAK,UAAY,mCACjB,KAAK,YAAY,KAAM,IAAI,eAAgB,IAAI,QAAQ,EACvD,KAAK,OAAO,IAAI,CAClB,CACK,uBAAuB,MAAM,OAAO,IAAI,CAC/C,CAEA,YAAK,OAAO,MAAO,KAAK,EACpB,MAAQ,uBAAuB,KAAK,OAAO,IAAI,EAC5C,IACT,CAEA,2BAA4B,CAC1B,KAAK,iBAAiB,iCAAiC,EAAE,QAAS,OAAU,CAC1E,MAAM,OAAS,MAAM,KAAK,MAAM,iBAAiB,0BAA0B,CAAC,EAC5E,GAAI,OAAO,SAAW,GAAK,OAAO,KAAM,OAAU,MAAM,OAAO,EAAG,OAElE,MAAM,WAAa,OAAO,CAAC,EACvB,KAAK,iBAAiB,WAAW,QAAQ,eAAe,EAAI,IAEhE,WAAW,QAAU,GACrB,WAAW,QAAQ,oBAAsB,gBAC3C,CAAC,CACH,CAEA,aAAa,IAAK,UAAW,aAAc,CACzC,MAAM,OAAS,SAAS,cAAc,MAAM,EACtC,MAAQ,SAAS,cAAc,KAAK,EACpC,QAAU,SAAS,cAAc,MAAM,EACvC,aAAe,SAAS,cAAc,MAAM,EAC5C,aAAe,SAAS,cAAc,KAAK,EAC3C,CAAC,YAAa,YAAY,EAAI,KAAK,gBAAgB,IAAI,WAAY,GAAI,EAAE,EACzE,CAAC,aAAc,aAAa,EAAI,KAAK,gBAAgB,IAAI,iBAAkB,IAAK,GAAG,EAEzF,cAAO,UAAY,8BACnB,OAAO,MAAM,YAAY,6BAA8B,GAAG,WAAW,IAAI,EACzE,OAAO,MAAM,YAAY,8BAA+B,GAAG,YAAY,IAAI,EAC3E,MAAM,IAAM,IAAI,SAChB,MAAM,IAAM,GACZ,MAAM,QAAU,OAChB,MAAM,SAAW,QACjB,MAAM,MAAQ,YACd,MAAM,OAAS,aACf,OAAO,OAAO,KAAK,EAEf,KAAK,UAAU,IAAI,YAAY,EAAE,SAAS,MAAM,IAClD,QAAQ,UAAY,+BACpB,QAAQ,aAAa,OAAQ,SAAS,EACtC,QAAQ,MAAM,YAAY,8BAA+B,GAAG,YAAY,IAAI,EAC5E,QAAQ,MAAM,YAAY,+BAAgC,GAAG,aAAa,IAAI,EAC9E,aAAa,UAAY,qCACzB,aAAa,YAAc,KAAK,mBAAmB,aAAc,SAAS,EAC1E,aAAa,IAAM,IAAI,SACvB,aAAa,IAAM,GACnB,aAAa,QAAU,OACvB,aAAa,MAAQ,aACrB,aAAa,OAAS,cACtB,QAAQ,OAAO,aAAc,YAAY,EACzC,OAAO,OAAO,OAAO,GAGhB,MACT,CAEA,QAAQ,MAAO,CACb,MAAM,SAAW,MAAM,OAAO,QAAQ,SAAS,EAC/C,GAAI,UAAY,KAAK,SAAS,QAAQ,EAAG,CACvC,KAAK,0BAA0B,QAAQ,EACvC,MACF,CAEA,MAAM,cAAgB,MAAM,OAAO,QAAQ,8BAA8B,EACnE,aAAe,eAAe,QAC9B,yBAA2B,KAAK,iCAAiC,YAAY,EAGnF,GAFI,0BAA0B,MAAM,eAAe,EAE/C,KAAK,gCAAgC,YAAY,EAAG,CACtD,MAAM,eAAe,EACrB,KAAK,0BAA0B,YAAY,EAC3C,KAAK,mBAAmB,EACxB,MACF,CAEA,MAAM,QAAU,eAAe,cAAc,+BAA+B,EAC5E,GAAI,eAAiB,SAAW,KAAK,SAAS,aAAa,GAAK,KAAK,qBAAqB,EAAG,CAC3F,GAAI,cAAc,SAAW,CAAC,yBAA0B,CACtD,KAAK,mBAAmB,EACxB,MACF,CAEA,MAAM,WAAa,CAAC,cAAc,UAAU,SAAS,iBAAiB,EACtE,KAAK,mBAAmB,aAAa,EACrC,cAAc,UAAU,OAAO,kBAAmB,UAAU,EAC5D,cAAc,aAAa,gBAAiB,OAAO,UAAU,CAAC,EAC1D,WACF,KAAK,2BAA2B,cAAe,OAAO,EAEtD,KAAK,0BAA0B,OAAO,EAExC,MACF,CACF,CAEA,gBAAgB,MAAO,CACrB,MAAM,KAAO,MAAM,OAAO,UAAU,SAAS,EACzC,KAAK,eAAe,IAAI,GAAG,KAAK,8BAA8B,EAClE,MAAM,WAAa,KAAK,cAAc,8CAA8C,EAC/E,aACD,gCAAgC,WAAY,MAAM,MAAM,GAC5D,KAAK,mBAAmB,EAC1B,CAEA,eAAe,KAAM,CACnB,GAAI,CAAC,KAAM,MAAO,GAClB,GAAI,CACF,MAAM,IAAM,IAAI,IAAI,KAAK,KAAM,OAAO,SAAS,IAAI,EACnD,OAAO,IAAI,SAAW,OAAO,SAAS,QAAU,aAAa,KAAK,IAAI,QAAQ,CAChF,MAAQ,CACN,MAAO,EACT,CACF,CAEA,kBAAkB,MAAO,CACvB,GAAI,MAAM,MAAQ,SAAU,CAC1B,KAAK,mBAAmB,EACxB,MACF,CAEA,MAAM,MAAQ,MAAM,OAAO,UAAU,0BAA0B,EAC/D,IACG,MAAM,MAAQ,KAAO,MAAM,OAAS,UACrC,KAAK,SAAS,KAAK,GACnB,KAAK,iCAAiC,KAAK,EAC3C,CACA,MAAM,eAAe,EACrB,MACF,EAGG,MAAM,MAAQ,KAAO,MAAM,OAAS,UACrC,KAAK,SAAS,KAAK,GACnB,KAAK,gCAAgC,KAAK,IAE1C,MAAM,eAAe,EACrB,KAAK,0BAA0B,KAAK,EAExC,CAEA,gBAAiB,CACf,GAAI,CAAC,KAAK,qBAAqB,EAAG,CAChC,KAAK,mBAAmB,EACxB,MACF,CACA,MAAM,OAAS,KAAK,cAAc,8CAA8C,EAC1E,QAAU,QAAQ,cAAc,+BAA+B,EACjE,QAAU,SAAS,KAAK,2BAA2B,OAAQ,OAAO,CACxE,CAEA,YAAa,CACX,GAAI,CAAC,KAAK,OAAQ,OAClB,MAAM,iBAAmB,KAAK,qBAAqB,EAC9C,mBACL,KAAK,OAAO,EACR,iBAAiB,eAAe,KAAK,sBAAsB,gBAAgB,EACjF,CAEA,oBAAoB,MAAO,CAEzB,GADI,CAAC,KAAK,QAAU,MAAM,QAAQ,OAAS,KAAK,MAC5C,CAAC,CAAC,KAAM,WAAY,cAAc,EAAE,SAAS,MAAM,OAAO,IAAI,EAAG,OACrE,MAAM,QAAU,KAAK,OAAO,OAAQ,OAAU,MAAM,SAAW,CAAC,MAAM,QAAQ,EACxE,WAAa,KAAK,sBAAsB,OAAO,EACrD,KAAK,yBAAyB,CAAC,WAAW,QAAQ,CACpD,CAEA,sBAAuB,CACrB,OAAO,OAAO,aAAa,oBAAoB,EAAE,SAAW,OAAO,YAAc,GACnF,CAEA,2BAA2B,OAAQ,QAAS,CAC1C,MAAM,cAAgB,SAAS,gBAAgB,aAAe,OAAO,WAC/D,eAAiB,GACvB,QAAQ,MAAM,eAAe,+BAA+B,EAC5D,QAAQ,UAAU,OAAO,UAAU,EAEnC,IAAI,KAAO,QAAQ,sBAAsB,EACrC,OAAS,EACT,KAAK,KAAO,iBAAgB,QAAU,eAAiB,KAAK,MAC5D,KAAK,MAAQ,OAAS,cAAgB,iBACxC,QAAU,KAAK,MAAQ,QAAU,cAAgB,iBAEnD,QAAQ,MAAM,YAAY,gCAAiC,GAAG,KAAK,MAAM,MAAM,CAAC,IAAI,EAEpF,KAAO,QAAQ,sBAAsB,EACjC,KAAK,IAAM,gBAAgB,QAAQ,UAAU,IAAI,UAAU,EAC/D,OAAO,aAAa,gBAAiB,MAAM,CAC7C,CAEA,0BAA0B,QAAS,CACjC,SAAS,MAAM,eAAe,+BAA+B,EAC7D,SAAS,UAAU,OAAO,UAAU,CACtC,CAEA,mBAAmB,OAAS,KAAM,CAChC,KAAK,iBAAiB,8CAA8C,EAAE,QAAS,QAAW,CACpF,SAAW,SACf,OAAO,UAAU,OAAO,iBAAiB,EACzC,OAAO,aAAa,gBAAiB,OAAO,EAC5C,KAAK,0BAA0B,OAAO,cAAc,+BAA+B,CAAC,EACtF,CAAC,CACH,CAEA,SAAS,MAAO,CACd,MAAM,MAAQ,MAAM,OAAO,QAAQ,0BAA0B,EACzD,CAAC,OAAS,CAAC,KAAK,SAAS,KAAK,IAClC,KAAK,0BAA0B,KAAK,EACpC,KAAK,OAAO,EACZ,KAAK,aAAa,EACpB,CAEA,gCAAgC,MAAO,CACrC,MAAI,CAAC,OAAO,SAAW,KAAK,UAAU,MAAM,QAAQ,UAAU,IAAM,SAAiB,GACvE,MAAM,QAAQ,iCAAiC,GAE/C,QAAQ,4BAA8B,MACtD,CAEA,iCAAiC,MAAO,CACtC,GAAI,CAAC,OAAO,QAAS,MAAO,GAC5B,MAAM,MAAQ,MAAM,QAAQ,iCAAiC,EAC7D,OAAI,OAAO,QAAQ,4BAA8B,OAAe,GAEzD,CAAC,MAAM,KAAK,MAAM,iBAAiB,0BAA0B,CAAC,EAAE,KACpE,WAAc,YAAc,OAAS,UAAU,SAAW,CAAC,UAAU,QACxE,CACF,CAEA,0BAA0B,MAAO,CAC/B,MAAM,QAAU,GAChB,KAAK,OAAO,EACZ,KAAK,aAAa,CACpB,CAEA,mBAAoB,CAClB,OAAO,IAAI,IACT,CAAC,GAAG,KAAK,uBAAuB,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,UAAW,UAAU,IAAM,CAAC,UAAW,WAAa,GAAG,CAAC,CAC7G,CACF,CAEA,wBAAyB,CACvB,MAAM,OAAS,KAAK,cAAc,mCAAmC,EACrE,GAAI,CAAC,OAAQ,OAAO,IAAI,IACxB,GAAI,CACF,MAAM,KAAO,KAAK,MAAM,OAAO,aAAe,IAAI,EAClD,OAAO,IAAI,IACT,KACG,OAAQ,KAAQ,IAAI,YAAc,EAAK,EACvC,IAAK,KAAQ,CAAC,OAAO,IAAI,IAAM,EAAE,EAAG,OAAO,IAAI,UAAU,CAAC,CAAC,EAC3D,OAAO,CAAC,CAAC,GAAI,UAAU,IAAM,IAAM,OAAO,cAAc,UAAU,GAAK,YAAc,CAAC,CAC3F,CACF,MAAQ,CACN,OAAO,IAAI,GACb,CACF,CAEA,mBAAmB,IAAK,KAAM,CAC5B,GAAI,OAAS,UAAW,OAAO,OAAO,IAAI,OAAS,EAAE,EAAE,KAAK,EAC5D,MAAM,UAAY,OAAO,IAAI,UAAY,EAAE,EAAE,QAAQ,aAAc,EAAE,EACrE,OAAK,KAAK,eAAe,IAAI,SAAS,EAC/B,OAAO,KAAK,cAAc,IAAI,SAAS,CAAC,EADC,OAAO,IAAI,OAAS,EAAE,EAAE,KAAK,CAE/E,CAEA,uBAAwB,CAEtB,MAAO,2BADY,OAAO,KAAK,QAAQ,WAAa,OAAO,SAAS,UAAY,EAAE,EAAE,KAAK,CAC7C,IAAI,KAAK,QAAQ,cAAgB,EAAE,EACjF,CAEA,6BAA8B,CAC5B,MAAO,wBAAwB,OAAO,SAAS,QAAQ,IAAI,KAAK,QAAQ,cAAgB,EAAE,EAC5F,CAEA,oBAAoB,MAAO,CACzB,MAAO,CACL,MAAM,QAAQ,gBACd,MAAM,QAAQ,YACd,MAAM,QAAQ,YACd,MAAM,QAAQ,eAChB,EACG,IAAK,OAAU,OAAO,OAAS,EAAE,EAAE,KAAK,CAAC,EACzC,KAAK,IAAI,CACd,CAEA,oBAAoB,MAAO,CACzB,MAAO,CAAC,MAAM,QAAQ,gBAAiB,MAAM,QAAQ,sBAAsB,EACxE,IAAK,OAAU,OAAO,OAAS,EAAE,EAAE,KAAK,CAAC,EACzC,KAAK,IAAI,CACd,CAEA,cAAe,CACb,MAAM,WAAa,KAAK,sBAAsB,EACxC,KAAO,CAAC,WAAY,KAAK,4BAA4B,CAAC,EAE5D,UAAW,cAAe,CAAC,eAAgB,gBAAgB,EACzD,UAAW,OAAO,KAChB,GAAI,CACF,MAAM,QAAU,OAAO,WAAW,EAC5B,IAAM,SAAS,QAAQ,GAAG,EAChC,GAAI,CAAC,IAAK,SACV,MAAM,SAAW,KAAK,MAAM,GAAG,EACzB,QAAU,OAAO,UAAU,OAAO,EACxC,GAAI,CAAC,OAAO,SAAS,OAAO,GAAK,KAAK,IAAI,EAAI,QAAU,4BAA6B,CACnF,QAAQ,WAAW,GAAG,EACtB,QACF,CACA,OAAI,MAAQ,YAAc,cAAgB,iBAAgB,KAAK,cAAc,QAAQ,EAC9E,QACT,MAAQ,CAER,CAIJ,OAAO,IACT,CAEA,cAAc,SAAU,CACtB,MAAM,WAAa,KAAK,UAAU,QAAQ,EAC1C,UAAW,cAAe,CAAC,eAAgB,gBAAgB,EACzD,GAAI,CACF,OAAO,WAAW,EAAE,QAAQ,KAAK,sBAAsB,EAAG,UAAU,EACpE,MACF,MAAQ,CAER,CAEJ,CAEA,aAAa,CAAE,cAAgB,GAAO,aAAe,IAAK,EAAI,CAAC,EAAG,CAChE,GAAI,CAAC,KAAK,OAAO,OAAQ,OACzB,MAAM,SAAW,KAAK,OAAO,OAAQ,OAAU,MAAM,OAAO,EAAE,IAAK,OAAU,KAAK,oBAAoB,KAAK,CAAC,EAC5G,KAAK,cAAc,CAAE,SAAU,cAAe,aAAc,QAAS,KAAK,IAAI,CAAE,CAAC,CACnF,CAEA,0BAA0B,KAAM,CAC1B,KAAK,SAAW,UAAY,qBAAqB,KAAK,KAAK,aAAa,MAAM,GAAK,EAAE,GAIzF,KAAK,aAAa,CACpB,CAEA,+BAAgC,CAC9B,KAAK,aAAa,CAChB,cAAe,GACf,aAAc,CACZ,OAAQ,cACR,YAAa,KAAK,qBAAqB,EAAI,GAAK,IAChD,QAAS,OAAO,OAClB,CACF,CAAC,CACH,CAEA,sBAAuB,CACrB,MAAM,SAAW,KAAK,aAAa,EACnC,GAAI,CAAC,MAAM,QAAQ,UAAU,QAAQ,EAAG,OAAO,KAC/C,MAAM,SAAW,IAAI,IAAI,SAAS,QAAQ,EAC1C,KAAK,OAAO,QAAS,OAAU,CAC7B,MAAM,QAAU,SAAS,IAAI,KAAK,oBAAoB,KAAK,CAAC,CAC9D,CAAC,EACD,KAAK,0BAA0B,EAC/B,MAAM,4BACJ,SAAS,eACN,SAAS,cAAc,SAAW,eAClC,KAAK,IAAI,EAAI,OAAO,SAAS,OAAO,GAAK,mCAC9C,OAAI,SAAS,eAAe,KAAK,aAAa,CAAE,cAAe,EAAM,CAAC,EAC/D,CAAE,GAAG,SAAU,cAAe,2BAA4B,CACnE,CAEA,sBAAsB,SAAU,CAC9B,MAAM,YAAc,UAAU,aACxB,QAAU,IAAM,CACpB,GAAI,aAAa,SAAW,eAAiB,OAAO,SAAS,YAAY,WAAW,EAAG,CACrF,OAAO,SAAS,CAAE,IAAK,KAAK,sBAAsB,EAAE,IAAM,YAAY,YAAa,SAAU,MAAO,CAAC,EACrG,MACF,CACA,MAAM,OAAS,MAAM,KAAK,KAAK,iBAAiB,iCAAiC,CAAC,EAAE,KACjF,OAAU,KAAK,oBAAoB,KAAK,IAAM,aAAa,GAC9D,EACI,QAAU,OAAO,SAAS,aAAa,WAAW,EACpD,OAAO,SAAS,CAAE,IAAK,OAAO,sBAAsB,EAAE,IAAM,YAAY,YAAa,SAAU,MAAO,CAAC,EAC9F,OAAO,SAAS,aAAa,OAAO,GAC7C,OAAO,SAAS,CAAE,IAAK,YAAY,QAAS,SAAU,MAAO,CAAC,CAElE,EACA,sBAAsB,IAAM,sBAAsB,OAAO,CAAC,EAC1D,OAAO,WAAW,QAAS,GAAG,CAChC,CAEA,QAAS,CACP,KAAK,qBAAqB,EAC1B,MAAM,iBAAmB,KAAK,OAAO,OAAQ,OAAU,MAAM,SAAW,CAAC,MAAM,QAAQ,EACjF,gBAAkB,IAAI,IACtB,eAAiB,IAAI,IAE3B,iBAAiB,QAAS,OAAU,CAClC,MAAM,YAAc,MAAM,QAAQ,oBAAsB,MAAM,QAAQ,aAAe,GACrF,KAAK,eAAe,KAAK,EAAE,QAAS,UAAa,CAC/C,MAAM,QAAU,gBAAgB,IAAI,QAAQ,GAAK,CAAC,EAC9C,aAAe,CAAC,QAAQ,SAAS,WAAW,GAAG,QAAQ,KAAK,WAAW,EAC3E,gBAAgB,IAAI,SAAU,OAAO,CACvC,CAAC,CACH,CAAC,EAED,KAAK,OAAO,QAAS,OAAU,CAC7B,MAAM,MAAQ,MAAM,QAAQ,iCAAiC,EACvD,OAAS,EAAQ,OAAO,OACxB,eAAiB,gBAAgB,IAAI,KAAK,UAAU,MAAM,QAAQ,WAAW,CAAC,GAAK,CAAC,EACpF,QAAU,CAAC,QAAU,eAAe,OAAS,GAAK,CAAC,MAAM,QACzD,KAAO,MAAM,QAAQ,4BAA4B,EACjD,MAAQ,MAAM,cAAc,8BAA8B,EAC1D,QAAU,OAAO,cAAc,qCAAqC,EAI1E,GAHA,MAAM,SAAW,QAAU,QAC3B,MAAM,gBAAgB,gBAAiB,QAAU,OAAO,EACxD,MAAM,UAAU,OAAO,gBAAiB,OAAO,EAC3C,SAAW,MAAO,CACpB,MAAM,UAAY,eAAe,KAAK,IAAQ,EACxC,QAAU,eAAe,IAAI,KAAK,GAAK,IAAI,IAC3C,OAAS,QAAQ,IAAI,SAAS,GAAK,CAAE,cAAe,CAAC,EAAG,aAAc,cAAe,EACrF,aAAe,MAAM,QAAQ,oBAAsB,MAAM,QAAQ,aAAe,GAClF,cAAgB,CAAC,OAAO,cAAc,SAAS,YAAY,GAAG,OAAO,cAAc,KAAK,YAAY,EACxG,QAAQ,IAAI,UAAW,MAAM,EAC7B,eAAe,IAAI,MAAO,OAAO,CACnC,CACI,OAAS,UACP,QAAS,MAAM,aAAa,mBAAoB,QAAQ,EAAE,EACzD,MAAM,gBAAgB,kBAAkB,EAEjD,CAAC,EAED,KAAK,iBAAiB,iCAAiC,EAAE,QAAS,OAAU,CAC1E,MAAM,QAAU,MAAM,cAAc,qCAAqC,EACzE,GAAI,CAAC,QAAS,OACd,MAAM,QAAU,CAAC,GAAI,eAAe,IAAI,KAAK,GAAG,OAAO,GAAK,CAAC,CAAE,EAC/D,QAAQ,YAAc,QACnB,IAAI,CAAC,CAAE,cAAe,YAAa,IAAM,CACxC,MAAM,QAAU,KAAK,iBAAiB,aAAa,EAC7C,QAAU,KAAK,iBAAiB,YAAY,EAC5C,YAAc,cAAc,SAAW,EAAI,KAAO,MAClD,WAAa,aAAa,SAAW,EAAI,KAAO,MACtD,MAAO,GAAG,OAAO,IAAI,WAAW,sBAAsB,OAAO,IAAI,UAAU,YAC7E,CAAC,EACA,KAAK,GAAG,EACX,QAAQ,OAAS,QAAQ,SAAW,CACtC,CAAC,EAED,MAAM,QAAU,KAAK,OAAO,OAAQ,OAAU,MAAM,SAAW,CAAC,MAAM,QAAQ,EAC9E,KAAK,qBAAqB,OAAO,EACjC,KAAK,mBAAmB,OAAO,EAC/B,MAAM,WAAa,KAAK,sBAAsB,OAAO,EACrD,KAAK,yBAAyB,CAAC,KAAK,QAAU,CAAC,WAAW,QAAQ,EAClE,KAAK,gBAAgB,4BAA6B,WAAW,QAAQ,CACvE,CAEA,sBAAuB,CACrB,MAAM,SAAW,KAAK,6BAA6B,EACnD,KAAK,iBAAiB,+BAA+B,EAAE,QAAS,OAAU,CACxE,MAAM,KAAO,KAAK,oBAAoB,MAAM,QAAQ,oBAAoB,EAClE,QAAU,KAAK,uBAAuB,KAAM,QAAQ,EAC1D,MAAM,OAAS,CAAC,QAChB,MAAM,aAAa,cAAe,OAAO,CAAC,OAAO,CAAC,CACpD,CAAC,CACH,CAEA,8BAA+B,CAC7B,MAAM,OAAS,IAAI,IACnB,YAAK,OAAO,QAAS,OAAU,CAC7B,GAAI,CAAC,MAAM,SAAW,MAAM,SAAU,OACtC,MAAM,UAAY,MAAM,QAAQ,iBAAmB,GAC9C,WACL,OAAO,IAAI,UAAW,CAAC,GAAI,OAAO,IAAI,SAAS,GAAK,CAAC,EAAI,MAAM,QAAQ,aAAe,EAAE,CAAC,CAC3F,CAAC,EACM,MACT,CAEA,uBAAuB,KAAM,eAAgB,CAC3C,GAAI,CAAC,MAAQ,CAAC,MAAM,QAAQ,KAAK,KAAK,GAAK,KAAK,MAAM,SAAW,EAAG,MAAO,GAC3E,MAAM,QAAU,KAAK,MAAM,IAAK,WAAc,CAC5C,MAAM,OAAS,eAAe,IAAI,OAAO,UAAU,QAAU,EAAE,EAAE,KAAK,CAAC,GAAK,CAAC,EAC7E,OAAI,OAAO,UAAU,OAAS,EAAE,EAAE,YAAY,IAAM,SAAiB,GAC9D,OAAO,KAAM,OAAU,KAAK,UAAU,KAAK,IAAM,KAAK,UAAU,UAAU,KAAK,CAAC,CACzF,CAAC,EACK,QAAU,KAAK,QAAU,MAAQ,QAAQ,KAAK,OAAO,EAAI,QAAQ,MAAM,OAAO,EACpF,OAAO,KAAK,UAAY,OAAS,CAAC,QAAU,OAC9C,CAEA,qBAAqB,cAAe,CAClC,MAAM,OAAS,IAAI,IACnB,cAAc,QAAS,OAAU,CAC/B,MAAM,MAAQ,MAAM,QAAQ,aAAe,GAC3C,OAAO,IAAI,MAAO,CAAC,GAAI,OAAO,IAAI,KAAK,GAAK,CAAC,EAAI,KAAK,CAAC,CACzD,CAAC,EAED,KAAK,iBAAiB,iCAAiC,EAAE,QAAS,cAAiB,CACjF,MAAM,MAAQ,aAAa,QAAQ,wBAA0B,GACvD,eAAiB,OAAO,IAAI,KAAK,GAAK,CAAC,EACvC,SAAW,eACd,IAAK,OAAU,MAAM,QAAQ,oBAAsB,MAAM,QAAQ,aAAe,EAAE,EAClF,OAAO,OAAO,EACX,MAAQ,aAAa,cAAc,oCAAoC,EACvE,MAAQ,aAAa,cAAc,uCAAuC,EAC1E,MAAQ,eAAe,OAC3B,CAAC,IAAK,QAAU,IAAM,KAAK,iBAAiB,MAAM,QAAQ,eAAe,EACzE,CACF,EACI,QACF,MAAM,YAAc,SAAS,KAAK,IAAI,EACtC,MAAM,OAAS,SAAS,SAAW,GAEjC,QACF,MAAM,YAAc,MAAQ,EAAI,MAAM,KAAK,YAAY,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,IAAM,GACzF,MAAM,OAAS,OAAS,GAE1B,aAAa,UAAU,OAAO,cAAe,SAAS,OAAS,CAAC,CAClE,CAAC,CACH,CAEA,mBAAmB,cAAe,CAChC,MAAM,WAAa,KAAK,0BAA0B,aAAa,EACzD,MAAQ,WAAa,IACvB,KAAK,cAAgB,KAAK,qBAC5B,KAAK,aAAa,OAAS,YAAc,EACzC,KAAK,mBAAmB,YAAc,WAAa,EAAI,GAAG,KAAK,YAAY,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,GAAK,IAE9G,KAAK,cACH,IAAI,YAAY,2BAA4B,CAC1C,QAAS,GACT,OAAQ,CAAE,gBAAiB,UAAW,CACxC,CAAC,CACH,CACF,CAEA,0BAA0B,cAAe,CACvC,MAAM,kBAAoB,IAAI,IAC9B,OAAO,cAAc,OAAO,CAAC,WAAY,QAAU,CACjD,MAAM,UAAY,OAAO,MAAM,QAAQ,iBAAmB,EAAE,EAAE,KAAK,EACnE,GAAI,CAAC,WAAa,kBAAkB,IAAI,SAAS,EAAG,OAAO,WAC3D,kBAAkB,IAAI,SAAS,EAE/B,MAAM,WAAa,KAAK,eAAe,IAAI,SAAS,EAC9C,OAAS,OAAO,SAAS,UAAU,EACrC,WACA,KAAK,UAAU,MAAM,QAAQ,UAAU,IAAM,UAC3C,EACA,KAAK,iBAAiB,MAAM,QAAQ,eAAe,EACzD,OAAO,WAAa,KAAK,MAAM,OAAS,GAAG,CAC7C,EAAG,CAAC,CACN,CAEA,sBAAsB,cAAe,CACnC,MAAM,cAAgB,IAAI,IAAI,cAAc,IAAK,OAAU,KAAK,UAAU,MAAM,QAAQ,WAAW,CAAC,CAAC,EAC/F,eAAiB,MAAM,KAC3B,KAAK,iBAAiB,0EAA0E,CAClG,EACG,OAAQ,OAAU,CAAC,MAAM,MAAM,EAC/B,IAAK,OAAU,KAAK,UAAU,MAAM,QAAQ,sBAAsB,CAAC,EACnE,OAAO,OAAO,EACX,UAAY,eAAe,OAAQ,OAAU,cAAc,IAAI,KAAK,CAAC,EAAE,OAC7E,MAAO,CAAE,UAAW,SAAU,eAAe,OAAQ,SAAU,YAAc,eAAe,MAAO,CACrG,CAEA,iBAAkB,CAChB,MAAM,KAAO,SAAS,eAAe,KAAK,QAAQ,QAAU,EAAE,EACzD,OACL,KAAK,MAAM,oBAAoB,SAAU,KAAK,SAAU,EAAI,EAC5D,KAAK,sBAAsB,oBAAoB,QAAS,KAAK,iBAAkB,EAAI,EACnF,KAAK,KAAO,KACZ,KAAK,KAAK,iBAAiB,SAAU,KAAK,SAAU,EAAI,EACxD,KAAK,qBAAuB,KAAK,KAAK,cAAc,oCAAoC,EACxF,KAAK,sBAAsB,iBAAiB,QAAS,KAAK,iBAAkB,EAAI,EAClF,CAEA,MAAM,SAAS,MAAO,CACpB,MAAM,eAAe,EACrB,MAAM,yBAAyB,EAC/B,MAAM,KAAK,0BAA0B,CACnC,KAAM,OACN,aAAc,MAAM,WAAa,KAAK,MAAM,cAAc,gCAAgC,CAC5F,CAAC,CACH,CAEA,MAAM,iBAAiB,MAAO,CAC5B,MAAM,eAAe,EACrB,MAAM,yBAAyB,EAC3B,QAAM,eAAe,UAAY,MAAM,eAAe,aAAa,eAAe,IAAM,SAC5F,MAAM,KAAK,0BAA0B,CAAE,KAAM,WAAY,aAAc,MAAM,aAAc,CAAC,CAC9F,CAEA,MAAM,0BAA0B,CAAE,KAAM,YAAa,EAAG,CACtD,GAAI,KAAK,iBAAkB,OAC3B,MAAM,QAAU,KAAK,OAAO,OAAQ,OAAU,MAAM,SAAW,CAAC,MAAM,QAAQ,EACxE,WAAa,KAAK,sBAAsB,OAAO,EACrD,GAAI,CAAC,KAAK,QAAU,CAAC,WAAW,UAAY,CAAC,KAAK,KAAM,CACtD,KAAK,gBAAgB,yDAAyD,EAC9E,KAAK,cAAc,4FAA4F,GAC3G,eAAe,CAAE,SAAU,SAAU,MAAO,QAAS,CAAC,EAC1D,KAAK,wBAAwB,YAAa,UAAW,CACnD,KACA,OAAQ,KAAK,OAAS,8BAAgC,oBACxD,CAAC,EACD,MACF,CAEA,MAAM,SAAW,IAAI,SAAS,KAAK,IAAI,EACjC,KAAO,SAAS,cAAc,mBAAmB,GAAK,SAAS,cAAc,aAAa,EAChG,IAAI,QACA,YACA,aAAe,KACf,aAAe,GAEnB,GAAI,CACF,QAAU,KAAK,kBAAkB,SAAU,OAAO,EAClD,YAAc,KAAK,sBAAsB,OAAO,CAClD,OAAS,MAAO,CACd,KAAK,wBAAwB,YAAa,SAAU,CAClD,KACA,OAAQ,KAAK,wBAAwB,MAAO,uBAAuB,CACrE,CAAC,EACD,KAAK,gBAAgB,4EAA4E,EACjG,MACF,CAEI,OAAS,QAAU,OACrB,QAAQ,SAAW,KAAK,oBAAoB,EAAE,IAAK,SAAY,QAAQ,EAAE,EACzE,QAAQ,aAAe,OAAO,SAAS,SACvC,KAAK,iBAAiB,SAAS,aAAa,GAG9C,KAAK,iBAAmB,GACxB,KAAK,iBAAiB,aAAc,EAAI,EACxC,KAAK,gBAAgB,EAAE,EACvB,KAAK,wBAAwB,YAAa,SAAU,KAAK,qBAAqB,KAAM,WAAW,CAAC,EAEhG,GAAI,CACF,GAAI,OAAS,WAAY,CACvB,MAAM,oBAAsB,MAAM,KAAK,0BAA0B,OAAO,EACxE,aAAe,oBAAoB,KACnC,MAAMA,cAAe,KAAK,sBAAsB,aAAc,WAAW,EACzE,GAAI,CAACA,cAAa,GAChB,MAAM,KAAK,qBAAqBA,cAAa,OAAQ,CAAE,aAAc,aAAAA,aAAa,CAAC,EAGrF,MAAM,sBAAwB,KAAK,yBAAyB,YAAY,EACxE,GAAI,CAAC,sBAAsB,GACzB,MAAM,KAAK,qBAAqB,sBAAsB,OAAQ,CAC5D,aACA,aAAc,qBAChB,CAAC,EAEH,KAAK,wBAAwB,uBAAwB,SAAU,CAC7D,GAAG,KAAK,qBAAqB,KAAM,WAAW,EAC9C,gBAAiBA,cAAa,gBAC9B,kBAAmBA,cAAa,kBAChC,iBAAkBA,cAAa,gBACjC,CAAC,EACD,KAAK,wBAAwB,WAAY,UAAW,KAAK,qBAAqB,KAAM,WAAW,CAAC,EAChG,OAAO,SAAS,OAAO,oBAAoB,WAAW,EACtD,MACF,CAEA,aAAe,GACf,MAAM,aAAe,MAAM,KAAK,eAAe,OAAO,EACtD,KAAK,wBAAwB,WAAY,SAAU,KAAK,qBAAqB,KAAM,WAAW,CAAC,EAE/F,aAAe,MAAM,KAAK,kBAAkB,EAC5C,MAAM,aAAe,KAAK,sBAAsB,aAAc,WAAW,EACzE,GAAI,CAAC,aAAa,GAChB,MAAM,KAAK,qBAAqB,aAAa,OAAQ,CAAE,aAAc,YAAa,CAAC,EAkBrF,GAfA,KAAK,wBAAwB,cAAe,SAAU,CACpD,GAAG,KAAK,qBAAqB,KAAM,WAAW,EAC9C,gBAAiB,aAAa,gBAC9B,kBAAmB,aAAa,kBAChC,iBAAkB,aAAa,gBACjC,CAAC,EAEG,OAAO,SAAY,YAAc,OAAO,eAAmB,KAC7D,QAAQ,eAAe,WAAY,CACjC,OAAQ,sBACR,iBAAkB,SAAS,IAAI,IAAI,EACnC,SAAU,YACZ,CAAC,EAGC,CAAC,KAAM,CACT,OAAO,SAAS,OAAO,OAAO,QAAQ,UAAY,OAAO,EACzD,MACF,CACA,KAAK,eAAe,KAAK,sBAAsB,YAAY,CAAC,CAC9D,OAAS,MAAO,CACd,MAAM,OAAS,KAAK,wBAAwB,MAAO,uBAAuB,EAC1E,KAAK,wBAAwB,WAAY,SAAU,CACjD,GAAG,KAAK,qBAAqB,KAAM,WAAW,EAC9C,OACA,GAAI,MAAM,cAAgB,CAAC,CAC7B,CAAC,EAED,MAAM,SAAW,aACb,MAAM,KAAK,kBAAkB,YAAY,QAAS,aAAc,IAAI,EACpE,CAAE,UAAW,GAAM,iBAAkB,CAAE,EAErC,mBAAqB,EADI,OAAS,YAAc,CAAC,gBACA,OAAO,WAAW,YAAY,GAAK,CAAC,SAAS,WACpG,KAAK,gBACF,mBAEG,8FADA,8FAEN,CACF,QAAE,CACA,KAAK,iBAAmB,GACxB,KAAK,iBAAiB,aAAc,EAAK,EACzC,MAAM,eAAiB,KAAK,OAAO,OAAQ,OAAU,MAAM,SAAW,CAAC,MAAM,QAAQ,EACrF,KAAK,yBAAyB,CAAC,KAAK,sBAAsB,cAAc,EAAE,QAAQ,CACpF,CACF,CAEA,MAAM,eAAe,QAAS,CAC5B,MAAM,SAAW,MAAM,MAAM,OAAO,aAAc,CAChD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAQ,yBACR,mBAAoB,gBACtB,EACA,KAAM,KAAK,UAAU,OAAO,CAC9B,CAAC,EACD,IAAI,aACJ,GAAI,CACF,aAAe,MAAM,SAAS,KAAK,CACrC,MAAQ,CACN,MAAM,KAAK,qBAAqB,2BAA2B,CAC7D,CACA,GAAI,SAAS,KAAO,IAAS,cAAc,OACzC,MAAM,KAAK,qBAAqB,mBAAmB,EAErD,OAAO,YACT,CAEA,kCAAmC,CACjC,MAAM,WAAa,OAAO,0BAA0B,2BAA2B,MAAM,GAAK,CAAC,EAC3F,OAAO,OAAO,QAAQ,UAAU,EAC7B,OAAO,CAAC,CAAC,IAAK,KAAK,IAAM,KAAO,QAAU,QAAa,QAAU,MAAQ,OAAO,KAAK,IAAM,EAAE,EAC7F,IAAI,CAAC,CAAC,IAAK,KAAK,KAAO,CAAE,IAAK,OAAO,GAAG,EAAG,MAAO,OAAO,KAAK,CAAE,EAAE,CACvE,CAEA,mBAAmB,OAAQ,CACzB,MAAM,MAAQ,OAAO,QAAU,EAAE,EAAE,MAAM,qBAAqB,EAC9D,GAAI,CAAC,MAAO,OAAO,KACnB,MAAM,SAAW,GAAG,MAAM,CAAC,GAAK,EAAE,KAAK,MAAM,EAAG,CAAC,EAC3C,MAAQ,OAAO,MAAM,CAAC,CAAC,EAAI,IAAM,OAAO,QAAQ,EACtD,OAAO,OAAO,cAAc,KAAK,EAAI,MAAQ,IAC/C,CAEA,wBAAwB,KAAM,CAC5B,MAAM,MAAQ,MAAM,OAAO,MAC3B,GAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,MAAM,KAAK,qBAAqB,uBAAuB,EA+BlF,MAAO,CAAE,MA9BK,MAAM,IAAI,CAAC,KAAM,QAAU,CACvC,MAAM,UAAY,OAAO,OAAO,MAAM,aAAa,IAAM,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,EACvE,SAAW,OAAO,MAAM,QAAQ,EAChC,mBAAqB,KAAK,mBAAmB,MAAM,aAAa,OAAO,MAAM,EACnF,GACE,CAAC,OAAO,cAAc,SAAS,GAC5B,WAAa,GACb,CAAC,OAAO,cAAc,QAAQ,GAC9B,SAAW,GACX,CAAC,OAAO,cAAc,kBAAkB,EAE3C,MAAM,KAAK,qBAAqB,4BAA4B,EAE9D,MAAO,CACL,GAAI,UACJ,WAAY,UACZ,IAAK,OAAO,MAAM,IAAM,iBAAiB,KAAK,EAAE,EAChD,SACA,WAAY,OAAO,aAChB,MAAM,QAAQ,MAAM,UAAU,EAAI,KAAK,WAAa,CAAC,GAAG,IAAK,WAAc,CAC1E,OAAO,WAAW,KAAO,EAAE,EAC3B,OAAO,WAAW,OAAS,EAAE,CAC/B,CAAC,CACH,EACA,eAAgB,mBAChB,oBAAqB,mBAAqB,SAC1C,YAAa,mBACb,iBAAkB,mBAAqB,QACzC,CACF,CAAC,CACc,CACjB,CAEA,MAAM,0BAA0B,QAAS,CACvC,MAAM,iBAAmB,OAAO,KAAK,QAAQ,kBAAoB,EAAE,EAAE,KAAK,EAC1E,GAAI,CAAC,yCAAyC,KAAK,gBAAgB,EACjE,MAAM,KAAK,qBAAqB,2BAA2B,EAG7D,MAAM,MAAQ,QAAQ,MAAM,IAAK,OAAU,CACzC,cAAe,gCAAgC,KAAK,EAAE,GACtD,SAAU,OAAO,KAAK,UAAY,CAAC,EACnC,WAAY,OAAO,QAAQ,KAAK,YAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAK,KAAK,KAAO,CACvE,IAAK,OAAO,GAAG,EACf,MAAO,OAAO,OAAS,EAAE,CAC3B,EAAE,EACF,GAAI,KAAK,aACL,CAAE,cAAe,6BAA6B,KAAK,YAAY,EAAG,EAClE,CAAC,CACP,EAAE,EACI,YAAc,OAAO,OAAO,SAAS,SAAW,EAAE,EAAE,YAAY,EAChE,MAAQ,CACZ,MACA,WAAY,KAAK,iCAAiC,EAClD,GAAI,aAAa,KAAK,WAAW,EAAI,CAAE,cAAe,CAAE,WAAY,CAAE,EAAI,CAAC,CAC7E,EAkBM,SAAW,MAAM,MAAM,WAAW,gBAAgB,4BAA6B,CACnF,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAC1E,KAAM,KAAK,UAAU,CAAE,MApBX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAoBkB,UAAW,CAAE,KAAM,CAAE,CAAC,CACtD,CAAC,EACD,IAAI,OACJ,GAAI,CACF,OAAS,MAAM,SAAS,KAAK,CAC/B,MAAQ,CACN,MAAM,KAAK,qBAAqB,gCAAgC,CAClE,CACA,MAAM,cAAgB,QAAQ,MAAM,WACpC,GACE,SAAS,KAAO,IACb,QAAQ,QAAQ,QAChB,eAAe,YAAY,QAC3B,eAAe,UAAU,QACzB,CAAC,eAAe,MAAM,YAEzB,MAAM,KAAK,qBAAqB,wBAAwB,EAE1D,MAAO,CACL,YAAa,OAAO,cAAc,KAAK,WAAW,EAClD,KAAM,KAAK,wBAAwB,cAAc,IAAI,CACvD,CACF,CAEA,kBAAkB,SAAU,cAAe,CACzC,MAAM,SAAW,OAAO,SAAS,IAAI,UAAU,GAAK,CAAC,EAC/C,gBAAkB,OAAO,SAAS,IAAI,IAAI,GAAK,EAAE,EACjD,QAAU,eAAe,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,GAC1E,WAAa,CAAC,EAEpB,SAAW,CAAC,IAAK,KAAK,IAAK,SAAS,QAAQ,EAAG,CAC7C,MAAM,MAAQ,IAAI,MAAM,sBAAsB,EAC1C,OAAS,OAAS,CAAC,MAAM,CAAC,EAAE,WAAW,eAAe,IAAG,WAAW,MAAM,CAAC,CAAC,EAAI,MACtF,CAEA,WAAW,KAAK,QAAQ,cAAgB,yBAAyB,EAAI,cAClE,IAAK,OAAU,MAAM,QAAQ,WAAW,EACxC,OAAO,OAAO,EACd,KAAK,IAAI,EACZ,WAAW,sBAAwB,QACnC,WAAW,wBAA0B,KAAK,QAAQ,cAAgB,GAElE,MAAM,QAAU,IAAI,IACpB,cAAc,QAAS,OAAU,CAC/B,MAAM,MAAQ,MAAM,QAAQ,mBAAqB,MAAM,QAAQ,aAAe,MAAM,QAAQ,YACtF,MAAQ,MAAM,QAAQ,YACxB,CAAC,OAAS,CAAC,OACf,QAAQ,IAAI,MAAO,CAAC,GAAI,QAAQ,IAAI,KAAK,GAAK,CAAC,EAAI,KAAK,CAAC,CAC3D,CAAC,EACD,QAAQ,QAAQ,CAAC,OAAQ,MAAQ,CAC/B,WAAW,GAAG,EAAI,OAAO,KAAK,IAAI,CACpC,CAAC,EAED,MAAM,SAAW,CAAE,GAAI,OAAO,eAAe,EAAG,SAAU,UAAW,EAC/D,YAAc,SAAS,IAAI,cAAc,EAC3C,cAAa,SAAS,aAAe,aAEzC,MAAM,kBAAoB,IAAI,IAC9B,cAAc,QAAS,OAAU,CAC/B,MAAM,UAAY,OAAO,MAAM,QAAQ,iBAAmB,EAAE,EAAE,KAAK,EAC7D,gBAAkB,KAAK,UAAU,MAAM,QAAQ,UAAU,IAAM,UACrE,GAAI,CAAC,UAAW,CACd,GAAI,gBAAiB,MAAM,KAAK,qBAAqB,uBAAuB,EAC5E,MACF,CACA,MAAM,iBAAmB,OAAO,SAAS,EACzC,GACE,CAAC,OAAO,cAAc,gBAAgB,GACnC,kBAAoB,GACpB,CAAC,KAAK,oBAAoB,IAAI,SAAS,EAE1C,MAAM,KAAK,qBAAqB,uBAAuB,EAGzD,MAAM,MAAQ,OAAO,MAAM,QAAQ,aAAe,EAAE,EAAE,KAAK,EACrD,MAAQ,OAAO,MAAM,QAAQ,aAAe,EAAE,EAAE,KAAK,EACrD,MAAQ,kBAAkB,IAAI,SAAS,GAAK,CAChD,GAAI,iBACJ,OAAQ,IAAI,IACZ,OAAQ,IAAI,GACd,EACI,OAAO,MAAM,OAAO,IAAI,KAAK,EAC7B,OAAO,MAAM,OAAO,IAAI,KAAK,EACjC,kBAAkB,IAAI,UAAW,KAAK,CACxC,CAAC,EAED,MAAM,OAAS,CAAC,GAAG,kBAAkB,OAAO,CAAC,EAC1C,IAAK,QAAW,CACf,GAAI,MAAM,GACV,SACA,WAAY,CACV,iBAAkB,QAClB,sBAAuB,QACvB,+BAAgC,gBAChC,wBAAyB,KAAK,QAAQ,cAAgB,GACtD,mBAAoB,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,IAAI,EAC/C,mBAAoB,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,IAAI,CACjD,CACF,EAAE,EACD,KAAK,CAAC,KAAM,QAAU,OAAO,KAAK,EAAE,EAAI,OAAO,MAAM,EAAE,CAAC,EAErD,eAAiB,OAAO,IAAK,QAAW,CAC5C,UAAW,OAAO,MAAM,EAAE,EAC1B,eAAgB,EAChB,eAAgB,KAAK,uBAAuB,MAAM,EAAE,CACtD,EAAE,EACF,GACE,eAAe,KACZ,OACC,CAAC,OAAO,cAAc,MAAM,SAAS,GAClC,CAAC,OAAO,cAAc,MAAM,cAAc,GAC1C,MAAM,eAAiB,CAC9B,EAEA,MAAM,KAAK,qBAAqB,yBAAyB,EAG3D,kBAAW,uBAAyB,KACpC,WAAW,4BAA8B,OAAO,eAAe,MAAM,EACrE,WAAW,6BAA+B,OACxC,eAAe,OACb,CAAC,WAAY,QAAU,WAAa,MAAM,eAAiB,MAAM,eACjE,CACF,CACF,EACA,eAAe,QAAQ,CAAC,MAAO,QAAU,CACvC,WAAW,qBAAqB,MAAQ,CAAC,EAAE,EAAI,CAC7C,MAAM,UACN,MAAM,eACN,MAAM,cACR,EAAE,KAAK,GAAG,CACZ,CAAC,EAEM,CAAE,MAAO,CAAC,SAAU,GAAG,MAAM,CAAE,CACxC,CAEA,uBAAuB,UAAW,CAChC,MAAM,WAAa,KAAK,oBAAoB,IAAI,OAAO,WAAa,EAAE,CAAC,EACvE,OAAO,OAAO,cAAc,UAAU,GAAK,YAAc,EAAI,WAAa,IAC5E,CAEA,yBAA0B,CACxB,MAAM,OAAS,KAAK,MAAM,cAAc,0CAA0C,EAClF,GAAI,CAAC,OAAQ,OAAO,IAAI,IACxB,GAAI,CACF,MAAM,KAAO,KAAK,MAAM,OAAO,aAAe,IAAI,EAClD,OAAO,IAAI,IACT,KACG,IAAK,KAAQ,CAAC,OAAO,IAAI,IAAM,EAAE,EAAG,OAAO,IAAI,UAAU,CAAC,CAAC,EAC3D,OAAO,CAAC,CAAC,GAAI,UAAU,IAAM,IAAM,OAAO,cAAc,UAAU,GAAK,YAAc,CAAC,CAC3F,CACF,MAAQ,CACN,OAAO,IAAI,GACb,CACF,CAEA,sBAAsB,QAAS,CAC7B,MAAM,MAAQ,MAAM,QAAQ,SAAS,KAAK,EAAI,QAAQ,MAAQ,CAAC,EACzD,CAAC,OAAQ,GAAG,MAAM,EAAI,MACtB,QAAU,OAAO,QAAQ,YAAY,uBAAyB,EAAE,EAChE,aAAe,KAAK,wBAAwB,EAClD,GAAI,CAAC,QAAU,CAAC,SAAW,MAAM,SAAW,EAAG,MAAM,KAAK,qBAAqB,uBAAuB,EAEtG,MAAM,cAAgB,MAAM,IAAI,CAAC,KAAM,QAAU,CAC/C,MAAM,UAAY,OAAO,KAAK,EAAE,EAC1B,SAAW,OAAO,KAAK,UAAY,CAAC,EACpC,eACJ,QAAU,EACN,aAAa,IAAI,OAAO,SAAS,CAAC,EAClC,KAAK,uBAAuB,SAAS,EAC3C,GACE,CAAC,OAAO,cAAc,SAAS,GAC5B,CAAC,OAAO,cAAc,QAAQ,GAC9B,SAAW,GACX,CAAC,OAAO,cAAc,cAAc,GACpC,eAAiB,EAEpB,MAAM,KAAK,qBAAqB,QAAU,EAAI,2BAA6B,yBAAyB,EAEtG,MAAO,CACL,KAAM,QAAU,EAAI,SAAW,QAC/B,UACA,SACA,eACA,uBAAwB,eAAiB,SACzC,WAAY,CAAE,GAAI,KAAK,YAAc,CAAC,CAAG,CAC3C,CACF,CAAC,EAED,MAAO,CACL,QACA,MAAO,cACP,oBAAqB,cAAc,OACjC,CAAC,WAAY,OAAS,WAAa,KAAK,uBACxC,CACF,CACF,CACF,CAEA,gBAAiB,CACf,MAAM,QAAU,OAAO,OAAO,QAAQ,UAAY,OAAO,EAAE,QAAQ,MAAO,EAAE,EAC5E,OAAO,QAAQ,SAAS,KAAK,EAAI,QAAU,GAAG,OAAO,KACvD,CAEA,MAAM,mBAAoB,CACxB,MAAM,SAAW,MAAM,MAAM,KAAK,eAAe,EAAG,CAClD,OAAQ,MACR,QAAS,CAAE,OAAQ,mBAAoB,mBAAoB,gBAAiB,EAC5E,MAAO,UACT,CAAC,EACD,GAAI,SAAS,KAAO,GAAO,MAAM,KAAK,qBAAqB,wBAAwB,EACnF,GAAI,CACF,MAAM,KAAO,MAAM,SAAS,KAAK,EACjC,GAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,EAAG,MAAM,KAAK,qBAAqB,uBAAuB,EACxF,OAAO,IACT,OAAS,MAAO,CACd,MAAI,OAAO,kBAAyB,MAC9B,KAAK,qBAAqB,uBAAuB,CACzD,CACF,CAEA,qBAAqB,KAAM,CACzB,OAAO,OAAO,MAAM,YAAc,MAAM,IAAM,CAAC,CACjD,CAEA,kBAAkB,KAAM,QAAS,CAC/B,OAAQ,MAAM,QAAQ,MAAM,KAAK,EAAI,KAAK,MAAQ,CAAC,GAAG,OAAQ,MAAS,CACrE,MAAM,WAAa,MAAM,YAAc,CAAC,EACxC,OAAO,WAAW,wBAA0B,SAAW,WAAW,mBAAqB,OACzF,CAAC,CACH,CAEA,sBAAsB,KAAM,YAAa,CACvC,MAAM,WAAa,KAAK,kBAAkB,KAAM,YAAY,OAAO,EAC7D,gBAAkB,IAAI,IACtB,SAAW,CAAC,EAElB,YAAY,MAAM,QAAS,cAAiB,CAC1C,MAAM,YAAc,WAAW,UAAU,CAAC,KAAM,QAC1C,gBAAgB,IAAI,KAAK,GAAK,KAAK,qBAAqB,IAAI,IAAM,aAAa,UAAkB,GACrF,EAAQ,MAAM,YAAY,oBACtB,aAAa,OAAS,QAC3C,EACD,GAAI,YAAc,EAAG,CACnB,SAAS,KAAK,uBAAuB,EACrC,MACF,CAEA,gBAAgB,IAAI,WAAW,EAC/B,MAAM,WAAa,WAAW,WAAW,EACnC,iBAAmB,WAAW,YAAc,CAAC,EAC/C,OAAO,WAAW,QAAQ,IAAM,aAAa,UAAU,SAAS,KAAK,wBAAwB,EAEjG,OAAO,QAAQ,aAAa,UAAU,EACnC,OAAO,CAAC,CAAC,GAAG,IAAM,IAAI,WAAW,eAAe,CAAC,EACjD,QAAQ,CAAC,CAAC,IAAK,KAAK,IAAM,CACrB,OAAO,iBAAiB,GAAG,GAAK,EAAE,IAAM,OAAO,OAAS,EAAE,GAAG,SAAS,KAAK,qBAAqB,CACtG,CAAC,EAEH,MAAM,mBAAqB,OAAO,WAAW,cAAc,EACrD,uBAAyB,OAAO,WAAW,mBAAmB,EAChE,qBAAuB,aAAa,gBAAgB,SAAS,KAAK,qBAAqB,EACvF,yBAA2B,aAAa,wBAAwB,SAAS,KAAK,sBAAsB,EAExG,MAAM,gBAAkB,OAAO,WAAW,WAAW,EAC/C,oBAAsB,OAAO,WAAW,gBAAgB,GAE5D,CAAC,OAAO,SAAS,eAAe,GAC7B,CAAC,OAAO,SAAS,mBAAmB,GACpC,gBAAkB,GAClB,oBAAsB,GACtB,gBAAkB,oBAClB,oBAAsB,yBAEzB,SAAS,KAAK,gCAAgC,CAElD,CAAC,GAEG,WAAW,SAAW,YAAY,MAAM,QAAU,gBAAgB,OAAS,WAAW,SACxF,SAAS,KAAK,2BAA2B,EAG3C,MAAM,kBAAoB,WAAW,OACnC,CAAC,WAAY,OAAS,WAAa,OAAO,KAAK,qBAAuB,CAAC,EACvE,CACF,EACA,OAAI,oBAAsB,YAAY,qBAAqB,SAAS,KAAK,uBAAuB,EAEzF,CACL,GAAI,SAAS,SAAW,EACxB,OAAQ,SAAS,CAAC,GAAK,WACvB,gBAAiB,WAAW,OAC5B,kBACA,iBAAkB,WAAW,IAAK,MAAS,KAAK,qBAAqB,IAAI,CAAC,EAAE,OAAO,OAAO,CAC5F,CACF,CAEA,yBAAyB,WAAY,CACnC,MAAM,WAAa,YAAY,YAAc,CAAC,EACxC,cAAgB,OAAO,WAAW,2BAA2B,EAC7D,oBAAsB,OAAO,WAAW,4BAA4B,EAC1E,GACE,WAAW,yBAA2B,MACnC,CAAC,OAAO,cAAc,aAAa,GACnC,cAAgB,GAChB,CAAC,OAAO,cAAc,mBAAmB,GACzC,oBAAsB,EAEzB,OAAO,KAGT,MAAM,SAAW,OAAO,KAAK,UAAU,EACpC,OAAQ,KAAQ,0BAA0B,KAAK,GAAG,CAAC,EACnD,KAAK,CAAC,KAAM,QAAU,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,EAAI,OAAO,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,EACvF,GAAI,SAAS,SAAW,cAAe,OAAO,KAE9C,MAAM,MAAQ,SAAS,IAAI,CAAC,IAAK,QAAU,CACzC,GAAI,MAAQ,qBAAqB,MAAQ,CAAC,GAAI,OAAO,KACrD,KAAM,CAAC,eAAgB,WAAY,gBAAiB,GAAG,KAAK,EAAI,OAAO,WAAW,GAAG,GAAK,EAAE,EAAE,MAAM,GAAG,EACjG,UAAY,OAAO,cAAc,EACjC,eAAiB,OAAO,UAAU,EAClC,eAAiB,OAAO,eAAe,EAC7C,OACE,MAAM,OAAS,GACZ,CAAC,OAAO,cAAc,SAAS,GAC/B,WAAa,GACb,CAAC,OAAO,cAAc,cAAc,GACpC,gBAAkB,GAClB,CAAC,OAAO,cAAc,cAAc,GACpC,eAAiB,EAEb,KAEF,CAAE,UAAW,eAAgB,cAAe,CACrD,CAAC,EACD,GAAI,MAAM,KAAM,MAAS,CAAC,IAAI,EAAG,OAAO,KAExC,MAAM,iBAAmB,MAAM,IAAK,MAAS,KAAK,SAAS,EAW3D,OATE,IAAI,IAAI,gBAAgB,EAAE,OAAS,iBAAiB,QACjD,iBAAiB,KAAK,CAAC,UAAW,QAAU,MAAQ,GAAK,WAAa,iBAAiB,MAAQ,CAAC,CAAC,GAIxE,MAAM,OAClC,CAAC,WAAY,OAAS,WAAa,KAAK,eAAiB,KAAK,eAC9D,CACF,IAC8B,oBAA4B,KACnD,CAAE,cAAe,oBAAqB,KAAM,CACrD,CAEA,yBAAyB,KAAM,CAC7B,MAAM,UAAY,MAAM,QAAQ,MAAM,KAAK,EAAI,KAAK,MAAQ,CAAC,EACvD,mBAAqB,KAAK,QAAQ,cAAgB,0BAClD,iBAAoB,MAAS,CACjC,MAAM,WAAa,MAAM,YAAc,CAAC,EACxC,MAAO,GACL,WAAW,kBACR,WAAW,gCACX,KAAK,oBAAoB,IAAI,OAAO,KAAK,qBAAqB,IAAI,CAAC,CAAC,EAE3E,EACM,QAAU,UAAU,OAAQ,MAAS,CACzC,MAAM,WAAa,MAAM,YAAc,CAAC,EAClC,qBAAuB,OAAO,KAAK,UAAU,EAAE,KAClD,KACC,MAAQ,0BACL,MAAQ,+BACR,MAAQ,gCACR,0BAA0B,KAAK,GAAG,CACzC,EACA,MACE,CAAC,iBAAiB,IAAI,IAEpB,WAAW,uBACR,WAAW,kBAAkB,GAC7B,WAAW,yBAAyB,GACpC,qBAGT,CAAC,EACK,OAAS,UAAU,OAAO,gBAAgB,EAC1C,SAAW,CAAC,EACZ,cAAgB,IAAI,IAE1B,QAAQ,QAAS,YAAe,CAC9B,MAAM,iBAAmB,WAAW,YAAc,CAAC,EAC7C,QAAU,OAAO,iBAAiB,uBAAyB,EAAE,EAC7D,gBAAkB,KAAK,qBAAqB,UAAU,EACtD,eAAiB,OAAO,WAAW,QAAQ,EACjD,GAAI,CAAC,SAAW,cAAc,IAAI,OAAO,EAAG,CAC1C,SAAS,KAAK,gCAAgC,EAC9C,MACF,CACA,cAAc,IAAI,OAAO,EAEzB,MAAM,UAAY,KAAK,yBAAyB,UAAU,EAC1D,GAAI,CAAC,WAAa,CAAC,OAAO,cAAc,cAAc,GAAK,eAAiB,EAAG,CAC7E,SAAS,KAAK,mCAAmC,EACjD,MACF,CAEA,MAAM,YAAc,OAAO,OAAQ,MAAS,OAAO,KAAK,YAAY,kBAAoB,EAAE,IAAM,OAAO,EACnG,YAAY,SAAW,UAAU,eAAe,SAAS,KAAK,gCAAgC,EAClG,MAAM,YAAc,IAAI,IAExB,UAAU,MAAM,QAAS,cAAiB,CACpC,KAAK,uBAAuB,aAAa,SAAS,IAAM,aAAa,gBACvE,SAAS,KAAK,+BAA+B,EAE/C,MAAM,WAAa,YAAY,UAC7B,CAAC,KAAM,QACL,CAAC,YAAY,IAAI,KAAK,GAAK,KAAK,qBAAqB,IAAI,IAAM,aAAa,SAChF,EACA,GAAI,WAAa,EAAG,CAClB,SAAS,KAAK,iCAAiC,EAC/C,MACF,CACA,YAAY,IAAI,UAAU,EAC1B,MAAM,UAAY,YAAY,UAAU,EAClC,gBAAkB,UAAU,YAAc,CAAC,GAE/C,OAAO,gBAAgB,uBAAyB,EAAE,IAAM,SACrD,OAAO,gBAAgB,gCAAkC,EAAE,IAAM,OAAO,eAAe,IAE1F,SAAS,KAAK,uBAAuB,EAGvC,MAAM,iBAAmB,eAAiB,aAAa,eACnD,OAAO,UAAU,QAAQ,IAAM,kBAAkB,SAAS,KAAK,6BAA6B,EAC5F,OAAO,UAAU,cAAc,IAAM,aAAa,gBACpD,SAAS,KAAK,0BAA0B,EAEtC,OAAO,UAAU,mBAAmB,IAAM,aAAa,eAAiB,kBAC1E,SAAS,KAAK,2BAA2B,CAE7C,CAAC,EAEkC,YAAY,OAC7C,CAAC,WAAY,OAAS,WAAa,OAAO,KAAK,qBAAuB,CAAC,EACvE,CACF,IACmC,UAAU,oBAAsB,gBACjE,SAAS,KAAK,iCAAiC,CAEnD,CAAC,EAED,OAAO,QAAS,WAAc,CAC5B,MAAM,gBAAkB,UAAU,YAAc,CAAC,EAC3C,cAAgB,OAAO,gBAAgB,kBAAoB,EAAE,GAEjE,CAAC,cAAc,IAAI,aAAa,GAC7B,OAAO,gBAAgB,uBAAyB,EAAE,IAAM,gBAE3D,SAAS,KAAK,iCAAiC,CAEnD,CAAC,EAED,MAAM,iBAAmB,CAAC,GAAG,QAAS,GAAG,MAAM,EAC/C,MAAO,CACL,GAAI,SAAS,SAAW,EACxB,OAAQ,SAAS,CAAC,GAAK,WACvB,gBAAiB,iBAAiB,OAClC,kBAAmB,iBAAiB,OAClC,CAAC,WAAY,OAAS,WAAa,OAAO,KAAK,qBAAuB,CAAC,EACvE,CACF,EACA,iBAAkB,iBAAiB,IAAK,MAAS,KAAK,qBAAqB,IAAI,CAAC,EAAE,OAAO,OAAO,CAClG,CACF,CAEA,MAAM,kBAAkB,QAAS,aAAc,KAAM,CACnD,IAAI,KAAO,aACX,GAAI,CACG,OAAM,KAAO,MAAM,KAAK,kBAAkB,GAC/C,MAAM,WAAa,KAAK,kBAAkB,KAAM,OAAO,EACjD,QAAU,CAAC,EAKjB,GAJA,WAAW,QAAS,MAAS,CACvB,MAAM,MAAK,QAAQ,KAAK,GAAG,EAAI,EACrC,CAAC,EAEG,OAAO,KAAK,OAAO,EAAE,OAAS,IACf,MAAM,MAAM,OAAO,gBAAiB,CACnD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAQ,mBACR,mBAAoB,gBACtB,EACA,KAAM,KAAK,UAAU,CAAE,OAAQ,CAAC,CAClC,CAAC,GACY,KAAO,GAAO,MAAM,KAAK,qBAAqB,mBAAmB,EAGhF,MAAM,cAAgB,MAAM,KAAK,kBAAkB,EAC7C,eAAiB,KAAK,kBAAkB,cAAe,OAAO,EAG9D,UAAY,WAAW,OAAS,GAAK,eAAe,SAAW,EACrE,YAAK,wBAAwB,WAAY,UAAY,SAAW,SAAU,CACxE,KACA,OAAQ,UAAY,gBAAkB,sBACtC,QACA,iBAAkB,WAAW,OAAS,eAAe,OACrD,mBAAoB,eAAe,MACrC,CAAC,EACM,CAAE,UAAW,iBAAkB,WAAW,OAAS,eAAe,MAAO,CAClF,OAAS,MAAO,CACd,YAAK,wBAAwB,WAAY,SAAU,CACjD,KACA,OAAQ,KAAK,wBAAwB,MAAO,iBAAiB,EAC7D,OACF,CAAC,EACM,CAAE,UAAW,GAAO,iBAAkB,CAAE,CACjD,CACF,CAEA,qBAAqB,OAAQ,QAAU,CAAC,EAAG,CACzC,MAAM,MAAQ,IAAI,MAAM,wCAAwC,EAChE,aAAM,kBAAoB,OAC1B,OAAO,OAAO,MAAO,OAAO,EACrB,KACT,CAEA,wBAAwB,MAAO,SAAU,CACvC,OAAO,OAAO,OAAO,mBAAqB,QAAQ,CACpD,CAEA,qBAAqB,KAAM,YAAa,CACtC,MAAO,CACL,KACA,QAAS,YAAY,QACrB,kBAAmB,YAAY,MAAM,OACrC,oBAAqB,YAAY,oBACjC,mBAAoB,YAAY,MAAM,IAAK,MAAS,KAAK,SAAS,CACpE,CACF,CAEA,wBAAwB,MAAO,OAAQ,OAAS,CAAC,EAAG,CAClD,MAAM,WAAa,CACjB,QAAS,EACT,MACA,OACA,KAAM,OAAO,KACb,OAAQ,OAAO,OACf,QAAS,OAAO,QAChB,kBAAmB,OAAO,kBAC1B,gBAAiB,OAAO,gBACxB,oBAAqB,OAAO,oBAC5B,kBAAmB,OAAO,kBAC1B,mBAAoB,OAAO,mBAC3B,iBAAkB,OAAO,iBACzB,iBAAkB,OAAO,iBACzB,mBAAoB,OAAO,kBAC7B,EACA,OAAO,KAAK,UAAU,EAAE,QAAS,KAAQ,WAAW,GAAG,IAAM,QAAa,OAAO,WAAW,GAAG,CAAC,EAChG,KAAK,cACH,IAAI,YAAY,iCAAkC,CAChD,QAAS,GACT,OAAQ,UACV,CAAC,CACH,GACY,SAAW,UAAY,SAAW,UAAY,QAAQ,MAAQ,QAAQ,MAC9E,KAAK,QAAS,mCAAoC,UAAU,EAChE,OAAO,WAAW,OAAO,CAAE,MAAO,iCAAkC,GAAG,UAAW,CAAC,CACrF,CAEA,sBAAsB,aAAc,CAClC,GAAI,CAAC,MAAM,QAAQ,cAAc,KAAK,EAAG,OAAO,aAChD,MAAM,OAAS,aAAa,MAAM,KAAM,MAAS,CAAC,MAAM,YAAY,gBAAgB,GAAK,aAAa,MAAM,CAAC,EAC7G,OAAO,OAAS,CAAE,GAAG,aAAc,GAAI,OAAO,GAAI,IAAK,OAAO,GAAI,EAAI,YACxE,CAEA,yBAAyB,SAAU,CACjC,MAAM,KAAO,SAAS,eAAe,KAAK,QAAQ,QAAU,EAAE,EACxD,QAAU,MAAM,KACpB,MAAM,iBAAiB,oEAAoE,GAAK,CAAC,CACnG,EACM,mBAAqB,KAAK,QAAQ,qBAAuB,OACzD,iBAAmB,UAAY,mBACrC,QAAQ,QAAS,QAAW,CACtB,kBACF,OAAO,aAAa,WAAY,UAAU,EAC1C,OAAO,aAAa,gBAAiB,MAAM,IAE3C,OAAO,gBAAgB,UAAU,EACjC,OAAO,gBAAgB,eAAe,EAE1C,CAAC,EAED,MAAM,YAAc,MAAM,QAAQ,cAAc,EAC1C,oBAAsB,MAAM,cAAc,yCAAyC,EACzF,qBAAqB,gBAAgB,QAAS,gBAAgB,EAC9D,qBAAqB,aAAa,gBAAiB,OAAO,gBAAgB,CAAC,EAC3E,aAAa,gBAAgB,kCAAmC,CAAC,gBAAgB,CACnF,CAEA,iBAAiB,OAAQ,QAAS,CAC3B,SACD,QAAS,OAAO,aAAa,gBAAiB,MAAM,EACnD,OAAO,gBAAgB,eAAe,EAC3C,OAAO,UAAU,OAAO,UAAW,OAAO,EAC1C,OAAO,cAAc,mBAAmB,GAAG,UAAU,OAAO,SAAU,CAAC,OAAO,EAChF,CAEA,gBAAgB,QAAS,CAEvB,MAAM,QADc,KAAK,MAAM,QAAQ,cAAc,GACxB,cAAc,sCAAsC,EAC3E,KAAO,SAAS,cAAc,8BAA8B,EAC9D,CAAC,SAAW,CAAC,OACjB,QAAQ,gBAAgB,SAAU,CAAC,OAAO,EAC1C,KAAK,YAAc,SAAW,GAChC,CAEA,0BAA0B,cAAe,CACvC,MAAM,UAAY,KAAK,eAAe,aAAa,EAC9C,UAAU,QACf,KAAK,OAAO,QAAS,OAAU,CACzB,QAAU,eAAiB,UAAU,SAAS,KAAK,UAAU,MAAM,QAAQ,WAAW,CAAC,IAAG,MAAM,QAAU,GAChH,CAAC,CACH,CAEA,eAAe,MAAO,CACpB,OAAQ,MAAM,QAAQ,iBAAmB,IACtC,MAAM,GAAG,EACT,IAAK,OAAU,KAAK,UAAU,KAAK,CAAC,EACpC,OAAO,OAAO,CACnB,CAEA,oBAAoB,MAAO,CACzB,GAAI,CAAC,MAAO,OAAO,KACnB,GAAI,CACF,OAAO,KAAK,MAAM,KAAK,CACzB,MAAQ,CACN,OAAO,IACT,CACF,CAEA,YAAY,QAAS,KAAM,SAAU,CACnC,MAAM,OAAS,OAAO,MAAQ,EAAE,EAAE,KAAK,EACvC,GAAI,CAAC,OAAQ,CACX,QAAQ,YAAc,UAAY,GAClC,MACF,CACA,MAAM,SAAW,SAAS,cAAc,UAAU,EAClD,SAAS,UAAY,OACrB,KAAK,yBAAyB,SAAS,OAAO,EAC9C,QAAQ,gBAAgB,SAAS,QAAQ,UAAU,EAAI,CAAC,CAC1D,CAEA,yBAAyB,SAAU,CACjC,MAAM,KAAK,SAAS,iBAAiB,GAAG,CAAC,EAAE,QAAS,MAAS,CAC3D,GAAI,CAAC,mCAAmC,IAAI,KAAK,OAAO,EAAG,CACzD,KAAK,YAAY,GAAG,KAAK,UAAU,EACnC,MACF,CAKA,GAJA,MAAM,KAAK,KAAK,UAAU,EAAE,QAAS,WAAc,CAC7C,KAAK,UAAY,KAAO,CAAC,OAAQ,QAAS,SAAU,KAAK,EAAE,SAAS,UAAU,IAAI,GACtF,KAAK,gBAAgB,UAAU,IAAI,CACrC,CAAC,EACG,KAAK,UAAY,IAAK,CACxB,MAAM,KAAO,KAAK,aAAa,MAAM,GAAK,GACrC,gCAAgC,KAAK,IAAI,GAAG,KAAK,gBAAgB,MAAM,EACxE,KAAK,aAAa,QAAQ,IAAM,UAAU,KAAK,aAAa,MAAO,qBAAqB,CAC9F,CACF,CAAC,CACH,CAEA,WAAW,SAAU,CACnB,MAAM,MAAQ,OAAO,UAAY,EAAE,EAAE,KAAK,EAC1C,OAAI,QAAU,YAAc,QAAU,WAAa,QAAU,QAAU,QAAU,UAAkB,MAC/F,MAAM,WAAW,UAAU,GAAK,WAAW,KAAK,KAAK,EAAU,UAC5D,UACT,CAEA,aAAa,KAAM,CACjB,OAAO,OAAS,YAAc,OAAS,SACzC,CAEA,qBAAqB,IAAK,MAAO,CAC/B,MAAM,MAAQ,KAAK,UAAU,IAAI,YAAY,EAC7C,OAAI,QAAU,WAAmB,WAC7B,QAAU,aAAqB,aAC/B,0BAA0B,KAAK,KAAK,EAAU,WAC3C,YACT,CAEA,cAAc,MAAO,CAoBnB,MAnBe,CACb,UAAW,wCACX,UAAW,wCACX,WAAY,0BACZ,WAAY,0BACZ,aAAc,gBACd,aAAc,gBACd,WAAY,cACZ,WAAY,cACZ,WAAY,cACZ,WAAY,oBACZ,WAAY,oBACZ,UAAW,oBACX,YAAa,eACb,eAAgB,kBAChB,WAAY,sBACZ,WAAY,sBACZ,WAAY,qBACd,EACc,KAAK,GAAK,KAC1B,CAEA,iBAAiB,OAAQ,CACvB,MAAM,OAAS,CAAC,GAAG,IAAI,KAAK,QAAU,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,EAC1D,OAAI,OAAO,QAAU,EAAU,OAAO,CAAC,GAAK,cACxC,OAAO,SAAW,EAAU,GAAG,OAAO,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,GACtD,GAAG,OAAO,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,CAAC,SAAS,OAAO,GAAG,EAAE,CAAC,EAChE,CAEA,YAAY,MAAO,CACjB,MAAM,OAAS,OAAO,OAAS,EAAE,EAAE,KAAK,EACxC,GAAI,CAAC,OAAQ,MAAO,GACpB,GAAI,QAAQ,KAAK,MAAM,EAAG,MAAO,OACjC,MAAM,OAAS,KAAK,iBAAiB,MAAM,EAC3C,OAAI,QAAU,EAAU,OACjB,MAAM,KAAK,YAAY,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,GAC7D,CAEA,mBAAmB,MAAO,MAAO,CAC/B,MAAM,OAAS,KAAK,iBAAiB,KAAK,EAC1C,OAAI,QAAU,EAAU,OAAO,OAAS,EAAE,EAAE,KAAK,EAC1C,IAAI,KAAK,YAAY,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,SAAM,OAAO,OAAS,EAAE,EAAE,KAAK,CAAC,EAC3F,CAEA,iBAAiB,MAAO,CACtB,MAAM,OAAS,OAAO,OAAS,EAAE,EAAE,KAAK,EACxC,GAAI,CAAC,QAAU,QAAQ,KAAK,MAAM,EAAG,MAAO,GAC5C,MAAM,MAAQ,OAAO,QAAQ,KAAM,EAAE,EAAE,MAAM,iBAAiB,EAC9D,OAAO,MAAQ,KAAK,IAAI,EAAG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAI,CACjD,CAEA,aAAc,CACZ,OAAO,OAAO,SAAS,UAAU,QAAU,KAC7C,CAEA,YAAY,OAAQ,CAClB,OAAO,IAAI,KAAK,aAAa,QAAS,CACpC,MAAO,WACP,SAAU,KAAK,YAAY,CAC7B,CAAC,EAAE,OAAO,MAAM,CAClB,CAEA,gBAAgB,MAAO,cAAe,eAAgB,CACpD,MAAM,MAAQ,OAAO,OAAS,EAAE,EAAE,MAAM,cAAc,EACtD,OAAO,MAAQ,CAAC,OAAO,MAAM,CAAC,CAAC,EAAG,OAAO,MAAM,CAAC,CAAC,CAAC,EAAI,CAAC,cAAe,cAAc,CACtF,CAEA,OAAO,MAAO,CACZ,OAAO,OAAO,OAAS,QAAQ,EAAE,QAAQ,gBAAiB,GAAG,CAC/D,CAEA,UAAU,MAAO,CACf,OAAO,gCAAgC,KAAK,EAAE,KAAK,EAAE,YAAY,CACnE,CACF,CACF",
  "names": ["verification"]
}
