{
  "version": 3,
  "sources": ["/cdn/shop/t/189/assets/dl-customizer.js?x=21771"],
  "sourcesContent": ["/* Daylight \u00B7 Design Your Own customizer (ELYSIAN, Oct 11).\n   Ported from the \"new customizer\" prototype on the Daylight canvas. No libraries: a CSS 3D jar in container units,\n   five steps (glass + size, start from a design, engrave each side, scent + finishing, proof) and add to bag with\n   line item properties. The design autosaves in this browser; \"Save this design\" makes a link that reopens it. */\n(() => {\n  const root = document.querySelector('[data-dl-cz]');\n  if (!root || root.dataset.ready) return;\n  root.dataset.ready = '1';\n  let C = {};\n  try { C = JSON.parse(root.querySelector('[data-cz-config]').textContent); } catch (e) { return; }\n  const VASE = C.kind === 'vase';\n  if (!VASE) document.documentElement.setAttribute('data-dl-scent-field', ''); /* scent cards below show \"Choose this scent\" */\n  const esc = (s) => String(s == null ? '' : s).replace(/[&<>\"']/g, (c) => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c]));\n  const money = (c) => '$' + (c % 100 ? (c / 100).toFixed(2) : String(c / 100));\n  const cap = (s) => s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();\n  const mq = window.matchMedia('(min-width: 990px)');\n\n  /* ---------- Data ---------- */\n  /* TAJA's engraving fonts (Annabelle, Oct 19): four fonts, free for the web and used in the studio too. Spring Fling is retired.\n     Classic TAJA = Sansation Light; Classic Script = Corinthia (called Ballet until Oct 29: Kourtney renamed it, same font, the id\n     stays 'ballet' so saved designs open as before); Bubbly = Abril Fatface; Block = Anton (Google Fonts, open licence).\n     Emojis (Kourtney, Oct 28): every font falls back to Noto Emoji, a one-color emoji font, so an emoji etches like the letters\n     around it (the studio engraves an outline version) instead of showing in color.\n     cw = rough width per character in em (only a floor: once a font loads, fit() measures the real words), k = size boost so\n     each font reads about the same size (matched to the fonts they replace by x-height and cap height), lh = line height.\n     Block is all capital letters, so the proof spells it that way (tt). */\n  const EMOJI = \"'Noto Emoji'\";\n  const FONTS = {\n    classic: { name: 'Classic TAJA', fam: \"'TAJA Classic', \" + EMOJI + \", 'Montserrat', sans-serif\", wt: 300, tr: 0.12, tt: 'none', cw: 0.66, lh: 1.3, k: 1 },\n    ballet: { name: 'Classic Script', fam: \"'TAJA Ballet', \" + EMOJI + ', cursive', wt: 400, tr: 0, tt: 'none', cw: 0.36, lh: 1.15, k: 1.75 },\n    bubbly: { name: 'Bubbly', fam: \"'TAJA Bubbly', \" + EMOJI + ', serif', wt: 400, tr: 0.01, tt: 'none', cw: 0.55, lh: 1.12, k: 1 },\n    block: { name: 'Block', fam: \"'TAJA Block', \" + EMOJI + ', sans-serif', wt: 400, tr: 0.04, tt: 'uppercase', cw: 0.49, lh: 1.1, k: 1, note: 'Block is all capital letters.' }\n  };\n  /* designs saved with Spring Fling (before Oct 20) open in Ballet */\n  const FONT_ALIAS = { spring: 'ballet' };\n  const SCALE = VASE ? { super: 0.92, jumbo: 1.02 } : { mini: 0.74, classic: 0.82, grande: 0.9, super: 0.96, jumbo: 1.02, supreme: 1.08 };\n  const GLASSES = [];\n  const SIZES = [];\n  (C.variants || []).forEach((v) => {\n    const g = String(v.o1 || '').toLowerCase();\n    if (g && !GLASSES.includes(g)) GLASSES.push(g);\n    const raw = String(v.o2 || '');\n    const id = raw.split('(')[0].trim().toLowerCase();\n    if (id && !SIZES.find((x) => x.id === id)) {\n      const m = raw.match(/\\(([^)]+)\\)/);\n      SIZES.push({ id, name: cap(id), oz: m ? m[1].toLowerCase() : '', raw, s: SCALE[id] || 0.9 });\n    }\n  });\n  /* Iridescent and gold glass (Annabelle, Oct 23; John, Oct 24): Design Your Own offers them too. Picking one puts that product in\n     the bag at its own price, every side and the lid included: Iridescent Candle (Classic, Super), Metallic Gold Candle (Mini,\n     Super). The candle Design Your Own page only; product pages with their own design (Casa, Pet...) keep their glass. */\n  const ALT_SIZES = { iridescent: ['classic', 'super'], gold: ['mini', 'super'] };\n  const ALT = {};\n  if (!VASE && !(C.focus && C.focus.preset) && C.alt) Object.keys(ALT_SIZES).forEach((g) => {\n    const p = C.alt[g]; if (!p || !p.variants) return;\n    const vs = p.variants.map((v) => Object.assign({}, v, { size: String(v.o1 || '').split('(')[0].trim().toLowerCase() }))\n      .filter((v) => ALT_SIZES[g].includes(v.size) && SIZES.find((x) => x.id === v.size));\n    if (vs.length) { ALT[g] = { title: p.title, url: p.url, variants: vs }; GLASSES.push(g); }\n  });\n  const variantFor = (g, sz) => (ALT[g] ? ALT[g].variants.find((v) => v.size === sz) : (C.variants || []).find((v) => String(v.o1).toLowerCase() === g && String(v.o2 || '').split('(')[0].trim().toLowerCase() === sz));\n  /* how each glass looks: the stage texture, how the etching shows by day and by candlelight, the proof, the swatch */\n  const GLOOK = {\n    black: { base: 'black', name: 'Black glass', tex: 'cz-tex-black', day: 'black-day', night: 'black-night', proof: 'black', shade: '#000', sheen: 0.07, edge: 0.5, rim: ['#151312', '#241a12'], disc: 'radial-gradient(circle at 30% 25%,#5a5753,#1E1D1B 50%,#111010)' },\n    white: { base: 'white', name: 'White glass', tex: 'cz-tex-white', day: 'white-day', night: 'white-night', proof: 'white', shade: '', sheen: 0.16, edge: 0.14, rim: ['#F2EFEA', '#E9D6BC'], disc: 'radial-gradient(circle at 30% 25%,#FFFFFF,#F6F4F0 50%,#E6E1D8)' },\n    iridescent: { base: 'white', name: 'Iridescent glass', tex: 'cz-tex-iri', day: 'iri-day', night: 'white-night', proof: 'iri', shade: '', sheen: 0.22, edge: 0.16, glint: [0.36, 0.3], rim: ['#EFE6EC', '#E9D6BC'], disc: 'conic-gradient(from 200deg at 50% 50%,#F6E1EE,#DCE4FA,#D8F1E6,#F8EBD7,#F6C7A8,#F6E1EE)' },\n    gold: { base: 'black', name: 'Gold glass', tex: 'cz-tex-gold', day: 'gold-day', night: 'gold-night', proof: 'gold', shade: '#3A2A12', sheen: 0.24, edge: 0.32, glint: [0.4, 0.2], nightBase: 'white', rim: ['#C9A15C', '#D2A867'], wall: ['#7A5A2A', '#C9A15C'], disc: 'radial-gradient(circle at 30% 25%,#FBEBC4,#D9AE63 45%,#8E6630)' }\n  };\n  const gl = () => GLOOK[st.glass] || GLOOK.black;\n  /* Block reads best on iridescent (Annabelle, Oct 23) and is picked first on gold (John, Oct 24): switching to either glass sets\n     the words on the four sides in Block; the shopper can change it in step 3. The lid is wood, so it keeps its font. */\n  const blockify = () => { let n = 0; ['front', 'right', 'back', 'left'].forEach((id) => { const f = st.faces[id]; if (f && f.font !== 'block' && !(lockText() && id === 'front')) { st.faces[id] = Object.assign({}, f, { font: 'block' }); if (f.kind === 'text' && (f.text || '').trim()) n++; } }); return n; };\n  const upVariantFor = (g, sz) => (C.focus && C.focus.up && C.focus.up.variants || []).find((v) => String(v.o1).toLowerCase() === g && String(v.o2 || '').split('(')[0].trim().toLowerCase() === sz);\n  const ALL_FACES = [\n    { id: 'front', name: 'Front', short: 'Front', target: 0, image: false },\n    { id: 'right', name: 'Right side', short: 'Right', target: -90, image: true },\n    { id: 'back', name: 'Back', short: 'Back', target: -180, image: true },\n    { id: 'left', name: 'Left side', short: 'Left', target: 90, image: true },\n    { id: 'lid', name: 'Lid', short: 'Lid', target: null, image: true },\n    { id: 'inside', name: 'Inside the lid', short: 'Inside', target: null, image: false }\n  ];\n  /* Product focus (Oct 12, John): Pet, Photo, Couple and Casa pages open the customizer on their own design.\n     C.focus = { preset, include: [surfaces in the product's price], up: { title, url, variants } }.\n     Engraving any other surface moves the line to Design Your Own (same jar + size) at its price. */\n  const FOCUS = (C.focus && C.focus.preset) ? C.focus : null;\n  const INCL = FOCUS ? (FOCUS.include && FOCUS.include.length ? FOCUS.include : ['front']) : null;\n  /* A photo or logo can go on the front of every candle (Kourtney, Oct 28; until then the front took only words or a pattern).\n     The vase keeps photos to its sides and back. */\n  if (!VASE) ALL_FACES[0].image = true;\n  const FACES = VASE ? ALL_FACES.slice(0, 4) : ALL_FACES;\n  const FACE_IDS = FACES.map((f) => f.id);\n  const PRESETS = {\n    vow: { name: 'The Vow', line: VASE ? 'Names and a date, front and back' : 'Names, a date, a promise inside the lid', glass: 'black', sample: 'Caitlin + Max', font: 'ballet', faces: {\n      front: { kind: 'text', text: 'Caitlin\\n+ Max', font: 'ballet' }, back: { kind: 'text', text: '9 \u00B7 4 \u00B7 2021', font: 'classic' },\n      lid: { kind: 'text', text: 'C + M', font: 'ballet' }, inside: { kind: 'text', text: 'Forever starts here', font: 'ballet' } } },\n    casa: { name: 'Casa', line: 'Your family name, for a new home', glass: 'black', sample: 'CASA FRANCO', font: 'classic', faces: {\n      front: { kind: 'text', text: 'CASA\\nFRANCO', font: 'classic' }, right: { kind: 'text', text: 'MIAMI', font: 'classic' }, lid: { kind: 'text', text: 'CF', font: 'classic' } } },\n    mono: { name: 'The Monogram', line: 'Initials, set low in the corner', glass: 'black', sample: 'A|A', font: 'classic', faces: {\n      front: { kind: 'text', text: 'A|A', font: 'classic', layout: 'corner' }, lid: { kind: 'text', text: 'A', font: 'ballet' } } },\n    note: { name: 'Love Note', line: 'A handwritten line in soft script', glass: 'white', sample: \"don't worry, be happy\", font: 'ballet', faces: {\n      front: { kind: 'text', text: \"don't worry\\nbe happy\", font: 'ballet' }, inside: { kind: 'text', text: 'love, mom', font: 'ballet' } } },\n    little: { name: 'Little One', line: 'A name, a birthday, a sky of stars', glass: 'white', sample: 'Olivia Rose', font: 'ballet', faces: {\n      front: { kind: 'text', text: 'Olivia Rose', font: 'ballet' }, back: { kind: 'text', text: '03.14.2026', font: 'classic' },\n      right: { kind: 'pattern', pattern: 'stars' }, left: { kind: 'pattern', pattern: 'stars' } } },\n    logo: { name: 'Your Logo', line: 'For clients and teams', glass: 'black', sample: 'THANK YOU', font: 'block', faces: {\n      front: { kind: 'text', text: 'THANK YOU\\nFOR A GREAT YEAR', font: 'block' }, back: { kind: 'image', image: 'sample' }, lid: { kind: 'image', image: 'sample' } } },\n    pet: { name: 'Your pet', line: 'Their photo, engraved on the front', glass: 'black', sample: 'Your pet', font: 'classic', hidden: true, faces: {\n      front: { kind: 'image', image: 'upload' } } },\n    photo: { name: 'Your photo', line: 'Any photo, engraved on the front', glass: null, sample: 'Your photo', font: 'classic', hidden: true, faces: {\n      front: { kind: 'image', image: 'upload' } } },\n    couple: { name: 'The Couple', line: 'Two initials, two names', glass: 'black', sample: 'D \u00B7 C', font: 'classic', hidden: true, faces: {\n      front: { kind: 'text', text: 'D \u00B7 C\\nDIRK + CHRISTINE', font: 'classic', layout: 'mc' } } },\n    memorial: { name: 'In loving memory', line: 'Their photo on the front, \u201Cforever in our hearts\u201D on the lid', glass: null, sample: 'In memory', font: 'classic', hidden: true, faces: {\n      front: { kind: 'image', image: 'upload' }, lid: { kind: 'text', text: 'forever in our hearts', font: 'ballet', layout: 'mc' } } },\n    blank: { name: 'A blank jar', line: 'Start from nothing at all', glass: null, sample: 'Your words', font: 'classic', faces: {} }\n  };\n  const DEFAULT_SCENTS = ['Hampton House \u00B7 classic florals', 'Pumpkin Spice \u00B7 new for fall', 'Sugar Daddy \u00B7 sweet + rich', 'Wood Fire \u00B7 sandalwood, leather, frankincense',\n    'Bergamot + Cashmere \u00B7 soft citrus', 'Fresh Eucalyptus \u00B7 eucalyptus essential oil', 'Lavande de Provence \u00B7 lavender essential oil', 'Gilded Champagne \u00B7 champagne',\n    'Meet Me in Marrakesh \u00B7 smoky + spicy', 'Tall Dark + Handsome \u00B7 woody', 'Tom\u0101to Tom\u00E4to \u00B7 garden crisp', 'Vanilla Bourbon \u00B7 soft vanilla',\n    'White Tuberose \u00B7 soft floral', 'Miami Squeeze \u00B7 citrus + floral', 'Bugger Off \u00B7 citronella', 'Fragrance Free \u00B7 pure soy wax'];\n  const SCENTS = ((C.scents || []).map((x) => String(x).trim()).filter(Boolean));\n  if (!SCENTS.length) DEFAULT_SCENTS.forEach((x) => SCENTS.push(x));\n  /* TAJA's pattern art (38 files from TAJA's PATTERN IMAGES folder, Oct 15; John, Oct 17: offer them all, grouped).\n     Each file is one side's artwork, so it covers the side once (mask, cover). The first eight are the site's original set. */\n  const PGROUPS = [['sig', 'Signature'], ['flo', 'Florals + Tropical'], ['ani', 'Animals'], ['spo', 'Sports'], ['hol', 'Holiday + Seasons'], ['fun', 'More']];\n  const PATTERNS = [\n    ['kisses', 'Bisous', 'sig'], ['butterflies', 'Butterflies', 'sig'], ['hamsa', 'Hamsa', 'sig'], ['hearts', 'Hearts', 'sig'], ['palms', 'Jungle Palms', 'sig'], ['rose', 'Rose', 'sig'], ['stars', 'Stars', 'sig'], ['stripes', 'Vertical Stripes', 'sig'],\n    ['flowerbomb', 'Flower Bomb', 'flo'], ['jardin', 'Le Jardin', 'flo'], ['banana', 'Banana Leaves', 'flo'], ['tropleaves', 'Tropical Leaves', 'flo'], ['shadows', 'Tropical Shadows', 'flo'], ['shadows2', 'Tropical Shadows Flipped', 'flo'], ['flamingo', 'Flamingo', 'flo'],\n    ['cheetah', 'Cheetah', 'ani'], ['zebra', 'Zebra', 'ani'], ['alligator', 'Alligator', 'ani'], ['paws', 'Paw Prints', 'ani'], ['fish', 'Fish', 'ani'],\n    ['baseball', 'Baseball', 'spo'], ['basketball', 'Basketball', 'spo'], ['football', 'Football', 'spo'], ['soccer', 'Soccer', 'spo'], ['volleyball', 'Volleyball', 'spo'],\n    ['holidaymania', 'Holiday Mania', 'hol'], ['nutcracker', 'Nutcracker', 'hol'], ['ornaments', 'Ornaments', 'hol'], ['reindeer', 'Reindeer', 'hol'], ['santas', 'Silly Santas', 'hol'], ['snowpine', 'Snow Pine', 'hol'], ['snowflakes', 'Snowflakes', 'hol'], ['winter', 'Winter Wonderland', 'hol'], ['autumn', 'Autumn Leaves', 'hol'],\n    ['kissinv', 'Bisous Inverted', 'fun'], ['lips', 'Lips', 'fun'], ['aztec', 'Aztec', 'fun'], ['hemp', 'Hemp', 'fun']\n  ].map(([id, name, g]) => ({ id, name, g }));\n  const PURL = C.pats || {};\n  const patImg = (id, swatch) => ((PURL[id] || [])[swatch ? 1 : 0] || '');\n  const PDIM = {kisses:[800,799],butterflies:[775,800],hamsa:[474,474],hearts:[800,761],palms:[769,800],rose:[799,800],stars:[775,800],stripes:[775,800],flowerbomb:[799,800],jardin:[800,800],banana:[800,799],tropleaves:[800,800],shadows:[560,782],shadows2:[560,782],flamingo:[800,800],cheetah:[800,800],zebra:[800,800],alligator:[800,800],paws:[800,799],fish:[800,800],baseball:[800,800],basketball:[800,800],football:[800,800],soccer:[800,800],volleyball:[800,800],holidaymania:[800,772],nutcracker:[800,797],ornaments:[800,800],reindeer:[800,800],santas:[727,800],snowpine:[727,800],snowflakes:[800,800],winter:[800,800],autumn:[800,800],kissinv:[800,799],lips:[800,800],aztec:[800,790],hemp:[800,800]}; /* pixel size of each pattern file */\n  const maskCss = (u, size, pos) => (u ? \"-webkit-mask-image:url('\" + u + \"');mask-image:url('\" + u + \"');-webkit-mask-size:\" + size + ';mask-size:' + size + ';-webkit-mask-position:' + (pos || 'center') + ';mask-position:' + (pos || 'center') + ';-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;' : '');\n  /* A pattern covers its flat side and wraps half way round each rounded corner (John, Oct 17), so it runs to the jar's edges.\n     geo = where this element sits inside that wrapped strip: mask size and offset in cqw. */\n  const patGeo = (id, Wx, H) => { const d = PDIM[id] || [800, 800]; const k = Math.max(Wx / d[0], H / d[1]); const mw = d[0] * k; const mh = d[1] * k; return { mw, mh, ox: (Wx - mw) / 2, oy: (H - mh) / 2 }; };\n  let patGroup = ''; /* which collection the pattern picker shows (not saved) */\n  const patOf = (id) => PATTERNS.find((p) => p.id === id) || PATTERNS[3];\n  /* Placement: any of 9 spots on a side (John, Oct 11: all options). Old saved values still work: center, top, corner. */\n  const POS = { tl: { v: 's', h: 's', name: 'Top left corner' }, tc: { v: 's', h: 'c', name: 'Near the top' }, tr: { v: 's', h: 'e', name: 'Top right corner' },\n    ml: { v: 'c', h: 's', name: 'Left, middle' }, mc: { v: 'c', h: 'c', name: 'Centered' }, mr: { v: 'c', h: 'e', name: 'Right, middle' },\n    bl: { v: 'e', h: 's', name: 'Lower left corner' }, bc: { v: 'e', h: 'c', name: 'Near the bottom' }, br: { v: 'e', h: 'e', name: 'Lower right corner' } };\n  const POS_KEYS = ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'];\n  const posKey = (fd) => { const k = ({ center: 'mc', top: 'tc', corner: 'br', bottom: 'bc' })[fd.layout] || fd.layout; return POS[k] ? k : 'mc'; };\n  const FLEX = { s: 'flex-start', c: 'center', e: 'flex-end' };\n  const MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n  const STEP_TITLES = ['Glass and size', FOCUS ? 'Your design' : 'Start from a design', VASE ? 'Engrave each side' : 'Engrave each side', VASE ? 'Finishing' : 'Scent and finishing', 'Your proof'];\n  const SAMPLE_SVG = (stroke, style) => '<svg viewBox=\"0 0 100 100\" aria-hidden=\"true\" style=\"' + style + '\" fill=\"none\" stroke=\"' + stroke + '\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M50 90 C49 72 46 56 50 38\"/><path d=\"M50 38 C41 30 31 30 21 37\"/><path d=\"M50 38 C43 26 34 21 24 21\"/><path d=\"M50 38 C53 26 61 20 73 22\"/><path d=\"M50 38 C60 30 70 31 80 39\"/><path d=\"M50 38 C48 28 50 18 57 12\"/><path d=\"M33 90 L67 90\"/><circle cx=\"77\" cy=\"20\" r=\"6\"/></svg>';\n  const CHEV = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9 5 L16 12 L9 19\"/></svg>';\n  const CHEV_L = '<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M15 5 L8 12 L15 19\"/></svg>';\n\n  /* ---------- State ---------- */\n  const presetFaces = (id) => {\n    const p = PRESETS[id] || PRESETS.blank;\n    const faces = {};\n    FACE_IDS.forEach((f) => { faces[f] = Object.assign({ kind: 'none', text: '', font: p.font || 'classic', layout: 'center', pattern: 'hearts', image: 'sample' }, p.faces[f] || {}); });\n    return faces;\n  };\n  const firstSize = SIZES.find((x) => x.id === 'classic') || SIZES[0] || { id: '', name: '', oz: '', s: 0.9 };\n  const st = {\n    glass: GLASSES.includes('black') ? 'black' : (GLASSES[0] || 'black'), size: firstSize.id, light: 'day', burn: 45, angle: -28, tilt: -9, face: 'front',\n    step: 1, preset: 'vow', faces: presetFaces('vow'), upload: '', uploadErr: '', detail: 0, invert: false, rmbg: 'no', lightOk: false, scent: '',\n    gift: null, noteMsg: '', mockup: false, wax: 'soy', designNote: '', approved: false, saved: false, added: false, link: '', more: false\n  };\n  /* Photo detail (Kourtney, Oct 27): the Detail slider is gone. Every photo is prepared at its left-most setting, which is how the\n     engraved jars come out. Saved designs open at that setting too. */\n  /* Handwritten note (Kourtney, Oct 27): the same question as the other product pages, \"Add a handwritten note with this candle?\"\n     Yes / No, then one message box of up to 220 characters (spaces included) with the same tooltip. No To and From boxes. gift is\n     null until the shopper answers. */\n  const NOTE_MAX = 220;\n  const isUp = () => !!FOCUS && FACE_IDS.some((f) => !INCL.includes(f) && st.faces[f] && st.faces[f].kind !== 'none');\n  const lineVariant = () => (isUp() ? upVariantFor(st.glass, st.size) : variantFor(st.glass, st.size));\n  if (FOCUS) {\n    st.preset = FOCUS.preset; st.faces = presetFaces(FOCUS.preset);\n    FACE_IDS.forEach((f) => { if (!INCL.includes(f)) st.faces[f] = Object.assign({}, st.faces[f], { kind: 'none' }); });\n    const pg = (PRESETS[FOCUS.preset] || {}).glass; if (pg && GLASSES.includes(pg)) st.glass = pg;\n  }\n  /* Casa (John, Oct 23; Kourtney, Oct 28): the front always says CASA, with the family name underneath. The shopper types only the\n     name; saved designs, links and autosaves that lost the CASA line get it back. Design Your Own's Casa template is locked the same\n     way (Kourtney, Oct 28): \"CASA name\" in another font goes on the blank template, where the words keep one size. */\n  const casaOn = () => (FOCUS ? FOCUS.preset === 'casa' : (!VASE && st.preset === 'casa'));\n  /* Couple Monogram (Annabelle, Oct 27): two initials with a dot between them, the names underneath lined up with the initials on both\n     ends, in Classic TAJA capitals, like every Couple jar on the product page. The shopper types the initials and the names. */\n  const COUPLE = !!FOCUS && FOCUS.preset === 'couple';\n  /* Memorial (Kourtney, Oct 27): their photo on the front; the lid always reads \"forever in our hearts\" in Classic Script (the\n     product's own lid, in its price). */\n  const MEMORIAL = !!FOCUS && FOCUS.preset === 'memorial';\n  const MEM_LID = { kind: 'text', text: 'forever in our hearts', font: 'ballet', layout: 'mc' };\n  /* Pet, Photo and Memorial (Kourtney, Oct 27 + 28): the front takes only a photo; Words, Pattern and Blank are grayed out there.\n     The other sides stay open through \"Engrave more sides\". Pet and Memorial also ask whether to remove the photo's background. */\n  const IMG_FRONT = !!FOCUS && ['pet', 'photo', 'memorial'].includes(FOCUS.preset);\n  const RMBG = !!FOCUS && ['pet', 'memorial'].includes(FOCUS.preset);\n  const lockText = () => casaOn() || COUPLE; /* the front's words follow the design */\n  const lockedFront = () => lockText() && st.face === 'front';\n  const lockedLid = () => MEMORIAL && st.face === 'lid';\n  const locked = () => lockedFront() || lockedLid();\n  const imgOnly = () => IMG_FRONT && st.face === 'front';\n  /* Sample words (Kourtney, Oct 30: a Little One jar came through with the template's 03.14.2026 on the back). On Design Your Own\n     a side whose words are still the template's own can't go to the bag until the shopper types their own or ticks \"Keep our\n     sample words\" on that side. Those sides are marked in the side list (gold) until they change, and in red after a blocked try. */\n  const isSampleSide = (id) => {\n    if (FOCUS) return false;\n    const pf = ((PRESETS[st.preset] || {}).faces || {})[id]; const fd = st.faces[id];\n    return !!(pf && pf.kind === 'text' && fd && fd.kind === 'text' && String(fd.text || '').trim() && String(fd.text).trim() === String(pf.text).trim());\n  };\n  const sampleSides = () => FACE_IDS.filter((id) => isSampleSide(id) && !st.faces[id].keep);\n  const sampleMark = (id) => (sampleSides().includes(id) ? ' is-sample' + (st.flagSample ? ' is-sample-err' : '') : '');\n  const keepBox = () => '<div class=\"cz-keep\" data-keepbox' + (isSampleSide(st.face) ? '' : ' hidden') + '><p class=\"cz-note\">These are our sample words. Type your own above, or keep them as they are.</p>' +\n    '<label class=\"cz-chk\"><input type=\"checkbox\" data-in=\"keep\"' + (st.faces[st.face].keep ? ' checked' : '') + '><span>Keep our sample words on the ' + (FACES.find((f) => f.id === st.face) || { name: st.face }).name.toLowerCase() + '</span></label></div>';\n  const casaName = (t) => String(t || '').replace(/\\r/g, '').split('\\n').map((l) => l.trim()).filter(Boolean)\n    .filter((l, i) => !(i === 0 && /^casa$/i.test(l))).join(' ').slice(0, 40);\n  /* names are engraved in capitals, like every Casa jar (John, Oct 24) */\n  const casaText = (name) => 'CASA' + (String(name || '').trim() ? '\\n' + String(name).replace(/\\s+/g, ' ').replace(/^ /, '').toUpperCase().slice(0, 40) : '');\n  /* Couple: line 1 holds the two initials (\"D \u00B7 C\"), the rest is the names, in capitals */\n  const oneLetter = (s) => (String(s || '').toUpperCase().match(/[\\p{L}\\p{N}]/u) || [''])[0];\n  const coupleParts = (t) => {\n    const ls = String(t || '').replace(/\\r/g, '').split('\\n');\n    const ini = [...String(ls[0] || '').toUpperCase()].filter((c) => /[\\p{L}\\p{N}]/u.test(c));\n    return { a: ini[0] || '', b: ini[1] || '', names: ls.slice(1).join(' ').replace(/\\s+/g, ' ').trim().toUpperCase().slice(0, 40) };\n  };\n  const coupleText = (p) => [p.a, p.b].filter(Boolean).join(' \u00B7 ') + (p.names ? '\\n' + p.names : '');\n  /* keep the designed surfaces as designed: CASA + name, the Couple's initials + names, the memorial lid */\n  const lockFix = () => {\n    if (casaOn()) st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: casaText(casaName(st.faces.front.text)), font: 'classic', layout: 'mc' });\n    if (COUPLE) st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: coupleText(coupleParts(st.faces.front.text)), font: 'classic', layout: 'mc' });\n    if (MEMORIAL && st.faces.lid) st.faces.lid = Object.assign({}, st.faces.lid, MEM_LID);\n  };\n  if (FOCUS && casaOn()) st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: 'CASA', font: 'classic', layout: 'mc' }); /* starts with no name, so nobody orders our sample name by mistake */\n  if (COUPLE) st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: '', font: 'classic', layout: 'mc' }); /* the sample shows faded until they type */\n  /* Casa type (John, Oct 23; measured from photos of six real Casa jars, mini to jumbo, Oct 24): always Classic TAJA, in capitals.\n     CASA and the name share one letter spacing; CASA's letters span 78% of the jar's width on every size; the name is set at\n     whatever size makes it span 96% of CASA's width, so EVIE comes out a little larger than CASA and MCCANTS about half its size\n     (the shop's own rule: the longer the name, the smaller it's etched); the gap between the lines is 0.6 of CASA's capital\n     height; the pair sits centered on the jar. Font and placement can't change.\n     Short names (Kourtney, Oct 28): \"the name and CASA should always line up on both ends\", so a short name is etched larger than\n     CASA (her example: CASA / NG, the name twice CASA's height). Only a single letter, which can't span CASA, stops at the\n     jar's height, centered. */\n  const isCasaFace = (fd) => casaOn() && fd === st.faces.front && fd.kind === 'text';\n  const isCoupleFace = (fd) => COUPLE && fd === st.faces.front && fd.kind === 'text';\n  let uploadFile = null;\n  let busy = false;\n\n  /* Saved designs: ?design=\u2026 link, else this browser's autosave */\n  const KEY = 'dl-cz:' + C.handle;\n  const b64e = (o) => btoa(unescape(encodeURIComponent(JSON.stringify(o)))).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n  const b64d = (s) => JSON.parse(decodeURIComponent(escape(atob(s.replace(/-/g, '+').replace(/_/g, '/')))));\n  const pack = () => ({ v: 1, g: st.glass, s: st.size, p: st.preset, f: st.faces, sc: st.scent, gi: st.gift === true ? 1 : (st.gift === false ? 0 : -1), nm: st.noteMsg, mk: st.mockup ? 1 : 0, iv: st.invert ? 1 : 0, rb: st.rmbg, wx: st.wax, dn: st.designNote });\n  const unpack = (o) => {\n    if (!o || o.v !== 1) return;\n    if (GLASSES.includes(o.g)) st.glass = o.g;\n    if (SIZES.find((x) => x.id === o.s)) st.size = o.s;\n    if (PRESETS[o.p]) st.preset = o.p;\n    if (o.f && typeof o.f === 'object') {\n      const base = presetFaces('blank');\n      FACE_IDS.forEach((f) => { if (o.f[f]) base[f] = Object.assign(base[f], o.f[f]); base[f].text = String(base[f].text || '').slice(0, 120); if (FONT_ALIAS[base[f].font]) base[f].font = FONT_ALIAS[base[f].font]; else if (!FONTS[base[f].font]) base[f].font = 'classic'; });\n      st.faces = base;\n    }\n    st.scent = SCENTS.includes(o.sc) ? o.sc : '';\n    /* designs saved before Oct 29 had To and From boxes: they fold into the one message */\n    const nt = String(o.nt || '').trim(); const nf = String(o.nf || '').trim(); const nm = String(o.nm || '').trim();\n    st.noteMsg = [nt ? 'To ' + nt + ':' : '', nm, nf ? 'From ' + nf : ''].filter(Boolean).join(' ').slice(0, NOTE_MAX);\n    st.gift = o.gi === 0 ? false : ((o.gi === 1 && st.noteMsg) ? true : null);\n    st.mockup = !!o.mk; st.invert = !!o.iv; st.rmbg = o.rb === 'yes' ? 'yes' : 'no'; st.wax = o.wx === 'beeswax' ? 'beeswax' : 'soy'; st.designNote = String(o.dn || '').slice(0, 300);\n  };\n  try {\n    const qs = new URLSearchParams(location.search);\n    const q = qs.get('design');\n    if (q) { unpack(b64d(q)); st.step = 5; }\n    else if (qs.get('from')) {\n      /* From a product page's \"Fully customize\": same jar + size, starting from the closest design */\n      const g = String(qs.get('g') || '').toLowerCase(); if (GLASSES.includes(g)) st.glass = g;\n      const sz = String(qs.get('s') || '').toLowerCase(); if (SIZES.find((x) => x.id === sz)) st.size = sz;\n      const pr = qs.get('p');\n      if (PRESETS[pr] && !FOCUS) { st.preset = pr; st.faces = presetFaces(pr); st.step = 3; } else st.step = FOCUS ? 3 : 2;\n      try { ['from', 'g', 's', 'p'].forEach((k) => qs.delete(k)); history.replaceState(null, '', location.pathname + (qs.toString() ? '?' + qs : '') + location.hash); } catch (e) {}\n    }\n    else {\n      const raw = localStorage.getItem(KEY);\n      if (raw) { const o = JSON.parse(raw); unpack(o.d); if (o.u && typeof o.u === 'string' && o.u.indexOf('data:image/') === 0) st.upload = o.u; }\n    }\n  } catch (e) {}\n  lockFix();\n  if (ALT[st.glass] && !variantFor(st.glass, st.size)) st.size = ALT[st.glass].variants[0].size;\n  let saveT = 0;\n  const autosave = () => {\n    clearTimeout(saveT);\n    saveT = setTimeout(() => {\n      try { const o = { d: pack() }; if (st.upload && st.upload.length < 1500000) o.u = st.upload; localStorage.setItem(KEY, JSON.stringify(o)); }\n      catch (e) { try { localStorage.setItem(KEY, JSON.stringify({ d: pack() })); } catch (e2) {} }\n    }, 400);\n  };\n\n  /* ---------- Engraving maths (from the prototype) ---------- */\n  /* Real width of a line in em, once its font has loaded: the letters' ink, so script capitals with long swashes count (Oct 18:\n     Ballet \"C + M\" ran off the lid). Until the font loads it's 0 and the per-character estimate (cw) decides on its own. */\n  const emCtx = (() => { try { return document.createElement('canvas').getContext('2d'); } catch (e) { return null; } })();\n  const emCache = {};\n  const emWidth = (F, line) => {\n    if (!emCtx || !line || !document.fonts || !document.fonts.check) return 0;\n    const font = F.wt + ' 100px ' + F.fam;\n    const key = font + '|' + line;\n    if (emCache[key] !== undefined) return emCache[key];\n    let ok = false; try { ok = document.fonts.check(font, line); } catch (e) { ok = false; }\n    if (!ok) return 0;\n    const tx = F.tt === 'uppercase' ? line.toUpperCase() : (F.tt === 'lowercase' ? line.toLowerCase() : line);\n    emCtx.font = font;\n    const m = emCtx.measureText(tx);\n    const adv = m.width + F.tr * 100 * [...tx].length;\n    const ink = (m.actualBoundingBoxLeft || 0) + (m.actualBoundingBoxRight || 0);\n    emCache[key] = Math.max(adv, ink) / 100;\n    return emCache[key];\n  };\n  /* Casa lines: width of the letters' ink in em at letter spacing tr, and where the ink starts. Letters are measured one by one,\n     without kerning, the way the studio's jars are spaced (and the way the proof draws them). A per-letter estimate stands in\n     until the TAJA font has loaded; the customizer redraws once it has. */\n  const CASA_T = 0.25; /* letter spacing of both lines, in em (measured: the gaps between letters are 0.47 of the capital height) */\n  const CASA_CAP = 1430 / 2048; /* Sansation Light capital height, in em */\n  const CASA_TOP = 0.1485; /* depth of the capitals' top inside a line-height:1 box, in em (hhea 1854 / 434) */\n  const CASA_INK = 5554 / 2048; /* CASA's ink width without spacing, in em */\n  const CASA_X = 110 / 2048; /* the C's left side bearing, in em */\n  const inkEm = (F, t, tr) => {\n    const ch = [...t]; const n = ch.length;\n    if (!n) return { w: 0, x: 0 };\n    if (emCtx && document.fonts && document.fonts.check) {\n      /* check the TAJA face alone: other apps declare 'Montserrat' faces that never load, which makes a check of the whole stack fail */\n      const one = F.wt + ' 100px ' + F.fam.split(',')[0].trim(); let ok = false; try { ok = document.fonts.check(one, t); } catch (e) { ok = false; }\n      if (ok) {\n        emCtx.font = F.wt + ' 100px ' + F.fam;\n        let adv = 0; for (let i = 0; i < n - 1; i++) adv += emCtx.measureText(ch[i]).width;\n        const a = emCtx.measureText(ch[0]); const z = emCtx.measureText(ch[n - 1]);\n        const l = a.actualBoundingBoxLeft || 0; const r = (z.actualBoundingBoxRight !== undefined ? z.actualBoundingBoxRight : z.width);\n        return { w: (adv + r + l) / 100 + (n - 1) * tr, x: -l / 100 };\n      }\n    }\n    return { w: n * 0.66 - 0.11 + (n - 1) * tr, x: 0.06 };\n  };\n  const casaLayout = (fd, W, H) => {\n    const F = FONTS.classic; const name = casaName(fd.text);\n    const JW = H / 1.07; /* the whole jar's width: the stage passes only the flat side, the tiles the whole side, so go by the height */\n    const c0 = CASA_INK + 3 * CASA_T;\n    const s1 = (0.78 * JW) / c0; /* CASA's letters span 78% of the jar */\n    const W1 = s1 * c0;\n    const lines = [{ t: 'CASA', s: s1, tr: CASA_T, w: W1, x0: CASA_X * s1 }];\n    let level = 'fits'; let s2 = 0;\n    if (name) {\n      const tr = CASA_T; const m = inkEm(F, name, tr);\n      s2 = (0.96 * W1) / m.w;\n      /* the name spans CASA's width whatever its length (CASA / NG comes out about twice CASA's height); only a name that would\n         outgrow the jar (a single letter) stops where the pair fills 80% of the jar's height */\n      const sMax = (0.8 * H - 1.6 * CASA_CAP * s1) / CASA_CAP;\n      if (s2 > sMax) s2 = sMax;\n      lines.push({ t: name, s: s2, tr, w: m.w * s2, x0: m.x * s2 });\n      const k = s2 / s1;\n      if (k < 0.25) level = 'long'; else if (k < 0.4) level = 'small';\n    }\n    const capC = CASA_CAP * s1; const gap = 0.6 * capC;\n    let y = (H - (capC + (name ? gap + CASA_CAP * s2 : 0))) / 2; /* top of CASA's capitals */\n    lines.forEach((l, i) => { if (i) y += gap; l.base = y + CASA_CAP * l.s; l.top = l.base - (CASA_CAP + CASA_TOP) * l.s; l.left = (W - l.w) / 2 - l.x0; y = l.base; });\n    return { F, name, s1, s2, lines, level };\n  };\n  /* Couple type (Annabelle, Oct 27; measured from TAJA's Couple renders and jar photos: D\u00B7C, J\u00B7R, A\u00B7I, K\u00B7N): Classic TAJA capitals.\n     The initials' capitals are a third of the jar's width tall, with a round dot between them at mid height (a bullet at 0.49 of\n     their size, letter spacing 0.115em, so each gap is about 0.19em); the names are set at whatever size makes them span exactly\n     the initials' width (letter spacing 0.02em), so both lines line up on both ends; the gap is 0.14 of the initials' capital\n     height; the pair sits centered on the jar. Very short names stop at 45% of the initials' size and spread out to the width. */\n  const CPL_T1 = 0.115; const CPL_T2 = 0.02; const CPL_DOT = 0.49; const CPL_UP = 0.32;\n  const iniEm = (F, a, b, tr) => {\n    if (!b) return inkEm(F, a, 0);\n    if (emCtx && document.fonts && document.fonts.check) {\n      const one = F.wt + ' 100px ' + F.fam.split(',')[0].trim(); let ok = false; try { ok = document.fonts.check(one, a + b + '\u2022'); } catch (e) { ok = false; }\n      if (ok) {\n        emCtx.font = F.wt + ' 100px ' + F.fam; const ma = emCtx.measureText(a); const mb = emCtx.measureText(b);\n        emCtx.font = F.wt + ' ' + (100 * CPL_DOT) + 'px ' + F.fam; const md = emCtx.measureText('\u2022');\n        const l = ma.actualBoundingBoxLeft || 0; const ob = ma.width + md.width + 2 * tr * 100;\n        return { w: (l + ob + (mb.actualBoundingBoxRight !== undefined ? mb.actualBoundingBoxRight : mb.width)) / 100, x: -l / 100 };\n      }\n    }\n    return { w: 0.66 + 0.3 + 0.66 - 0.11 + 2 * tr, x: 0.06 };\n  };\n  const coupleLayout = (fd, W, H) => {\n    const F = FONTS.classic; const p = coupleParts(fd.text);\n    const JW = H / 1.07;\n    let s1 = (0.333 * JW) / CASA_CAP;\n    const lines = []; let W1 = 0;\n    if (p.a || p.b) {\n      const a = p.a || p.b; const b = p.a ? p.b : '';\n      const m = iniEm(F, a, b, b ? CPL_T1 : 0);\n      if (m.w * s1 > 0.8 * JW) s1 = (0.8 * JW) / m.w; /* wide initials (W \u00B7 M) stay on the flat of the jar */\n      W1 = m.w * s1;\n      lines.push({ t: b ? a + '\u2022' + b : a, ini: b ? [a, b] : null, s: s1, tr: b ? CPL_T1 : 0, w: W1, x0: m.x * s1 });\n    }\n    let level = 'fits'; let s2 = 0;\n    if (p.names) {\n      const target = W1 || 0.78 * JW;\n      let tr = CPL_T2; let m = inkEm(F, p.names, tr);\n      s2 = target / m.w;\n      const n = [...p.names].length;\n      if (lines.length && s2 > 0.45 * s1) { s2 = 0.45 * s1; if (n > 1) { const m0 = inkEm(F, p.names, 0); tr = Math.max(CPL_T2, Math.min(0.6, (target / s2 - m0.w) / (n - 1))); m = inkEm(F, p.names, tr); } }\n      lines.push({ t: p.names, s: s2, tr, w: m.w * s2, x0: m.x * s2 });\n      const k = (CASA_CAP * s2) / JW;\n      if (k < 0.026) level = 'long'; else if (k < 0.04) level = 'small';\n    }\n    const gap = 0.14 * CASA_CAP * s1;\n    const tot = lines.reduce((t, l, i) => t + CASA_CAP * l.s + (i ? gap : 0), 0);\n    let y = (H - tot) / 2;\n    lines.forEach((l, i) => { if (i) y += gap; l.base = y + CASA_CAP * l.s; l.top = l.base - (CASA_CAP + CASA_TOP) * l.s; l.left = (W - l.w) / 2 - l.x0; y = l.base; });\n    return { F, name: p.names, s1, s2, lines, level, couple: p };\n  };\n  const fit = (fd, W, H) => {\n    if (isCasaFace(fd)) { const c = casaLayout(fd, W, H); return { lines: c.name ? ['CASA', c.name] : ['CASA'], fs: c.s1, level: c.level, F: c.F, count: c.name.length, casa: c }; }\n    if (isCoupleFace(fd)) { const c = coupleLayout(fd, W, H); return { lines: c.lines.map((l) => l.t), fs: c.s1, level: c.level, F: c.F, count: c.name.length, casa: c }; }\n    const F = FONTS[fd.font] || FONTS.classic;\n    const raw = (fd.text || '').replace(/\\r/g, '');\n    const lines = raw.split('\\n').map((l) => l.trim()).filter((l, i, a) => l.length || (i > 0 && i < a.length - 1));\n    const n = Math.max(1, lines.length);\n    const maxC = Math.max(1, ...lines.map((l) => l.length));\n    const P = POS[posKey(fd)];\n    const side = P.h !== 'c';\n    const aw = side ? W * 0.44 : W * 0.8;\n    const ah = P.v === 'c' ? H * 0.72 : (side ? H * 0.3 : H * 0.46);\n    const capS = (side ? W * 0.12 : W * 0.17) * F.k;\n    const ems = Math.max(maxC * F.cw, 1.04 * Math.max(0, ...lines.map((l) => emWidth(F, l))));\n    let fs = Math.min(capS, aw / ems, ah / (n * F.lh));\n    const r = fs / (F.k * W);\n    let level = 'fits';\n    if (r < 0.045) { level = 'long'; fs = 0.045 * W * F.k; } else if (r < 0.075) { level = 'small'; }\n    return { lines, fs, level, F, count: raw.replace(/\\n/g, '').length };\n  };\n  const waxFrac = () => 0.07 + 0.78 * (st.burn / 100); /* how far the wax has burned down, as a share of the jar's height */\n  const etch = (mode) => {\n    const b = st.burn / 100;\n    const wp = waxFrac() * 100;\n    if (mode === 'black-day') return { css: 'color:#D9D1C3;', stroke: '#D9D1C3', fill: '#D9D1C3' };\n    if (mode === 'white-day') return { css: 'color:rgba(104,98,90,.6);', stroke: 'rgba(104,98,90,.62)', fill: 'rgba(104,98,90,.55)' };\n    /* iridescent: the etching clears the shimmer and shows the white wax, a soft white that reads best in Block */\n    if (mode === 'iri-day') return { css: 'color:rgba(255,253,249,.97);text-shadow:0 0 .14cqw rgba(92,80,102,.5);', stroke: 'rgba(255,253,249,.97)', fill: 'rgba(255,253,249,.92)' };\n    /* gold: the etching clears the gold and shows the wax, matte cream on the mirror (Annabelle's photos, Oct 23) */\n    if (mode === 'gold-day') return { css: 'color:#F1EADC;text-shadow:0 0 .14cqw rgba(88,60,20,.55);', stroke: '#F1EADC', fill: '#F1EADC' };\n    if (mode === 'wood') return { css: 'color:rgba(92,58,28,.86);', stroke: 'rgba(92,58,28,.86)', fill: 'rgba(92,58,28,.8)' };\n    /* Candlelight: the words above the wax line light up, the ones still behind the wax stay dim */\n    const clip = ';-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;';\n    if (mode === 'white-night') {\n      const g = 'linear-gradient(180deg, rgba(255,244,226,.95) 0%, #FFF8EC ' + (wp - 5).toFixed(1) + '%, #FFFCF6 ' + wp.toFixed(1) + '%, rgba(96,86,76,.5) ' + (wp + 8).toFixed(1) + '%, rgba(84,76,68,.48) 100%)';\n      return { css: 'background-image:' + g + clip + 'filter:drop-shadow(0 0 .45cqw rgba(255,206,140,' + (0.45 + 0.3 * b).toFixed(2) + '));', stroke: 'rgba(255,236,206,.95)', fill: 'rgba(255,226,180,.9)', bg: g };\n    }\n    const g = 'linear-gradient(180deg, #F6E2BC 0%, #FFF6E2 ' + (wp - 6).toFixed(1) + '%, #FFEAC0 ' + wp.toFixed(1) + '%, rgba(150,128,100,.4) ' + (wp + 7).toFixed(1) + '%, rgba(124,108,88,.34) 100%)';\n    const glow = 'filter:drop-shadow(0 0 .3cqw rgba(255,230,184,' + (0.55 + 0.4 * b).toFixed(2) + ')) drop-shadow(0 0 1.4cqw rgba(255,184,104,' + (0.3 + 0.4 * b).toFixed(2) + '));';\n    return { css: 'background-image:' + g + clip + glow, stroke: '#EADCC0', fill: '#E2D3B5', bg: g };\n  };\n  /* HTML for whatever is engraved on one surface */\n  const COUPLE_SAMPLE = 'D \u00B7 C\\nDIRK + CHRISTINE';\n  const content = (fd, W, H, mode, tile, geo) => {\n    const e = etch(mode);\n    /* the Couple front shows the sample, faded, until the shopper types their own */\n    const cplSample = isCoupleFace(fd) && !(fd.text || '').trim();\n    if (fd.kind === 'text' && ((fd.text || '').trim() || cplSample)) {\n      const f = cplSample ? { casa: coupleLayout({ text: COUPLE_SAMPLE }, W, H) } : fit(fd, W, H);\n      if (f.casa) {\n        const c = f.casa; let prev = 0;\n        const ln = (l) => { const mt = l.top - prev; prev = l.top + l.s; return '<span style=\"display:block;width:max-content;margin:' + mt.toFixed(3) + 'cqw 0 0 ' + l.left.toFixed(3) + 'cqw;font-family:' + c.F.fam + ';font-weight:' + c.F.wt + ';font-size:' + l.s.toFixed(3) + 'cqw;line-height:1;letter-spacing:' + l.tr.toFixed(4) + 'em;font-kerning:none;text-transform:none;white-space:pre;text-align:left;padding:0\">' + (l.ini ? esc(l.ini[0]) + '<span style=\"font-size:' + CPL_DOT + 'em;vertical-align:' + CPL_UP + 'em;line-height:1\">\u2022</span>' + esc(l.ini[1]) : esc(l.t)) + '</span>'; };\n        return '<div class=\"cz-grain\" style=\"position:absolute;inset:0;display:block;box-sizing:border-box;overflow:hidden;' + e.css + (cplSample ? 'opacity:.4;' : '') + '\">' + c.lines.map(ln).join('') + '</div>';\n      }\n      const P = POS[posKey(fd)];\n      const just = FLEX[P.v];\n      const align = FLEX[P.h];\n      const pad = (P.v === 's' ? (P.h === 'c' ? H * 0.16 : H * 0.11) : (P.v === 'e' ? H * 0.09 : H * 0.1)).toFixed(2) + 'cqw ' + (W * 0.09).toFixed(2) + 'cqw';\n      const lines = tile ? f.lines.slice(0, 3) : f.lines;\n      const ls = 'font-family:' + f.F.fam + ';font-weight:' + f.F.wt + ';font-size:' + f.fs.toFixed(2) + 'cqw;line-height:' + f.F.lh + ';letter-spacing:' + f.F.tr + 'em;text-transform:' + f.F.tt + ';white-space:pre;text-align:' + ({ s: 'left', c: 'center', e: 'right' })[P.h] + ';margin:0;display:block';\n      return '<div class=\"cz-grain\" style=\"position:absolute;inset:0;display:flex;flex-direction:column;justify-content:' + just + ';align-items:' + align + ';padding:' + pad + ';box-sizing:border-box;overflow:hidden;' + e.css + '\">' +\n        lines.map((t) => '<span style=\"' + ls + '\">' + (esc(t) || '&nbsp;') + '</span>').join('') + '</div>';\n    }\n    if (fd.kind === 'pattern') {\n      const col = e.bg || e.fill;\n      const glow = (mode === 'black-night' || mode === 'gold-night') ? 'filter:drop-shadow(0 0 .4cqw rgba(255,214,160,' + (0.4 + 0.3 * st.burn / 100).toFixed(2) + '));' : '';\n      return '<div class=\"cz-patfill\" style=\"position:absolute;inset:0;background:' + col + ';' + (geo ? maskCss(patImg(patOf(fd.pattern).id), geo.mw.toFixed(2) + 'cqw ' + geo.mh.toFixed(2) + 'cqw', geo.x.toFixed(2) + 'cqw ' + geo.y.toFixed(2) + 'cqw') : maskCss(patImg(patOf(fd.pattern).id), 'cover')) + glow + '\"></div>';\n    }\n    if (fd.kind === 'image') {\n      const night = mode === 'black-night' || mode === 'gold-night';\n      const onWhite = mode.indexOf('white') === 0 || mode.indexOf('iri') === 0;\n      if (fd.image === 'upload' && st.upload) {\n        const d = st.detail;\n        const c = (1 + d / 22).toFixed(2);\n        const br = (0.55 + d / 110).toFixed(2);\n        const inv = st.invert ? ' invert(1)' : '';\n        const warm = night ? ' sepia(.55) saturate(1.2) brightness(1.06) drop-shadow(0 0 .5cqw rgba(255,214,160,.45))' : '';\n        return '<img src=\"' + esc(st.upload) + '\" alt=\"Your image, prepared for glass\" style=\"position:absolute;left:12%;top:12%;width:76%;height:76%;object-fit:contain;filter:grayscale(1) contrast(' + c + ') brightness(' + br + ')' + inv + warm + ';mix-blend-mode:' + (onWhite || mode === 'wood' ? 'multiply' : 'screen') + ';opacity:' + (onWhite ? 0.55 : (mode === 'wood' ? 0.7 : 0.92)) + '\">';\n      }\n      /* Waiting for their photo (John, Oct 18): a \"Your photo here\" frame instead of sample art. The sample shows only when asked for. */\n      if (fd.image === 'upload') {\n        const fs = Math.max(1, W * 0.04).toFixed(2);\n        return '<div style=\"position:absolute;left:15%;top:15%;width:70%;height:70%;box-sizing:border-box;border:' + Math.max(0.18, W * 0.007).toFixed(2) + 'cqw dashed ' + e.stroke + ';opacity:.7;border-radius:' + (W * 0.03).toFixed(2) + 'cqw;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:' + (W * 0.035).toFixed(2) + 'cqw;color:' + e.stroke + '\">' +\n          '<svg viewBox=\"0 0 48 40\" aria-hidden=\"true\" style=\"width:' + (W * 0.2).toFixed(2) + 'cqw;height:auto\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"42\" height=\"34\" rx=\"4\"/><circle cx=\"33\" cy=\"13\" r=\"4\"/><path d=\"M6 33 L18 20 L26 28 L31 23 L42 33\"/></svg>' +\n          '<span style=\"font-family:var(--dl-font-body, Montserrat, sans-serif);font-size:' + fs + 'cqw;letter-spacing:.12em;text-transform:uppercase;font-weight:500;white-space:nowrap\">Your photo here</span></div>';\n      }\n      return SAMPLE_SVG(e.stroke, 'position:absolute;left:18%;top:14%;width:64%;height:72%;' + (night ? 'filter:drop-shadow(0 0 .5cqw rgba(255,214,160,.5));' : ''));\n    }\n    return '';\n  };\n\n  /* ---------- Stage: built once, then only styles and engravings change (so turning animates) ---------- */\n  const stage = root.querySelector('[data-cz-stage]');\n  const faceShell = (id) => '<div data-f=\"' + id + '\"><div data-n></div><div data-c></div><div data-sh></div><div data-sn></div></div>';\n  const segShell = (k) => '<div data-cs=\"' + k + '\"><div data-n></div><div data-c></div><div data-sh></div><div data-sn></div></div>';\n  const KEYS = []; for (let ci = 0; ci < 4; ci++) for (let si = 0; si < 6; si++) KEYS.push(ci + '-' + si);\n  stage.innerHTML =\n    '<div data-floor></div>' +\n    '<div data-scene><div data-halo></div><div data-jar>' + ['front', 'right', 'back', 'left'].map(faceShell).join('') + KEYS.map(segShell).join('') +\n      '<div data-rim></div>' + [0, 90, 180, -90].map((a) => '<div data-iw=\"' + a + '\"></div>').join('') + '<div data-wax></div>' +\n      (VASE ? '' : '<div data-flame><div data-fb><svg viewBox=\"0 0 40 90\" aria-hidden=\"true\" class=\"cz-flicker\" style=\"width:100%;height:100%;overflow:visible\"><defs><radialGradient id=\"czFlame\" cx=\"50%\" cy=\"70%\" r=\"62%\"><stop offset=\"0\" stop-color=\"#FFFFFF\"/><stop offset=\".28\" stop-color=\"#FFF1C6\"/><stop offset=\".62\" stop-color=\"#FFB547\"/><stop offset=\"1\" stop-color=\"#FF7A1A\" stop-opacity=\"0\"/></radialGradient></defs><path d=\"M20 3 C27 23 36 40 34 58 C32 74 26 84 20 84 C14 84 8 74 6 58 C4 40 13 23 20 3 Z\" fill=\"url(#czFlame)\"/><ellipse cx=\"20\" cy=\"73\" rx=\"4.6\" ry=\"7.5\" fill=\"#4a72c9\" opacity=\".3\"/><path d=\"M20 70 L20 90\" stroke=\"#2a1a0e\" stroke-width=\"1.6\"/></svg></div></div>' +\n        '<div data-lid><div class=\"cz-tex-wood\" data-lt><div data-c></div><div data-sh></div></div>' + [0, 90, 180, -90].map((a) => '<div class=\"cz-tex-wood\" data-ls=\"' + a + '\"></div>').join('') + KEYS.map((k) => '<div class=\"cz-tex-wood\" data-lc=\"' + k + '\"></div>').join('') + '</div>') +\n    '</div></div>' +\n    (VASE ? '' : '<div class=\"cz-tex-wood\" data-inside><div data-c></div></div>') +\n    '<p class=\"cz-chip\" data-chip></p>' +\n    (VASE ? '' : '<div class=\"cz-light\" role=\"group\" aria-label=\"Lighting\" data-lightbox><button type=\"button\" data-act=\"day\">Daylight</button><button type=\"button\" data-act=\"night\">Candlelight</button></div>') +\n    '<div class=\"cz-ctl\" data-ctl><div class=\"cz-burn\" data-burnbox hidden><div class=\"cz-burn__top\"><label for=\"cz-burn\">Watch it reveal</label><span data-burnlabel></span></div><input id=\"cz-burn\" type=\"range\" min=\"0\" max=\"100\" data-in=\"burn\"></div>' +\n    '<div class=\"cz-ctl__row\"><button type=\"button\" class=\"cz-ctl__btn\" data-act=\"turnl\" aria-label=\"Turn the jar to the left\">' + CHEV_L + '</button><span class=\"cz-ctl__name\" data-facename aria-live=\"polite\"></span><button type=\"button\" class=\"cz-ctl__btn\" data-act=\"turnr\" aria-label=\"Turn the jar to the right\">' + CHEV + '</button></div></div>';\n  const $s = (sel) => stage.querySelector(sel);\n  const S = {\n    halo: $s('[data-halo]'), floor: $s('[data-floor]'), scene: $s('[data-scene]'), jar: $s('[data-jar]'), wax: $s('[data-wax]'), lid: $s('[data-lid]'),\n    lt: $s('[data-lt]'), flame: $s('[data-flame]'), fb: $s('[data-fb]'), rim: $s('[data-rim]'), inside: $s('[data-inside]'), chip: $s('[data-chip]'), lightbox: $s('[data-lightbox]'), ctl: $s('[data-ctl]'),\n    burnbox: $s('[data-burnbox]'), burn: $s('#cz-burn'), burnlabel: $s('[data-burnlabel]'), facename: $s('[data-facename]')\n  };\n  const sz = () => SIZES.find((x) => x.id === st.size) || SIZES[0] || firstSize;\n  const lastHTML = new WeakMap();\n  const setHTML = (el, html) => { if (el && lastHTML.get(el) !== html) { el.innerHTML = html; lastHTML.set(el, html); } };\n  const rad = Math.PI / 180;\n\n  /* Jar shape (John, Oct 12: match the real jar): square glass with rounded corners. Each corner is a quarter-round made of\n     narrow strips; the lid is the same rounded square in wood. In candlelight the wax sinks as it burns, the flame stands on\n     the wax (inside the jar), the room darkens and the words above the wax line light up. */\n  const RAD = 0.075; /* corner radius, as a share of the jar's width */\n  const SEG = 6; /* strips per corner */\n  const GLASS_T = 0.035; /* glass wall, as a share of the width */\n  const baseTilt = () => (st.light === 'night' && !VASE ? -14 : -9);\n  const waxDepth = (H, night) => H * (VASE ? 0.06 : (night ? waxFrac() : 0.07));\n  const mix = (c1, c2, t) => { const p = (c) => [1, 3, 5].map((i) => parseInt(c.slice(i, i + 2), 16)); const a = p(c1), z = p(c2); return '#' + a.map((v, i) => Math.round(v + (z[i] - v) * t).toString(16).padStart(2, '0')).join(''); };\n  const renderStage = () => {\n    const Z = sz();\n    const W = 46 * Z.s;\n    const H = W * (VASE ? 1.12 : 1.07);\n    const LT = W * 0.075;\n    const r = W * RAD;\n    const Wf = W - 2 * r;\n    const t = W * GLASS_T;\n    const night = !VASE && st.light === 'night';\n    const G = gl();\n    /* gold glows amber when lit (Annabelle's autumn photo), so by candlelight it lights up like white glass */\n    const black = ((night && G.nightBase) || G.base) === 'black';\n    const b = st.burn / 100;\n    const glassMode = night ? G.night : G.day;\n    const insideView = st.face === 'inside';\n    const tex = G.tex;\n    const depth = waxDepth(H, night);\n    const move = dragging ? 'none' : 'transform .95s cubic-bezier(.2,.7,.2,1)';\n    /* Size change (John, Oct 18): the parts used to animate one by one and the jar came apart mid-change. Now every part jumps to the\n       new size together and the whole scene scales from the old size to the new one as one piece. */\n    const resized = S._lastW !== undefined && S._lastW !== W && !dragging && !matchMedia('(prefers-reduced-motion: reduce)').matches;\n    const fromScale = resized ? S._lastW / W : 1;\n    S._lastW = W;\n    const f2 = (n) => n.toFixed(2);\n    /* Candlelight: the stage grows taller so the reveal controls sit below the jar, not over it (Oct 12 phone review) */\n    stage.classList.toggle('is-night', night);\n    const jarCY = mq.matches ? (night ? 43 : 46) : (night ? 41.5 : 49);\n    const yaw = { front: 0, right: 90, back: 180, left: -90 };\n    const YAW_ID = { 0: 'front', 90: 'right', 180: 'back', 270: 'left' };\n    const shadeOf = (wy) => {\n      const lit = Math.max(0, Math.cos((wy + 35) * rad));\n      return black ? (night ? Math.min(0.92, 0.25 + 0.45 * (1 - lit) + 0.15 * b) : 0.06 + 0.6 * (1 - lit)) : (night ? Math.min(0.85, 0.15 + 0.4 * (1 - lit) + 0.12 * b) : 0.02 + 0.36 * (1 - lit));\n    };\n    const nightVeil = () => (black\n      ? 'position:absolute;inset:0;background:linear-gradient(180deg, rgba(255,170,90,' + (0.2 * (1 - b)).toFixed(2) + ') 0%, rgba(10,6,3,' + (0.4 + 0.25 * b).toFixed(2) + ') 12%, rgba(8,5,3,' + (0.55 + 0.3 * b).toFixed(2) + ') 100%)'\n      : 'position:absolute;inset:0;mix-blend-mode:multiply;background:linear-gradient(180deg, ' + mix('#F7E3C6', '#EBCFAA', b) + ' 0%, #FFF1DC ' + f2(depth / H * 100 - 4) + '%, #FFF8EC ' + f2(depth / H * 100) + '%, #B9AA99 ' + f2(depth / H * 100 + 9) + '%, #94877A ' + f2(depth / H * 100 + 26) + '%, #6E655C 106%)');\n    /* patterns wrap half way round each corner: 3 corner strips each side of the flat side */\n    const pitch = 2 * r * Math.tan((45 / SEG) * rad);\n    const half = (SEG / 2) * pitch;\n    const Wx = Wf + 2 * half;\n    const pg = {};\n    ['front', 'right', 'back', 'left'].forEach((id) => { const fd = st.faces[id]; if (fd && fd.kind === 'pattern') pg[id] = patGeo(patOf(fd.pattern).id, Wx, H); });\n    const geoAt = (id, u0) => (pg[id] ? { mw: pg[id].mw, mh: pg[id].mh, x: pg[id].ox - u0, y: pg[id].oy } : null);\n    /* flat sides */\n    ['front', 'right', 'back', 'left'].forEach((id) => {\n      const el = stage.querySelector('[data-f=\"' + id + '\"]');\n      const wy = yaw[id] + st.angle;\n      const facing = Math.max(0, Math.cos(wy * rad));\n      const sx = Math.max(-20, Math.min(120, 50 - wy * 0.9));\n      const sheen = G.sheen * Math.pow(facing, 2);\n      el.className = tex;\n      el.style.cssText = 'position:absolute;left:' + f2(-Wf / 2) + 'cqw;top:' + f2(-H / 2) + 'cqw;width:' + f2(Wf) + 'cqw;height:' + f2(H) + 'cqw;transform:rotateY(' + yaw[id] + 'deg) translateZ(' + f2(W / 2) + 'cqw);backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden;background-size:' + f2(W) + 'cqw ' + f2(H) + 'cqw;background-position:center;box-shadow:inset 0 -' + f2(H * 0.03) + 'cqw ' + f2(H * 0.035) + 'cqw -' + f2(H * 0.02) + 'cqw rgba(0,0,0,' + G.edge + ');transition:none';\n      el.querySelector('[data-n]').style.cssText = !night ? 'display:none' : nightVeil();\n      setHTML(el.querySelector('[data-c]'), content(st.faces[id], Wf, H, glassMode, false, geoAt(id, half)));\n      el.querySelector('[data-sh]').style.cssText = 'position:absolute;inset:0;pointer-events:none;background:' + (G.shade || (night ? '#2B2825' : '#3B3127')) + ';opacity:' + shadeOf(wy).toFixed(3) + ';transition:opacity .9s cubic-bezier(.2,.7,.2,1)';\n      el.querySelector('[data-sn]').style.cssText = 'position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg, rgba(255,255,255,0) ' + f2(sx - 18) + '%, rgba(255,' + (night ? '200,140' : '255,255') + ',' + sheen.toFixed(3) + ') ' + f2(sx) + '%, rgba(255,255,255,0) ' + f2(sx + 18) + '%);transition:background .9s';\n    });\n    /* rounded corners: narrow strips around a quarter circle, each lit by the way it faces */\n    const c = W / 2 - r;\n    const segW = 2 * r * Math.tan((45 / SEG) * rad) + 0.12;\n    const cornerTf = (ci, si, tz) => {\n      const a = ci * 90; const phi = a + (si + 0.5) * (90 / SEG);\n      const cx = c * (Math.sin(a * rad) + Math.sin((a + 90) * rad)); const cz = c * (Math.cos(a * rad) + Math.cos((a + 90) * rad));\n      return { phi, tf: 'translate3d(' + f2(cx) + 'cqw,0,' + f2(cz) + 'cqw) rotateY(' + phi.toFixed(2) + 'deg) translateZ(' + f2(tz) + 'cqw)' };\n    };\n    stage.querySelectorAll('[data-cs]').forEach((el) => {\n      const [ci, si] = el.dataset.cs.split('-').map(Number);\n      const { phi, tf } = cornerTf(ci, si, r);\n      const wy = phi + st.angle;\n      const glint = Math.pow(Math.max(0, Math.cos((wy + 30) * rad)), 6) * (G.glint ? G.glint[night ? 1 : 0] : (black ? (night ? 0.08 : 0.16) : 0.3));\n      el.className = tex;\n      el.style.cssText = 'position:absolute;left:' + f2(-segW / 2) + 'cqw;top:' + f2(-H / 2) + 'cqw;width:' + f2(segW) + 'cqw;height:' + f2(H) + 'cqw;transform:' + tf + ';backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden;background-size:' + f2(W) + 'cqw ' + f2(H) + 'cqw;background-position:center;box-shadow:inset 0 -' + f2(H * 0.03) + 'cqw ' + f2(H * 0.035) + 'cqw -' + f2(H * 0.02) + 'cqw rgba(0,0,0,' + G.edge + ')';\n      el.querySelector('[data-n]').style.cssText = !night ? 'display:none' : nightVeil();\n      { /* strips 0-2 finish the side before the corner, 3-5 start the side after it */\n        const own = YAW_ID[((ci * 90 + (si < SEG / 2 ? 0 : 90)) % 360)];\n        const uc = si < SEG / 2 ? half + Wf + (si + 0.5) * pitch : (si - SEG / 2 + 0.5) * pitch;\n        const g = geoAt(own, uc - segW / 2);\n        setHTML(el.querySelector('[data-c]'), g ? content(st.faces[own], segW, H, glassMode, false, g) : ''); }\n      el.querySelector('[data-sh]').style.cssText = 'position:absolute;inset:0;background:' + (G.shade || (night ? '#2B2825' : '#3B3127')) + ';opacity:' + shadeOf(wy).toFixed(3) + ';transition:opacity .9s cubic-bezier(.2,.7,.2,1)';\n      el.querySelector('[data-sn]').style.cssText = 'position:absolute;inset:0;background:rgba(255,' + (night ? '214,160' : '255,255') + ',' + glint.toFixed(3) + ');transition:background .9s';\n    });\n    /* the rim, the glass inside above the wax, and the wax (or the vase's open top) */\n    const ringCss = 'position:absolute;left:' + f2(-W / 2) + 'cqw;top:' + f2(-W / 2) + 'cqw;width:' + f2(W) + 'cqw;height:' + f2(W) + 'cqw;box-sizing:border-box;border-radius:' + f2(r) + 'cqw;';\n    S.rim.style.cssText = ringCss + 'transform:rotateX(90deg) translateZ(' + f2(H / 2) + 'cqw);border:' + f2(t) + 'cqw solid ' + G.rim[night ? 1 : 0] + ';background:transparent';\n    const glowIn = night ? 1 : 0;\n    stage.querySelectorAll('[data-iw]').forEach((el) => {\n      const a = +el.dataset.iw;\n      const lo = G.wall && !night ? G.wall[0] : (black ? (night ? '#FFC47E' : '#1E1A17') : (night ? '#FFE6BE' : '#DCD3C7'));\n      const hi = G.wall && !night ? G.wall[1] : (black ? (night ? mix('#9A6634', '#5A3518', b) : '#0F0D0C') : (night ? mix('#F0CFA2', '#D9B58A', b) : '#EDE7DE'));\n      el.style.cssText = 'position:absolute;left:' + f2(-(W / 2 - t)) + 'cqw;top:' + f2(-H / 2) + 'cqw;width:' + f2(W - 2 * t) + 'cqw;height:' + f2(Math.max(0.2, depth)) + 'cqw;transform:rotateY(' + a + 'deg) translateZ(' + f2(W / 2 - t) + 'cqw) rotateY(180deg);backface-visibility:hidden;-webkit-backface-visibility:hidden;background:linear-gradient(180deg, ' + hi + ' 0%, ' + lo + ' 100%);opacity:' + (VASE ? 0 : 1);\n    });\n    if (VASE) {\n      S.wax.style.cssText = ringCss + 'transform:rotateX(90deg) translateZ(' + f2(H / 2 - 0.05) + 'cqw);border:' + f2(t) + 'cqw solid ' + (black ? '#1d1b19' : '#F2EFEA') + ';background:' + (black ? 'radial-gradient(circle at 50% 50%, #3a3633 0%, #141211 70%)' : 'radial-gradient(circle at 50% 50%, #E9E3DA 0%, #CFC6B8 75%)') + ';box-shadow:inset 0 0 ' + f2(W * 0.12) + 'cqw rgba(0,0,0,.45)';\n    } else {\n      const wW = W - 2 * t;\n      S.wax.style.cssText = 'position:absolute;left:' + f2(-wW / 2) + 'cqw;top:' + f2(-wW / 2) + 'cqw;width:' + f2(wW) + 'cqw;height:' + f2(wW) + 'cqw;border-radius:' + f2(Math.max(0.3, r - t)) + 'cqw;transform:rotateX(90deg) translateZ(' + f2(H / 2 - depth) + 'cqw);background:' + (night ? 'radial-gradient(circle at 50% 50%, #FFF8E4 0%, #FFE3AC 14%, #EBC48A 38%, ' + mix('#B07A42', '#7A4C24', b) + ' 70%, ' + mix('#5A3A1E', '#2A1A0E', b) + ' 100%)' : 'radial-gradient(circle at 50% 50%, #F7F0E3 0%, #EFE5D3 60%, #D9CBB2 100%)') + ';box-shadow:inset 0 0 ' + f2(W * 0.06) + 'cqw rgba(0,0,0,' + (night ? 0.35 : 0.2) + ')';\n      /* lid */\n      const lidTilt = Math.max(0, -st.tilt) / 64;\n      const lidOp = night ? 0 : 1;\n      const base = 'position:absolute;backface-visibility:hidden;-webkit-backface-visibility:hidden;overflow:hidden;transition:opacity .6s ease;opacity:' + lidOp + ';';\n      S.lt.style.cssText = base + 'background-size:cover;left:' + f2(-W / 2) + 'cqw;top:' + f2(-W / 2) + 'cqw;width:' + f2(W) + 'cqw;height:' + f2(W) + 'cqw;border-radius:' + f2(r) + 'cqw;transform:rotateX(90deg) translateZ(' + f2(LT / 2) + 'cqw);box-shadow:inset 0 0 0 1px rgba(92,58,28,.12)';\n      setHTML(S.lt.querySelector('[data-c]'), content(st.faces.lid, W, W, 'wood'));\n      S.lt.querySelector('[data-sh]').style.cssText = 'position:absolute;inset:0;pointer-events:none;background:#2a1a0c;opacity:' + (0.28 - 0.22 * lidTilt).toFixed(3) + ';transition:opacity .9s';\n      const ly = (a) => Math.max(0.55, Math.min(1.08, 0.62 + 0.45 * Math.max(0, Math.cos((a + st.angle + 35) * rad))));\n      stage.querySelectorAll('[data-ls]').forEach((el) => {\n        const a = +el.dataset.ls;\n        el.style.cssText = base + 'background-size:' + f2(W) + 'cqw ' + f2(LT * 4) + 'cqw;background-position:center;left:' + f2(-Wf / 2) + 'cqw;top:' + f2(-LT / 2) + 'cqw;width:' + f2(Wf) + 'cqw;height:' + f2(LT) + 'cqw;transform:rotateY(' + a + 'deg) translateZ(' + f2(W / 2) + 'cqw);filter:brightness(' + ly(a).toFixed(2) + ')';\n      });\n      stage.querySelectorAll('[data-lc]').forEach((el) => {\n        const [ci, si] = el.dataset.lc.split('-').map(Number);\n        const { phi, tf } = cornerTf(ci, si, r);\n        el.style.cssText = base + 'background-size:' + f2(W) + 'cqw ' + f2(LT * 4) + 'cqw;background-position:center;left:' + f2(-segW / 2) + 'cqw;top:' + f2(-LT / 2) + 'cqw;width:' + f2(segW) + 'cqw;height:' + f2(LT) + 'cqw;transform:' + tf + ';filter:brightness(' + ly(phi).toFixed(2) + ')';\n      });\n      S.lid.style.cssText = 'position:absolute;left:0;top:0;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:' + (resized ? 'none' : 'transform .8s cubic-bezier(.2,.7,.2,1)') + ';transform:translateY(' + f2(-(H / 2 + LT / 2) - (night ? H * 0.55 : 0)) + 'cqw)';\n      /* the flame stands on the wax at the centre of the jar and always faces you */\n      const fw = W * 0.12; const fh = W * 0.27;\n      S.flame.style.cssText = 'position:absolute;left:0;top:0;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transform:translate3d(0,' + f2(-H / 2 + depth) + 'cqw,0);opacity:' + (night && !insideView ? 1 : 0) + ';visibility:' + (night && !insideView ? 'visible;transition:opacity .6s, visibility 0s' : 'hidden;transition:opacity .6s, visibility 0s linear .6s') + ';pointer-events:none';\n      S.fb.style.cssText = 'position:absolute;left:' + f2(-fw / 2) + 'cqw;top:' + f2(-fh) + 'cqw;width:' + f2(fw) + 'cqw;height:' + f2(fh) + 'cqw;transform-origin:50% 100%;transition:' + move + ';transform:rotateY(' + (-st.angle) + 'deg) rotateX(' + (-st.tilt) + 'deg)';\n      S.inside.style.cssText = 'position:absolute;left:50%;top:' + (jarCY - 2) + '%;width:' + f2(W * 1.25) + 'cqw;height:' + f2(W * 1.25) + 'cqw;border-radius:' + f2(r * 1.25) + 'cqw;transform:translate(-50%,-50%) perspective(' + (W * 8).toFixed(0) + 'cqw) rotateX(' + (insideView ? 14 : 70) + 'deg);opacity:' + (insideView ? 1 : 0) + ';transition:opacity .6s, transform .8s cubic-bezier(.2,.7,.2,1);box-shadow:0 2.4cqw 5cqw rgba(14,13,12,.28);overflow:hidden;pointer-events:none;background-size:cover';\n      setHTML(S.inside.querySelector('[data-c]'), content(st.faces.inside, W * 1.25, W * 1.25, 'wood'));\n    }\n    S.scene.style.cssText = 'position:absolute;left:50%;top:' + jarCY + '%;width:0;height:0;perspective:' + (W * 9).toFixed(0) + 'cqw;perspective-origin:50% 50%;transition:opacity .6s, transform .6s;opacity:' + (insideView ? 0.18 : 1) + ';transform:scale(' + (insideView ? 0.86 : 1) + ')';\n    if (resized) {\n      const end = 'scale(' + (insideView ? 0.86 : 1) + ')';\n      S.scene.style.transition = 'none'; S.scene.style.transform = 'scale(' + ((insideView ? 0.86 : 1) * fromScale).toFixed(4) + ')';\n      void S.scene.offsetWidth;\n      S.scene.style.transition = 'opacity .6s, transform .6s cubic-bezier(.2,.7,.2,1)'; S.scene.style.transform = end;\n    }\n    S.jar.style.cssText = 'position:absolute;left:0;top:0;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:' + move + ';transform:rotateX(' + st.tilt + 'deg) rotateY(' + st.angle + 'deg)';\n    /* the room darkens as the candle burns down */\n    stage.style.background = night ? 'radial-gradient(90% 70% at 50% 42%, ' + mix('#2E1E11', '#140D08', b) + ' 0%, ' + mix('#170F0A', '#090605', b) + ' 46%, ' + mix('#0A0807', '#030202', b) + ' 100%)' : 'radial-gradient(120% 85% at 50% 32%, #FBF9F6 0%, #F2EDE5 55%, #E7E0D6 100%)';\n    S.floor.style.cssText = 'position:absolute;left:50%;top:' + (jarCY + H / 2 - 1).toFixed(2) + '%;width:' + f2(W * 1.9) + 'cqw;height:' + f2(W * 0.32) + 'cqw;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(closest-side, ' + (night ? 'rgba(255,160,80,' + (0.16 - 0.1 * b).toFixed(2) + '), rgba(255,140,60,0)' : 'rgba(14,13,12,.26), rgba(14,13,12,0)') + ');transition:background .8s' + (resized ? ', top .6s cubic-bezier(.2,.7,.2,1), width .6s cubic-bezier(.2,.7,.2,1), height .6s cubic-bezier(.2,.7,.2,1)' : '') + ';';\n    S.halo.style.cssText = 'position:absolute;left:' + f2(-W * 1.3) + 'cqw;top:' + f2(-H / 2 - W * 0.95 + depth * 0.25) + 'cqw;width:' + f2(W * 2.6) + 'cqw;height:' + f2(W * 1.9) + 'cqw;border-radius:50%;pointer-events:none;background:radial-gradient(closest-side, rgba(255,190,110,' + (0.62 - 0.3 * b).toFixed(2) + '), rgba(255,150,70,' + (0.16 - 0.08 * b).toFixed(2) + ') 55%, rgba(255,140,60,0));opacity:' + (night && !insideView ? 1 : 0) + ';visibility:' + (night && !insideView ? 'visible;transition:opacity .8s, visibility 0s' : 'hidden;transition:opacity .8s, visibility 0s linear .8s') + '';\n    const chipCls = night ? 'cz-smoke' : 'cz-frost';\n    S.chip.className = 'cz-chip ' + chipCls;\n    S.chip.textContent = G.name + ' \u00B7 ' + Z.name + (Z.oz ? ' ' + Z.oz : '');\n    if (S.lightbox) {\n      S.lightbox.className = 'cz-light ' + chipCls;\n      S.lightbox.querySelector('[data-act=\"day\"]').setAttribute('aria-pressed', night ? 'false' : 'true');\n      S.lightbox.querySelector('[data-act=\"night\"]').setAttribute('aria-pressed', night ? 'true' : 'false');\n    }\n    S.ctl.className = 'cz-ctl ' + chipCls + (night ? ' is-night' : '');\n    S.ctl.style.color = night ? '#F4F0EA' : '#0E0D0C';\n    S.burnbox.hidden = !night;\n    if (document.activeElement !== S.burn) S.burn.value = st.burn;\n    S.burnlabel.textContent = st.burn < 30 ? 'First light' : (st.burn < 70 ? 'Halfway down' : 'The last glow');\n    S.facename.textContent = (FACES.find((x) => x.id === st.face) || FACES[0]).name;\n  };\n\n  /* ---------- Surface tiles ---------- */\n  const tilesEl = root.querySelector('[data-cz-tiles]');\n  tilesEl.style.setProperty('--cz-n', FOCUS ? Math.max(INCL.length, 4) : FACES.length);\n  const renderTiles = () => {\n    if (FOCUS) tilesEl.style.setProperty('--cz-n', st.more ? FACES.length : Math.max(INCL.length, 4));\n    const G = gl();\n    const TW = 88;\n    tilesEl.innerHTML = (FOCUS && !st.more ? FACES.filter((f) => INCL.includes(f.id)) : FACES).map((f) => {\n      const isLid = f.id === 'lid' || f.id === 'inside';\n      /* the Casa front fills the tile the way it fills the jar (its layout is measured from real jars) */\n      const cs = (isCasaFace(st.faces[f.id]) || isCoupleFace(st.faces[f.id])) ? 100 : TW;\n      const c = content(st.faces[f.id], cs, isLid ? cs : cs * 1.07, isLid ? 'wood' : G.day, true);\n      return '<button type=\"button\" class=\"cz-tile' + (flashIds.includes(f.id) ? ' is-flash' : '') + sampleMark(f.id) + '\" data-act=\"face\" data-v=\"' + f.id + '\" aria-pressed=\"' + (f.id === st.face) + '\"><span class=\"cz-tile__img ' + (isLid ? 'cz-tex-wood' : G.tex) + '\">' + c + '</span><span class=\"cz-tile__name\">' + f.short + '</span></button>';\n    }).join('');\n  };\n\n  /* ---------- Real photos ---------- */\n  /* \"In real life\" (John, Oct 24): TAJA's own photos (snippet dl-cz-photos), following the glass picked, lit ones first by\n     candlelight, up to six. Tap one to see it large; arrows, swipe and Esc work in the viewer. */\n  const REAL = (Array.isArray(C.photos) ? C.photos : []).filter((x) => x && x.src && Array.isArray(x.g));\n  const realEl = root.querySelector('[data-cz-real]');\n  const sized = (u, w) => u + (u.indexOf('?') < 0 ? '?' : '&') + 'width=' + w;\n  let realKey = ''; let realList = []; let realBox = null; let realI = 0;\n  const realPick = (night) => {\n    const own = REAL.filter((x) => x.g.includes(st.glass));\n    const any = REAL.filter((x) => x.g.includes('any'));\n    /* \"day\" also marks a lit photo that shows by daylight (lit+day in the snippet) */\n    const lit = (a, v) => a.filter((x) => !!x.lit === v);\n    const byDay = (a) => a.filter((x) => !x.lit || x.day);\n    const litOnly = (a) => a.filter((x) => x.lit && !x.day);\n    const list = night ? lit(own, true).concat(lit(own, false), lit(any, true), lit(any, false)) : byDay(own).concat(byDay(any), litOnly(own), litOnly(any));\n    return list.slice(0, 6);\n  };\n  const renderReal = () => {\n    if (!realEl) return;\n    const night = !VASE && st.light === 'night';\n    const key = st.glass + (night ? '|n' : '|d');\n    if (key === realKey) return;\n    realKey = key; realList = realPick(night);\n    if (!realList.length) { realEl.hidden = true; realEl.innerHTML = ''; return; }\n    realEl.hidden = false;\n    realEl.innerHTML = '<div class=\"cz-real__head\"><p class=\"cz-lab\">In real life</p><p class=\"cz-real__g\">' + esc(cap(st.glass) + ' glass' + (night ? ', lit' : '')) + '</p></div>' +\n      '<div class=\"cz-real__row\">' + realList.map((x, i) => '<button type=\"button\" class=\"cz-real__t\" data-act=\"real\" data-v=\"' + i + '\" aria-label=\"' +\n        esc('Photo ' + (i + 1) + ' of ' + realList.length + ': ' + x.alt) + '\"><img src=\"' + esc(sized(x.src, 220)) + '\" alt=\"\" width=\"110\" height=\"110\" loading=\"lazy\" decoding=\"async\"></button>').join('') + '</div>';\n  };\n  const showReal = (i) => {\n    const n = realList.length; if (!n || !realBox) return;\n    realI = (i + n) % n; const x = realList[realI];\n    const img = realBox.querySelector('.cz-real__fig img');\n    img.src = sized(x.src, 1400); img.alt = x.alt;\n    realBox.querySelector('.cz-real__cap').textContent = x.alt;\n    realBox.querySelector('.cz-real__n').textContent = n > 1 ? (realI + 1) + ' / ' + n : '';\n    realBox.querySelectorAll('.cz-real__nav').forEach((b) => { b.hidden = n < 2; });\n  };\n  const openReal = (i) => {\n    if (!realBox) {\n      realBox = document.createElement('dialog');\n      realBox.className = 'cz-real__box';\n      realBox.setAttribute('aria-label', 'Real photos of TAJA candles');\n      realBox.innerHTML = '<button type=\"button\" class=\"cz-real__x\" data-act=\"realclose\" aria-label=\"Close\">&times;</button>' +\n        '<figure class=\"cz-real__fig\"><img src=\"\" alt=\"\"><figcaption><span class=\"cz-real__cap\"></span><span class=\"cz-real__n\"></span></figcaption></figure>' +\n        '<button type=\"button\" class=\"cz-real__nav cz-real__nav--prev\" data-act=\"realprev\" aria-label=\"Previous photo\">&lsaquo;</button>' +\n        '<button type=\"button\" class=\"cz-real__nav cz-real__nav--next\" data-act=\"realnext\" aria-label=\"Next photo\">&rsaquo;</button>';\n      root.appendChild(realBox);\n      realBox.addEventListener('click', (e) => { if (e.target === realBox) realBox.close(); });\n      realBox.addEventListener('keydown', (e) => {\n        if (e.key === 'ArrowRight') { e.preventDefault(); e.stopPropagation(); showReal(realI + 1); }\n        else if (e.key === 'ArrowLeft') { e.preventDefault(); e.stopPropagation(); showReal(realI - 1); }\n      });\n      let x0 = null;\n      realBox.addEventListener('touchstart', (e) => { x0 = e.touches[0].clientX; }, { passive: true });\n      realBox.addEventListener('touchend', (e) => { if (x0 === null) return; const dx = e.changedTouches[0].clientX - x0; x0 = null; if (Math.abs(dx) > 40) showReal(realI + (dx < 0 ? 1 : -1)); });\n      realBox.addEventListener('close', () => { const t = realEl && realEl.querySelector('[data-act=\"real\"][data-v=\"' + realI + '\"]'); if (t) t.focus({ preventScroll: true }); });\n    }\n    showReal(i);\n    if (!realBox.open) { if (realBox.showModal) realBox.showModal(); else realBox.setAttribute('open', ''); }\n    realBox.querySelector('.cz-real__x').focus({ preventScroll: true });\n  };\n\n  /* ---------- Proof ---------- */\n  const dateNote = (t) => {\n    const m = (t || '').match(/(\\d{1,2})\\s*[.\\/\\-\u00B7]\\s*(\\d{1,2})\\s*[.\\/\\-\u00B7]\\s*(\\d{2,4})/);\n    if (!m) return '';\n    const a = +m[1], c = +m[2], y = m[3].length === 2 ? '20' + m[3] : m[3];\n    if (a >= 1 && a <= 12 && c >= 1 && c <= 12 && a !== c) return 'Date check: this reads as ' + MONTHS[a - 1] + ' ' + c + ', ' + y + ' in the US, or ' + a + ' ' + MONTHS[c - 1] + ' ' + y + ' in most other countries. We engrave it exactly as typed.';\n    if (a >= 1 && a <= 12 && c <= 31) return 'Date check: reads as ' + MONTHS[a - 1] + ' ' + c + ', ' + y + '.';\n    if (c >= 1 && c <= 12 && a <= 31) return 'Date check: reads as ' + a + ' ' + MONTHS[c - 1] + ' ' + y + '.';\n    return 'Date check: ' + m[0] + ' is not a calendar date. Please check it.';\n  };\n  const shownText = (x) => { const xf = FONTS[x.font] || FONTS.classic; const t = x.text || ''; return xf.tt === 'uppercase' ? t.toUpperCase() : (xf.tt === 'lowercase' ? t.toLowerCase() : t); };\n  const proofRows = () => {\n    const Z = sz();\n    const W = 46 * Z.s;\n    return FACES.map((f) => {\n      const x = st.faces[f.id];\n      let what = 'Left blank';\n      let warn = '';\n      const blank = x.kind === 'none' || (x.kind === 'text' && !(x.text || '').trim());\n      if (x.kind === 'text' && (x.text || '').trim()) {\n        what = '\u201C' + shownText(x).trim().replace(/\\n+/g, ' / ') + '\u201D in ' + (FONTS[x.font] || FONTS.classic).name + ', ' + POS[posKey(x)].name.toLowerCase();\n        if (isCasaFace(x)) what = '\u201C' + shownText(x).trim().replace(/\\n+/g, ' / ') + '\u201D in Classic TAJA capitals, centered, with the name spaced to the width of CASA';\n        if (isCoupleFace(x)) what = '\u201C' + shownText(x).trim().replace(/\\n+/g, ' / ') + '\u201D in Classic TAJA capitals: large initials with a dot, the names underneath lined up with them on both ends';\n        const isSq = f.id === 'lid' || f.id === 'inside';\n        if (fit(x, isSq ? W : W * (1 - 2 * RAD), isSq ? W : W * 1.07).level === 'long') warn = (isCasaFace(x) || isCoupleFace(x)) ? 'A name this long is etched very small. Try a shorter version.' : 'Too long for this side. Try two lines, fewer words or a larger size.';\n      } else if (x.kind === 'pattern') what = patOf(x.pattern).name + ' pattern, all over';\n      else if (x.kind === 'image') {\n        if (x.image === 'upload' && st.upload) what = 'Your photo or logo, prepared for glass';\n        else if (x.image === 'upload') { what = 'Your photo (not uploaded yet)'; warn = 'Upload your photo or logo for this side, or choose words, a pattern or blank.'; }\n        else { what = 'Sample artwork'; warn = 'Upload your photo or logo for this side, or choose words, a pattern or blank.'; }\n      }\n      return { id: f.id, name: f.name, what, note: x.kind === 'text' ? dateNote(x.text) : '', warn, blank };\n    });\n  };\n  const designCode = () => {\n    let h = 0; const key = JSON.stringify([st.glass, st.size, st.faces]);\n    for (let i = 0; i < key.length; i++) h = (h * 31 + key.charCodeAt(i)) >>> 0;\n    return 'TAJA-' + h.toString(36).toUpperCase().slice(-4).padStart(4, '7');\n  };\n  const total = () => { const v = lineVariant(); return (v ? v.price : 0) + (st.mockup && C.mockup ? C.mockup.price : 0); };\n\n  /* ---------- Steps ---------- */\n  const stepsEl = root.querySelector('[data-cz-steps]');\n  const mheadEl = root.querySelector('[data-cz-mhead]');\n  const ctaEl = root.querySelector('[data-cz-ctawrap]');\n  const errEl = root.querySelector('[data-cz-err]');\n  const showErr = (msg) => { if (!msg) { errEl.hidden = true; errEl.textContent = ''; return; } errEl.textContent = msg; errEl.hidden = false; };\n  const curStep = () => (mq.matches ? st.step : (st.step || 1));\n  const stepSum = (n) => {\n    const Z = sz(); const v = variantFor(st.glass, st.size);\n    if (n === 1) return gl().name + ' \u00B7 ' + Z.name + (Z.oz ? ' ' + Z.oz : '') + (v ? ' \u00B7 ' + money(v.price) : '');\n    if (n === 2) return FOCUS ? ((PRESETS[FOCUS.preset] || PRESETS.blank).name + (isUp() ? ' + more sides' : (st.more ? ' \u00B7 more sides open' : ''))) : (PRESETS[st.preset] || PRESETS.blank).name;\n    if (n === 3) return proofRows().filter((p) => !p.blank).length + ' of ' + (FOCUS && !st.more ? INCL.length : FACES.length) + ' surfaces engraved';\n    if (n === 4) { const bits = []; if (!VASE) bits.push(st.wax === 'beeswax' ? 'Organic beeswax' : (st.scent ? st.scent.split(' \u00B7 ')[0] : 'Choose a scent')); if (st.gift === true) bits.push('Handwritten note'); if (st.mockup) bits.push('Mock-up'); return bits.join(' \u00B7 ') || 'Gift note, mock-up'; }\n    return st.approved ? 'Checked and approved' : 'Check every side before it is engraved';\n  };\n  /* \"Use this font on every side\" (John, Oct 12: it looked like it did nothing). It only shows when another side has words,\n     names the sides it will change, and confirms once every side with words shares the font. */\n  const visFaces = () => (FOCUS && !st.more ? FACES.filter((f) => INCL.includes(f.id)) : FACES);\n  const allFontsHTML = (fd) => {\n    const F = FONTS[fd.font] || FONTS.classic;\n    const others = visFaces().filter((f) => f.id !== st.face && !(lockText() && f.id === 'front') && !(MEMORIAL && f.id === 'lid') && st.faces[f.id].kind === 'text' && (st.faces[f.id].text || '').trim());\n    if (!others.length) return '';\n    const diff = others.filter((f) => st.faces[f.id].font !== fd.font);\n    if (!diff.length) return '<p class=\"cz-allf is-done\" role=\"status\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12.5 L10 17 L19 7\"/></svg>' + esc(F.name) + ' is on every side with words.</p>';\n    const names = diff.map((f) => f.name.toLowerCase());\n    const list = names.length > 1 ? names.slice(0, -1).join(', ') + ' and ' + names[names.length - 1] : names[0];\n    return '<p class=\"cz-allf\"><button type=\"button\" class=\"cz-link\" data-act=\"allfonts\">Use ' + esc(F.name) + ' on every side</button><span class=\"cz-allf__n\">This also changes the ' + esc(list) + '.</span></p>';\n  };\n  let flashIds = [];\n  /* the surfaces a product page leaves open: \"The back, the sides, the lid and inside the lid\" (Memorial's lid is already in its design) */\n  const moreSides = () => {\n    const off = (id) => FACE_IDS.includes(id) && !INCL.includes(id);\n    const parts = [off('back') && 'the back', (off('right') || off('left')) && 'the sides', off('lid') && 'the lid', off('inside') && 'inside the lid'].filter(Boolean);\n    const t = parts.length > 1 ? parts.slice(0, -1).join(', ') + ' and ' + parts[parts.length - 1] : (parts[0] || 'More sides');\n    return t.charAt(0).toUpperCase() + t.slice(1);\n  };\n  /* Remove the background (Kourtney, Oct 27): Pet and Memorial ask, like the Memorial page did. The studio does it; the preview keeps the whole photo. */\n  const rmbgHTML = () => '<div class=\"cz-col\" style=\"gap:6px\"><p class=\"cz-lab\" id=\"cz-rb-l\">Remove the background?</p><div class=\"cz-sizes cz-yn\" role=\"group\" aria-labelledby=\"cz-rb-l\">' +\n    [['no', 'No', 'Engrave the whole photo'], ['yes', 'Yes', 'We remove it before engraving']].map(([v, nm, sub]) => '<button type=\"button\" class=\"cz-size\" data-act=\"rmbg\" data-v=\"' + v + '\" aria-pressed=\"' + (st.rmbg === v) + '\"><b>' + nm + '</b><span>' + sub + '</span></button>').join('') + '</div>' +\n    (st.rmbg === 'yes' ? '<p class=\"cz-note\">We\u2019ll take out the background (grass, a couch, a busy room) at our studio before engraving. The preview still shows your whole photo.</p>' : '') + '</div>';\n  /* a small \"i\" that opens a note, like the other product pages' tooltips */\n  const tip = (id, txt) => '<button type=\"button\" class=\"cz-tip\" data-act=\"tip\" aria-expanded=\"false\" aria-label=\"More about this\"><span class=\"cz-tip__i\" aria-hidden=\"true\">i</span><span class=\"cz-tip__b\" id=\"' + id + '\" role=\"tooltip\">' + esc(txt) + '</span></button>';\n  /* photos on white or iridescent glass engrave lighter: the shopper confirms it before adding to the bag (Annabelle, Oct 27) */\n  const usesPhoto = () => !!st.upload && FACE_IDS.some((f) => st.faces[f].kind === 'image' && st.faces[f].image === 'upload');\n  const lightGlass = () => st.glass === 'white' || st.glass === 'iridescent';\n  const needLightOk = () => usesPhoto() && lightGlass();\n  const lightOkText = () => (st.glass === 'iridescent' ? 'I understand that photos on iridescent glass engrave very softly, lighter and more faintly than on black glass.' : 'I understand that photos on white glass engrave lighter and more faintly than on black glass.');\n  const body = (n) => {\n    const fd = st.faces[st.face];\n    const faceDef = FACES.find((x) => x.id === st.face) || FACES[0];\n    const Z = sz();\n    if (n === 1) {\n      const glassBtns = GLASSES.map((g) => '<button type=\"button\" class=\"cz-glass__btn\" data-act=\"glass\" data-v=\"' + g + '\" aria-pressed=\"' + (g === st.glass) + '\"><span class=\"cz-glass__disc\" style=\"background:' + (GLOOK[g] || GLOOK.black).disc + '\">' + (g === 'iridescent' ? '<span class=\"cz-tag cz-glass__new\">New</span>' : '') + '</span>' + cap(g) + (GLASSES.length > 2 ? '' : ' glass') + '</button>').join('');\n      const also = (VASE || FOCUS || ALT.iridescent || ALT.gold) ? '' : '<p class=\"cz-glass__also\">Also in <a href=\"' + esc(C.irid) + '\">Iridescent</a> <span class=\"cz-tag\">New</span> and <a href=\"' + esc(C.gold) + '\">Gold</a></p>';\n      const altNote = ALT[st.glass] ? '<p class=\"cz-note cz-glass__note\">' + cap(st.glass) + ' glass comes in ' + ALT[st.glass].variants.map((v) => (SIZES.find((x) => x.id === v.size) || {}).name).join(' and ') + ', with every side and the lid included.' + (st.fontNote === st.glass ? (st.glass === 'iridescent' ? ' We set your words in Block, which reads best on iridescent; you can change the font in step 3.' : ' We started your words in Block; you can choose any font in step 3.') : '') + '</p>' : '';\n      const sizes = SIZES.filter((x) => !ALT[st.glass] || variantFor(st.glass, x.id)).map((x) => { const v = variantFor(st.glass, x.id); const off = !v || v.available === false; return '<button type=\"button\" class=\"cz-size\" data-act=\"size\" data-v=\"' + x.id + '\" aria-pressed=\"' + (x.id === Z.id) + '\"' + (off ? ' disabled' : '') + '><b>' + esc(x.name) + '</b><span>' + (x.oz ? esc(x.oz) + ' \u00B7 ' : '') + (v ? money(v.price) : 'Not available') + '</span></button>'; }).join('');\n      return '<div class=\"cz-glass\">' + glassBtns + also + '</div><div class=\"cz-sizes\">' + sizes + '</div>' + altNote;\n    }\n    if (n === 2) {\n      if (FOCUS) {\n        const pv = variantFor(st.glass, st.size); const uv = upVariantFor(st.glass, st.size);\n        const diff = pv && uv ? uv.price - pv.price : 0;\n        const priceLine = uv ? (diff > 0 ? 'Engraving any of them makes this a Design Your Own candle: ' + money(uv.price) + ' in this size, ' + money(diff) + ' more.' : 'Same price in this size.') : '';\n        return '<div class=\"cz-focus\"><p class=\"cz-focus__h\">' + esc((PRESETS[FOCUS.preset] || PRESETS.blank).line) + '.</p>' +\n          (!st.more\n            ? '<p class=\"cz-note\">' + moreSides() + ' can be engraved too. ' + esc(priceLine) + '</p><button type=\"button\" class=\"cz-btn cz-btn--line\" data-act=\"more\">Engrave more sides</button>'\n            : '<p class=\"cz-note\">More sides are open. Fill any surface in the next step. ' + esc(priceLine) + '</p><button type=\"button\" class=\"cz-link\" data-act=\"less\">Keep it to the front</button>') + '</div>';\n      }\n      return '<div class=\"cz-presets\">' + Object.keys(PRESETS).filter((id) => !PRESETS[id].hidden).map((id) => {\n        const p = PRESETS[id]; const pf = FONTS[p.font] || FONTS.classic;\n        return '<button type=\"button\" class=\"cz-preset\" data-act=\"preset\" data-v=\"' + id + '\" aria-pressed=\"' + (id === st.preset) + '\"><span class=\"cz-preset__s\" style=\"font-family:' + pf.fam + ';font-weight:' + pf.wt + ';letter-spacing:' + pf.tr + 'em;text-transform:' + pf.tt + ';font-size:' + (pf.k > 1.3 ? 26 : (pf.k > 1.1 ? 22 : 15)) + 'px\">' + esc(p.sample) + '</span><span class=\"cz-preset__n\">' + esc(p.name) + '</span><span class=\"cz-preset__l\">' + esc(p.line) + '</span></button>';\n      }).join('') + '</div><p class=\"cz-note\">Every design is a starting point. Change any word, font or side in the next step. Sides still showing our sample words are marked until you change them.</p>' +\n        (st.preset === 'logo' ? '<p class=\"cz-box\">Sending to a whole team? <a href=\"' + esc(root.querySelector('.dl-cz__list a') ? root.querySelector('.dl-cz__list a').getAttribute('href') : '/collections/corporate-gifting') + '\">Corporate + bulk gifting</a>: one order, shipped to every address.</p>' : '');\n    }\n    if (n === 3) {\n      const VIS = FOCUS && !st.more ? FACES.filter((f) => INCL.includes(f.id)) : FACES;\n      let h = '<div class=\"cz-row\" role=\"group\" aria-label=\"Choose a surface\">' + VIS.map((f) => '<button type=\"button\" class=\"cz-pill' + sampleMark(f.id) + '\" data-act=\"face\" data-v=\"' + f.id + '\" aria-pressed=\"' + (f.id === st.face) + '\">' + f.short + '</button>').join('') + '</div>';\n      /* Memorial lid: the product's own \"forever in our hearts\", not editable */\n      if (lockedLid()) return h + '<p class=\"cz-note\">The lid of every memorial candle reads <i>forever in our hearts</i> in Classic Script, engraved by hand. It\u2019s included in the price.</p>';\n      if (lockedFront()) h += '<p class=\"cz-note\">' + (COUPLE\n        ? 'The front is the Couple design: your two initials with a dot between them and your names underneath, in the TAJA font and capitals. The names are spaced to line up with the initials on both ends, so longer names are etched smaller.'\n        : 'The front is the Casa design: <b>CASA</b> in the TAJA font, with the family name underneath in capitals, lined up with CASA on both ends. A short name is etched larger than CASA, a long one smaller.' + (FOCUS ? '' : ' Want CASA in another font? Start from <button type=\"button\" class=\"cz-link cz-link--in\" data-act=\"preset\" data-v=\"blank\">a blank jar</button>.')) + '</p>';\n      else h += '<div class=\"cz-row\" role=\"group\" aria-label=\"What goes on this surface\">' + [['text', 'Words'], ['pattern', 'Pattern'], ['image', 'Image'], ['none', 'Blank']].map(([k, nm]) => { const dis = (k === 'image' && !faceDef.image) || (imgOnly() && k !== 'image'); return '<button type=\"button\" class=\"cz-pill\" data-act=\"kind\" data-v=\"' + k + '\" aria-pressed=\"' + (fd.kind === k) + '\"' + (dis ? ' aria-disabled=\"true\"' : '') + '>' + nm + '</button>'; }).join('') + '</div>';\n      if (imgOnly()) h += '<p class=\"cz-note\">The front of this candle is your photo.' + (st.more ? ' Words and patterns can go on the other sides.' : ' To add words or a pattern, engrave more sides in step 2.') + '</p>';\n      else if (!faceDef.image && !lockedFront()) h += '<p class=\"cz-note\">' + (st.face === 'front' ? 'Photos and logos go on the sides' + (VASE ? ' or the back' : ', the back or the lid top') + '. The front takes words or a pattern.' : 'The inside of the lid takes words or a pattern.') + '</p>';\n      if (fd.kind === 'text') {\n        const sample = (fd.text || '').trim() ? fd.text.trim().split('\\n')[0] : (PRESETS[st.preset] || PRESETS.blank).sample;\n        if (lockedFront() && COUPLE) {\n          const cp = coupleParts(fd.text);\n          h += '<div class=\"cz-col\"><p class=\"cz-lab\" id=\"cz-ini-l\">Your initials</p><div class=\"cz-ini\" role=\"group\" aria-labelledby=\"cz-ini-l\">' +\n            '<input type=\"text\" maxlength=\"1\" class=\"cz-field cz-ini__f\" data-in=\"cpa\" aria-label=\"First initial\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" placeholder=\"D\" value=\"' + esc(cp.a) + '\">' +\n            '<span class=\"cz-ini__dot\" aria-hidden=\"true\">\u2022</span>' +\n            '<input type=\"text\" maxlength=\"1\" class=\"cz-field cz-ini__f\" data-in=\"cpb\" aria-label=\"Second initial\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" placeholder=\"C\" value=\"' + esc(cp.b) + '\"></div></div>' +\n            '<div class=\"cz-col\"><label for=\"cz-cpn\" class=\"cz-lab\">Your names \u00B7 engraved under the initials</label><input id=\"cz-cpn\" type=\"text\" maxlength=\"40\" class=\"cz-field cz-caps\" data-in=\"cpn\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" placeholder=\"DIRK + CHRISTINE\" value=\"' + esc(cp.names) + '\">' +\n            '<div class=\"cz-fit\"><span class=\"cz-fit__l\" data-fit><span class=\"cz-fit__dot\"></span><span data-fittext></span></span></div></div>';\n        } else if (lockedFront()) {\n          h += '<div class=\"cz-col\"><label for=\"cz-casa\" class=\"cz-lab\">Family name \u00B7 engraved under CASA</label><div class=\"cz-casa\"><span class=\"cz-casa__fixed\" aria-hidden=\"true\">CASA</span>' +\n          '<input id=\"cz-casa\" type=\"text\" maxlength=\"40\" class=\"cz-field\" data-in=\"casa\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" placeholder=\"Family name\" value=\"' + esc(casaName(fd.text)) + '\"></div>' +\n          '<div class=\"cz-fit\"><span class=\"cz-fit__l\" data-fit><span class=\"cz-fit__dot\"></span><span data-fittext></span></span></div></div>' + keepBox();\n        } else {\n          h += '<div class=\"cz-col\"><label for=\"cz-words\" class=\"cz-lab\">Your words \u00B7 ' + faceDef.name + '</label><textarea id=\"cz-words\" rows=\"3\" maxlength=\"120\" class=\"cz-field\" data-in=\"text\" autocomplete=\"off\" placeholder=\"We engrave it exactly as you type it, capitals and all.\">' + esc(fd.text || '') + '</textarea>' +\n            '<div class=\"cz-fit\"><span class=\"cz-fit__l\" data-fit><span class=\"cz-fit__dot\"></span><span data-fittext></span></span><span class=\"cz-fit__c\"><span data-count>0</span> / 120</span></div></div>' + keepBox();\n        }\n        if (!lockedFront()) h += '<div class=\"cz-col\"><p class=\"cz-lab\">Font, shown in your words</p><div class=\"cz-fonts\">' + Object.keys(FONTS).map((id) => { const F = FONTS[id]; return '<button type=\"button\" class=\"cz-font\" data-act=\"font\" data-v=\"' + id + '\" aria-pressed=\"' + (fd.font === id) + '\"><span class=\"cz-font__s\" data-fontsample style=\"font-family:' + F.fam + ';font-weight:' + F.wt + ';letter-spacing:' + F.tr + 'em;text-transform:' + F.tt + ';font-size:' + Math.round(17 * F.k) + 'px\">' + esc(sample) + '</span><span class=\"cz-font__n\">' + F.name + '</span></button>'; }).join('') + '</div>' + ((FONTS[fd.font] || {}).note ? '<p class=\"cz-note\">' + FONTS[fd.font].note + '</p>' : '') + (st.glass === 'iridescent' && st.face !== 'lid' && st.face !== 'inside' ? '<p class=\"cz-note\">' + (fd.font === 'block' ? 'Block reads best on iridescent glass.' : 'On iridescent glass, Block reads best; thinner fonts engrave very faintly.') + '</p>' : '') + allFontsHTML(fd) + '</div>';\n        const pk = posKey(fd);\n        if (!lockedFront()) h += '<div class=\"cz-col\"><p class=\"cz-lab\" id=\"cz-place-l\">Placement</p><div class=\"cz-place\"><div class=\"cz-pgrid\" role=\"group\" aria-labelledby=\"cz-place-l\">' + POS_KEYS.map((k) => '<button type=\"button\" class=\"cz-pcell\" data-act=\"layout\" data-v=\"' + k + '\" aria-pressed=\"' + (pk === k) + '\" aria-label=\"' + POS[k].name + '\" title=\"' + POS[k].name + '\" style=\"justify-content:' + FLEX[POS[k].h] + ';align-items:' + FLEX[POS[k].v] + '\"><i></i></button>').join('') + '</div>' +\n          '<p class=\"cz-place__t\"><b>' + POS[pk].name + '</b><span>Tap a spot to move your words anywhere on the ' + faceDef.name.toLowerCase() + '.</span></p></div></div>';\n      } else if (fd.kind === 'pattern') {\n        const pg = PGROUPS.some(([g]) => g === patGroup) ? patGroup : patOf(fd.pattern).g;\n        h += '<div class=\"cz-pgroups\" role=\"group\" aria-label=\"Pattern collections\">' + PGROUPS.map(([g, nm]) => '<button type=\"button\" class=\"cz-pg\" data-act=\"patgroup\" data-v=\"' + g + '\" aria-pressed=\"' + (g === pg) + '\">' + nm + ' <span>' + PATTERNS.filter((p) => p.g === g).length + '</span></button>').join('') + '</div>';\n        h += '<div class=\"cz-pats\">' + PATTERNS.filter((p) => p.g === pg).map((p) => '<button type=\"button\" class=\"cz-pat\" data-act=\"pattern\" data-v=\"' + p.id + '\" aria-pressed=\"' + (fd.pattern === p.id) + '\"><span class=\"cz-pat__sw\" style=\"' + maskCss(patImg(p.id, true), 'cover') + '\"></span><b>' + p.name + '</b></button>').join('') + '</div><p class=\"cz-note\">TAJA patterns wrap the whole surface, edge to edge.</p>';\n      } else if (fd.kind === 'image') {\n        h += '<div class=\"cz-col\" style=\"gap:12px\"><label class=\"cz-upload\">' + (st.upload ? 'Replace your photo or logo' : 'Upload a photo or logo') + '<input type=\"file\" accept=\"image/*\" class=\"cz-vh\" data-in=\"file\"></label>' +\n          (st.uploadErr ? '<p class=\"cz-alert\" role=\"alert\">' + esc(st.uploadErr) + '</p>' : '') +\n          '<div class=\"cz-row\" style=\"gap:16px\">' + (fd.image === 'upload' && st.upload ? '<button type=\"button\" class=\"cz-link\" data-act=\"sample\">Try the sample artwork</button>' : '') + (st.upload && fd.image !== 'upload' ? '<button type=\"button\" class=\"cz-link\" data-act=\"useupload\">Use my upload</button>' : '') + '</div>' +\n          (RMBG && st.face === 'front' ? rmbgHTML() : '') +\n          '<label class=\"cz-chk\"><input type=\"checkbox\" data-in=\"invert\"' + (st.invert ? ' checked' : '') + '><span>Swap light and dark (for logos on a white background)</span></label>' +\n          '<p class=\"cz-note\">' + (st.glass === 'iridescent' ? 'On iridescent glass, photos engrave very softly. For more contrast, choose black glass.' : st.glass !== 'white' ? 'Photos show best on black glass' + (VASE ? '.' : ', where the wax lights up the etching.') : 'On white glass, photos engrave softly and subtly, lighter than on black. For more contrast, choose black glass.') + ' Not sure how it will look? Add a digital mock-up in the next step.</p></div>';\n      } else {\n        h += '<p class=\"cz-note\">This surface stays plain. Leaving a side or two clear lets the words breathe.</p>';\n      }\n      return h;\n    }\n    if (n === 4) {\n      let h = '';\n      /* Wax (John, Oct 14: beeswax on every candle, same price). TAJA's beeswax is fragrance-free, so the scent list steps aside */\n      if (!VASE) h += '<div class=\"cz-col\"><p class=\"cz-lab\" id=\"cz-wax-l\">Wax</p><div class=\"cz-sizes cz-wax\" role=\"group\" aria-labelledby=\"cz-wax-l\">' + [['soy', 'Soy wax', 'Hand-poured in your scent'], ['beeswax', 'Organic beeswax', 'Fragrance-free, with a soft natural honey note']].map(([id, nm, sub]) => '<button type=\"button\" class=\"cz-size\" data-act=\"wax\" data-v=\"' + id + '\" aria-pressed=\"' + (st.wax === id) + '\"><b>' + nm + '</b><span>' + sub + '</span></button>').join('') + '</div></div>';\n      if (!VASE && st.wax === 'beeswax') h += '<p class=\"cz-note\">Organic beeswax burns cleanly and has no added fragrance. Same price as soy.</p>';\n      else if (!VASE) h += '<div class=\"cz-col\"><div class=\"cz-labrow\"><label for=\"cz-scent\" class=\"cz-lab\">Scent</label>' + (document.getElementById('scents') ? '<a class=\"cz-small\" href=\"#scents\">Explore Our Scents</a>' : '<a class=\"cz-small\" href=\"' + esc(C.scentsUrl || '/pages/discover-our-fragrances?view=scents') + '\" target=\"_blank\" rel=\"noopener\">Explore Our Scents<span class=\"cz-vh\"> (opens in a new tab)</span></a>') + '</div><select id=\"cz-scent\" class=\"cz-field\" data-in=\"scent\"><option value=\"\">Choose a scent</option>' + SCENTS.map((x) => '<option value=\"' + esc(x) + '\"' + (x === st.scent ? ' selected' : '') + '>' + esc(x) + '</option>').join('') + '</select></div>';\n      h += '<div class=\"cz-col\"><p class=\"cz-lab\" id=\"cz-gift-l\">Add a handwritten note with this ' + (VASE ? 'vase' : 'candle') + '?</p><div class=\"cz-sizes cz-yn\" role=\"group\" aria-labelledby=\"cz-gift-l\">' +\n        '<button type=\"button\" class=\"cz-size\" data-act=\"gift\" data-v=\"yes\" aria-pressed=\"' + (st.gift === true) + '\"><b>Yes</b></button>' +\n        '<button type=\"button\" class=\"cz-size\" data-act=\"gift\" data-v=\"no\" aria-pressed=\"' + (st.gift === false) + '\"><b>No</b><span>A to/from won\u2019t be included unless you add it</span></button></div></div>';\n      if (st.gift === true) h += '<div class=\"cz-col cz-note-msg\" style=\"gap:4px\"><div class=\"cz-labrow cz-labrow--tip\"><label for=\"cz-msg\" class=\"cz-lab\">Handwritten note message (don\u2019t forget to sign your name)</label>' + tip('cz-msg-tip', 'Include who it\u2019s from if you\u2019d like it to appear\u2014no receipt will be included') + '</div>' +\n        '<textarea id=\"cz-msg\" rows=\"3\" maxlength=\"' + NOTE_MAX + '\" class=\"cz-field\" data-in=\"noteMsg\" aria-describedby=\"cz-msg-tip\">' + esc(st.noteMsg) + '</textarea><span class=\"cz-fit__c cz-msg__c\"><span data-notecount>' + [...st.noteMsg].length + '</span> / ' + NOTE_MAX + '</span></div>';\n      if (C.mockup) h += '<label class=\"cz-chk\"><input type=\"checkbox\" data-in=\"mockup\"' + (st.mockup ? ' checked' : '') + '><span>Send me a digital mock-up first (+' + money(C.mockup.price) + ')<small>We\\'ll email you a mock-up and won\\'t begin until you approve it. Up to two rounds of edits are included.</small></span></label>';\n      h += '<div class=\"cz-col\" style=\"gap:4px\"><label for=\"cz-dnote\" class=\"cz-lab\">Notes for our designer (optional)</label><textarea id=\"cz-dnote\" rows=\"2\" maxlength=\"300\" class=\"cz-field\" data-in=\"designNote\" placeholder=\"Special requests, e.g. engrave the logo as an outline, not filled in\">' + esc(st.designNote) + '</textarea></div>';\n      return h;\n    }\n    const rows = proofRows();\n    let h = '<div class=\"cz-proof\">' + rows.map((p) => '<div class=\"cz-proof__row\"><span class=\"cz-proof__k\">' + p.name + '</span><span class=\"cz-proof__v\"><span>' + esc(p.what) + '</span>' + (p.note ? '<span class=\"cz-proof__n\">' + esc(p.note) + '</span>' : '') + (p.warn ? '<span class=\"cz-proof__w\">' + esc(p.warn) + '</span>' : '') + '</span></div>').join('') +\n      (VASE ? '' : (st.wax === 'beeswax' ? '<div class=\"cz-proof__row\"><span class=\"cz-proof__k\">Wax</span><span class=\"cz-proof__v\"><span>Organic beeswax, fragrance-free</span></span></div>' : '') + (st.wax === 'beeswax' ? '' : '<div class=\"cz-proof__row\"><span class=\"cz-proof__k\">Scent</span><span class=\"cz-proof__v\"><span>' + esc(st.scent ? st.scent.split(' \u00B7 ')[0] : 'Not chosen yet') + '</span>' + (st.scent ? '' : '<span class=\"cz-proof__w\">Choose a scent in step 4.</span>') + '</span></div>')) + '</div>';\n    if (needLightOk()) h += '<label class=\"cz-chk cz-chk--box\"><input type=\"checkbox\" data-in=\"lightok\"' + (st.lightOk ? ' checked' : '') + '><span>' + lightOkText() + '<small>For the most contrast, choose black glass in step 1.</small></span></label>';\n    h += '<label class=\"cz-chk cz-chk--box\"><input type=\"checkbox\" data-in=\"approved\"' + (st.approved ? ' checked' : '') + '><span>I\\'ve checked every word, name and date. Custom ' + (VASE ? 'vases' : 'candles') + ' can\\'t be changed once the order is placed.</span></label>';\n    h += st.saved ? '<p class=\"cz-saved\">Saved as design <b>' + designCode() + '</b>. ' + (st.link ? 'The link is copied and ready to share for a second look' + (st.upload ? ' (photos aren\\'t saved in the link, so add yours again on another device)' : '') + ': <a href=\"' + esc(st.link) + '\">open your design</a>.' : 'It\\'s kept in this browser, so you can come back to it any time.') + '</p>'\n      : '<button type=\"button\" class=\"cz-link\" data-act=\"save\">Save this design and share it for a second look</button>';\n    return h;\n  };\n  const renderSteps = () => {\n    const cur = curStep();\n    stepsEl.innerHTML = [1, 2, 3, 4, 5].map((n) =>\n      '<div class=\"cz-step\" data-step=\"' + n + '\"' + (!mq.matches && n !== cur ? ' hidden' : '') + '>' +\n      '<button type=\"button\" class=\"cz-step__head\" data-act=\"step\" data-v=\"' + n + '\" aria-expanded=\"' + (cur === n) + '\"><span class=\"cz-step__num\">' + n + '</span><span class=\"cz-step__txt\"><span class=\"cz-step__title\">' + STEP_TITLES[n - 1] + '</span><span class=\"cz-step__sum\" data-sum=\"' + n + '\">' + esc(stepSum(n)) + '</span></span><span class=\"cz-step__chev\">' + CHEV + '</span></button>' +\n      (cur === n ? '<div class=\"cz-step__body\">' + body(n) + '</div>' : '') + '</div>').join('');\n    mheadEl.innerHTML = '<div><p class=\"cz-mhead__n\">Step ' + cur + ' of 5</p><p class=\"dl-dsp cz-mhead__t\">' + STEP_TITLES[cur - 1] + '</p></div><div class=\"cz-dots\" aria-hidden=\"true\">' + [1, 2, 3, 4, 5].map((n) => '<span class=\"' + (n === cur ? 'is-on' : (n < cur ? 'is-done' : '')) + '\"></span>').join('') + '</div>';\n    updateLive();\n  };\n  const renderCta = () => {\n    const t = money(total());\n    const deskLabel = st.added ? 'Added to your bag' : (st.approved ? 'Add to bag' : 'Review your proof');\n    const cur = curStep();\n    const mLabel = cur < 5 ? 'Next' : (st.added ? 'Added to your bag' : (st.approved ? 'Add to bag' : 'Approve to continue'));\n    ctaEl.innerHTML = '<button type=\"button\" class=\"cz-cta cz-cta--desk' + (busy ? ' is-loading' : '') + '\" data-act=\"cta\"><span>' + deskLabel + '</span><span>' + t + '</span></button>' +\n      '<div class=\"cz-mbar\"><button type=\"button\" class=\"cz-mbar__back\" data-act=\"back\"' + (cur === 1 ? ' disabled' : '') + '>Back</button><button type=\"button\" class=\"cz-cta' + (cur === 5 && !st.approved ? ' is-off' : '') + (busy ? ' is-loading' : '') + '\" data-act=\"next\"><span>' + mLabel + '</span><span>' + t + '</span></button></div>';\n  };\n  /* Small updates while typing (keeps focus in the text box) */\n  const updateLive = () => {\n    const fd = st.faces[st.face];\n    const fitEl = stepsEl.querySelector('[data-fit]');\n    if (fitEl && fd.kind === 'text') {\n      const Z = sz(); const W = 46 * Z.s; const sq = st.face === 'lid' || st.face === 'inside';\n      const f = fit(fd, sq ? W : W * (1 - 2 * RAD), sq ? W : W * 1.07);\n      fitEl.className = 'cz-fit__l is-' + f.level;\n      const cpn = COUPLE && lockedFront() ? coupleParts(fd.text) : null;\n      fitEl.querySelector('[data-fittext]').textContent = (lockedFront() && casaOn() && !casaName(fd.text)) ? 'Type the family name' : (cpn && !(cpn.a && cpn.b && cpn.names)) ? 'Type both initials and your names' : !(fd.text || '').trim() ? 'Type your words' : (f.level === 'fits' ? 'Fits beautifully' : (f.level === 'small' ? 'Fits, with finer lettering' : (lockedFront() ? 'Very long: it would be etched very small' : 'Too long for this side. Try two lines or a larger size.')));\n      const cEl = stepsEl.querySelector('[data-count]'); if (cEl) cEl.textContent = f.count;\n      const sample = (fd.text || '').trim() ? fd.text.trim().split('\\n')[0] : (PRESETS[st.preset] || PRESETS.blank).sample;\n      stepsEl.querySelectorAll('[data-fontsample]').forEach((el) => { el.textContent = sample; });\n    }\n    const kb = stepsEl.querySelector('[data-keepbox]'); if (kb) kb.hidden = !isSampleSide(st.face);\n    stepsEl.querySelectorAll('.cz-pill[data-act=\"face\"]').forEach((el) => { const m = sampleMark(el.dataset.v); el.classList.toggle('is-sample', !!m); el.classList.toggle('is-sample-err', m.indexOf('err') > 0); });\n    [1, 2, 3, 4, 5].forEach((n) => { const el = stepsEl.querySelector('[data-sum=\"' + n + '\"]'); if (el) el.textContent = stepSum(n); });\n  };\n  const draw = (all) => { renderStage(); renderTiles(); renderReal(); if (all) renderSteps(); else updateLive(); renderCta(); autosave(); };\n\n  /* ---------- Actions ---------- */\n  const nearest = (target) => { let t = target; while (t - st.angle > 180) t -= 360; while (t - st.angle < -180) t += 360; return t; };\n  const goFace = (id) => {\n    const f = FACES.find((x) => x.id === id); if (!f) return;\n    st.face = id;\n    if (id === 'lid') { st.tilt = -64; st.angle = nearest(-10); st.light = 'day'; }\n    else if (id === 'inside') { st.light = 'day'; st.tilt = baseTilt(); }\n    else { st.tilt = baseTilt(); st.angle = nearest(f.target - 14); }\n  };\n  const changed = () => { st.approved = false; st.added = false; st.saved = false; showErr(''); };\n  const setFace = (patch) => { st.faces[st.face] = Object.assign({}, st.faces[st.face], patch); changed(); };\n  const turn = (dir) => { const cyc = ['front', 'right', 'back', 'left']; const i = cyc.indexOf(st.face); goFace(i < 0 ? 'front' : cyc[(i + (dir > 0 ? 1 : 3)) % 4]); };\n  const scrollToSteps = () => { if (!mq.matches) { const y = mheadEl.getBoundingClientRect().top + window.scrollY - 80; if (window.scrollY > y) window.scrollTo({ top: y, behavior: 'smooth' }); } };\n\n  root.addEventListener('click', (e) => {\n    const b = e.target.closest('[data-act]');\n    if (!b || !root.contains(b)) return;\n    const a = b.dataset.act; const v = b.dataset.v;\n    if (b.getAttribute('aria-disabled') === 'true') return;\n    switch (a) {\n      case 'step': st.step = st.step === +v ? 0 : +v; draw(true); return;\n      case 'glass': { const was = st.glass; st.glass = v; if (!variantFor(st.glass, st.size)) { const ok = SIZES.find((x) => variantFor(st.glass, x.id)); if (ok) st.size = ok.id; }\n        st.fontNote = ''; if (ALT[v] && was !== v) { blockify(); st.fontNote = v; } if (was !== v) st.lightOk = false; changed(); draw(true); return; }\n      case 'size': st.size = v; changed(); draw(true); return;\n      case 'wax': st.wax = v === 'beeswax' ? 'beeswax' : 'soy'; st.added = false; showErr(''); draw(true); autosave(); return;\n      case 'more': st.more = true; st.step = 3; changed(); draw(true); return;\n      case 'less': st.more = false; FACE_IDS.forEach((id) => { if (!INCL.includes(id)) st.faces[id] = Object.assign({}, st.faces[id], { kind: 'none' }); }); if (!INCL.includes(st.face)) st.face = INCL[0]; changed(); draw(true); return;\n      case 'preset': st.preset = v; st.faces = presetFaces(v); if (casaOn()) st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: 'CASA', font: 'classic', layout: 'mc' }); if (PRESETS[v].glass && GLASSES.includes(PRESETS[v].glass) && !ALT[st.glass]) st.glass = PRESETS[v].glass; if (st.glass === 'iridescent') blockify(); st.face = 'front'; st.angle = nearest(-28); st.tilt = -9; changed(); draw(true); return;\n      case 'face': goFace(v); if (b.classList.contains('cz-tile') && st.step !== 3) st.step = 3; draw(true); return;\n      case 'kind': if (locked() || (imgOnly() && v !== 'image')) return; setFace({ kind: v }); draw(true); return;\n      case 'font': if (locked()) return; st.fontNote = ''; setFace({ font: v }); draw(true); return;\n      case 'allfonts': {\n        const f = st.faces[st.face].font;\n        flashIds = FACE_IDS.filter((id) => id !== st.face && st.faces[id].kind === 'text' && (st.faces[id].text || '').trim() && st.faces[id].font !== f);\n        FACE_IDS.forEach((id) => { if ((lockText() && id === 'front') || (MEMORIAL && id === 'lid')) return; st.faces[id] = Object.assign({}, st.faces[id], { font: f }); });\n        changed(); draw(true);\n        setTimeout(() => { flashIds = []; tilesEl.querySelectorAll('.cz-tile.is-flash').forEach((t) => t.classList.remove('is-flash')); }, 1600);\n        return;\n      }\n      case 'layout': if (locked()) return; setFace({ layout: v }); draw(true); return;\n      case 'pattern': if (locked() || imgOnly()) return; setFace({ kind: 'pattern', pattern: v }); draw(true); return;\n      case 'patgroup': patGroup = v; draw(true); return;\n      case 'rmbg': st.rmbg = v === 'yes' ? 'yes' : 'no'; changed(); draw(true); return;\n      case 'gift': st.gift = v === 'yes'; st.added = false; showErr(''); draw(true); if (st.gift) { const m = stepsEl.querySelector('#cz-msg'); if (m) m.focus(); } return;\n      case 'tip': { const on = !b.classList.contains('is-open'); root.querySelectorAll('.cz-tip.is-open').forEach((x) => { x.classList.remove('is-open'); x.setAttribute('aria-expanded', 'false'); }); b.classList.toggle('is-open', on); b.setAttribute('aria-expanded', String(on)); if (on) fitTip(b); return; }\n      case 'sample': if (locked()) return; setFace({ kind: 'image', image: 'sample' }); draw(true); return;\n      case 'useupload': if (locked()) return; setFace({ kind: 'image', image: 'upload' }); draw(true); return;\n      case 'day': st.light = 'day'; if (st.face !== 'lid') st.tilt = baseTilt(); draw(false); return;\n      case 'night': st.light = 'night'; if (st.face === 'lid' || st.face === 'inside') { st.face = 'front'; st.angle = nearest(0); } st.tilt = baseTilt(); draw(false); return;\n      case 'turnl': turn(-1); draw(!mq.matches ? false : st.step === 3); return;\n      case 'turnr': turn(1); draw(!mq.matches ? false : st.step === 3); return;\n      case 'real': openReal(+v); return;\n      case 'realprev': showReal(realI - 1); return;\n      case 'realnext': showReal(realI + 1); return;\n      case 'realclose': if (realBox) realBox.close(); return;\n      case 'save': saveDesign(); return;\n      case 'back': st.step = Math.max(1, curStep() - 1); draw(true); scrollToSteps(); return;\n      case 'next': if (curStep() < 5) { st.step = curStep() + 1; draw(true); scrollToSteps(); return; } cta(); return;\n      case 'cta': cta(); return;\n      default:\n    }\n  });\n  root.addEventListener('input', (e) => {\n    const t = e.target; const k = t.dataset && t.dataset.in;\n    if (!k) return;\n    if (k === 'text') { if (locked()) return; setFace({ text: t.value.slice(0, 120) }); draw(false); return; }\n    if (k === 'casa') { st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: casaText(t.value), font: 'classic', layout: 'mc' }); changed(); draw(false); return; }\n    if (k === 'burn') { st.burn = +t.value; renderStage(); return; }\n    if (k === 'cpa' || k === 'cpb' || k === 'cpn') {\n      const cp = coupleParts(st.faces.front.text);\n      if (k === 'cpn') cp.names = t.value.replace(/\\s+/g, ' ').replace(/^ /, '').toUpperCase().slice(0, 40); else { const ch = oneLetter(t.value); cp[k === 'cpa' ? 'a' : 'b'] = ch; if (t.value !== ch) t.value = ch; }\n      st.faces.front = Object.assign({}, st.faces.front, { kind: 'text', text: coupleText(cp), font: 'classic', layout: 'mc' }); changed(); draw(false); return;\n    }\n    if (k === 'noteMsg' || k === 'designNote') { st[k] = k === 'noteMsg' ? t.value.slice(0, NOTE_MAX) : t.value; st.added = false; if (k === 'noteMsg') { const c = stepsEl.querySelector('[data-notecount]'); if (c) c.textContent = [...st.noteMsg].length; } updateLive(); autosave(); }\n  });\n  root.addEventListener('change', (e) => {\n    const t = e.target; const k = t.dataset && t.dataset.in;\n    if (!k) return;\n    if (k === 'scent') { st.scent = t.value; st.added = false; showErr(''); draw(true); return; }\n    if (k === 'lightok') { st.lightOk = t.checked; st.added = false; showErr(''); draw(true); return; }\n    if (k === 'mockup') { st.mockup = t.checked; st.added = false; draw(true); return; }\n    if (k === 'invert') { st.invert = t.checked; changed(); draw(false); return; }\n    if (k === 'keep') { setFace({ keep: t.checked }); draw(false); return; }\n    if (k === 'approved') { st.approved = t.checked; st.added = false; showErr(''); draw(true); return; }\n    if (k === 'file') {\n      const file = t.files && t.files[0];\n      if (!file) return;\n      if (!/^image\\//.test(file.type) && !/\\.(heic|heif)$/i.test(file.name)) { st.uploadErr = 'Please choose a photo or image file (JPG, PNG or HEIC).'; draw(true); return; }\n      if (file.size > 20 * 1024 * 1024) { st.uploadErr = 'That file is over 20 MB. Please choose a smaller one.'; draw(true); return; }\n      const r = new FileReader();\n      r.onload = () => { uploadFile = file; st.upload = String(r.result); st.uploadErr = ''; setFace({ kind: 'image', image: 'upload' }); draw(true); };\n      r.onerror = () => { st.uploadErr = 'We could not read that file. Please try another.'; draw(true); };\n      r.readAsDataURL(file);\n    }\n  });\n\n  /* Drag the jar to turn it (it settles on the nearest side) */\n  let dragging = false; let dx0 = 0; let a0 = 0; let moved = false;\n  stage.addEventListener('pointerdown', (e) => {\n    if (e.button > 0 || e.target.closest('button, input, label')) return;\n    dragging = true; moved = false; dx0 = e.clientX; a0 = st.angle;\n    try { stage.setPointerCapture(e.pointerId); } catch (err) {}\n  });\n  stage.addEventListener('pointermove', (e) => {\n    if (!dragging) return;\n    const dx = e.clientX - dx0;\n    if (!moved && Math.abs(dx) < 5) return;\n    moved = true; st.angle = a0 + dx * 0.45; if (st.face === 'inside') { st.face = 'front'; } renderStage();\n  });\n  const endDrag = () => {\n    if (!dragging) return;\n    dragging = false;\n    if (!moved) return;\n    if (st.face === 'lid') { renderStage(); return; }\n    const norm = ((-st.angle % 360) + 540) % 360 - 180;\n    const pick = ['front', 'right', 'back', 'left'].map((id) => ({ id, d: Math.abs((((-(FACES.find((f) => f.id === id).target) - 14 * -1) - norm) % 360 + 540) % 360 - 180) })).sort((x, y) => x.d - y.d)[0];\n    goFace(pick ? pick.id : 'front');\n    draw(mq.matches && st.step === 3);\n  };\n  stage.addEventListener('pointerup', endDrag);\n  stage.addEventListener('pointercancel', endDrag);\n\n  /* ---------- Save + share ---------- */\n  const saveDesign = () => {\n    let link = '';\n    try { link = location.origin + location.pathname + '?design=' + b64e(pack()); } catch (e) {}\n    st.saved = true; st.link = link;\n    autosave();\n    if (link && navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(link).catch(() => {});\n    draw(true);\n  };\n\n  /* ---------- Proof picture for the TAJA team (John, Oct 18) ----------\n     When the design goes in the bag, every surface is drawn flat (glass, fonts, patterns and the etched photo, as the customer saw\n     them) with the design details, and attached to the order line as the hidden file \"_Design proof\". The cart and checkout skip\n     underscore properties; the order in the admin and the staff order email show it. If drawing fails, the order goes on without it. */\n  const PF = { body: \"'DL Montserrat', 'Helvetica Neue', Arial, sans-serif\", disp: \"'DL Source Serif 4', Georgia, serif\", ink: '#0E0D0C', stone: '#625C55', paper: '#FBF9F6', rule: 'rgba(14,13,12,.14)' };\n  const loadImg = (src) => new Promise((ok) => { if (!src) { ok(null); return; } const i = new Image(); i.crossOrigin = 'anonymous'; i.onload = () => ok(i); i.onerror = () => ok(null); i.src = src; });\n  const mkCanvas = (w, h) => { const c = document.createElement('canvas'); c.width = Math.max(1, Math.round(w)); c.height = Math.max(1, Math.round(h)); return c; };\n  /* letter-spacing by hand (canvas letterSpacing isn't in every Safari); like CSS, the space follows every letter */\n  /* letters as the eye sees them, so an emoji made of several code points stays one picture */\n  const seg = (() => { try { return new Intl.Segmenter(); } catch (e) { return null; } })();\n  const chars = (t) => (seg ? [...seg.segment(t)].map((x) => x.segment) : [...t]);\n  const widthOf = (ctx, t, ls) => { if (!ls) return ctx.measureText(t).width; let w = 0; for (const ch of chars(t)) w += ctx.measureText(ch).width + ls; return w; };\n  const spaced = (ctx, t, x, y, ls) => { if (!ls) { ctx.fillText(t, x, y); return; } let cx = x; for (const ch of chars(t)) { ctx.fillText(ch, cx, y); cx += ctx.measureText(ch).width + ls; } };\n  const wrapLines = (ctx, t, maxW) => {\n    const out = [];\n    String(t || '').split('\\n').forEach((para) => {\n      let line = '';\n      para.split(/\\s+/).filter(Boolean).forEach((w) => { const tryL = line ? line + ' ' + w : w; if (line && ctx.measureText(tryL).width > maxW) { out.push(line); line = w; } else line = tryL; });\n      out.push(line);\n    });\n    return out;\n  };\n  const panelPath = (ctx, x, y, w, h, r) => { ctx.beginPath(); if (ctx.roundRect) ctx.roundRect(x, y, w, h, r); else ctx.rect(x, y, w, h); };\n  /* the words, laid out the way content() lays them out on the jar */\n  const drawWords = (ctx, fd, x, y, W, H, color) => {\n    const f = fit(fd, W, H); const F = f.F; const P = POS[posKey(fd)];\n    if (f.casa) {\n      const c = f.casa; ctx.fillStyle = color; ctx.textBaseline = 'alphabetic';\n      c.lines.forEach((l) => {\n        const big = c.F.wt + ' ' + l.s.toFixed(2) + 'px ' + c.F.fam;\n        ctx.font = big;\n        if (!l.ini) { spaced(ctx, l.t, x + l.left, y + l.base, l.tr * l.s); return; }\n        /* the Couple's initials: the dot is a small bullet raised to the middle of the capitals, as on the jars */\n        const ls = l.tr * l.s; const ds = l.s * CPL_DOT; let cx = x + l.left;\n        ctx.fillText(l.ini[0], cx, y + l.base); cx += ctx.measureText(l.ini[0]).width + ls;\n        ctx.font = c.F.wt + ' ' + ds.toFixed(2) + 'px ' + c.F.fam; ctx.fillText('\u2022', cx, y + l.base - CPL_UP * ds); cx += ctx.measureText('\u2022').width + ls;\n        ctx.font = big; ctx.fillText(l.ini[1], cx, y + l.base);\n      });\n      return;\n    }\n    const padV = P.v === 's' ? (P.h === 'c' ? H * 0.16 : H * 0.11) : (P.v === 'e' ? H * 0.09 : H * 0.1);\n    const padH = W * 0.09;\n    const fs = f.fs; const lh = fs * F.lh; const ls = F.tr * fs;\n    const lines = f.lines.length ? f.lines : [''];\n    const blockH = lines.length * lh;\n    const top = P.v === 's' ? y + padV : (P.v === 'e' ? y + H - padV - blockH : y + padV + (H - 2 * padV - blockH) / 2);\n    ctx.font = F.wt + ' ' + fs.toFixed(2) + 'px ' + F.fam; ctx.fillStyle = color; ctx.textBaseline = 'alphabetic';\n    const m = ctx.measureText('Hg'); const asc = m.fontBoundingBoxAscent || fs * 0.8; const desc = m.fontBoundingBoxDescent || fs * 0.2;\n    lines.forEach((raw, i) => {\n      const t = F.tt === 'uppercase' ? raw.toUpperCase() : (F.tt === 'lowercase' ? raw.toLowerCase() : raw);\n      const lw = widthOf(ctx, t, ls);\n      const lx = P.h === 's' ? x + padH : (P.h === 'e' ? x + W - padH - lw : x + (W - lw) / 2);\n      spaced(ctx, t, lx, top + i * lh + (lh - (asc + desc)) / 2 + asc, ls);\n    });\n  };\n  const drawPat = (ctx, img, color, x, y, W, H, g) => {\n    if (!img) return;\n    const oc = mkCanvas(W, H); const o = oc.getContext('2d');\n    o.drawImage(img, g.x, g.y, g.mw, g.mh);\n    o.globalCompositeOperation = 'source-in'; o.fillStyle = color; o.fillRect(0, 0, oc.width, oc.height);\n    ctx.drawImage(oc, x, y, W, H);\n  };\n  /* the photo as the preview etches it: grayscale, at the left-most of the old Detail setting (it matches the engraved jars, Kourtney,\n     Oct 27), optional light/dark swap */\n  const drawPhoto = (ctx, img, mode, x, y, W, H) => {\n    const oc = mkCanvas(W, H); const o = oc.getContext('2d');\n    const bw = oc.width * 0.76, bh = oc.height * 0.76; const s = Math.min(bw / img.naturalWidth, bh / img.naturalHeight);\n    const dw = img.naturalWidth * s, dh = img.naturalHeight * s;\n    o.drawImage(img, oc.width * 0.12 + (bw - dw) / 2, oc.height * 0.12 + (bh - dh) / 2, dw, dh);\n    const id = o.getImageData(0, 0, oc.width, oc.height); const d = id.data;\n    const c = 1 + st.detail / 22, br = 0.55 + st.detail / 110;\n    for (let i = 0; i < d.length; i += 4) {\n      if (!d[i + 3]) continue;\n      let L = (0.2126 * d[i] + 0.7152 * d[i + 1] + 0.0722 * d[i + 2]) / 255;\n      L = Math.min(1, Math.max(0, (L - 0.5) * c + 0.5)); L = Math.min(1, L * br); if (st.invert) L = 1 - L;\n      d[i] = d[i + 1] = d[i + 2] = Math.round(L * 255);\n    }\n    o.putImageData(id, 0, 0);\n    ctx.save(); ctx.globalCompositeOperation = (mode === 'black' || mode === 'gold') ? 'screen' : 'multiply'; ctx.globalAlpha = (mode === 'white' || mode === 'iri') ? 0.55 : (mode === 'wood' ? 0.7 : 0.92);\n    ctx.drawImage(oc, x, y, W, H); ctx.restore();\n  };\n  const drawSurface = (ctx, A, id, x, y, w, h, wood) => {\n    const fd = st.faces[id]; const G = gl(); const black = G.base === 'black';\n    const mode = wood ? 'wood' : G.proof;\n    const color = wood ? 'rgba(92,58,28,.86)' : ({ black: '#D9D1C3', white: 'rgba(104,98,90,.6)', iri: 'rgba(255,253,249,.97)', gold: '#F1EADC' })[mode];\n    ctx.save(); panelPath(ctx, x, y, w, h, 6); ctx.clip();\n    const tex = A.tex[mode];\n    const Wfull = wood ? w : w / (1 - 2 * RAD); /* the glass texture spans the whole jar, so the flat side shows its middle */\n    if (tex) ctx.drawImage(tex, x - (Wfull - w) / 2, y, Wfull, h); else { ctx.fillStyle = wood ? '#C9A57B' : ({ black: '#1A1817', white: '#F2EFEA', iri: '#F1ECEB', gold: '#C9A15C' })[mode]; ctx.fillRect(x, y, w, h); }\n    if (mode === 'iri' || mode === 'gold') { ctx.shadowColor = mode === 'gold' ? 'rgba(88,60,20,.55)' : 'rgba(92,80,102,.5)'; ctx.shadowBlur = Math.max(1.5, w * 0.004); }\n    const blank = fd.kind === 'none' || (fd.kind === 'text' && !(fd.text || '').trim());\n    if (blank) {\n      const fs = Math.max(12, w * 0.042); ctx.font = '500 ' + fs.toFixed(1) + 'px ' + PF.body; ctx.fillStyle = mode === 'iri' ? 'rgba(92,80,102,.8)' : color; ctx.globalAlpha = 0.75; ctx.textBaseline = 'middle';\n      const t = 'LEFT BLANK'; const ls = fs * 0.16; spaced(ctx, t, x + (w - widthOf(ctx, t, ls)) / 2, y + h / 2, ls); ctx.globalAlpha = 1;\n    } else if (fd.kind === 'text') drawWords(ctx, fd, x, y, w, h, color);\n    else if (fd.kind === 'pattern') {\n      const pid = patOf(fd.pattern).id;\n      let g;\n      if (wood) { const p = patGeo(pid, w, h); g = { mw: p.mw, mh: p.mh, x: p.ox, y: p.oy }; }\n      else { const r = Wfull * RAD; const half = (SEG / 2) * 2 * r * Math.tan((45 / SEG) * rad); const p = patGeo(pid, w + 2 * half, h); g = { mw: p.mw, mh: p.mh, x: p.ox - half, y: p.oy }; }\n      drawPat(ctx, A.pat[pid], color, x, y, w, h, g);\n    } else if (fd.kind === 'image' && fd.image === 'upload' && A.photo) drawPhoto(ctx, A.photo, mode, x, y, w, h);\n    ctx.restore();\n    ctx.save(); panelPath(ctx, x + 0.5, y + 0.5, w - 1, h - 1, 6); ctx.strokeStyle = PF.rule; ctx.lineWidth = 1; ctx.stroke(); ctx.restore();\n  };\n  const proofImage = async () => {\n    const Z = sz(); const GLs = gl();\n    const rows = proofRows();\n    const SW = 2000, M = 80, G = 48;\n    const sides = FACES.filter((f) => f.id !== 'lid' && f.id !== 'inside');\n    const lids = FACES.filter((f) => f.id === 'lid' || f.id === 'inside');\n    const pw = (SW - 2 * M - 3 * G) / 4;\n    const ph = pw * (VASE ? 1.12 : 1.07) / (1 - 2 * RAD);\n    const lw = pw / (1 - 2 * RAD); /* the lid is the jar's full width, at the same scale as the sides */\n    const ids = FACE_IDS.filter((id) => st.faces[id].kind !== 'none');\n    const pats = [...new Set(ids.filter((id) => st.faces[id].kind === 'pattern').map((id) => patOf(st.faces[id].pattern).id))];\n    const fonts = [...new Set(ids.filter((id) => st.faces[id].kind === 'text').map((id) => FONTS[st.faces[id].font] || FONTS.classic))];\n    const usesPhoto = ids.some((id) => st.faces[id].kind === 'image' && st.faces[id].image === 'upload') && st.upload;\n    if (document.fonts && document.fonts.load) {\n      /* with the words themselves, so the emoji font's pieces for any emoji in them load too */\n      const words = ids.filter((id) => st.faces[id].kind === 'text').map((id) => st.faces[id].text || '').join(' ') || 'A';\n      const loads = fonts.map((F) => document.fonts.load(F.wt + ' 40px ' + F.fam, words).catch(() => null)).concat(['300 40px ' + PF.disp, '400 20px ' + PF.body, '500 20px ' + PF.body, '600 20px ' + PF.body].map((s) => document.fonts.load(s).catch(() => null)));\n      await Promise.race([Promise.all(loads), new Promise((r) => setTimeout(r, 3000))]);\n    }\n    const T = C.tex || {};\n    const A = { tex: {}, pat: {}, photo: null };\n    await Promise.all([\n      loadImg(T[{ iri: 'iridescent' }[GLs.proof] || GLs.proof]).then((i) => { A.tex[GLs.proof] = i; }),\n      VASE ? null : loadImg(T.wood).then((i) => { A.tex.wood = i; }),\n      usesPhoto ? loadImg(st.upload).then((i) => { A.photo = i; }) : null\n    ].concat(pats.map((p) => loadImg(patImg(p)).then((i) => { A.pat[p] = i; }))));\n\n    /* measure first, then draw on a sheet of the right height */\n    const mc = mkCanvas(10, 10).getContext('2d');\n    const CAP = '400 19px ' + PF.body, CAP_LH = 27, NOTE = '400 16px ' + PF.body, NOTE_LH = 23;\n    const capOf = (r) => { mc.font = CAP; const a = wrapLines(mc, r.what.replace('Your photo or logo, prepared for glass', 'Photo or logo, as etched (original file attached to the order)'), r.w); mc.font = NOTE; const b = r.note ? wrapLines(mc, r.note, r.w) : []; return { a, b, h: a.length * CAP_LH + (b.length ? 8 + b.length * NOTE_LH : 0) }; };\n    const rowOf = (id) => rows.find((r) => r.id === id);\n    const sideCaps = sides.map((f) => capOf(Object.assign({}, rowOf(f.id), { w: pw })));\n    const lidCaps = lids.map((f) => capOf(Object.assign({}, rowOf(f.id), { w: lw })));\n    const details = [];\n    if (st.mockup && C.mockup) details.push(['Digital mock-up', 'Yes. Email the customer a mock-up and wait for their OK before engraving.', true]);\n    if (!VASE) details.push(['Wax + scent', st.wax === 'beeswax' ? 'Organic beeswax, fragrance-free' : 'Soy wax \u00B7 ' + (st.scent ? st.scent.split(' \u00B7 ')[0] : 'Scent not chosen')]);\n    if (usesPhoto) details.push(['Photo', 'The original file is attached to the order as Photo or logo.' + (st.invert ? ' Light and dark swapped.' : '')]);\n    if (usesPhoto && RMBG && st.faces.front.kind === 'image') details.push(['Remove background', st.rmbg === 'yes' ? 'Yes. Remove the photo\\'s background before engraving.' : 'No. Engrave the whole photo.', st.rmbg === 'yes']);\n    if (needLightOk()) details.push(['Photo on ' + st.glass + ' glass', 'The customer confirmed: \"' + lightOkText() + '\"']);\n    if (st.gift === true && st.noteMsg.trim()) details.push(['Handwritten note', st.noteMsg.trim()]);\n    if (st.designNote.trim()) details.push(['Notes for our designer', st.designNote.trim()]);\n    if (isUp()) details.push(['Started from', C.title + ' (moved to Design Your Own for the extra surfaces)']);\n    const dx = VASE ? M : M + 2 * lw + G + 72;\n    const dw = SW - M - dx;\n    const DT = '400 20px ' + PF.body, DT_LH = 29;\n    const detH = details.map(([, txt, box]) => { mc.font = DT; return 24 + wrapLines(mc, txt, dw - (box ? 48 : 0)).length * DT_LH + (box ? 40 : 0); });\n    const HEAD = 236;\n    const r1 = HEAD + 34; /* first row: label, then panel */\n    const r1End = r1 + 22 + ph + 34 + Math.max(...sideCaps.map((c) => c.h));\n    const r2 = r1End + 64;\n    const lidEnd = lids.length ? r2 + 22 + lw + 34 + Math.max(...lidCaps.map((c) => c.h)) : r2;\n    const detEnd = r2 + detH.reduce((a, b) => a + b + 30, 0);\n    const SH = Math.ceil(Math.max(lidEnd, detEnd) + 120);\n\n    const cv = mkCanvas(SW, SH); const ctx = cv.getContext('2d');\n    ctx.fillStyle = PF.paper; ctx.fillRect(0, 0, SW, SH);\n    const eyebrow = (t, x, y, col, size) => { const fs = size || 15; ctx.font = '600 ' + fs + 'px ' + PF.body; ctx.fillStyle = col || PF.stone; ctx.textBaseline = 'alphabetic'; spaced(ctx, t.toUpperCase(), x, y, fs * 0.16); };\n    /* header */\n    const prodTitle = isUp() && FOCUS && FOCUS.up ? FOCUS.up.title : (ALT[st.glass] ? ALT[st.glass].title : C.title);\n    eyebrow('TAJA Collection \u00B7 Design proof', M, 84);\n    ctx.font = '300 50px ' + PF.disp; ctx.fillStyle = PF.ink; ctx.fillText(prodTitle || 'Your design', M, 146);\n    const spec = [GLs.name, Z.name + (Z.oz ? ' ' + Z.oz : '')];\n    if (!VASE) spec.push(st.wax === 'beeswax' ? 'Organic beeswax' : (st.scent ? 'Scent: ' + st.scent.split(' \u00B7 ')[0] : 'Soy wax'));\n    ctx.font = '400 21px ' + PF.body; ctx.fillStyle = PF.ink; ctx.fillText(spec.join('  \u00B7  '), M, 192);\n    const code = designCode();\n    let when = '';\n    try { when = new Date().toLocaleString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: 'numeric', minute: '2-digit', timeZoneName: 'short' }); } catch (e) { when = new Date().toDateString(); }\n    ctx.textAlign = 'right';\n    ctx.font = '600 15px ' + PF.body; ctx.fillStyle = PF.stone; { const t = 'DESIGN CODE'; const ls = 15 * 0.16; ctx.textAlign = 'left'; spaced(ctx, t, SW - M - widthOf(ctx, t, ls) + ls, 84, ls); }\n    ctx.textAlign = 'right';\n    ctx.font = '600 44px ' + PF.body; ctx.fillStyle = PF.ink; ctx.fillText(code, SW - M, 142);\n    ctx.font = '400 17px ' + PF.body; ctx.fillStyle = PF.stone; ctx.fillText('Proof approved by the customer \u00B7 ' + when, SW - M, 192);\n    ctx.textAlign = 'left';\n    ctx.fillStyle = PF.rule; ctx.fillRect(M, HEAD - 14, SW - 2 * M, 1);\n    /* the sides */\n    const caption = (c, x, y) => {\n      ctx.textBaseline = 'alphabetic'; ctx.font = CAP; ctx.fillStyle = PF.ink;\n      c.a.forEach((l, i) => ctx.fillText(l, x, y + i * CAP_LH));\n      if (c.b.length) { ctx.font = NOTE; ctx.fillStyle = PF.stone; c.b.forEach((l, i) => ctx.fillText(l, x, y + c.a.length * CAP_LH + 8 + i * NOTE_LH)); }\n    };\n    sides.forEach((f, i) => {\n      const x = M + i * (pw + G);\n      eyebrow(f.name, x, r1);\n      drawSurface(ctx, A, f.id, x, r1 + 22, pw, ph, false);\n      caption(sideCaps[i], x, r1 + 22 + ph + 34);\n    });\n    /* the lid, top and inside */\n    lids.forEach((f, i) => {\n      const x = M + i * (lw + G);\n      eyebrow(f.name, x, r2);\n      drawSurface(ctx, A, f.id, x, r2 + 22, lw, lw, true);\n      caption(lidCaps[i], x, r2 + 22 + lw + 34);\n    });\n    /* details */\n    let y = r2;\n    details.forEach(([k, txt, box], i) => {\n      ctx.font = DT; const ls = wrapLines(ctx, txt, dw - (box ? 48 : 0));\n      if (box) {\n        ctx.strokeStyle = PF.ink; ctx.lineWidth = 2; ctx.strokeRect(dx + 1, y - 26, dw - 2, detH[i] + 8);\n        eyebrow(k, dx + 24, y + 4, PF.ink);\n        ctx.font = DT; ctx.fillStyle = PF.ink; ls.forEach((l, j) => ctx.fillText(l, dx + 24, y + 40 + j * DT_LH));\n      } else {\n        eyebrow(k, dx, y);\n        ctx.font = DT; ctx.fillStyle = PF.ink; ls.forEach((l, j) => ctx.fillText(l, dx, y + 34 + j * DT_LH));\n      }\n      y += detH[i] + 30;\n    });\n    /* footer */\n    ctx.fillStyle = PF.rule; ctx.fillRect(M, SH - 78, SW - 2 * M, 1);\n    ctx.font = '400 16px ' + PF.body; ctx.fillStyle = PF.stone;\n    ctx.fillText('Drawn by the design tool when the customer approved the proof and added it to the bag. Each side is spelled out under it, as typed.', M, SH - 42);\n    return new Promise((ok) => { try { cv.toBlob((b) => ok(b), 'image/jpeg', 0.86); } catch (e) { ok(null); } });\n  };\n  root.dlProof = proofImage; /* QA: lets a test draw the proof without adding to the bag */\n\n  /* ---------- Add to bag ---------- */\n  const problems = () => {\n    const rows = proofRows();\n    if (COUPLE) { const cp = coupleParts(st.faces.front.text); if (!cp.a || !cp.b || !cp.names) return 'Type both initials and your names for the front in step 3.'; }\n    if (!rows.some((r) => !r.blank)) return 'Add words, a pattern or an image to at least one surface.';\n    const sample = rows.find((r) => st.faces[r.id].kind === 'image' && !(st.faces[r.id].image === 'upload' && st.upload));\n    if (sample) return 'The ' + sample.name.toLowerCase() + ' still shows the sample artwork. Upload your photo or logo, or choose words, a pattern or blank.';\n    if (casaOn() && !casaName(st.faces.front.text)) return 'Add the family name to engrave under CASA in step 3.';\n    if (FOCUS) {\n      const pf = (PRESETS[FOCUS.preset] || {}).faces || {};\n      const same = FACE_IDS.find((id) => !(lockText() && id === 'front') && !(MEMORIAL && id === 'lid') && pf[id] && pf[id].kind === 'text' && st.faces[id].kind === 'text' && String(st.faces[id].text).trim() === String(pf[id].text).trim());\n      if (same) return 'The ' + (FACES.find((f) => f.id === same) || { name: same }).name.toLowerCase() + ' still has our sample words. Type your own in step 3.';\n    }\n    const ss = sampleSides();\n    if (ss.length) {\n      st.flagSample = true;\n      const nm = ss.map((id) => (FACES.find((f) => f.id === id) || { name: id }).name.toLowerCase());\n      const list = nm.length > 1 ? nm.slice(0, -1).join(', ') + ' and ' + nm[nm.length - 1] : nm[0];\n      return 'The ' + list + (ss.length > 1 ? ' still have' : ' still has') + ' our sample words. Type your own in step 3, or tick \u201CKeep our sample words\u201D on ' + (ss.length > 1 ? 'each side' : 'that side') + '.';\n    }\n    const long = rows.find((r) => r.warn && st.faces[r.id].kind === 'text');\n    if (long) return 'The words on the ' + long.name.toLowerCase() + ' are too long to engrave clearly. Try two lines, fewer words or a larger size.';\n    if (!VASE && st.wax !== 'beeswax' && !st.scent) return 'Choose a scent in step 4.';\n    if (st.gift === null) return 'Choose Yes or No for a handwritten note in step 4.';\n    if (st.gift === true && !st.noteMsg.trim()) return 'Write your handwritten note in step 4, or choose No.';\n    if (needLightOk() && !st.lightOk) return 'Tick the box in step 5 to confirm that photos on ' + st.glass + ' glass engrave lighter than on black.';\n    if (!lineVariant()) return 'That glass and size isn\\'t available. Please choose another size.';\n    return '';\n  };\n  const cta = () => {\n    if (busy) return;\n    if (st.added) { const cd = document.querySelector('cart-drawer'); if (cd && typeof cd.open === 'function') { try { cd.open(); return; } catch (e) {} } location.href = C.cartUrl || '/cart'; return; }\n    const p = problems();\n    if (p) { showErr(p); if (/scent|handwritten/.test(p)) st.step = 4; else if (/step 5/.test(p)) st.step = 5; else if (/surface|sample|too long|family name|initials/.test(p)) { st.step = 3; if (/family name|initials/.test(p)) { st.face = 'front'; st.angle = nearest(-14); } else if (/our sample words/.test(p)) { const ss = sampleSides(); if (ss.length && !ss.includes(st.face)) goFace(ss[0]); } } draw(true); errEl.scrollIntoView({ block: 'center', behavior: 'smooth' }); return; }\n    if (!st.approved) { st.step = 5; draw(true); showErr(curStep() === 5 && !mq.matches ? 'Tick the box to approve your proof, then add to bag.' : ''); const box = stepsEl.querySelector('[data-in=\"approved\"]'); if (box) box.closest('label').scrollIntoView({ block: 'center', behavior: 'smooth' }); return; }\n    addToBag();\n  };\n  const dataUrlToBlob = (u) => fetch(u).then((r) => r.blob());\n  const addToBag = async () => {\n    const v = lineVariant();\n    const code = designCode();\n    const rows = proofRows();\n    let link = '';\n    try { link = location.origin + location.pathname + '?design=' + b64e(pack()); } catch (e) {}\n    const props = [];\n    rows.forEach((r) => { if (!r.blank) props.push([r.name, r.what.replace('Your photo or logo, prepared for glass', 'Photo or logo (attached)')]); });\n    const blanks = rows.filter((r) => r.blank).map((r) => r.name);\n    if (blanks.length) props.push(['Left blank', blanks.join(', ')]);\n    const usesUpload = FACE_IDS.some((f) => st.faces[f].kind === 'image' && st.faces[f].image === 'upload') && st.upload;\n    if (usesUpload && st.invert) props.push(['Photo settings', 'Light and dark swapped']);\n    if (usesUpload && RMBG && st.faces.front.kind === 'image') props.push(['Remove background', st.rmbg === 'yes' ? 'Yes' : 'No']);\n    if (needLightOk()) props.push(['Photo on ' + st.glass + ' glass', 'Customer confirmed it engraves lighter than on black']);\n    if (!VASE) props.push(['Wax', st.wax === 'beeswax' ? 'Organic beeswax' : 'Soy wax']);\n    if (!VASE) props.push(['Scent', st.wax === 'beeswax' ? 'Fragrance-free (beeswax)' : st.scent.split(' \u00B7 ')[0]]);\n    if (st.gift === true && st.noteMsg.trim()) props.push(['Gift note', st.noteMsg.trim()]);\n    if (st.mockup && C.mockup) props.push(['Digital mock-up', 'Yes, send a mock-up first']);\n    if (st.designNote.trim()) props.push(['Notes for our designer', st.designNote.trim()]);\n    if (isUp()) props.push(['Started from', C.title]);\n    if (ALT[st.glass]) props.push(['Designed in', 'Design Your Own']);\n    props.push(['Design code', code]);\n    props.push(['Proof', 'Checked and approved by the customer']);\n    if (link) props.push(['_Design link', link]);\n\n    busy = true; renderCta(); showErr('');\n    let proof = null;\n    try { proof = await Promise.race([proofImage(), new Promise((r) => setTimeout(() => r(null), 9000))]); } catch (e) { proof = null; }\n    const cd = document.querySelector('cart-drawer');\n    const drawer = cd && cd.dataset.cartType === 'drawer' && typeof cd.renderContents === 'function' && typeof cd.getSectionsToRender === 'function';\n    const secs = drawer ? cd.getSectionsToRender().map((x) => x.id) : [];\n    const rootUrl = (window.Shopify && Shopify.routes && Shopify.routes.root) || '/';\n    let mockKey = null;\n    try {\n      /* the mock-up goes first as its own line, so the candle's reply carries the whole bag for the drawer */\n      if (st.mockup && C.mockup) {\n        const r0 = await fetch(rootUrl + 'cart/add.js', { method: 'post', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ items: [{ id: C.mockup.id, quantity: 1, properties: { For: (ALT[st.glass] ? ALT[st.glass].title : C.title) + ' \u00B7 design ' + code } }] }) });\n        const j0 = await r0.json();\n        if (!r0.ok || j0.status) throw j0;\n        mockKey = j0.items && j0.items[0] && j0.items[0].key;\n      }\n      const fd = new FormData();\n      fd.append('id', v.id); fd.append('quantity', '1');\n      props.forEach(([k, val]) => fd.append('properties[' + k + ']', val));\n      if (usesUpload) {\n        const blob = uploadFile || await dataUrlToBlob(st.upload);\n        const name = (uploadFile && uploadFile.name) || ('design-' + code + '.' + ((blob.type || 'image/jpeg').split('/')[1] || 'jpg'));\n        fd.append('properties[Photo or logo]', blob, name);\n      }\n      if (proof) fd.append('properties[_Design proof]', proof, 'proof-' + code + '.jpg');\n      if (drawer) { fd.append('sections', secs); fd.append('sections_url', location.pathname); }\n      const r = await fetch(C.cartAdd || '/cart/add', { method: 'post', headers: { Accept: 'application/javascript', 'X-Requested-With': 'XMLHttpRequest' }, body: fd });\n      const res = await r.json();\n      if (!r.ok || res.status) {\n        if (mockKey) fetch(rootUrl + 'cart/change.js', { method: 'post', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ id: mockKey, quantity: 0 }) }).catch(() => {});\n        throw res;\n      }\n      st.added = true;\n      if (drawer) {\n        cd.classList.remove('is-empty');\n        try { cd.renderContents(res, !document.body.classList.contains('page-overlay-cart-on')); } catch (e) { location.href = C.cartUrl || '/cart'; return; }\n        if (typeof publish === 'function' && typeof PUB_SUB_EVENTS !== 'undefined') publish(PUB_SUB_EVENTS.cartUpdate, { source: 'product-form', productVariantId: v.id, cartData: res });\n      } else { location.href = C.cartUrl || '/cart'; return; }\n    } catch (err) {\n      showErr((err && (err.description || err.message)) || 'Something went wrong adding your design. Please try again.');\n    } finally { busy = false; renderCta(); }\n  };\n\n  /* Scent cards on the same page (John, Oct 11): \"Explore our scents\" scrolls down to them, and \"Choose this scent\" comes back up */\n  const norm = (x) => String(x || '').split('\u00B7')[0].normalize('NFD').replace(/[\\u0300-\\u036f]/g, '').toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim();\n  root.addEventListener('click', (e) => {\n    const a = e.target.closest('.cz-small');\n    const lib = document.getElementById('scents');\n    if (!a || !lib) return;\n    e.preventDefault();\n    const d = lib.closest('details'); if (d) d.open = true; /* scent cards in a drop-down (Oct 12) */\n    (d || lib).scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n  document.addEventListener('dl:choose-scent', (e) => {\n    const want = norm(e.detail && e.detail.name);\n    const hit = SCENTS.find((x) => norm(x) === want);\n    if (!hit || VASE) return;\n    st.scent = hit; st.wax = 'soy'; st.added = false; st.step = 4; showErr('');\n    draw(true);\n    const target = mq.matches ? stepsEl.querySelector('[data-step=\"4\"]') : mheadEl;\n    if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n\n  /* the note's tooltip stays on screen: it slides left or right when the \"i\" is near an edge (a phone's right edge) */\n  const fitTip = (t) => { const bb = t.querySelector('.cz-tip__b'); if (!bb) return; bb.style.setProperty('--tip-shift', '0px'); const r = bb.getBoundingClientRect(); const vw = document.documentElement.clientWidth; let d = 0; if (r.right > vw - 12) d = vw - 12 - r.right; if (r.left + d < 12) d = 12 - r.left; bb.style.setProperty('--tip-shift', Math.round(d) + 'px'); };\n  root.addEventListener('mouseover', (e) => { const t = e.target.closest && e.target.closest('.cz-tip'); if (t) fitTip(t); });\n  /* the note's tooltip closes on a tap elsewhere or Esc */\n  const tipsOff = () => root.querySelectorAll('.cz-tip.is-open').forEach((x) => { x.classList.remove('is-open'); x.setAttribute('aria-expanded', 'false'); });\n  document.addEventListener('click', (e) => { if (!e.target.closest || !e.target.closest('.cz-tip')) tipsOff(); });\n  document.addEventListener('keydown', (e) => { if (e.key === 'Escape') tipsOff(); });\n\n  /* Re-lay out when crossing the phone/desktop line */\n  const onMq = () => { if (!mq.matches && !st.step) st.step = 1; draw(true); };\n  if (mq.addEventListener) mq.addEventListener('change', onMq); else if (mq.addListener) mq.addListener(onMq);\n  if (!mq.matches && !st.step) st.step = 1;\n  goFace(st.face);\n  draw(true);\n  if (document.fonts && document.fonts.ready) document.fonts.ready.then(() => { renderStage(); renderTiles(); });\n  /* Casa + Couple: re-space the lines once the TAJA font is in (the first layout uses an estimate) */\n  if (document.fonts && document.fonts.load) document.fonts.load(FONTS.classic.wt + ' 40px ' + FONTS.classic.fam.split(',')[0].trim()).then(() => { renderStage(); renderTiles(); }).catch(() => {});\n})();\n"],
  "mappings": "CAIC,IAAM,CACL,MAAM,KAAO,SAAS,cAAc,cAAc,EAClD,GAAI,CAAC,MAAQ,KAAK,QAAQ,MAAO,OACjC,KAAK,QAAQ,MAAQ,IACrB,IAAI,EAAI,CAAC,EACT,GAAI,CAAE,EAAI,KAAK,MAAM,KAAK,cAAc,kBAAkB,EAAE,WAAW,CAAG,MAAY,CAAE,MAAQ,CAChG,MAAM,KAAO,EAAE,OAAS,OACnB,MAAM,SAAS,gBAAgB,aAAa,sBAAuB,EAAE,EAC1E,MAAM,IAAO,GAAM,OAAO,GAAY,EAAM,EAAE,QAAQ,WAAa,IAAO,CAAE,IAAK,QAAS,IAAK,OAAQ,IAAK,OAAQ,IAAK,SAAU,IAAK,OAAQ,GAAE,CAAC,CAAE,EAC/I,MAAS,GAAM,KAAO,EAAI,KAAO,EAAI,KAAK,QAAQ,CAAC,EAAI,OAAO,EAAI,GAAG,GACrE,IAAO,GAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAI,EAAE,MAAM,CAAC,EAAE,YAAY,EAChE,GAAK,OAAO,WAAW,oBAAoB,EAW3C,MAAQ,eACR,MAAQ,CACZ,QAAS,CAAE,KAAM,eAAgB,IAAK,mBAAqB,MAAQ,6BAA8B,GAAI,IAAK,GAAI,IAAM,GAAI,OAAQ,GAAI,IAAM,GAAI,IAAK,EAAG,CAAE,EACxJ,OAAQ,CAAE,KAAM,iBAAkB,IAAK,kBAAoB,MAAQ,YAAa,GAAI,IAAK,GAAI,EAAG,GAAI,OAAQ,GAAI,IAAM,GAAI,KAAM,EAAG,IAAK,EACxI,OAAQ,CAAE,KAAM,SAAU,IAAK,kBAAoB,MAAQ,UAAW,GAAI,IAAK,GAAI,IAAM,GAAI,OAAQ,GAAI,IAAM,GAAI,KAAM,EAAG,CAAE,EAC9H,MAAO,CAAE,KAAM,QAAS,IAAK,iBAAmB,MAAQ,eAAgB,GAAI,IAAK,GAAI,IAAM,GAAI,YAAa,GAAI,IAAM,GAAI,IAAK,EAAG,EAAG,KAAM,+BAAgC,CAC7K,EAEM,WAAa,CAAE,OAAQ,QAAS,EAChC,MAAQ,KAAO,CAAE,MAAO,IAAM,MAAO,IAAK,EAAI,CAAE,KAAM,IAAM,QAAS,IAAM,OAAQ,GAAK,MAAO,IAAM,MAAO,KAAM,QAAS,IAAK,EAChI,QAAU,CAAC,EACX,MAAQ,CAAC,GACd,EAAE,UAAY,CAAC,GAAG,QAAS,GAAM,CAChC,MAAM,EAAI,OAAO,EAAE,IAAM,EAAE,EAAE,YAAY,EACrC,GAAK,CAAC,QAAQ,SAAS,CAAC,GAAG,QAAQ,KAAK,CAAC,EAC7C,MAAM,IAAM,OAAO,EAAE,IAAM,EAAE,EACvB,GAAK,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAChD,GAAI,IAAM,CAAC,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,EAAG,CACzC,MAAM,EAAI,IAAI,MAAM,aAAa,EACjC,MAAM,KAAK,CAAE,GAAI,KAAM,IAAI,EAAE,EAAG,GAAI,EAAI,EAAE,CAAC,EAAE,YAAY,EAAI,GAAI,IAAK,EAAG,MAAM,EAAE,GAAK,EAAI,CAAC,CAC7F,CACF,CAAC,EAID,MAAM,UAAY,CAAE,WAAY,CAAC,UAAW,OAAO,EAAG,KAAM,CAAC,OAAQ,OAAO,CAAE,EACxE,IAAM,CAAC,EACT,CAAC,MAAQ,EAAE,EAAE,OAAS,EAAE,MAAM,SAAW,EAAE,KAAK,OAAO,KAAK,SAAS,EAAE,QAAS,GAAM,CACxF,MAAM,EAAI,EAAE,IAAI,CAAC,EAAG,GAAI,CAAC,GAAK,CAAC,EAAE,SAAU,OAC3C,MAAM,GAAK,EAAE,SAAS,IAAK,GAAM,OAAO,OAAO,CAAC,EAAG,EAAG,CAAE,KAAM,OAAO,EAAE,IAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAE,CAAC,CAAC,EACnH,OAAQ,GAAM,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,GAAK,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,IAAI,CAAC,EAChF,GAAG,SAAU,IAAI,CAAC,EAAI,CAAE,MAAO,EAAE,MAAO,IAAK,EAAE,IAAK,SAAU,EAAG,EAAG,QAAQ,KAAK,CAAC,EACxF,CAAC,EACD,MAAM,WAAa,CAAC,EAAGA,MAAQ,IAAI,CAAC,EAAI,IAAI,CAAC,EAAE,SAAS,KAAM,GAAM,EAAE,OAASA,GAAE,GAAK,EAAE,UAAY,CAAC,GAAG,KAAM,GAAM,OAAO,EAAE,EAAE,EAAE,YAAY,IAAM,GAAK,OAAO,EAAE,IAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,IAAMA,GAAE,EAE9M,MAAQ,CACZ,MAAO,CAAE,KAAM,QAAS,KAAM,cAAe,IAAK,eAAgB,IAAK,YAAa,MAAO,cAAe,MAAO,QAAS,MAAO,OAAQ,MAAO,IAAM,KAAM,GAAK,IAAK,CAAC,UAAW,SAAS,EAAG,KAAM,gEAAiE,EACrQ,MAAO,CAAE,KAAM,QAAS,KAAM,cAAe,IAAK,eAAgB,IAAK,YAAa,MAAO,cAAe,MAAO,QAAS,MAAO,GAAI,MAAO,IAAM,KAAM,IAAM,IAAK,CAAC,UAAW,SAAS,EAAG,KAAM,gEAAiE,EAClQ,WAAY,CAAE,KAAM,QAAS,KAAM,mBAAoB,IAAK,aAAc,IAAK,UAAW,MAAO,cAAe,MAAO,MAAO,MAAO,GAAI,MAAO,IAAM,KAAM,IAAM,MAAO,CAAC,IAAM,EAAG,EAAG,IAAK,CAAC,UAAW,SAAS,EAAG,KAAM,wFAAyF,EAClT,KAAM,CAAE,KAAM,QAAS,KAAM,aAAc,IAAK,cAAe,IAAK,WAAY,MAAO,aAAc,MAAO,OAAQ,MAAO,UAAW,MAAO,IAAM,KAAM,IAAM,MAAO,CAAC,GAAK,EAAG,EAAG,UAAW,QAAS,IAAK,CAAC,UAAW,SAAS,EAAG,KAAM,CAAC,UAAW,SAAS,EAAG,KAAM,gEAAiE,CAC1U,EACM,GAAK,IAAM,MAAM,GAAG,KAAK,GAAK,MAAM,MAGpC,SAAW,IAAM,CAAE,IAAI,EAAI,EAAG,OAAC,QAAS,QAAS,OAAQ,MAAM,EAAE,QAAS,IAAO,CAAE,MAAM,EAAI,GAAG,MAAM,EAAE,EAAO,GAAK,EAAE,OAAS,SAAW,EAAE,SAAS,GAAK,KAAO,WAAY,GAAG,MAAM,EAAE,EAAI,OAAO,OAAO,CAAC,EAAG,EAAG,CAAE,KAAM,OAAQ,CAAC,EAAO,EAAE,OAAS,SAAW,EAAE,MAAQ,IAAI,KAAK,GAAG,IAAO,CAAC,EAAU,CAAG,EAC1S,aAAe,CAAC,EAAGA,OAAQ,EAAE,OAAS,EAAE,MAAM,IAAM,EAAE,MAAM,GAAG,UAAY,CAAC,GAAG,KAAM,GAAM,OAAO,EAAE,EAAE,EAAE,YAAY,IAAM,GAAK,OAAO,EAAE,IAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,IAAMA,GAAE,EAC3L,UAAY,CAChB,CAAE,GAAI,QAAS,KAAM,QAAS,MAAO,QAAS,OAAQ,EAAG,MAAO,EAAM,EACtE,CAAE,GAAI,QAAS,KAAM,aAAc,MAAO,QAAS,OAAQ,IAAK,MAAO,EAAK,EAC5E,CAAE,GAAI,OAAQ,KAAM,OAAQ,MAAO,OAAQ,OAAQ,KAAM,MAAO,EAAK,EACrE,CAAE,GAAI,OAAQ,KAAM,YAAa,MAAO,OAAQ,OAAQ,GAAI,MAAO,EAAK,EACxE,CAAE,GAAI,MAAO,KAAM,MAAO,MAAO,MAAO,OAAQ,KAAM,MAAO,EAAK,EAClE,CAAE,GAAI,SAAU,KAAM,iBAAkB,MAAO,SAAU,OAAQ,KAAM,MAAO,EAAM,CACtF,EAIM,MAAS,EAAE,OAAS,EAAE,MAAM,OAAU,EAAE,MAAQ,KAChD,KAAO,MAAS,MAAM,SAAW,MAAM,QAAQ,OAAS,MAAM,QAAU,CAAC,OAAO,EAAK,KAGtF,OAAM,UAAU,CAAC,EAAE,MAAQ,IAChC,MAAM,MAAQ,KAAO,UAAU,MAAM,EAAG,CAAC,EAAI,UACvC,SAAW,MAAM,IAAK,GAAM,EAAE,EAAE,EAChC,QAAU,CACd,IAAK,CAAE,KAAM,UAAW,KAAM,KAAO,mCAAqC,0CAA2C,MAAO,QAAS,OAAQ,gBAAiB,KAAM,SAAU,MAAO,CACnL,MAAO,CAAE,KAAM,OAAQ,KAAM;AAAA,OAAkB,KAAM,QAAS,EAAG,KAAM,CAAE,KAAM,OAAQ,KAAM,qBAAgB,KAAM,SAAU,EAC7H,IAAK,CAAE,KAAM,OAAQ,KAAM,QAAS,KAAM,QAAS,EAAG,OAAQ,CAAE,KAAM,OAAQ,KAAM,sBAAuB,KAAM,QAAS,CAAE,CAAE,EAChI,KAAM,CAAE,KAAM,OAAQ,KAAM,mCAAoC,MAAO,QAAS,OAAQ,cAAe,KAAM,UAAW,MAAO,CAC7H,MAAO,CAAE,KAAM,OAAQ,KAAM;AAAA,QAAgB,KAAM,SAAU,EAAG,MAAO,CAAE,KAAM,OAAQ,KAAM,QAAS,KAAM,SAAU,EAAG,IAAK,CAAE,KAAM,OAAQ,KAAM,KAAM,KAAM,SAAU,CAAE,CAAE,EAChL,KAAM,CAAE,KAAM,eAAgB,KAAM,kCAAmC,MAAO,QAAS,OAAQ,MAAO,KAAM,UAAW,MAAO,CAC5H,MAAO,CAAE,KAAM,OAAQ,KAAM,MAAO,KAAM,UAAW,OAAQ,QAAS,EAAG,IAAK,CAAE,KAAM,OAAQ,KAAM,IAAK,KAAM,QAAS,CAAE,CAAE,EAC9H,KAAM,CAAE,KAAM,YAAa,KAAM,oCAAqC,MAAO,QAAS,OAAQ,wBAAyB,KAAM,SAAU,MAAO,CAC5I,MAAO,CAAE,KAAM,OAAQ,KAAM;AAAA,UAAyB,KAAM,QAAS,EAAG,OAAQ,CAAE,KAAM,OAAQ,KAAM,YAAa,KAAM,QAAS,CAAE,CAAE,EACxI,OAAQ,CAAE,KAAM,aAAc,KAAM,qCAAsC,MAAO,QAAS,OAAQ,cAAe,KAAM,SAAU,MAAO,CACtI,MAAO,CAAE,KAAM,OAAQ,KAAM,cAAe,KAAM,QAAS,EAAG,KAAM,CAAE,KAAM,OAAQ,KAAM,aAAc,KAAM,SAAU,EACxH,MAAO,CAAE,KAAM,UAAW,QAAS,OAAQ,EAAG,KAAM,CAAE,KAAM,UAAW,QAAS,OAAQ,CAAE,CAAE,EAC9F,KAAM,CAAE,KAAM,YAAa,KAAM,wBAAyB,MAAO,QAAS,OAAQ,YAAa,KAAM,QAAS,MAAO,CACnH,MAAO,CAAE,KAAM,OAAQ,KAAM;AAAA,kBAA+B,KAAM,OAAQ,EAAG,KAAM,CAAE,KAAM,QAAS,MAAO,QAAS,EAAG,IAAK,CAAE,KAAM,QAAS,MAAO,QAAS,CAAE,CAAE,EACnK,IAAK,CAAE,KAAM,WAAY,KAAM,qCAAsC,MAAO,QAAS,OAAQ,WAAY,KAAM,UAAW,OAAQ,GAAM,MAAO,CAC7I,MAAO,CAAE,KAAM,QAAS,MAAO,QAAS,CAAE,CAAE,EAC9C,MAAO,CAAE,KAAM,aAAc,KAAM,mCAAoC,MAAO,KAAM,OAAQ,aAAc,KAAM,UAAW,OAAQ,GAAM,MAAO,CAC9I,MAAO,CAAE,KAAM,QAAS,MAAO,QAAS,CAAE,CAAE,EAC9C,OAAQ,CAAE,KAAM,aAAc,KAAM,0BAA2B,MAAO,QAAS,OAAQ,WAAS,KAAM,UAAW,OAAQ,GAAM,MAAO,CACpI,MAAO,CAAE,KAAM,OAAQ,KAAM;AAAA,kBAA2B,KAAM,UAAW,OAAQ,IAAK,CAAE,CAAE,EAC5F,SAAU,CAAE,KAAM,mBAAoB,KAAM,yEAAgE,MAAO,KAAM,OAAQ,YAAa,KAAM,UAAW,OAAQ,GAAM,MAAO,CAClL,MAAO,CAAE,KAAM,QAAS,MAAO,QAAS,EAAG,IAAK,CAAE,KAAM,OAAQ,KAAM,wBAAyB,KAAM,SAAU,OAAQ,IAAK,CAAE,CAAE,EAClI,MAAO,CAAE,KAAM,cAAe,KAAM,4BAA6B,MAAO,KAAM,OAAQ,aAAc,KAAM,UAAW,MAAO,CAAC,CAAE,CACjI,EACM,eAAiB,CAAC,qCAAmC,kCAAgC,gCAA8B,mDACvH,uCAAqC,iDAA+C,kDAAgD,kCACpI,0CAAwC,kCAAgC,0CAAgC,oCACxG,kCAAgC,qCAAmC,6BAA2B,kCAA+B,EACzH,QAAW,EAAE,QAAU,CAAC,GAAG,IAAK,GAAM,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EACvE,OAAO,QAAQ,eAAe,QAAS,GAAM,OAAO,KAAK,CAAC,CAAC,EAGhE,MAAM,QAAU,CAAC,CAAC,MAAO,WAAW,EAAG,CAAC,MAAO,oBAAoB,EAAG,CAAC,MAAO,SAAS,EAAG,CAAC,MAAO,QAAQ,EAAG,CAAC,MAAO,mBAAmB,EAAG,CAAC,MAAO,MAAM,CAAC,EACpJ,SAAW,CACf,CAAC,SAAU,SAAU,KAAK,EAAG,CAAC,cAAe,cAAe,KAAK,EAAG,CAAC,QAAS,QAAS,KAAK,EAAG,CAAC,SAAU,SAAU,KAAK,EAAG,CAAC,QAAS,eAAgB,KAAK,EAAG,CAAC,OAAQ,OAAQ,KAAK,EAAG,CAAC,QAAS,QAAS,KAAK,EAAG,CAAC,UAAW,mBAAoB,KAAK,EACvP,CAAC,aAAc,cAAe,KAAK,EAAG,CAAC,SAAU,YAAa,KAAK,EAAG,CAAC,SAAU,gBAAiB,KAAK,EAAG,CAAC,aAAc,kBAAmB,KAAK,EAAG,CAAC,UAAW,mBAAoB,KAAK,EAAG,CAAC,WAAY,2BAA4B,KAAK,EAAG,CAAC,WAAY,WAAY,KAAK,EAC3Q,CAAC,UAAW,UAAW,KAAK,EAAG,CAAC,QAAS,QAAS,KAAK,EAAG,CAAC,YAAa,YAAa,KAAK,EAAG,CAAC,OAAQ,aAAc,KAAK,EAAG,CAAC,OAAQ,OAAQ,KAAK,EAClJ,CAAC,WAAY,WAAY,KAAK,EAAG,CAAC,aAAc,aAAc,KAAK,EAAG,CAAC,WAAY,WAAY,KAAK,EAAG,CAAC,SAAU,SAAU,KAAK,EAAG,CAAC,aAAc,aAAc,KAAK,EACtK,CAAC,eAAgB,gBAAiB,KAAK,EAAG,CAAC,aAAc,aAAc,KAAK,EAAG,CAAC,YAAa,YAAa,KAAK,EAAG,CAAC,WAAY,WAAY,KAAK,EAAG,CAAC,SAAU,eAAgB,KAAK,EAAG,CAAC,WAAY,YAAa,KAAK,EAAG,CAAC,aAAc,aAAc,KAAK,EAAG,CAAC,SAAU,oBAAqB,KAAK,EAAG,CAAC,SAAU,gBAAiB,KAAK,EACtU,CAAC,UAAW,kBAAmB,KAAK,EAAG,CAAC,OAAQ,OAAQ,KAAK,EAAG,CAAC,QAAS,QAAS,KAAK,EAAG,CAAC,OAAQ,OAAQ,KAAK,CACnH,EAAE,IAAI,CAAC,CAAC,GAAI,KAAM,CAAC,KAAO,CAAE,GAAI,KAAM,CAAE,EAAE,EACpC,KAAO,EAAE,MAAQ,CAAC,EAClB,OAAS,CAAC,GAAI,UAAa,KAAK,EAAE,GAAK,CAAC,GAAG,OAAS,EAAI,CAAC,GAAK,GAC9D,KAAO,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,YAAY,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,WAAW,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EACvrB,QAAU,CAAC,EAAG,KAAM,MAAS,EAAI,2BAA6B,EAAI,sBAAwB,EAAI,wBAA0B,KAAO,cAAgB,KAAO,2BAA6B,KAAO,UAAY,mBAAqB,KAAO,UAAY,wDAA0D,GAGxS,OAAS,CAAC,GAAI,GAAI,IAAM,CAAE,MAAM,EAAI,KAAK,EAAE,GAAK,CAAC,IAAK,GAAG,EAAS,EAAI,KAAK,IAAI,GAAK,EAAE,CAAC,EAAG,EAAI,EAAE,CAAC,CAAC,EAAS,GAAK,EAAE,CAAC,EAAI,EAAS,GAAK,EAAE,CAAC,EAAI,EAAG,MAAO,CAAE,GAAI,GAAI,IAAK,GAAK,IAAM,EAAG,IAAK,EAAI,IAAM,CAAE,CAAG,EAC7M,IAAI,SAAW,GACf,MAAM,MAAS,IAAO,SAAS,KAAM,GAAM,EAAE,KAAO,EAAE,GAAK,SAAS,CAAC,EAE/D,IAAM,CAAE,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,iBAAkB,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,cAAe,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,kBAAmB,EAC1J,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,cAAe,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,UAAW,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,eAAgB,EACpI,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,mBAAoB,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,iBAAkB,EAAG,GAAI,CAAE,EAAG,IAAK,EAAG,IAAK,KAAM,oBAAqB,CAAE,EACnJ,SAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAChE,OAAU,IAAO,CAAE,MAAM,EAAK,CAAE,OAAQ,KAAM,IAAK,KAAM,OAAQ,KAAM,OAAQ,IAAK,EAAG,GAAG,MAAM,GAAK,GAAG,OAAQ,OAAO,IAAI,CAAC,EAAI,EAAI,IAAM,EAC1I,KAAO,CAAE,EAAG,aAAc,EAAG,SAAU,EAAG,UAAW,EACrD,OAAS,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAU,EAClI,YAAc,CAAC,iBAAkB,MAAQ,cAAgB,sBAA8B,oBAA2C,KAAO,YAAc,sBAAuB,YAAY,EAC1L,WAAa,CAAC,OAAQ,QAAU,wDAA0D,MAAQ,yBAA2B,OAAS,mWACtI,KAAO,6MACP,OAAS,8MAGT,YAAe,IAAO,CAC1B,MAAM,EAAI,QAAQ,EAAE,GAAK,QAAQ,MAC3B,MAAQ,CAAC,EACf,gBAAS,QAAS,GAAM,CAAE,MAAM,CAAC,EAAI,OAAO,OAAO,CAAE,KAAM,OAAQ,KAAM,GAAI,KAAM,EAAE,MAAQ,UAAW,OAAQ,SAAU,QAAS,SAAU,MAAO,QAAS,EAAG,EAAE,MAAM,CAAC,GAAK,CAAC,CAAC,CAAG,CAAC,EAC7K,KACT,EACM,UAAY,MAAM,KAAM,GAAM,EAAE,KAAO,SAAS,GAAK,MAAM,CAAC,GAAK,CAAE,GAAI,GAAI,KAAM,GAAI,GAAI,GAAI,EAAG,EAAI,EACpG,GAAK,CACT,MAAO,QAAQ,SAAS,OAAO,EAAI,QAAW,QAAQ,CAAC,GAAK,QAAU,KAAM,UAAU,GAAI,MAAO,MAAO,KAAM,GAAI,MAAO,IAAK,KAAM,GAAI,KAAM,QAC9I,KAAM,EAAG,OAAQ,MAAO,MAAO,YAAY,KAAK,EAAG,OAAQ,GAAI,UAAW,GAAI,OAAQ,EAAG,OAAQ,GAAO,KAAM,KAAM,QAAS,GAAO,MAAO,GAC3I,KAAM,KAAM,QAAS,GAAI,OAAQ,GAAO,IAAK,MAAO,WAAY,GAAI,SAAU,GAAO,MAAO,GAAO,MAAO,GAAO,KAAM,GAAI,KAAM,EACnI,EAMM,SAAW,IACX,KAAO,IAAM,CAAC,CAAC,OAAS,SAAS,KAAM,GAAM,CAAC,KAAK,SAAS,CAAC,GAAK,GAAG,MAAM,CAAC,GAAK,GAAG,MAAM,CAAC,EAAE,OAAS,MAAM,EAC5G,YAAc,IAAO,KAAK,EAAI,aAAa,GAAG,MAAO,GAAG,IAAI,EAAI,WAAW,GAAG,MAAO,GAAG,IAAI,EAClG,GAAI,MAAO,CACT,GAAG,OAAS,MAAM,OAAQ,GAAG,MAAQ,YAAY,MAAM,MAAM,EAC7D,SAAS,QAAS,GAAM,CAAO,KAAK,SAAS,CAAC,IAAG,GAAG,MAAM,CAAC,EAAI,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,CAAC,EAAG,CAAE,KAAM,MAAO,CAAC,EAAG,CAAC,EAClH,MAAM,IAAM,QAAQ,MAAM,MAAM,GAAK,CAAC,GAAG,MAAW,IAAM,QAAQ,SAAS,EAAE,IAAG,GAAG,MAAQ,GAC7F,CAIA,MAAM,OAAS,IAAO,MAAQ,MAAM,SAAW,OAAU,CAAC,MAAQ,GAAG,SAAW,OAG1E,OAAS,CAAC,CAAC,OAAS,MAAM,SAAW,SAGrC,SAAW,CAAC,CAAC,OAAS,MAAM,SAAW,WACvC,QAAU,CAAE,KAAM,OAAQ,KAAM,wBAAyB,KAAM,SAAU,OAAQ,IAAK,EAGtF,UAAY,CAAC,CAAC,OAAS,CAAC,MAAO,QAAS,UAAU,EAAE,SAAS,MAAM,MAAM,EACzE,KAAO,CAAC,CAAC,OAAS,CAAC,MAAO,UAAU,EAAE,SAAS,MAAM,MAAM,EAC3D,SAAW,IAAM,OAAO,GAAK,OAC7B,YAAc,IAAM,SAAS,GAAK,GAAG,OAAS,QAC9C,UAAY,IAAM,UAAY,GAAG,OAAS,MAC1C,OAAS,IAAM,YAAY,GAAK,UAAU,EAC1C,QAAU,IAAM,WAAa,GAAG,OAAS,QAIzC,aAAgB,IAAO,CAC3B,GAAI,MAAO,MAAO,GAClB,MAAM,KAAO,QAAQ,GAAG,MAAM,GAAK,CAAC,GAAG,OAAS,CAAC,GAAG,EAAE,EAAS,GAAK,GAAG,MAAM,EAAE,EAC/E,MAAO,CAAC,EAAE,IAAM,GAAG,OAAS,QAAU,IAAM,GAAG,OAAS,QAAU,OAAO,GAAG,MAAQ,EAAE,EAAE,KAAK,GAAK,OAAO,GAAG,IAAI,EAAE,KAAK,IAAM,OAAO,GAAG,IAAI,EAAE,KAAK,EACpJ,EACM,YAAc,IAAM,SAAS,OAAQ,IAAO,aAAa,EAAE,GAAK,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,EAClF,WAAc,IAAQ,YAAY,EAAE,SAAS,EAAE,EAAI,cAAgB,GAAG,WAAa,iBAAmB,IAAM,GAC5G,QAAU,IAAM,qCAAuC,aAAa,GAAG,IAAI,EAAI,GAAK,WAAa,iKACpC,GAAG,MAAM,GAAG,IAAI,EAAE,KAAO,WAAa,IAAM,wCAA0C,MAAM,KAAM,GAAM,EAAE,KAAO,GAAG,IAAI,GAAK,CAAE,KAAM,GAAG,IAAK,GAAG,KAAK,YAAY,EAAI,wBAClO,SAAY,GAAM,OAAO,GAAK,EAAE,EAAE,QAAQ,MAAO,EAAE,EAAE,MAAM;AAAA,CAAI,EAAE,IAAK,GAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EACvG,OAAO,CAAC,EAAG,IAAM,EAAE,IAAM,GAAK,UAAU,KAAK,CAAC,EAAE,EAAE,KAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAEpE,SAAY,MAAS,QAAU,OAAO,MAAQ,EAAE,EAAE,KAAK,EAAI;AAAA,EAAO,OAAO,IAAI,EAAE,QAAQ,OAAQ,GAAG,EAAE,QAAQ,KAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,EAAI,IAEnJ,UAAa,IAAO,OAAO,GAAK,EAAE,EAAE,YAAY,EAAE,MAAM,eAAe,GAAK,CAAC,EAAE,GAAG,CAAC,EACnF,YAAe,GAAM,CACzB,MAAM,GAAK,OAAO,GAAK,EAAE,EAAE,QAAQ,MAAO,EAAE,EAAE,MAAM;AAAA,CAAI,EAClD,IAAM,CAAC,GAAG,OAAO,GAAG,CAAC,GAAK,EAAE,EAAE,YAAY,CAAC,EAAE,OAAQ,GAAM,gBAAgB,KAAK,CAAC,CAAC,EACxF,MAAO,CAAE,EAAG,IAAI,CAAC,GAAK,GAAI,EAAG,IAAI,CAAC,GAAK,GAAI,MAAO,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG,EAAE,QAAQ,OAAQ,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,CAAE,CACjI,EACM,WAAc,GAAM,CAAC,EAAE,EAAG,EAAE,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK,GAAK,EAAE,MAAQ;AAAA,EAAO,EAAE,MAAQ,IAEzF,QAAU,IAAM,CAChB,OAAO,IAAG,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,SAAS,SAAS,GAAG,MAAM,MAAM,IAAI,CAAC,EAAG,KAAM,UAAW,OAAQ,IAAK,CAAC,GAC3J,SAAQ,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,WAAW,YAAY,GAAG,MAAM,MAAM,IAAI,CAAC,EAAG,KAAM,UAAW,OAAQ,IAAK,CAAC,GAC9J,UAAY,GAAG,MAAM,MAAK,GAAG,MAAM,IAAM,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,IAAK,OAAO,EACtF,EACI,OAAS,OAAO,IAAG,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,UAAW,OAAQ,IAAK,CAAC,GACnI,SAAQ,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,GAAI,KAAM,UAAW,OAAQ,IAAK,CAAC,GASxH,MAAM,WAAc,IAAO,OAAO,GAAK,KAAO,GAAG,MAAM,OAAS,GAAG,OAAS,OACtE,aAAgB,IAAO,QAAU,KAAO,GAAG,MAAM,OAAS,GAAG,OAAS,OAC5E,IAAI,WAAa,KACb,KAAO,GAGX,MAAM,IAAM,SAAW,EAAE,OACnB,KAAQ,GAAM,KAAK,SAAS,mBAAmB,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,EAC7H,KAAQ,GAAM,KAAK,MAAM,mBAAmB,OAAO,KAAK,EAAE,QAAQ,KAAM,GAAG,EAAE,QAAQ,KAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAClG,KAAO,KAAO,CAAE,EAAG,EAAG,EAAG,GAAG,MAAO,EAAG,GAAG,KAAM,EAAG,GAAG,OAAQ,EAAG,GAAG,MAAO,GAAI,GAAG,MAAO,GAAI,GAAG,OAAS,GAAO,EAAK,GAAG,OAAS,GAAQ,EAAI,GAAK,GAAI,GAAG,QAAS,GAAI,GAAG,OAAS,EAAI,EAAG,GAAI,GAAG,OAAS,EAAI,EAAG,GAAI,GAAG,KAAM,GAAI,GAAG,IAAK,GAAI,GAAG,UAAW,GAC1P,OAAU,GAAM,CACpB,GAAI,CAAC,GAAK,EAAE,IAAM,EAAG,OAIrB,GAHI,QAAQ,SAAS,EAAE,CAAC,IAAG,GAAG,MAAQ,EAAE,GACpC,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,CAAC,IAAG,GAAG,KAAO,EAAE,GAC7C,QAAQ,EAAE,CAAC,IAAG,GAAG,OAAS,EAAE,GAC5B,EAAE,GAAK,OAAO,EAAE,GAAM,SAAU,CAClC,MAAM,KAAO,YAAY,OAAO,EAChC,SAAS,QAAS,GAAM,CAAM,EAAE,EAAE,CAAC,IAAG,KAAK,CAAC,EAAI,OAAO,OAAO,KAAK,CAAC,EAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,KAAO,OAAO,KAAK,CAAC,EAAE,MAAQ,EAAE,EAAE,MAAM,EAAG,GAAG,EAAO,WAAW,KAAK,CAAC,EAAE,IAAI,EAAG,KAAK,CAAC,EAAE,KAAO,WAAW,KAAK,CAAC,EAAE,IAAI,EAAa,MAAM,KAAK,CAAC,EAAE,IAAI,IAAG,KAAK,CAAC,EAAE,KAAO,UAAW,CAAC,EAC1Q,GAAG,MAAQ,IACb,CACA,GAAG,MAAQ,OAAO,SAAS,EAAE,EAAE,EAAI,EAAE,GAAK,GAE1C,MAAM,GAAK,OAAO,EAAE,IAAM,EAAE,EAAE,KAAK,EAAS,GAAK,OAAO,EAAE,IAAM,EAAE,EAAE,KAAK,EAAS,GAAK,OAAO,EAAE,IAAM,EAAE,EAAE,KAAK,EAC/G,GAAG,QAAU,CAAC,GAAK,MAAQ,GAAK,IAAM,GAAI,GAAI,GAAK,QAAU,GAAK,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,EAAG,QAAQ,EACjH,GAAG,KAAO,EAAE,KAAO,EAAI,GAAU,EAAE,KAAO,GAAK,GAAG,QAAW,GAAO,KACpE,GAAG,OAAS,CAAC,CAAC,EAAE,GAAI,GAAG,OAAS,CAAC,CAAC,EAAE,GAAI,GAAG,KAAO,EAAE,KAAO,MAAQ,MAAQ,KAAM,GAAG,IAAM,EAAE,KAAO,UAAY,UAAY,MAAO,GAAG,WAAa,OAAO,EAAE,IAAM,EAAE,EAAE,MAAM,EAAG,GAAG,CACnL,EACA,GAAI,CACF,MAAM,GAAK,IAAI,gBAAgB,SAAS,MAAM,EACxC,EAAI,GAAG,IAAI,QAAQ,EACzB,GAAI,EAAK,OAAO,KAAK,CAAC,CAAC,EAAG,GAAG,KAAO,UAC3B,GAAG,IAAI,MAAM,EAAG,CAEvB,MAAM,EAAI,OAAO,GAAG,IAAI,GAAG,GAAK,EAAE,EAAE,YAAY,EAAO,QAAQ,SAAS,CAAC,IAAG,GAAG,MAAQ,GACvF,MAAMA,IAAK,OAAO,GAAG,IAAI,GAAG,GAAK,EAAE,EAAE,YAAY,EAAO,MAAM,KAAM,GAAM,EAAE,KAAOA,GAAE,IAAG,GAAG,KAAOA,KAClG,MAAM,GAAK,GAAG,IAAI,GAAG,EACjB,QAAQ,EAAE,GAAK,CAAC,OAAS,GAAG,OAAS,GAAI,GAAG,MAAQ,YAAY,EAAE,EAAG,GAAG,KAAO,GAAU,GAAG,KAAO,MAAQ,EAAI,EACnH,GAAI,CAAE,CAAC,OAAQ,IAAK,IAAK,GAAG,EAAE,QAAS,GAAM,GAAG,OAAO,CAAC,CAAC,EAAG,QAAQ,aAAa,KAAM,GAAI,SAAS,UAAY,GAAG,SAAS,EAAI,IAAM,GAAK,IAAM,SAAS,IAAI,CAAG,MAAY,CAAC,CAChL,KACK,CACH,MAAM,IAAM,aAAa,QAAQ,GAAG,EACpC,GAAI,IAAK,CAAE,MAAM,EAAI,KAAK,MAAM,GAAG,EAAG,OAAO,EAAE,CAAC,EAAO,EAAE,GAAK,OAAO,EAAE,GAAM,UAAY,EAAE,EAAE,QAAQ,aAAa,IAAM,IAAG,GAAG,OAAS,EAAE,EAAG,CAC9I,CACF,MAAY,CAAC,CACb,QAAQ,EACJ,IAAI,GAAG,KAAK,GAAK,CAAC,WAAW,GAAG,MAAO,GAAG,IAAI,IAAG,GAAG,KAAO,IAAI,GAAG,KAAK,EAAE,SAAS,CAAC,EAAE,MACzF,IAAI,MAAQ,EACZ,MAAM,SAAW,IAAM,CACrB,aAAa,KAAK,EAClB,MAAQ,WAAW,IAAM,CACvB,GAAI,CAAE,MAAM,EAAI,CAAE,EAAG,KAAK,CAAE,EAAO,GAAG,QAAU,GAAG,OAAO,OAAS,OAAS,EAAE,EAAI,GAAG,QAAQ,aAAa,QAAQ,IAAK,KAAK,UAAU,CAAC,CAAC,CAAG,MACjI,CAAE,GAAI,CAAE,aAAa,QAAQ,IAAK,KAAK,UAAU,CAAE,EAAG,KAAK,CAAE,CAAC,CAAC,CAAG,MAAa,CAAC,CAAE,CAC9F,EAAG,GAAG,CACR,EAKM,OAAS,IAAM,CAAE,GAAI,CAAE,OAAO,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI,CAAG,MAAY,CAAE,OAAO,IAAM,CAAE,GAAG,EACjH,QAAU,CAAC,EACX,QAAU,CAAC,EAAG,OAAS,CAC3B,GAAI,CAAC,OAAS,CAAC,MAAQ,CAAC,SAAS,OAAS,CAAC,SAAS,MAAM,MAAO,MAAO,GACxE,MAAM,KAAO,EAAE,GAAK,UAAY,EAAE,IAC5B,IAAM,KAAO,IAAM,KACzB,GAAI,QAAQ,GAAG,IAAM,OAAW,OAAO,QAAQ,GAAG,EAClD,IAAI,GAAK,GAAO,GAAI,CAAE,GAAK,SAAS,MAAM,MAAM,KAAM,IAAI,CAAG,MAAY,CAAE,GAAK,EAAO,CACvF,GAAI,CAAC,GAAI,MAAO,GAChB,MAAM,GAAK,EAAE,KAAO,YAAc,KAAK,YAAY,EAAK,EAAE,KAAO,YAAc,KAAK,YAAY,EAAI,KACpG,MAAM,KAAO,KACb,MAAM,EAAI,MAAM,YAAY,EAAE,EACxB,IAAM,EAAE,MAAQ,EAAE,GAAK,IAAM,CAAC,GAAG,EAAE,EAAE,OACrC,KAAO,EAAE,uBAAyB,IAAM,EAAE,wBAA0B,GAC1E,eAAQ,GAAG,EAAI,KAAK,IAAI,IAAK,GAAG,EAAI,IAC7B,QAAQ,GAAG,CACpB,EAIM,OAAS,IACT,SAAW,KAAO,KAClB,SAAW,MACX,SAAW,KAAO,KAClB,OAAS,IAAM,KACf,MAAQ,CAAC,EAAG,EAAG,KAAO,CAC1B,MAAM,GAAK,CAAC,GAAG,CAAC,EAAS,EAAI,GAAG,OAChC,GAAI,CAAC,EAAG,MAAO,CAAE,EAAG,EAAG,EAAG,CAAE,EAC5B,GAAI,OAAS,SAAS,OAAS,SAAS,MAAM,MAAO,CAEnD,MAAM,IAAM,EAAE,GAAK,UAAY,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAG,IAAI,GAAK,GAAO,GAAI,CAAE,GAAK,SAAS,MAAM,MAAM,IAAK,CAAC,CAAG,MAAY,CAAE,GAAK,EAAO,CAC9I,GAAI,GAAI,CACN,MAAM,KAAO,EAAE,GAAK,UAAY,EAAE,IAClC,IAAI,IAAM,EAAG,QAAS,EAAI,EAAG,EAAI,EAAI,EAAG,IAAK,KAAO,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,MAC7E,MAAM,EAAI,MAAM,YAAY,GAAG,CAAC,CAAC,EAAS,EAAI,MAAM,YAAY,GAAG,EAAI,CAAC,CAAC,EACnE,EAAI,EAAE,uBAAyB,EAAS,EAAK,EAAE,yBAA2B,OAAY,EAAE,uBAAyB,EAAE,MACzH,MAAO,CAAE,GAAI,IAAM,EAAI,GAAK,KAAO,EAAI,GAAK,GAAI,EAAG,CAAC,EAAI,GAAI,CAC9D,CACF,CACA,MAAO,CAAE,EAAG,EAAI,IAAO,KAAQ,EAAI,GAAK,GAAI,EAAG,GAAK,CACtD,EACM,WAAa,CAAC,GAAI,EAAG,IAAM,CAC/B,MAAM,EAAI,MAAM,QAAe,KAAO,SAAS,GAAG,IAAI,EAChD,GAAK,EAAI,KACT,GAAK,SAAW,EAAI,OACpB,GAAM,IAAO,GAAM,GACnB,GAAK,GAAK,GACV,MAAQ,CAAC,CAAE,EAAG,OAAQ,EAAG,GAAI,GAAI,OAAQ,EAAG,GAAI,GAAI,OAAS,EAAG,CAAC,EACvE,IAAI,MAAQ,OAAY,GAAK,EAC7B,GAAI,KAAM,CACR,MAAM,GAAK,OAAc,EAAI,MAAM,EAAG,KAAM,EAAE,EAC9C,GAAM,IAAO,GAAM,EAAE,EAGrB,MAAM,MAAQ,GAAM,EAAI,IAAM,SAAW,IAAM,SAC3C,GAAK,OAAM,GAAK,MACpB,MAAM,KAAK,CAAE,EAAG,KAAM,EAAG,GAAI,GAAI,EAAG,EAAE,EAAI,GAAI,GAAI,EAAE,EAAI,EAAG,CAAC,EAC5D,MAAM,EAAI,GAAK,GACX,EAAI,IAAM,MAAQ,OAAiB,EAAI,KAAK,MAAQ,QAC1D,CACA,MAAM,KAAO,SAAW,GAAU,IAAM,GAAM,KAC9C,IAAI,GAAK,GAAK,MAAQ,KAAO,IAAM,SAAW,GAAK,KAAO,EAC1D,aAAM,QAAQ,CAAC,EAAG,IAAM,CAAM,IAAG,GAAK,KAAK,EAAE,KAAO,EAAI,SAAW,EAAE,EAAG,EAAE,IAAM,EAAE,MAAQ,SAAW,UAAY,EAAE,EAAG,EAAE,MAAQ,EAAI,EAAE,GAAK,EAAI,EAAE,GAAI,EAAI,EAAE,IAAM,CAAC,EAC3J,CAAE,EAAG,KAAM,GAAI,GAAI,MAAO,KAAM,CACzC,EAMM,OAAS,KAAa,OAAS,IAAY,QAAU,IAAY,OAAS,IAC1E,MAAQ,CAAC,EAAG,EAAG,EAAG,KAAO,CAC7B,GAAI,CAAC,EAAG,OAAO,MAAM,EAAG,EAAG,CAAC,EAC5B,GAAI,OAAS,SAAS,OAAS,SAAS,MAAM,MAAO,CACnD,MAAM,IAAM,EAAE,GAAK,UAAY,EAAE,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAG,IAAI,GAAK,GAAO,GAAI,CAAE,GAAK,SAAS,MAAM,MAAM,IAAK,EAAI,EAAI,QAAG,CAAG,MAAY,CAAE,GAAK,EAAO,CACxJ,GAAI,GAAI,CACN,MAAM,KAAO,EAAE,GAAK,UAAY,EAAE,IAAK,MAAM,GAAK,MAAM,YAAY,CAAC,EAAS,GAAK,MAAM,YAAY,CAAC,EACtG,MAAM,KAAO,EAAE,GAAK,IAAO,IAAM,QAAW,MAAQ,EAAE,IAAK,MAAM,GAAK,MAAM,YAAY,QAAG,EACrF,EAAI,GAAG,uBAAyB,EAAS,GAAK,GAAG,MAAQ,GAAG,MAAQ,EAAI,GAAK,IACnF,MAAO,CAAE,GAAI,EAAI,IAAM,GAAG,yBAA2B,OAAY,GAAG,uBAAyB,GAAG,QAAU,IAAK,EAAG,CAAC,EAAI,GAAI,CAC7H,CACF,CACA,MAAO,CAAE,EAAG,IAAO,GAAM,IAAO,IAAO,EAAI,GAAI,EAAG,GAAK,CACzD,EACM,aAAe,CAAC,GAAI,EAAG,IAAM,CACjC,MAAM,EAAI,MAAM,QAAe,EAAI,YAAY,GAAG,IAAI,EAChD,GAAK,EAAI,KACf,IAAI,GAAM,KAAQ,GAAM,SACxB,MAAM,MAAQ,CAAC,EAAG,IAAI,GAAK,EAC3B,GAAI,EAAE,GAAK,EAAE,EAAG,CACd,MAAM,EAAI,EAAE,GAAK,EAAE,EAAS,EAAI,EAAE,EAAI,EAAE,EAAI,GACtC,EAAI,MAAM,EAAG,EAAG,EAAG,EAAI,OAAS,CAAC,EACnC,EAAE,EAAI,GAAK,GAAM,KAAI,GAAM,GAAM,GAAM,EAAE,GAC7C,GAAK,EAAE,EAAI,GACX,MAAM,KAAK,CAAE,EAAG,EAAI,EAAI,SAAM,EAAI,EAAG,IAAK,EAAI,CAAC,EAAG,CAAC,EAAI,KAAM,EAAG,GAAI,GAAI,EAAI,OAAS,EAAG,EAAG,GAAI,GAAI,EAAE,EAAI,EAAG,CAAC,CAC/G,CACA,IAAI,MAAQ,OAAY,GAAK,EAC7B,GAAI,EAAE,MAAO,CACX,MAAM,OAAS,IAAM,IAAO,GAC5B,IAAI,GAAK,OAAY,EAAI,MAAM,EAAG,EAAE,MAAO,EAAE,EAC7C,GAAK,OAAS,EAAE,EAChB,MAAM,EAAI,CAAC,GAAG,EAAE,KAAK,EAAE,OACvB,GAAI,MAAM,QAAU,GAAK,IAAO,KAAM,GAAK,IAAO,GAAQ,EAAI,GAAG,CAAE,MAAM,GAAK,MAAM,EAAG,EAAE,MAAO,CAAC,EAAG,GAAK,KAAK,IAAI,OAAQ,KAAK,IAAI,IAAM,OAAS,GAAK,GAAG,IAAM,EAAI,EAAE,CAAC,EAAG,EAAI,MAAM,EAAG,EAAE,MAAO,EAAE,CAAG,CACrM,MAAM,KAAK,CAAE,EAAG,EAAE,MAAO,EAAG,GAAI,GAAI,EAAG,EAAE,EAAI,GAAI,GAAI,EAAE,EAAI,EAAG,CAAC,EAC/D,MAAM,EAAK,SAAW,GAAM,GACxB,EAAI,KAAO,MAAQ,OAAiB,EAAI,MAAM,MAAQ,QAC5D,CACA,MAAM,IAAM,IAAO,SAAW,GACxB,IAAM,MAAM,OAAO,CAAC,EAAG,EAAG,IAAM,EAAI,SAAW,EAAE,GAAK,EAAI,IAAM,GAAI,CAAC,EAC3E,IAAI,GAAK,EAAI,KAAO,EACpB,aAAM,QAAQ,CAAC,EAAG,IAAM,CAAM,IAAG,GAAK,KAAK,EAAE,KAAO,EAAI,SAAW,EAAE,EAAG,EAAE,IAAM,EAAE,MAAQ,SAAW,UAAY,EAAE,EAAG,EAAE,MAAQ,EAAI,EAAE,GAAK,EAAI,EAAE,GAAI,EAAI,EAAE,IAAM,CAAC,EAC3J,CAAE,EAAG,KAAM,EAAE,MAAO,GAAI,GAAI,MAAO,MAAO,OAAQ,CAAE,CAC7D,EACM,IAAM,CAAC,GAAI,EAAG,IAAM,CACxB,GAAI,WAAW,EAAE,EAAG,CAAE,MAAM,EAAI,WAAW,GAAI,EAAG,CAAC,EAAG,MAAO,CAAE,MAAO,EAAE,KAAO,CAAC,OAAQ,EAAE,IAAI,EAAI,CAAC,MAAM,EAAG,GAAI,EAAE,GAAI,MAAO,EAAE,MAAO,EAAG,EAAE,EAAG,MAAO,EAAE,KAAK,OAAQ,KAAM,CAAE,CAAG,CAC/K,GAAI,aAAa,EAAE,EAAG,CAAE,MAAM,EAAI,aAAa,GAAI,EAAG,CAAC,EAAG,MAAO,CAAE,MAAO,EAAE,MAAM,IAAK,GAAM,EAAE,CAAC,EAAG,GAAI,EAAE,GAAI,MAAO,EAAE,MAAO,EAAG,EAAE,EAAG,MAAO,EAAE,KAAK,OAAQ,KAAM,CAAE,CAAG,CACtK,MAAM,EAAI,MAAM,GAAG,IAAI,GAAK,MAAM,QAC5B,KAAO,GAAG,MAAQ,IAAI,QAAQ,MAAO,EAAE,EACvC,MAAQ,IAAI,MAAM;AAAA,CAAI,EAAE,IAAK,GAAM,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,EAAG,EAAG,IAAM,EAAE,QAAW,EAAI,GAAK,EAAI,EAAE,OAAS,CAAE,EACxG,EAAI,KAAK,IAAI,EAAG,MAAM,MAAM,EAC5B,KAAO,KAAK,IAAI,EAAG,GAAG,MAAM,IAAK,GAAM,EAAE,MAAM,CAAC,EAChD,EAAI,IAAI,OAAO,EAAE,CAAC,EAClB,KAAO,EAAE,IAAM,IACf,GAAK,KAAO,EAAI,IAAO,EAAI,GAC3B,GAAK,EAAE,IAAM,IAAM,EAAI,IAAQ,KAAO,EAAI,GAAM,EAAI,IACpD,MAAQ,KAAO,EAAI,IAAO,EAAI,KAAQ,EAAE,EACxC,IAAM,KAAK,IAAI,KAAO,EAAE,GAAI,KAAO,KAAK,IAAI,EAAG,GAAG,MAAM,IAAK,GAAM,QAAQ,EAAG,CAAC,CAAC,CAAC,CAAC,EACxF,IAAI,GAAK,KAAK,IAAI,KAAM,GAAK,IAAK,IAAM,EAAI,EAAE,GAAG,EACjD,MAAM,EAAI,IAAM,EAAE,EAAI,GACtB,IAAI,MAAQ,OACZ,OAAI,EAAI,MAAS,MAAQ,OAAQ,GAAK,KAAQ,EAAI,EAAE,GAAc,EAAI,OAAS,MAAQ,SAChF,CAAE,MAAO,GAAI,MAAO,EAAG,MAAO,IAAI,QAAQ,MAAO,EAAE,EAAE,MAAO,CACrE,EACM,QAAU,IAAM,IAAO,KAAQ,GAAG,KAAO,KACzC,KAAQ,MAAS,CACrB,MAAM,EAAI,GAAG,KAAO,IACd,GAAK,QAAQ,EAAI,IACvB,GAAI,OAAS,YAAa,MAAO,CAAE,IAAK,iBAAkB,OAAQ,UAAW,KAAM,SAAU,EAC7F,GAAI,OAAS,YAAa,MAAO,CAAE,IAAK,4BAA6B,OAAQ,sBAAuB,KAAM,qBAAsB,EAEhI,GAAI,OAAS,UAAW,MAAO,CAAE,IAAK,yEAA0E,OAAQ,wBAAyB,KAAM,uBAAwB,EAE/K,GAAI,OAAS,WAAY,MAAO,CAAE,IAAK,2DAA4D,OAAQ,UAAW,KAAM,SAAU,EACtI,GAAI,OAAS,OAAQ,MAAO,CAAE,IAAK,4BAA6B,OAAQ,qBAAsB,KAAM,mBAAoB,EAExH,MAAM,KAAO,4GACb,GAAI,OAAS,cAAe,CAC1B,MAAMC,GAAI,8DAAgE,GAAK,GAAG,QAAQ,CAAC,EAAI,cAAgB,GAAG,QAAQ,CAAC,EAAI,yBAA2B,GAAK,GAAG,QAAQ,CAAC,EAAI,8BAC/K,MAAO,CAAE,IAAK,oBAAsBA,GAAI,KAAO,mDAAqD,IAAO,GAAM,GAAG,QAAQ,CAAC,EAAI,MAAO,OAAQ,wBAAyB,KAAM,uBAAwB,GAAIA,EAAE,CAC/M,CACA,MAAM,EAAI,gDAAkD,GAAK,GAAG,QAAQ,CAAC,EAAI,cAAgB,GAAG,QAAQ,CAAC,EAAI,4BAA8B,GAAK,GAAG,QAAQ,CAAC,EAAI,gCAC9J,KAAO,kDAAoD,IAAO,GAAM,GAAG,QAAQ,CAAC,EAAI,+CAAiD,GAAM,GAAM,GAAG,QAAQ,CAAC,EAAI,MAC3K,MAAO,CAAE,IAAK,oBAAsB,EAAI,KAAO,KAAM,OAAQ,UAAW,KAAM,UAAW,GAAI,CAAE,CACjG,EAEM,cAAgB;AAAA,kBAChB,QAAU,CAAC,GAAI,EAAG,EAAG,KAAM,KAAM,MAAQ,CAC7C,MAAM,EAAI,KAAK,IAAI,EAEb,UAAY,aAAa,EAAE,GAAK,EAAE,GAAG,MAAQ,IAAI,KAAK,EAC5D,GAAI,GAAG,OAAS,UAAY,GAAG,MAAQ,IAAI,KAAK,GAAK,WAAY,CAC/D,MAAM,EAAI,UAAY,CAAE,KAAM,aAAa,CAAE,KAAM,aAAc,EAAG,EAAG,CAAC,CAAE,EAAI,IAAI,GAAI,EAAG,CAAC,EAC1F,GAAI,EAAE,KAAM,CACV,MAAM,EAAI,EAAE,KAAM,IAAI,KAAO,EAC7B,MAAM,GAAM,GAAM,CAAE,MAAM,GAAK,EAAE,IAAM,KAAM,YAAO,EAAE,IAAM,EAAE,EAAU,uDAAyD,GAAG,QAAQ,CAAC,EAAI,WAAa,EAAE,KAAK,QAAQ,CAAC,EAAI,mBAAqB,EAAE,EAAE,IAAM,gBAAkB,EAAE,EAAE,GAAK,cAAgB,EAAE,EAAE,QAAQ,CAAC,EAAI,oCAAsC,EAAE,GAAG,QAAQ,CAAC,EAAI,wFAA0F,EAAE,IAAM,IAAI,EAAE,IAAI,CAAC,CAAC,EAAI,0BAA4B,QAAU,qBAAuB,OAAS,kCAA+B,IAAI,EAAE,IAAI,CAAC,CAAC,EAAI,IAAI,EAAE,CAAC,GAAK,SAAW,EACnkB,MAAO,8GAAgH,EAAE,KAAO,UAAY,cAAgB,IAAM,KAAO,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,EAAI,QACtM,CACA,MAAM,EAAI,IAAI,OAAO,EAAE,CAAC,EAClB,KAAO,KAAK,EAAE,CAAC,EACf,MAAQ,KAAK,EAAE,CAAC,EAChB,KAAO,EAAE,IAAM,IAAO,EAAE,IAAM,IAAM,EAAI,IAAO,EAAI,IAAS,EAAE,IAAM,IAAM,EAAI,IAAO,EAAI,IAAM,QAAQ,CAAC,EAAI,QAAU,EAAI,KAAM,QAAQ,CAAC,EAAI,MAC7I,MAAQ,KAAO,EAAE,MAAM,MAAM,EAAG,CAAC,EAAI,EAAE,MACvC,GAAK,eAAiB,EAAE,EAAE,IAAM,gBAAkB,EAAE,EAAE,GAAK,cAAgB,EAAE,GAAG,QAAQ,CAAC,EAAI,mBAAqB,EAAE,EAAE,GAAK,mBAAqB,EAAE,EAAE,GAAK,qBAAuB,EAAE,EAAE,GAAK,+BAAkC,CAAE,EAAG,OAAQ,EAAG,SAAU,EAAG,OAAQ,EAAG,EAAE,CAAC,EAAI,0BAChR,MAAO,6GAA+G,KAAO,gBAAkB,MAAQ,YAAc,IAAM,0CAA4C,EAAE,IAAM,KAC7N,MAAM,IAAK,GAAM,gBAAkB,GAAK,MAAQ,IAAI,CAAC,GAAK,UAAY,SAAS,EAAE,KAAK,EAAE,EAAI,QAChG,CACA,GAAI,GAAG,OAAS,UAAW,CACzB,MAAM,IAAM,EAAE,IAAM,EAAE,KAChB,KAAQ,OAAS,eAAiB,OAAS,aAAgB,kDAAoD,GAAM,GAAM,GAAG,KAAO,KAAK,QAAQ,CAAC,EAAI,MAAQ,GACrK,MAAO,uEAAyE,IAAM,KAAO,IAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,EAAE,EAAE,EAAG,IAAI,GAAG,QAAQ,CAAC,EAAI,OAAS,IAAI,GAAG,QAAQ,CAAC,EAAI,MAAO,IAAI,EAAE,QAAQ,CAAC,EAAI,OAAS,IAAI,EAAE,QAAQ,CAAC,EAAI,KAAK,EAAI,QAAQ,OAAO,MAAM,GAAG,OAAO,EAAE,EAAE,EAAG,OAAO,GAAK,KAAO,UACpT,CACA,GAAI,GAAG,OAAS,QAAS,CACvB,MAAM,MAAQ,OAAS,eAAiB,OAAS,aAC3C,QAAU,KAAK,QAAQ,OAAO,IAAM,GAAK,KAAK,QAAQ,KAAK,IAAM,EACvE,GAAI,GAAG,QAAU,UAAY,GAAG,OAAQ,CACtC,MAAM,EAAI,GAAG,OACP,GAAK,EAAI,EAAI,IAAI,QAAQ,CAAC,EAC1B,IAAM,IAAO,EAAI,KAAK,QAAQ,CAAC,EAC/B,IAAM,GAAG,OAAS,aAAe,GACjC,KAAO,MAAQ,0FAA4F,GACjH,MAAO,aAAe,IAAI,GAAG,MAAM,EAAI,yJAA2J,EAAI,gBAAkB,GAAK,IAAM,IAAM,KAAO,oBAAsB,SAAW,OAAS,OAAS,WAAa,UAAY,aAAe,QAAU,IAAQ,OAAS,OAAS,GAAM,KAAS,IAChY,CAEA,GAAI,GAAG,QAAU,SAAU,CACzB,MAAM,GAAK,KAAK,IAAI,EAAG,EAAI,GAAI,EAAE,QAAQ,CAAC,EAC1C,MAAO,oGAAsG,KAAK,IAAI,IAAM,EAAI,IAAK,EAAE,QAAQ,CAAC,EAAI,cAAgB,EAAE,OAAS,8BAAgC,EAAI,KAAM,QAAQ,CAAC,EAAI,yFAA2F,EAAI,MAAO,QAAQ,CAAC,EAAI,aAAe,EAAE,OAAS,+DAClT,EAAI,IAAK,QAAQ,CAAC,EAAI,0UACD,GAAK,oHAC7F,CACA,OAAO,WAAW,EAAE,OAAQ,4DAA8D,MAAQ,sDAAwD,GAAG,CAC/J,CACA,MAAO,EACT,EAGM,MAAQ,KAAK,cAAc,iBAAiB,EAC5C,UAAa,IAAO,gBAAkB,GAAK,qFAC3C,SAAY,GAAM,iBAAmB,EAAI,qFACzC,KAAO,CAAC,EAAG,QAAS,GAAK,EAAG,GAAK,EAAG,KAAM,QAAS,GAAK,EAAG,GAAK,EAAG,KAAM,KAAK,KAAK,GAAK,IAAM,EAAE,EACtG,MAAM,UACJ,4EACwD,CAAC,QAAS,QAAS,OAAQ,MAAM,EAAE,IAAI,SAAS,EAAE,KAAK,EAAE,EAAI,KAAK,IAAI,QAAQ,EAAE,KAAK,EAAE,EAC7I,uBAAyB,CAAC,EAAG,GAAI,IAAK,GAAG,EAAE,IAAK,GAAM,iBAAmB,EAAI,UAAU,EAAE,KAAK,EAAE,EAAI,wBACnG,KAAO,GAAK,svBACoF,CAAC,EAAG,GAAI,IAAK,GAAG,EAAE,IAAK,GAAM,qCAAuC,EAAI,UAAU,EAAE,KAAK,EAAE,EAAI,KAAK,IAAK,GAAM,qCAAuC,EAAI,UAAU,EAAE,KAAK,EAAE,EAAI,UACpR,gBACC,KAAO,GAAK,iEACb,qCACC,KAAO,GAAK,kMACb,mXAC+H,OAAS,iLAAmL,KAAO,wBACpU,MAAM,GAAM,KAAQ,MAAM,cAAc,GAAG,EACrC,EAAI,CACR,KAAM,GAAG,aAAa,EAAG,MAAO,GAAG,cAAc,EAAG,MAAO,GAAG,cAAc,EAAG,IAAK,GAAG,YAAY,EAAG,IAAK,GAAG,YAAY,EAAG,IAAK,GAAG,YAAY,EACjJ,GAAI,GAAG,WAAW,EAAG,MAAO,GAAG,cAAc,EAAG,GAAI,GAAG,WAAW,EAAG,IAAK,GAAG,YAAY,EAAG,OAAQ,GAAG,eAAe,EAAG,KAAM,GAAG,aAAa,EAAG,SAAU,GAAG,iBAAiB,EAAG,IAAK,GAAG,YAAY,EACvM,QAAS,GAAG,gBAAgB,EAAG,KAAM,GAAG,UAAU,EAAG,UAAW,GAAG,kBAAkB,EAAG,SAAU,GAAG,iBAAiB,CACxH,EACM,GAAK,IAAM,MAAM,KAAM,GAAM,EAAE,KAAO,GAAG,IAAI,GAAK,MAAM,CAAC,GAAK,UAC9D,SAAW,IAAI,QACf,QAAU,CAAC,GAAI,OAAS,CAAM,IAAM,SAAS,IAAI,EAAE,IAAM,OAAQ,GAAG,UAAY,KAAM,SAAS,IAAI,GAAI,IAAI,EAAK,EAChH,IAAM,KAAK,GAAK,IAKhB,IAAM,KACN,IAAM,EACN,QAAU,KACV,SAAW,IAAO,GAAG,QAAU,SAAW,CAAC,KAAO,IAAM,GACxD,SAAW,CAAC,EAAG,QAAU,GAAK,KAAO,IAAQ,MAAQ,QAAQ,EAAI,KACjE,IAAM,CAAC,GAAI,GAAI,IAAM,CAAE,MAAM,EAAK,GAAM,CAAC,EAAG,EAAG,CAAC,EAAE,IAAK,GAAM,SAAS,EAAE,MAAM,EAAG,EAAI,CAAC,EAAG,EAAE,CAAC,EAAS,EAAI,EAAE,EAAE,EAAG,EAAI,EAAE,EAAE,EAAG,MAAO,IAAM,EAAE,IAAI,CAAC,EAAG,IAAM,KAAK,MAAM,GAAK,EAAE,CAAC,EAAI,GAAK,CAAC,EAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,KAAK,EAAE,CAAG,EAChO,YAAc,IAAM,CACxB,MAAM,EAAI,GAAG,EACP,EAAI,GAAK,EAAE,EACX,EAAI,GAAK,KAAO,KAAO,MACvB,GAAK,EAAI,KACT,EAAI,EAAI,IACR,GAAK,EAAI,EAAI,EACb,EAAI,EAAI,QACR,MAAQ,CAAC,MAAQ,GAAG,QAAU,QAC9B,EAAI,GAAG,EAEP,OAAU,OAAS,EAAE,WAAc,EAAE,QAAU,QAC/C,EAAI,GAAG,KAAO,IACd,UAAY,MAAQ,EAAE,MAAQ,EAAE,IAChC,WAAa,GAAG,OAAS,SACzB,IAAM,EAAE,IACR,MAAQ,SAAS,EAAG,KAAK,EACzB,KAAO,SAAW,OAAS,0CAG3B,QAAU,EAAE,SAAW,QAAa,EAAE,SAAW,GAAK,CAAC,UAAY,CAAC,WAAW,kCAAkC,EAAE,QACnH,UAAY,QAAU,EAAE,OAAS,EAAI,EAC3C,EAAE,OAAS,EACX,MAAM,GAAM,GAAM,EAAE,QAAQ,CAAC,EAE7B,MAAM,UAAU,OAAO,WAAY,KAAK,EACxC,MAAM,MAAQ,GAAG,QAAW,MAAQ,GAAK,GAAO,MAAQ,KAAO,GACzD,IAAM,CAAE,MAAO,EAAG,MAAO,GAAI,KAAM,IAAK,KAAM,GAAI,EAClD,OAAS,CAAE,EAAG,QAAS,GAAI,QAAS,IAAK,OAAQ,IAAK,MAAO,EAC7D,QAAW,IAAO,CACtB,MAAM,IAAM,KAAK,IAAI,EAAG,KAAK,KAAK,GAAK,IAAM,GAAG,CAAC,EACjD,OAAO,MAAS,MAAQ,KAAK,IAAI,IAAM,IAAO,KAAQ,EAAI,KAAO,IAAO,CAAC,EAAI,IAAO,IAAO,EAAI,KAAS,MAAQ,KAAK,IAAI,IAAM,IAAO,IAAO,EAAI,KAAO,IAAO,CAAC,EAAI,IAAO,KAAQ,EAAI,IACzL,EACM,UAAY,IAAO,MACrB,iFAAmF,IAAO,EAAI,IAAI,QAAQ,CAAC,EAAI,sBAAwB,GAAM,IAAO,GAAG,QAAQ,CAAC,EAAI,sBAAwB,IAAO,GAAM,GAAG,QAAQ,CAAC,EAAI,UACzN,wFAA0F,IAAI,UAAW,UAAW,CAAC,EAAI,gBAAkB,GAAG,MAAQ,EAAI,IAAM,CAAC,EAAI,cAAgB,GAAG,MAAQ,EAAI,GAAG,EAAI,cAAgB,GAAG,MAAQ,EAAI,IAAM,CAAC,EAAI,cAAgB,GAAG,MAAQ,EAAI,IAAM,EAAE,EAAI,mBAE9R,MAAQ,EAAI,EAAI,KAAK,IAAK,GAAK,IAAO,GAAG,EACzC,KAAQ,IAAM,EAAK,MACnB,GAAK,GAAK,EAAI,KACd,GAAK,CAAC,EACZ,CAAC,QAAS,QAAS,OAAQ,MAAM,EAAE,QAAS,IAAO,CAAE,MAAM,GAAK,GAAG,MAAM,EAAE,EAAO,IAAM,GAAG,OAAS,YAAW,GAAG,EAAE,EAAI,OAAO,MAAM,GAAG,OAAO,EAAE,GAAI,GAAI,CAAC,EAAG,CAAC,EAC9J,MAAM,MAAQ,CAAC,GAAI,KAAQ,GAAG,EAAE,EAAI,CAAE,GAAI,GAAG,EAAE,EAAE,GAAI,GAAI,GAAG,EAAE,EAAE,GAAI,EAAG,GAAG,EAAE,EAAE,GAAK,GAAI,EAAG,GAAG,EAAE,EAAE,EAAG,EAAI,KAExG,CAAC,QAAS,QAAS,OAAQ,MAAM,EAAE,QAAS,IAAO,CACjD,MAAM,GAAK,MAAM,cAAc,YAAc,GAAK,IAAI,EAChD,GAAK,IAAI,EAAE,EAAI,GAAG,MAClB,OAAS,KAAK,IAAI,EAAG,KAAK,IAAI,GAAK,GAAG,CAAC,EACvC,GAAK,KAAK,IAAI,IAAK,KAAK,IAAI,IAAK,GAAK,GAAK,EAAG,CAAC,EAC/C,MAAQ,EAAE,MAAQ,KAAK,IAAI,OAAQ,CAAC,EAC1C,GAAG,UAAY,IACf,GAAG,MAAM,QAAU,0BAA4B,GAAG,CAAC,GAAK,CAAC,EAAI,WAAa,GAAG,CAAC,EAAI,CAAC,EAAI,aAAe,GAAG,EAAE,EAAI,cAAgB,GAAG,CAAC,EAAI,yBAA2B,IAAI,EAAE,EAAI,mBAAqB,GAAG,EAAI,CAAC,EAAI,sGAAwG,GAAG,CAAC,EAAI,OAAS,GAAG,CAAC,EAAI,sDAAwD,GAAG,EAAI,GAAI,EAAI,OAAS,GAAG,EAAI,IAAK,EAAI,QAAU,GAAG,EAAI,GAAI,EAAI,kBAAoB,EAAE,KAAO,oBACpe,GAAG,cAAc,UAAU,EAAE,MAAM,QAAW,MAAyB,UAAU,EAA3B,eACtD,QAAQ,GAAG,cAAc,UAAU,EAAG,QAAQ,GAAG,MAAM,EAAE,EAAG,GAAI,EAAG,UAAW,GAAO,MAAM,GAAI,IAAI,CAAC,CAAC,EACrG,GAAG,cAAc,WAAW,EAAE,MAAM,QAAU,6DAA+D,EAAE,QAAU,MAAQ,UAAY,YAAc,YAAc,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAI,mDAClM,GAAG,cAAc,WAAW,EAAE,MAAM,QAAU,uGAAyG,GAAG,GAAK,EAAE,EAAI,gBAAkB,MAAQ,UAAY,WAAa,IAAM,MAAM,QAAQ,CAAC,EAAI,KAAO,GAAG,EAAE,EAAI,0BAA4B,GAAG,GAAK,EAAE,EAAI,8BAC7S,CAAC,EAED,MAAM,EAAI,EAAI,EAAI,EACZ,KAAO,EAAI,EAAI,KAAK,IAAK,GAAK,IAAO,GAAG,EAAI,IAC5C,SAAW,CAAC,GAAI,GAAI,KAAO,CAC/B,MAAM,EAAI,GAAK,GAAU,IAAM,GAAK,GAAK,KAAQ,GAAK,KAChD,GAAK,GAAK,KAAK,IAAI,EAAI,GAAG,EAAI,KAAK,KAAK,EAAI,IAAM,GAAG,GAAU,GAAK,GAAK,KAAK,IAAI,EAAI,GAAG,EAAI,KAAK,KAAK,EAAI,IAAM,GAAG,GAC1H,MAAO,CAAE,IAAK,GAAI,eAAiB,GAAG,EAAE,EAAI,SAAW,GAAG,EAAE,EAAI,gBAAkB,IAAI,QAAQ,CAAC,EAAI,mBAAqB,GAAG,EAAE,EAAI,MAAO,CAC1I,EACA,MAAM,iBAAiB,WAAW,EAAE,QAAS,IAAO,CAClD,KAAM,CAAC,GAAI,EAAE,EAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,EAAE,IAAI,MAAM,EAC9C,CAAE,IAAK,EAAG,EAAI,SAAS,GAAI,GAAI,CAAC,EAChC,GAAK,IAAM,GAAG,MACd,MAAQ,KAAK,IAAI,KAAK,IAAI,EAAG,KAAK,KAAK,GAAK,IAAM,GAAG,CAAC,EAAG,CAAC,GAAK,EAAE,MAAQ,EAAE,MAAM,MAAQ,EAAI,CAAC,EAAK,MAAS,MAAQ,IAAO,IAAQ,IACzI,GAAG,UAAY,IACf,GAAG,MAAM,QAAU,0BAA4B,GAAG,CAAC,KAAO,CAAC,EAAI,WAAa,GAAG,CAAC,EAAI,CAAC,EAAI,aAAe,GAAG,IAAI,EAAI,cAAgB,GAAG,CAAC,EAAI,iBAAmB,GAAK,kGAAoG,GAAG,CAAC,EAAI,OAAS,GAAG,CAAC,EAAI,sDAAwD,GAAG,EAAI,GAAI,EAAI,OAAS,GAAG,EAAI,IAAK,EAAI,QAAU,GAAG,EAAI,GAAI,EAAI,kBAAoB,EAAE,KAAO,IACtb,GAAG,cAAc,UAAU,EAAE,MAAM,QAAW,MAAyB,UAAU,EAA3B,eACtD,CACE,MAAM,IAAM,QAAS,GAAK,IAAM,GAAK,IAAM,EAAI,EAAI,KAAO,GAAI,EACxD,GAAK,GAAK,IAAM,EAAI,KAAO,IAAM,GAAK,IAAO,OAAS,GAAK,IAAM,EAAI,IAAO,MAC5E,EAAI,MAAM,IAAK,GAAK,KAAO,CAAC,EAClC,QAAQ,GAAG,cAAc,UAAU,EAAG,EAAI,QAAQ,GAAG,MAAM,GAAG,EAAG,KAAM,EAAG,UAAW,GAAO,CAAC,EAAI,EAAE,CAAG,CACxG,GAAG,cAAc,WAAW,EAAE,MAAM,QAAU,yCAA2C,EAAE,QAAU,MAAQ,UAAY,YAAc,YAAc,QAAQ,EAAE,EAAE,QAAQ,CAAC,EAAI,mDAC9K,GAAG,cAAc,WAAW,EAAE,MAAM,QAAU,kDAAoD,MAAQ,UAAY,WAAa,IAAM,MAAM,QAAQ,CAAC,EAAI,6BAC9J,CAAC,EAED,MAAM,QAAU,0BAA4B,GAAG,CAAC,EAAI,CAAC,EAAI,WAAa,GAAG,CAAC,EAAI,CAAC,EAAI,aAAe,GAAG,CAAC,EAAI,cAAgB,GAAG,CAAC,EAAI,2CAA6C,GAAG,CAAC,EAAI,OACvL,EAAE,IAAI,MAAM,QAAU,QAAU,uCAAyC,GAAG,EAAI,CAAC,EAAI,eAAiB,GAAG,CAAC,EAAI,aAAe,EAAE,IAAI,MAAQ,EAAI,CAAC,EAAI,0BACpJ,MAAM,OAAS,MAAQ,EAAI,EAO3B,GANA,MAAM,iBAAiB,WAAW,EAAE,QAAS,IAAO,CAClD,MAAM,EAAI,CAAC,GAAG,QAAQ,GAChB,GAAK,EAAE,MAAQ,CAAC,MAAQ,EAAE,KAAK,CAAC,EAAK,MAAS,MAAQ,UAAY,UAAc,MAAQ,UAAY,UACpG,GAAK,EAAE,MAAQ,CAAC,MAAQ,EAAE,KAAK,CAAC,EAAK,MAAS,MAAQ,IAAI,UAAW,UAAW,CAAC,EAAI,UAAc,MAAQ,IAAI,UAAW,UAAW,CAAC,EAAI,UAChJ,GAAG,MAAM,QAAU,0BAA4B,GAAG,EAAE,EAAI,EAAI,EAAE,EAAI,WAAa,GAAG,CAAC,EAAI,CAAC,EAAI,aAAe,GAAG,EAAI,EAAI,CAAC,EAAI,cAAgB,GAAG,KAAK,IAAI,GAAK,KAAK,CAAC,EAAI,yBAA2B,EAAI,mBAAqB,GAAG,EAAI,EAAI,CAAC,EAAI,yHAA2H,GAAK,QAAU,GAAK,mBAAqB,KAAO,EAAI,EAC3Z,CAAC,EACG,KACF,EAAE,IAAI,MAAM,QAAU,QAAU,uCAAyC,GAAG,EAAI,EAAI,GAAI,EAAI,eAAiB,GAAG,CAAC,EAAI,cAAgB,MAAQ,UAAY,WAAa,gBAAkB,MAAQ,8DAAgE,+DAAiE,yBAA2B,GAAG,EAAI,GAAI,EAAI,0BACtW,CACL,MAAM,GAAK,EAAI,EAAI,EACnB,EAAE,IAAI,MAAM,QAAU,0BAA4B,GAAG,CAAC,GAAK,CAAC,EAAI,WAAa,GAAG,CAAC,GAAK,CAAC,EAAI,aAAe,GAAG,EAAE,EAAI,cAAgB,GAAG,EAAE,EAAI,qBAAuB,GAAG,KAAK,IAAI,GAAK,EAAI,CAAC,CAAC,EAAI,2CAA6C,GAAG,EAAI,EAAI,KAAK,EAAI,oBAAsB,MAAQ,4EAA8E,IAAI,UAAW,UAAW,CAAC,EAAI,SAAW,IAAI,UAAW,UAAW,CAAC,EAAI,SAAW,6EAA+E,yBAA2B,GAAG,EAAI,GAAI,EAAI,mBAAqB,MAAQ,IAAO,IAAO,IAEnmB,MAAM,QAAU,KAAK,IAAI,EAAG,CAAC,GAAG,IAAI,EAAI,GAElC,KAAO,wIADC,MAAQ,EAAI,GACoI,IAC9J,EAAE,GAAG,MAAM,QAAU,KAAO,8BAAgC,GAAG,CAAC,EAAI,CAAC,EAAI,WAAa,GAAG,CAAC,EAAI,CAAC,EAAI,aAAe,GAAG,CAAC,EAAI,cAAgB,GAAG,CAAC,EAAI,qBAAuB,GAAG,CAAC,EAAI,2CAA6C,GAAG,GAAK,CAAC,EAAI,qDAC3O,QAAQ,EAAE,GAAG,cAAc,UAAU,EAAG,QAAQ,GAAG,MAAM,IAAK,EAAG,EAAG,MAAM,CAAC,EAC3E,EAAE,GAAG,cAAc,WAAW,EAAE,MAAM,QAAU,6EAA+E,IAAO,IAAO,SAAS,QAAQ,CAAC,EAAI,0BACnK,MAAM,GAAM,GAAM,KAAK,IAAI,IAAM,KAAK,IAAI,KAAM,IAAO,IAAO,KAAK,IAAI,EAAG,KAAK,KAAK,EAAI,GAAG,MAAQ,IAAM,GAAG,CAAC,CAAC,CAAC,EAC/G,MAAM,iBAAiB,WAAW,EAAE,QAAS,IAAO,CAClD,MAAM,EAAI,CAAC,GAAG,QAAQ,GACtB,GAAG,MAAM,QAAU,KAAO,mBAAqB,GAAG,CAAC,EAAI,OAAS,GAAG,GAAK,CAAC,EAAI,uCAAyC,GAAG,CAAC,GAAK,CAAC,EAAI,WAAa,GAAG,CAAC,GAAK,CAAC,EAAI,aAAe,GAAG,EAAE,EAAI,cAAgB,GAAG,EAAE,EAAI,yBAA2B,EAAI,mBAAqB,GAAG,EAAI,CAAC,EAAI,0BAA4B,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAI,GACjU,CAAC,EACD,MAAM,iBAAiB,WAAW,EAAE,QAAS,IAAO,CAClD,KAAM,CAAC,GAAI,EAAE,EAAI,GAAG,QAAQ,GAAG,MAAM,GAAG,EAAE,IAAI,MAAM,EAC9C,CAAE,IAAK,EAAG,EAAI,SAAS,GAAI,GAAI,CAAC,EACtC,GAAG,MAAM,QAAU,KAAO,mBAAqB,GAAG,CAAC,EAAI,OAAS,GAAG,GAAK,CAAC,EAAI,uCAAyC,GAAG,CAAC,KAAO,CAAC,EAAI,WAAa,GAAG,CAAC,GAAK,CAAC,EAAI,aAAe,GAAG,IAAI,EAAI,cAAgB,GAAG,EAAE,EAAI,iBAAmB,GAAK,sBAAwB,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAI,GAC3R,CAAC,EACD,EAAE,IAAI,MAAM,QAAU,8GAAgH,QAAU,OAAS,0CAA4C,yBAA2B,GAAG,EAAE,EAAI,EAAI,GAAK,IAAM,MAAQ,EAAI,IAAO,EAAE,EAAI,OAEjR,MAAM,GAAK,EAAI,IAAY,GAAK,EAAI,IACpC,EAAE,MAAM,MAAM,QAAU,0HAA4H,GAAG,CAAC,EAAI,EAAI,KAAK,EAAI,mBAAqB,OAAS,CAAC,WAAa,EAAI,GAAK,gBAAkB,OAAS,CAAC,WAAa,gDAAkD,2DAA6D,uBACtX,EAAE,GAAG,MAAM,QAAU,0BAA4B,GAAG,CAAC,GAAK,CAAC,EAAI,WAAa,GAAG,CAAC,EAAE,EAAI,aAAe,GAAG,EAAE,EAAI,cAAgB,GAAG,EAAE,EAAI,4CAA8C,KAAO,sBAAyB,CAAC,GAAG,MAAS,gBAAmB,CAAC,GAAG,KAAQ,OACjQ,EAAE,OAAO,MAAM,QAAU,mCAAqC,MAAQ,GAAK,WAAa,GAAG,EAAI,IAAI,EAAI,cAAgB,GAAG,EAAI,IAAI,EAAI,qBAAuB,GAAG,EAAI,IAAI,EAAI,mDAAqD,EAAI,GAAG,QAAQ,CAAC,EAAI,iBAAmB,WAAa,GAAK,IAAM,iBAAmB,WAAa,EAAI,GAAK,wKACzU,QAAQ,EAAE,OAAO,cAAc,UAAU,EAAG,QAAQ,GAAG,MAAM,OAAQ,EAAI,KAAM,EAAI,KAAM,MAAM,CAAC,CAClG,CAEA,GADA,EAAE,MAAM,MAAM,QAAU,kCAAoC,MAAQ,mCAAqC,EAAI,GAAG,QAAQ,CAAC,EAAI,iFAAmF,WAAa,IAAO,GAAK,qBAAuB,WAAa,IAAO,GAAK,IACrR,QAAS,CACX,MAAM,IAAM,UAAY,WAAa,IAAO,GAAK,IACjD,EAAE,MAAM,MAAM,WAAa,OAAQ,EAAE,MAAM,MAAM,UAAY,WAAa,WAAa,IAAO,GAAK,WAAW,QAAQ,CAAC,EAAI,IACtH,EAAE,MAAM,YACb,EAAE,MAAM,MAAM,WAAa,sDAAuD,EAAE,MAAM,MAAM,UAAY,GAC9G,CACA,EAAE,IAAI,MAAM,QAAU,6GAA+G,KAAO,sBAAwB,GAAG,KAAO,gBAAkB,GAAG,MAAQ,OAE3M,MAAM,MAAM,WAAa,MAAQ,uCAAyC,IAAI,UAAW,UAAW,CAAC,EAAI,QAAU,IAAI,UAAW,UAAW,CAAC,EAAI,SAAW,IAAI,UAAW,UAAW,CAAC,EAAI,SAAW,8EACvM,EAAE,MAAM,MAAM,QAAU,mCAAqC,MAAQ,EAAI,EAAI,GAAG,QAAQ,CAAC,EAAI,WAAa,GAAG,EAAI,GAAG,EAAI,cAAgB,GAAG,EAAI,GAAI,EAAI,kGAAoG,MAAQ,oBAAsB,IAAO,GAAM,GAAG,QAAQ,CAAC,EAAI,wBAA0B,wCAA0C,+BAAiC,QAAU,8GAAgH,IAAM,IAC3hB,EAAE,KAAK,MAAM,QAAU,0BAA4B,GAAG,CAAC,EAAI,GAAG,EAAI,WAAa,GAAG,CAAC,EAAI,EAAI,EAAI,IAAO,MAAQ,GAAI,EAAI,aAAe,GAAG,EAAI,GAAG,EAAI,cAAgB,GAAG,EAAI,GAAG,EAAI,wGAA0G,IAAO,GAAM,GAAG,QAAQ,CAAC,EAAI,uBAAyB,IAAO,IAAO,GAAG,QAAQ,CAAC,EAAI,uCAAyC,OAAS,CAAC,WAAa,EAAI,GAAK,gBAAkB,OAAS,CAAC,WAAa,gDAAkD,2DACnhB,MAAM,QAAU,MAAQ,WAAa,WACrC,EAAE,KAAK,UAAY,WAAa,QAChC,EAAE,KAAK,YAAc,EAAE,KAAO,SAAQ,EAAE,MAAQ,EAAE,GAAK,IAAM,EAAE,GAAK,IAChE,EAAE,WACJ,EAAE,SAAS,UAAY,YAAc,QACrC,EAAE,SAAS,cAAc,kBAAkB,EAAE,aAAa,eAAgB,MAAQ,QAAU,MAAM,EAClG,EAAE,SAAS,cAAc,oBAAoB,EAAE,aAAa,eAAgB,MAAQ,OAAS,OAAO,GAEtG,EAAE,IAAI,UAAY,UAAY,SAAW,MAAQ,YAAc,IAC/D,EAAE,IAAI,MAAM,MAAQ,MAAQ,UAAY,UACxC,EAAE,QAAQ,OAAS,CAAC,MAChB,SAAS,gBAAkB,EAAE,OAAM,EAAE,KAAK,MAAQ,GAAG,MACzD,EAAE,UAAU,YAAc,GAAG,KAAO,GAAK,cAAiB,GAAG,KAAO,GAAK,eAAiB,gBAC1F,EAAE,SAAS,aAAe,MAAM,KAAM,GAAM,EAAE,KAAO,GAAG,IAAI,GAAK,MAAM,CAAC,GAAG,IAC7E,EAGM,QAAU,KAAK,cAAc,iBAAiB,EACpD,QAAQ,MAAM,YAAY,SAAU,MAAQ,KAAK,IAAI,KAAK,OAAQ,CAAC,EAAI,MAAM,MAAM,EACnF,MAAM,YAAc,IAAM,CACpB,OAAO,QAAQ,MAAM,YAAY,SAAU,GAAG,KAAO,MAAM,OAAS,KAAK,IAAI,KAAK,OAAQ,CAAC,CAAC,EAChG,MAAM,EAAI,GAAG,EACP,GAAK,GACX,QAAQ,WAAa,OAAS,CAAC,GAAG,KAAO,MAAM,OAAQ,GAAM,KAAK,SAAS,EAAE,EAAE,CAAC,EAAI,OAAO,IAAK,GAAM,CACpG,MAAM,MAAQ,EAAE,KAAO,OAAS,EAAE,KAAO,SAEnC,GAAM,WAAW,GAAG,MAAM,EAAE,EAAE,CAAC,GAAK,aAAa,GAAG,MAAM,EAAE,EAAE,CAAC,EAAK,IAAM,GAC1E,EAAI,QAAQ,GAAG,MAAM,EAAE,EAAE,EAAG,GAAI,MAAQ,GAAK,GAAK,KAAM,MAAQ,OAAS,EAAE,IAAK,EAAI,EAC1F,MAAO,wCAA0C,SAAS,SAAS,EAAE,EAAE,EAAI,YAAc,IAAM,WAAW,EAAE,EAAE,EAAI,6BAA+B,EAAE,GAAK,oBAAsB,EAAE,KAAO,GAAG,MAAQ,gCAAkC,MAAQ,cAAgB,EAAE,KAAO,KAAO,EAAI,sCAAwC,EAAE,MAAQ,kBACpU,CAAC,EAAE,KAAK,EAAE,CACZ,EAKM,MAAQ,MAAM,QAAQ,EAAE,MAAM,EAAI,EAAE,OAAS,CAAC,GAAG,OAAQ,GAAM,GAAK,EAAE,KAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAC/F,OAAS,KAAK,cAAc,gBAAgB,EAC5C,MAAQ,CAAC,EAAG,IAAM,GAAK,EAAE,QAAQ,GAAG,EAAI,EAAI,IAAM,KAAO,SAAW,EAC1E,IAAI,QAAU,GAAQ,SAAW,CAAC,EAAO,QAAU,KAAU,MAAQ,EACrE,MAAM,SAAY,OAAU,CAC1B,MAAM,IAAM,KAAK,OAAQ,GAAM,EAAE,EAAE,SAAS,GAAG,KAAK,CAAC,EAC/C,IAAM,KAAK,OAAQ,GAAM,EAAE,EAAE,SAAS,KAAK,CAAC,EAE5C,IAAM,CAAC,EAAG,IAAM,EAAE,OAAQ,GAAM,CAAC,CAAC,EAAE,MAAQ,CAAC,EAC7C,MAAS,GAAM,EAAE,OAAQ,GAAM,CAAC,EAAE,KAAO,EAAE,GAAG,EAC9C,QAAW,GAAM,EAAE,OAAQ,GAAM,EAAE,KAAO,CAAC,EAAE,GAAG,EAEtD,OADa,MAAQ,IAAI,IAAK,EAAI,EAAE,OAAO,IAAI,IAAK,EAAK,EAAG,IAAI,IAAK,EAAI,EAAG,IAAI,IAAK,EAAK,CAAC,EAAI,MAAM,GAAG,EAAE,OAAO,MAAM,GAAG,EAAG,QAAQ,GAAG,EAAG,QAAQ,GAAG,CAAC,GAC3I,MAAM,EAAG,CAAC,CACxB,EACM,WAAa,IAAM,CACvB,GAAI,CAAC,OAAQ,OACb,MAAM,MAAQ,CAAC,MAAQ,GAAG,QAAU,QAC9B,IAAM,GAAG,OAAS,MAAQ,KAAO,MACvC,GAAI,MAAQ,QAEZ,IADA,QAAU,IAAK,SAAW,SAAS,KAAK,EACpC,CAAC,SAAS,OAAQ,CAAE,OAAO,OAAS,GAAM,OAAO,UAAY,GAAI,MAAQ,CAC7E,OAAO,OAAS,GAChB,OAAO,UAAY,sFAAwF,IAAI,IAAI,GAAG,KAAK,EAAI,UAAY,MAAQ,QAAU,GAAG,EAAI,uCACnI,SAAS,IAAI,CAAC,EAAG,IAAM,oEAAsE,EAAI,iBAC9H,IAAI,UAAY,EAAI,GAAK,OAAS,SAAS,OAAS,KAAO,EAAE,GAAG,EAAI,eAAiB,IAAI,MAAM,EAAE,IAAK,GAAG,CAAC,EAAI,6EAA6E,EAAE,KAAK,EAAE,EAAI,SAC9M,EACM,SAAY,GAAM,CACtB,MAAM,EAAI,SAAS,OAAQ,GAAI,CAAC,GAAK,CAAC,QAAS,OAC/C,OAAS,EAAI,GAAK,EAAG,MAAM,EAAI,SAAS,KAAK,EACvC,IAAM,QAAQ,cAAc,mBAAmB,EACrD,IAAI,IAAM,MAAM,EAAE,IAAK,IAAI,EAAG,IAAI,IAAM,EAAE,IAC1C,QAAQ,cAAc,eAAe,EAAE,YAAc,EAAE,IACvD,QAAQ,cAAc,aAAa,EAAE,YAAc,EAAI,EAAK,MAAQ,EAAK,MAAQ,EAAI,GACrF,QAAQ,iBAAiB,eAAe,EAAE,QAAS,GAAM,CAAE,EAAE,OAAS,EAAI,CAAG,CAAC,CAChF,EACM,SAAY,GAAM,CACtB,GAAI,CAAC,QAAS,CACZ,QAAU,SAAS,cAAc,QAAQ,EACzC,QAAQ,UAAY,eACpB,QAAQ,aAAa,aAAc,6BAA6B,EAChE,QAAQ,UAAY,kfAIpB,KAAK,YAAY,OAAO,EACxB,QAAQ,iBAAiB,QAAU,GAAM,CAAM,EAAE,SAAW,SAAS,QAAQ,MAAM,CAAG,CAAC,EACvF,QAAQ,iBAAiB,UAAY,GAAM,CACrC,EAAE,MAAQ,cAAgB,EAAE,eAAe,EAAG,EAAE,gBAAgB,EAAG,SAAS,MAAQ,CAAC,GAChF,EAAE,MAAQ,cAAe,EAAE,eAAe,EAAG,EAAE,gBAAgB,EAAG,SAAS,MAAQ,CAAC,EAC/F,CAAC,EACD,IAAI,GAAK,KACT,QAAQ,iBAAiB,aAAe,GAAM,CAAE,GAAK,EAAE,QAAQ,CAAC,EAAE,OAAS,EAAG,CAAE,QAAS,EAAK,CAAC,EAC/F,QAAQ,iBAAiB,WAAa,GAAM,CAAE,GAAI,KAAO,KAAM,OAAQ,MAAM,GAAK,EAAE,eAAe,CAAC,EAAE,QAAU,GAAI,GAAK,KAAU,KAAK,IAAI,EAAE,EAAI,IAAI,SAAS,OAAS,GAAK,EAAI,EAAI,GAAG,CAAG,CAAC,EAC5L,QAAQ,iBAAiB,QAAS,IAAM,CAAE,MAAM,EAAI,QAAU,OAAO,cAAc,6BAA+B,MAAQ,IAAI,EAAO,GAAG,EAAE,MAAM,CAAE,cAAe,EAAK,CAAC,CAAG,CAAC,CAC7K,CACA,SAAS,CAAC,EACL,QAAQ,OAAY,QAAQ,UAAW,QAAQ,UAAU,EAAQ,QAAQ,aAAa,OAAQ,EAAE,GACrG,QAAQ,cAAc,aAAa,EAAE,MAAM,CAAE,cAAe,EAAK,CAAC,CACpE,EAGM,SAAY,GAAM,CACtB,MAAM,GAAK,GAAK,IAAI,MAAM,yDAAyD,EACnF,GAAI,CAAC,EAAG,MAAO,GACf,MAAM,EAAI,CAAC,EAAE,CAAC,EAAG,EAAI,CAAC,EAAE,CAAC,EAAG,EAAI,EAAE,CAAC,EAAE,SAAW,EAAI,KAAO,EAAE,CAAC,EAAI,EAAE,CAAC,EACrE,OAAI,GAAK,GAAK,GAAK,IAAM,GAAK,GAAK,GAAK,IAAM,IAAM,EAAU,6BAA+B,OAAO,EAAI,CAAC,EAAI,IAAM,EAAI,KAAO,EAAI,kBAAoB,EAAI,IAAM,OAAO,EAAI,CAAC,EAAI,IAAM,EAAI,4DACtL,GAAK,GAAK,GAAK,IAAM,GAAK,GAAW,wBAA0B,OAAO,EAAI,CAAC,EAAI,IAAM,EAAI,KAAO,EAAI,IACpG,GAAK,GAAK,GAAK,IAAM,GAAK,GAAW,wBAA0B,EAAI,IAAM,OAAO,EAAI,CAAC,EAAI,IAAM,EAAI,IAChG,eAAiB,EAAE,CAAC,EAAI,2CACjC,EACM,UAAa,GAAM,CAAE,MAAM,GAAK,MAAM,EAAE,IAAI,GAAK,MAAM,QAAe,EAAI,EAAE,MAAQ,GAAI,OAAO,GAAG,KAAO,YAAc,EAAE,YAAY,EAAK,GAAG,KAAO,YAAc,EAAE,YAAY,EAAI,CAAI,EACxL,UAAY,IAAM,CAEtB,MAAM,EAAI,GADA,GAAG,EACI,EACjB,OAAO,MAAM,IAAK,GAAM,CACtB,MAAM,EAAI,GAAG,MAAM,EAAE,EAAE,EACvB,IAAI,KAAO,aACP,KAAO,GACX,MAAM,MAAQ,EAAE,OAAS,QAAW,EAAE,OAAS,QAAU,EAAE,EAAE,MAAQ,IAAI,KAAK,EAC9E,GAAI,EAAE,OAAS,SAAW,EAAE,MAAQ,IAAI,KAAK,EAAG,CAC9C,KAAO,SAAM,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,OAAQ,KAAK,EAAI,cAAW,MAAM,EAAE,IAAI,GAAK,MAAM,SAAS,KAAO,KAAO,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,YAAY,EAC/I,WAAW,CAAC,IAAG,KAAO,SAAM,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,OAAQ,KAAK,EAAI,wFACzE,aAAa,CAAC,IAAG,KAAO,SAAM,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,OAAQ,KAAK,EAAI,oHAC/E,MAAM,KAAO,EAAE,KAAO,OAAS,EAAE,KAAO,SACpC,IAAI,EAAG,KAAO,EAAI,GAAK,EAAI,EAAI,KAAM,KAAO,EAAI,EAAI,IAAI,EAAE,QAAU,SAAQ,KAAQ,WAAW,CAAC,GAAK,aAAa,CAAC,EAAK,gEAAkE,uEAChM,MAAW,EAAE,OAAS,UAAW,KAAO,MAAM,EAAE,OAAO,EAAE,KAAO,qBACvD,EAAE,OAAS,UACd,EAAE,QAAU,UAAY,GAAG,OAAQ,KAAO,yCACrC,EAAE,QAAU,UAAY,KAAO,gCAAiC,KAAO,kFACzE,KAAO,iBAAkB,KAAO,kFAEzC,MAAO,CAAE,GAAI,EAAE,GAAI,KAAM,EAAE,KAAM,KAAM,KAAM,EAAE,OAAS,OAAS,SAAS,EAAE,IAAI,EAAI,GAAI,KAAM,KAAM,CACtG,CAAC,CACH,EACM,WAAa,IAAM,CACvB,IAAI,EAAI,EAAG,MAAM,IAAM,KAAK,UAAU,CAAC,GAAG,MAAO,GAAG,KAAM,GAAG,KAAK,CAAC,EACnE,QAAS,EAAI,EAAG,EAAI,IAAI,OAAQ,IAAK,EAAK,EAAI,GAAK,IAAI,WAAW,CAAC,IAAO,EAC1E,MAAO,QAAU,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAG,GAAG,CACzE,EACM,MAAQ,IAAM,CAAE,MAAM,EAAI,YAAY,EAAG,OAAQ,EAAI,EAAE,MAAQ,IAAM,GAAG,QAAU,EAAE,OAAS,EAAE,OAAO,MAAQ,EAAI,EAGlH,QAAU,KAAK,cAAc,iBAAiB,EAC9C,QAAU,KAAK,cAAc,iBAAiB,EAC9C,MAAQ,KAAK,cAAc,mBAAmB,EAC9C,MAAQ,KAAK,cAAc,eAAe,EAC1C,QAAW,KAAQ,CAAE,GAAI,CAAC,IAAK,CAAE,MAAM,OAAS,GAAM,MAAM,YAAc,GAAI,MAAQ,CAAE,MAAM,YAAc,IAAK,MAAM,OAAS,EAAO,EACvI,QAAU,IAAO,GAAG,QAAU,GAAG,KAAQ,GAAG,MAAQ,EACpD,QAAW,GAAM,CACrB,MAAM,EAAI,GAAG,EAAS,EAAI,WAAW,GAAG,MAAO,GAAG,IAAI,EACtD,GAAI,IAAM,EAAG,OAAO,GAAG,EAAE,KAAO,SAAQ,EAAE,MAAQ,EAAE,GAAK,IAAM,EAAE,GAAK,KAAO,EAAI,SAAQ,MAAM,EAAE,KAAK,EAAI,IAC1G,GAAI,IAAM,EAAG,OAAO,OAAU,QAAQ,MAAM,MAAM,GAAK,QAAQ,OAAO,MAAQ,KAAK,EAAI,gBAAmB,GAAG,KAAO,wBAAuB,KAAS,QAAQ,GAAG,MAAM,GAAK,QAAQ,OAAO,KACzL,GAAI,IAAM,EAAG,OAAO,UAAU,EAAE,OAAQ,GAAM,CAAC,EAAE,KAAK,EAAE,OAAS,QAAU,OAAS,CAAC,GAAG,KAAO,KAAK,OAAS,MAAM,QAAU,qBAC7H,GAAI,IAAM,EAAG,CAAE,MAAM,KAAO,CAAC,EAAG,OAAK,MAAM,KAAK,KAAK,GAAG,MAAQ,UAAY,kBAAqB,GAAG,MAAQ,GAAG,MAAM,MAAM,QAAK,EAAE,CAAC,EAAI,gBAAiB,EAAO,GAAG,OAAS,IAAM,KAAK,KAAK,kBAAkB,EAAO,GAAG,QAAQ,KAAK,KAAK,SAAS,EAAU,KAAK,KAAK,QAAK,GAAK,oBAAsB,CACtS,OAAO,GAAG,SAAW,uBAAyB,wCAChD,EAGM,SAAW,IAAO,OAAS,CAAC,GAAG,KAAO,MAAM,OAAQ,GAAM,KAAK,SAAS,EAAE,EAAE,CAAC,EAAI,MACjF,aAAgB,IAAO,CAC3B,MAAM,EAAI,MAAM,GAAG,IAAI,GAAK,MAAM,QAC5B,OAAS,SAAS,EAAE,OAAQ,GAAM,EAAE,KAAO,GAAG,MAAQ,EAAE,SAAS,GAAK,EAAE,KAAO,UAAY,EAAE,UAAY,EAAE,KAAO,QAAU,GAAG,MAAM,EAAE,EAAE,EAAE,OAAS,SAAW,GAAG,MAAM,EAAE,EAAE,EAAE,MAAQ,IAAI,KAAK,CAAC,EACtM,GAAI,CAAC,OAAO,OAAQ,MAAO,GAC3B,MAAM,KAAO,OAAO,OAAQ,GAAM,GAAG,MAAM,EAAE,EAAE,EAAE,OAAS,GAAG,IAAI,EACjE,GAAI,CAAC,KAAK,OAAQ,MAAO,yPAA2P,IAAI,EAAE,IAAI,EAAI,oCAClS,MAAM,MAAQ,KAAK,IAAK,GAAM,EAAE,KAAK,YAAY,CAAC,EAC5C,KAAO,MAAM,OAAS,EAAI,MAAM,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,EAAI,QAAU,MAAM,MAAM,OAAS,CAAC,EAAI,MAAM,CAAC,EAC3G,MAAO,oFAAsF,IAAI,EAAE,IAAI,EAAI,yEAA2E,IAAI,IAAI,EAAI,cACpM,EACA,IAAI,SAAW,CAAC,EAEhB,MAAM,UAAY,IAAM,CACtB,MAAM,IAAO,IAAO,SAAS,SAAS,EAAE,GAAK,CAAC,KAAK,SAAS,EAAE,EACxD,MAAQ,CAAC,IAAI,MAAM,GAAK,YAAa,IAAI,OAAO,GAAK,IAAI,MAAM,IAAM,YAAa,IAAI,KAAK,GAAK,UAAW,IAAI,QAAQ,GAAK,gBAAgB,EAAE,OAAO,OAAO,EAC5J,EAAI,MAAM,OAAS,EAAI,MAAM,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,EAAI,QAAU,MAAM,MAAM,OAAS,CAAC,EAAK,MAAM,CAAC,GAAK,aAC9G,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,EAAI,EAAE,MAAM,CAAC,CAC9C,EAEM,SAAW,IAAM,mKACrB,CAAC,CAAC,KAAM,KAAM,yBAAyB,EAAG,CAAC,MAAO,MAAO,+BAA+B,CAAC,EAAE,IAAI,CAAC,CAAC,EAAG,GAAI,GAAG,IAAM,iEAAmE,EAAI,oBAAsB,GAAG,OAAS,GAAK,QAAU,GAAK,aAAe,IAAM,kBAAkB,EAAE,KAAK,EAAE,EAAI,UACjS,GAAG,OAAS,MAAQ,oKAAiK,IAAM,SAExL,IAAM,CAAC,GAAI,MAAQ,yLAA2L,GAAK,oBAAsB,IAAI,GAAG,EAAI,mBAEpP,UAAY,IAAM,CAAC,CAAC,GAAG,QAAU,SAAS,KAAM,GAAM,GAAG,MAAM,CAAC,EAAE,OAAS,SAAW,GAAG,MAAM,CAAC,EAAE,QAAU,QAAQ,EACpH,WAAa,IAAM,GAAG,QAAU,SAAW,GAAG,QAAU,aACxD,YAAc,IAAM,UAAU,GAAK,WAAW,EAC9C,YAAc,IAAO,GAAG,QAAU,aAAe,kHAAoH,gGACrK,KAAQ,GAAM,CAClB,MAAM,GAAK,GAAG,MAAM,GAAG,IAAI,EACrB,QAAU,MAAM,KAAM,GAAM,EAAE,KAAO,GAAG,IAAI,GAAK,MAAM,CAAC,EACxD,EAAI,GAAG,EACb,GAAI,IAAM,EAAG,CACX,MAAM,UAAY,QAAQ,IAAK,GAAM,wEAA0E,EAAI,oBAAsB,IAAM,GAAG,OAAS,qDAAuD,MAAM,CAAC,GAAK,MAAM,OAAO,KAAO,MAAQ,IAAM,aAAe,gDAAkD,IAAM,UAAY,IAAI,CAAC,GAAK,QAAQ,OAAS,EAAI,GAAK,UAAY,WAAW,EAAE,KAAK,EAAE,EACjZ,KAAQ,MAAQ,OAAS,IAAI,YAAc,IAAI,KAAQ,GAAK,8CAAgD,IAAI,EAAE,IAAI,EAAI,iEAAmE,IAAI,EAAE,IAAI,EAAI,iBAC3M,QAAU,IAAI,GAAG,KAAK,EAAI,qCAAuC,IAAI,GAAG,KAAK,EAAI,mBAAqB,IAAI,GAAG,KAAK,EAAE,SAAS,IAAK,IAAO,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,IAAI,GAAK,CAAC,GAAG,IAAI,EAAE,KAAK,OAAO,EAAI,2CAA6C,GAAG,WAAa,GAAG,MAAS,GAAG,QAAU,aAAe,kGAAoG,sEAAyE,IAAM,OAAS,GAC1e,MAAQ,MAAM,OAAQ,GAAM,CAAC,IAAI,GAAG,KAAK,GAAK,WAAW,GAAG,MAAO,EAAE,EAAE,CAAC,EAAE,IAAK,GAAM,CAAE,MAAM,EAAI,WAAW,GAAG,MAAO,EAAE,EAAE,EAAS,IAAM,CAAC,GAAK,EAAE,YAAc,GAAO,MAAO,iEAAmE,EAAE,GAAK,oBAAsB,EAAE,KAAO,EAAE,IAAM,KAAO,IAAM,YAAc,IAAM,OAAS,IAAI,EAAE,IAAI,EAAI,cAAgB,EAAE,GAAK,IAAI,EAAE,EAAE,EAAI,SAAQ,KAAO,EAAI,MAAM,EAAE,KAAK,EAAI,iBAAmB,kBAAoB,CAAC,EAAE,KAAK,EAAE,EACpd,MAAO,yBAA2B,UAAY,KAAO,+BAAiC,MAAQ,SAAW,OAC3G,CACA,GAAI,IAAM,EAAG,CACX,GAAI,MAAO,CACT,MAAM,GAAK,WAAW,GAAG,MAAO,GAAG,IAAI,EAAS,GAAK,aAAa,GAAG,MAAO,GAAG,IAAI,EAC7E,KAAO,IAAM,GAAK,GAAG,MAAQ,GAAG,MAAQ,EACxC,UAAY,GAAM,KAAO,EAAI,8DAAgE,MAAM,GAAG,KAAK,EAAI,kBAAoB,MAAM,IAAI,EAAI,SAAW,2BAA8B,GAChM,MAAO,gDAAkD,KAAK,QAAQ,MAAM,MAAM,GAAK,QAAQ,OAAO,IAAI,EAAI,SAC1G,GAAG,KAED,8EAAgF,IAAI,SAAS,EAAI,0FADjG,sBAAwB,UAAU,EAAI,yBAA2B,IAAI,SAAS,EAAI,qGAC4G,QACtM,CACA,MAAO,2BAA6B,OAAO,KAAK,OAAO,EAAE,OAAQ,IAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAK,IAAO,CACvG,MAAM,EAAI,QAAQ,EAAE,EAAS,GAAK,MAAM,EAAE,IAAI,GAAK,MAAM,QACzD,MAAO,qEAAuE,GAAK,oBAAsB,KAAO,GAAG,QAAU,mDAAqD,GAAG,IAAM,gBAAkB,GAAG,GAAK,mBAAqB,GAAG,GAAK,qBAAuB,GAAG,GAAK,eAAiB,GAAG,EAAI,IAAM,GAAM,GAAG,EAAI,IAAM,GAAK,IAAO,OAAS,IAAI,EAAE,MAAM,EAAI,qCAAuC,IAAI,EAAE,IAAI,EAAI,qCAAuC,IAAI,EAAE,IAAI,EAAI,kBACnd,CAAC,EAAE,KAAK,EAAE,EAAI,yLACX,GAAG,SAAW,OAAS,uDAAyD,IAAI,KAAK,cAAc,gBAAgB,EAAI,KAAK,cAAc,gBAAgB,EAAE,aAAa,MAAM,EAAI,gCAAgC,EAAI,2EAA6E,GAC7S,CACA,GAAI,IAAM,EAAG,CAEX,IAAIC,GAAI,mEADI,OAAS,CAAC,GAAG,KAAO,MAAM,OAAQ,GAAM,KAAK,SAAS,EAAE,EAAE,CAAC,EAAI,OACK,IAAK,GAAM,uCAAyC,WAAW,EAAE,EAAE,EAAI,6BAA+B,EAAE,GAAK,oBAAsB,EAAE,KAAO,GAAG,MAAQ,KAAO,EAAE,MAAQ,WAAW,EAAE,KAAK,EAAE,EAAI,SAEhR,GAAI,UAAU,EAAG,OAAOA,GAAI,mKAO5B,GANI,YAAY,EAAGA,IAAK,uBAAyB,OAC7C,0OACA,0MAA4M,MAAQ,GAAK,oJAAsJ,OAC9WA,IAAK,2EAA6E,CAAC,CAAC,OAAQ,OAAO,EAAG,CAAC,UAAW,SAAS,EAAG,CAAC,QAAS,OAAO,EAAG,CAAC,OAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,EAAG,EAAE,IAAM,CAAE,MAAM,IAAO,IAAM,SAAW,CAAC,QAAQ,OAAW,QAAQ,GAAK,IAAM,QAAU,MAAO,iEAAmE,EAAI,oBAAsB,GAAG,OAAS,GAAK,KAAO,IAAM,wBAA0B,IAAM,IAAM,GAAK,WAAa,CAAC,EAAE,KAAK,EAAE,EAAI,SAChd,QAAQ,EAAGA,IAAK,8DAAgE,GAAG,KAAO,iDAAmD,6DAA+D,OACvM,CAAC,QAAQ,OAAS,CAAC,YAAY,IAAGA,IAAK,uBAAyB,GAAG,OAAS,QAAU,oCAAsC,KAAO,eAAiB,6BAA+B,wCAA0C,mDAAqD,QACvR,GAAG,OAAS,OAAQ,CACtB,MAAM,QAAU,GAAG,MAAQ,IAAI,KAAK,EAAI,GAAG,KAAK,KAAK,EAAE,MAAM;AAAA,CAAI,EAAE,CAAC,GAAK,QAAQ,GAAG,MAAM,GAAK,QAAQ,OAAO,OAC9G,GAAI,YAAY,GAAK,OAAQ,CAC3B,MAAM,GAAK,YAAY,GAAG,IAAI,EAC9BA,IAAK,kUACgM,IAAI,GAAG,CAAC,EAAI,8PAEX,IAAI,GAAG,CAAC,EAAI,wTACyF,IAAI,GAAG,KAAK,EAAI,uIAE7T,MAAW,YAAY,EACrBA,IAAK,yWACkL,IAAI,SAAS,GAAG,IAAI,CAAC,EAAI,8IACxE,QAAQ,EAEhJA,IAAK,4EAA2E,QAAQ,KAAO,qLAAuL,IAAI,GAAG,MAAQ,EAAE,EAAI,+MACnG,QAAQ,EAE7M,YAAY,IAAGA,IAAK,4FAA8F,OAAO,KAAK,KAAK,EAAE,IAAK,IAAO,CAAE,MAAM,EAAI,MAAM,EAAE,EAAG,MAAO,iEAAmE,GAAK,oBAAsB,GAAG,OAAS,IAAM,iEAAmE,EAAE,IAAM,gBAAkB,EAAE,GAAK,mBAAqB,EAAE,GAAK,qBAAuB,EAAE,GAAK,cAAgB,KAAK,MAAM,GAAK,EAAE,CAAC,EAAI,OAAS,IAAI,MAAM,EAAI,mCAAqC,EAAE,KAAO,kBAAoB,CAAC,EAAE,KAAK,EAAE,EAAI,WAAa,MAAM,GAAG,IAAI,GAAK,CAAC,GAAG,KAAO,sBAAwB,MAAM,GAAG,IAAI,EAAE,KAAO,OAAS,KAAO,GAAG,QAAU,cAAgB,GAAG,OAAS,OAAS,GAAG,OAAS,SAAW,uBAAyB,GAAG,OAAS,QAAU,wCAA0C,8EAAgF,OAAS,IAAM,aAAa,EAAE,EAAI,UAC58B,MAAM,GAAK,OAAO,EAAE,EACf,YAAY,IAAGA,IAAK,4JAA8J,SAAS,IAAK,GAAM,oEAAsE,EAAI,oBAAsB,KAAO,GAAK,iBAAmB,IAAI,CAAC,EAAE,KAAO,YAAc,IAAI,CAAC,EAAE,KAAO,4BAA8B,KAAK,IAAI,CAAC,EAAE,CAAC,EAAI,gBAAkB,KAAK,IAAI,CAAC,EAAE,CAAC,EAAI,oBAAoB,EAAE,KAAK,EAAE,EAAI,mCACtc,IAAI,EAAE,EAAE,KAAO,2DAA6D,QAAQ,KAAK,YAAY,EAAI,2BAC5I,SAAW,GAAG,OAAS,UAAW,CAChC,MAAM,GAAK,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAM,IAAM,QAAQ,EAAI,SAAW,MAAM,GAAG,OAAO,EAAE,EAChFA,IAAK,yEAA2E,QAAQ,IAAI,CAAC,CAAC,EAAG,EAAE,IAAM,mEAAqE,EAAI,oBAAsB,IAAM,IAAM,KAAO,GAAK,UAAY,SAAS,OAAQ,GAAM,EAAE,IAAM,CAAC,EAAE,OAAS,kBAAkB,EAAE,KAAK,EAAE,EAAI,SACtTA,IAAK,wBAA0B,SAAS,OAAQ,GAAM,EAAE,IAAM,EAAE,EAAE,IAAK,GAAM,mEAAqE,EAAE,GAAK,oBAAsB,GAAG,UAAY,EAAE,IAAM,qCAAuC,QAAQ,OAAO,EAAE,GAAI,EAAI,EAAG,OAAO,EAAI,eAAiB,EAAE,KAAO,eAAe,EAAE,KAAK,EAAE,EAAI,kFAC5U,MAAW,GAAG,OAAS,QACrBA,IAAK,kEAAoE,GAAG,OAAS,6BAA+B,0BAA4B,6EAC7I,GAAG,UAAY,oCAAsC,IAAI,GAAG,SAAS,EAAI,OAAS,IACnF,yCAA2C,GAAG,QAAU,UAAY,GAAG,OAAS,0FAA4F,KAAO,GAAG,QAAU,GAAG,QAAU,SAAW,oFAAsF,IAAM,UACnT,MAAQ,GAAG,OAAS,QAAU,SAAS,EAAI,IAC5C,iEAAmE,GAAG,OAAS,WAAa,IAAM,kGACzE,GAAG,QAAU,aAAe,0FAA4F,GAAG,QAAU,QAAU,mCAAqC,KAAO,IAAM,0CAA4C,mHAAqH,gFAE7XA,IAAK,uGAEP,OAAOA,EACT,CACA,GAAI,IAAM,EAAG,CACX,IAAIA,GAAI,GAER,OAAK,OAAMA,IAAK,mIAAqI,CAAC,CAAC,MAAO,UAAW,2BAA2B,EAAG,CAAC,UAAW,kBAAmB,gDAAgD,CAAC,EAAE,IAAI,CAAC,CAAC,GAAI,GAAI,GAAG,IAAM,gEAAkE,GAAK,oBAAsB,GAAG,MAAQ,IAAM,QAAU,GAAK,aAAe,IAAM,kBAAkB,EAAE,KAAK,EAAE,EAAI,gBAC7d,CAAC,MAAQ,GAAG,MAAQ,UAAWA,IAAK,sGAC9B,OAAMA,IAAK,iGAAmG,SAAS,eAAe,QAAQ,EAAI,4DAA8D,6BAA+B,IAAI,EAAE,WAAa,4CAA4C,EAAI,2GAA6G,wGAA0G,OAAO,IAAK,GAAM,kBAAoB,IAAI,CAAC,EAAI,KAAO,IAAM,GAAG,MAAQ,YAAc,IAAM,IAAM,IAAI,CAAC,EAAI,WAAW,EAAE,KAAK,EAAE,EAAI,mBACrpBA,IAAK,0FAA4F,KAAO,OAAS,UAAY,+JACpC,GAAG,OAAS,IAAQ,yGACrB,GAAG,OAAS,IAAS,kGACzG,GAAG,OAAS,KAAMA,IAAK,kMAA+L,IAAI,aAAc,6FAA8E,EAAI,mDAC7Q,SAAW,sEAAwE,IAAI,GAAG,OAAO,EAAI,qEAAuE,CAAC,GAAG,GAAG,OAAO,EAAE,OAAS,aAAe,SAAW,iBAC5Q,EAAE,SAAQA,IAAK,iEAAmE,GAAG,OAAS,WAAa,IAAM,4CAA8C,MAAM,EAAE,OAAO,KAAK,EAAI,0IAC3LA,IAAK,+RAAiS,IAAI,GAAG,UAAU,EAAI,oBACpTA,EACT,CAEA,IAAI,EAAI,yBADK,UAAU,EACiB,IAAK,GAAM,wDAA0D,EAAE,KAAO,0CAA4C,IAAI,EAAE,IAAI,EAAI,WAAa,EAAE,KAAO,6BAA+B,IAAI,EAAE,IAAI,EAAI,UAAY,KAAO,EAAE,KAAO,6BAA+B,IAAI,EAAE,IAAI,EAAI,UAAY,IAAM,eAAe,EAAE,KAAK,EAAE,GACnW,KAAO,IAAM,GAAG,MAAQ,UAAY,qJAAuJ,KAAO,GAAG,MAAQ,UAAY,GAAK,oGAAsG,IAAI,GAAG,MAAQ,GAAG,MAAM,MAAM,QAAK,EAAE,CAAC,EAAI,gBAAgB,EAAI,WAAa,GAAG,MAAQ,GAAK,8DAAgE,kBAAoB,SACtf,OAAI,YAAY,IAAG,GAAK,8EAAgF,GAAG,QAAU,WAAa,IAAM,UAAY,YAAY,EAAI,sFACpK,GAAK,+EAAiF,GAAG,SAAW,WAAa,IAAM,0DAA6D,KAAO,QAAU,WAAa,6DAClN,GAAK,GAAG,MAAQ,0CAA4C,WAAW,EAAI,UAAY,GAAG,KAAO,2DAA6D,GAAG,OAAS,2EAA8E,IAAM,cAAgB,IAAI,GAAG,IAAI,EAAI,0BAA4B,mEAAsE,OAC3X,iHACG,CACT,EACM,YAAc,IAAM,CACxB,MAAM,IAAM,QAAQ,EACpB,QAAQ,UAAY,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAAE,IAAK,GACvC,mCAAqC,EAAI,KAAO,CAAC,GAAG,SAAW,IAAM,IAAM,UAAY,IAAM,wEACpB,EAAI,qBAAuB,MAAQ,GAAK,gCAAkC,EAAI,kEAAoE,YAAY,EAAI,CAAC,EAAI,+CAAiD,EAAI,KAAO,IAAI,QAAQ,CAAC,CAAC,EAAI,6CAA+C,KAAO,oBACnX,MAAQ,EAAI,8BAAgC,KAAK,CAAC,EAAI,SAAW,IAAM,QAAQ,EAAE,KAAK,EAAE,EAC3F,QAAQ,UAAY,oCAAsC,IAAM,0CAA4C,YAAY,IAAM,CAAC,EAAI,qDAAuD,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAAE,IAAK,GAAM,iBAAmB,IAAM,IAAM,QAAW,EAAI,IAAM,UAAY,IAAO,WAAW,EAAE,KAAK,EAAE,EAAI,SACpT,WAAW,CACb,EACM,UAAY,IAAM,CACtB,MAAM,EAAI,MAAM,MAAM,CAAC,EACjB,UAAY,GAAG,MAAQ,oBAAuB,GAAG,SAAW,aAAe,oBAC3E,IAAM,QAAQ,EACd,OAAS,IAAM,EAAI,OAAU,GAAG,MAAQ,oBAAuB,GAAG,SAAW,aAAe,sBAClG,MAAM,UAAY,oDAAsD,KAAO,cAAgB,IAAM,0BAA4B,UAAY,gBAAkB,EAAI,oGAC3E,MAAQ,EAAI,YAAc,IAAM,qDAAuD,MAAQ,GAAK,CAAC,GAAG,SAAW,UAAY,KAAO,KAAO,cAAgB,IAAM,2BAA6B,OAAS,gBAAkB,EAAI,wBACzT,EAEM,WAAa,IAAM,CACvB,MAAM,GAAK,GAAG,MAAM,GAAG,IAAI,EACrB,MAAQ,QAAQ,cAAc,YAAY,EAChD,GAAI,OAAS,GAAG,OAAS,OAAQ,CACf,MAAM,EAAI,GAAhB,GAAG,EAAoB,EAAS,GAAK,GAAG,OAAS,OAAS,GAAG,OAAS,SAC1E,EAAI,IAAI,GAAI,GAAK,EAAI,GAAK,EAAI,EAAI,KAAM,GAAK,EAAI,EAAI,IAAI,EAC/D,MAAM,UAAY,gBAAkB,EAAE,MACtC,MAAM,IAAM,QAAU,YAAY,EAAI,YAAY,GAAG,IAAI,EAAI,KAC7D,MAAM,cAAc,gBAAgB,EAAE,YAAe,YAAY,GAAK,OAAO,GAAK,CAAC,SAAS,GAAG,IAAI,EAAK,uBAA0B,KAAO,EAAE,IAAI,GAAK,IAAI,GAAK,IAAI,OAAU,qCAAwC,GAAG,MAAQ,IAAI,KAAK,EAAyB,EAAE,QAAU,OAAS,mBAAsB,EAAE,QAAU,QAAU,6BAAgC,YAAY,EAAI,2CAA6C,0DAAnL,kBAC3O,MAAM,IAAM,QAAQ,cAAc,cAAc,EAAO,MAAK,IAAI,YAAc,EAAE,OAChF,MAAM,QAAU,GAAG,MAAQ,IAAI,KAAK,EAAI,GAAG,KAAK,KAAK,EAAE,MAAM;AAAA,CAAI,EAAE,CAAC,GAAK,QAAQ,GAAG,MAAM,GAAK,QAAQ,OAAO,OAC9G,QAAQ,iBAAiB,mBAAmB,EAAE,QAAS,IAAO,CAAE,GAAG,YAAc,MAAQ,CAAC,CAC5F,CACA,MAAM,GAAK,QAAQ,cAAc,gBAAgB,EAAO,KAAI,GAAG,OAAS,CAAC,aAAa,GAAG,IAAI,GAC7F,QAAQ,iBAAiB,2BAA2B,EAAE,QAAS,IAAO,CAAE,MAAM,EAAI,WAAW,GAAG,QAAQ,CAAC,EAAG,GAAG,UAAU,OAAO,YAAa,CAAC,CAAC,CAAC,EAAG,GAAG,UAAU,OAAO,gBAAiB,EAAE,QAAQ,KAAK,EAAI,CAAC,CAAG,CAAC,EAChN,CAAC,EAAG,EAAG,EAAG,EAAG,CAAC,EAAE,QAAS,GAAM,CAAE,MAAM,GAAK,QAAQ,cAAc,cAAgB,EAAI,IAAI,EAAO,KAAI,GAAG,YAAc,QAAQ,CAAC,EAAG,CAAC,CACrI,EACM,KAAQ,KAAQ,CAAE,YAAY,EAAG,YAAY,EAAG,WAAW,EAAO,IAAK,YAAY,EAAQ,WAAW,EAAG,UAAU,EAAG,SAAS,CAAG,EAGlI,QAAW,QAAW,CAAE,IAAI,EAAI,OAAQ,KAAO,EAAI,GAAG,MAAQ,KAAK,GAAK,IAAK,KAAO,EAAI,GAAG,MAAQ,MAAM,GAAK,IAAK,OAAO,CAAG,EAC7H,OAAU,IAAO,CACrB,MAAM,EAAI,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,EAAQ,IAC/C,GAAG,KAAO,GACN,KAAO,OAAS,GAAG,KAAO,IAAK,GAAG,MAAQ,QAAQ,GAAG,EAAG,GAAG,MAAQ,OAC9D,KAAO,UAAY,GAAG,MAAQ,MAAO,GAAG,KAAO,SAAS,IAC1D,GAAG,KAAO,SAAS,EAAG,GAAG,MAAQ,QAAQ,EAAE,OAAS,EAAE,GAC/D,EACM,QAAU,IAAM,CAAE,GAAG,SAAW,GAAO,GAAG,MAAQ,GAAO,GAAG,MAAQ,GAAO,QAAQ,EAAE,CAAG,EACxF,QAAW,OAAU,CAAE,GAAG,MAAM,GAAG,IAAI,EAAI,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,GAAG,IAAI,EAAG,KAAK,EAAG,QAAQ,CAAG,EACnG,KAAQ,KAAQ,CAAE,MAAM,IAAM,CAAC,QAAS,QAAS,OAAQ,MAAM,EAAS,EAAI,IAAI,QAAQ,GAAG,IAAI,EAAG,OAAO,EAAI,EAAI,QAAU,KAAK,GAAK,IAAM,EAAI,EAAI,IAAM,CAAC,CAAC,CAAG,EAC9J,cAAgB,IAAM,CAAE,GAAI,CAAC,GAAG,QAAS,CAAE,MAAM,EAAI,QAAQ,sBAAsB,EAAE,IAAM,OAAO,QAAU,GAAQ,OAAO,QAAU,GAAG,OAAO,SAAS,CAAE,IAAK,EAAG,SAAU,QAAS,CAAC,CAAG,CAAE,EAEjM,KAAK,iBAAiB,QAAU,GAAM,CACpC,MAAM,EAAI,EAAE,OAAO,QAAQ,YAAY,EACvC,GAAI,CAAC,GAAK,CAAC,KAAK,SAAS,CAAC,EAAG,OAC7B,MAAM,EAAI,EAAE,QAAQ,IAAW,EAAI,EAAE,QAAQ,EAC7C,GAAI,EAAE,aAAa,eAAe,IAAM,OACxC,OAAQ,EAAG,CACT,IAAK,OAAQ,GAAG,KAAO,GAAG,OAAS,CAAC,EAAI,EAAI,CAAC,EAAG,KAAK,EAAI,EAAG,OAC5D,IAAK,QAAS,CAAE,MAAM,IAAM,GAAG,MAAqB,GAAd,GAAG,MAAQ,EAAO,CAAC,WAAW,GAAG,MAAO,GAAG,IAAI,EAAG,CAAE,MAAM,GAAK,MAAM,KAAM,GAAM,WAAW,GAAG,MAAO,EAAE,EAAE,CAAC,EAAO,KAAI,GAAG,KAAO,GAAG,GAAI,CAC3K,GAAG,SAAW,GAAQ,IAAI,CAAC,GAAK,MAAQ,IAAK,SAAS,EAAG,GAAG,SAAW,GAAS,MAAQ,IAAG,GAAG,QAAU,IAAO,QAAQ,EAAG,KAAK,EAAI,EAAG,MAAQ,CAChJ,IAAK,OAAQ,GAAG,KAAO,EAAG,QAAQ,EAAG,KAAK,EAAI,EAAG,OACjD,IAAK,MAAO,GAAG,IAAM,IAAM,UAAY,UAAY,MAAO,GAAG,MAAQ,GAAO,QAAQ,EAAE,EAAG,KAAK,EAAI,EAAG,SAAS,EAAG,OACjH,IAAK,OAAQ,GAAG,KAAO,GAAM,GAAG,KAAO,EAAG,QAAQ,EAAG,KAAK,EAAI,EAAG,OACjE,IAAK,OAAQ,GAAG,KAAO,GAAO,SAAS,QAAS,IAAO,CAAO,KAAK,SAAS,EAAE,IAAG,GAAG,MAAM,EAAE,EAAI,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,EAAE,EAAG,CAAE,KAAM,MAAO,CAAC,EAAG,CAAC,EAAQ,KAAK,SAAS,GAAG,IAAI,IAAG,GAAG,KAAO,KAAK,CAAC,GAAG,QAAQ,EAAG,KAAK,EAAI,EAAG,OAC9N,IAAK,SAAU,GAAG,OAAS,EAAG,GAAG,MAAQ,YAAY,CAAC,EAAO,OAAO,IAAG,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,OAAQ,KAAM,UAAW,OAAQ,IAAK,CAAC,GAAO,QAAQ,CAAC,EAAE,OAAS,QAAQ,SAAS,QAAQ,CAAC,EAAE,KAAK,GAAK,CAAC,IAAI,GAAG,KAAK,IAAG,GAAG,MAAQ,QAAQ,CAAC,EAAE,OAAW,GAAG,QAAU,cAAc,SAAS,EAAG,GAAG,KAAO,QAAS,GAAG,MAAQ,QAAQ,GAAG,EAAG,GAAG,KAAO,GAAI,QAAQ,EAAG,KAAK,EAAI,EAAG,OACja,IAAK,OAAQ,OAAO,CAAC,EAAO,EAAE,UAAU,SAAS,SAAS,GAAK,GAAG,OAAS,IAAG,GAAG,KAAO,GAAG,KAAK,EAAI,EAAG,OACvG,IAAK,OAAQ,GAAI,OAAO,GAAM,QAAQ,GAAK,IAAM,QAAU,OAAQ,QAAQ,CAAE,KAAM,CAAE,CAAC,EAAG,KAAK,EAAI,EAAG,OACrG,IAAK,OAAQ,GAAI,OAAO,EAAG,OAAQ,GAAG,SAAW,GAAI,QAAQ,CAAE,KAAM,CAAE,CAAC,EAAG,KAAK,EAAI,EAAG,OACvF,IAAK,WAAY,CACf,MAAM,EAAI,GAAG,MAAM,GAAG,IAAI,EAAE,KAC5B,SAAW,SAAS,OAAQ,IAAO,KAAO,GAAG,MAAQ,GAAG,MAAM,EAAE,EAAE,OAAS,SAAW,GAAG,MAAM,EAAE,EAAE,MAAQ,IAAI,KAAK,GAAK,GAAG,MAAM,EAAE,EAAE,OAAS,CAAC,EAChJ,SAAS,QAAS,IAAO,CAAO,SAAS,GAAK,KAAO,SAAa,UAAY,KAAO,QAAgB,GAAG,MAAM,EAAE,EAAI,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,EAAE,EAAG,CAAE,KAAM,CAAE,CAAC,EAAG,CAAC,EACnK,QAAQ,EAAG,KAAK,EAAI,EACpB,WAAW,IAAM,CAAE,SAAW,CAAC,EAAG,QAAQ,iBAAiB,mBAAmB,EAAE,QAAS,GAAM,EAAE,UAAU,OAAO,UAAU,CAAC,CAAG,EAAG,IAAI,EACvI,MACF,CACA,IAAK,SAAU,GAAI,OAAO,EAAG,OAAQ,QAAQ,CAAE,OAAQ,CAAE,CAAC,EAAG,KAAK,EAAI,EAAG,OACzE,IAAK,UAAW,GAAI,OAAO,GAAK,QAAQ,EAAG,OAAQ,QAAQ,CAAE,KAAM,UAAW,QAAS,CAAE,CAAC,EAAG,KAAK,EAAI,EAAG,OACzG,IAAK,WAAY,SAAW,EAAG,KAAK,EAAI,EAAG,OAC3C,IAAK,OAAQ,GAAG,KAAO,IAAM,MAAQ,MAAQ,KAAM,QAAQ,EAAG,KAAK,EAAI,EAAG,OAC1E,IAAK,OAA0E,GAAlE,GAAG,KAAO,IAAM,MAAO,GAAG,MAAQ,GAAO,QAAQ,EAAE,EAAG,KAAK,EAAI,EAAO,GAAG,KAAM,CAAE,MAAM,EAAI,QAAQ,cAAc,SAAS,EAAO,GAAG,EAAE,MAAM,CAAG,CAAE,OAC9J,IAAK,MAAO,CAAE,MAAM,GAAK,CAAC,EAAE,UAAU,SAAS,SAAS,EAAG,KAAK,iBAAiB,iBAAiB,EAAE,QAAS,GAAM,CAAE,EAAE,UAAU,OAAO,SAAS,EAAG,EAAE,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAAG,EAAE,UAAU,OAAO,UAAW,EAAE,EAAG,EAAE,aAAa,gBAAiB,OAAO,EAAE,CAAC,EAAO,IAAI,OAAO,CAAC,EAAG,MAAQ,CAC7S,IAAK,SAAU,GAAI,OAAO,EAAG,OAAQ,QAAQ,CAAE,KAAM,QAAS,MAAO,QAAS,CAAC,EAAG,KAAK,EAAI,EAAG,OAC9F,IAAK,YAAa,GAAI,OAAO,EAAG,OAAQ,QAAQ,CAAE,KAAM,QAAS,MAAO,QAAS,CAAC,EAAG,KAAK,EAAI,EAAG,OACjG,IAAK,MAAO,GAAG,MAAQ,MAAW,GAAG,OAAS,QAAO,GAAG,KAAO,SAAS,GAAG,KAAK,EAAK,EAAG,OACxF,IAAK,QAAS,GAAG,MAAQ,SAAa,GAAG,OAAS,OAAS,GAAG,OAAS,YAAY,GAAG,KAAO,QAAS,GAAG,MAAQ,QAAQ,CAAC,GAAK,GAAG,KAAO,SAAS,EAAG,KAAK,EAAK,EAAG,OAClK,IAAK,QAAS,KAAK,EAAE,EAAG,KAAM,GAAG,QAAkB,GAAG,OAAS,EAApB,EAAqB,EAAG,OACnE,IAAK,QAAS,KAAK,CAAC,EAAG,KAAM,GAAG,QAAkB,GAAG,OAAS,EAApB,EAAqB,EAAG,OAClE,IAAK,OAAQ,SAAS,CAAC,CAAC,EAAG,OAC3B,IAAK,WAAY,SAAS,MAAQ,CAAC,EAAG,OACtC,IAAK,WAAY,SAAS,MAAQ,CAAC,EAAG,OACtC,IAAK,YAAiB,SAAS,QAAQ,MAAM,EAAG,OAChD,IAAK,OAAQ,WAAW,EAAG,OAC3B,IAAK,OAAQ,GAAG,KAAO,KAAK,IAAI,EAAG,QAAQ,EAAI,CAAC,EAAG,KAAK,EAAI,EAAG,cAAc,EAAG,OAChF,IAAK,OAAQ,GAAI,QAAQ,EAAI,EAAG,CAAE,GAAG,KAAO,QAAQ,EAAI,EAAG,KAAK,EAAI,EAAG,cAAc,EAAG,MAAQ,CAAE,IAAI,EAAG,OACzG,IAAK,MAAO,IAAI,EAAG,OACnB,QACF,CACF,CAAC,EACD,KAAK,iBAAiB,QAAU,GAAM,CACpC,MAAM,EAAI,EAAE,OAAc,EAAI,EAAE,SAAW,EAAE,QAAQ,GACrD,GAAK,EACL,IAAI,IAAM,OAAQ,CAAE,GAAI,OAAO,EAAG,OAAQ,QAAQ,CAAE,KAAM,EAAE,MAAM,MAAM,EAAG,GAAG,CAAE,CAAC,EAAG,KAAK,EAAK,EAAG,MAAQ,CACzG,GAAI,IAAM,OAAQ,CAAE,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,SAAS,EAAE,KAAK,EAAG,KAAM,UAAW,OAAQ,IAAK,CAAC,EAAG,QAAQ,EAAG,KAAK,EAAK,EAAG,MAAQ,CAClL,GAAI,IAAM,OAAQ,CAAE,GAAG,KAAO,CAAC,EAAE,MAAO,YAAY,EAAG,MAAQ,CAC/D,GAAI,IAAM,OAAS,IAAM,OAAS,IAAM,MAAO,CAC7C,MAAM,GAAK,YAAY,GAAG,MAAM,MAAM,IAAI,EAC1C,GAAI,IAAM,MAAO,GAAG,MAAQ,EAAE,MAAM,QAAQ,OAAQ,GAAG,EAAE,QAAQ,KAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAG,EAAE,MAAQ,CAAE,MAAM,GAAK,UAAU,EAAE,KAAK,EAAG,GAAG,IAAM,MAAQ,IAAM,GAAG,EAAI,GAAQ,EAAE,QAAU,KAAI,EAAE,MAAQ,GAAI,CACjN,GAAG,MAAM,MAAQ,OAAO,OAAO,CAAC,EAAG,GAAG,MAAM,MAAO,CAAE,KAAM,OAAQ,KAAM,WAAW,EAAE,EAAG,KAAM,UAAW,OAAQ,IAAK,CAAC,EAAG,QAAQ,EAAG,KAAK,EAAK,EAAG,MACrJ,CACA,GAAI,IAAM,WAAa,IAAM,aAAc,CAAoF,GAAlF,GAAG,CAAC,EAAI,IAAM,UAAY,EAAE,MAAM,MAAM,EAAG,QAAQ,EAAI,EAAE,MAAO,GAAG,MAAQ,GAAW,IAAM,UAAW,CAAE,MAAM,EAAI,QAAQ,cAAc,kBAAkB,EAAO,IAAG,EAAE,YAAc,CAAC,GAAG,GAAG,OAAO,EAAE,OAAQ,CAAE,WAAW,EAAG,SAAS,CAAG,EACxR,CAAC,EACD,KAAK,iBAAiB,SAAW,GAAM,CACrC,MAAM,EAAI,EAAE,OAAc,EAAI,EAAE,SAAW,EAAE,QAAQ,GACrD,GAAK,EACL,IAAI,IAAM,QAAS,CAAE,GAAG,MAAQ,EAAE,MAAO,GAAG,MAAQ,GAAO,QAAQ,EAAE,EAAG,KAAK,EAAI,EAAG,MAAQ,CAC5F,GAAI,IAAM,UAAW,CAAE,GAAG,QAAU,EAAE,QAAS,GAAG,MAAQ,GAAO,QAAQ,EAAE,EAAG,KAAK,EAAI,EAAG,MAAQ,CAClG,GAAI,IAAM,SAAU,CAAE,GAAG,OAAS,EAAE,QAAS,GAAG,MAAQ,GAAO,KAAK,EAAI,EAAG,MAAQ,CACnF,GAAI,IAAM,SAAU,CAAE,GAAG,OAAS,EAAE,QAAS,QAAQ,EAAG,KAAK,EAAK,EAAG,MAAQ,CAC7E,GAAI,IAAM,OAAQ,CAAE,QAAQ,CAAE,KAAM,EAAE,OAAQ,CAAC,EAAG,KAAK,EAAK,EAAG,MAAQ,CACvE,GAAI,IAAM,WAAY,CAAE,GAAG,SAAW,EAAE,QAAS,GAAG,MAAQ,GAAO,QAAQ,EAAE,EAAG,KAAK,EAAI,EAAG,MAAQ,CACpG,GAAI,IAAM,OAAQ,CAChB,MAAM,KAAO,EAAE,OAAS,EAAE,MAAM,CAAC,EACjC,GAAI,CAAC,KAAM,OACX,GAAI,CAAC,WAAW,KAAK,KAAK,IAAI,GAAK,CAAC,kBAAkB,KAAK,KAAK,IAAI,EAAG,CAAE,GAAG,UAAY,0DAA2D,KAAK,EAAI,EAAG,MAAQ,CACvK,GAAI,KAAK,KAAO,GAAK,KAAO,KAAM,CAAE,GAAG,UAAY,wDAAyD,KAAK,EAAI,EAAG,MAAQ,CAChI,MAAM,EAAI,IAAI,WACd,EAAE,OAAS,IAAM,CAAE,WAAa,KAAM,GAAG,OAAS,OAAO,EAAE,MAAM,EAAG,GAAG,UAAY,GAAI,QAAQ,CAAE,KAAM,QAAS,MAAO,QAAS,CAAC,EAAG,KAAK,EAAI,CAAG,EAChJ,EAAE,QAAU,IAAM,CAAE,GAAG,UAAY,mDAAoD,KAAK,EAAI,CAAG,EACnG,EAAE,cAAc,IAAI,CACtB,EACF,CAAC,EAGD,IAAI,SAAW,GAAW,IAAM,EAAO,GAAK,EAAO,MAAQ,GAC3D,MAAM,iBAAiB,cAAgB,GAAM,CAC3C,GAAI,IAAE,OAAS,GAAK,EAAE,OAAO,QAAQ,sBAAsB,GAC3D,UAAW,GAAM,MAAQ,GAAO,IAAM,EAAE,QAAS,GAAK,GAAG,MACzD,GAAI,CAAE,MAAM,kBAAkB,EAAE,SAAS,CAAG,MAAc,CAAC,EAC7D,CAAC,EACD,MAAM,iBAAiB,cAAgB,GAAM,CAC3C,GAAI,CAAC,SAAU,OACf,MAAM,GAAK,EAAE,QAAU,IACnB,CAAC,OAAS,KAAK,IAAI,EAAE,EAAI,IAC7B,MAAQ,GAAM,GAAG,MAAQ,GAAK,GAAK,IAAU,GAAG,OAAS,WAAY,GAAG,KAAO,SAAW,YAAY,EACxG,CAAC,EACD,MAAM,QAAU,IAAM,CAGpB,GAFI,CAAC,WACL,SAAW,GACP,CAAC,OAAO,OACZ,GAAI,GAAG,OAAS,MAAO,CAAE,YAAY,EAAG,MAAQ,CAChD,MAAMC,OAAS,CAAC,GAAG,MAAQ,IAAO,KAAO,IAAM,IACzC,KAAO,CAAC,QAAS,QAAS,OAAQ,MAAM,EAAE,IAAK,KAAQ,CAAE,GAAI,EAAG,KAAK,MAAO,CAAE,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,EAAE,OAAU,KAAWA,OAAQ,IAAM,KAAO,IAAM,GAAG,CAAE,EAAE,EAAE,KAAK,CAAC,EAAG,IAAM,EAAE,EAAI,EAAE,CAAC,EAAE,CAAC,EACvM,OAAO,KAAO,KAAK,GAAK,OAAO,EAC/B,KAAK,GAAG,SAAW,GAAG,OAAS,CAAC,CAClC,EACA,MAAM,iBAAiB,YAAa,OAAO,EAC3C,MAAM,iBAAiB,gBAAiB,OAAO,EAG/C,MAAM,WAAa,IAAM,CACvB,IAAI,KAAO,GACX,GAAI,CAAE,KAAO,SAAS,OAAS,SAAS,SAAW,WAAa,KAAK,KAAK,CAAC,CAAG,MAAY,CAAC,CAC3F,GAAG,MAAQ,GAAM,GAAG,KAAO,KAC3B,SAAS,EACL,MAAQ,UAAU,WAAa,UAAU,UAAU,WAAW,UAAU,UAAU,UAAU,IAAI,EAAE,MAAM,IAAM,CAAC,CAAC,EACpH,KAAK,EAAI,CACX,EAMM,GAAK,CAAE,KAAM,uDAAwD,KAAM,sCAAuC,IAAK,UAAW,MAAO,UAAW,MAAO,UAAW,KAAM,oBAAqB,EACjM,QAAW,KAAQ,IAAI,QAAS,IAAO,CAAE,GAAI,CAAC,IAAK,CAAE,GAAG,IAAI,EAAG,MAAQ,CAAE,MAAM,EAAI,IAAI,MAAS,EAAE,YAAc,YAAa,EAAE,OAAS,IAAM,GAAG,CAAC,EAAG,EAAE,QAAU,IAAM,GAAG,IAAI,EAAG,EAAE,IAAM,GAAK,CAAC,EAC/L,SAAW,CAAC,EAAG,IAAM,CAAE,MAAM,EAAI,SAAS,cAAc,QAAQ,EAAG,SAAE,MAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAAG,EAAE,OAAS,KAAK,IAAI,EAAG,KAAK,MAAM,CAAC,CAAC,EAAU,CAAG,EAG1J,KAAO,IAAM,CAAE,GAAI,CAAE,OAAO,IAAI,KAAK,SAAa,MAAY,CAAE,OAAO,IAAM,CAAE,GAAG,EAClF,MAAS,GAAO,IAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC,EAAE,IAAK,GAAM,EAAE,OAAO,EAAI,CAAC,GAAG,CAAC,EACvE,QAAU,CAAC,IAAK,EAAG,KAAO,CAAE,GAAI,CAAC,GAAI,OAAO,IAAI,YAAY,CAAC,EAAE,MAAO,IAAI,EAAI,EAAG,UAAW,MAAM,MAAM,CAAC,EAAG,GAAK,IAAI,YAAY,EAAE,EAAE,MAAQ,GAAI,OAAO,CAAG,EAC3J,OAAS,CAAC,IAAK,EAAG,EAAG,EAAG,KAAO,CAAE,GAAI,CAAC,GAAI,CAAE,IAAI,SAAS,EAAG,EAAG,CAAC,EAAG,MAAQ,CAAE,IAAI,GAAK,EAAG,UAAW,MAAM,MAAM,CAAC,EAAK,IAAI,SAAS,GAAI,GAAI,CAAC,EAAG,IAAM,IAAI,YAAY,EAAE,EAAE,MAAQ,EAAM,EACvL,UAAY,CAAC,IAAK,EAAG,OAAS,CAClC,MAAM,IAAM,CAAC,EACb,cAAO,GAAK,EAAE,EAAE,MAAM;AAAA,CAAI,EAAE,QAAS,MAAS,CAC5C,IAAI,KAAO,GACX,KAAK,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,QAAS,GAAM,CAAE,MAAM,KAAO,KAAO,KAAO,IAAM,EAAI,EAAO,MAAQ,IAAI,YAAY,IAAI,EAAE,MAAQ,MAAQ,IAAI,KAAK,IAAI,EAAG,KAAO,GAAU,KAAO,IAAM,CAAC,EAC5L,IAAI,KAAK,IAAI,CACf,CAAC,EACM,GACT,EACM,UAAY,CAAC,IAAK,EAAG,EAAG,EAAG,EAAG,IAAM,CAAE,IAAI,UAAU,EAAO,IAAI,UAAW,IAAI,UAAU,EAAG,EAAG,EAAG,EAAG,CAAC,EAAQ,IAAI,KAAK,EAAG,EAAG,EAAG,CAAC,CAAG,EAEnI,UAAY,CAAC,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,QAAU,CAChD,MAAM,EAAI,IAAI,GAAI,EAAG,CAAC,EAAS,EAAI,EAAE,EAAS,EAAI,IAAI,OAAO,EAAE,CAAC,EAChE,GAAI,EAAE,KAAM,CACV,MAAM,EAAI,EAAE,KAAM,IAAI,UAAY,MAAO,IAAI,aAAe,aAC5D,EAAE,MAAM,QAAS,GAAM,CACrB,MAAM,IAAM,EAAE,EAAE,GAAK,IAAM,EAAE,EAAE,QAAQ,CAAC,EAAI,MAAQ,EAAE,EAAE,IAExD,GADA,IAAI,KAAO,IACP,CAAC,EAAE,IAAK,CAAE,OAAO,IAAK,EAAE,EAAG,EAAI,EAAE,KAAM,EAAI,EAAE,KAAM,EAAE,GAAK,EAAE,CAAC,EAAG,MAAQ,CAE5E,MAAMC,IAAK,EAAE,GAAK,EAAE,EAAS,GAAK,EAAE,EAAI,QAAS,IAAI,GAAK,EAAI,EAAE,KAChE,IAAI,SAAS,EAAE,IAAI,CAAC,EAAG,GAAI,EAAI,EAAE,IAAI,EAAG,IAAM,IAAI,YAAY,EAAE,IAAI,CAAC,CAAC,EAAE,MAAQA,IAChF,IAAI,KAAO,EAAE,EAAE,GAAK,IAAM,GAAG,QAAQ,CAAC,EAAI,MAAQ,EAAE,EAAE,IAAK,IAAI,SAAS,SAAK,GAAI,EAAI,EAAE,KAAO,OAAS,EAAE,EAAG,IAAM,IAAI,YAAY,QAAG,EAAE,MAAQA,IAC/I,IAAI,KAAO,IAAK,IAAI,SAAS,EAAE,IAAI,CAAC,EAAG,GAAI,EAAI,EAAE,IAAI,CACvD,CAAC,EACD,MACF,CACA,MAAM,KAAO,EAAE,IAAM,IAAO,EAAE,IAAM,IAAM,EAAI,IAAO,EAAI,IAAS,EAAE,IAAM,IAAM,EAAI,IAAO,EAAI,GACzF,KAAO,EAAI,IACX,GAAK,EAAE,GAAU,GAAK,GAAK,EAAE,GAAU,GAAK,EAAE,GAAK,GACnD,MAAQ,EAAE,MAAM,OAAS,EAAE,MAAQ,CAAC,EAAE,EACtC,OAAS,MAAM,OAAS,GACxB,IAAM,EAAE,IAAM,IAAM,EAAI,KAAQ,EAAE,IAAM,IAAM,EAAI,EAAI,KAAO,OAAS,EAAI,MAAQ,EAAI,EAAI,KAAO,QAAU,EACjH,IAAI,KAAO,EAAE,GAAK,IAAM,GAAG,QAAQ,CAAC,EAAI,MAAQ,EAAE,IAAK,IAAI,UAAY,MAAO,IAAI,aAAe,aACjG,MAAM,EAAI,IAAI,YAAY,IAAI,EAAS,IAAM,EAAE,uBAAyB,GAAK,GAAW,KAAO,EAAE,wBAA0B,GAAK,GAChI,MAAM,QAAQ,CAAC,IAAK,IAAM,CACxB,MAAM,EAAI,EAAE,KAAO,YAAc,IAAI,YAAY,EAAK,EAAE,KAAO,YAAc,IAAI,YAAY,EAAI,IAC3F,GAAK,QAAQ,IAAK,EAAG,EAAE,EACvB,GAAK,EAAE,IAAM,IAAM,EAAI,KAAQ,EAAE,IAAM,IAAM,EAAI,EAAI,KAAO,GAAK,GAAK,EAAI,IAAM,EACtF,OAAO,IAAK,EAAG,GAAI,IAAM,EAAI,IAAM,IAAM,IAAM,OAAS,EAAI,IAAK,EAAE,CACrE,CAAC,CACH,EACM,QAAU,CAAC,IAAK,IAAK,MAAO,EAAG,EAAG,EAAG,EAAG,IAAM,CAClD,GAAI,CAAC,IAAK,OACV,MAAM,GAAK,SAAS,EAAG,CAAC,EAAS,EAAI,GAAG,WAAW,IAAI,EACvD,EAAE,UAAU,IAAK,EAAE,EAAG,EAAE,EAAG,EAAE,GAAI,EAAE,EAAE,EACrC,EAAE,yBAA2B,YAAa,EAAE,UAAY,MAAO,EAAE,SAAS,EAAG,EAAG,GAAG,MAAO,GAAG,MAAM,EACnG,IAAI,UAAU,GAAI,EAAG,EAAG,EAAG,CAAC,CAC9B,EAGM,UAAY,CAAC,IAAK,IAAK,KAAM,EAAG,EAAG,EAAG,IAAM,CAChD,MAAM,GAAK,SAAS,EAAG,CAAC,EAAS,EAAI,GAAG,WAAW,IAAI,EACjD,GAAK,GAAG,MAAQ,IAAM,GAAK,GAAG,OAAS,IAAY,EAAI,KAAK,IAAI,GAAK,IAAI,aAAc,GAAK,IAAI,aAAa,EAC7G,GAAK,IAAI,aAAe,EAAG,GAAK,IAAI,cAAgB,EAC1D,EAAE,UAAU,IAAK,GAAG,MAAQ,KAAQ,GAAK,IAAM,EAAG,GAAG,OAAS,KAAQ,GAAK,IAAM,EAAG,GAAI,EAAE,EAC1F,MAAM,GAAK,EAAE,aAAa,EAAG,EAAG,GAAG,MAAO,GAAG,MAAM,EAAS,EAAI,GAAG,KAC7D,EAAI,EAAI,GAAG,OAAS,GAAI,GAAK,IAAO,GAAG,OAAS,IACtD,QAAS,EAAI,EAAG,EAAI,EAAE,OAAQ,GAAK,EAAG,CACpC,GAAI,CAAC,EAAE,EAAI,CAAC,EAAG,SACf,IAAI,GAAK,MAAS,EAAE,CAAC,EAAI,MAAS,EAAE,EAAI,CAAC,EAAI,MAAS,EAAE,EAAI,CAAC,GAAK,IAClE,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI,EAAI,IAAO,EAAI,EAAG,CAAC,EAAG,EAAI,KAAK,IAAI,EAAG,EAAI,EAAE,EAAO,GAAG,SAAQ,EAAI,EAAI,GACnG,EAAE,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,EAAE,EAAI,CAAC,EAAI,KAAK,MAAM,EAAI,GAAG,CACjD,CACA,EAAE,aAAa,GAAI,EAAG,CAAC,EACvB,IAAI,KAAK,EAAG,IAAI,yBAA4B,OAAS,SAAW,OAAS,OAAU,SAAW,WAAY,IAAI,YAAe,OAAS,SAAW,OAAS,MAAS,IAAQ,OAAS,OAAS,GAAM,IACnM,IAAI,UAAU,GAAI,EAAG,EAAG,EAAG,CAAC,EAAG,IAAI,QAAQ,CAC7C,EACM,YAAc,CAAC,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,OAAS,CACpD,MAAM,GAAK,GAAG,MAAM,EAAE,EAAS,EAAI,GAAG,EAAS,MAAQ,EAAE,OAAS,QAC5D,KAAO,KAAO,OAAS,EAAE,MACzB,MAAQ,KAAO,qBAAwB,CAAE,MAAO,UAAW,MAAO,qBAAsB,IAAK,wBAAyB,KAAM,SAAU,EAAG,IAAI,EACnJ,IAAI,KAAK,EAAG,UAAU,IAAK,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,IAAI,KAAK,EACpD,MAAM,IAAM,EAAE,IAAI,IAAI,EAChB,MAAQ,KAAO,EAAI,GAAK,EAAI,EAAI,KAItC,GAHI,IAAK,IAAI,UAAU,IAAK,GAAK,MAAQ,GAAK,EAAG,EAAG,MAAO,CAAC,GAAU,IAAI,UAAY,KAAO,UAAa,CAAE,MAAO,UAAW,MAAO,UAAW,IAAK,UAAW,KAAM,SAAU,EAAG,IAAI,EAAG,IAAI,SAAS,EAAG,EAAG,EAAG,CAAC,IAC7M,OAAS,OAAS,OAAS,UAAU,IAAI,YAAc,OAAS,OAAS,qBAAuB,qBAAsB,IAAI,WAAa,KAAK,IAAI,IAAK,EAAI,IAAK,GACpJ,GAAG,OAAS,QAAW,GAAG,OAAS,QAAU,EAAE,GAAG,MAAQ,IAAI,KAAK,EACtE,CACT,MAAM,GAAK,KAAK,IAAI,GAAI,EAAI,IAAK,EAAG,IAAI,KAAO,OAAS,GAAG,QAAQ,CAAC,EAAI,MAAQ,GAAG,KAAM,IAAI,UAAY,OAAS,MAAQ,qBAAuB,MAAO,IAAI,YAAc,IAAM,IAAI,aAAe,SACnM,MAAM,EAAI,aAAoB,GAAK,GAAK,IAAM,OAAO,IAAK,EAAG,GAAK,EAAI,QAAQ,IAAK,EAAG,EAAE,GAAK,EAAG,EAAI,EAAI,EAAG,EAAE,EAAG,IAAI,YAAc,CACpI,SAAW,GAAG,OAAS,OAAQ,UAAU,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,KAAK,UAC1D,GAAG,OAAS,UAAW,CAC9B,MAAM,IAAM,MAAM,GAAG,OAAO,EAAE,GAC9B,IAAI,EACJ,GAAI,KAAM,CAAE,MAAM,EAAI,OAAO,IAAK,EAAG,CAAC,EAAG,EAAI,CAAE,GAAI,EAAE,GAAI,GAAI,EAAE,GAAI,EAAG,EAAE,GAAI,EAAG,EAAE,EAAG,CAAG,KAClF,CAAE,MAAM,EAAI,MAAQ,IAAW,KAAQ,IAAM,EAAK,EAAI,EAAI,KAAK,IAAK,GAAK,IAAO,GAAG,EAAS,EAAI,OAAO,IAAK,EAAI,EAAI,KAAM,CAAC,EAAG,EAAI,CAAE,GAAI,EAAE,GAAI,GAAI,EAAE,GAAI,EAAG,EAAE,GAAK,KAAM,EAAG,EAAE,EAAG,CAAG,CACxL,QAAQ,IAAK,EAAE,IAAI,GAAG,EAAG,MAAO,EAAG,EAAG,EAAG,EAAG,CAAC,CAC/C,MAAW,GAAG,OAAS,SAAW,GAAG,QAAU,UAAY,EAAE,OAAO,UAAU,IAAK,EAAE,MAAO,KAAM,EAAG,EAAG,EAAG,CAAC,EAC5G,IAAI,QAAQ,EACZ,IAAI,KAAK,EAAG,UAAU,IAAK,EAAI,GAAK,EAAI,GAAK,EAAI,EAAG,EAAI,EAAG,CAAC,EAAG,IAAI,YAAc,GAAG,KAAM,IAAI,UAAY,EAAG,IAAI,OAAO,EAAG,IAAI,QAAQ,CACzI,EACM,WAAa,SAAY,CAC7B,MAAM,EAAI,GAAG,EAAS,IAAM,GAAG,EACzB,KAAO,UAAU,EACjB,GAAK,IAAM,EAAI,GAAI,EAAI,GACvB,MAAQ,MAAM,OAAQ,GAAM,EAAE,KAAO,OAAS,EAAE,KAAO,QAAQ,EAC/D,KAAO,MAAM,OAAQ,GAAM,EAAE,KAAO,OAAS,EAAE,KAAO,QAAQ,EAC9D,IAAM,GAAK,EAAI,EAAI,EAAI,GAAK,EAC5B,GAAK,IAAM,KAAO,KAAO,OAAS,EAAI,EAAI,KAC1C,GAAK,IAAM,EAAI,EAAI,KACnB,IAAM,SAAS,OAAQ,IAAO,GAAG,MAAM,EAAE,EAAE,OAAS,MAAM,EAC1D,KAAO,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,IAAO,GAAG,MAAM,EAAE,EAAE,OAAS,SAAS,EAAE,IAAK,IAAO,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EACnH,MAAQ,CAAC,GAAG,IAAI,IAAI,IAAI,OAAQ,IAAO,GAAG,MAAM,EAAE,EAAE,OAAS,MAAM,EAAE,IAAK,IAAO,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,GAAK,MAAM,OAAO,CAAC,CAAC,EAC5HC,WAAY,IAAI,KAAM,IAAO,GAAG,MAAM,EAAE,EAAE,OAAS,SAAW,GAAG,MAAM,EAAE,EAAE,QAAU,QAAQ,GAAK,GAAG,OAC3G,GAAI,SAAS,OAAS,SAAS,MAAM,KAAM,CAEzC,MAAM,MAAQ,IAAI,OAAQ,IAAO,GAAG,MAAM,EAAE,EAAE,OAAS,MAAM,EAAE,IAAK,IAAO,GAAG,MAAM,EAAE,EAAE,MAAQ,EAAE,EAAE,KAAK,GAAG,GAAK,IAC3G,MAAQ,MAAM,IAAK,GAAM,SAAS,MAAM,KAAK,EAAE,GAAK,SAAW,EAAE,IAAK,KAAK,EAAE,MAAM,IAAM,IAAI,CAAC,EAAE,OAAO,CAAC,YAAc,GAAG,KAAM,YAAc,GAAG,KAAM,YAAc,GAAG,KAAM,YAAc,GAAG,IAAI,EAAE,IAAK,GAAM,SAAS,MAAM,KAAK,CAAC,EAAE,MAAM,IAAM,IAAI,CAAC,CAAC,EAC9P,MAAM,QAAQ,KAAK,CAAC,QAAQ,IAAI,KAAK,EAAG,IAAI,QAAS,GAAM,WAAW,EAAG,GAAI,CAAC,CAAC,CAAC,CAClF,CACA,MAAM,EAAI,EAAE,KAAO,CAAC,EACd,EAAI,CAAE,IAAK,CAAC,EAAG,IAAK,CAAC,EAAG,MAAO,IAAK,EAC1C,MAAM,QAAQ,IAAI,CAChB,QAAQ,EAAE,CAAE,IAAK,YAAa,EAAE,IAAI,KAAK,GAAK,IAAI,KAAK,CAAC,EAAE,KAAM,GAAM,CAAE,EAAE,IAAI,IAAI,KAAK,EAAI,CAAG,CAAC,EAC/F,KAAO,KAAO,QAAQ,EAAE,IAAI,EAAE,KAAM,GAAM,CAAE,EAAE,IAAI,KAAO,CAAG,CAAC,EAC7DA,WAAY,QAAQ,GAAG,MAAM,EAAE,KAAM,GAAM,CAAE,EAAE,MAAQ,CAAG,CAAC,EAAI,IACjE,EAAE,OAAO,KAAK,IAAK,GAAM,QAAQ,OAAO,CAAC,CAAC,EAAE,KAAM,GAAM,CAAE,EAAE,IAAI,CAAC,EAAI,CAAG,CAAC,CAAC,CAAC,CAAC,EAG5E,MAAM,GAAK,SAAS,GAAI,EAAE,EAAE,WAAW,IAAI,EACrC,IAAM,YAAc,GAAG,KAAM,OAAS,GAAI,KAAO,YAAc,GAAG,KAAM,QAAU,GAClF,MAAS,GAAM,CAAE,GAAG,KAAO,IAAK,MAAM,EAAI,UAAU,GAAI,EAAE,KAAK,QAAQ,yCAA0C,gEAAgE,EAAG,EAAE,CAAC,EAAG,GAAG,KAAO,KAAM,MAAM,EAAI,EAAE,KAAO,UAAU,GAAI,EAAE,KAAM,EAAE,CAAC,EAAI,CAAC,EAAG,MAAO,CAAE,EAAG,EAAG,EAAG,EAAE,OAAS,QAAU,EAAE,OAAS,EAAI,EAAE,OAAS,QAAU,EAAG,CAAG,EAC/U,MAAS,IAAO,KAAK,KAAM,GAAM,EAAE,KAAO,EAAE,EAC5C,SAAW,MAAM,IAAK,GAAM,MAAM,OAAO,OAAO,CAAC,EAAG,MAAM,EAAE,EAAE,EAAG,CAAE,EAAG,EAAG,CAAC,CAAC,CAAC,EAC5E,QAAU,KAAK,IAAK,GAAM,MAAM,OAAO,OAAO,CAAC,EAAG,MAAM,EAAE,EAAE,EAAG,CAAE,EAAG,EAAG,CAAC,CAAC,CAAC,EAC1E,QAAU,CAAC,EACb,GAAG,QAAU,EAAE,QAAQ,QAAQ,KAAK,CAAC,kBAAmB,4EAA6E,EAAI,CAAC,EACzI,MAAM,QAAQ,KAAK,CAAC,cAAe,GAAG,MAAQ,UAAY,kCAAoC,iBAAgB,GAAG,MAAQ,GAAG,MAAM,MAAM,QAAK,EAAE,CAAC,EAAI,mBAAmB,CAAC,EACzKA,YAAW,QAAQ,KAAK,CAAC,QAAS,gEAAkE,GAAG,OAAS,2BAA6B,GAAG,CAAC,EACjJA,YAAa,MAAQ,GAAG,MAAM,MAAM,OAAS,SAAS,QAAQ,KAAK,CAAC,oBAAqB,GAAG,OAAS,MAAQ,uDAA0D,+BAAgC,GAAG,OAAS,KAAK,CAAC,EACzN,YAAY,GAAG,QAAQ,KAAK,CAAC,YAAc,GAAG,MAAQ,SAAU,4BAA8B,YAAY,EAAI,GAAG,CAAC,EAClH,GAAG,OAAS,IAAQ,GAAG,QAAQ,KAAK,GAAG,QAAQ,KAAK,CAAC,mBAAoB,GAAG,QAAQ,KAAK,CAAC,CAAC,EAC3F,GAAG,WAAW,KAAK,GAAG,QAAQ,KAAK,CAAC,yBAA0B,GAAG,WAAW,KAAK,CAAC,CAAC,EACnF,KAAK,GAAG,QAAQ,KAAK,CAAC,eAAgB,EAAE,MAAQ,oDAAoD,CAAC,EACzG,MAAM,GAAK,KAAO,EAAI,EAAI,EAAI,GAAK,EAAI,GACjC,GAAK,GAAK,EAAI,GACd,GAAK,YAAc,GAAG,KAAM,MAAQ,GACpC,KAAO,QAAQ,IAAI,CAAC,CAAC,CAAE,IAAK,GAAG,KAAQ,GAAG,KAAO,GAAW,GAAK,UAAU,GAAI,IAAK,IAAM,IAAM,GAAK,EAAE,EAAE,OAAS,OAAS,IAAM,GAAK,GAAK,EAC3I,KAAO,IACP,GAAK,KAAO,GAEZ,GADQ,GAAK,GAAK,GAAK,GAAK,KAAK,IAAI,GAAG,SAAS,IAAK,GAAM,EAAE,CAAC,CAAC,EACnD,GACb,OAAS,KAAK,OAAS,GAAK,GAAK,GAAK,GAAK,KAAK,IAAI,GAAG,QAAQ,IAAK,GAAM,EAAE,CAAC,CAAC,EAAI,GAClF,OAAS,GAAK,KAAK,OAAO,CAAC,EAAG,IAAM,EAAI,EAAI,GAAI,CAAC,EACjD,GAAK,KAAK,KAAK,KAAK,IAAI,OAAQ,MAAM,EAAI,GAAG,EAE7C,GAAK,SAAS,GAAI,EAAE,EAAS,IAAM,GAAG,WAAW,IAAI,EAC3D,IAAI,UAAY,GAAG,MAAO,IAAI,SAAS,EAAG,EAAG,GAAI,EAAE,EACnD,MAAM,QAAU,CAAC,EAAG,EAAGC,GAAG,IAAK,OAAS,CAAE,MAAM,GAAK,MAAQ,GAAI,IAAI,KAAO,OAAS,GAAK,MAAQ,GAAG,KAAM,IAAI,UAAY,KAAO,GAAG,MAAO,IAAI,aAAe,aAAc,OAAO,IAAK,EAAE,YAAY,EAAG,EAAGA,GAAG,GAAK,GAAI,CAAG,EAEtN,UAAY,KAAK,GAAK,OAAS,MAAM,GAAK,MAAM,GAAG,MAAS,IAAI,GAAG,KAAK,EAAI,IAAI,GAAG,KAAK,EAAE,MAAQ,EAAE,MAC1G,QAAQ,oCAAkC,EAAG,EAAE,EAC/C,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,IAAK,IAAI,SAAS,WAAa,cAAe,EAAG,GAAG,EACzG,MAAM,KAAO,CAAC,IAAI,KAAM,EAAE,MAAQ,EAAE,GAAK,IAAM,EAAE,GAAK,GAAG,EACpD,MAAM,KAAK,KAAK,GAAG,MAAQ,UAAY,kBAAqB,GAAG,MAAQ,UAAY,GAAG,MAAM,MAAM,QAAK,EAAE,CAAC,EAAI,SAAU,EAC7H,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,IAAK,IAAI,SAAS,KAAK,KAAK,UAAO,EAAG,EAAG,GAAG,EACjG,MAAM,KAAO,WAAW,EACxB,IAAI,KAAO,GACX,GAAI,CAAE,KAAO,IAAI,KAAK,EAAE,eAAe,QAAS,CAAE,MAAO,QAAS,IAAK,UAAW,KAAM,UAAW,KAAM,UAAW,OAAQ,UAAW,aAAc,OAAQ,CAAC,CAAG,MAAY,CAAE,KAAO,IAAI,KAAK,EAAE,aAAa,CAAG,CACjN,IAAI,UAAY,QAChB,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,MAAO,CAAE,MAAM,EAAI,cAAqC,IAAI,UAAY,OAAQ,OAAO,IAAK,EAAG,GAAK,EAAI,QAAQ,IAAK,EAAG,GAAE,EAAI,IAAI,GAAI,GAAE,CAAG,CAChM,IAAI,UAAY,QAChB,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,IAAK,IAAI,SAAS,KAAM,GAAK,EAAG,GAAG,EACxF,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,MAAO,IAAI,SAAS,uCAAsC,KAAM,GAAK,EAAG,GAAG,EAChI,IAAI,UAAY,OAChB,IAAI,UAAY,GAAG,KAAM,IAAI,SAAS,EAAG,KAAO,GAAI,GAAK,EAAI,EAAG,CAAC,EAEjE,MAAM,QAAU,CAAC,EAAG,EAAGA,KAAM,CAC3B,IAAI,aAAe,aAAc,IAAI,KAAO,IAAK,IAAI,UAAY,GAAG,IACpE,EAAE,EAAE,QAAQ,CAAC,EAAG,IAAM,IAAI,SAAS,EAAG,EAAGA,GAAI,EAAI,MAAM,CAAC,EACpD,EAAE,EAAE,SAAU,IAAI,KAAO,KAAM,IAAI,UAAY,GAAG,MAAO,EAAE,EAAE,QAAQ,CAAC,EAAG,IAAM,IAAI,SAAS,EAAG,EAAGA,GAAI,EAAE,EAAE,OAAS,OAAS,EAAI,EAAI,OAAO,CAAC,EAClJ,EACA,MAAM,QAAQ,CAAC,EAAG,IAAM,CACtB,MAAM,EAAI,EAAI,GAAK,GAAK,GACxB,QAAQ,EAAE,KAAM,EAAG,EAAE,EACrB,YAAY,IAAK,EAAG,EAAE,GAAI,EAAG,GAAK,GAAI,GAAI,GAAI,EAAK,EACnD,QAAQ,SAAS,CAAC,EAAG,EAAG,GAAK,GAAK,GAAK,EAAE,CAC3C,CAAC,EAED,KAAK,QAAQ,CAAC,EAAG,IAAM,CACrB,MAAM,EAAI,EAAI,GAAK,GAAK,GACxB,QAAQ,EAAE,KAAM,EAAG,EAAE,EACrB,YAAY,IAAK,EAAG,EAAE,GAAI,EAAG,GAAK,GAAI,GAAI,GAAI,EAAI,EAClD,QAAQ,QAAQ,CAAC,EAAG,EAAG,GAAK,GAAK,GAAK,EAAE,CAC1C,CAAC,EAED,IAAI,EAAI,GACR,eAAQ,QAAQ,CAAC,CAAC,EAAG,IAAK,GAAG,EAAG,IAAM,CACpC,IAAI,KAAO,GAAI,MAAM,GAAK,UAAU,IAAK,IAAK,IAAM,IAAM,GAAK,EAAE,EAC7D,KACF,IAAI,YAAc,GAAG,IAAK,IAAI,UAAY,EAAG,IAAI,WAAW,GAAK,EAAG,EAAI,GAAI,GAAK,EAAG,KAAK,CAAC,EAAI,CAAC,EAC/F,QAAQ,EAAG,GAAK,GAAI,EAAI,EAAG,GAAG,GAAG,EACjC,IAAI,KAAO,GAAI,IAAI,UAAY,GAAG,IAAK,GAAG,QAAQ,CAAC,EAAG,IAAM,IAAI,SAAS,EAAG,GAAK,GAAI,EAAI,GAAK,EAAI,KAAK,CAAC,IAExG,QAAQ,EAAG,GAAI,CAAC,EAChB,IAAI,KAAO,GAAI,IAAI,UAAY,GAAG,IAAK,GAAG,QAAQ,CAAC,EAAG,IAAM,IAAI,SAAS,EAAG,GAAI,EAAI,GAAK,EAAI,KAAK,CAAC,GAErG,GAAK,KAAK,CAAC,EAAI,EACjB,CAAC,EAED,IAAI,UAAY,GAAG,KAAM,IAAI,SAAS,EAAG,GAAK,GAAI,GAAK,EAAI,EAAG,CAAC,EAC/D,IAAI,KAAO,YAAc,GAAG,KAAM,IAAI,UAAY,GAAG,MACrD,IAAI,SAAS,sIAAuI,EAAG,GAAK,EAAE,EACvJ,IAAI,QAAS,IAAO,CAAE,GAAI,CAAE,GAAG,OAAQ,GAAM,GAAG,CAAC,EAAG,aAAc,GAAI,CAAG,MAAY,CAAE,GAAG,IAAI,CAAG,CAAE,CAAC,CAC7G,EACA,KAAK,QAAU,WAGf,MAAM,SAAW,IAAM,CACrB,MAAM,KAAO,UAAU,EACvB,GAAI,OAAQ,CAAE,MAAM,GAAK,YAAY,GAAG,MAAM,MAAM,IAAI,EAAG,GAAI,CAAC,GAAG,GAAK,CAAC,GAAG,GAAK,CAAC,GAAG,MAAO,MAAO,4DAA8D,CACjK,GAAI,CAAC,KAAK,KAAM,GAAM,CAAC,EAAE,KAAK,EAAG,MAAO,4DACxC,MAAM,OAAS,KAAK,KAAM,GAAM,GAAG,MAAM,EAAE,EAAE,EAAE,OAAS,SAAW,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,QAAU,UAAY,GAAG,OAAO,EACpH,GAAI,OAAQ,MAAO,OAAS,OAAO,KAAK,YAAY,EAAI,mGACxD,GAAI,OAAO,GAAK,CAAC,SAAS,GAAG,MAAM,MAAM,IAAI,EAAG,MAAO,uDACvD,GAAI,MAAO,CACT,MAAM,IAAM,QAAQ,MAAM,MAAM,GAAK,CAAC,GAAG,OAAS,CAAC,EAC7C,KAAO,SAAS,KAAM,IAAO,EAAE,SAAS,GAAK,KAAO,UAAY,EAAE,UAAY,KAAO,QAAU,GAAG,EAAE,GAAK,GAAG,EAAE,EAAE,OAAS,QAAU,GAAG,MAAM,EAAE,EAAE,OAAS,QAAU,OAAO,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,IAAM,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,EACxO,GAAI,KAAM,MAAO,QAAU,MAAM,KAAM,GAAM,EAAE,KAAO,IAAI,GAAK,CAAE,KAAM,IAAK,GAAG,KAAK,YAAY,EAAI,uDACtG,CACA,MAAM,GAAK,YAAY,EACvB,GAAI,GAAG,OAAQ,CACb,GAAG,WAAa,GAChB,MAAM,GAAK,GAAG,IAAK,KAAQ,MAAM,KAAM,GAAM,EAAE,KAAO,EAAE,GAAK,CAAE,KAAM,EAAG,GAAG,KAAK,YAAY,CAAC,EAE7F,MAAO,QADM,GAAG,OAAS,EAAI,GAAG,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,EAAI,QAAU,GAAG,GAAG,OAAS,CAAC,EAAI,GAAG,CAAC,IACpE,GAAG,OAAS,EAAI,cAAgB,cAAgB,6FAAqF,GAAG,OAAS,EAAI,YAAc,aAAe,GAC5M,CACA,MAAM,KAAO,KAAK,KAAM,GAAM,EAAE,MAAQ,GAAG,MAAM,EAAE,EAAE,EAAE,OAAS,MAAM,EACtE,OAAI,KAAa,oBAAsB,KAAK,KAAK,YAAY,EAAI,iFAC7D,CAAC,MAAQ,GAAG,MAAQ,WAAa,CAAC,GAAG,MAAc,4BACnD,GAAG,OAAS,KAAa,qDACzB,GAAG,OAAS,IAAQ,CAAC,GAAG,QAAQ,KAAK,EAAU,uDAC/C,YAAY,GAAK,CAAC,GAAG,QAAgB,oDAAsD,GAAG,MAAQ,wCACrG,YAAY,EACV,GADoB,kEAE7B,EACM,IAAM,IAAM,CAChB,GAAI,KAAM,OACV,GAAI,GAAG,MAAO,CAAE,MAAM,GAAK,SAAS,cAAc,aAAa,EAAG,GAAI,IAAM,OAAO,GAAG,MAAS,WAAc,GAAI,CAAE,GAAG,KAAK,EAAG,MAAQ,MAAY,CAAC,CAAI,SAAS,KAAO,EAAE,SAAW,QAAS,MAAQ,CACrM,MAAM,EAAI,SAAS,EACnB,GAAI,EAAG,CAAc,GAAZ,QAAQ,CAAC,EAAO,oBAAoB,KAAK,CAAC,EAAG,GAAG,KAAO,UAAY,SAAS,KAAK,CAAC,EAAG,GAAG,KAAO,UAAY,+CAA+C,KAAK,CAAC,GAAkB,GAAb,GAAG,KAAO,EAAO,uBAAuB,KAAK,CAAC,EAAK,GAAG,KAAO,QAAS,GAAG,MAAQ,QAAQ,GAAG,UAAc,mBAAmB,KAAK,CAAC,EAAG,CAAE,MAAM,GAAK,YAAY,EAAO,GAAG,QAAU,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAG,EAAI,KAAK,EAAI,EAAG,MAAM,eAAe,CAAE,MAAO,SAAU,SAAU,QAAS,CAAC,EAAG,MAAQ,CAC9d,GAAI,CAAC,GAAG,SAAU,CAAE,GAAG,KAAO,EAAG,KAAK,EAAI,EAAG,QAAQ,QAAQ,IAAM,GAAK,CAAC,GAAG,QAAU,uDAAyD,EAAE,EAAG,MAAM,IAAM,QAAQ,cAAc,sBAAsB,EAAO,KAAK,IAAI,QAAQ,OAAO,EAAE,eAAe,CAAE,MAAO,SAAU,SAAU,QAAS,CAAC,EAAG,MAAQ,CAC9S,SAAS,CACX,EACM,cAAiB,GAAM,MAAM,CAAC,EAAE,KAAM,GAAM,EAAE,KAAK,CAAC,EACpD,SAAW,SAAY,CAC3B,MAAM,EAAI,YAAY,EAChB,KAAO,WAAW,EAClB,KAAO,UAAU,EACvB,IAAI,KAAO,GACX,GAAI,CAAE,KAAO,SAAS,OAAS,SAAS,SAAW,WAAa,KAAK,KAAK,CAAC,CAAG,MAAY,CAAC,CAC3F,MAAM,MAAQ,CAAC,EACf,KAAK,QAAS,GAAM,CAAO,EAAE,OAAO,MAAM,KAAK,CAAC,EAAE,KAAM,EAAE,KAAK,QAAQ,yCAA0C,0BAA0B,CAAC,CAAC,CAAG,CAAC,EACjJ,MAAM,OAAS,KAAK,OAAQ,GAAM,EAAE,KAAK,EAAE,IAAK,GAAM,EAAE,IAAI,EACxD,OAAO,QAAQ,MAAM,KAAK,CAAC,aAAc,OAAO,KAAK,IAAI,CAAC,CAAC,EAC/D,MAAM,WAAa,SAAS,KAAM,GAAM,GAAG,MAAM,CAAC,EAAE,OAAS,SAAW,GAAG,MAAM,CAAC,EAAE,QAAU,QAAQ,GAAK,GAAG,OAC1G,YAAc,GAAG,QAAQ,MAAM,KAAK,CAAC,iBAAkB,wBAAwB,CAAC,EAChF,YAAc,MAAQ,GAAG,MAAM,MAAM,OAAS,SAAS,MAAM,KAAK,CAAC,oBAAqB,GAAG,OAAS,MAAQ,MAAQ,IAAI,CAAC,EACzH,YAAY,GAAG,MAAM,KAAK,CAAC,YAAc,GAAG,MAAQ,SAAU,sDAAsD,CAAC,EACpH,MAAM,MAAM,KAAK,CAAC,MAAO,GAAG,MAAQ,UAAY,kBAAoB,SAAS,CAAC,EAC9E,MAAM,MAAM,KAAK,CAAC,QAAS,GAAG,MAAQ,UAAY,2BAA6B,GAAG,MAAM,MAAM,QAAK,EAAE,CAAC,CAAC,CAAC,EACzG,GAAG,OAAS,IAAQ,GAAG,QAAQ,KAAK,GAAG,MAAM,KAAK,CAAC,YAAa,GAAG,QAAQ,KAAK,CAAC,CAAC,EAClF,GAAG,QAAU,EAAE,QAAQ,MAAM,KAAK,CAAC,kBAAmB,2BAA2B,CAAC,EAClF,GAAG,WAAW,KAAK,GAAG,MAAM,KAAK,CAAC,yBAA0B,GAAG,WAAW,KAAK,CAAC,CAAC,EACjF,KAAK,GAAG,MAAM,KAAK,CAAC,eAAgB,EAAE,KAAK,CAAC,EAC5C,IAAI,GAAG,KAAK,GAAG,MAAM,KAAK,CAAC,cAAe,iBAAiB,CAAC,EAChE,MAAM,KAAK,CAAC,cAAe,IAAI,CAAC,EAChC,MAAM,KAAK,CAAC,QAAS,sCAAsC,CAAC,EACxD,MAAM,MAAM,KAAK,CAAC,eAAgB,IAAI,CAAC,EAE3C,KAAO,GAAM,UAAU,EAAG,QAAQ,EAAE,EACpC,IAAI,MAAQ,KACZ,GAAI,CAAE,MAAQ,MAAM,QAAQ,KAAK,CAAC,WAAW,EAAG,IAAI,QAAS,GAAM,WAAW,IAAM,EAAE,IAAI,EAAG,GAAI,CAAC,CAAC,CAAC,CAAG,MAAY,CAAE,MAAQ,IAAM,CACnI,MAAM,GAAK,SAAS,cAAc,aAAa,EACzC,OAAS,IAAM,GAAG,QAAQ,WAAa,UAAY,OAAO,GAAG,gBAAmB,YAAc,OAAO,GAAG,qBAAwB,WAChI,KAAO,OAAS,GAAG,oBAAoB,EAAE,IAAK,GAAM,EAAE,EAAE,EAAI,CAAC,EAC7D,QAAW,OAAO,SAAW,QAAQ,QAAU,QAAQ,OAAO,MAAS,IAC7E,IAAI,QAAU,KACd,GAAI,CAEF,GAAI,GAAG,QAAU,EAAE,OAAQ,CACzB,MAAM,GAAK,MAAM,MAAM,QAAU,cAAe,CAAE,OAAQ,OAAQ,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAAG,KAAM,KAAK,UAAU,CAAE,MAAO,CAAC,CAAE,GAAI,EAAE,OAAO,GAAI,SAAU,EAAG,WAAY,CAAE,KAAM,IAAI,GAAG,KAAK,EAAI,IAAI,GAAG,KAAK,EAAE,MAAQ,EAAE,OAAS,gBAAe,IAAK,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,EAC1S,GAAK,MAAM,GAAG,KAAK,EACzB,GAAI,CAAC,GAAG,IAAM,GAAG,OAAQ,MAAM,GAC/B,QAAU,GAAG,OAAS,GAAG,MAAM,CAAC,GAAK,GAAG,MAAM,CAAC,EAAE,GACnD,CACA,MAAM,GAAK,IAAI,SAGf,GAFA,GAAG,OAAO,KAAM,EAAE,EAAE,EAAG,GAAG,OAAO,WAAY,GAAG,EAChD,MAAM,QAAQ,CAAC,CAAC,EAAG,GAAG,IAAM,GAAG,OAAO,cAAgB,EAAI,IAAK,GAAG,CAAC,EAC/D,WAAY,CACd,MAAM,KAAO,YAAc,MAAM,cAAc,GAAG,MAAM,EAClD,KAAQ,YAAc,WAAW,MAAU,UAAY,KAAO,MAAQ,KAAK,MAAQ,cAAc,MAAM,GAAG,EAAE,CAAC,GAAK,OACxH,GAAG,OAAO,4BAA6B,KAAM,IAAI,CACnD,CACI,OAAO,GAAG,OAAO,4BAA6B,MAAO,SAAW,KAAO,MAAM,EAC7E,SAAU,GAAG,OAAO,WAAY,IAAI,EAAG,GAAG,OAAO,eAAgB,SAAS,QAAQ,GACtF,MAAM,EAAI,MAAM,MAAM,EAAE,SAAW,YAAa,CAAE,OAAQ,OAAQ,QAAS,CAAE,OAAQ,yBAA0B,mBAAoB,gBAAiB,EAAG,KAAM,EAAG,CAAC,EAC3J,IAAM,MAAM,EAAE,KAAK,EACzB,GAAI,CAAC,EAAE,IAAM,IAAI,OACf,MAAI,SAAS,MAAM,QAAU,iBAAkB,CAAE,OAAQ,OAAQ,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,kBAAmB,EAAG,KAAM,KAAK,UAAU,CAAE,GAAI,QAAS,SAAU,CAAE,CAAC,CAAE,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,EAC5M,IAGR,GADA,GAAG,MAAQ,GACP,OAAQ,CACV,GAAG,UAAU,OAAO,UAAU,EAC9B,GAAI,CAAE,GAAG,eAAe,IAAK,CAAC,SAAS,KAAK,UAAU,SAAS,sBAAsB,CAAC,CAAG,MAAY,CAAE,SAAS,KAAO,EAAE,SAAW,QAAS,MAAQ,CACjJ,OAAO,SAAY,YAAc,OAAO,eAAmB,KAAa,QAAQ,eAAe,WAAY,CAAE,OAAQ,eAAgB,iBAAkB,EAAE,GAAI,SAAU,GAAI,CAAC,CAClL,KAAO,CAAE,SAAS,KAAO,EAAE,SAAW,QAAS,MAAQ,CACzD,OAAS,IAAK,CACZ,QAAS,MAAQ,IAAI,aAAe,IAAI,UAAa,4DAA4D,CACnH,QAAE,CAAU,KAAO,GAAO,UAAU,CAAG,CACzC,EAGM,KAAQ,GAAM,OAAO,GAAK,EAAE,EAAE,MAAM,MAAG,EAAE,CAAC,EAAE,UAAU,KAAK,EAAE,QAAQ,mBAAoB,EAAE,EAAE,YAAY,EAAE,QAAQ,cAAe,GAAG,EAAE,KAAK,EAClJ,KAAK,iBAAiB,QAAU,GAAM,CACpC,MAAM,EAAI,EAAE,OAAO,QAAQ,WAAW,EAChC,IAAM,SAAS,eAAe,QAAQ,EAC5C,GAAI,CAAC,GAAK,CAAC,IAAK,OAChB,EAAE,eAAe,EACjB,MAAM,EAAI,IAAI,QAAQ,SAAS,EAAO,IAAG,EAAE,KAAO,KACjD,GAAK,KAAK,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,CAClE,CAAC,EACD,SAAS,iBAAiB,kBAAoB,GAAM,CAClD,MAAM,KAAO,KAAK,EAAE,QAAU,EAAE,OAAO,IAAI,EACrC,IAAM,OAAO,KAAM,GAAM,KAAK,CAAC,IAAM,IAAI,EAC/C,GAAI,CAAC,KAAO,KAAM,OAClB,GAAG,MAAQ,IAAK,GAAG,IAAM,MAAO,GAAG,MAAQ,GAAO,GAAG,KAAO,EAAG,QAAQ,EAAE,EACzE,KAAK,EAAI,EACT,MAAM,OAAS,GAAG,QAAU,QAAQ,cAAc,iBAAiB,EAAI,QACnE,QAAQ,OAAO,eAAe,CAAE,SAAU,SAAU,MAAO,OAAQ,CAAC,CAC1E,CAAC,EAGD,MAAM,OAAU,GAAM,CAAE,MAAM,GAAK,EAAE,cAAc,YAAY,EAAG,GAAI,CAAC,GAAI,OAAQ,GAAG,MAAM,YAAY,cAAe,KAAK,EAAG,MAAM,EAAI,GAAG,sBAAsB,EAAS,GAAK,SAAS,gBAAgB,YAAa,IAAI,EAAI,EAAO,EAAE,MAAQ,GAAK,KAAI,EAAI,GAAK,GAAK,EAAE,OAAW,EAAE,KAAO,EAAI,KAAI,EAAI,GAAK,EAAE,MAAM,GAAG,MAAM,YAAY,cAAe,KAAK,MAAM,CAAC,EAAI,IAAI,CAAG,EAChX,KAAK,iBAAiB,YAAc,GAAM,CAAE,MAAM,EAAI,EAAE,OAAO,SAAW,EAAE,OAAO,QAAQ,SAAS,EAAO,GAAG,OAAO,CAAC,CAAG,CAAC,EAE1H,MAAM,QAAU,IAAM,KAAK,iBAAiB,iBAAiB,EAAE,QAAS,GAAM,CAAE,EAAE,UAAU,OAAO,SAAS,EAAG,EAAE,aAAa,gBAAiB,OAAO,CAAG,CAAC,EAC1J,SAAS,iBAAiB,QAAU,GAAM,EAAM,CAAC,EAAE,OAAO,SAAW,CAAC,EAAE,OAAO,QAAQ,SAAS,IAAG,QAAQ,CAAG,CAAC,EAC/G,SAAS,iBAAiB,UAAY,GAAM,CAAM,EAAE,MAAQ,UAAU,QAAQ,CAAG,CAAC,EAGlF,MAAM,KAAO,IAAM,CAAM,CAAC,GAAG,SAAW,CAAC,GAAG,OAAM,GAAG,KAAO,GAAG,KAAK,EAAI,CAAG,EACvE,GAAG,iBAAkB,GAAG,iBAAiB,SAAU,IAAI,EAAY,GAAG,aAAa,GAAG,YAAY,IAAI,EACtG,CAAC,GAAG,SAAW,CAAC,GAAG,OAAM,GAAG,KAAO,GACvC,OAAO,GAAG,IAAI,EACd,KAAK,EAAI,EACL,SAAS,OAAS,SAAS,MAAM,OAAO,SAAS,MAAM,MAAM,KAAK,IAAM,CAAE,YAAY,EAAG,YAAY,CAAG,CAAC,EAEzG,SAAS,OAAS,SAAS,MAAM,MAAM,SAAS,MAAM,KAAK,MAAM,QAAQ,GAAK,SAAW,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,IAAM,CAAE,YAAY,EAAG,YAAY,CAAG,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACnM,GAAG",
  "names": ["sz", "g", "h", "norm", "ls", "usesPhoto", "y"]
}
