{
  "version": 3,
  "sources": ["../shared/components/autofocus.js", "../shared/components/content_loading.js", "../shared/components/data_confirm.js", "../shared/components/file_input.js", "../shared/components/input_type_number.js", "../../../../../shared/node_modules/lazysizes/lazysizes.js", "../../../../../shared/node_modules/lazysizes/plugins/parent-fit/ls.parent-fit.js", "../frontend/components/events_page.js", "../frontend/components/filterable_list.js", "../../../../../shared/src/js/util/util.js", "../../../../../shared/src/js/util/dom-events.js", "../../../../../shared/src/js/util/viewport-size.js", "../../../../../shared/src/js/slide/pan-bounds.js", "../../../../../shared/src/js/slide/zoom-level.js", "../../../../../shared/src/js/slide/slide.js", "../../../../../shared/src/js/gestures/drag-handler.js", "../../../../../shared/src/js/gestures/zoom-handler.js", "../../../../../shared/src/js/gestures/tap-handler.js", "../../../../../shared/src/js/gestures/gestures.js", "../../../../../shared/src/js/main-scroll.js", "../../../../../shared/src/js/keyboard.js", "../../../../../shared/src/js/util/css-animation.js", "../../../../../shared/src/js/util/spring-easer.js", "../../../../../shared/src/js/util/spring-animation.js", "../../../../../shared/src/js/util/animations.js", "../../../../../shared/src/js/scroll-wheel.js", "../../../../../shared/src/js/ui/ui-element.js", "../../../../../shared/src/js/ui/button-arrow.js", "../../../../../shared/src/js/ui/button-close.js", "../../../../../shared/src/js/ui/button-zoom.js", "../../../../../shared/src/js/ui/loading-indicator.js", "../../../../../shared/src/js/ui/counter-indicator.js", "../../../../../shared/src/js/ui/ui.js", "../../../../../shared/src/js/slide/get-thumb-bounds.js", "../../../../../shared/src/js/core/eventable.js", "../../../../../shared/src/js/slide/placeholder.js", "../../../../../shared/src/js/slide/content.js", "../../../../../shared/src/js/core/base.js", "../../../../../shared/src/js/opener.js", "../../../../../shared/src/js/slide/loader.js", "../../../../../shared/src/js/photoswipe.js", "../frontend/components/lightbox_image.js", "../frontend/components/search_form.js", "../frontend/components/track_page_view.js", "../../../../../shared/node_modules/unpoly/unpoly.js", "../shared/util/environment.js", "../shared/config/unpoly.js", "../shared/config/unpoly_follow_all.js", "../frontend/config/unpoly.js", "import-glob:./shared/components/**/*.js", "../shared/util/application.js", "../shared/util/timeout.js", "../shared/components/flash_message.js", "../shared/components/lazysizes.js", "../frontend/util/debounced_resize_observer.js", "../frontend/components/bootstrap_ext/nav_tabs.js", "import-glob:./frontend/components/**/*.js", "../frontend/components/layout.js", "../../../../../shared/src/js/util/util.js", "../../../../../shared/src/js/core/eventable.js", "../../../../../shared/src/js/slide/placeholder.js", "../../../../../shared/src/js/slide/content.js", "../../../../../shared/src/js/core/base.js", "../../../../../shared/src/js/util/viewport-size.js", "../../../../../shared/src/js/slide/zoom-level.js", "../../../../../shared/src/js/slide/loader.js", "../../../../../shared/src/js/lightbox/lightbox.js", "../frontend/components/lightbox_gallery.js"],
  "sourcesContent": ["up.compiler('[autofocus]', (element) => {\n  // This compiler will not try to autofocus a field itself (browser handles [autofocus] itself),\n  // but for autofocused input fields, it places the caret at the end of the line.\n\n  if (element.matches('input')) {\n    const length = element.value.length\n\n    try {\n      element.setSelectionRange(length, length)\n    } catch (error) {\n      // setSelectionRange is defined but unsupported for some input types (e.g. email), throwing an error.\n    }\n  }\n})\n", "up.compiler('body', (element) => {\n\n  function setLoading(isLoading) {\n    element.classList.toggle('content-loading', isLoading)\n  }\n\n  return [\n    up.on('up:network:late', () => { setLoading(true) }),\n    up.on('up:network:recover', () => { setLoading(false) }),\n  ]\n\n})\n", "up.compiler('[data-confirm]', (element) => {\n\n  function onClick(event) {\n    const message = element.getAttribute('data-confirm')\n    if (!confirm(message)) up.event.halt(event)\n  }\n\n  element.addEventListener('click', onClick)\n\n})\n", "up.compiler('[file-input]', (element) => {\n\n  const input = element.querySelector('input[type=\"file\"]')\n  const filename = element.querySelector('[file-input--filename]')\n\n  const previewImage = element.querySelector('img[file-input--preview]')\n\n  function onDragOver(event) {\n    event.preventDefault()\n  }\n\n  function onDrop(event) {\n    event.preventDefault()\n    input.files = event.dataTransfer.files\n    onFilePicked()\n  }\n\n  function onFilePicked() {\n    updateFilename()\n    updatePreview()\n  }\n\n  function updateFilename() {\n    const filenames = Array.from(input.files).map(file => file.name)\n    filename.innerText = filenames.join(', ')\n  }\n\n  function updatePreview() {\n    if (!previewImage) return\n\n    if (input.files.length === 1) {\n      const file = input.files[0]\n\n      readImageAsDataURL(file).then((dataURL) => {\n        previewImage.src = dataURL\n      })\n    } else {\n      previewImage.src = '//:0'\n    }\n  }\n\n  function readImageAsDataURL(file) {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader()\n      reader.addEventListener('load', () => {\n        resolve(reader.result)\n      })\n      reader.readAsDataURL(file)\n    })\n  }\n\n  input.addEventListener('change', onFilePicked)\n  element.addEventListener('drop', onDrop)\n  element.addEventListener('dragover', onDragOver)\n  element.classList.add('drop-area')\n\n})\n", "up.compiler('input[type=\"number\"]', (element) => {\n\n  // Number inputs allow incrementing/decrementing with arrow keys, and support exponential notation\n  // (in some browsers even regular letters). We want neither.\n  element.addEventListener('keydown', (event) => {\n    const key = event.key\n    if (key === 'ArrowUp' || key === 'ArrowDown' || (key.length === 1 && !event.ctrlKey && !event.altKey && !key.match(/[0-9\\-+,.]/))) {\n      event.preventDefault()\n    }\n  })\n\n  // Some browser (at least Firefox) will increment/decrement a number when using the mouse's scroll wheel\n  // above a focused number input. Since this can lead to users changing values by accident, we want to avoid that.\n  element.addEventListener('wheel', (event) => {\n    if (element.matches(':focus')) {\n      event.preventDefault()\n    }\n  })\n\n})\n", "(function(window, factory) {\n\tvar lazySizes = factory(window, window.document, Date);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(typeof window != 'undefined' ?\n      window : {}, \n/**\n * import(\"./types/global\")\n * @typedef { import(\"./types/lazysizes-config\").LazySizesConfigPartial } LazySizesConfigPartial\n */\nfunction l(window, document, Date) { // Pass in the window Date function also for SSR because the Date class can be lost\n\t'use strict';\n\t/*jshint eqnull:true */\n\n\tvar lazysizes,\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tlazySizesCfg;\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tfastLoadedClass: 'ls-is-cached',\n\t\t\tiframeLoadMode: 0,\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 0,\n\t\t\tthrottleDelay: 125,\n\t\t};\n\n\t\tlazySizesCfg = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesCfg)){\n\t\t\t\tlazySizesCfg[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\t})();\n\n\tif (!document || !document.getElementsByClassName) {\n\t\treturn {\n\t\t\tinit: function () {},\n\t\t\t/**\n\t\t\t * @type { LazySizesConfigPartial }\n\t\t\t */\n\t\t\tcfg: lazySizesCfg,\n\t\t\t/**\n\t\t\t * @type { true }\n\t\t\t */\n\t\t\tnoSupport: true,\n\t\t};\n\t}\n\n\tvar docElem = document.documentElement;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\t/**\n\t * Update to bind to window because 'this' becomes null during SSR\n\t * builds.\n\t */\n\tvar addEventListener = window[_addEventListener].bind(window);\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\t/**\n\t * @param ele {Element}\n\t * @param cls {string}\n\t */\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\t/**\n\t * @param elem { Element }\n\t * @param name { string }\n\t * @param detail { any }\n\t * @param noBubbles { boolean }\n\t * @param noCancelable { boolean }\n\t * @returns { CustomEvent }\n\t */\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('Event');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initEvent(name, !noBubbles, !noCancelable);\n\n\t\tevent.detail = detail;\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesCfg.pf) ) ){\n\t\t\tif(full && full.src && !el[_getAttribute]('srcset')){\n\t\t\t\tel.setAttribute('srcset', full.src);\n\t\t\t}\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\t/**\n\t *\n\t * @param elem { Element }\n\t * @param parent { Element }\n\t * @param [width] {number}\n\t * @returns {number}\n\t */\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesCfg.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth =  parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = lazySizesCfg.throttleDelay;\n\t\tvar rICTimeout = lazySizesCfg.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && rICTimeout > 49 ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesCfg.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesCfg.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning =  true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || delay < 9){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom, isBodyHidden;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/(gle|ing)bot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isVisible = function (elem) {\n\t\t\tif (isBodyHidden == null) {\n\t\t\t\tisBodyHidden = getCSS(document.body, 'visibility') == 'hidden';\n\t\t\t}\n\n\t\t\treturn isBodyHidden || !(getCSS(elem.parentNode, 'visibility') == 'hidden' && getCSS(elem, 'visibility') == 'hidden');\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = isVisible(elem);\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal,\n\t\t\t\tbeforeExpandVal, defaultExpand, preloadExpand, hFac;\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesCfg.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll || (lazysizes.prematureUnveil && lazysizes.prematureUnveil(lazyloadElems[i]))){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!defaultExpand) {\n\t\t\t\t\t\tdefaultExpand = (!lazySizesCfg.expand || lazySizesCfg.expand < 1) ?\n\t\t\t\t\t\t\tdocElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370 :\n\t\t\t\t\t\t\tlazySizesCfg.expand;\n\n\t\t\t\t\t\tlazysizes._defEx = defaultExpand;\n\n\t\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesCfg.expFactor;\n\t\t\t\t\t\thFac = lazySizesCfg.hFac;\n\t\t\t\t\t\tisBodyHidden = null;\n\n\t\t\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\t\t\tlowRuns = 0;\n\t\t\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesCfg.loadHidden || isVisible(lazyloadElems[i])) &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesCfg.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesCfg.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\tvar elem = e.target;\n\n\t\t\tif (elem._lazyCache) {\n\t\t\t\tdelete elem._lazyCache;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresetPreloading(e);\n\t\t\taddClass(elem, lazySizesCfg.loadedClass);\n\t\t\tremoveClass(elem, lazySizesCfg.loadingClass);\n\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(elem, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\tvar loadMode = elem.getAttribute('data-load-mode') || lazySizesCfg.iframeLoadMode;\n\n\t\t\t// loadMode can be also a string!\n\t\t\tif (loadMode == 0) {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} else if (loadMode == 1) {\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesCfg.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesCfg.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesCfg.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesCfg.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\taddClass(elem, lazySizesCfg.loadingClass);\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesCfg.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\t// Part of this can be removed as soon as this fix is older: https://bugs.chromium.org/p/chromium/issues/detail?id=7731 (2015)\n\t\t\t\tvar isLoaded = elem.complete && elem.naturalWidth > 1;\n\n\t\t\t\tif( !firesLoad || isLoaded){\n\t\t\t\t\tif (isLoaded) {\n\t\t\t\t\t\taddClass(elem, lazySizesCfg.fastLoadedClass);\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t\telem._lazyCache = true;\n\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\tif ('_lazyCache' in elem) {\n\t\t\t\t\t\t\tdelete elem._lazyCache;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 9);\n\t\t\t\t}\n\t\t\t\tif (elem.loading == 'lazy') {\n\t\t\t\t\tisLoading--;\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\t/**\n\t\t *\n\t\t * @param elem { Element }\n\t\t */\n\t\tvar unveilElement = function (elem){\n\t\t\tif (elem._lazyRace) {return;}\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesCfg.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesCfg.errorClass) && hasClass(elem, lazySizesCfg.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar afterScroll = debounce(function(){\n\t\t\tlazySizesCfg.loadMode = 3;\n\t\t\tthrottledCheckElements();\n\t\t});\n\n\t\tvar altLoadmodeScrollListner = function(){\n\t\t\tif(lazySizesCfg.loadMode == 3){\n\t\t\t\tlazySizesCfg.loadMode = 2;\n\t\t\t}\n\t\t\tafterScroll();\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesCfg.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', altLoadmodeScrollListner, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesCfg.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesCfg.lazyClass + ' ' + lazySizesCfg.preloadClass);\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('pageshow', function (e) {\n\t\t\t\t\tif (e.persisted) {\n\t\t\t\t\t\tvar loadingElements = document.querySelectorAll('.' + lazySizesCfg.loadingClass);\n\n\t\t\t\t\t\tif (loadingElements.length && loadingElements.forEach) {\n\t\t\t\t\t\t\trequestAnimationFrame(function () {\n\t\t\t\t\t\t\t\tloadingElements.forEach( function (img) {\n\t\t\t\t\t\t\t\t\tif (img.complete) {\n\t\t\t\t\t\t\t\t\t\tunveilElement(img);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement,\n\t\t\t_aLSL: altLoadmodeScrollListner,\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\t/**\n\t\t *\n\t\t * @param elem {Element}\n\t\t * @param dataAttr\n\t\t * @param [width] { number }\n\t\t */\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesCfg.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i && document.getElementsByClassName){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tsetTimeout(function(){\n\t\tif(lazySizesCfg.init){\n\t\t\tinit();\n\t\t}\n\t});\n\n\tlazysizes = {\n\t\t/**\n\t\t * @type { LazySizesConfigPartial }\n\t\t */\n\t\tcfg: lazySizesCfg,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n", "(function(window, factory) {\n\tif(!window) {return;}\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if (typeof define == 'function' && define.amd) {\n\t\tdefine(['lazysizes'], factory);\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(typeof window != 'undefined' ?\n\twindow : 0, function(window, document, lazySizes) {\n\t'use strict';\n\n\tif(!window.addEventListener){return;}\n\n\tvar regDescriptors = /\\s+(\\d+)(w|h)\\s+(\\d+)(w|h)/;\n\tvar regCssFit = /parent-fit[\"']*\\s*:\\s*[\"']*(contain|cover|width)/;\n\tvar regCssObject = /parent-container[\"']*\\s*:\\s*[\"']*(.+?)(?=(\\s|$|,|'|\"|;))/;\n\tvar regPicture = /^picture$/i;\n\tvar cfg = lazySizes.cfg;\n\n\tvar getCSS = function (elem){\n\t\treturn (getComputedStyle(elem, null) || {});\n\t};\n\n\tvar parentFit = {\n\n\t\tgetParent: function(element, parentSel){\n\t\t\tvar parent = element;\n\t\t\tvar parentNode = element.parentNode;\n\n\t\t\tif((!parentSel || parentSel == 'prev') && parentNode && regPicture.test(parentNode.nodeName || '')){\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t}\n\n\t\t\tif(parentSel != 'self'){\n\t\t\t\tif(parentSel == 'prev'){\n\t\t\t\t\tparent = element.previousElementSibling;\n\t\t\t\t} else if(parentSel && (parentNode.closest || window.jQuery)){\n\t\t\t\t\tparent = (parentNode.closest ?\n\t\t\t\t\t\t\tparentNode.closest(parentSel) :\n\t\t\t\t\t\t\tjQuery(parentNode).closest(parentSel)[0]) ||\n\t\t\t\t\t\tparentNode\n\t\t\t\t\t;\n\t\t\t\t} else {\n\t\t\t\t\tparent = parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn parent;\n\t\t},\n\n\t\tgetFit: function(element){\n\t\t\tvar tmpMatch, parentObj;\n\t\t\tvar css = getCSS(element);\n\t\t\tvar content = css.content || css.fontFamily;\n\t\t\tvar obj = {\n\t\t\t\tfit: element._lazysizesParentFit || element.getAttribute('data-parent-fit')\n\t\t\t};\n\n\t\t\tif(!obj.fit && content && (tmpMatch = content.match(regCssFit))){\n\t\t\t\tobj.fit = tmpMatch[1];\n\t\t\t}\n\n\t\t\tif(obj.fit){\n\t\t\t\tparentObj = element._lazysizesParentContainer || element.getAttribute('data-parent-container');\n\n\t\t\t\tif(!parentObj && content && (tmpMatch = content.match(regCssObject))){\n\t\t\t\t\tparentObj = tmpMatch[1];\n\t\t\t\t}\n\n\t\t\t\tobj.parent = parentFit.getParent(element, parentObj);\n\n\n\t\t\t} else {\n\t\t\t\tobj.fit = css.objectFit;\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\t\tgetImageRatio: function(element){\n\t\t\tvar i, srcset, media, ratio, match, width, height;\n\t\t\tvar parent = element.parentNode;\n\t\t\tvar elements = parent && regPicture.test(parent.nodeName || '') ?\n\t\t\t\t\tparent.querySelectorAll('source, img') :\n\t\t\t\t\t[element]\n\t\t\t\t;\n\n\t\t\tfor(i = 0; i < elements.length; i++){\n\t\t\t\telement = elements[i];\n\t\t\t\tsrcset = element.getAttribute(cfg.srcsetAttr) || element.getAttribute('srcset') || element.getAttribute('data-pfsrcset') || element.getAttribute('data-risrcset') || '';\n\t\t\t\tmedia = element._lsMedia || element.getAttribute('media');\n\t\t\t\tmedia = cfg.customMedia[element.getAttribute('data-media') || media] || media;\n\n\t\t\t\tif(srcset && (!media || (window.matchMedia && matchMedia(media) || {}).matches )){\n\t\t\t\t\tratio = parseFloat(element.getAttribute('data-aspectratio'));\n\n\t\t\t\t\tif (!ratio) {\n\t\t\t\t\t\tmatch = srcset.match(regDescriptors);\n\n\t\t\t\t\t\tif (match) {\n\t\t\t\t\t\t\tif(match[2] == 'w'){\n\t\t\t\t\t\t\t\twidth = match[1];\n\t\t\t\t\t\t\t\theight = match[3];\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twidth = match[3];\n\t\t\t\t\t\t\t\theight = match[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twidth = element.getAttribute('width');\n\t\t\t\t\t\t\theight = element.getAttribute('height');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tratio = width / height;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ratio;\n\t\t},\n\n\t\tcalculateSize: function(element, width){\n\t\t\tvar displayRatio, height, imageRatio, retWidth;\n\t\t\tvar fitObj = this.getFit(element);\n\t\t\tvar fit = fitObj.fit;\n\t\t\tvar fitElem = fitObj.parent;\n\n\t\t\tif(fit != 'width' && ((fit != 'contain' && fit != 'cover') || !(imageRatio = this.getImageRatio(element)))){\n\t\t\t\treturn width;\n\t\t\t}\n\n\t\t\tif(fitElem){\n\t\t\t\twidth = fitElem.clientWidth;\n\t\t\t} else {\n\t\t\t\tfitElem = element;\n\t\t\t}\n\n\t\t\tretWidth = width;\n\n\t\t\tif(fit == 'width'){\n\t\t\t\tretWidth = width;\n\t\t\t} else {\n\t\t\t\theight = fitElem.clientHeight;\n\n\t\t\t\tif((displayRatio =  width / height) && ((fit == 'cover' && displayRatio < imageRatio) || (fit == 'contain' && displayRatio > imageRatio))){\n\t\t\t\t\tretWidth = width * (imageRatio / displayRatio);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn retWidth;\n\t\t}\n\t};\n\n\tlazySizes.parentFit = parentFit;\n\n\tdocument.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.defaultPrevented || e.detail.instance != lazySizes){return;}\n\n\t\tvar element = e.target;\n\t\te.detail.width = parentFit.calculateSize(element, e.detail.width);\n\t});\n}));\n", "up.compiler('[events-page]', (element) => {\n\n  function getPastEventsContainer() {\n    return element.querySelector('[events-page--past-events]')\n  }\n\n  function isChecked() {\n    return getPastEventsContainer().querySelector('input[type=\"checkbox\"]').checked\n  }\n\n  let lastChecked = isChecked()\n\n  up.on(element, 'up:fragment:inserted', (_event) => {\n    const nowChecked = isChecked()\n\n    if (!lastChecked && nowChecked) {\n      up.reveal(getPastEventsContainer(), {\n        revealTop: true,\n        revealSnap: 0,\n        revealPadding: 95,\n      })\n    }\n\n    lastChecked = nowChecked\n  })\n\n})\n", "up.compiler('.filterable-list', (element) => {\n\n  const filters = element.querySelector('.filterable-list--filters')\n\n  element.addEventListener('up:fragment:inserted', function(event) {\n    const updatedByFilters = filters.contains(event.origin) // don't scroll when list was updated by \"load more\" button\n    const userScrolledDown = element.offsetTop < window.scrollY // only scroll when user scrolled past the top of the list\n\n    if (updatedByFilters && userScrolledDown) {\n      up.reveal(element, {\n        revealTop: true,\n        revealSnap: 0,\n        revealPadding: 95,\n      })\n    }\n  })\n\n})\n", "/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/** @typedef {undefined | null | false | '' | 0} Falsy */\r\n/** @typedef {keyof HTMLElementTagNameMap} HTMLElementTagName */\r\n\r\n/**\r\n * @template {HTMLElementTagName | Falsy} [T=\"div\"]\r\n * @template {Node | undefined} [NodeToAppendElementTo=undefined]\r\n * @param {string=} className\r\n * @param {T=} [tagName]\r\n * @param {NodeToAppendElementTo=} appendToEl\r\n * @returns {T extends HTMLElementTagName ? HTMLElementTagNameMap[T] : HTMLElementTagNameMap['div']}\r\n */\r\nexport function createElement(className, tagName, appendToEl) {\r\n  const el = document.createElement(tagName || 'div');\r\n  if (className) {\r\n    el.className = className;\r\n  }\r\n  if (appendToEl) {\r\n    appendToEl.appendChild(el);\r\n  }\r\n  // @ts-expect-error\r\n  return el;\r\n}\r\n\r\n/**\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function equalizePoints(p1, p2) {\r\n  p1.x = p2.x;\r\n  p1.y = p2.y;\r\n  if (p2.id !== undefined) {\r\n    p1.id = p2.id;\r\n  }\r\n  return p1;\r\n}\r\n\r\n/**\r\n * @param {Point} p\r\n */\r\nexport function roundPoint(p) {\r\n  p.x = Math.round(p.x);\r\n  p.y = Math.round(p.y);\r\n}\r\n\r\n/**\r\n * Returns distance between two points.\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function getDistanceBetween(p1, p2) {\r\n  const x = Math.abs(p1.x - p2.x);\r\n  const y = Math.abs(p1.y - p2.y);\r\n  return Math.sqrt((x * x) + (y * y));\r\n}\r\n\r\n/**\r\n * Whether X and Y positions of points are qual\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function pointsEqual(p1, p2) {\r\n  return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n/**\r\n * The float result between the min and max values.\r\n *\r\n * @param {number} val\r\n * @param {number} min\r\n * @param {number} max\r\n */\r\nexport function clamp(val, min, max) {\r\n  return Math.min(Math.max(val, min), max);\r\n}\r\n\r\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number=} y\r\n * @param {number=} scale\r\n */\r\nexport function toTransformString(x, y, scale) {\r\n  let propValue = 'translate3d('\r\n    + x + 'px,' + (y || 0) + 'px'\r\n    + ',0)';\r\n\r\n  if (scale !== undefined) {\r\n    propValue += ' scale3d('\r\n      + scale + ',' + scale\r\n      + ',1)';\r\n  }\r\n\r\n  return propValue;\r\n}\r\n\r\n/**\r\n * Apply transform:translate(x, y) scale(scale) to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {number} x\r\n * @param {number=} y\r\n * @param {number=} scale\r\n */\r\nexport function setTransform(el, x, y, scale) {\r\n  el.style.transform = toTransformString(x, y, scale);\r\n}\r\n\r\nconst defaultCSSEasing = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/**\r\n * Apply CSS transition to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string=} prop CSS property to animate\r\n * @param {number=} duration in ms\r\n * @param {string=} ease CSS easing function\r\n */\r\nexport function setTransitionStyle(el, prop, duration, ease) {\r\n  // inOut: 'cubic-bezier(.4, 0, .22, 1)', // for \"toggle state\" transitions\r\n  // out: 'cubic-bezier(0, 0, .22, 1)', // for \"show\" transitions\r\n  // in: 'cubic-bezier(.4, 0, 1, 1)'// for \"hide\" transitions\r\n  el.style.transition = prop\r\n    ? (prop + ' ' + duration + 'ms ' + (ease || defaultCSSEasing))\r\n    : 'none';\r\n}\r\n\r\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\r\nexport function setWidthHeight(el, w, h) {\r\n  el.style.width = (typeof w === 'number') ? (w + 'px') : w;\r\n  el.style.height = (typeof h === 'number') ? (h + 'px') : h;\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n */\r\nexport function removeTransitionStyle(el) {\r\n  setTransitionStyle(el);\r\n}\r\n\r\n/**\r\n * @param {HTMLImageElement} img\r\n * @returns {Promise<HTMLImageElement | void>}\r\n */\r\nexport function decodeImage(img) {\r\n  if ('decode' in img) {\r\n    return img.decode();\r\n  }\r\n\r\n  if (img.complete) {\r\n    return Promise.resolve(img);\r\n  }\r\n\r\n  return new Promise((resolve, reject) => {\r\n    img.onload = () => resolve(img);\r\n    img.onerror = reject;\r\n  });\r\n}\r\n\r\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\r\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\r\nexport const LOAD_STATE = {\r\n  IDLE: 'idle',\r\n  LOADING: 'loading',\r\n  LOADED: 'loaded',\r\n  ERROR: 'error',\r\n};\r\n\r\n\r\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n */\r\nexport function specialKeyUsed(e) {\r\n  if (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {\r\n    return true;\r\n  }\r\n}\r\n\r\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {HTMLElement | NodeListOf<HTMLElement> | string} option\r\n * @param {string=} legacySelector\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\r\nexport function getElementsFromOption(option, legacySelector, parent = document) {\r\n  /** @type {HTMLElement[]} */\r\n  let elements = [];\r\n\r\n  if (option instanceof Element) {\r\n    elements = [option];\r\n  } else if (option instanceof NodeList || Array.isArray(option)) {\r\n    elements = Array.from(option);\r\n  } else {\r\n    const selector = typeof option === 'string' ? option : legacySelector;\r\n    if (selector) {\r\n      elements = Array.from(parent.querySelectorAll(selector));\r\n    }\r\n  }\r\n\r\n  return elements;\r\n}\r\n\r\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n */\r\nexport function isPswpClass(fn) {\r\n  return typeof fn === 'function'\r\n    && fn.prototype\r\n    && fn.prototype.goTo;\r\n}\r\n", "// Detect passive event listener support\r\nlet supportsPassive = false;\r\n/* eslint-disable */\r\ntry {\r\n  window.addEventListener('test', null, Object.defineProperty({}, 'passive', {\r\n    get: () => {\r\n      supportsPassive = true;\r\n    }\r\n  }));\r\n} catch (e) {}\r\n/* eslint-enable */\r\n\r\n\r\n/**\r\n * @typedef {Object} PoolItem\r\n * @prop {HTMLElement | Window | Document} target\r\n * @prop {string} type\r\n * @prop {(e: any) => void} listener\r\n * @prop {boolean} passive\r\n */\r\n\r\nclass DOMEvents {\r\n  constructor() {\r\n    /**\r\n     * @type {PoolItem[]}\r\n     * @private\r\n     */\r\n    this._pool = [];\r\n  }\r\n\r\n  /**\r\n   * Adds event listeners\r\n   *\r\n   * @param {HTMLElement | Window | Document} target\r\n   * @param {string} type Can be multiple, separated by space.\r\n   * @param {(e: any) => void} listener\r\n   * @param {boolean=} passive\r\n   */\r\n  add(target, type, listener, passive) {\r\n    this._toggleListener(target, type, listener, passive);\r\n  }\r\n\r\n  /**\r\n   * Removes event listeners\r\n   *\r\n   * @param {HTMLElement | Window | Document} target\r\n   * @param {string} type\r\n   * @param {(e: any) => void} listener\r\n   * @param {boolean=} passive\r\n   */\r\n  remove(target, type, listener, passive) {\r\n    this._toggleListener(target, type, listener, passive, true);\r\n  }\r\n\r\n  /**\r\n   * Removes all bound events\r\n   */\r\n  removeAll() {\r\n    this._pool.forEach((poolItem) => {\r\n      this._toggleListener(\r\n        poolItem.target,\r\n        poolItem.type,\r\n        poolItem.listener,\r\n        poolItem.passive,\r\n        true,\r\n        true\r\n      );\r\n    });\r\n    this._pool = [];\r\n  }\r\n\r\n  /**\r\n   * Adds or removes event\r\n   *\r\n   * @param {HTMLElement | Window | Document} target\r\n   * @param {string} type\r\n   * @param {(e: any) => void} listener\r\n   * @param {boolean} passive\r\n   * @param {boolean=} unbind Whether the event should be added or removed\r\n   * @param {boolean=} skipPool Whether events pool should be skipped\r\n   */\r\n  _toggleListener(target, type, listener, passive, unbind, skipPool) {\r\n    if (!target) {\r\n      return;\r\n    }\r\n\r\n    const methodName = unbind ? 'removeEventListener' : 'addEventListener';\r\n    const types = type.split(' ');\r\n    types.forEach((eType) => {\r\n      if (eType) {\r\n        // Events pool is used to easily unbind all events when PhotoSwipe is closed,\r\n        // so developer doesn't need to do this manually\r\n        if (!skipPool) {\r\n          if (unbind) {\r\n            // Remove from the events pool\r\n            this._pool = this._pool.filter((poolItem) => {\r\n              return poolItem.type !== eType\r\n                || poolItem.listener !== listener\r\n                || poolItem.target !== target;\r\n            });\r\n          } else {\r\n            // Add to the events pool\r\n            this._pool.push({\r\n              target,\r\n              type: eType,\r\n              listener,\r\n              passive\r\n            });\r\n          }\r\n        }\r\n\r\n\r\n        // most PhotoSwipe events call preventDefault,\r\n        // and we do not need browser to scroll the page\r\n        const eventOptions = supportsPassive ? { passive: (passive || false) } : false;\r\n\r\n        target[methodName](\r\n          eType,\r\n          listener,\r\n          eventOptions\r\n        );\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport default DOMEvents;\r\n", "/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipe} pswp\r\n */\r\nexport function getViewportSize(options, pswp) {\r\n  if (options.getViewportSizeFn) {\r\n    const newViewportSize = options.getViewportSizeFn(options, pswp);\r\n    if (newViewportSize) {\r\n      return newViewportSize;\r\n    }\r\n  }\r\n\r\n  return {\r\n    x: document.documentElement.clientWidth,\r\n\r\n    // TODO: height on mobile is very incosistent due to toolbar\r\n    // find a way to improve this\r\n    //\r\n    // document.documentElement.clientHeight - doesn't seem to work well\r\n    y: window.innerHeight\r\n  };\r\n}\r\n\r\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n *  top: 0,\r\n *  bottom: 0,\r\n *  left: 0,\r\n *  right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n *  return {\r\n *    top: 0,\r\n *    bottom: 0,\r\n *    left: 0,\r\n *    right: 0\r\n *  };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {{ x?: number; y?: number }} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\r\nexport function parsePaddingOption(prop, options, viewportSize, itemData, index) {\r\n  /** @type {number} */\r\n  let paddingValue;\r\n\r\n  if (options.paddingFn) {\r\n    paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\r\n  } else if (options.padding) {\r\n    paddingValue = options.padding[prop];\r\n  } else {\r\n    const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1);\r\n    // @ts-expect-error\r\n    if (options[legacyPropName]) {\r\n      // @ts-expect-error\r\n      paddingValue = options[legacyPropName];\r\n    }\r\n  }\r\n\r\n  return paddingValue || 0;\r\n}\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {{ x?: number; y?: number }} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n */\r\nexport function getPanAreaSize(options, viewportSize, itemData, index) {\r\n  return {\r\n    x: viewportSize.x\r\n      - parsePaddingOption('left', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('right', options, viewportSize, itemData, index),\r\n    y: viewportSize.y\r\n      - parsePaddingOption('top', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('bottom', options, viewportSize, itemData, index)\r\n  };\r\n}\r\n", "import {\r\n  clamp\r\n} from '../util/util.js';\r\nimport { parsePaddingOption } from '../util/viewport-size.js';\r\n\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n/** @typedef {'x' | 'y'} Axis */\r\n\r\n/**\r\n * Calculates minimum, maximum and initial (center) bounds of a slide\r\n */\r\nclass PanBounds {\r\n  /**\r\n   * @param {Slide} slide\r\n   */\r\n  constructor(slide) {\r\n    this.slide = slide;\r\n\r\n    this.currZoomLevel = 1;\r\n\r\n    /** @type {Point} */\r\n    this.center = {};\r\n    /** @type {Point} */\r\n    this.max = {};\r\n    /** @type {Point} */\r\n    this.min = {};\r\n\r\n    this.reset();\r\n  }\r\n\r\n  /**\r\n   * _getItemBounds\r\n   *\r\n   * @param {number} currZoomLevel\r\n   */\r\n  update(currZoomLevel) {\r\n    this.currZoomLevel = currZoomLevel;\r\n\r\n    if (!this.slide.width) {\r\n      this.reset();\r\n    } else {\r\n      this._updateAxis('x');\r\n      this._updateAxis('y');\r\n      this.slide.pswp.dispatch('calcBounds', { slide: this.slide });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * _calculateItemBoundsForAxis\r\n   *\r\n   * @param {Axis} axis\r\n   */\r\n  _updateAxis(axis) {\r\n    const { pswp } = this.slide;\r\n    const elSize = this.slide[axis === 'x' ? 'width' : 'height'] * this.currZoomLevel;\r\n    const paddingProp = axis === 'x' ? 'left' : 'top';\r\n    const padding = parsePaddingOption(\r\n      paddingProp,\r\n      pswp.options,\r\n      pswp.viewportSize,\r\n      this.slide.data,\r\n      this.slide.index\r\n    );\r\n\r\n    const panAreaSize = this.slide.panAreaSize[axis];\r\n\r\n    // Default position of element.\r\n    // By defaul it is center of viewport:\r\n    this.center[axis] = Math.round((panAreaSize - elSize) / 2) + padding;\r\n\r\n    // maximum pan position\r\n    this.max[axis] = (elSize > panAreaSize)\r\n      ? Math.round(panAreaSize - elSize) + padding\r\n      : this.center[axis];\r\n\r\n    // minimum pan position\r\n    this.min[axis] = (elSize > panAreaSize)\r\n      ? padding\r\n      : this.center[axis];\r\n  }\r\n\r\n  // _getZeroBounds\r\n  reset() {\r\n    this.center.x = 0;\r\n    this.center.y = 0;\r\n    this.max.x = 0;\r\n    this.max.y = 0;\r\n    this.min.x = 0;\r\n    this.min.y = 0;\r\n  }\r\n\r\n  /**\r\n   * Correct pan position if it's beyond the bounds\r\n   *\r\n   * @param {Axis} axis x or y\r\n   * @param {number} panOffset\r\n   */\r\n  correctPan(axis, panOffset) { // checkPanBounds\r\n    return clamp(panOffset, this.max[axis], this.min[axis]);\r\n  }\r\n}\r\n\r\nexport default PanBounds;\r\n", "const MAX_IMAGE_WIDTH = 4000;\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\r\n\r\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\r\nclass ZoomLevel {\r\n  /**\r\n   * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {number} index Slide index\r\n   * @param {PhotoSwipe=} pswp PhotoSwipe instance, can be undefined if not initialized yet\r\n   */\r\n  constructor(options, itemData, index, pswp) {\r\n    this.pswp = pswp;\r\n    this.options = options;\r\n    this.itemData = itemData;\r\n    this.index = index;\r\n  }\r\n\r\n  /**\r\n   * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n   *\r\n   * It should be called when either image or viewport size changes.\r\n   *\r\n   * @param {number} maxWidth\r\n   * @param {number} maxHeight\r\n   * @param {{ x?: number; y?: number }} panAreaSize\r\n   */\r\n  update(maxWidth, maxHeight, panAreaSize) {\r\n    this.elementSize = {\r\n      x: maxWidth,\r\n      y: maxHeight\r\n    };\r\n\r\n    this.panAreaSize = panAreaSize;\r\n\r\n    const hRatio = this.panAreaSize.x / this.elementSize.x;\r\n    const vRatio = this.panAreaSize.y / this.elementSize.y;\r\n\r\n    this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\r\n    this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio);\r\n\r\n    // zoom.vFill defines zoom level of the image\r\n    // when it has 100% of viewport vertical space (height)\r\n    this.vFill = Math.min(1, vRatio);\r\n\r\n    this.initial = this._getInitial();\r\n    this.secondary = this._getSecondary();\r\n    this.max = Math.max(\r\n      this.initial,\r\n      this.secondary,\r\n      this._getMax()\r\n    );\r\n\r\n    this.min = Math.min(\r\n      this.fit,\r\n      this.initial,\r\n      this.secondary\r\n    );\r\n\r\n    if (this.pswp) {\r\n      this.pswp.dispatch('zoomLevelsUpdate', { zoomLevels: this, slideData: this.itemData });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parses user-defined zoom option.\r\n   *\r\n   * @private\r\n   * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n   */\r\n  _parseZoomLevelOption(optionPrefix) {\r\n    // eslint-disable-next-line max-len\r\n    const optionName = /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */ (optionPrefix + 'ZoomLevel');\r\n    const optionValue = this.options[optionName];\r\n\r\n    if (!optionValue) {\r\n      return;\r\n    }\r\n\r\n    if (typeof optionValue === 'function') {\r\n      return optionValue(this);\r\n    }\r\n\r\n    if (optionValue === 'fill') {\r\n      return this.fill;\r\n    }\r\n\r\n    if (optionValue === 'fit') {\r\n      return this.fit;\r\n    }\r\n\r\n    return Number(optionValue);\r\n  }\r\n\r\n  /**\r\n   * Get zoom level to which image will be zoomed after double-tap gesture,\r\n   * or when user clicks on zoom icon,\r\n   * or mouse-click on image itself.\r\n   * If you return 1 image will be zoomed to its original size.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getSecondary() {\r\n    let currZoomLevel = this._parseZoomLevelOption('secondary');\r\n\r\n    if (currZoomLevel) {\r\n      return currZoomLevel;\r\n    }\r\n\r\n    // 3x of \"fit\" state, but not larger than original\r\n    currZoomLevel = Math.min(1, this.fit * 3);\r\n\r\n    if (currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\r\n      currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\r\n    }\r\n\r\n    return currZoomLevel;\r\n  }\r\n\r\n  /**\r\n   * Get initial image zoom level.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getInitial() {\r\n    return this._parseZoomLevelOption('initial') || this.fit;\r\n  }\r\n\r\n  /**\r\n   * Maximum zoom level when user zooms\r\n   * via zoom/pinch gesture,\r\n   * via cmd/ctrl-wheel or via trackpad.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getMax() {\r\n    const currZoomLevel = this._parseZoomLevelOption('max');\r\n\r\n    if (currZoomLevel) {\r\n      return currZoomLevel;\r\n    }\r\n\r\n    // max zoom level is x4 from \"fit state\",\r\n    // used for zoom gesture and ctrl/trackpad zoom\r\n    return Math.max(1, this.fit * 4);\r\n  }\r\n}\r\n\r\nexport default ZoomLevel;\r\n", "/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/**\r\n * @typedef {_SlideData & Record<string, any>} SlideData\r\n * @typedef {Object} _SlideData\r\n * @prop {HTMLElement=} element thumbnail element\r\n * @prop {string=} src image URL\r\n * @prop {string=} srcset image srcset\r\n * @prop {number=} w image width (deprecated)\r\n * @prop {number=} h image height (deprecated)\r\n * @prop {number=} width image width\r\n * @prop {number=} height image height\r\n * @prop {string=} msrc placeholder image URL that's displayed before large image is loaded\r\n * @prop {string=} alt image alt text\r\n * @prop {boolean=} thumbCropped whether thumbnail is cropped client-side or not\r\n * @prop {string=} html html content of a slide\r\n * @prop {'image' | 'html' | string} [type] slide type\r\n */\r\n\r\nimport {\r\n  createElement,\r\n  setTransform,\r\n  equalizePoints,\r\n  roundPoint,\r\n  toTransformString,\r\n  clamp,\r\n} from '../util/util.js';\r\n\r\nimport PanBounds from './pan-bounds.js';\r\nimport ZoomLevel from './zoom-level.js';\r\nimport { getPanAreaSize } from '../util/viewport-size.js';\r\n\r\n/**\r\n * Renders and allows to control a single slide\r\n */\r\nclass Slide {\r\n  /**\r\n   * @param {SlideData} data\r\n   * @param {number} index\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(data, index, pswp) {\r\n    this.data = data;\r\n    this.index = index;\r\n    this.pswp = pswp;\r\n    this.isActive = (index === pswp.currIndex);\r\n    this.currentResolution = 0;\r\n    /** @type {Point} */\r\n    this.panAreaSize = {};\r\n\r\n    this.isFirstSlide = (this.isActive && !pswp.opener.isOpen);\r\n\r\n    this.zoomLevels = new ZoomLevel(pswp.options, data, index, pswp);\r\n\r\n    this.pswp.dispatch('gettingData', {\r\n      slide: this,\r\n      data: this.data,\r\n      index\r\n    });\r\n\r\n    this.pan = {\r\n      x: 0,\r\n      y: 0\r\n    };\r\n\r\n    this.content = this.pswp.contentLoader.getContentBySlide(this);\r\n    this.container = createElement('pswp__zoom-wrap');\r\n\r\n    this.currZoomLevel = 1;\r\n    /** @type {number} */\r\n    this.width = this.content.width;\r\n    /** @type {number} */\r\n    this.height = this.content.height;\r\n\r\n    this.bounds = new PanBounds(this);\r\n\r\n    this.prevDisplayedWidth = -1;\r\n    this.prevDisplayedHeight = -1;\r\n\r\n    this.pswp.dispatch('slideInit', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * If this slide is active/current/visible\r\n   *\r\n   * @param {boolean} isActive\r\n   */\r\n  setIsActive(isActive) {\r\n    if (isActive && !this.isActive) {\r\n      // slide just became active\r\n      this.activate();\r\n    } else if (!isActive && this.isActive) {\r\n      // slide just became non-active\r\n      this.deactivate();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Appends slide content to DOM\r\n   *\r\n   * @param {HTMLElement} holderElement\r\n   */\r\n  append(holderElement) {\r\n    this.holderElement = holderElement;\r\n\r\n    // Slide appended to DOM\r\n    if (!this.data) {\r\n      this.holderElement.innerHTML = '';\r\n      return;\r\n    }\r\n\r\n    this.calculateSize();\r\n\r\n    this.container.style.transformOrigin = '0 0';\r\n\r\n    this.load();\r\n    this.appendHeavy();\r\n    this.updateContentSize();\r\n\r\n    this.holderElement.innerHTML = '';\r\n    this.holderElement.appendChild(this.container);\r\n\r\n    this.zoomAndPanToInitial();\r\n\r\n    this.pswp.dispatch('firstZoomPan', { slide: this });\r\n\r\n    this.applyCurrentZoomPan();\r\n\r\n    this.pswp.dispatch('afterSetContent', { slide: this });\r\n\r\n    if (this.isActive) {\r\n      this.activate();\r\n    }\r\n  }\r\n\r\n  load() {\r\n    this.content.load();\r\n    this.pswp.dispatch('slideLoad', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Append \"heavy\" DOM elements\r\n   *\r\n   * This may depend on a type of slide,\r\n   * but generally these are large images.\r\n   */\r\n  appendHeavy() {\r\n    const { pswp } = this;\r\n    const appendHeavyNearby = true; // todo\r\n\r\n    // Avoid appending heavy elements during animations\r\n    if (this.heavyAppended\r\n        || !pswp.opener.isOpen\r\n        || pswp.mainScroll.isShifted()\r\n        || (!this.isActive && !appendHeavyNearby)) {\r\n      return;\r\n    }\r\n\r\n    if (this.pswp.dispatch('appendHeavy', { slide: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.heavyAppended = true;\r\n\r\n    this.content.append();\r\n\r\n    this.pswp.dispatch('appendHeavyContent', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Triggered when this slide is active (selected).\r\n   *\r\n   * If it's part of opening/closing transition -\r\n   * activate() will trigger after the transition is ended.\r\n   */\r\n  activate() {\r\n    this.isActive = true;\r\n    this.appendHeavy();\r\n    this.content.activate();\r\n    this.pswp.dispatch('slideActivate', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Triggered when this slide becomes inactive.\r\n   *\r\n   * Slide can become inactive only after it was active.\r\n   */\r\n  deactivate() {\r\n    this.isActive = false;\r\n    this.content.deactivate();\r\n\r\n    // reset zoom level\r\n    this.currentResolution = 0;\r\n    this.zoomAndPanToInitial();\r\n    this.applyCurrentZoomPan();\r\n    this.updateContentSize();\r\n\r\n    this.pswp.dispatch('slideDeactivate', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * The slide should destroy itself, it will never be used again.\r\n   * (unbind all events and destroy internal components)\r\n   */\r\n  destroy() {\r\n    this.content.hasSlide = false;\r\n    this.content.remove();\r\n    this.pswp.dispatch('slideDestroy', { slide: this });\r\n  }\r\n\r\n  resize() {\r\n    if (this.currZoomLevel === this.zoomLevels.initial || !this.isActive) {\r\n      // Keep initial zoom level if it was before the resize,\r\n      // as well as when this slide is not active\r\n\r\n      // Reset position and scale to original state\r\n      this.calculateSize();\r\n      this.currentResolution = 0;\r\n      this.zoomAndPanToInitial();\r\n      this.applyCurrentZoomPan();\r\n      this.updateContentSize();\r\n    } else {\r\n      // readjust pan position if it's beyond the bounds\r\n      this.calculateSize();\r\n      this.bounds.update(this.currZoomLevel);\r\n      this.panTo(this.pan.x, this.pan.y);\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Apply size to current slide content,\r\n   * based on the current resolution and scale.\r\n   *\r\n   * @param {boolean=} force if size should be updated even if dimensions weren't changed\r\n   */\r\n  updateContentSize(force) {\r\n    // Use initial zoom level\r\n    // if resolution is not defined (user didn't zoom yet)\r\n    const scaleMultiplier = this.currentResolution || this.zoomLevels.initial;\r\n\r\n    if (!scaleMultiplier) {\r\n      return;\r\n    }\r\n\r\n    const width = Math.round(this.width * scaleMultiplier) || this.pswp.viewportSize.x;\r\n    const height = Math.round(this.height * scaleMultiplier) || this.pswp.viewportSize.y;\r\n\r\n    if (!this.sizeChanged(width, height) && !force) {\r\n      return;\r\n    }\r\n    this.content.setDisplayedSize(width, height);\r\n  }\r\n\r\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\r\n  sizeChanged(width, height) {\r\n    if (width !== this.prevDisplayedWidth\r\n        || height !== this.prevDisplayedHeight) {\r\n      this.prevDisplayedWidth = width;\r\n      this.prevDisplayedHeight = height;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  getPlaceholderElement() {\r\n    if (this.content.placeholder) {\r\n      return this.content.placeholder.element;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Zoom current slide image to...\r\n   *\r\n   * @param {number} destZoomLevel Destination zoom level.\r\n   * @param {{ x?: number; y?: number }} centerPoint\r\n   * Transform origin center point, or false if viewport center should be used.\r\n   * @param {number | false} [transitionDuration] Transition duration, may be set to 0.\r\n   * @param {boolean=} ignoreBounds Minimum and maximum zoom levels will be ignored.\r\n   * @return {boolean=} Returns true if animated.\r\n   */\r\n  zoomTo(destZoomLevel, centerPoint, transitionDuration, ignoreBounds) {\r\n    const { pswp } = this;\r\n    if (!this.isZoomable()\r\n        || pswp.mainScroll.isShifted()) {\r\n      return;\r\n    }\r\n\r\n    pswp.dispatch('beforeZoomTo', {\r\n      destZoomLevel, centerPoint, transitionDuration\r\n    });\r\n\r\n    // stop all pan and zoom transitions\r\n    pswp.animations.stopAllPan();\r\n\r\n    // if (!centerPoint) {\r\n    //   centerPoint = pswp.getViewportCenterPoint();\r\n    // }\r\n\r\n    const prevZoomLevel = this.currZoomLevel;\r\n\r\n    if (!ignoreBounds) {\r\n      destZoomLevel = clamp(destZoomLevel, this.zoomLevels.min, this.zoomLevels.max);\r\n    }\r\n\r\n    // if (transitionDuration === undefined) {\r\n    //   transitionDuration = this.pswp.options.zoomAnimationDuration;\r\n    // }\r\n\r\n    this.setZoomLevel(destZoomLevel);\r\n    this.pan.x = this.calculateZoomToPanOffset('x', centerPoint, prevZoomLevel);\r\n    this.pan.y = this.calculateZoomToPanOffset('y', centerPoint, prevZoomLevel);\r\n    roundPoint(this.pan);\r\n\r\n    const finishTransition = () => {\r\n      this._setResolution(destZoomLevel);\r\n      this.applyCurrentZoomPan();\r\n    };\r\n\r\n    if (!transitionDuration) {\r\n      finishTransition();\r\n    } else {\r\n      pswp.animations.startTransition({\r\n        isPan: true,\r\n        name: 'zoomTo',\r\n        target: this.container,\r\n        transform: this.getCurrentTransform(),\r\n        onComplete: finishTransition,\r\n        duration: transitionDuration,\r\n        easing: pswp.options.easing\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {{ x?: number, y?: number }} [centerPoint]\r\n   */\r\n  toggleZoom(centerPoint) {\r\n    this.zoomTo(\r\n      this.currZoomLevel === this.zoomLevels.initial\r\n        ? this.zoomLevels.secondary : this.zoomLevels.initial,\r\n      centerPoint,\r\n      this.pswp.options.zoomAnimationDuration\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Updates zoom level property and recalculates new pan bounds,\r\n   * unlike zoomTo it does not apply transform (use applyCurrentZoomPan)\r\n   *\r\n   * @param {number} currZoomLevel\r\n   */\r\n  setZoomLevel(currZoomLevel) {\r\n    this.currZoomLevel = currZoomLevel;\r\n    this.bounds.update(this.currZoomLevel);\r\n  }\r\n\r\n  /**\r\n   * Get pan position after zoom at a given `point`.\r\n   *\r\n   * Always call setZoomLevel(newZoomLevel) beforehand to recalculate\r\n   * pan bounds according to the new zoom level.\r\n   *\r\n   * @param {'x' | 'y'} axis\r\n   * @param {{ x?: number; y?: number }} [point]\r\n   * point based on which zoom is performed, usually refers to the current mouse position,\r\n   * if false - viewport center will be used.\r\n   * @param {number=} prevZoomLevel Zoom level before new zoom was applied.\r\n   */\r\n  calculateZoomToPanOffset(axis, point, prevZoomLevel) {\r\n    const totalPanDistance = this.bounds.max[axis] - this.bounds.min[axis];\r\n    if (totalPanDistance === 0) {\r\n      return this.bounds.center[axis];\r\n    }\r\n\r\n    if (!point) {\r\n      point = this.pswp.getViewportCenterPoint();\r\n    }\r\n\r\n    const zoomFactor = this.currZoomLevel / prevZoomLevel;\r\n    return this.bounds.correctPan(\r\n      axis,\r\n      (this.pan[axis] - point[axis]) * zoomFactor + point[axis]\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Apply pan and keep it within bounds.\r\n   *\r\n   * @param {number} panX\r\n   * @param {number} panY\r\n   */\r\n  panTo(panX, panY) {\r\n    this.pan.x = this.bounds.correctPan('x', panX);\r\n    this.pan.y = this.bounds.correctPan('y', panY);\r\n    this.applyCurrentZoomPan();\r\n  }\r\n\r\n  /**\r\n   * If the slide in the current state can be panned by the user\r\n   */\r\n  isPannable() {\r\n    return this.width && (this.currZoomLevel > this.zoomLevels.fit);\r\n  }\r\n\r\n  /**\r\n   * If the slide can be zoomed\r\n   */\r\n  isZoomable() {\r\n    return this.width && this.content.isZoomable();\r\n  }\r\n\r\n  /**\r\n   * Apply transform and scale based on\r\n   * the current pan position (this.pan) and zoom level (this.currZoomLevel)\r\n   */\r\n  applyCurrentZoomPan() {\r\n    this._applyZoomTransform(this.pan.x, this.pan.y, this.currZoomLevel);\r\n    if (this === this.pswp.currSlide) {\r\n      this.pswp.dispatch('zoomPanUpdate', { slide: this });\r\n    }\r\n  }\r\n\r\n  zoomAndPanToInitial() {\r\n    this.currZoomLevel = this.zoomLevels.initial;\r\n\r\n    // pan according to the zoom level\r\n    this.bounds.update(this.currZoomLevel);\r\n    equalizePoints(this.pan, this.bounds.center);\r\n    this.pswp.dispatch('initialZoomPan', { slide: this });\r\n  }\r\n\r\n  /**\r\n   * Set translate and scale based on current resolution\r\n   *\r\n   * @param {number} x\r\n   * @param {number} y\r\n   * @param {number} zoom\r\n   */\r\n  _applyZoomTransform(x, y, zoom) {\r\n    zoom /= this.currentResolution || this.zoomLevels.initial;\r\n    setTransform(this.container, x, y, zoom);\r\n  }\r\n\r\n  calculateSize() {\r\n    const { pswp } = this;\r\n\r\n    equalizePoints(\r\n      this.panAreaSize,\r\n      getPanAreaSize(pswp.options, pswp.viewportSize, this.data, this.index)\r\n    );\r\n\r\n    this.zoomLevels.update(this.width, this.height, this.panAreaSize);\r\n\r\n    pswp.dispatch('calcSlideSize', {\r\n      slide: this\r\n    });\r\n  }\r\n\r\n  getCurrentTransform() {\r\n    const scale = this.currZoomLevel / (this.currentResolution || this.zoomLevels.initial);\r\n    return toTransformString(this.pan.x, this.pan.y, scale);\r\n  }\r\n\r\n  /**\r\n   * Set resolution and re-render the image.\r\n   *\r\n   * For example, if the real image size is 2000x1500,\r\n   * and resolution is 0.5 - it will be rendered as 1000x750.\r\n   *\r\n   * Image with zoom level 2 and resolution 0.5 is\r\n   * the same as image with zoom level 1 and resolution 1.\r\n   *\r\n   * Used to optimize animations and make\r\n   * sure that browser renders image in highest quality.\r\n   * Also used by responsive images to load the correct one.\r\n   *\r\n   * @param {number} newResolution\r\n   */\r\n  _setResolution(newResolution) {\r\n    if (newResolution === this.currentResolution) {\r\n      return;\r\n    }\r\n\r\n    this.currentResolution = newResolution;\r\n    this.updateContentSize();\r\n\r\n    this.pswp.dispatch('resolutionChanged');\r\n  }\r\n}\r\n\r\nexport default Slide;\r\n", "import {\r\n  equalizePoints, roundPoint, clamp\r\n} from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n\r\nconst PAN_END_FRICTION = 0.35;\r\nconst VERTICAL_DRAG_FRICTION = 0.6;\r\n\r\n// 1 corresponds to the third of viewport height\r\nconst MIN_RATIO_TO_CLOSE = 0.4;\r\n\r\n// Minimum speed required to navigate\r\n// to next or previous slide\r\nconst MIN_NEXT_SLIDE_SPEED = 0.5;\r\n\r\n/**\r\n * @param {number} initialVelocity\r\n * @param {number} decelerationRate\r\n */\r\nfunction project(initialVelocity, decelerationRate) {\r\n  return initialVelocity * decelerationRate / (1 - decelerationRate);\r\n}\r\n\r\n/**\r\n * Handles single pointer dragging\r\n */\r\nclass DragHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n    this.pswp = gestures.pswp;\r\n    /** @type {Point} */\r\n    this.startPan = {};\r\n  }\r\n\r\n  start() {\r\n    equalizePoints(this.startPan, this.pswp.currSlide.pan);\r\n    this.pswp.animations.stopAll();\r\n  }\r\n\r\n  change() {\r\n    const { p1, prevP1, dragAxis, pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n\r\n    if (dragAxis === 'y'\r\n        && pswp.options.closeOnVerticalDrag\r\n        && currSlide.currZoomLevel <= currSlide.zoomLevels.fit\r\n        && !this.gestures.isMultitouch) {\r\n      // Handle vertical drag to close\r\n      const panY = currSlide.pan.y + (p1.y - prevP1.y);\r\n      if (!pswp.dispatch('verticalDrag', { panY }).defaultPrevented) {\r\n        this._setPanWithFriction('y', panY, VERTICAL_DRAG_FRICTION);\r\n        const bgOpacity = 1 - Math.abs(this._getVerticalDragRatio(currSlide.pan.y));\r\n        pswp.applyBgOpacity(bgOpacity);\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    } else {\r\n      const mainScrollChanged = this._panOrMoveMainScroll('x');\r\n      if (!mainScrollChanged) {\r\n        this._panOrMoveMainScroll('y');\r\n\r\n        roundPoint(currSlide.pan);\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    }\r\n  }\r\n\r\n  end() {\r\n    const { pswp, velocity } = this.gestures;\r\n    const { mainScroll } = pswp;\r\n    let indexDiff = 0;\r\n\r\n    pswp.animations.stopAll();\r\n\r\n    // Handle main scroll if it's shifted\r\n    if (mainScroll.isShifted()) {\r\n      // Position of the main scroll relative to the viewport\r\n      const mainScrollShiftDiff = mainScroll.x - mainScroll.getCurrSlideX();\r\n\r\n      // Ratio between 0 and 1:\r\n      // 0 - slide is not visible at all,\r\n      // 0.5 - half of the slide is vicible\r\n      // 1 - slide is fully visible\r\n      const currentSlideVisibilityRatio = (mainScrollShiftDiff / pswp.viewportSize.x);\r\n\r\n      // Go next slide.\r\n      //\r\n      // - if velocity and its direction is matched\r\n      //   and we see at least tiny part of the next slide\r\n      //\r\n      // - or if we see less than 50% of the current slide\r\n      //   and velocity is close to 0\r\n      //\r\n      if ((velocity.x < -MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio < 0)\r\n          || (velocity.x < 0.1 && currentSlideVisibilityRatio < -0.5)) {\r\n        // Go to next slide\r\n        indexDiff = 1;\r\n        velocity.x = Math.min(velocity.x, 0);\r\n      } else if ((velocity.x > MIN_NEXT_SLIDE_SPEED && currentSlideVisibilityRatio > 0)\r\n          || (velocity.x > -0.1 && currentSlideVisibilityRatio > 0.5)) {\r\n        // Go to prev slide\r\n        indexDiff = -1;\r\n        velocity.x = Math.max(velocity.x, 0);\r\n      }\r\n\r\n      mainScroll.moveIndexBy(indexDiff, true, velocity.x);\r\n    }\r\n\r\n    // Restore zoom level\r\n    if (pswp.currSlide.currZoomLevel > pswp.currSlide.zoomLevels.max\r\n        || this.gestures.isMultitouch) {\r\n      this.gestures.zoomLevels.correctZoomPan(true);\r\n    } else {\r\n      // we run two animations instead of one,\r\n      // as each axis has own pan boundaries and thus different spring function\r\n      // (correctZoomPan does not have this functionality,\r\n      //  it animates all properties with single timing function)\r\n      this._finishPanGestureForAxis('x');\r\n      this._finishPanGestureForAxis('y');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   */\r\n  _finishPanGestureForAxis(axis) {\r\n    const { pswp } = this;\r\n    const { currSlide } = pswp;\r\n    const { velocity } = this.gestures;\r\n    const { pan, bounds } = currSlide;\r\n    const panPos = pan[axis];\r\n    const restoreBgOpacity = (pswp.bgOpacity < 1 && axis === 'y');\r\n\r\n    // 0.995 means - scroll view loses 0.5% of its velocity per millisecond\r\n    // Inceasing this number will reduce travel distance\r\n    const decelerationRate = 0.995; // 0.99\r\n\r\n    // Pan position if there is no bounds\r\n    const projectedPosition = panPos + project(velocity[axis], decelerationRate);\r\n\r\n    if (restoreBgOpacity) {\r\n      const vDragRatio = this._getVerticalDragRatio(panPos);\r\n      const projectedVDragRatio = this._getVerticalDragRatio(projectedPosition);\r\n\r\n      // If we are above and moving upwards,\r\n      // or if we are below and moving downwards\r\n      if ((vDragRatio < 0 && projectedVDragRatio < -MIN_RATIO_TO_CLOSE)\r\n          || (vDragRatio > 0 && projectedVDragRatio > MIN_RATIO_TO_CLOSE)) {\r\n        pswp.close();\r\n        return;\r\n      }\r\n    }\r\n\r\n    // Pan position with corrected bounds\r\n    const correctedPanPosition = bounds.correctPan(axis, projectedPosition);\r\n\r\n    // Exit if pan position should not be changed\r\n    // or if speed it too low\r\n    if (panPos === correctedPanPosition) {\r\n      return;\r\n    }\r\n\r\n    // Overshoot if the final position is out of pan bounds\r\n    const dampingRatio = (correctedPanPosition === projectedPosition) ? 1 : 0.82;\r\n\r\n    const initialBgOpacity = pswp.bgOpacity;\r\n    const totalPanDist = correctedPanPosition - panPos;\r\n\r\n    pswp.animations.startSpring({\r\n      name: 'panGesture' + axis,\r\n      isPan: true,\r\n      start: panPos,\r\n      end: correctedPanPosition,\r\n      velocity: velocity[axis],\r\n      dampingRatio,\r\n      onUpdate: (pos) => {\r\n        // Animate opacity of background relative to Y pan position of an image\r\n        if (restoreBgOpacity && pswp.bgOpacity < 1) {\r\n          // 0 - start of animation, 1 - end of animation\r\n          const animationProgressRatio = 1 - (correctedPanPosition - pos) / totalPanDist;\r\n\r\n          // We clamp opacity to keep it between 0 and 1.\r\n          // As progress ratio can be larger than 1 due to overshoot,\r\n          // and we do not want to bounce opacity.\r\n          pswp.applyBgOpacity(clamp(\r\n            initialBgOpacity + (1 - initialBgOpacity) * animationProgressRatio,\r\n            0,\r\n            1\r\n          ));\r\n        }\r\n\r\n        pan[axis] = Math.floor(pos);\r\n        currSlide.applyCurrentZoomPan();\r\n      },\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Update position of the main scroll,\r\n   * or/and update pan position of the current slide.\r\n   *\r\n   * Should return true if it changes (or can change) main scroll.\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   */\r\n  _panOrMoveMainScroll(axis) {\r\n    const { p1, pswp, dragAxis, prevP1, isMultitouch } = this.gestures;\r\n    const { currSlide, mainScroll } = pswp;\r\n    const delta = (p1[axis] - prevP1[axis]);\r\n    const newMainScrollX = mainScroll.x + delta;\r\n\r\n    if (!delta) {\r\n      return;\r\n    }\r\n\r\n    // Always move main scroll if image can not be panned\r\n    if (axis === 'x' && !currSlide.isPannable() && !isMultitouch) {\r\n      mainScroll.moveTo(newMainScrollX, true);\r\n      return true; // changed main scroll\r\n    }\r\n\r\n    const { bounds } = currSlide;\r\n    const newPan = currSlide.pan[axis] + delta;\r\n\r\n    if (pswp.options.allowPanToNext\r\n        && dragAxis === 'x'\r\n        && axis === 'x'\r\n        && !isMultitouch) {\r\n      const currSlideMainScrollX = mainScroll.getCurrSlideX();\r\n\r\n      // Position of the main scroll relative to the viewport\r\n      const mainScrollShiftDiff = mainScroll.x - currSlideMainScrollX;\r\n\r\n      const isLeftToRight = delta > 0;\r\n      const isRightToLeft = !isLeftToRight;\r\n\r\n      if (newPan > bounds.min[axis] && isLeftToRight) {\r\n        // Panning from left to right, beyond the left edge\r\n\r\n        // Wether the image was at minimum pan position (or less)\r\n        // when this drag gesture started.\r\n        // Minimum pan position refers to the left edge of the image.\r\n        const wasAtMinPanPosition = (bounds.min[axis] <= this.startPan[axis]);\r\n\r\n        if (wasAtMinPanPosition) {\r\n          mainScroll.moveTo(newMainScrollX, true);\r\n          return true;\r\n        } else {\r\n          this._setPanWithFriction(axis, newPan);\r\n          //currSlide.pan[axis] = newPan;\r\n        }\r\n      } else if (newPan < bounds.max[axis] && isRightToLeft) {\r\n        // Paning from right to left, beyond the right edge\r\n\r\n        // Maximum pan position refers to the right edge of the image.\r\n        const wasAtMaxPanPosition = (this.startPan[axis] <= bounds.max[axis]);\r\n\r\n        if (wasAtMaxPanPosition) {\r\n          mainScroll.moveTo(newMainScrollX, true);\r\n          return true;\r\n        } else {\r\n          this._setPanWithFriction(axis, newPan);\r\n          //currSlide.pan[axis] = newPan;\r\n        }\r\n      } else {\r\n        // If main scroll is shifted\r\n        if (mainScrollShiftDiff !== 0) {\r\n          // If main scroll is shifted right\r\n          if (mainScrollShiftDiff > 0 /*&& isRightToLeft*/) {\r\n            mainScroll.moveTo(Math.max(newMainScrollX, currSlideMainScrollX), true);\r\n            return true;\r\n          } else if (mainScrollShiftDiff < 0 /*&& isLeftToRight*/) {\r\n            // Main scroll is shifted left (Position is less than 0 comparing to the viewport 0)\r\n            mainScroll.moveTo(Math.min(newMainScrollX, currSlideMainScrollX), true);\r\n            return true;\r\n          }\r\n        } else {\r\n          // We are within pan bounds, so just pan\r\n          this._setPanWithFriction(axis, newPan);\r\n        }\r\n      }\r\n    } else {\r\n      if (axis === 'y') {\r\n        // Do not pan vertically if main scroll is shifted o\r\n        if (!mainScroll.isShifted() && bounds.min.y !== bounds.max.y) {\r\n          this._setPanWithFriction(axis, newPan);\r\n        }\r\n      } else {\r\n        this._setPanWithFriction(axis, newPan);\r\n      }\r\n    }\r\n  }\r\n  //\r\n  // If we move above - the ratio is negative\r\n  // If we move below the ratio is positive\r\n\r\n  /**\r\n   * Relation between pan Y position and third of viewport height.\r\n   *\r\n   * When we are at initial position (center bounds) - the ratio is 0,\r\n   * if position is shifted upwards - the ratio is negative,\r\n   * if position is shifted downwards - the ratio is positive.\r\n   *\r\n   * @private\r\n   * @param {number} panY The current pan Y position.\r\n   */\r\n  _getVerticalDragRatio(panY) {\r\n    return (panY - this.pswp.currSlide.bounds.center.y)\r\n            / (this.pswp.viewportSize.y / 3);\r\n  }\r\n\r\n  /**\r\n   * Set pan position of the current slide.\r\n   * Apply friction if the position is beyond the pan bounds,\r\n   * or if custom friction is defined.\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} potentialPan\r\n   * @param {number=} customFriction (0.1 - 1)\r\n   */\r\n  _setPanWithFriction(axis, potentialPan, customFriction) {\r\n    const { pan, bounds } = this.pswp.currSlide;\r\n    const correctedPan = bounds.correctPan(axis, potentialPan);\r\n    // If we are out of pan bounds\r\n    if (correctedPan !== potentialPan || customFriction) {\r\n      const delta = Math.round(potentialPan - pan[axis]);\r\n      pan[axis] += delta * (customFriction || PAN_END_FRICTION);\r\n    } else {\r\n      pan[axis] = potentialPan;\r\n    }\r\n  }\r\n}\r\n\r\nexport default DragHandler;\r\n", "import {\r\n  equalizePoints, getDistanceBetween, clamp, pointsEqual\r\n} from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n\r\nconst UPPER_ZOOM_FRICTION = 0.05;\r\nconst LOWER_ZOOM_FRICTION = 0.15;\r\n\r\n\r\n/**\r\n * Get center point between two points\r\n *\r\n * @param {Point} p\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nfunction getZoomPointsCenter(p, p1, p2) {\r\n  p.x = (p1.x + p2.x) / 2;\r\n  p.y = (p1.y + p2.y) / 2;\r\n  return p;\r\n}\r\n\r\nclass ZoomHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n    this.pswp = this.gestures.pswp;\r\n    /** @type {Point} */\r\n    this._startPan = {};\r\n\r\n    /** @type {Point} */\r\n    this._startZoomPoint = {};\r\n    /** @type {Point} */\r\n    this._zoomPoint = {};\r\n  }\r\n\r\n  start() {\r\n    this._startZoomLevel = this.pswp.currSlide.currZoomLevel;\r\n    equalizePoints(this._startPan, this.pswp.currSlide.pan);\r\n    this.pswp.animations.stopAllPan();\r\n    this._wasOverFitZoomLevel = false;\r\n  }\r\n\r\n  change() {\r\n    const { p1, startP1, p2, startP2, pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n    const minZoomLevel = currSlide.zoomLevels.min;\r\n    const maxZoomLevel = currSlide.zoomLevels.max;\r\n\r\n    if (!currSlide.isZoomable() || pswp.mainScroll.isShifted()) {\r\n      return;\r\n    }\r\n\r\n    getZoomPointsCenter(this._startZoomPoint, startP1, startP2);\r\n    getZoomPointsCenter(this._zoomPoint, p1, p2);\r\n\r\n    let currZoomLevel = (1 / getDistanceBetween(startP1, startP2))\r\n                      * getDistanceBetween(p1, p2)\r\n                      * this._startZoomLevel;\r\n\r\n    // slightly over the zoom.fit\r\n    if (currZoomLevel > currSlide.zoomLevels.initial + (currSlide.zoomLevels.initial / 15)) {\r\n      this._wasOverFitZoomLevel = true;\r\n    }\r\n\r\n    if (currZoomLevel < minZoomLevel) {\r\n      if (pswp.options.pinchToClose\r\n          && !this._wasOverFitZoomLevel\r\n          && this._startZoomLevel <= currSlide.zoomLevels.initial) {\r\n        // fade out background if zooming out\r\n        const bgOpacity = 1 - ((minZoomLevel - currZoomLevel) / (minZoomLevel / 1.2));\r\n        if (!pswp.dispatch('pinchClose', { bgOpacity }).defaultPrevented) {\r\n          pswp.applyBgOpacity(bgOpacity);\r\n        }\r\n      } else {\r\n        // Apply the friction if zoom level is below the min\r\n        currZoomLevel = minZoomLevel - (minZoomLevel - currZoomLevel) * LOWER_ZOOM_FRICTION;\r\n      }\r\n    } else if (currZoomLevel > maxZoomLevel) {\r\n      // Apply the friction if zoom level is above the max\r\n      currZoomLevel = maxZoomLevel + (currZoomLevel - maxZoomLevel) * UPPER_ZOOM_FRICTION;\r\n    }\r\n\r\n    currSlide.pan.x = this._calculatePanForZoomLevel('x', currZoomLevel);\r\n    currSlide.pan.y = this._calculatePanForZoomLevel('y', currZoomLevel);\r\n\r\n    currSlide.setZoomLevel(currZoomLevel);\r\n    currSlide.applyCurrentZoomPan();\r\n  }\r\n\r\n  end() {\r\n    const { pswp } = this;\r\n    const { currSlide } = pswp;\r\n    if (currSlide.currZoomLevel < currSlide.zoomLevels.initial\r\n        && !this._wasOverFitZoomLevel\r\n        && pswp.options.pinchToClose) {\r\n      pswp.close();\r\n    } else {\r\n      this.correctZoomPan();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} currZoomLevel\r\n   */\r\n  _calculatePanForZoomLevel(axis, currZoomLevel) {\r\n    const zoomFactor = currZoomLevel / this._startZoomLevel;\r\n    return this._zoomPoint[axis]\r\n            - ((this._startZoomPoint[axis] - this._startPan[axis]) * zoomFactor);\r\n  }\r\n\r\n  /**\r\n   * Correct currZoomLevel and pan if they are\r\n   * beyond minimum or maximum values.\r\n   * With animation.\r\n   *\r\n   * @param {boolean=} ignoreGesture\r\n   * Wether gesture coordinates should be ignored when calculating destination pan position.\r\n   */\r\n  correctZoomPan(ignoreGesture) {\r\n    const { pswp } = this;\r\n    const { currSlide } = pswp;\r\n\r\n    if (!currSlide.isZoomable()) {\r\n      return;\r\n    }\r\n\r\n    if (this._zoomPoint.x === undefined) {\r\n      ignoreGesture = true;\r\n    }\r\n\r\n    const prevZoomLevel = currSlide.currZoomLevel;\r\n\r\n    /** @type {number} */\r\n    let destinationZoomLevel;\r\n    let currZoomLevelNeedsChange = true;\r\n\r\n    if (prevZoomLevel < currSlide.zoomLevels.initial) {\r\n      destinationZoomLevel = currSlide.zoomLevels.initial;\r\n      // zoom to min\r\n    } else if (prevZoomLevel > currSlide.zoomLevels.max) {\r\n      destinationZoomLevel = currSlide.zoomLevels.max;\r\n      // zoom to max\r\n    } else {\r\n      currZoomLevelNeedsChange = false;\r\n      destinationZoomLevel = prevZoomLevel;\r\n    }\r\n\r\n    const initialBgOpacity = pswp.bgOpacity;\r\n    const restoreBgOpacity = pswp.bgOpacity < 1;\r\n\r\n    const initialPan = equalizePoints({}, currSlide.pan);\r\n    let destinationPan = equalizePoints({}, initialPan);\r\n\r\n    if (ignoreGesture) {\r\n      this._zoomPoint.x = 0;\r\n      this._zoomPoint.y = 0;\r\n      this._startZoomPoint.x = 0;\r\n      this._startZoomPoint.y = 0;\r\n      this._startZoomLevel = prevZoomLevel;\r\n      equalizePoints(this._startPan, initialPan);\r\n    }\r\n\r\n    if (currZoomLevelNeedsChange) {\r\n      destinationPan = {\r\n        x: this._calculatePanForZoomLevel('x', destinationZoomLevel),\r\n        y: this._calculatePanForZoomLevel('y', destinationZoomLevel)\r\n      };\r\n    }\r\n\r\n    // set zoom level, so pan bounds are updated according to it\r\n    currSlide.setZoomLevel(destinationZoomLevel);\r\n\r\n    destinationPan = {\r\n      x: currSlide.bounds.correctPan('x', destinationPan.x),\r\n      y: currSlide.bounds.correctPan('y', destinationPan.y)\r\n    };\r\n\r\n    // return zoom level and its bounds to initial\r\n    currSlide.setZoomLevel(prevZoomLevel);\r\n\r\n    let panNeedsChange = true;\r\n    if (pointsEqual(destinationPan, initialPan)) {\r\n      panNeedsChange = false;\r\n    }\r\n\r\n    if (!panNeedsChange && !currZoomLevelNeedsChange && !restoreBgOpacity) {\r\n      // update resolution after gesture\r\n      currSlide._setResolution(destinationZoomLevel);\r\n      currSlide.applyCurrentZoomPan();\r\n\r\n      // nothing to animate\r\n      return;\r\n    }\r\n\r\n    pswp.animations.stopAllPan();\r\n\r\n    pswp.animations.startSpring({\r\n      isPan: true,\r\n      start: 0,\r\n      end: 1000,\r\n      velocity: 0,\r\n      dampingRatio: 1,\r\n      naturalFrequency: 40,\r\n      onUpdate: (now) => {\r\n        now /= 1000; // 0 - start, 1 - end\r\n\r\n        if (panNeedsChange || currZoomLevelNeedsChange) {\r\n          if (panNeedsChange) {\r\n            currSlide.pan.x = initialPan.x + (destinationPan.x - initialPan.x) * now;\r\n            currSlide.pan.y = initialPan.y + (destinationPan.y - initialPan.y) * now;\r\n          }\r\n\r\n          if (currZoomLevelNeedsChange) {\r\n            const newZoomLevel = prevZoomLevel\r\n                        + (destinationZoomLevel - prevZoomLevel) * now;\r\n            currSlide.setZoomLevel(newZoomLevel);\r\n          }\r\n\r\n          currSlide.applyCurrentZoomPan();\r\n        }\r\n\r\n        // Restore background opacity\r\n        if (restoreBgOpacity && pswp.bgOpacity < 1) {\r\n          // We clamp opacity to keep it between 0 and 1.\r\n          // As progress ratio can be larger than 1 due to overshoot,\r\n          // and we do not want to bounce opacity.\r\n          pswp.applyBgOpacity(clamp(\r\n            initialBgOpacity + (1 - initialBgOpacity) * now, 0, 1\r\n          ));\r\n        }\r\n      },\r\n      onComplete: () => {\r\n        // update resolution after transition ends\r\n        currSlide._setResolution(destinationZoomLevel);\r\n        currSlide.applyCurrentZoomPan();\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nexport default ZoomHandler;\r\n", "/**\r\n * @template T\r\n * @template P\r\n * @typedef {import('../types.js').AddPostfix<T, P>} AddPostfix<T, P>\r\n */\r\n\r\n/** @typedef {import('./gestures.js').default} Gestures */\r\n\r\n/** @typedef {'imageClick' | 'bgClick' | 'tap' | 'doubleTap'} Actions */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n\r\n/**\r\n * Whether the tap was performed on the main slide\r\n * (rather than controls or caption).\r\n *\r\n * @param {PointerEvent} event\r\n */\r\nfunction didTapOnMainContent(event) {\r\n  return !!(/** @type {HTMLElement} */ (event.target).closest('.pswp__container'));\r\n}\r\n\r\n/**\r\n * Tap, double-tap handler.\r\n */\r\nclass TapHandler {\r\n  /**\r\n   * @param {Gestures} gestures\r\n   */\r\n  constructor(gestures) {\r\n    this.gestures = gestures;\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  click(point, originalEvent) {\r\n    const targetClassList = /** @type {HTMLElement} */ (originalEvent.target).classList;\r\n    const isImageClick = targetClassList.contains('pswp__img');\r\n    const isBackgroundClick = targetClassList.contains('pswp__item')\r\n                              || targetClassList.contains('pswp__zoom-wrap');\r\n\r\n    if (isImageClick) {\r\n      this._doClickOrTapAction('imageClick', point, originalEvent);\r\n    } else if (isBackgroundClick) {\r\n      this._doClickOrTapAction('bgClick', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  tap(point, originalEvent) {\r\n    if (didTapOnMainContent(originalEvent)) {\r\n      this._doClickOrTapAction('tap', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  doubleTap(point, originalEvent) {\r\n    if (didTapOnMainContent(originalEvent)) {\r\n      this._doClickOrTapAction('doubleTap', point, originalEvent);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Actions} actionName\r\n   * @param {Point} point\r\n   * @param {PointerEvent} originalEvent\r\n   */\r\n  _doClickOrTapAction(actionName, point, originalEvent) {\r\n    const { pswp } = this.gestures;\r\n    const { currSlide } = pswp;\r\n    const actionFullName = /** @type {AddPostfix<Actions, 'Action'>} */ (actionName + 'Action');\r\n    const optionValue = pswp.options[actionFullName];\r\n\r\n    if (pswp.dispatch(actionFullName, { point, originalEvent }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (typeof optionValue === 'function') {\r\n      optionValue.call(pswp, point, originalEvent);\r\n      return;\r\n    }\r\n\r\n    switch (optionValue) {\r\n      case 'close':\r\n      case 'next':\r\n        pswp[optionValue]();\r\n        break;\r\n      case 'zoom':\r\n        currSlide.toggleZoom(point);\r\n        break;\r\n      case 'zoom-or-close':\r\n        // by default click zooms current image,\r\n        // if it can not be zoomed - gallery will be closed\r\n        if (currSlide.isZoomable()\r\n            && currSlide.zoomLevels.secondary !== currSlide.zoomLevels.initial) {\r\n          currSlide.toggleZoom(point);\r\n        } else if (pswp.options.clickToCloseNonZoomable) {\r\n          pswp.close();\r\n        }\r\n        break;\r\n      case 'toggle-controls':\r\n        this.gestures.pswp.element.classList.toggle('pswp--ui-visible');\r\n        // if (_controlsVisible) {\r\n        //   _ui.hideControls();\r\n        // } else {\r\n        //   _ui.showControls();\r\n        // }\r\n        break;\r\n    }\r\n  }\r\n}\r\n\r\nexport default TapHandler;\r\n", "import {\r\n  equalizePoints, pointsEqual, getDistanceBetween\r\n} from '../util/util.js';\r\n\r\nimport DragHandler from './drag-handler.js';\r\nimport ZoomHandler from './zoom-handler.js';\r\nimport TapHandler from './tap-handler.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n// How far should user should drag\r\n// until we can determine that the gesture is swipe and its direction\r\nconst AXIS_SWIPE_HYSTERISIS = 10;\r\n//const PAN_END_FRICTION = 0.35;\r\n\r\nconst DOUBLE_TAP_DELAY = 300; // ms\r\nconst MIN_TAP_DISTANCE = 25; // px\r\n\r\n/**\r\n * Gestures class bind touch, pointer or mouse events\r\n * and emits drag to drag-handler and zoom events zoom-handler.\r\n *\r\n * Drag and zoom events are emited in requestAnimationFrame,\r\n * and only when one of pointers was actually changed.\r\n */\r\nclass Gestures {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n\r\n    /** @type {'x' | 'y'} */\r\n    this.dragAxis = undefined;\r\n\r\n    // point objects are defined once and reused\r\n    // PhotoSwipe keeps track only of two pointers, others are ignored\r\n    /** @type {Point} */\r\n    this.p1 = {}; // the first pressed pointer\r\n    /** @type {Point} */\r\n    this.p2 = {}; // the second pressed pointer\r\n    /** @type {Point} */\r\n    this.prevP1 = {};\r\n    /** @type {Point} */\r\n    this.prevP2 = {};\r\n    /** @type {Point} */\r\n    this.startP1 = {};\r\n    /** @type {Point} */\r\n    this.startP2 = {};\r\n    /** @type {Point} */\r\n    this.velocity = {};\r\n\r\n    /** @type {Point} */\r\n    this._lastStartP1 = {};\r\n    /** @type {Point} */\r\n    this._intervalP1 = {};\r\n    this._numActivePoints = 0;\r\n    /** @type {Point[]} */\r\n    this._ongoingPointers = [];\r\n\r\n    this._touchEventEnabled = 'ontouchstart' in window;\r\n    this._pointerEventEnabled = !!(window.PointerEvent);\r\n    this.supportsTouch = this._touchEventEnabled\r\n                          || (this._pointerEventEnabled && navigator.maxTouchPoints > 1);\r\n\r\n    if (!this.supportsTouch) {\r\n      // disable pan to next slide for non-touch devices\r\n      pswp.options.allowPanToNext = false;\r\n    }\r\n\r\n    this.drag = new DragHandler(this);\r\n    this.zoomLevels = new ZoomHandler(this);\r\n    this.tapHandler = new TapHandler(this);\r\n\r\n    pswp.on('bindEvents', () => {\r\n      pswp.events.add(pswp.scrollWrap, 'click', e => this._onClick(e));\r\n\r\n      if (this._pointerEventEnabled) {\r\n        this._bindEvents('pointer', 'down', 'up', 'cancel');\r\n      } else if (this._touchEventEnabled) {\r\n        this._bindEvents('touch', 'start', 'end', 'cancel');\r\n\r\n        // In previous versions we also bound mouse event here,\r\n        // in case device supports both touch and mouse events,\r\n        // but newer versions of browsers now support PointerEvent.\r\n\r\n        // on iOS10 if you bind touchmove/end after touchstart,\r\n        // and you don't preventDefault touchstart (which PhotoSwipe does),\r\n        // preventDefault will have no effect on touchmove and touchend.\r\n        // Unless you bind it previously.\r\n        pswp.scrollWrap.ontouchmove = () => {}; // eslint-disable-line\r\n        pswp.scrollWrap.ontouchend = () => {}; // eslint-disable-line\r\n      } else {\r\n        this._bindEvents('mouse', 'down', 'up');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param {'mouse' | 'touch' | 'pointer'} pref\r\n   * @param {'down' | 'start'} down\r\n   * @param {'up' | 'end'} up\r\n   * @param {'cancel'} [cancel]\r\n   */\r\n  _bindEvents(pref, down, up, cancel) {\r\n    const { pswp } = this;\r\n    const { events } = pswp;\r\n\r\n    const cancelEvent = cancel ? pref + cancel : '';\r\n\r\n    events.add(pswp.scrollWrap, pref + down, this.onPointerDown.bind(this));\r\n    events.add(window, pref + 'move', this.onPointerMove.bind(this));\r\n    events.add(window, pref + up, this.onPointerUp.bind(this));\r\n    if (cancelEvent) {\r\n      events.add(pswp.scrollWrap, cancelEvent, this.onPointerUp.bind(this));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerDown(e) {\r\n    // We do not call preventDefault for touch events\r\n    // to allow browser to show native dialog on longpress\r\n    // (the one that allows to save image or open it in new tab).\r\n    //\r\n    // Desktop Safari allows to drag images when preventDefault isn't called on mousedown,\r\n    // even though preventDefault IS called on mousemove. That's why we preventDefault mousedown.\r\n    let isMousePointer;\r\n    if (e.type === 'mousedown' || e.pointerType === 'mouse') {\r\n      isMousePointer = true;\r\n    }\r\n\r\n    // Allow dragging only via left mouse button.\r\n    // http://www.quirksmode.org/js/events_properties.html\r\n    // https://developer.mozilla.org/en-US/docs/Web/API/event.button\r\n    if (isMousePointer && e.button > 0) {\r\n      return;\r\n    }\r\n\r\n    const { pswp } = this;\r\n\r\n    // if PhotoSwipe is opening or closing\r\n    if (!pswp.opener.isOpen) {\r\n      e.preventDefault();\r\n      return;\r\n    }\r\n\r\n    if (pswp.dispatch('pointerDown', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (isMousePointer) {\r\n      pswp.mouseDetected();\r\n\r\n      // preventDefault mouse event to prevent\r\n      // browser image drag feature\r\n      this._preventPointerEventBehaviour(e);\r\n    }\r\n\r\n    pswp.animations.stopAll();\r\n\r\n    this._updatePoints(e, 'down');\r\n\r\n    this.pointerDown = true;\r\n\r\n    if (this._numActivePoints === 1) {\r\n      this.dragAxis = null;\r\n      // we need to store initial point to determine the main axis,\r\n      // drag is activated only after the axis is determined\r\n      equalizePoints(this.startP1, this.p1);\r\n    }\r\n\r\n    if (this._numActivePoints > 1) {\r\n      // Tap or double tap should not trigger if more than one pointer\r\n      this._clearTapTimer();\r\n      this.isMultitouch = true;\r\n    } else {\r\n      this.isMultitouch = false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerMove(e) {\r\n    e.preventDefault(); // always preventDefault move event\r\n\r\n    if (!this._numActivePoints) {\r\n      return;\r\n    }\r\n\r\n    this._updatePoints(e, 'move');\r\n\r\n    if (this.pswp.dispatch('pointerMove', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._numActivePoints === 1 && !this.isDragging) {\r\n      if (!this.dragAxis) {\r\n        this._calculateDragDirection();\r\n      }\r\n\r\n      // Drag axis was detected, emit drag.start\r\n      if (this.dragAxis && !this.isDragging) {\r\n        if (this.isZooming) {\r\n          this.isZooming = false;\r\n          this.zoomLevels.end();\r\n        }\r\n\r\n        this.isDragging = true;\r\n        this._clearTapTimer(); // Tap can not trigger after drag\r\n\r\n        // Adjust starting point\r\n        this._updateStartPoints();\r\n        this._intervalTime = Date.now();\r\n        //this._startTime = this._intervalTime;\r\n        this._velocityCalculated = false;\r\n        equalizePoints(this._intervalP1, this.p1);\r\n        this.velocity.x = 0;\r\n        this.velocity.y = 0;\r\n        this.drag.start();\r\n\r\n        this._rafStopLoop();\r\n        this._rafRenderLoop();\r\n      }\r\n    } else if (this._numActivePoints > 1 && !this.isZooming) {\r\n      this._finishDrag();\r\n\r\n      this.isZooming = true;\r\n\r\n      // Adjust starting points\r\n      this._updateStartPoints();\r\n\r\n      this.zoomLevels.start();\r\n\r\n      this._rafStopLoop();\r\n      this._rafRenderLoop();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _finishDrag() {\r\n    if (this.isDragging) {\r\n      this.isDragging = false;\r\n\r\n      // Try to calculate velocity,\r\n      // if it wasn't calculated yet in drag.change\r\n      if (!this._velocityCalculated) {\r\n        this._updateVelocity(true);\r\n      }\r\n\r\n      this.drag.end();\r\n      this.dragAxis = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {PointerEvent} e\r\n   */\r\n  onPointerUp(e) {\r\n    if (!this._numActivePoints) {\r\n      return;\r\n    }\r\n\r\n    this._updatePoints(e, 'up');\r\n\r\n    if (this.pswp.dispatch('pointerUp', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this._numActivePoints === 0) {\r\n      this.pointerDown = false;\r\n      this._rafStopLoop();\r\n\r\n      if (this.isDragging) {\r\n        this._finishDrag();\r\n      } else if (!this.isZooming && !this.isMultitouch) {\r\n        //this.zoomLevels.correctZoomPan();\r\n        this._finishTap(e);\r\n      }\r\n    }\r\n\r\n    if (this._numActivePoints < 2 && this.isZooming) {\r\n      this.isZooming = false;\r\n      this.zoomLevels.end();\r\n\r\n      if (this._numActivePoints === 1) {\r\n        // Since we have 1 point left, we need to reinitiate drag\r\n        this.dragAxis = null;\r\n        this._updateStartPoints();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _rafRenderLoop() {\r\n    if (this.isDragging || this.isZooming) {\r\n      this._updateVelocity();\r\n\r\n      if (this.isDragging) {\r\n        // make sure that pointer moved since the last update\r\n        if (!pointsEqual(this.p1, this.prevP1)) {\r\n          this.drag.change();\r\n        }\r\n      } else /* if (this.isZooming) */ {\r\n        if (!pointsEqual(this.p1, this.prevP1)\r\n            || !pointsEqual(this.p2, this.prevP2)) {\r\n          this.zoomLevels.change();\r\n        }\r\n      }\r\n\r\n      this._updatePrevPoints();\r\n      this.raf = requestAnimationFrame(this._rafRenderLoop.bind(this));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Update velocity at 50ms interval\r\n   *\r\n   * @param {boolean=} force\r\n   */\r\n  _updateVelocity(force) {\r\n    const time = Date.now();\r\n    const duration = time - this._intervalTime;\r\n\r\n    if (duration < 50 && !force) {\r\n      return;\r\n    }\r\n\r\n\r\n    this.velocity.x = this._getVelocity('x', duration);\r\n    this.velocity.y = this._getVelocity('y', duration);\r\n\r\n    this._intervalTime = time;\r\n    equalizePoints(this._intervalP1, this.p1);\r\n    this._velocityCalculated = true;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _finishTap(e) {\r\n    const { mainScroll } = this.pswp;\r\n\r\n    // Do not trigger tap events if main scroll is shifted\r\n    if (mainScroll.isShifted()) {\r\n      // restore main scroll position\r\n      // (usually happens if stopped in the middle of animation)\r\n      mainScroll.moveIndexBy(0, true);\r\n      return;\r\n    }\r\n\r\n    // Do not trigger tap for touchcancel or pointercancel\r\n    if (e.type.indexOf('cancel') > 0) {\r\n      return;\r\n    }\r\n\r\n    // Trigger click instead of tap for mouse events\r\n    if (e.type === 'mouseup' || e.pointerType === 'mouse') {\r\n      this.tapHandler.click(this.startP1, e);\r\n      return;\r\n    }\r\n\r\n    // Disable delay if there is no doubleTapAction\r\n    const tapDelay = this.pswp.options.doubleTapAction ? DOUBLE_TAP_DELAY : 0;\r\n\r\n    // If tapTimer is defined - we tapped recently,\r\n    // check if the current tap is close to the previous one,\r\n    // if yes - trigger double tap\r\n    if (this._tapTimer) {\r\n      this._clearTapTimer();\r\n      // Check if two taps were more or less on the same place\r\n      if (getDistanceBetween(this._lastStartP1, this.startP1) < MIN_TAP_DISTANCE) {\r\n        this.tapHandler.doubleTap(this.startP1, e);\r\n      }\r\n    } else {\r\n      equalizePoints(this._lastStartP1, this.startP1);\r\n      this._tapTimer = setTimeout(() => {\r\n        this.tapHandler.tap(this.startP1, e);\r\n        this._clearTapTimer();\r\n      }, tapDelay);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _clearTapTimer() {\r\n    if (this._tapTimer) {\r\n      clearTimeout(this._tapTimer);\r\n      this._tapTimer = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get velocity for axis\r\n   *\r\n   * @private\r\n   * @param {'x' | 'y'} axis\r\n   * @param {number} duration\r\n   */\r\n  _getVelocity(axis, duration) {\r\n    // displacement is like distance, but can be negative.\r\n    const displacement = this.p1[axis] - this._intervalP1[axis];\r\n\r\n    if (Math.abs(displacement) > 1 && duration > 5) {\r\n      return displacement / duration;\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _rafStopLoop() {\r\n    if (this.raf) {\r\n      cancelAnimationFrame(this.raf);\r\n      this.raf = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _preventPointerEventBehaviour(e) {\r\n    // TODO find a way to disable e.preventDefault on some elements\r\n    //      via event or some class or something\r\n    e.preventDefault();\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Parses and normalizes points from the touch, mouse or pointer event.\r\n   * Updates p1 and p2.\r\n   *\r\n   * @private\r\n   * @param {PointerEvent | TouchEvent} e\r\n   * @param {'up' | 'down' | 'move'} pointerType Normalized pointer type\r\n   */\r\n  _updatePoints(e, pointerType) {\r\n    if (this._pointerEventEnabled) {\r\n      const pointerEvent = /** @type {PointerEvent} */ (e);\r\n      // Try to find the current pointer in ongoing pointers by its ID\r\n      const pointerIndex = this._ongoingPointers.findIndex((ongoingPoiner) => {\r\n        return ongoingPoiner.id === pointerEvent.pointerId;\r\n      });\r\n\r\n      if (pointerType === 'up' && pointerIndex > -1) {\r\n        // release the pointer - remove it from ongoing\r\n        this._ongoingPointers.splice(pointerIndex, 1);\r\n      } else if (pointerType === 'down' && pointerIndex === -1) {\r\n        // add new pointer\r\n        this._ongoingPointers.push(this._convertEventPosToPoint(pointerEvent, {}));\r\n      } else if (pointerIndex > -1) {\r\n        // update existing pointer\r\n        this._convertEventPosToPoint(pointerEvent, this._ongoingPointers[pointerIndex]);\r\n      }\r\n\r\n      this._numActivePoints = this._ongoingPointers.length;\r\n\r\n      // update points that PhotoSwipe uses\r\n      // to calculate position and scale\r\n      if (this._numActivePoints > 0) {\r\n        equalizePoints(this.p1, this._ongoingPointers[0]);\r\n      }\r\n\r\n      if (this._numActivePoints > 1) {\r\n        equalizePoints(this.p2, this._ongoingPointers[1]);\r\n      }\r\n    } else {\r\n      const touchEvent = /** @type {TouchEvent} */ (e);\r\n\r\n      this._numActivePoints = 0;\r\n      if (touchEvent.type.indexOf('touch') > -1) {\r\n        // Touch Event\r\n        // https://developer.mozilla.org/en-US/docs/Web/API/TouchEvent\r\n        if (touchEvent.touches && touchEvent.touches.length > 0) {\r\n          this._convertEventPosToPoint(touchEvent.touches[0], this.p1);\r\n          this._numActivePoints++;\r\n          if (touchEvent.touches.length > 1) {\r\n            this._convertEventPosToPoint(touchEvent.touches[1], this.p2);\r\n            this._numActivePoints++;\r\n          }\r\n        }\r\n      } else {\r\n        // Mouse Event\r\n        this._convertEventPosToPoint(/** @type {PointerEvent} */ (e), this.p1);\r\n        if (pointerType === 'up') {\r\n          // clear all points on mouseup\r\n          this._numActivePoints = 0;\r\n        } else {\r\n          this._numActivePoints++;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // update points that were used during previous rAF tick\r\n  _updatePrevPoints() {\r\n    equalizePoints(this.prevP1, this.p1);\r\n    equalizePoints(this.prevP2, this.p2);\r\n  }\r\n\r\n  // update points at the start of gesture\r\n  _updateStartPoints() {\r\n    equalizePoints(this.startP1, this.p1);\r\n    equalizePoints(this.startP2, this.p2);\r\n    this._updatePrevPoints();\r\n  }\r\n\r\n  _calculateDragDirection() {\r\n    if (this.pswp.mainScroll.isShifted()) {\r\n      // if main scroll position is shifted \u2013 direction is always horizontal\r\n      this.dragAxis = 'x';\r\n    } else {\r\n      // calculate delta of the last touchmove tick\r\n      const diff = Math.abs(this.p1.x - this.startP1.x) - Math.abs(this.p1.y - this.startP1.y);\r\n\r\n      if (diff !== 0) {\r\n        // check if pointer was shifted horizontally or vertically\r\n        const axisToCheck = diff > 0 ? 'x' : 'y';\r\n\r\n        if (Math.abs(this.p1[axisToCheck] - this.startP1[axisToCheck]) >= AXIS_SWIPE_HYSTERISIS) {\r\n          this.dragAxis = axisToCheck;\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Converts touch, pointer or mouse event\r\n   * to PhotoSwipe point.\r\n   *\r\n   * @private\r\n   * @param {Touch | PointerEvent} e\r\n   * @param {Point} p\r\n   */\r\n  _convertEventPosToPoint(e, p) {\r\n    p.x = e.pageX - this.pswp.offset.x;\r\n    p.y = e.pageY - this.pswp.offset.y;\r\n\r\n    if ('pointerId' in e) {\r\n      p.id = e.pointerId;\r\n    } else if (e.identifier !== undefined) {\r\n      p.id = e.identifier;\r\n    }\r\n\r\n    return p;\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {PointerEvent} e\r\n   */\r\n  _onClick(e) {\r\n    // Do not allow click event to pass through after drag\r\n    if (this.pswp.mainScroll.isShifted()) {\r\n      e.preventDefault();\r\n      e.stopPropagation();\r\n    }\r\n  }\r\n}\r\n\r\nexport default Gestures;\r\n", "import {\r\n  setTransform,\r\n  createElement,\r\n} from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./slide/slide.js').default} Slide */\r\n\r\n/** @typedef {{ el: HTMLDivElement; slide?: Slide }} ItemHolder */\r\n\r\nconst MAIN_SCROLL_END_FRICTION = 0.35;\r\n\r\n\r\n// const MIN_SWIPE_TRANSITION_DURATION = 250;\r\n// const MAX_SWIPE_TRABSITION_DURATION = 500;\r\n// const DEFAULT_SWIPE_TRANSITION_DURATION = 333;\r\n\r\n/**\r\n * Handles movement of the main scrolling container\r\n * (for example, it repositions when user swipes left or right).\r\n *\r\n * Also stores its state.\r\n */\r\nclass MainScroll {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    this.x = 0;\r\n\r\n    /** @type {number} */\r\n    this.slideWidth = undefined;\r\n\r\n    /** @type {ItemHolder[]} */\r\n    this.itemHolders = undefined;\r\n\r\n    this.resetPosition();\r\n  }\r\n\r\n  /**\r\n   * Position the scroller and slide containers\r\n   * according to viewport size.\r\n   *\r\n   * @param {boolean=} resizeSlides Whether slides content should resized\r\n   */\r\n  resize(resizeSlides) {\r\n    const { pswp } = this;\r\n    const newSlideWidth = Math.round(\r\n      pswp.viewportSize.x + pswp.viewportSize.x * pswp.options.spacing\r\n    );\r\n    // Mobile browsers might trigger a resize event during a gesture.\r\n    // (due to toolbar appearing or hiding).\r\n    // Avoid re-adjusting main scroll position if width wasn't changed\r\n    const slideWidthChanged = (newSlideWidth !== this.slideWidth);\r\n\r\n    if (slideWidthChanged) {\r\n      this.slideWidth = newSlideWidth;\r\n      this.moveTo(this.getCurrSlideX());\r\n    }\r\n\r\n    this.itemHolders.forEach((itemHolder, index) => {\r\n      if (slideWidthChanged) {\r\n        setTransform(itemHolder.el, (index + this._containerShiftIndex)\r\n                                    * this.slideWidth);\r\n      }\r\n\r\n      if (resizeSlides && itemHolder.slide) {\r\n        itemHolder.slide.resize();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Reset X position of the main scroller to zero\r\n   */\r\n  resetPosition() {\r\n    // Position on the main scroller (offset)\r\n    // it is independent from slide index\r\n    this._currPositionIndex = 0;\r\n    this._prevPositionIndex = 0;\r\n\r\n    // This will force recalculation of size on next resize()\r\n    this.slideWidth = 0;\r\n\r\n    // _containerShiftIndex*viewportSize will give you amount of transform of the current slide\r\n    this._containerShiftIndex = -1;\r\n  }\r\n\r\n  /**\r\n   * Create and append array of three items\r\n   * that hold data about slides in DOM\r\n   */\r\n  appendHolders() {\r\n    this.itemHolders = [];\r\n\r\n    // append our three slide holders -\r\n    // previous, current, and next\r\n    for (let i = 0; i < 3; i++) {\r\n      const el = createElement('pswp__item', false, this.pswp.container);\r\n\r\n      // hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\r\n      el.style.display = (i === 1) ? 'block' : 'none';\r\n\r\n      this.itemHolders.push({\r\n        el,\r\n        //index: -1\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Whether the main scroll can be horizontally swiped to the next or previous slide.\r\n   */\r\n  canBeSwiped() {\r\n    return this.pswp.getNumItems() > 1;\r\n  }\r\n\r\n  /**\r\n   * Move main scroll by X amount of slides.\r\n   * For example:\r\n   *   `-1` will move to the previous slide,\r\n   *    `0` will reset the scroll position of the current slide,\r\n   *    `3` will move three slides forward\r\n   *\r\n   * If loop option is enabled - index will be automatically looped too,\r\n   * (for example `-1` will move to the last slide of the gallery).\r\n   *\r\n   * @param {number} diff\r\n   * @param {boolean=} animate\r\n   * @param {number=} velocityX\r\n   * @returns {boolean} whether index was changed or not\r\n   */\r\n  moveIndexBy(diff, animate, velocityX) {\r\n    const { pswp } = this;\r\n    let newIndex = pswp.potentialIndex + diff;\r\n    const numSlides = pswp.getNumItems();\r\n\r\n    if (pswp.canLoop()) {\r\n      newIndex = pswp.getLoopedIndex(newIndex);\r\n      const distance = (diff + numSlides) % numSlides;\r\n      if (distance <= numSlides / 2) {\r\n        // go forward\r\n        diff = distance;\r\n      } else {\r\n        // go backwards\r\n        diff = distance - numSlides;\r\n      }\r\n    } else {\r\n      if (newIndex < 0) {\r\n        newIndex = 0;\r\n      } else if (newIndex >= numSlides) {\r\n        newIndex = numSlides - 1;\r\n      }\r\n      diff = newIndex - pswp.potentialIndex;\r\n    }\r\n\r\n    pswp.potentialIndex = newIndex;\r\n    this._currPositionIndex -= diff;\r\n\r\n    pswp.animations.stopMainScroll();\r\n\r\n    const destinationX = this.getCurrSlideX();\r\n    if (!animate) {\r\n      this.moveTo(destinationX);\r\n      this.updateCurrItem();\r\n    } else {\r\n      pswp.animations.startSpring({\r\n        isMainScroll: true,\r\n        start: this.x,\r\n        end: destinationX,\r\n        velocity: velocityX || 0,\r\n        naturalFrequency: 30,\r\n        dampingRatio: 1, //0.7,\r\n        onUpdate: (x) => {\r\n          this.moveTo(x);\r\n        },\r\n        onComplete: () => {\r\n          this.updateCurrItem();\r\n          pswp.appendHeavy();\r\n        }\r\n      });\r\n\r\n      let currDiff = pswp.potentialIndex - pswp.currIndex;\r\n      if (pswp.canLoop()) {\r\n        const currDistance = (currDiff + numSlides) % numSlides;\r\n        if (currDistance <= numSlides / 2) {\r\n          // go forward\r\n          currDiff = currDistance;\r\n        } else {\r\n          // go backwards\r\n          currDiff = currDistance - numSlides;\r\n        }\r\n      }\r\n\r\n      // Force-append new slides during transition\r\n      // if difference between slides is more than 1\r\n      if (Math.abs(currDiff) > 1) {\r\n        this.updateCurrItem();\r\n      }\r\n    }\r\n\r\n    if (diff) {\r\n      return true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * X position of the main scroll for the current slide\r\n   * (ignores position during dragging)\r\n   */\r\n  getCurrSlideX() {\r\n    return this.slideWidth * this._currPositionIndex;\r\n  }\r\n\r\n  /**\r\n   * Whether scroll position is shifted.\r\n   * For example, it will return true if the scroll is being dragged or animated.\r\n   */\r\n  isShifted() {\r\n    return this.x !== this.getCurrSlideX();\r\n  }\r\n\r\n  /**\r\n   * Update slides X positions and set their content\r\n   */\r\n  updateCurrItem() {\r\n    const { pswp } = this;\r\n    const positionDifference = this._prevPositionIndex - this._currPositionIndex;\r\n\r\n    if (!positionDifference) {\r\n      return;\r\n    }\r\n\r\n    this._prevPositionIndex = this._currPositionIndex;\r\n\r\n    pswp.currIndex = pswp.potentialIndex;\r\n\r\n    let diffAbs = Math.abs(positionDifference);\r\n    let tempHolder;\r\n\r\n    if (diffAbs >= 3) {\r\n      this._containerShiftIndex += positionDifference + (positionDifference > 0 ? -3 : 3);\r\n      diffAbs = 3;\r\n    }\r\n\r\n    for (let i = 0; i < diffAbs; i++) {\r\n      if (positionDifference > 0) {\r\n        tempHolder = this.itemHolders.shift();\r\n        this.itemHolders[2] = tempHolder; // move first to last\r\n\r\n        this._containerShiftIndex++;\r\n\r\n        setTransform(tempHolder.el, (this._containerShiftIndex + 2) * this.slideWidth);\r\n\r\n        pswp.setContent(tempHolder, (pswp.currIndex - diffAbs) + i + 2);\r\n      } else {\r\n        tempHolder = this.itemHolders.pop();\r\n        this.itemHolders.unshift(tempHolder); // move last to first\r\n\r\n        this._containerShiftIndex--;\r\n\r\n        setTransform(tempHolder.el, this._containerShiftIndex * this.slideWidth);\r\n\r\n        pswp.setContent(tempHolder, (pswp.currIndex + diffAbs) - i - 2);\r\n      }\r\n    }\r\n\r\n    // Reset transfrom every 50ish navigations in one direction.\r\n    //\r\n    // Otherwise transform will keep growing indefinitely,\r\n    // which might cause issues as browsers have a maximum transform limit.\r\n    // I wasn't able to reach it, but just to be safe.\r\n    // This should not cause noticable lag.\r\n    if (Math.abs(this._containerShiftIndex) > 50 && !this.isShifted()) {\r\n      this.resetPosition();\r\n      this.resize();\r\n    }\r\n\r\n    // Pan transition might be running (and consntantly updating pan position)\r\n    pswp.animations.stopAllPan();\r\n\r\n    this.itemHolders.forEach((itemHolder, i) => {\r\n      if (itemHolder.slide) {\r\n        // Slide in the 2nd holder is always active\r\n        itemHolder.slide.setIsActive(i === 1);\r\n      }\r\n    });\r\n\r\n    pswp.currSlide = this.itemHolders[1].slide;\r\n    pswp.contentLoader.updateLazy(positionDifference);\r\n\r\n    pswp.currSlide.applyCurrentZoomPan();\r\n    pswp.dispatch('change');\r\n  }\r\n\r\n  /**\r\n   * Move the X position of the main scroll container\r\n   *\r\n   * @param {number} x\r\n   * @param {boolean=} dragging\r\n   */\r\n  moveTo(x, dragging) {\r\n    /** @type {number} */\r\n    let newSlideIndexOffset;\r\n    /** @type {number} */\r\n    let delta;\r\n\r\n    if (!this.pswp.canLoop() && dragging) {\r\n      // Apply friction\r\n      newSlideIndexOffset = ((this.slideWidth * this._currPositionIndex) - x) / this.slideWidth;\r\n      newSlideIndexOffset += this.pswp.currIndex;\r\n      delta = Math.round(x - this.x);\r\n\r\n      if ((newSlideIndexOffset < 0 && delta > 0)\r\n          || (newSlideIndexOffset >= this.pswp.getNumItems() - 1 && delta < 0)) {\r\n        x = this.x + (delta * MAIN_SCROLL_END_FRICTION);\r\n      }\r\n    }\r\n\r\n    this.x = x;\r\n    setTransform(this.pswp.container, x);\r\n\r\n    this.pswp.dispatch('moveMainScroll', { x, dragging });\r\n  }\r\n}\r\n\r\nexport default MainScroll;\r\n", "import { specialKeyUsed } from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('./types.js').Methods<T>} Methods<T>\r\n */\r\n\r\n/**\r\n * - Manages keyboard shortcuts.\r\n * - Heps trap focus within photoswipe.\r\n */\r\nclass Keyboard {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n\r\n    pswp.on('bindEvents', () => {\r\n      // Dialog was likely opened by keyboard if initial point is not defined\r\n      if (!pswp.options.initialPointerPos) {\r\n        // focus causes layout,\r\n        // which causes lag during the animation,\r\n        // that's why we delay it until the opener transition ends\r\n        this._focusRoot();\r\n      }\r\n\r\n      pswp.events.add(document, 'focusin', this._onFocusIn.bind(this));\r\n      pswp.events.add(document, 'keydown', this._onKeyDown.bind(this));\r\n    });\r\n\r\n    const lastActiveElement = /** @type {HTMLElement} */ (document.activeElement);\r\n    pswp.on('destroy', () => {\r\n      if (pswp.options.returnFocus\r\n          && lastActiveElement\r\n          && this._wasFocused) {\r\n        lastActiveElement.focus();\r\n      }\r\n    });\r\n  }\r\n\r\n  _focusRoot() {\r\n    if (!this._wasFocused) {\r\n      this.pswp.element.focus();\r\n      this._wasFocused = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {KeyboardEvent} e\r\n   */\r\n  _onKeyDown(e) {\r\n    const { pswp } = this;\r\n\r\n    if (pswp.dispatch('keydown', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (specialKeyUsed(e)) {\r\n      // don't do anything if special key pressed\r\n      // to prevent from overriding default browser actions\r\n      // for example, in Chrome on Mac cmd+arrow-left returns to previous page\r\n      return;\r\n    }\r\n\r\n    /** @type {Methods<PhotoSwipe>} */\r\n    let keydownAction;\r\n    /** @type {'x' | 'y'} */\r\n    let axis;\r\n    let isForward;\r\n\r\n    switch (e.keyCode) {\r\n      case 27: // esc\r\n        if (pswp.options.escKey) {\r\n          keydownAction = 'close';\r\n        }\r\n        break;\r\n      case 90: // z key\r\n        keydownAction = 'toggleZoom';\r\n        break;\r\n      case 37: // left\r\n        axis = 'x';\r\n        break;\r\n      case 38: // top\r\n        axis = 'y';\r\n        break;\r\n      case 39: // right\r\n        axis = 'x';\r\n        isForward = true;\r\n        break;\r\n      case 40: // bottom\r\n        isForward = true;\r\n        axis = 'y';\r\n        break;\r\n      case 9: // tab\r\n        this._focusRoot();\r\n        break;\r\n      default:\r\n    }\r\n\r\n    // if left/right/top/bottom key\r\n    if (axis) {\r\n      // prevent page scroll\r\n      e.preventDefault();\r\n\r\n      const { currSlide } = pswp;\r\n\r\n      if (pswp.options.arrowKeys\r\n          && axis === 'x'\r\n          && pswp.getNumItems() > 1) {\r\n        keydownAction = isForward ? 'next' : 'prev';\r\n      } else if (currSlide && currSlide.currZoomLevel > currSlide.zoomLevels.fit) {\r\n        // up/down arrow keys pan the image vertically\r\n        // left/right arrow keys pan horizontally.\r\n        // Unless there is only one image,\r\n        // or arrowKeys option is disabled\r\n        currSlide.pan[axis] += isForward ? -80 : 80;\r\n        currSlide.panTo(currSlide.pan.x, currSlide.pan.y);\r\n      }\r\n    }\r\n\r\n    if (keydownAction) {\r\n      e.preventDefault();\r\n      pswp[keydownAction]();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Trap focus inside photoswipe\r\n   *\r\n   * @param {FocusEvent} e\r\n   */\r\n  _onFocusIn(e) {\r\n    const { template } = this.pswp;\r\n    if (document !== e.target\r\n        && template !== e.target\r\n        && !template.contains(/** @type {Node} */ (e.target))) {\r\n      // focus root element\r\n      template.focus();\r\n    }\r\n  }\r\n}\r\n\r\nexport default Keyboard;\r\n", "import { setTransitionStyle, removeTransitionStyle } from './util.js';\r\n\r\nconst DEFAULT_EASING = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/** @typedef {import('./animations.js').AnimationProps} AnimationProps */\r\n\r\n/**\r\n * Runs CSS transition.\r\n */\r\nclass CSSAnimation {\r\n  /**\r\n   * onComplete can be unpredictable, be careful about current state\r\n   *\r\n   * @param {AnimationProps} props\r\n   */\r\n  constructor(props) {\r\n    this.props = props;\r\n    const {\r\n      target,\r\n      onComplete,\r\n      transform,\r\n      onFinish\r\n      // opacity\r\n    } = props;\r\n\r\n    let {\r\n      duration,\r\n      easing,\r\n    } = props;\r\n\r\n    /** @type {() => void} */\r\n    this.onFinish = onFinish;\r\n\r\n    // support only transform and opacity\r\n    const prop = transform ? 'transform' : 'opacity';\r\n    const propValue = props[prop];\r\n\r\n    /** @private */\r\n    this._target = target;\r\n    /** @private */\r\n    this._onComplete = onComplete;\r\n\r\n    duration = duration || 333;\r\n    easing = easing || DEFAULT_EASING;\r\n\r\n    /** @private */\r\n    this._onTransitionEnd = this._onTransitionEnd.bind(this);\r\n\r\n    // Using timeout hack to make sure that animation\r\n    // starts even if the animated property was changed recently,\r\n    // otherwise transitionend might not fire or transiton won't start.\r\n    // https://drafts.csswg.org/css-transitions/#starting\r\n    //\r\n    // \u00AF\\_(\u30C4)_/\u00AF\r\n    /** @private */\r\n    this._firstFrameTimeout = setTimeout(() => {\r\n      setTransitionStyle(target, prop, duration, easing);\r\n      this._firstFrameTimeout = setTimeout(() => {\r\n        target.addEventListener('transitionend', this._onTransitionEnd, false);\r\n        target.addEventListener('transitioncancel', this._onTransitionEnd, false);\r\n        target.style[prop] = propValue;\r\n      }, 30); // Do not reduce this number\r\n    }, 0);\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {TransitionEvent} e\r\n   */\r\n  _onTransitionEnd(e) {\r\n    if (e.target === this._target) {\r\n      this._finalizeAnimation();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   */\r\n  _finalizeAnimation() {\r\n    if (!this._finished) {\r\n      this._finished = true;\r\n      this.onFinish();\r\n      if (this._onComplete) {\r\n        this._onComplete();\r\n      }\r\n    }\r\n  }\r\n\r\n  // Destroy is called automatically onFinish\r\n  destroy() {\r\n    if (this._firstFrameTimeout) {\r\n      clearTimeout(this._firstFrameTimeout);\r\n    }\r\n    removeTransitionStyle(this._target);\r\n    this._target.removeEventListener('transitionend', this._onTransitionEnd, false);\r\n    this._target.removeEventListener('transitioncancel', this._onTransitionEnd, false);\r\n    if (!this._finished) {\r\n      this._finalizeAnimation();\r\n    }\r\n  }\r\n}\r\n\r\nexport default CSSAnimation;\r\n", "const DEFAULT_NATURAL_FREQUENCY = 12;\r\nconst DEFAULT_DAMPING_RATIO = 0.75;\r\n\r\n/**\r\n * Spring easing helper\r\n */\r\nclass SpringEaser {\r\n  /**\r\n   * @param {number} initialVelocity Initial velocity, px per ms.\r\n   *\r\n   * @param {number} dampingRatio\r\n   * Determines how bouncy animation will be.\r\n   * From 0 to 1, 0 - always overshoot, 1 - do not overshoot.\r\n   * \"overshoot\" refers to part of animation that\r\n   * goes beyond the final value.\r\n   *\r\n   * @param {number} naturalFrequency\r\n   * Determines how fast animation will slow down.\r\n   * The higher value - the stiffer the transition will be,\r\n   * and the faster it will slow down.\r\n   * Recommended value from 10 to 50\r\n   */\r\n  constructor(initialVelocity, dampingRatio, naturalFrequency) {\r\n    this.velocity = initialVelocity * 1000; // convert to \"pixels per second\"\r\n\r\n    // https://en.wikipedia.org/wiki/Damping_ratio\r\n    this._dampingRatio = dampingRatio || DEFAULT_DAMPING_RATIO;\r\n\r\n    // https://en.wikipedia.org/wiki/Natural_frequency\r\n    this._naturalFrequency = naturalFrequency || DEFAULT_NATURAL_FREQUENCY;\r\n\r\n    if (this._dampingRatio < 1) {\r\n      this._dampedFrequency = this._naturalFrequency\r\n                         * Math.sqrt(1 - this._dampingRatio * this._dampingRatio);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} deltaPosition Difference between current and end position of the animation\r\n   * @param {number} deltaTime Frame duration in milliseconds\r\n   *\r\n   * @returns {number} Displacement, relative to the end position.\r\n   */\r\n  easeFrame(deltaPosition, deltaTime) {\r\n    // Inspired by Apple Webkit and Android spring function implementation\r\n    // https://en.wikipedia.org/wiki/Oscillation\r\n    // https://en.wikipedia.org/wiki/Damping_ratio\r\n    // we ignore mass (assume that it's 1kg)\r\n\r\n    let displacement = 0;\r\n    let coeff;\r\n\r\n    deltaTime /= 1000;\r\n\r\n    const naturalDumpingPow = Math.E ** (-this._dampingRatio * this._naturalFrequency * deltaTime);\r\n\r\n    if (this._dampingRatio === 1) {\r\n      coeff = this.velocity + this._naturalFrequency * deltaPosition;\r\n\r\n      displacement = (deltaPosition + coeff * deltaTime) * naturalDumpingPow;\r\n\r\n      this.velocity = displacement\r\n                        * (-this._naturalFrequency) + coeff\r\n                        * naturalDumpingPow;\r\n    } else if (this._dampingRatio < 1) {\r\n      coeff = (1 / this._dampedFrequency)\r\n                * (this._dampingRatio * this._naturalFrequency * deltaPosition + this.velocity);\r\n\r\n      const dumpedFCos = Math.cos(this._dampedFrequency * deltaTime);\r\n      const dumpedFSin = Math.sin(this._dampedFrequency * deltaTime);\r\n\r\n      displacement = naturalDumpingPow\r\n                       * (deltaPosition * dumpedFCos + coeff * dumpedFSin);\r\n\r\n      this.velocity = displacement\r\n                        * (-this._naturalFrequency)\r\n                        * this._dampingRatio\r\n                        + naturalDumpingPow\r\n                        * (-this._dampedFrequency * deltaPosition * dumpedFSin\r\n                        + this._dampedFrequency * coeff * dumpedFCos);\r\n    }\r\n\r\n    // Overdamped (>1) damping ratio is not supported\r\n\r\n    return displacement;\r\n  }\r\n}\r\n\r\nexport default SpringEaser;\r\n", "import SpringEaser from './spring-easer.js';\r\n\r\n/** @typedef {import('./animations.js').AnimationProps} AnimationProps */\r\n\r\nclass SpringAnimation {\r\n  /**\r\n   * @param {AnimationProps} props\r\n   */\r\n  constructor(props) {\r\n    this.props = props;\r\n\r\n    const {\r\n      start,\r\n      end,\r\n      velocity,\r\n      onUpdate,\r\n      onComplete,\r\n      onFinish,\r\n      dampingRatio,\r\n      naturalFrequency\r\n    } = props;\r\n\r\n    /** @type {() => void} */\r\n    this.onFinish = onFinish;\r\n\r\n    const easer = new SpringEaser(velocity, dampingRatio, naturalFrequency);\r\n    let prevTime = Date.now();\r\n    let deltaPosition = start - end;\r\n\r\n    const animationLoop = () => {\r\n      if (this._raf) {\r\n        deltaPosition = easer.easeFrame(deltaPosition, Date.now() - prevTime);\r\n\r\n        // Stop the animation if velocity is low and position is close to end\r\n        if (Math.abs(deltaPosition) < 1 && Math.abs(easer.velocity) < 50) {\r\n          // Finalize the animation\r\n          onUpdate(end);\r\n          if (onComplete) {\r\n            onComplete();\r\n          }\r\n          this.onFinish();\r\n        } else {\r\n          prevTime = Date.now();\r\n          onUpdate(deltaPosition + end);\r\n          this._raf = requestAnimationFrame(animationLoop);\r\n        }\r\n      }\r\n    };\r\n\r\n    this._raf = requestAnimationFrame(animationLoop);\r\n  }\r\n\r\n  // Destroy is called automatically onFinish\r\n  destroy() {\r\n    if (this._raf >= 0) {\r\n      cancelAnimationFrame(this._raf);\r\n    }\r\n    this._raf = null;\r\n  }\r\n}\r\n\r\nexport default SpringAnimation;\r\n", "import CSSAnimation from './css-animation.js';\r\nimport SpringAnimation from './spring-animation.js';\r\n\r\n/** @typedef {SpringAnimation | CSSAnimation} Animation */\r\n\r\n/**\r\n * @typedef {Object} AnimationProps\r\n *\r\n * @prop {HTMLElement=} target\r\n *\r\n * @prop {string=} name\r\n *\r\n * @prop {number=} start\r\n * @prop {number=} end\r\n * @prop {number=} duration\r\n * @prop {number=} velocity\r\n * @prop {number=} dampingRatio\r\n * @prop {number=} naturalFrequency\r\n *\r\n * @prop {(end: number) => void} [onUpdate]\r\n * @prop {() => void} [onComplete]\r\n * @prop {() => void} [onFinish]\r\n *\r\n * @prop {string=} transform\r\n * @prop {string=} opacity\r\n * @prop {string=} easing\r\n *\r\n * @prop {boolean=} isPan\r\n * @prop {boolean=} isMainScroll\r\n */\r\n\r\n/**\r\n * Manages animations\r\n */\r\nclass Animations {\r\n  constructor() {\r\n    /** @type {Animation[]} */\r\n    this.activeAnimations = [];\r\n  }\r\n\r\n  /**\r\n   * @param {AnimationProps} props\r\n   */\r\n  startSpring(props) {\r\n    this._start(props, true);\r\n  }\r\n\r\n  /**\r\n   * @param {AnimationProps} props\r\n   */\r\n  startTransition(props) {\r\n    this._start(props);\r\n  }\r\n\r\n  /**\r\n   * @param {AnimationProps} props\r\n   * @param {boolean=} isSpring\r\n   */\r\n  _start(props, isSpring) {\r\n    /** @type {Animation} */\r\n    let animation;\r\n    if (isSpring) {\r\n      animation = new SpringAnimation(props);\r\n    } else {\r\n      animation = new CSSAnimation(props);\r\n    }\r\n\r\n    this.activeAnimations.push(animation);\r\n    animation.onFinish = () => this.stop(animation);\r\n\r\n    return animation;\r\n  }\r\n\r\n  /**\r\n   * @param {Animation} animation\r\n   */\r\n  stop(animation) {\r\n    animation.destroy();\r\n    const index = this.activeAnimations.indexOf(animation);\r\n    if (index > -1) {\r\n      this.activeAnimations.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  stopAll() { // _stopAllAnimations\r\n    this.activeAnimations.forEach((animation) => {\r\n      animation.destroy();\r\n    });\r\n    this.activeAnimations = [];\r\n  }\r\n\r\n  /**\r\n   * Stop all pan or zoom transitions\r\n   */\r\n  stopAllPan() {\r\n    this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n      if (animation.props.isPan) {\r\n        animation.destroy();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  stopMainScroll() {\r\n    this.activeAnimations = this.activeAnimations.filter((animation) => {\r\n      if (animation.props.isMainScroll) {\r\n        animation.destroy();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Returns true if main scroll transition is running\r\n   */\r\n  // isMainScrollRunning() {\r\n  //   return this.activeAnimations.some((animation) => {\r\n  //     return animation.props.isMainScroll;\r\n  //   });\r\n  // }\r\n\r\n  /**\r\n   * Returns true if any pan or zoom transition is running\r\n   */\r\n  isPanRunning() {\r\n    return this.activeAnimations.some((animation) => {\r\n      return animation.props.isPan;\r\n    });\r\n  }\r\n}\r\n\r\nexport default Animations;\r\n", "/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * Handles scroll wheel.\r\n * Can pan and zoom current slide image.\r\n */\r\nclass ScrollWheel {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    pswp.events.add(pswp.element, 'wheel', this._onWheel.bind(this));\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {WheelEvent} e\r\n   */\r\n  _onWheel(e) {\r\n    e.preventDefault();\r\n    const { currSlide } = this.pswp;\r\n    let { deltaX, deltaY } = e;\r\n\r\n    if (!currSlide) {\r\n      return;\r\n    }\r\n\r\n    if (this.pswp.dispatch('wheel', { originalEvent: e }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (e.ctrlKey || this.pswp.options.wheelToZoom) {\r\n      // zoom\r\n      if (currSlide.isZoomable()) {\r\n        let zoomFactor = -deltaY;\r\n        if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n          zoomFactor *= 0.05;\r\n        } else {\r\n          zoomFactor *= e.deltaMode ? 1 : 0.002;\r\n        }\r\n        zoomFactor = 2 ** zoomFactor;\r\n\r\n        const destZoomLevel = currSlide.currZoomLevel * zoomFactor;\r\n        currSlide.zoomTo(destZoomLevel, {\r\n          x: e.clientX,\r\n          y: e.clientY\r\n        });\r\n      }\r\n    } else {\r\n      // pan\r\n      if (currSlide.isPannable()) {\r\n        if (e.deltaMode === 1 /* DOM_DELTA_LINE */) {\r\n          // 18 - average line height\r\n          deltaX *= 18;\r\n          deltaY *= 18;\r\n        }\r\n\r\n        currSlide.panTo(\r\n          currSlide.pan.x - deltaX,\r\n          currSlide.pan.y - deltaY\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport default ScrollWheel;\r\n", "import { createElement } from '../util/util.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Methods<T>} Methods<T>\r\n */\r\n\r\n/**\r\n * @typedef {Object} UIElementMarkupProps\r\n * @prop {boolean=} isCustomSVG\r\n * @prop {string} inner\r\n * @prop {string=} outlineID\r\n * @prop {number | string} [size]\r\n */\r\n\r\n/**\r\n * @typedef {Object} UIElementData\r\n * @prop {DefaultUIElements | string} [name]\r\n * @prop {string=} className\r\n * @prop {UIElementMarkup=} html\r\n * @prop {boolean=} isButton\r\n * @prop {keyof HTMLElementTagNameMap} [tagName]\r\n * @prop {string=} title\r\n * @prop {string=} ariaLabel\r\n * @prop {(element: HTMLElement, pswp: PhotoSwipe) => void} [onInit]\r\n * @prop {Methods<PhotoSwipe> | ((e: MouseEvent, element: HTMLElement, pswp: PhotoSwipe) => void)} [onClick]\r\n * @prop {'bar' | 'wrapper' | 'root'} [appendTo]\r\n * @prop {number=} order\r\n */\r\n\r\n/** @typedef {'arrowPrev' | 'arrowNext' | 'close' | 'zoom' | 'counter'} DefaultUIElements */\r\n\r\n/** @typedef {string | UIElementMarkupProps} UIElementMarkup */\r\n\r\n/**\r\n * @param {UIElementMarkup} [htmlData]\r\n */\r\nfunction addElementHTML(htmlData) {\r\n  if (typeof htmlData === 'string') {\r\n    // Allow developers to provide full svg,\r\n    // For example:\r\n    // <svg viewBox=\"0 0 32 32\" width=\"32\" height=\"32\" aria-hidden=\"true\" class=\"pswp__icn\">\r\n    //   <path d=\"...\" />\r\n    //   <circle ... />\r\n    // </svg>\r\n    // Can also be any HTML string.\r\n    return htmlData;\r\n  }\r\n\r\n  if (!htmlData || !htmlData.isCustomSVG) {\r\n    return '';\r\n  }\r\n\r\n  const svgData = htmlData;\r\n  let out = '<svg aria-hidden=\"true\" class=\"pswp__icn\" viewBox=\"0 0 %d %d\" width=\"%d\" height=\"%d\">';\r\n  // replace all %d with size\r\n  out = out.split('%d').join(/** @type {string} */ (svgData.size || 32));\r\n\r\n  // Icons may contain outline/shadow,\r\n  // to make it we \"clone\" base icon shape and add border to it.\r\n  // Icon itself and border are styled via CSS.\r\n  //\r\n  // Property shadowID defines ID of element that should be cloned.\r\n  if (svgData.outlineID) {\r\n    out += '<use class=\"pswp__icn-shadow\" xlink:href=\"#' + svgData.outlineID + '\"/>';\r\n  }\r\n\r\n  out += svgData.inner;\r\n\r\n  out += '</svg>';\r\n\r\n  return out;\r\n}\r\n\r\nclass UIElement {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   * @param {UIElementData} data\r\n   */\r\n  constructor(pswp, data) {\r\n    const name = data.name || data.className;\r\n    let elementHTML = data.html;\r\n\r\n    // @ts-expect-error lookup only by `data.name` maybe?\r\n    if (pswp.options[name] === false) {\r\n      // exit if element is disabled from options\r\n      return;\r\n    }\r\n\r\n    // Allow to override SVG icons from options\r\n    // @ts-expect-error lookup only by `data.name` maybe?\r\n    if (typeof pswp.options[name + 'SVG'] === 'string') {\r\n      // arrowPrevSVG\r\n      // arrowNextSVG\r\n      // closeSVG\r\n      // zoomSVG\r\n      // @ts-expect-error lookup only by `data.name` maybe?\r\n      elementHTML = pswp.options[name + 'SVG'];\r\n    }\r\n\r\n    pswp.dispatch('uiElementCreate', { data });\r\n\r\n    let className = '';\r\n    if (data.isButton) {\r\n      className += 'pswp__button ';\r\n      className += (data.className || `pswp__button--${data.name}`);\r\n    } else {\r\n      className += (data.className || `pswp__${data.name}`);\r\n    }\r\n\r\n    /** @type {HTMLElement} */\r\n    let element;\r\n    let tagName = data.isButton ? (data.tagName || 'button') : (data.tagName || 'div');\r\n    tagName = /** @type {keyof HTMLElementTagNameMap} */ (tagName.toLowerCase());\r\n    element = createElement(className, tagName);\r\n\r\n    if (data.isButton) {\r\n      // create button element\r\n      element = createElement(className, tagName);\r\n      if (tagName === 'button') {\r\n        /** @type {HTMLButtonElement} */ (element).type = 'button';\r\n      }\r\n\r\n      let { title } = data;\r\n      const { ariaLabel } = data;\r\n\r\n      // @ts-expect-error lookup only by `data.name` maybe?\r\n      if (typeof pswp.options[name + 'Title'] === 'string') {\r\n        // @ts-expect-error lookup only by `data.name` maybe?\r\n        title = pswp.options[name + 'Title'];\r\n      }\r\n\r\n      if (title) {\r\n        element.title = title;\r\n      }\r\n\r\n      if (ariaLabel || title) {\r\n        /** @type {HTMLElement} */ (element).setAttribute('aria-label', ariaLabel || title);\r\n      }\r\n    }\r\n\r\n    element.innerHTML = addElementHTML(elementHTML);\r\n\r\n    if (data.onInit) {\r\n      data.onInit(element, pswp);\r\n    }\r\n\r\n    if (data.onClick) {\r\n      element.onclick = (e) => {\r\n        if (typeof data.onClick === 'string') {\r\n          pswp[data.onClick]();\r\n        } else {\r\n          data.onClick(e, element, pswp);\r\n        }\r\n      };\r\n    }\r\n\r\n    // Top bar is default position\r\n    const appendTo = data.appendTo || 'bar';\r\n    let container;\r\n    if (appendTo === 'bar') {\r\n      if (!pswp.topBar) {\r\n        pswp.topBar = createElement('pswp__top-bar pswp__hide-on-close', 'div', pswp.scrollWrap);\r\n      }\r\n      container = pswp.topBar;\r\n    } else {\r\n      // element outside of top bar gets a secondary class\r\n      // that makes element fade out on close\r\n      element.classList.add('pswp__hide-on-close');\r\n\r\n      if (appendTo === 'wrapper') {\r\n        container = pswp.scrollWrap;\r\n      } else {\r\n        // root element\r\n        container = pswp.element;\r\n      }\r\n    }\r\n\r\n    container.appendChild(pswp.applyFilters('uiElement', element, data));\r\n  }\r\n}\r\n\r\nexport default UIElement;\r\n", "/*\r\n  Backward and forward arrow buttons\r\n */\r\n\r\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/**\r\n *\r\n * @param {HTMLElement} element\r\n * @param {PhotoSwipe} pswp\r\n * @param {boolean=} isNextButton\r\n */\r\nfunction initArrowButton(element, pswp, isNextButton) {\r\n  element.classList.add('pswp__button--arrow');\r\n  pswp.on('change', () => {\r\n    if (!pswp.options.loop) {\r\n      if (isNextButton) {\r\n        /** @type {HTMLButtonElement} */\r\n        (element).disabled = !(pswp.currIndex < pswp.getNumItems() - 1);\r\n      } else {\r\n        /** @type {HTMLButtonElement} */\r\n        (element).disabled = !(pswp.currIndex > 0);\r\n      }\r\n    }\r\n  });\r\n}\r\n\r\n/** @type {UIElementData} */\r\nexport const arrowPrev = {\r\n  name: 'arrowPrev',\r\n  className: 'pswp__button--arrow--prev',\r\n  title: 'Previous',\r\n  order: 10,\r\n  isButton: true,\r\n  appendTo: 'wrapper',\r\n  html: {\r\n    isCustomSVG: true,\r\n    size: 60,\r\n    inner: '<path d=\"M29 43l-3 3-16-16 16-16 3 3-13 13 13 13z\" id=\"pswp__icn-arrow\"/>',\r\n    outlineID: 'pswp__icn-arrow'\r\n  },\r\n  onClick: 'prev',\r\n  onInit: initArrowButton\r\n};\r\n\r\n/** @type {UIElementData} */\r\nexport const arrowNext = {\r\n  name: 'arrowNext',\r\n  className: 'pswp__button--arrow--next',\r\n  title: 'Next',\r\n  order: 11,\r\n  isButton: true,\r\n  appendTo: 'wrapper',\r\n  html: {\r\n    isCustomSVG: true,\r\n    size: 60,\r\n    inner: '<use xlink:href=\"#pswp__icn-arrow\"/>',\r\n    outlineID: 'pswp__icn-arrow'\r\n  },\r\n  onClick: 'next',\r\n  onInit: (el, pswp) => {\r\n    initArrowButton(el, pswp, true);\r\n  }\r\n};\r\n", "/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nconst closeButton = {\r\n  name: 'close',\r\n  title: 'Close',\r\n  order: 20,\r\n  isButton: true,\r\n  html: {\r\n    isCustomSVG: true,\r\n    inner: '<path d=\"M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z\" id=\"pswp__icn-close\"/>',\r\n    outlineID: 'pswp__icn-close'\r\n  },\r\n  onClick: 'close'\r\n};\r\n\r\nexport default closeButton;\r\n", "/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nconst zoomButton = {\r\n  name: 'zoom',\r\n  title: 'Zoom',\r\n  order: 10,\r\n  isButton: true,\r\n  html: {\r\n    isCustomSVG: true,\r\n    // eslint-disable-next-line max-len\r\n    inner: '<path d=\"M17.426 19.926a6 6 0 1 1 1.5-1.5L23 22.5 21.5 24l-4.074-4.074z\" id=\"pswp__icn-zoom\"/>'\r\n          + '<path fill=\"currentColor\" class=\"pswp__zoom-icn-bar-h\" d=\"M11 16v-2h6v2z\"/>'\r\n          + '<path fill=\"currentColor\" class=\"pswp__zoom-icn-bar-v\" d=\"M13 12h2v6h-2z\"/>',\r\n    outlineID: 'pswp__icn-zoom'\r\n  },\r\n  onClick: 'toggleZoom'\r\n};\r\n\r\nexport default zoomButton;\r\n", "/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nexport const loadingIndicator = {\r\n  name: 'preloader',\r\n  appendTo: 'bar',\r\n  order: 7,\r\n  html: {\r\n    isCustomSVG: true,\r\n    // eslint-disable-next-line max-len\r\n    inner: '<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M21.2 16a5.2 5.2 0 1 1-5.2-5.2V8a8 8 0 1 0 8 8h-2.8Z\" id=\"pswp__icn-loading\"/>',\r\n    outlineID: 'pswp__icn-loading'\r\n  },\r\n  onInit: (indicatorElement, pswp) => {\r\n    /** @type {boolean} */\r\n    let isVisible;\r\n    /** @type {NodeJS.Timeout} */\r\n    let delayTimeout;\r\n\r\n    /**\r\n     * @param {string} className\r\n     * @param {boolean} add\r\n     */\r\n    const toggleIndicatorClass = (className, add) => {\r\n      indicatorElement.classList[add ? 'add' : 'remove']('pswp__preloader--' + className);\r\n    };\r\n\r\n    /**\r\n     * @param {boolean} visible\r\n     */\r\n    const setIndicatorVisibility = (visible) => {\r\n      if (isVisible !== visible) {\r\n        isVisible = visible;\r\n        toggleIndicatorClass('active', visible);\r\n      }\r\n    };\r\n\r\n    const updatePreloaderVisibility = () => {\r\n      if (!pswp.currSlide.content.isLoading()) {\r\n        setIndicatorVisibility(false);\r\n        if (delayTimeout) {\r\n          clearTimeout(delayTimeout);\r\n          delayTimeout = null;\r\n        }\r\n        return;\r\n      }\r\n\r\n      if (!delayTimeout) {\r\n        // display loading indicator with delay\r\n        delayTimeout = setTimeout(() => {\r\n          setIndicatorVisibility(pswp.currSlide.content.isLoading());\r\n          delayTimeout = null;\r\n        }, pswp.options.preloaderDelay);\r\n      }\r\n    };\r\n\r\n    pswp.on('change', updatePreloaderVisibility);\r\n\r\n    pswp.on('loadComplete', (e) => {\r\n      if (pswp.currSlide === e.slide) {\r\n        updatePreloaderVisibility();\r\n      }\r\n    });\r\n\r\n    // expose the method\r\n    pswp.ui.updatePreloaderVisibility = updatePreloaderVisibility;\r\n  }\r\n};\r\n", "/** @type {import('./ui-element.js').UIElementData} UIElementData */\r\nexport const counterIndicator = {\r\n  name: 'counter',\r\n  order: 5,\r\n  onInit: (counterElement, pswp) => {\r\n    pswp.on('change', () => {\r\n      counterElement.innerText = (pswp.currIndex + 1)\r\n                                  + pswp.options.indexIndicatorSep\r\n                                  + pswp.getNumItems();\r\n    });\r\n  }\r\n};\r\n", "import UIElement from './ui-element.js';\r\nimport { arrowPrev, arrowNext } from './button-arrow.js';\r\nimport closeButton from './button-close.js';\r\nimport zoomButton from './button-zoom.js';\r\nimport { loadingIndicator } from './loading-indicator.js';\r\nimport { counterIndicator } from './counter-indicator.js';\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./ui-element.js').UIElementData} UIElementData */\r\n\r\n/**\r\n * Set special class on element when image is zoomed.\r\n *\r\n * By default it is used to adjust\r\n * zoom icon and zoom cursor via CSS.\r\n *\r\n * @param {HTMLElement} el\r\n * @param {boolean} isZoomedIn\r\n */\r\nfunction setZoomedIn(el, isZoomedIn) {\r\n  el.classList[isZoomedIn ? 'add' : 'remove']('pswp--zoomed-in');\r\n}\r\n\r\nclass UI {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n\r\n    /** @type {() => void} */\r\n    this.updatePreloaderVisibility = undefined;\r\n\r\n    /** @type {number} */\r\n    this._lastUpdatedZoomLevel = undefined;\r\n  }\r\n\r\n  init() {\r\n    const { pswp } = this;\r\n    this.isRegistered = false;\r\n    /** @type {UIElementData[]} */\r\n    this.uiElementsData = [\r\n      closeButton,\r\n      arrowPrev,\r\n      arrowNext,\r\n      zoomButton,\r\n      loadingIndicator,\r\n      counterIndicator\r\n    ];\r\n\r\n    pswp.dispatch('uiRegister');\r\n\r\n    // sort by order\r\n    this.uiElementsData.sort((a, b) => {\r\n      // default order is 0\r\n      return (a.order || 0) - (b.order || 0);\r\n    });\r\n\r\n    /** @type {(UIElement | UIElementData)[]} */\r\n    this.items = [];\r\n\r\n    this.isRegistered = true;\r\n    this.uiElementsData.forEach((uiElementData) => {\r\n      this.registerElement(uiElementData);\r\n    });\r\n\r\n    pswp.on('change', () => {\r\n      pswp.element.classList[pswp.getNumItems() === 1 ? 'add' : 'remove']('pswp--one-slide');\r\n    });\r\n\r\n    pswp.on('zoomPanUpdate', () => this._onZoomPanUpdate());\r\n  }\r\n\r\n  /**\r\n   * @param {UIElementData} elementData\r\n   */\r\n  registerElement(elementData) {\r\n    if (this.isRegistered) {\r\n      this.items.push(\r\n        new UIElement(this.pswp, elementData)\r\n      );\r\n    } else {\r\n      this.uiElementsData.push(elementData);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Fired each time zoom or pan position is changed.\r\n   * Update classes that control visibility of zoom button and cursor icon.\r\n   */\r\n  _onZoomPanUpdate() {\r\n    const { template, currSlide, options } = this.pswp;\r\n    let { currZoomLevel } = currSlide;\r\n\r\n    if (this.pswp.opener.isClosing) {\r\n      return;\r\n    }\r\n\r\n    // if not open yet - check against initial zoom level\r\n    if (!this.pswp.opener.isOpen) {\r\n      currZoomLevel = currSlide.zoomLevels.initial;\r\n    }\r\n\r\n    if (currZoomLevel === this._lastUpdatedZoomLevel) {\r\n      return;\r\n    }\r\n    this._lastUpdatedZoomLevel = currZoomLevel;\r\n\r\n    const currZoomLevelDiff = currSlide.zoomLevels.initial - currSlide.zoomLevels.secondary;\r\n\r\n    // Initial and secondary zoom levels are almost equal\r\n    if (Math.abs(currZoomLevelDiff) < 0.01 || !currSlide.isZoomable()) {\r\n      // disable zoom\r\n      setZoomedIn(template, false);\r\n      template.classList.remove('pswp--zoom-allowed');\r\n      return;\r\n    }\r\n\r\n    template.classList.add('pswp--zoom-allowed');\r\n    const secondaryIsHigher = (currZoomLevelDiff < 0);\r\n\r\n    if (currZoomLevel === currSlide.zoomLevels.secondary) {\r\n      setZoomedIn(template, secondaryIsHigher);\r\n    } else if (currZoomLevel > currSlide.zoomLevels.secondary) {\r\n      setZoomedIn(template, true);\r\n    } else {\r\n      //  if (currZoomLevel < currSlide.zoomLevels.secondary)\r\n      setZoomedIn(template, false);\r\n    }\r\n\r\n    if (options.imageClickAction === 'zoom'\r\n        || options.imageClickAction === 'zoom-or-close') {\r\n      template.classList.add('pswp--click-to-zoom');\r\n    }\r\n  }\r\n}\r\n\r\nexport default UI;\r\n", "/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n\r\n/** @typedef {{ x: number; y: number; w: number; innerRect?: { w: number; h: number; x: number; y: number } }} Bounds */\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n */\r\nfunction getBoundsByElement(el) {\r\n  const thumbAreaRect = el.getBoundingClientRect();\r\n  return {\r\n    x: thumbAreaRect.left,\r\n    y: thumbAreaRect.top,\r\n    w: thumbAreaRect.width\r\n  };\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n * @param {number} imageWidth\r\n * @param {number} imageHeight\r\n */\r\nfunction getCroppedBoundsByElement(el, imageWidth, imageHeight) {\r\n  const thumbAreaRect = el.getBoundingClientRect();\r\n\r\n  // fill image into the area\r\n  // (do they same as object-fit:cover does to retrieve coordinates)\r\n  const hRatio = thumbAreaRect.width / imageWidth;\r\n  const vRatio = thumbAreaRect.height / imageHeight;\r\n  const fillZoomLevel = hRatio > vRatio ? hRatio : vRatio;\r\n\r\n  const offsetX = (thumbAreaRect.width - imageWidth * fillZoomLevel) / 2;\r\n  const offsetY = (thumbAreaRect.height - imageHeight * fillZoomLevel) / 2;\r\n\r\n  /**\r\n   * Coordinates of the image,\r\n   * as if it was not cropped,\r\n   * height is calculated automatically\r\n   *\r\n   * @type {Bounds}\r\n   */\r\n  const bounds = {\r\n    x: thumbAreaRect.left + offsetX,\r\n    y: thumbAreaRect.top + offsetY,\r\n    w: imageWidth * fillZoomLevel\r\n  };\r\n\r\n  // Coordinates of inner crop area\r\n  // relative to the image\r\n  bounds.innerRect = {\r\n    w: thumbAreaRect.width,\r\n    h: thumbAreaRect.height,\r\n    x: offsetX,\r\n    y: offsetY\r\n  };\r\n\r\n  return bounds;\r\n}\r\n\r\n/**\r\n * Get dimensions of thumbnail image\r\n * (click on which opens photoswipe or closes photoswipe to)\r\n *\r\n * @param {number} index\r\n * @param {SlideData} itemData\r\n * @param {PhotoSwipe} instance PhotoSwipe instance\r\n * @returns {Bounds | undefined}\r\n */\r\nexport function getThumbBounds(index, itemData, instance) {\r\n  // legacy event, before filters were introduced\r\n  const event = instance.dispatch('thumbBounds', {\r\n    index,\r\n    itemData,\r\n    instance\r\n  });\r\n  // @ts-expect-error\r\n  if (event.thumbBounds) {\r\n    // @ts-expect-error\r\n    return event.thumbBounds;\r\n  }\r\n\r\n  const { element } = itemData;\r\n  let thumbBounds;\r\n  /** @type {HTMLElement} */\r\n  let thumbnail;\r\n\r\n  if (element && instance.options.thumbSelector !== false) {\r\n    const thumbSelector = instance.options.thumbSelector || 'img';\r\n    thumbnail = element.matches(thumbSelector)\r\n      ? element : element.querySelector(thumbSelector);\r\n  }\r\n\r\n  thumbnail = instance.applyFilters('thumbEl', thumbnail, itemData, index);\r\n\r\n  if (thumbnail) {\r\n    if (!itemData.thumbCropped) {\r\n      thumbBounds = getBoundsByElement(thumbnail);\r\n    } else {\r\n      thumbBounds = getCroppedBoundsByElement(\r\n        thumbnail,\r\n        itemData.width || itemData.w,\r\n        itemData.height || itemData.h\r\n      );\r\n    }\r\n  }\r\n\r\n  return instance.applyFilters('thumbBounds', thumbBounds, itemData, index);\r\n}\r\n", "/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../slide/content.js').default} ContentDefault */\r\n/** @typedef {import('../slide/slide.js').default} Slide */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\r\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\r\n\r\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record<string, any>} Content\r\n */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point, transitionDuration: number | false }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thubmnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thubmnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter<T>\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent<T> : PhotoSwipeEvent<T> & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent<T>) => void} EventCallback<T>\r\n */\r\n\r\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\r\nclass PhotoSwipeEvent {\r\n  /**\r\n   * @param {T} type\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   */\r\n  constructor(type, details) {\r\n    this.type = type;\r\n    if (details) {\r\n      Object.assign(this, details);\r\n    }\r\n  }\r\n\r\n  preventDefault() {\r\n    this.defaultPrevented = true;\r\n  }\r\n}\r\n\r\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\r\nclass Eventable {\r\n  constructor() {\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent<T>) => void)[] }}\r\n     */\r\n    this._listeners = {};\r\n\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter<T>[] }}\r\n     */\r\n    this._filters = {};\r\n\r\n    /** @type {PhotoSwipe=} */\r\n    this.pswp = undefined;\r\n\r\n    /** @type {PhotoSwipeOptions} */\r\n    this.options = undefined;\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   * @param {number} priority\r\n   */\r\n  addFilter(name, fn, priority = 100) {\r\n    if (!this._filters[name]) {\r\n      this._filters[name] = [];\r\n    }\r\n\r\n    this._filters[name].push({ fn, priority });\r\n    this._filters[name].sort((f1, f2) => f1.priority - f2.priority);\r\n\r\n    if (this.pswp) {\r\n      this.pswp.addFilter(name, fn, priority);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   */\r\n  removeFilter(name, fn) {\r\n    if (this._filters[name]) {\r\n      // @ts-expect-error\r\n      this._filters[name] = this._filters[name].filter(filter => (filter.fn !== fn));\r\n    }\r\n\r\n    if (this.pswp) {\r\n      this.pswp.removeFilter(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {Parameters<PhotoSwipeFiltersMap[T]>} args\r\n   * @returns {Parameters<PhotoSwipeFiltersMap[T]>[0]}\r\n   */\r\n  applyFilters(name, ...args) {\r\n    if (this._filters[name]) {\r\n      this._filters[name].forEach((filter) => {\r\n        // @ts-expect-error\r\n        args[0] = filter.fn.apply(this, args);\r\n      });\r\n    }\r\n    return args[0];\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  on(name, fn) {\r\n    if (!this._listeners[name]) {\r\n      this._listeners[name] = [];\r\n    }\r\n    this._listeners[name].push(fn);\r\n\r\n    // When binding events to lightbox,\r\n    // also bind events to PhotoSwipe Core,\r\n    // if it's open.\r\n    if (this.pswp) {\r\n      this.pswp.on(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  off(name, fn) {\r\n    if (this._listeners[name]) {\r\n      // @ts-expect-error\r\n      this._listeners[name] = this._listeners[name].filter(listener => (fn !== listener));\r\n    }\r\n\r\n    if (this.pswp) {\r\n      this.pswp.off(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   * @returns {AugmentedEvent<T>}\r\n   */\r\n  dispatch(name, details) {\r\n    if (this.pswp) {\r\n      return this.pswp.dispatch(name, details);\r\n    }\r\n\r\n    const event = /** @type {AugmentedEvent<T>} */ (new PhotoSwipeEvent(name, details));\r\n\r\n    if (!this._listeners) {\r\n      return event;\r\n    }\r\n\r\n    if (this._listeners[name]) {\r\n      this._listeners[name].forEach((listener) => {\r\n        listener.call(this, event);\r\n      });\r\n    }\r\n\r\n    return event;\r\n  }\r\n}\r\n\r\nexport default Eventable;\r\n", "import { createElement, setWidthHeight, toTransformString } from '../util/util.js';\r\n\r\nclass Placeholder {\r\n  /**\r\n   * @param {string | false} imageSrc\r\n   * @param {HTMLElement} container\r\n   */\r\n  constructor(imageSrc, container) {\r\n    // Create placeholder\r\n    // (stretched thumbnail or simple div behind the main image)\r\n    this.element = createElement(\r\n      'pswp__img pswp__img--placeholder',\r\n      imageSrc ? 'img' : '',\r\n      container\r\n    );\r\n\r\n    if (imageSrc) {\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).decoding = 'async';\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).alt = '';\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).src = imageSrc;\r\n      this.element.setAttribute('role', 'presentation');\r\n    }\r\n\r\n    this.element.setAttribute('aria-hiden', 'true');\r\n  }\r\n\r\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.element.tagName === 'IMG') {\r\n      // Use transform scale() to modify img placeholder size\r\n      // (instead of changing width/height directly).\r\n      // This helps with performance, specifically in iOS15 Safari.\r\n      setWidthHeight(this.element, 250, 'auto');\r\n      this.element.style.transformOrigin = '0 0';\r\n      this.element.style.transform = toTransformString(0, 0, width / 250);\r\n    } else {\r\n      setWidthHeight(this.element, width, height);\r\n    }\r\n  }\r\n\r\n  destroy() {\r\n    if (this.element.parentNode) {\r\n      this.element.remove();\r\n    }\r\n    this.element = null;\r\n  }\r\n}\r\n\r\nexport default Placeholder;\r\n", "import { createElement, LOAD_STATE, setWidthHeight } from '../util/util.js';\r\nimport Placeholder from './placeholder.js';\r\n\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../util/util.js').LoadState} LoadState */\r\n\r\nclass Content {\r\n  /**\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {PhotoSwipe} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n   * @param {number} index\r\n   */\r\n  constructor(itemData, instance, index) {\r\n    this.instance = instance;\r\n    this.data = itemData;\r\n    this.index = index;\r\n\r\n    /** @type {HTMLImageElement | HTMLDivElement} */\r\n    this.element = undefined;\r\n\r\n    this.width = Number(this.data.w) || Number(this.data.width) || 0;\r\n    this.height = Number(this.data.h) || Number(this.data.height) || 0;\r\n\r\n    this.isAttached = false;\r\n    this.hasSlide = false;\r\n    /** @type {LoadState} */\r\n    this.state = LOAD_STATE.IDLE;\r\n\r\n    if (this.data.type) {\r\n      this.type = this.data.type;\r\n    } else if (this.data.src) {\r\n      this.type = 'image';\r\n    } else {\r\n      this.type = 'html';\r\n    }\r\n\r\n    this.instance.dispatch('contentInit', { content: this });\r\n  }\r\n\r\n  removePlaceholder() {\r\n    if (this.placeholder && !this.keepPlaceholder()) {\r\n      // With delay, as image might be loaded, but not rendered\r\n      setTimeout(() => {\r\n        if (this.placeholder) {\r\n          this.placeholder.destroy();\r\n          this.placeholder = null;\r\n        }\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload content\r\n   *\r\n   * @param {boolean=} isLazy\r\n   * @param {boolean=} reload\r\n   */\r\n  load(isLazy, reload) {\r\n    if (!this.placeholder && this.slide && this.usePlaceholder()) {\r\n      // use   -based placeholder only for the first slide,\r\n      // as rendering (even small stretched thumbnail) is an expensive operation\r\n      const placeholderSrc = this.instance.applyFilters(\r\n        'placeholderSrc',\r\n        (this.data.msrc && this.slide.isFirstSlide) ? this.data.msrc : false,\r\n        this\r\n      );\r\n      this.placeholder = new Placeholder(\r\n        placeholderSrc,\r\n        this.slide.container\r\n      );\r\n    }\r\n\r\n    if (this.element && !reload) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentLoad', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent()) {\r\n      this.loadImage(isLazy);\r\n    } else {\r\n      this.element = createElement('pswp__content');\r\n      this.element.innerHTML = this.data.html || '';\r\n    }\r\n\r\n    if (reload && this.slide) {\r\n      this.slide.updateContentSize(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload image\r\n   *\r\n   * @param {boolean} isLazy\r\n   */\r\n  loadImage(isLazy) {\r\n    const imageElement = createElement('pswp__img', 'img');\r\n    this.element = imageElement;\r\n\r\n    if (this.instance.dispatch('contentLoadImage', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.data.srcset) {\r\n      imageElement.srcset = this.data.srcset;\r\n    }\r\n\r\n    imageElement.src = this.data.src;\r\n\r\n    imageElement.alt = this.data.alt || '';\r\n\r\n    this.state = LOAD_STATE.LOADING;\r\n\r\n    if (imageElement.complete) {\r\n      this.onLoaded();\r\n    } else {\r\n      imageElement.onload = () => {\r\n        this.onLoaded();\r\n      };\r\n\r\n      imageElement.onerror = () => {\r\n        this.onError();\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Assign slide to content\r\n   *\r\n   * @param {Slide} slide\r\n   */\r\n  setSlide(slide) {\r\n    this.slide = slide;\r\n    this.hasSlide = true;\r\n    this.instance = slide.pswp;\r\n\r\n    // todo: do we need to unset slide?\r\n  }\r\n\r\n  /**\r\n   * Content load success handler\r\n   */\r\n  onLoaded() {\r\n    this.state = LOAD_STATE.LOADED;\r\n\r\n    if (this.slide) {\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, content: this });\r\n\r\n      // if content is reloaded\r\n      if (this.slide.isActive\r\n          && this.slide.heavyAppended\r\n          && !this.element.parentNode) {\r\n        this.slide.container.innerHTML = '';\r\n        this.append();\r\n        this.slide.updateContentSize(true);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Content load error handler\r\n   */\r\n  onError() {\r\n    this.state = LOAD_STATE.ERROR;\r\n\r\n    if (this.slide) {\r\n      this.displayError();\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, isError: true, content: this });\r\n      this.instance.dispatch('loadError', { slide: this.slide, content: this });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {Boolean} If the content is currently loading\r\n   */\r\n  isLoading() {\r\n    return this.instance.applyFilters(\r\n      'isContentLoading',\r\n      this.state === LOAD_STATE.LOADING,\r\n      this\r\n    );\r\n  }\r\n\r\n  isError() {\r\n    return this.state === LOAD_STATE.ERROR;\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content is image\r\n   */\r\n  isImageContent() {\r\n    return this.type === 'image';\r\n  }\r\n\r\n  /**\r\n   * Update content size\r\n   *\r\n   * @param {Number} width\r\n   * @param {Number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.placeholder) {\r\n      this.placeholder.setDisplayedSize(width, height);\r\n    }\r\n\r\n    // eslint-disable-next-line max-len\r\n    if (this.instance.dispatch('contentResize', { content: this, width, height }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    setWidthHeight(this.element, width, height);\r\n\r\n    if (this.isImageContent() && !this.isError()) {\r\n      const image = /** @type HTMLImageElement */ (this.element);\r\n\r\n      // Handle srcset sizes attribute.\r\n      //\r\n      // Never lower quality, if it was increased previously.\r\n      // Chrome does this automatically, Firefox and Safari do not,\r\n      // so we store largest used size in dataset.\r\n      if (image.srcset\r\n          // eslint-disable-next-line max-len\r\n          && (!image.dataset.largestUsedSize || width > parseInt(image.dataset.largestUsedSize, 10))) {\r\n        image.sizes = width + 'px';\r\n        image.dataset.largestUsedSize = String(width);\r\n      }\r\n\r\n      if (this.slide) {\r\n        // eslint-disable-next-line max-len\r\n        this.instance.dispatch('imageSizeChange', { slide: this.slide, width, height, content: this });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content can be zoomed\r\n   */\r\n  isZoomable() {\r\n    return this.instance.applyFilters(\r\n      'isContentZoomable',\r\n      this.isImageContent() && (this.state !== LOAD_STATE.ERROR),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n   */\r\n  usePlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'useContentPlaceholder',\r\n      this.isImageContent(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Preload content with lazy-loading param\r\n   */\r\n  lazyLoad() {\r\n    if (this.instance.dispatch('contentLazyLoad', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.load(true);\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If placeholder should be kept after content is loaded\r\n   */\r\n  keepPlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'isKeepingPlaceholder',\r\n      this.isLoading(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Destroy the content\r\n   */\r\n  destroy() {\r\n    this.hasSlide = false;\r\n    this.slide = null;\r\n\r\n    if (this.instance.dispatch('contentDestroy', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.remove();\r\n\r\n    if (this.isImageContent() && this.element) {\r\n      this.element.onload = null;\r\n      this.element.onerror = null;\r\n      this.element = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Display error message\r\n   */\r\n  displayError() {\r\n    if (this.slide) {\r\n      /** @type {HTMLElement} */\r\n      let errorMsgEl = createElement('pswp__error-msg');\r\n      errorMsgEl.innerText = this.instance.options.errorMsg;\r\n      errorMsgEl = this.instance.applyFilters(\r\n        'contentErrorElement',\r\n        errorMsgEl,\r\n        this\r\n      );\r\n      this.element = createElement('pswp__content pswp__error-msg-container');\r\n      this.element.appendChild(errorMsgEl);\r\n      this.slide.container.innerHTML = '';\r\n      this.slide.container.appendChild(this.element);\r\n      this.slide.updateContentSize(true);\r\n      this.removePlaceholder();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the content\r\n   */\r\n  append() {\r\n    this.isAttached = true;\r\n\r\n    if (this.state === LOAD_STATE.ERROR) {\r\n      this.displayError();\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppend', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent()) {\r\n      // Use decode() on nearby slides\r\n      //\r\n      // Nearby slide images are in DOM and not hidden via display:none.\r\n      // However, they are placed offscreen (to the left and right side).\r\n      //\r\n      // Some browsers do not composite the image until it's actually visible,\r\n      // using decode() helps.\r\n      //\r\n      // You might ask \"why dont you just decode() and then append all images\",\r\n      // that's because I want to show image before it's fully loaded,\r\n      // as browser can render parts of image while it is loading.\r\n      if (this.slide\r\n          && !this.slide.isActive\r\n          && ('decode' in this.element)) {\r\n        this.isDecoding = true;\r\n        // Make sure that we start decoding on the next frame\r\n        requestAnimationFrame(() => {\r\n          // element might change\r\n          if (this.element && this.element.tagName === 'IMG') {\r\n            /** @type {HTMLImageElement} */\r\n            (this.element).decode().then(() => {\r\n              this.isDecoding = false;\r\n              requestAnimationFrame(() => {\r\n                this.appendImage();\r\n              });\r\n            }).catch(() => {\r\n              this.isDecoding = false;\r\n            });\r\n          }\r\n        });\r\n      } else {\r\n        if (this.placeholder\r\n          // eslint-disable-next-line max-len\r\n          && (this.state === LOAD_STATE.LOADED || /** @type {LoadState} */ (this.state) === LOAD_STATE.ERROR)\r\n        ) {\r\n          this.removePlaceholder();\r\n        }\r\n        this.appendImage();\r\n      }\r\n    } else if (this.element && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Activate the slide,\r\n   * active slide is generally the current one,\r\n   * meaning the user can see it.\r\n   */\r\n  activate() {\r\n    if (this.instance.dispatch('contentActivate', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.slide) {\r\n      if (this.isImageContent() && this.isDecoding) {\r\n        // add image to slide when it becomes active,\r\n        // even if it's not finished decoding\r\n        this.appendImage();\r\n      } else if (this.isError()) {\r\n        this.load(false, true); // try to reload\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Deactivate the content\r\n   */\r\n  deactivate() {\r\n    this.instance.dispatch('contentDeactivate', { content: this });\r\n  }\r\n\r\n\r\n  /**\r\n   * Remove the content from DOM\r\n   */\r\n  remove() {\r\n    this.isAttached = false;\r\n\r\n    if (this.instance.dispatch('contentRemove', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.element && this.element.parentNode) {\r\n      this.element.remove();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the image content to slide container\r\n   */\r\n  appendImage() {\r\n    if (!this.isAttached) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppendImage', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    // ensure that element exists and is not already appended\r\n    if (this.slide && this.element && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n\r\n      if (this.placeholder\r\n        && (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR)) {\r\n        this.removePlaceholder();\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport default Content;\r\n", "import Eventable from './eventable.js';\r\nimport {\r\n  getElementsFromOption\r\n} from '../util/util.js';\r\nimport Content from '../slide/content.js';\r\n\r\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\r\n/** @typedef {import(\"../photoswipe.js\").PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\r\n\r\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\r\nclass PhotoSwipeBase extends Eventable {\r\n  /**\r\n   * Get total number of slides\r\n   *\r\n   * @returns {number}\r\n   */\r\n  getNumItems() {\r\n    let numItems;\r\n    const { dataSource } = this.options;\r\n    if (!dataSource) {\r\n      numItems = 0;\r\n    } else if ('length' in dataSource) {\r\n      // may be an array or just object with length property\r\n      numItems = dataSource.length;\r\n    } else if ('gallery' in dataSource) {\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      if (dataSource.items) {\r\n        numItems = dataSource.items.length;\r\n      }\r\n    }\r\n\r\n    // legacy event, before filters were introduced\r\n    const event = this.dispatch('numItems', {\r\n      dataSource,\r\n      numItems\r\n    });\r\n    return this.applyFilters('numItems', event.numItems, dataSource);\r\n  }\r\n\r\n  /**\r\n   * @param {SlideData} slideData\r\n   * @param {number} index\r\n   */\r\n  createContentFromData(slideData, index) {\r\n    // @ts-expect-error\r\n    return new Content(slideData, this, index);\r\n  }\r\n\r\n  /**\r\n   * Get item data by index.\r\n   *\r\n   * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n   * For example, it may contain properties like\r\n   * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n   *\r\n   * @param {number} index\r\n   */\r\n  getItemData(index) {\r\n    const { dataSource } = this.options;\r\n    let dataSourceItem;\r\n    if (Array.isArray(dataSource)) {\r\n      // Datasource is an array of elements\r\n      dataSourceItem = dataSource[index];\r\n    } else if (dataSource && dataSource.gallery) {\r\n      // dataSource has gallery property,\r\n      // thus it was created by Lightbox, based on\r\n      // gallery and children options\r\n\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      dataSourceItem = dataSource.items[index];\r\n    }\r\n\r\n    let itemData = dataSourceItem;\r\n\r\n    if (itemData instanceof Element) {\r\n      itemData = this._domElementToItemData(itemData);\r\n    }\r\n\r\n    // Dispatching the itemData event,\r\n    // it's a legacy verion before filters were introduced\r\n    const event = this.dispatch('itemData', {\r\n      itemData: itemData || {},\r\n      index\r\n    });\r\n\r\n    return this.applyFilters('itemData', event.itemData, index);\r\n  }\r\n\r\n  /**\r\n   * Get array of gallery DOM elements,\r\n   * based on childSelector and gallery element.\r\n   *\r\n   * @param {HTMLElement} galleryElement\r\n   */\r\n  _getGalleryDOMElements(galleryElement) {\r\n    if (this.options.children || this.options.childSelector) {\r\n      return getElementsFromOption(\r\n        this.options.children,\r\n        this.options.childSelector,\r\n        galleryElement\r\n      ) || [];\r\n    }\r\n\r\n    return [galleryElement];\r\n  }\r\n\r\n  /**\r\n   * Converts DOM element to item data object.\r\n   *\r\n   * @param {HTMLElement} element DOM element\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  _domElementToItemData(element) {\r\n    /** @type {SlideData} */\r\n    const itemData = {\r\n      element\r\n    };\r\n\r\n    // eslint-disable-next-line max-len\r\n    const linkEl = /** @type {HTMLAnchorElement} */ (element.tagName === 'A' ? element : element.querySelector('a'));\r\n\r\n    if (linkEl) {\r\n      // src comes from data-pswp-src attribute,\r\n      // if it's empty link href is used\r\n      itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\r\n\r\n      if (linkEl.dataset.pswpSrcset) {\r\n        itemData.srcset = linkEl.dataset.pswpSrcset;\r\n      }\r\n\r\n      itemData.width = parseInt(linkEl.dataset.pswpWidth, 10);\r\n      itemData.height = parseInt(linkEl.dataset.pswpHeight, 10);\r\n\r\n      // support legacy w & h properties\r\n      itemData.w = itemData.width;\r\n      itemData.h = itemData.height;\r\n\r\n      if (linkEl.dataset.pswpType) {\r\n        itemData.type = linkEl.dataset.pswpType;\r\n      }\r\n\r\n      const thumbnailEl = element.querySelector('img');\r\n\r\n      if (thumbnailEl) {\r\n        // msrc is URL to placeholder image that's displayed before large image is loaded\r\n        // by default it's displayed only for the first slide\r\n        itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\r\n        itemData.alt = thumbnailEl.getAttribute('alt');\r\n      }\r\n\r\n      if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\r\n        itemData.thumbCropped = true;\r\n      }\r\n    }\r\n\r\n    return this.applyFilters('domItemData', itemData, element, linkEl);\r\n  }\r\n}\r\n\r\nexport default PhotoSwipeBase;\r\n", "import {\r\n  setTransform,\r\n  equalizePoints,\r\n  decodeImage,\r\n  toTransformString\r\n} from './util/util.js';\r\n\r\n/** @typedef {import('./photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('./slide/get-thumb-bounds.js').Bounds} Bounds */\r\n/** @typedef {import('./util/animations.js').AnimationProps} AnimationProps */\r\n\r\n// some browsers do not paint\r\n// elements which opacity is set to 0,\r\n// since we need to pre-render elements for the animation -\r\n// we set it to the minimum amount\r\nconst MIN_OPACITY = 0.003;\r\n\r\n/**\r\n * Manages opening and closing transitions of the PhotoSwipe.\r\n *\r\n * It can perform zoom, fade or no transition.\r\n */\r\nclass Opener {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    this.isClosed = true;\r\n    this._prepareOpen = this._prepareOpen.bind(this);\r\n\r\n    /** @type {false | Bounds} */\r\n    this._thumbBounds = undefined;\r\n\r\n    // Override initial zoom and pan position\r\n    pswp.on('firstZoomPan', this._prepareOpen);\r\n  }\r\n\r\n  open() {\r\n    this._prepareOpen();\r\n    this._start();\r\n  }\r\n\r\n  close() {\r\n    if (this.isClosed || this.isClosing || this.isOpening) {\r\n      // if we close during opening animation\r\n      // for now do nothing,\r\n      // browsers aren't good at changing the direction of the CSS transition\r\n      return false;\r\n    }\r\n\r\n    const slide = this.pswp.currSlide;\r\n\r\n    this.isOpen = false;\r\n    this.isOpening = false;\r\n    this.isClosing = true;\r\n    this._duration = this.pswp.options.hideAnimationDuration;\r\n\r\n    if (slide && slide.currZoomLevel * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n      this._duration = 0;\r\n    }\r\n\r\n    this._applyStartProps();\r\n    setTimeout(() => {\r\n      this._start();\r\n    }, this._croppedZoom ? 30 : 0);\r\n\r\n    return true;\r\n  }\r\n\r\n  _prepareOpen() {\r\n    this.pswp.off('firstZoomPan', this._prepareOpen);\r\n    if (!this.isOpening) {\r\n      const slide = this.pswp.currSlide;\r\n      this.isOpening = true;\r\n      this.isClosing = false;\r\n      this._duration = this.pswp.options.showAnimationDuration;\r\n      if (slide && slide.zoomLevels.initial * slide.width >= this.pswp.options.maxWidthToAnimate) {\r\n        this._duration = 0;\r\n      }\r\n      this._applyStartProps();\r\n    }\r\n  }\r\n\r\n  _applyStartProps() {\r\n    const { pswp } = this;\r\n    const slide = this.pswp.currSlide;\r\n    const { options } = pswp;\r\n\r\n    if (options.showHideAnimationType === 'fade') {\r\n      options.showHideOpacity = true;\r\n      this._thumbBounds = false;\r\n    } else if (options.showHideAnimationType === 'none') {\r\n      options.showHideOpacity = false;\r\n      this._duration = 0;\r\n      this._thumbBounds = false;\r\n    } else if (this.isOpening && pswp._initialThumbBounds) {\r\n      // Use initial bounds if defined\r\n      this._thumbBounds = pswp._initialThumbBounds;\r\n    } else {\r\n      this._thumbBounds = this.pswp.getThumbBounds();\r\n    }\r\n\r\n    this._placeholder = slide.getPlaceholderElement();\r\n\r\n    pswp.animations.stopAll();\r\n\r\n    // Discard animations when duration is less than 50ms\r\n    this._useAnimation = (this._duration > 50);\r\n    this._animateZoom = Boolean(this._thumbBounds)\r\n                        && (slide.content && slide.content.usePlaceholder())\r\n                        && (!this.isClosing || !pswp.mainScroll.isShifted());\r\n    if (!this._animateZoom) {\r\n      this._animateRootOpacity = true;\r\n\r\n      if (this.isOpening) {\r\n        slide.zoomAndPanToInitial();\r\n        slide.applyCurrentZoomPan();\r\n      }\r\n    } else {\r\n      this._animateRootOpacity = options.showHideOpacity;\r\n    }\r\n    this._animateBgOpacity = !this._animateRootOpacity && this.pswp.options.bgOpacity > MIN_OPACITY;\r\n    this._opacityElement = this._animateRootOpacity ? pswp.element : pswp.bg;\r\n\r\n    if (!this._useAnimation) {\r\n      this._duration = 0;\r\n      this._animateZoom = false;\r\n      this._animateBgOpacity = false;\r\n      this._animateRootOpacity = true;\r\n      if (this.isOpening) {\r\n        pswp.element.style.opacity = String(MIN_OPACITY);\r\n        pswp.applyBgOpacity(1);\r\n      }\r\n      return;\r\n    }\r\n\r\n    if (this._animateZoom && this._thumbBounds && this._thumbBounds.innerRect) {\r\n      // Properties are used when animation from cropped thumbnail\r\n      this._croppedZoom = true;\r\n      this._cropContainer1 = this.pswp.container;\r\n      this._cropContainer2 = this.pswp.currSlide.holderElement;\r\n\r\n      pswp.container.style.overflow = 'hidden';\r\n      pswp.container.style.width = pswp.viewportSize.x + 'px';\r\n    } else {\r\n      this._croppedZoom = false;\r\n    }\r\n\r\n    if (this.isOpening) {\r\n      // Apply styles before opening transition\r\n      if (this._animateRootOpacity) {\r\n        pswp.element.style.opacity = String(MIN_OPACITY);\r\n        pswp.applyBgOpacity(1);\r\n      } else {\r\n        if (this._animateBgOpacity) {\r\n          pswp.bg.style.opacity = String(MIN_OPACITY);\r\n        }\r\n        pswp.element.style.opacity = '1';\r\n      }\r\n\r\n      if (this._animateZoom) {\r\n        this._setClosedStateZoomPan();\r\n        if (this._placeholder) {\r\n          // tell browser that we plan to animate the placeholder\r\n          this._placeholder.style.willChange = 'transform';\r\n\r\n          // hide placeholder to allow hiding of\r\n          // elements that overlap it (such as icons over the thumbnail)\r\n          this._placeholder.style.opacity = String(MIN_OPACITY);\r\n        }\r\n      }\r\n    } else if (this.isClosing) {\r\n      // hide nearby slides to make sure that\r\n      // they are not painted during the transition\r\n      pswp.mainScroll.itemHolders[0].el.style.display = 'none';\r\n      pswp.mainScroll.itemHolders[2].el.style.display = 'none';\r\n\r\n      if (this._croppedZoom) {\r\n        if (pswp.mainScroll.x !== 0) {\r\n          // shift the main scroller to zero position\r\n          pswp.mainScroll.resetPosition();\r\n          pswp.mainScroll.resize();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  _start() {\r\n    if (this.isOpening\r\n        && this._useAnimation\r\n        && this._placeholder\r\n        && this._placeholder.tagName === 'IMG') {\r\n      // To ensure smooth animation\r\n      // we wait till the current slide image placeholder is decoded,\r\n      // but no longer than 250ms,\r\n      // and no shorter than 50ms\r\n      // (just using requestanimationframe is not enough in Firefox,\r\n      // for some reason)\r\n      new Promise((resolve) => {\r\n        let decoded = false;\r\n        let isDelaying = true;\r\n        decodeImage(/** @type {HTMLImageElement} */ (this._placeholder)).finally(() => {\r\n          decoded = true;\r\n          if (!isDelaying) {\r\n            resolve();\r\n          }\r\n        });\r\n        setTimeout(() => {\r\n          isDelaying = false;\r\n          if (decoded) {\r\n            resolve();\r\n          }\r\n        }, 50);\r\n        setTimeout(resolve, 250);\r\n      }).finally(() => this._initiate());\r\n    } else {\r\n      this._initiate();\r\n    }\r\n  }\r\n\r\n  _initiate() {\r\n    this.pswp.element.style.setProperty('--pswp-transition-duration', this._duration + 'ms');\r\n\r\n    this.pswp.dispatch(\r\n      this.isOpening ? 'openingAnimationStart' : 'closingAnimationStart'\r\n    );\r\n\r\n    // legacy event\r\n    this.pswp.dispatch(\r\n      /** @type {'initialZoomIn' | 'initialZoomOut'} */\r\n      ('initialZoom' + (this.isOpening ? 'In' : 'Out'))\r\n    );\r\n\r\n    this.pswp.element.classList[this.isOpening ? 'add' : 'remove']('pswp--ui-visible');\r\n\r\n    if (this.isOpening) {\r\n      if (this._placeholder) {\r\n        // unhide the placeholder\r\n        this._placeholder.style.opacity = '1';\r\n      }\r\n      this._animateToOpenState();\r\n    } else if (this.isClosing) {\r\n      this._animateToClosedState();\r\n    }\r\n\r\n    if (!this._useAnimation) {\r\n      this._onAnimationComplete();\r\n    }\r\n  }\r\n\r\n  _onAnimationComplete() {\r\n    const { pswp } = this;\r\n    this.isOpen = this.isOpening;\r\n    this.isClosed = this.isClosing;\r\n    this.isOpening = false;\r\n    this.isClosing = false;\r\n\r\n    pswp.dispatch(\r\n      this.isOpen ? 'openingAnimationEnd' : 'closingAnimationEnd'\r\n    );\r\n\r\n    // legacy event\r\n    pswp.dispatch(\r\n      /** @type {'initialZoomInEnd' | 'initialZoomOutEnd'} */\r\n      ('initialZoom' + (this.isOpen ? 'InEnd' : 'OutEnd'))\r\n    );\r\n\r\n    if (this.isClosed) {\r\n      pswp.destroy();\r\n    } else if (this.isOpen) {\r\n      if (this._animateZoom) {\r\n        pswp.container.style.overflow = 'visible';\r\n        pswp.container.style.width = '100%';\r\n      }\r\n      pswp.currSlide.applyCurrentZoomPan();\r\n    }\r\n  }\r\n\r\n  _animateToOpenState() {\r\n    const { pswp } = this;\r\n    if (this._animateZoom) {\r\n      if (this._croppedZoom) {\r\n        this._animateTo(this._cropContainer1, 'transform', 'translate3d(0,0,0)');\r\n        this._animateTo(this._cropContainer2, 'transform', 'none');\r\n      }\r\n\r\n      pswp.currSlide.zoomAndPanToInitial();\r\n      this._animateTo(\r\n        pswp.currSlide.container,\r\n        'transform',\r\n        pswp.currSlide.getCurrentTransform()\r\n      );\r\n    }\r\n\r\n    if (this._animateBgOpacity) {\r\n      this._animateTo(pswp.bg, 'opacity', String(pswp.options.bgOpacity));\r\n    }\r\n\r\n    if (this._animateRootOpacity) {\r\n      this._animateTo(pswp.element, 'opacity', '1');\r\n    }\r\n  }\r\n\r\n  _animateToClosedState() {\r\n    const { pswp } = this;\r\n\r\n    if (this._animateZoom) {\r\n      this._setClosedStateZoomPan(true);\r\n    }\r\n\r\n    if (this._animateBgOpacity\r\n        && pswp.bgOpacity > 0.01) { // do not animate opacity if it's already at 0\r\n      this._animateTo(pswp.bg, 'opacity', '0');\r\n    }\r\n\r\n    if (this._animateRootOpacity) {\r\n      this._animateTo(pswp.element, 'opacity', '0');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {boolean=} animate\r\n   */\r\n  _setClosedStateZoomPan(animate) {\r\n    if (!this._thumbBounds) return;\r\n\r\n    const { pswp } = this;\r\n    const { innerRect } = this._thumbBounds;\r\n    const { currSlide, viewportSize } = pswp;\r\n\r\n    if (this._croppedZoom) {\r\n      const containerOnePanX = -viewportSize.x + (this._thumbBounds.x - innerRect.x) + innerRect.w;\r\n      const containerOnePanY = -viewportSize.y + (this._thumbBounds.y - innerRect.y) + innerRect.h;\r\n      const containerTwoPanX = viewportSize.x - innerRect.w;\r\n      const containerTwoPanY = viewportSize.y - innerRect.h;\r\n\r\n\r\n      if (animate) {\r\n        this._animateTo(\r\n          this._cropContainer1,\r\n          'transform',\r\n          toTransformString(containerOnePanX, containerOnePanY)\r\n        );\r\n\r\n        this._animateTo(\r\n          this._cropContainer2,\r\n          'transform',\r\n          toTransformString(containerTwoPanX, containerTwoPanY)\r\n        );\r\n      } else {\r\n        setTransform(this._cropContainer1, containerOnePanX, containerOnePanY);\r\n        setTransform(this._cropContainer2, containerTwoPanX, containerTwoPanY);\r\n      }\r\n    }\r\n\r\n    equalizePoints(currSlide.pan, innerRect || this._thumbBounds);\r\n    currSlide.currZoomLevel = this._thumbBounds.w / currSlide.width;\r\n\r\n    if (animate) {\r\n      this._animateTo(currSlide.container, 'transform', currSlide.getCurrentTransform());\r\n    } else {\r\n      currSlide.applyCurrentZoomPan();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {HTMLElement} target\r\n   * @param {'transform' | 'opacity'} prop\r\n   * @param {string} propValue\r\n   */\r\n  _animateTo(target, prop, propValue) {\r\n    if (!this._duration) {\r\n      target.style[prop] = propValue;\r\n      return;\r\n    }\r\n\r\n    const { animations } = this.pswp;\r\n    /** @type {AnimationProps} */\r\n    const animProps = {\r\n      duration: this._duration,\r\n      easing: this.pswp.options.easing,\r\n      onComplete: () => {\r\n        if (!animations.activeAnimations.length) {\r\n          this._onAnimationComplete();\r\n        }\r\n      },\r\n      target,\r\n    };\r\n    animProps[prop] = propValue;\r\n    animations.startTransition(animProps);\r\n  }\r\n}\r\n\r\nexport default Opener;\r\n", "import { getViewportSize, getPanAreaSize } from '../util/viewport-size.js';\r\nimport ZoomLevel from './zoom-level.js';\r\n\r\n/** @typedef {import('./content.js').default} Content */\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n\r\nconst MIN_SLIDES_TO_CACHE = 5;\r\n\r\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipe | PhotoSwipeLightbox} instance PhotoSwipe or PhotoSwipeLightbox\r\n * @param {number} index\r\n * @returns Image that is being decoded or false.\r\n */\r\nexport function lazyLoadData(itemData, instance, index) {\r\n  // src/slide/content/content.js\r\n  const content = instance.createContentFromData(itemData, index);\r\n\r\n  if (!content || !content.lazyLoad) {\r\n    return;\r\n  }\r\n\r\n  const { options } = instance;\r\n\r\n  // We need to know dimensions of the image to preload it,\r\n  // as it might use srcset and we need to define sizes\r\n  // @ts-expect-error should provide pswp instance?\r\n  const viewportSize = instance.viewportSize || getViewportSize(options, instance);\r\n  const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\r\n\r\n  const zoomLevel = new ZoomLevel(options, itemData, -1);\r\n  zoomLevel.update(content.width, content.height, panAreaSize);\r\n\r\n  content.lazyLoad();\r\n  content.setDisplayedSize(\r\n    Math.ceil(content.width * zoomLevel.initial),\r\n    Math.ceil(content.height * zoomLevel.initial)\r\n  );\r\n\r\n  return content;\r\n}\r\n\r\n\r\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipe | PhotoSwipeLightbox} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n */\r\nexport function lazyLoadSlide(index, instance) {\r\n  const itemData = instance.getItemData(index);\r\n\r\n  if (instance.dispatch('lazyLoadSlide', { index, itemData }).defaultPrevented) {\r\n    return;\r\n  }\r\n\r\n  return lazyLoadData(itemData, instance, index);\r\n}\r\n\r\n\r\nclass ContentLoader {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    // Total amount of cached images\r\n    this.limit = Math.max(\r\n      pswp.options.preload[0] + pswp.options.preload[1] + 1,\r\n      MIN_SLIDES_TO_CACHE\r\n    );\r\n    /** @type {Content[]} */\r\n    this._cachedItems = [];\r\n  }\r\n\r\n  /**\r\n   * Lazy load nearby slides based on `preload` option.\r\n   *\r\n   * @param {number=} diff Difference between slide indexes that was changed recently, or 0.\r\n   */\r\n  updateLazy(diff) {\r\n    const { pswp } = this;\r\n\r\n    if (pswp.dispatch('lazyLoad').defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    const { preload } = pswp.options;\r\n    const isForward = diff === undefined ? true : (diff >= 0);\r\n    let i;\r\n\r\n    // preload[1] - num items to preload in forward direction\r\n    for (i = 0; i <= preload[1]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? i : (-i)));\r\n    }\r\n\r\n    // preload[0] - num items to preload in backward direction\r\n    for (i = 1; i <= preload[0]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? (-i) : i));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} index\r\n   */\r\n  loadSlideByIndex(index) {\r\n    index = this.pswp.getLoopedIndex(index);\r\n    // try to get cached content\r\n    let content = this.getContentByIndex(index);\r\n    if (!content) {\r\n      // no cached content, so try to load from scratch:\r\n      content = lazyLoadSlide(index, this.pswp);\r\n      // if content can be loaded, add it to cache:\r\n      if (content) {\r\n        this.addToCache(content);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Slide} slide\r\n   */\r\n  getContentBySlide(slide) {\r\n    let content = this.getContentByIndex(slide.index);\r\n    if (!content) {\r\n      // create content if not found in cache\r\n      content = this.pswp.createContentFromData(slide.data, slide.index);\r\n      if (content) {\r\n        this.addToCache(content);\r\n      }\r\n    }\r\n\r\n    if (content) {\r\n      // assign slide to content\r\n      content.setSlide(slide);\r\n    }\r\n    return content;\r\n  }\r\n\r\n  /**\r\n   * @param {Content} content\r\n   */\r\n  addToCache(content) {\r\n    // move to the end of array\r\n    this.removeByIndex(content.index);\r\n    this._cachedItems.push(content);\r\n\r\n    if (this._cachedItems.length > this.limit) {\r\n      // Destroy the first content that's not attached\r\n      const indexToRemove = this._cachedItems.findIndex((item) => {\r\n        return !item.isAttached && !item.hasSlide;\r\n      });\r\n      if (indexToRemove !== -1) {\r\n        const removedItem = this._cachedItems.splice(indexToRemove, 1)[0];\r\n        removedItem.destroy();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes an image from cache, does not destroy() it, just removes.\r\n   *\r\n   * @param {number} index\r\n   */\r\n  removeByIndex(index) {\r\n    const indexToRemove = this._cachedItems.findIndex(item => item.index === index);\r\n    if (indexToRemove !== -1) {\r\n      this._cachedItems.splice(indexToRemove, 1);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} index\r\n   */\r\n  getContentByIndex(index) {\r\n    return this._cachedItems.find(content => content.index === index);\r\n  }\r\n\r\n  destroy() {\r\n    this._cachedItems.forEach(content => content.destroy());\r\n    this._cachedItems = null;\r\n  }\r\n}\r\n\r\nexport default ContentLoader;\r\n", "import {\r\n  createElement,\r\n  equalizePoints,\r\n  pointsEqual,\r\n  clamp,\r\n} from './util/util.js';\r\n\r\nimport DOMEvents from './util/dom-events.js';\r\nimport Slide from './slide/slide.js';\r\nimport Gestures from './gestures/gestures.js';\r\nimport MainScroll from './main-scroll.js';\r\n\r\nimport Keyboard from './keyboard.js';\r\nimport Animations from './util/animations.js';\r\nimport ScrollWheel from './scroll-wheel.js';\r\nimport UI from './ui/ui.js';\r\nimport { getViewportSize } from './util/viewport-size.js';\r\nimport { getThumbBounds } from './slide/get-thumb-bounds.js';\r\nimport PhotoSwipeBase from './core/base.js';\r\nimport Opener from './opener.js';\r\nimport ContentLoader from './slide/loader.js';\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('./types.js').Type<T>} Type<T>\r\n */\r\n\r\n/** @typedef {import('./slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('./slide/zoom-level.js').ZoomLevelOption} ZoomLevelOption */\r\n/** @typedef {import('./ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('./main-scroll.js').ItemHolder} ItemHolder */\r\n/** @typedef {import('./core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\r\n/** @typedef {import('./core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\r\n/**\r\n * @template T\r\n * @typedef {import('./core/eventable.js').EventCallback<T>} EventCallback<T>\r\n */\r\n/**\r\n * @template T\r\n * @typedef {import('./core/eventable.js').AugmentedEvent<T>} AugmentedEvent<T>\r\n */\r\n\r\n/** @typedef {{ x?: number; y?: number; id?: string | number }} Point */\r\n/** @typedef {{ x?: number; y?: number }} Size */\r\n/** @typedef {{ top: number; bottom: number; left: number; right: number }} Padding */\r\n/** @typedef {SlideData[]} DataSourceArray */\r\n/** @typedef {{ gallery: HTMLElement; items?: HTMLElement[] }} DataSourceObject */\r\n/** @typedef {DataSourceArray | DataSourceObject} DataSource */\r\n/** @typedef {(point: Point, originalEvent: PointerEvent) => void} ActionFn */\r\n/** @typedef {'close' | 'next' | 'zoom' | 'zoom-or-close' | 'toggle-controls'} ActionType */\r\n/** @typedef {Type<PhotoSwipe> | { default: Type<PhotoSwipe> }} PhotoSwipeModule */\r\n/** @typedef {PhotoSwipeModule | Promise<PhotoSwipeModule> | (() => Promise<PhotoSwipeModule>)} PhotoSwipeModuleOption */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeOptions https://photoswipe.com/options/\r\n *\r\n * @prop {DataSource=} dataSource\r\n * Pass an array of any items via dataSource option. Its length will determine amount of slides\r\n * (which may be modified further from numItems event).\r\n *\r\n * Each item should contain data that you need to generate slide\r\n * (for image slide it would be src (image URL), width (image width), height, srcset, alt).\r\n *\r\n * If these properties are not present in your initial array, you may \"pre-parse\" each item from itemData filter.\r\n *\r\n * @prop {number=} bgOpacity\r\n * Background backdrop opacity, always define it via this option and not via CSS rgba color.\r\n *\r\n * @prop {number=} spacing\r\n * Spacing between slides. Defined as ratio relative to the viewport width (0.1 = 10% of viewport).\r\n *\r\n * @prop {boolean=} allowPanToNext\r\n * Allow swipe navigation to the next slide when the current slide is zoomed. Does not apply to mouse events.\r\n *\r\n * @prop {boolean=} loop\r\n * If set to true you'll be able to swipe from the last to the first image.\r\n * Option is always false when there are less than 3 slides.\r\n *\r\n * @prop {boolean=} wheelToZoom\r\n * By default PhotoSwipe zooms image with ctrl-wheel, if you enable this option - image will zoom just via wheel.\r\n *\r\n * @prop {boolean=} pinchToClose\r\n * Pinch touch gesture to close the gallery.\r\n *\r\n * @prop {boolean=} closeOnVerticalDrag\r\n * Vertical drag gesture to close the PhotoSwipe.\r\n *\r\n * @prop {Padding=} padding\r\n * Slide area padding (in pixels).\r\n *\r\n * @prop {(viewportSize: Size, itemData: SlideData, index: number) => Padding} [paddingFn]\r\n * The option is checked frequently, so make sure it's performant. Overrides padding option if defined. For example:\r\n *\r\n * @prop {number | false} [hideAnimationDuration]\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {number | false} [showAnimationDuration]\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {number | false} [zoomAnimationDuration]\r\n * Transition duration in milliseconds, can be 0.\r\n *\r\n * @prop {string=} easing\r\n * String, 'cubic-bezier(.4,0,.22,1)'. CSS easing function for open/close/zoom transitions.\r\n *\r\n * @prop {boolean=} escKey\r\n * Esc key to close.\r\n *\r\n * @prop {boolean=} arrowKeys\r\n * Left/right arrow keys for navigation.\r\n *\r\n * @prop {boolean=} returnFocus\r\n * Restore focus the last active element after PhotoSwipe is closed.\r\n *\r\n * @prop {boolean=} clickToCloseNonZoomable\r\n * If image is not zoomable (for example, smaller than viewport) it can be closed by clicking on it.\r\n *\r\n * @prop {ActionType | ActionFn | false} [imageClickAction]\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} [bgClickAction]\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} [tapAction]\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {ActionType | ActionFn | false} [doubleTapAction]\r\n * Refer to click and tap actions page.\r\n *\r\n * @prop {number=} preloaderDelay\r\n * Delay before the loading indicator will be displayed,\r\n * if image is loaded during it - the indicator will not be displayed at all. Can be zero.\r\n *\r\n * @prop {string=} indexIndicatorSep\r\n * Used for slide count indicator (\"1 of 10 \").\r\n *\r\n * @prop {(options: PhotoSwipeOptions, pswp: PhotoSwipe) => { x: number; y: number }} [getViewportSizeFn]\r\n * A function that should return slide viewport width and height, in format {x: 100, y: 100}.\r\n *\r\n * @prop {string=} errorMsg\r\n * Message to display when the image wasn't able to load. If you need to display HTML - use contentErrorElement filter.\r\n *\r\n * @prop {[number, number]=} preload\r\n * Lazy loading of nearby slides based on direction of movement. Should be an array with two integers,\r\n * first one - number of items to preload before the current image, second one - after the current image.\r\n * Two nearby images are always loaded.\r\n *\r\n * @prop {string=} mainClass\r\n * Class that will be added to the root element of PhotoSwipe, may contain multiple separated by space.\r\n * Example on Styling page.\r\n *\r\n * @prop {HTMLElement=} appendToEl\r\n * Element to which PhotoSwipe dialog will be appended when it opens.\r\n *\r\n * @prop {number=} maxWidthToAnimate\r\n * Maximum width of image to animate, if initial rendered image width\r\n * is larger than this value - the opening/closing transition will be automatically disabled.\r\n *\r\n * @prop {string=} closeTitle\r\n * Translating\r\n *\r\n * @prop {string=} zoomTitle\r\n * Translating\r\n *\r\n * @prop {string=} arrowPrevTitle\r\n * Translating\r\n *\r\n * @prop {string=} arrowNextTitle\r\n * Translating\r\n *\r\n * @prop {'zoom' | 'fade' | 'none'} [showHideAnimationType]\r\n * To adjust opening or closing transition type use lightbox option `showHideAnimationType` (`String`).\r\n * It supports three values - `zoom` (default), `fade` (default if there is no thumbnail) and `none`.\r\n *\r\n * Animations are automatically disabled if user `(prefers-reduced-motion: reduce)`.\r\n *\r\n * @prop {number=} index\r\n * Defines start slide index.\r\n *\r\n * @prop {(e: MouseEvent) => number} [getClickedIndexFn]\r\n *\r\n * @prop {boolean=} arrowPrev\r\n * @prop {boolean=} arrowNext\r\n * @prop {boolean=} zoom\r\n * @prop {boolean=} close\r\n * @prop {boolean=} counter\r\n *\r\n * @prop {string=} arrowPrevSVG\r\n * @prop {string=} arrowNextSVG\r\n * @prop {string=} zoomSVG\r\n * @prop {string=} closeSVG\r\n * @prop {string=} counterSVG\r\n *\r\n * @prop {string=} arrowPrevTitle\r\n * @prop {string=} arrowNextTitle\r\n * @prop {string=} zoomTitle\r\n * @prop {string=} closeTitle\r\n * @prop {string=} counterTitle\r\n *\r\n * @prop {ZoomLevelOption=} initialZoomLevel\r\n * @prop {ZoomLevelOption=} secondaryZoomLevel\r\n * @prop {ZoomLevelOption=} maxZoomLevel\r\n *\r\n * @prop {boolean=} mouseMovePan\r\n * @prop {Point | null} [initialPointerPos]\r\n * @prop {boolean=} showHideOpacity\r\n *\r\n * @prop {PhotoSwipeModuleOption} [pswpModule]\r\n * @prop {() => Promise<any>} [openPromise]\r\n * @prop {boolean=} preloadFirstSlide\r\n * @prop {string=} gallery\r\n * @prop {string=} gallerySelector\r\n * @prop {string=} children\r\n * @prop {string=} childSelector\r\n * @prop {string | false} [thumbSelector]\r\n */\r\n\r\n/** @type {PhotoSwipeOptions} */\r\nconst defaultOptions = {\r\n  allowPanToNext: true,\r\n  spacing: 0.1,\r\n  loop: true,\r\n  pinchToClose: true,\r\n  closeOnVerticalDrag: true,\r\n  hideAnimationDuration: 333,\r\n  showAnimationDuration: 333,\r\n  zoomAnimationDuration: 333,\r\n  escKey: true,\r\n  arrowKeys: true,\r\n  returnFocus: true,\r\n  maxWidthToAnimate: 4000,\r\n  clickToCloseNonZoomable: true,\r\n  imageClickAction: 'zoom-or-close',\r\n  bgClickAction: 'close',\r\n  tapAction: 'toggle-controls',\r\n  doubleTapAction: 'zoom',\r\n  indexIndicatorSep: ' / ',\r\n  preloaderDelay: 2000,\r\n  bgOpacity: 0.8,\r\n\r\n  index: 0,\r\n  errorMsg: 'The image cannot be loaded',\r\n  preload: [1, 2],\r\n  easing: 'cubic-bezier(.4,0,.22,1)'\r\n};\r\n\r\n/**\r\n * PhotoSwipe Core\r\n */\r\nclass PhotoSwipe extends PhotoSwipeBase {\r\n  /**\r\n   * @param {PhotoSwipeOptions} options\r\n   */\r\n  constructor(options) {\r\n    super();\r\n\r\n    this._prepareOptions(options);\r\n\r\n    /**\r\n     * offset of viewport relative to document\r\n     *\r\n     * @type {{ x?: number; y?: number }}\r\n     */\r\n    this.offset = {};\r\n\r\n    /**\r\n     * @type {{ x?: number; y?: number }}\r\n     * @private\r\n     */\r\n    this._prevViewportSize = {};\r\n\r\n    /**\r\n     * Size of scrollable PhotoSwipe viewport\r\n     *\r\n     * @type {{ x?: number; y?: number }}\r\n     */\r\n    this.viewportSize = {};\r\n\r\n    /**\r\n     * background (backdrop) opacity\r\n     *\r\n     * @type {number}\r\n     */\r\n    this.bgOpacity = 1;\r\n\r\n    /** @type {HTMLDivElement} */\r\n    this.topBar = undefined;\r\n\r\n    this.events = new DOMEvents();\r\n\r\n    /** @type {Animations} */\r\n    this.animations = new Animations();\r\n\r\n    this.mainScroll = new MainScroll(this);\r\n    this.gestures = new Gestures(this);\r\n    this.opener = new Opener(this);\r\n    this.keyboard = new Keyboard(this);\r\n    this.contentLoader = new ContentLoader(this);\r\n  }\r\n\r\n  init() {\r\n    if (this.isOpen || this.isDestroying) {\r\n      return;\r\n    }\r\n\r\n    this.isOpen = true;\r\n    this.dispatch('init'); // legacy\r\n    this.dispatch('beforeOpen');\r\n\r\n    this._createMainStructure();\r\n\r\n    // add classes to the root element of PhotoSwipe\r\n    let rootClasses = 'pswp--open';\r\n    if (this.gestures.supportsTouch) {\r\n      rootClasses += ' pswp--touch';\r\n    }\r\n    if (this.options.mainClass) {\r\n      rootClasses += ' ' + this.options.mainClass;\r\n    }\r\n    this.element.className += ' ' + rootClasses;\r\n\r\n    this.currIndex = this.options.index || 0;\r\n    this.potentialIndex = this.currIndex;\r\n    this.dispatch('firstUpdate'); // starting index can be modified here\r\n\r\n    // initialize scroll wheel handler to block the scroll\r\n    this.scrollWheel = new ScrollWheel(this);\r\n\r\n    // sanitize index\r\n    if (Number.isNaN(this.currIndex)\r\n        || this.currIndex < 0\r\n        || this.currIndex >= this.getNumItems()) {\r\n      this.currIndex = 0;\r\n    }\r\n\r\n    if (!this.gestures.supportsTouch) {\r\n      // enable mouse features if no touch support detected\r\n      this.mouseDetected();\r\n    }\r\n\r\n    // causes forced synchronous layout\r\n    this.updateSize();\r\n\r\n    this.offset.y = window.pageYOffset;\r\n\r\n    this._initialItemData = this.getItemData(this.currIndex);\r\n    this.dispatch('gettingData', {\r\n      index: this.currIndex,\r\n      data: this._initialItemData,\r\n      slide: undefined\r\n    });\r\n\r\n    // *Layout* - calculate size and position of elements here\r\n    this._initialThumbBounds = this.getThumbBounds();\r\n    this.dispatch('initialLayout');\r\n\r\n    this.on('openingAnimationEnd', () => {\r\n      // Add content to the previous and next slide\r\n      this.setContent(this.mainScroll.itemHolders[0], this.currIndex - 1);\r\n      this.setContent(this.mainScroll.itemHolders[2], this.currIndex + 1);\r\n\r\n      this.mainScroll.itemHolders[0].el.style.display = 'block';\r\n      this.mainScroll.itemHolders[2].el.style.display = 'block';\r\n\r\n      this.appendHeavy();\r\n\r\n      this.contentLoader.updateLazy();\r\n\r\n      this.events.add(window, 'resize', this._handlePageResize.bind(this));\r\n      this.events.add(window, 'scroll', this._updatePageScrollOffset.bind(this));\r\n      this.dispatch('bindEvents');\r\n    });\r\n\r\n    // set content for center slide (first time)\r\n    this.setContent(this.mainScroll.itemHolders[1], this.currIndex);\r\n    this.dispatch('change');\r\n\r\n    this.opener.open();\r\n\r\n    this.dispatch('afterInit');\r\n\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Get looped slide index\r\n   * (for example, -1 will return the last slide)\r\n   *\r\n   * @param {number} index\r\n   */\r\n  getLoopedIndex(index) {\r\n    const numSlides = this.getNumItems();\r\n\r\n    if (this.options.loop) {\r\n      if (index > numSlides - 1) {\r\n        index -= numSlides;\r\n      }\r\n\r\n      if (index < 0) {\r\n        index += numSlides;\r\n      }\r\n    }\r\n\r\n    index = clamp(index, 0, numSlides - 1);\r\n\r\n    return index;\r\n  }\r\n\r\n  appendHeavy() {\r\n    this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n      if (itemHolder.slide) {\r\n        itemHolder.slide.appendHeavy();\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Change the slide\r\n   * @param {number} index New index\r\n   */\r\n  goTo(index) {\r\n    this.mainScroll.moveIndexBy(\r\n      this.getLoopedIndex(index) - this.potentialIndex\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Go to the next slide.\r\n   */\r\n  next() {\r\n    this.goTo(this.potentialIndex + 1);\r\n  }\r\n\r\n  /**\r\n   * Go to the previous slide.\r\n   */\r\n  prev() {\r\n    this.goTo(this.potentialIndex - 1);\r\n  }\r\n\r\n  /**\r\n   * @see slide/slide.js zoomTo\r\n   *\r\n   * @param {Parameters<Slide['zoomTo']>} args\r\n   */\r\n  zoomTo(...args) {\r\n    this.currSlide.zoomTo(...args);\r\n  }\r\n\r\n  /**\r\n   * @see slide/slide.js toggleZoom\r\n   */\r\n  toggleZoom() {\r\n    this.currSlide.toggleZoom();\r\n  }\r\n\r\n  /**\r\n   * Close the gallery.\r\n   * After closing transition ends - destroy it\r\n   */\r\n  close() {\r\n    if (!this.opener.isOpen || this.isDestroying) {\r\n      return;\r\n    }\r\n\r\n    this.isDestroying = true;\r\n\r\n    this.dispatch('close');\r\n\r\n    this.events.removeAll();\r\n    this.opener.close();\r\n  }\r\n\r\n  /**\r\n   * Destroys the gallery:\r\n   * - instantly closes the gallery\r\n   * - unbinds events,\r\n   * - cleans intervals and timeouts\r\n   * - removes elements from DOM\r\n   */\r\n  destroy() {\r\n    if (!this.isDestroying) {\r\n      this.options.showHideAnimationType = 'none';\r\n      this.close();\r\n      return;\r\n    }\r\n\r\n    this.dispatch('destroy');\r\n\r\n    this.listeners = null;\r\n\r\n    this.scrollWrap.ontouchmove = null;\r\n    this.scrollWrap.ontouchend = null;\r\n\r\n    this.element.remove();\r\n\r\n    this.mainScroll.itemHolders.forEach((itemHolder) => {\r\n      if (itemHolder.slide) {\r\n        itemHolder.slide.destroy();\r\n      }\r\n    });\r\n\r\n    this.contentLoader.destroy();\r\n    this.events.removeAll();\r\n  }\r\n\r\n  /**\r\n   * Refresh/reload content of a slide by its index\r\n   *\r\n   * @param {number} slideIndex\r\n   */\r\n  refreshSlideContent(slideIndex) {\r\n    this.contentLoader.removeByIndex(slideIndex);\r\n    this.mainScroll.itemHolders.forEach((itemHolder, i) => {\r\n      let potentialHolderIndex = this.currSlide.index - 1 + i;\r\n      if (this.canLoop()) {\r\n        potentialHolderIndex = this.getLoopedIndex(potentialHolderIndex);\r\n      }\r\n      if (potentialHolderIndex === slideIndex) {\r\n        // set the new slide content\r\n        this.setContent(itemHolder, slideIndex, true);\r\n\r\n        // activate the new slide if it's current\r\n        if (i === 1) {\r\n          /** @type {Slide} */\r\n          this.currSlide = itemHolder.slide;\r\n          itemHolder.slide.setIsActive(true);\r\n        }\r\n      }\r\n    });\r\n\r\n    this.dispatch('change');\r\n  }\r\n\r\n\r\n  /**\r\n   * Set slide content\r\n   *\r\n   * @param {ItemHolder} holder mainScroll.itemHolders array item\r\n   * @param {number} index Slide index\r\n   * @param {boolean=} force If content should be set even if index wasn't changed\r\n   */\r\n  setContent(holder, index, force) {\r\n    if (this.canLoop()) {\r\n      index = this.getLoopedIndex(index);\r\n    }\r\n\r\n    if (holder.slide) {\r\n      if (holder.slide.index === index && !force) {\r\n        // exit if holder already contains this slide\r\n        // this could be common when just three slides are used\r\n        return;\r\n      }\r\n\r\n      // destroy previous slide\r\n      holder.slide.destroy();\r\n      holder.slide = null;\r\n    }\r\n\r\n    // exit if no loop and index is out of bounds\r\n    if (!this.canLoop() && (index < 0 || index >= this.getNumItems())) {\r\n      return;\r\n    }\r\n\r\n    const itemData = this.getItemData(index);\r\n    holder.slide = new Slide(itemData, index, this);\r\n\r\n    // set current slide\r\n    if (index === this.currIndex) {\r\n      this.currSlide = holder.slide;\r\n    }\r\n\r\n    holder.slide.append(holder.el);\r\n  }\r\n\r\n  getViewportCenterPoint() {\r\n    return {\r\n      x: this.viewportSize.x / 2,\r\n      y: this.viewportSize.y / 2\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Update size of all elements.\r\n   * Executed on init and on page resize.\r\n   *\r\n   * @param {boolean=} force Update size even if size of viewport was not changed.\r\n   */\r\n  updateSize(force) {\r\n    // let item;\r\n    // let itemIndex;\r\n\r\n    if (this.isDestroying) {\r\n      // exit if PhotoSwipe is closed or closing\r\n      // (to avoid errors, as resize event might be delayed)\r\n      return;\r\n    }\r\n\r\n    //const newWidth = this.scrollWrap.clientWidth;\r\n    //const newHeight = this.scrollWrap.clientHeight;\r\n\r\n    const newViewportSize = getViewportSize(this.options, this);\r\n\r\n    if (!force && pointsEqual(newViewportSize, this._prevViewportSize)) {\r\n      // Exit if dimensions were not changed\r\n      return;\r\n    }\r\n\r\n    //this._prevViewportSize.x = newWidth;\r\n    //this._prevViewportSize.y = newHeight;\r\n    equalizePoints(this._prevViewportSize, newViewportSize);\r\n\r\n    this.dispatch('beforeResize');\r\n\r\n    equalizePoints(this.viewportSize, this._prevViewportSize);\r\n\r\n    this._updatePageScrollOffset();\r\n\r\n    this.dispatch('viewportSize');\r\n\r\n    // Resize slides only after opener animation is finished\r\n    // and don't re-calculate size on inital size update\r\n    this.mainScroll.resize(this.opener.isOpen);\r\n\r\n    if (!this.hasMouse && window.matchMedia('(any-hover: hover)').matches) {\r\n      this.mouseDetected();\r\n    }\r\n\r\n    this.dispatch('resize');\r\n  }\r\n\r\n  /**\r\n   * @param {number} opacity\r\n   */\r\n  applyBgOpacity(opacity) {\r\n    this.bgOpacity = Math.max(opacity, 0);\r\n    this.bg.style.opacity = String(this.bgOpacity * this.options.bgOpacity);\r\n  }\r\n\r\n  /**\r\n   * Whether mouse is detected\r\n   */\r\n  mouseDetected() {\r\n    if (!this.hasMouse) {\r\n      this.hasMouse = true;\r\n      this.element.classList.add('pswp--has_mouse');\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Page resize event handler\r\n   *\r\n   * @private\r\n   */\r\n  _handlePageResize() {\r\n    this.updateSize();\r\n\r\n    // In iOS webview, if element size depends on document size,\r\n    // it'll be measured incorrectly in resize event\r\n    //\r\n    // https://bugs.webkit.org/show_bug.cgi?id=170595\r\n    // https://hackernoon.com/onresize-event-broken-in-mobile-safari-d8469027bf4d\r\n    if (/iPhone|iPad|iPod/i.test(window.navigator.userAgent)) {\r\n      setTimeout(() => {\r\n        this.updateSize();\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Page scroll offset is used\r\n   * to get correct coordinates\r\n   * relative to PhotoSwipe viewport.\r\n   *\r\n   * @private\r\n   */\r\n  _updatePageScrollOffset() {\r\n    this.setScrollOffset(0, window.pageYOffset);\r\n  }\r\n\r\n  /**\r\n   * @param {number} x\r\n   * @param {number} y\r\n   */\r\n  setScrollOffset(x, y) {\r\n    this.offset.x = x;\r\n    this.offset.y = y;\r\n    this.dispatch('updateScrollOffset');\r\n  }\r\n\r\n  /**\r\n   * Create main HTML structure of PhotoSwipe,\r\n   * and add it to DOM\r\n   *\r\n   * @private\r\n   */\r\n  _createMainStructure() {\r\n    // root DOM element of PhotoSwipe (.pswp)\r\n    this.element = createElement('pswp');\r\n    this.element.setAttribute('tabindex', '-1');\r\n    this.element.setAttribute('role', 'dialog');\r\n\r\n    // template is legacy prop\r\n    this.template = this.element;\r\n\r\n    // Background is added as a separate element,\r\n    // as animating opacity is faster than animating rgba()\r\n    this.bg = createElement('pswp__bg', false, this.element);\r\n    this.scrollWrap = createElement('pswp__scroll-wrap', false, this.element);\r\n    this.container = createElement('pswp__container', false, this.scrollWrap);\r\n\r\n    this.mainScroll.appendHolders();\r\n\r\n    this.ui = new UI(this);\r\n    this.ui.init();\r\n\r\n    // append to DOM\r\n    (this.options.appendToEl || document.body).appendChild(this.element);\r\n  }\r\n\r\n\r\n  /**\r\n   * Get position and dimensions of small thumbnail\r\n   *   {x:,y:,w:}\r\n   *\r\n   * Height is optional (calculated based on the large image)\r\n   */\r\n  getThumbBounds() {\r\n    return getThumbBounds(\r\n      this.currIndex,\r\n      this.currSlide ? this.currSlide.data : this._initialItemData,\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * If the PhotoSwipe can have continious loop\r\n   * @returns Boolean\r\n   */\r\n  canLoop() {\r\n    return (this.options.loop && this.getNumItems() > 2);\r\n  }\r\n\r\n  /**\r\n   * @param {PhotoSwipeOptions} options\r\n   * @private\r\n   */\r\n  _prepareOptions(options) {\r\n    if (window.matchMedia('(prefers-reduced-motion), (update: slow)').matches) {\r\n      options.showHideAnimationType = 'none';\r\n      options.zoomAnimationDuration = 0;\r\n    }\r\n\r\n    /** @type {PhotoSwipeOptions}*/\r\n    this.options = {\r\n      ...defaultOptions,\r\n      ...options\r\n    };\r\n  }\r\n}\r\n\r\nexport default PhotoSwipe;\r\n", "// Only prepares data on the element for use by a surrounding [lightbox-gallery]\nup.compiler('[lightbox-image]', { priority: 1 }, (element, { width, height, thumbUrl, copyrightText, descriptionText, titleText }) => {\n\n  element.getItemData = () => {\n    const { src, currentSrc } = element\n    const thumbUrl = (currentSrc.indexOf('data:image/svg+xml') === 0) ? src : currentSrc\n\n    return {\n      element,\n      copyrightText,\n      descriptionText,\n      titleText,\n      w: width,\n      h: height,\n      src,\n      msrc: thumbUrl, // shown while when lightbox was just opened, before loading higher-resolution file from srcset\n      srcset: element.getAttribute('data-srcset'),\n    }\n  }\n\n})\n", "up.compiler('[search-form]', (element) => {\n\n  function onSubmit(event) {\n    // query element at runtime because [search-form] is placed in the global layout\n    // and the query field itself might have been replaced, e.g. through [up-hungry]\n    const queryField = element.querySelector('[name*=\"query\"]')\n\n    if (queryField.value === '') {\n      queryField.focus()\n      up.event.halt(event)\n    }\n  }\n\n  element.addEventListener('submit', onSubmit)\n\n})\n", "up.compiler('[track-page-view]', () => {\n  const url = location.href\n  const safeUrl = url.replace(/(\\w+?_token)=\\w+/, '$1=_HIDDEN_')\n\n  window._paq.push(['setCustomUrl', safeUrl])\n  window._paq.push(['trackPageView'])\n})\n", "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ (() => {\n\nwindow.up = {\n    version: '3.12.1'\n};\n\n\n/***/ }),\n/* 2 */\n/***/ (() => {\n\nup.mockable = function (originalFn) {\n    if (window.jasmine) {\n        let name = originalFn.name;\n        let obj = { [name]: originalFn };\n        let mockableFn = function () {\n            return obj[name].apply(this, arguments);\n        };\n        mockableFn.mock = () => spyOn(obj, name);\n        return mockableFn;\n    }\n    else {\n        return originalFn;\n    }\n};\n\n\n/***/ }),\n/* 3 */\n/***/ (() => {\n\nup.util = (function () {\n    function noop() {\n    }\n    function asyncNoop() {\n        return Promise.resolve();\n    }\n    function memoize(func) {\n        let cachedValue, cached;\n        return function (...args) {\n            if (cached) {\n                return cachedValue;\n            }\n            else {\n                cached = true;\n                return cachedValue = func.apply(this, args);\n            }\n        };\n    }\n    function normalizeURL(url, options) {\n        options = newOptions(options, { host: 'cross-domain' });\n        const parts = parseURL(url);\n        let normalized = '';\n        if (options.host === 'cross-domain') {\n            options.host = isCrossOrigin(parts);\n        }\n        if (options.host) {\n            normalized += parts.protocol + \"//\" + parts.host;\n        }\n        let { pathname } = parts;\n        if (options.trailingSlash === false && pathname !== '/') {\n            pathname = pathname.replace(/\\/$/, '');\n        }\n        normalized += pathname;\n        if (options.search !== false) {\n            normalized += parts.search;\n        }\n        if (options.hash !== false) {\n            normalized += parts.hash;\n        }\n        return normalized;\n    }\n    function matchURLs(leftURL, rightURL, options) {\n        return matchableURL(leftURL, options) === matchableURL(rightURL, options);\n    }\n    function matchableURL(url, options) {\n        if (!url)\n            return;\n        return normalizeURL(url, { hash: false, trailingSlash: false, ...options });\n    }\n    function matchableURLPatternAtom(patternAtom) {\n        if (patternAtom.endsWith('/'))\n            return [patternAtom, patternAtom.slice(0, -1)];\n        if (patternAtom.includes('/?'))\n            return [patternAtom, patternAtom.replace('/?', '?')];\n        if (patternAtom.endsWith('/*'))\n            return [patternAtom, patternAtom.slice(0, -2), patternAtom.slice(0, -2) + '?*'];\n        return patternAtom;\n    }\n    const APP_PROTOCOL = location.protocol;\n    const APP_HOSTNAME = location.hostname;\n    function isCrossOrigin(urlOrAnchor) {\n        if (isString(urlOrAnchor) && (urlOrAnchor.indexOf('//') === -1)) {\n            return false;\n        }\n        const parts = parseURL(urlOrAnchor);\n        return (APP_HOSTNAME !== parts.hostname) || (APP_PROTOCOL !== parts.protocol);\n    }\n    function parseURL(url) {\n        if (url.pathname) {\n            return url;\n        }\n        let link = document.createElement('a');\n        link.href = url;\n        return link;\n    }\n    function normalizeMethod(method) {\n        return method ? method.toUpperCase() : 'GET';\n    }\n    function methodAllowsPayload(method) {\n        return (method !== 'GET') && (method !== 'HEAD');\n    }\n    function iteratee(block) {\n        if (isString(block)) {\n            return (item) => item[block];\n        }\n        else {\n            return block;\n        }\n    }\n    function map(list, block) {\n        if (list.length === 0) {\n            return [];\n        }\n        block = iteratee(block);\n        let mapped = [];\n        let i = 0;\n        for (let item of list) {\n            mapped.push(block(item, i++));\n        }\n        return mapped;\n    }\n    function mapObject(array, pairer) {\n        return Object.fromEntries(array.map(pairer));\n    }\n    function each(array, block) {\n        let i = 0;\n        for (let item of array) {\n            block(item, i++);\n        }\n    }\n    function isNull(value) {\n        return value === null;\n    }\n    function isTruthy(value) {\n        return !!value;\n    }\n    function isUndefined(value) {\n        return value === undefined;\n    }\n    const isDefined = negate(isUndefined);\n    function isMissing(value) {\n        return isUndefined(value) || isNull(value);\n    }\n    const isGiven = negate(isMissing);\n    function isBlank(value) {\n        if (isMissing(value)) {\n            return true;\n        }\n        if (isObject(value) && value[isBlank.key]) {\n            return value[isBlank.key]();\n        }\n        if (isString(value) || isList(value)) {\n            return value.length === 0;\n        }\n        if (isOptions(value)) {\n            return Object.keys(value).length === 0;\n        }\n        return false;\n    }\n    isBlank.key = 'up.util.isBlank';\n    function presence(value, tester = isPresent) {\n        if (tester(value)) {\n            return value;\n        }\n    }\n    const isPresent = negate(isBlank);\n    function isFunction(value) {\n        return typeof (value) === 'function';\n    }\n    function isString(value) {\n        return (typeof (value) === 'string') || value instanceof String;\n    }\n    function isBoolean(value) {\n        return (typeof (value) === 'boolean') || value instanceof Boolean;\n    }\n    function isNumber(value) {\n        return (typeof (value) === 'number') || value instanceof Number;\n    }\n    function isOptions(value) {\n        return (typeof (value) === 'object') && !isNull(value) && (isUndefined(value.constructor) || (value.constructor === Object));\n    }\n    function isObject(value) {\n        const typeOfResult = typeof (value);\n        return ((typeOfResult === 'object') && !isNull(value)) || (typeOfResult === 'function');\n    }\n    function isElement(value) {\n        return value instanceof Element;\n    }\n    function isTextNode(value) {\n        return value instanceof Text;\n    }\n    function isRegExp(value) {\n        return value instanceof RegExp;\n    }\n    function isError(value) {\n        return value instanceof Error;\n    }\n    function isJQuery(value) {\n        return up.browser.canJQuery() && value instanceof jQuery;\n    }\n    function isElementLike(value) {\n        return !!(value && (value.addEventListener || (isJQuery(value) && value[0]?.addEventListener)));\n    }\n    function isPromise(value) {\n        return isObject(value) && isFunction(value.then);\n    }\n    const { isArray } = Array;\n    function isFormData(value) {\n        return value instanceof FormData;\n    }\n    function toArray(value) {\n        return isArray(value) ? value : copyArrayLike(value);\n    }\n    function isList(value) {\n        return isArray(value) ||\n            isNodeList(value) ||\n            isArguments(value) ||\n            isJQuery(value) ||\n            isHTMLCollection(value);\n    }\n    function isNodeList(value) {\n        return value instanceof NodeList;\n    }\n    function isHTMLCollection(value) {\n        return value instanceof HTMLCollection;\n    }\n    function isArguments(value) {\n        return Object.prototype.toString.call(value) === '[object Arguments]';\n    }\n    function isAdjacentPosition(value) {\n        return /^(before|after)/.test(value);\n    }\n    function wrapList(value) {\n        if (isList(value)) {\n            return value;\n        }\n        else if (isMissing(value)) {\n            return [];\n        }\n        else {\n            return [value];\n        }\n    }\n    function copy(value) {\n        if (isObject(value) && value[copy.key]) {\n            value = value[copy.key]();\n        }\n        else if (isList(value)) {\n            value = copyArrayLike(value);\n        }\n        else if (isOptions(value)) {\n            value = Object.assign({}, value);\n        }\n        return value;\n    }\n    function copyArrayLike(arrayLike) {\n        return Array.prototype.slice.call(arrayLike);\n    }\n    copy.key = 'up.util.copy';\n    Date.prototype[copy.key] = function () { return new Date(+this); };\n    function merge(...sources) {\n        return Object.assign({}, ...sources);\n    }\n    function mergeDefined(...sources) {\n        const result = {};\n        for (let source of sources) {\n            if (source) {\n                for (let key in source) {\n                    const value = source[key];\n                    if (isDefined(value)) {\n                        result[key] = value;\n                    }\n                }\n            }\n        }\n        return result;\n    }\n    function newOptions(object, defaults) {\n        if (defaults) {\n            return merge(defaults, object);\n        }\n        else if (object) {\n            return copy(object);\n        }\n        else {\n            return {};\n        }\n    }\n    function parseArgIntoOptions(args, argKey) {\n        let [positionalArg, options] = parseArgs(args, 'val', 'options');\n        if (isDefined(positionalArg)) {\n            options[argKey] = positionalArg;\n        }\n        return options;\n    }\n    function findInList(list, tester) {\n        tester = iteratee(tester);\n        let match;\n        for (let element of list) {\n            if (tester(element)) {\n                match = element;\n                break;\n            }\n        }\n        return match;\n    }\n    function some(list, tester) {\n        return !!findResult(list, tester);\n    }\n    function findResult(list, tester) {\n        tester = iteratee(tester);\n        let i = 0;\n        for (let item of list) {\n            const result = tester(item, i++);\n            if (result) {\n                return result;\n            }\n        }\n    }\n    function every(list, tester) {\n        tester = iteratee(tester);\n        let match = true;\n        let i = 0;\n        for (let item of list) {\n            if (!tester(item, i++)) {\n                match = false;\n                break;\n            }\n        }\n        return match;\n    }\n    function compact(array) {\n        return filterList(array, isGiven);\n    }\n    function compactObject(object) {\n        return pickBy(object, isGiven);\n    }\n    function uniq(array) {\n        if (array.length < 2) {\n            return array;\n        }\n        return Array.from(new Set(array));\n    }\n    function uniqBy(array, mapper) {\n        if (array.length < 2) {\n            return array;\n        }\n        mapper = iteratee(mapper);\n        const seenElements = new Set();\n        return filterList(array, function (elem, index) {\n            const mapped = mapper(elem, index);\n            if (seenElements.has(mapped)) {\n                return false;\n            }\n            else {\n                seenElements.add(mapped);\n                return true;\n            }\n        });\n    }\n    function filterList(list, tester) {\n        tester = iteratee(tester);\n        const matches = [];\n        each(list, function (element, index) {\n            if (tester(element, index)) {\n                return matches.push(element);\n            }\n        });\n        return matches;\n    }\n    function reject(list, tester) {\n        tester = negate(iteratee(tester));\n        return filterList(list, tester);\n    }\n    function intersect(array1, array2) {\n        return filterList(array1, (element) => contains(array2, element));\n    }\n    function scheduleTimer(millis, callback) {\n        return setTimeout(callback, millis);\n    }\n    function queueTask(task) {\n        setTimeout(task);\n    }\n    function queueFastTask(task) {\n        const channel = new MessageChannel();\n        channel.port1.onmessage = () => task();\n        channel.port2.postMessage(0);\n    }\n    function last(value) {\n        return value[value.length - 1];\n    }\n    function contains(value, subValue) {\n        let indexOf = value.indexOf || Array.prototype.indexOf;\n        return indexOf.call(value, subValue) >= 0;\n    }\n    function containsAll(values, subValues) {\n        return every(subValues, (subValue) => contains(values, subValue));\n    }\n    function objectContains(object, subObject) {\n        const reducedValue = pick(object, Object.keys(subObject));\n        return isEqual(subObject, reducedValue);\n    }\n    function pick(object, keys) {\n        const filtered = {};\n        for (let key of keys) {\n            if (key in object) {\n                filtered[key] = object[key];\n            }\n        }\n        return filtered;\n    }\n    function pickBy(object, tester) {\n        tester = iteratee(tester);\n        const filtered = {};\n        for (let key in object) {\n            const value = object[key];\n            if (tester(value, key)) {\n                filtered[key] = object[key];\n            }\n        }\n        return filtered;\n    }\n    function omit(object, keys) {\n        return pickBy(object, (_value, key) => !contains(keys, key));\n    }\n    function unresolvablePromise() {\n        return new Promise(noop);\n    }\n    function remove(array, element) {\n        const index = array.indexOf(element);\n        if (index >= 0) {\n            array.splice(index, 1);\n            return element;\n        }\n    }\n    function evalOption(value, ...args) {\n        return isFunction(value) ? value(...args) : value;\n    }\n    function evalAutoOption(value, autoMeans, ...args) {\n        value = evalOption(value, ...args);\n        if (value === 'auto') {\n            value = evalOption(autoMeans, ...args);\n        }\n        return value;\n    }\n    const ESCAPE_HTML_ENTITY_MAP = {\n        \"&\": \"&amp;\",\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        '\"': '&quot;',\n        \"'\": '&#x27;'\n    };\n    function escapeHTML(string) {\n        return string.replace(/[&<>\"']/g, (char) => ESCAPE_HTML_ENTITY_MAP[char]);\n    }\n    function escapeRegExp(string) {\n        return string.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n    function pluckKey(object, key) {\n        const value = object[key];\n        delete object[key];\n        return value;\n    }\n    function renameKey(object, oldKey, newKey) {\n        if (oldKey in object) {\n            object[newKey] = pluckKey(object, oldKey);\n        }\n    }\n    function extractLastArg(args, tester) {\n        if (tester(last(args))) {\n            return args.pop();\n        }\n    }\n    function extractCallback(args) {\n        return extractLastArg(args, isFunction);\n    }\n    function extractOptions(args) {\n        return extractLastArg(args, isOptions) || {};\n    }\n    function identity(arg) {\n        return arg;\n    }\n    function sequence(...args) {\n        let functions = scanFunctions(...args);\n        return (...args) => map(functions, (fn) => fn(...args));\n    }\n    function flatten(array) {\n        const flattened = [];\n        for (let object of array) {\n            if (isList(object)) {\n                flattened.push(...object);\n            }\n            else {\n                flattened.push(object);\n            }\n        }\n        return flattened;\n    }\n    function flatMap(array, block) {\n        return flatten(map(array, block));\n    }\n    function always(promise, callback = identity) {\n        return promise.then(callback, callback);\n    }\n    function newDeferred() {\n        let resolveFn;\n        let rejectFn;\n        const nativePromise = new Promise(function (givenResolve, givenReject) {\n            resolveFn = givenResolve;\n            rejectFn = givenReject;\n        });\n        nativePromise.resolve = resolveFn;\n        nativePromise.reject = rejectFn;\n        return nativePromise;\n    }\n    function isBasicObjectProperty(k) {\n        return Object.prototype.hasOwnProperty(k);\n    }\n    function isEqual(a, b) {\n        if (a === b) {\n            return true;\n        }\n        if (a?.valueOf) {\n            a = a.valueOf();\n        }\n        if (b?.valueOf) {\n            b = b.valueOf();\n        }\n        if (a === b) {\n            return true;\n        }\n        if (typeof (a) !== typeof (b)) {\n            return false;\n        }\n        if (isList(a) && isList(b)) {\n            return isEqualList(a, b);\n        }\n        if (isObject(a) && a[isEqual.key]) {\n            return a[isEqual.key](b);\n        }\n        if (isOptions(a) && isOptions(b)) {\n            return isEqualOptions(a, b);\n        }\n        return false;\n    }\n    function isEqualOptions(a, b) {\n        const aKeys = Object.keys(a);\n        const bKeys = Object.keys(b);\n        return isEqualList(aKeys, bKeys) && every(aKeys, (key) => isEqual(a[key], b[key]));\n    }\n    isEqual.key = 'up.util.isEqual';\n    function isEqualList(a, b) {\n        return (a.length === b.length) && every(a, (elem, index) => isEqual(elem, b[index]));\n    }\n    function getSimpleTokens(value, { json = false, separator = /[,\\s]/ } = {}) {\n        if (!isString(value)) {\n            return wrapList(value);\n        }\n        else if (json && /^\\[.*]$/.test(value)) {\n            return parseRelaxedJSON(value);\n        }\n        else {\n            return splitSimpleTokenString(value, separator);\n        }\n    }\n    function splitSimpleTokenString(value, separator) {\n        let parts = up.migrate.splitAtOr?.(value) || value.split(separator);\n        return parts.map((s) => s.trim()).filter(identity);\n    }\n    function getComplexTokens(value) {\n        if (!isString(value)) {\n            return wrapList(value);\n        }\n        else {\n            let { maskedTokens, restore } = complexTokenOutlines(value);\n            return maskedTokens.map((token) => restore(token));\n        }\n    }\n    function complexTokenOutlines(string) {\n        let { masked, restore } = expressionOutline(string);\n        let maskedTokens = splitSimpleTokenString(masked, ',');\n        return { maskedTokens, restore };\n    }\n    function wrapValue(constructor, ...args) {\n        return (args[0] instanceof constructor) ? args[0] : new constructor(...args);\n    }\n    let nextUid = 0;\n    function uid() {\n        return nextUid++;\n    }\n    function reverse(list) {\n        return copy(list).reverse();\n    }\n    function withRenamedKeys(object, renameKeyFn) {\n        const renamed = {};\n        for (let key in object) {\n            let transformed = renameKeyFn(key);\n            if (isGiven(transformed)) {\n                renamed[transformed] = object[key];\n            }\n        }\n        return renamed;\n    }\n    function camelToKebabCase(str) {\n        return str.replace(/[A-Z]/g, (char) => '-' + char.toLowerCase());\n    }\n    function lowerCaseFirst(str) {\n        return str[0].toLowerCase() + str.slice(1);\n    }\n    function upperCaseFirst(str) {\n        return str[0].toUpperCase() + str.slice(1);\n    }\n    function defineDelegates(object, props, targetProvider) {\n        for (let prop of props) {\n            Object.defineProperty(object, prop, {\n                get() {\n                    const target = targetProvider.call(this);\n                    let value = target[prop];\n                    if (isFunction(value)) {\n                        value = value.bind(target);\n                    }\n                    return value;\n                },\n                set(newValue) {\n                    const target = targetProvider.call(this);\n                    target[prop] = newValue;\n                }\n            });\n        }\n    }\n    function delegatePromise(object, targetProvider) {\n        return defineDelegates(object, ['then', 'catch', 'finally'], targetProvider);\n    }\n    function stringifyArg(arg, placeholder = '%o') {\n        let string;\n        const maxLength = 200;\n        if (placeholder === '%c') {\n            return '';\n        }\n        if (placeholder === '%s' && isGiven(arg)) {\n            arg = arg.toString();\n        }\n        if (isString(arg)) {\n            string = arg.trim().replace(/[\\n\\r\\t ]+/g, ' ');\n            if (placeholder === '%o') {\n                string = JSON.stringify(string);\n            }\n        }\n        else if (isUndefined(arg)) {\n            string = 'undefined';\n        }\n        else if (isNumber(arg) || isFunction(arg)) {\n            string = arg.toString();\n        }\n        else if (isArray(arg)) {\n            string = `[${map(arg, stringifyArg).join(', ')}]`;\n        }\n        else if (isJQuery(arg)) {\n            string = `$(${map(arg, stringifyArg).join(', ')})`;\n        }\n        else if (isElement(arg)) {\n            string = `<${arg.tagName.toLowerCase()}`;\n            for (let attr of ['id', 'up-id', 'name', 'class']) {\n                let value = arg.getAttribute(attr);\n                if (value) {\n                    string += ` ${attr}=\"${value}\"`;\n                }\n            }\n            string += \">\";\n        }\n        else if (isRegExp(arg) || isError(arg)) {\n            string = arg.toString();\n        }\n        else {\n            try {\n                string = JSON.stringify(arg);\n            }\n            catch (error) {\n                if (error.name === 'TypeError') {\n                    string = '(circular structure)';\n                }\n                else {\n                    throw error;\n                }\n            }\n        }\n        if (string.length > maxLength) {\n            string = `${string.substr(0, maxLength)}\u2026${last(string)}`;\n        }\n        return string;\n    }\n    const SPRINTF_PLACEHOLDERS = /%[oOdisfc]/g;\n    function sprintf(message, ...args) {\n        return message.replace(SPRINTF_PLACEHOLDERS, (placeholder) => stringifyArg(args.shift(), placeholder));\n    }\n    function negate(fn) {\n        return function (...args) {\n            return !fn(...args);\n        };\n    }\n    function useMemoizeCacheEntry(cacheEntry) {\n        if (cacheEntry.error) {\n            throw cacheEntry.error;\n        }\n        else {\n            return cacheEntry.value;\n        }\n    }\n    function buildMemoizeCacheEntry(oldImpl, self, args) {\n        try {\n            return { value: oldImpl.apply(self, args) };\n        }\n        catch (e) {\n            return { error: e };\n        }\n    }\n    function memoizeMethod(object, propLiteral) {\n        for (let prop in propLiteral) {\n            let originalDescriptor = Object.getOwnPropertyDescriptor(object, prop);\n            let oldImpl = originalDescriptor.value;\n            let cachingImpl = function (...args) {\n                let cache = this[`__${prop}MemoizeCache`] ||= {};\n                let cacheKey = JSON.stringify(args);\n                cache[cacheKey] ||= buildMemoizeCacheEntry(oldImpl, this, args);\n                return useMemoizeCacheEntry(cache[cacheKey]);\n            };\n            object[prop] = cachingImpl;\n        }\n    }\n    function safeStringifyJSON(value) {\n        let json = JSON.stringify(value);\n        return escapeHighASCII(json);\n    }\n    function escapeHighASCII(string) {\n        let unicodeEscape = (char) => \"\\\\u\" + char.charCodeAt(0).toString(16).padStart(4, '0');\n        return string.replace(/[^\\x00-\\x7F]/g, unicodeEscape);\n    }\n    function variant(source, changes = {}) {\n        let variant = Object.create(source);\n        Object.assign(variant, changes);\n        return variant;\n    }\n    function parseArgs(args, ...specs) {\n        let results = [];\n        while (specs.length) {\n            let lastSpec = specs.pop();\n            if (lastSpec === 'options') {\n                results.unshift(extractOptions(args));\n            }\n            else if (lastSpec === 'callback') {\n                results.unshift(extractCallback(args));\n            }\n            else if (lastSpec === 'val') {\n                results.unshift(args.pop());\n            }\n            else if (isFunction(lastSpec)) {\n                let value = lastSpec(last(args)) ? args.pop() : undefined;\n                results.unshift(value);\n            }\n        }\n        return results;\n    }\n    function scanFunctions(...values) {\n        return values.flat().filter(isFunction);\n    }\n    function cleaner(order = 'lifo') {\n        let fns = [];\n        let track = function (values, transform) {\n            values = scanFunctions(...values).map(transform);\n            fns.push(...scanFunctions(...values));\n        };\n        let api = function (...values) {\n            track(values, identity);\n        };\n        api.guard = function (...values) {\n            track(values, up.error.guardFn);\n        };\n        api.clean = function (...args) {\n            if (order === 'lifo')\n                fns.reverse();\n            fns.forEach((fn) => fn(...args));\n            fns = [];\n        };\n        return api;\n    }\n    function maskPattern(str, patterns, { keepDelimiters = false } = {}) {\n        let maskCount = 0;\n        let maskPattern = /\u00A7\\d+/g;\n        let maskings = {};\n        let replaceLayers = [];\n        let replace = (replacePattern, allowRestoreTransform) => {\n            let didReplace = false;\n            str = str.replaceAll(replacePattern, function (match) {\n                didReplace = true;\n                let mask = '\u00A7' + (maskCount++);\n                let remain;\n                let masked;\n                if (keepDelimiters) {\n                    let startDelimiter = match[0];\n                    let endDelimiter = match.slice(-1);\n                    masked = match.slice(1, -1);\n                    remain = startDelimiter + mask + endDelimiter;\n                }\n                else {\n                    masked = match;\n                    remain = mask;\n                }\n                maskings[mask] = masked;\n                return remain;\n            });\n            if (didReplace)\n                replaceLayers.unshift({ allowRestoreTransform });\n        };\n        replace(maskPattern, false);\n        for (let pattern of patterns)\n            replace(pattern, true);\n        let restore = (s, transform = identity) => {\n            for (let { allowRestoreTransform } of replaceLayers) {\n                let iterationTransform = allowRestoreTransform ? transform : identity;\n                s = s.replace(maskPattern, (match) => iterationTransform(assert(maskings[match], isString)));\n            }\n            return s;\n        };\n        return { masked: str, restore };\n    }\n    const QUOTED_STRING_PATTERN = /'(?:\\\\\\\\|\\\\'|[^'])*'|\"(?:\\\\\\\\|\\\\\"|[^\"])*\"/g;\n    const NESTED_GROUP_PATTERN = /{(?:[^{}]|{[^{}]*})*}|\\((?:[^\\(\\)]|\\([^\\(\\)]*\\))*\\)|\\[(?:[^\\[\\]]|\\[[^\\[\\]]*\\])*\\]/g;\n    function expressionOutline(str) {\n        return maskPattern(str, [QUOTED_STRING_PATTERN, NESTED_GROUP_PATTERN], { keepDelimiters: true });\n    }\n    function ensureDoubleQuotes(str) {\n        if (str[0] === '\"')\n            return str;\n        assert(str[0] === \"'\");\n        str = str.slice(1, -1);\n        let transformed = str.replace(/(\\\\\\\\)|(\\\\')|(\\\\\")|(\")/g, function (_match, escapedBackslash, escapedSingleQuote, _doubleQuote) {\n            return escapedBackslash\n                || (escapedSingleQuote && \"'\")\n                || '\\\\\"';\n        });\n        return '\"' + transformed + '\"';\n    }\n    function parseString(value) {\n        return JSON.parse(ensureDoubleQuotes(value));\n    }\n    function parseRelaxedJSON(str) {\n        let { masked, restore } = maskPattern(str, [QUOTED_STRING_PATTERN]);\n        masked = masked.replace(/([a-z_$][\\w$]*:)/gi, (unquotedProperty) => ('\"' + unquotedProperty.slice(0, -1) + '\":'));\n        masked = masked.replace(/,\\s*([}\\]])/g, '$1');\n        masked = restore(masked, ensureDoubleQuotes);\n        return JSON.parse(masked);\n    }\n    function parseScalarJSONPairs(str) {\n        let { maskedTokens, restore } = complexTokenOutlines(str);\n        return maskedTokens.map((maskedToken) => {\n            let [_match, string, json] = maskedToken.match(/([^{]+)({[^}]*})?/);\n            return [\n                restore(string.trim()),\n                json && parseRelaxedJSON(restore(json))\n            ];\n        });\n    }\n    function spanObject(keys, value) {\n        return mapObject(keys, (key) => [key, value]);\n    }\n    function assert(value, testFn = isTruthy) {\n        if (testFn(value)) {\n            return value;\n        }\n        else {\n            throw \"assert failed\";\n        }\n    }\n    return {\n        parseURL,\n        normalizeURL,\n        matchableURL,\n        matchableURLPatternAtom,\n        matchURLs,\n        normalizeMethod,\n        methodAllowsPayload,\n        copy,\n        merge,\n        mergeDefined,\n        options: newOptions,\n        parseArgIntoOptions,\n        each,\n        map,\n        flatMap,\n        mapObject,\n        spanObject,\n        findResult,\n        some,\n        every,\n        find: findInList,\n        filter: filterList,\n        reject,\n        intersect,\n        compact,\n        compactObject,\n        uniq,\n        uniqBy,\n        last,\n        isNull,\n        isDefined,\n        isUndefined,\n        isGiven,\n        isMissing,\n        isPresent,\n        isBlank,\n        presence,\n        isObject,\n        isFunction,\n        isString,\n        isBoolean,\n        isNumber,\n        isElement,\n        isTextNode,\n        isJQuery,\n        isElementLike,\n        isPromise,\n        isOptions,\n        isArray,\n        isFormData,\n        isList,\n        isRegExp,\n        isAdjacentPosition,\n        timer: scheduleTimer,\n        contains,\n        containsAll,\n        objectContains,\n        toArray,\n        pick,\n        pickBy,\n        omit,\n        unresolvablePromise,\n        remove,\n        memoize,\n        pluckKey,\n        renameKey,\n        extractOptions,\n        extractCallback,\n        noop,\n        asyncNoop,\n        identity,\n        escapeHTML,\n        escapeRegExp,\n        sequence,\n        evalOption,\n        evalAutoOption,\n        flatten,\n        newDeferred,\n        always,\n        isBasicObjectProperty,\n        isCrossOrigin,\n        task: queueTask,\n        fastTask: queueFastTask,\n        isEqual,\n        getSimpleTokens,\n        getComplexTokens,\n        wrapList,\n        wrapValue,\n        uid,\n        upperCaseFirst,\n        lowerCaseFirst,\n        delegate: defineDelegates,\n        delegatePromise,\n        reverse,\n        camelToKebabCase,\n        sprintf,\n        withRenamedKeys,\n        memoizeMethod,\n        safeStringifyJSON,\n        variant,\n        cleaner,\n        scanFunctions,\n        args: parseArgs,\n        parseRelaxedJSON,\n        parseScalarJSONPairs,\n        maskPattern,\n        expressionOutline,\n        parseString,\n        assert,\n    };\n})();\n\n\n/***/ }),\n/* 4 */\n/***/ (() => {\n\nup.error = (function () {\n    function fail(...args) {\n        throw new up.Error(args);\n    }\n    function isCritical(error) {\n        return (typeof error !== 'object') || ((error.name !== 'AbortError') && !(error instanceof up.RenderResult) && !(error instanceof up.Response));\n    }\n    function muteUncriticalRejection(promise) {\n        return promise.catch(throwCritical);\n    }\n    function muteUncriticalSync(block) {\n        try {\n            return block();\n        }\n        catch (e) {\n            throwCritical(e);\n        }\n    }\n    function throwCritical(value) {\n        if (isCritical(value)) {\n            throw value;\n        }\n    }\n    function guard(fn, ...args) {\n        try {\n            return fn(...args);\n        }\n        catch (error) {\n            reportError(error);\n        }\n    }\n    function guardPromise(promise) {\n        return promise.catch(reportError);\n    }\n    function guardFn(fn) {\n        return (...args) => guard(() => fn(...args));\n    }\n    return {\n        fail,\n        throwCritical,\n        muteUncriticalRejection,\n        muteUncriticalSync,\n        guard,\n        guardPromise,\n        guardFn,\n    };\n})();\nup.fail = up.error.fail;\n\n\n/***/ }),\n/* 5 */\n/***/ (() => {\n\nup.migrate = {\n    config: {},\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (() => {\n\nup.browser = (function () {\n    function submitForm(form) {\n        form.submit();\n    }\n    function canPushState() {\n        return up.protocol.initialRequestMethod() === 'GET';\n    }\n    function canJQuery() {\n        return !!window.jQuery;\n    }\n    function popCookie(name) {\n        let value = document.cookie.match(new RegExp(name + \"=(\\\\w+)\"))?.[1];\n        if (value) {\n            document.cookie = name + '=;Max-Age=0;Path=/';\n            return value;\n        }\n    }\n    function assertConfirmed(options) {\n        const confirmed = !options.confirm || window.confirm(options.confirm);\n        if (!confirmed) {\n            throw new up.Aborted('User canceled action');\n        }\n        return true;\n    }\n    return {\n        submitForm,\n        canPushState,\n        canJQuery,\n        assertConfirmed,\n        popCookie,\n    };\n})();\n\n\n/***/ }),\n/* 7 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(8);\nup.element = (function () {\n    const u = up.util;\n    function first(...args) {\n        let [root = document, selector] = u.args(args, 'val', 'val');\n        return root.querySelector(selector);\n    }\n    function subtree(root, selector) {\n        const descendantMatches = root.querySelectorAll(selector);\n        if (elementLikeMatches(root, selector)) {\n            return [root, ...descendantMatches];\n        }\n        else {\n            return descendantMatches;\n        }\n    }\n    function subtreeFirst(root, selector) {\n        return elementLikeMatches(root, selector) ? root : root.querySelector(selector);\n    }\n    function elementLikeMatches(elementLike, selector) {\n        return u.isElement(elementLike) && elementLike.matches(selector);\n    }\n    function contains(root, selectorOrElement) {\n        const element = getOne(selectorOrElement);\n        return Node.prototype.contains.call(root, element);\n    }\n    function ancestor(element, selector) {\n        return element.parentNode?.closest(selector);\n    }\n    function around(element, selector) {\n        return getList(element.closest(selector), subtree(element, selector));\n    }\n    function getOne(...args) {\n        const value = args.pop();\n        if (u.isElement(value)) {\n            return value;\n        }\n        else if (u.isString(value)) {\n            return first(...args, value);\n        }\n        else if (u.isList(value)) {\n            if (value.length > 1) {\n                up.fail('up.element.get(): Cannot cast multiple elements (%o) to a single element', value);\n            }\n            return value[0];\n        }\n        else {\n            return value;\n        }\n    }\n    function getList(...args) {\n        return u.flatMap(args, valueToList);\n    }\n    function valueToList(value) {\n        if (u.isString(value)) {\n            return document.querySelectorAll(value);\n        }\n        else {\n            return u.wrapList(value);\n        }\n    }\n    function hide(element) {\n        setVisible(element, false);\n    }\n    function show(element) {\n        setVisible(element, true);\n    }\n    function showTemp(element) {\n        return setVisibleTemp(element, true);\n    }\n    function hideTemp(element) {\n        return setVisibleTemp(element, false);\n    }\n    function setVisibleTemp(element, newVisible) {\n        if (newVisible === isVisible(element))\n            return u.noop;\n        setVisible(element, newVisible);\n        return () => setVisible(element, !newVisible);\n    }\n    function setVisible(element, newVisible) {\n        if (newVisible) {\n            element.removeAttribute('hidden');\n            if (element.style.display === 'none') {\n                element.style.display = '';\n            }\n        }\n        else {\n            element.setAttribute('hidden', '');\n        }\n    }\n    function toggle(element, newVisible = !isVisible(element)) {\n        setVisible(element, newVisible);\n    }\n    function setAttrPresence(element, attr, value, newPresent) {\n        if (newPresent) {\n            return element.setAttribute(attr, value);\n        }\n        else {\n            return element.removeAttribute(attr);\n        }\n    }\n    function setAttrs(element, attrs) {\n        for (let key in attrs) {\n            const value = attrs[key];\n            if (u.isGiven(value)) {\n                element.setAttribute(key, value);\n            }\n            else {\n                element.removeAttribute(key);\n            }\n        }\n    }\n    function setAttrsTemp(element, attrs) {\n        let keys = Object.keys(attrs);\n        let oldAttrs = pickAttrs(element, keys);\n        setAttrs(element, attrs);\n        return () => setAttrs(element, oldAttrs);\n    }\n    function metaContent(name) {\n        const selector = \"meta\" + attrSelector('name', name);\n        return document.head.querySelector(selector)?.getAttribute('content');\n    }\n    function insertBefore(existingNode, newNode) {\n        existingNode.parentNode.insertBefore(newNode, existingNode);\n    }\n    function createFromSelector(selector, attrs = {}) {\n        let { includePath } = parseSelector(selector);\n        let rootElement;\n        let depthElement;\n        let previousElement;\n        for (let includeSegment of includePath) {\n            let { tagName } = includeSegment;\n            if (!tagName || tagName === '*') {\n                tagName = 'div';\n            }\n            depthElement = document.createElement(tagName);\n            if (!rootElement) {\n                rootElement = depthElement;\n            }\n            makeVariation(depthElement, includeSegment);\n            previousElement?.appendChild(depthElement);\n            previousElement = depthElement;\n        }\n        for (let key in attrs) {\n            let value = attrs[key];\n            if (key === 'class') {\n                addClasses(rootElement, u.wrapList(value));\n            }\n            else if (key === 'style') {\n                setInlineStyle(rootElement, value);\n            }\n            else if (key === 'text') {\n                rootElement.textContent = value;\n            }\n            else if (key === 'content') {\n                if (u.isString(value)) {\n                    rootElement.innerHTML = value;\n                }\n                else {\n                    rootElement.append(...u.wrapList(value));\n                }\n            }\n            else {\n                rootElement.setAttribute(key, value);\n            }\n        }\n        return rootElement;\n    }\n    function makeVariation(element, { id, classNames, attributes }) {\n        if (id) {\n            element.id = id;\n        }\n        for (let [name, value] of Object.entries(attributes)) {\n            element.setAttribute(name, value);\n        }\n        addClasses(element, classNames);\n    }\n    function parseSelector(rawSelector) {\n        let excludeRaw;\n        const { masked: selectorOutline, restore: restoreSelectorLiterals, } = u.expressionOutline(rawSelector);\n        const includeWithoutAttrs = selectorOutline.replace(/:not\\([^)]*\\)/, function (match) {\n            excludeRaw = restoreSelectorLiterals(match);\n            return '';\n        });\n        let includeRaw = restoreSelectorLiterals(includeWithoutAttrs);\n        const includeSegments = includeWithoutAttrs.split(/[ >]+/);\n        let includePath = includeSegments.map(function (depthSelector) {\n            let parsed = {\n                tagName: null,\n                classNames: [],\n                id: null,\n                attributes: {}\n            };\n            depthSelector = depthSelector.replace(/^[\\w-*]+/, function (match) {\n                parsed.tagName = match;\n                return '';\n            });\n            depthSelector = depthSelector.replace(/#([\\w-]+)/, function (_match, id) {\n                parsed.id = id;\n                return '';\n            });\n            depthSelector = depthSelector.replace(/\\.([\\w-]+)/g, function (_match, className) {\n                parsed.classNames.push(className);\n                return '';\n            });\n            depthSelector = depthSelector.replace(/\\[[^\\]]*]/g, function (attr) {\n                attr = restoreSelectorLiterals(attr);\n                let [_raw, name, _operator, quote, value] = attr.match(/\\[([\\w-]+)(?:([~|^$*]?=)([\"'])?([^\\3\\]]*?)\\3)?]/);\n                quote ||= '\"';\n                parsed.attributes[name] = value ? u.parseString(quote + value + quote) : '';\n                return '';\n            });\n            if (depthSelector) {\n                up.fail('Cannot parse selector: ' + rawSelector);\n            }\n            return parsed;\n        });\n        return {\n            includePath,\n            includeRaw,\n            excludeRaw,\n        };\n    }\n    function affix(...args) {\n        let [parent, position = 'beforeend', selector, attributes] = u.args(args, 'val', u.isAdjacentPosition, 'val', 'options');\n        const element = createFromSelector(selector, attributes);\n        parent.insertAdjacentElement(position, element);\n        return element;\n    }\n    const SINGLETON_TAG_NAMES = ['HTML', 'BODY', 'HEAD', 'TITLE'];\n    const isSingleton = up.mockable((element) => element.matches(SINGLETON_TAG_NAMES.join()));\n    function elementTagName(element) {\n        return element.tagName.toLowerCase();\n    }\n    function attrSelector(attribute, value) {\n        if (u.isGiven(value)) {\n            value = value.replace(/\"/g, '\\\\\"');\n            return `[${attribute}=\"${value}\"]`;\n        }\n        else {\n            return `[${attribute}]`;\n        }\n    }\n    function idSelector(id) {\n        if (id.match(/^[a-z][a-z0-9\\-_]*$/i)) {\n            return `#${id}`;\n        }\n        else {\n            return attrSelector('id', id);\n        }\n    }\n    function classSelector(klass) {\n        klass = klass.replace(/[^\\w-]/g, '\\\\$&');\n        return `.${klass}`;\n    }\n    function createBrokenDocumentFromHTML(html) {\n        const firstTag = firstTagNameInHTML(html);\n        if (['TR', 'TD', 'TH', 'THEAD', 'TBODY'].includes(firstTag)) {\n            html = `<table>${html}</table>`;\n        }\n        return new DOMParser().parseFromString(html, 'text/html');\n    }\n    function revivedClone(element) {\n        let clone = createFromHTML(element.outerHTML);\n        if ('nonce' in element)\n            clone.nonce = element.nonce;\n        return clone;\n    }\n    function createFromHTML(html) {\n        return extractSingular(createNodesFromHTML(html));\n    }\n    function extractSingular(nodes) {\n        if (nodes.length === 1 && u.isElementLike(nodes[0])) {\n            return nodes[0];\n        }\n        else {\n            up.fail('Expected a single element, but got %d elements', nodes.length);\n        }\n    }\n    function createNodesFromHTML(html) {\n        html = html.trim();\n        const range = document.createRange();\n        range.setStart(document.body, 0);\n        const fragment = range.createContextualFragment(html);\n        return fragment.childNodes;\n    }\n    function getRoot() {\n        return document.documentElement;\n    }\n    function paint(element) {\n        element.offsetHeight;\n    }\n    function concludeCSSTransition(element) {\n        const undo = setStyleTemp(element, { transition: 'none' });\n        paint(element);\n        return undo;\n    }\n    function hasCSSTransition(styleHash) {\n        const prop = styleHash['transition-property'];\n        const duration = styleHash['transition-duration'];\n        const noTransition = ((prop === 'none') || ((prop === 'all') && (duration === 0)));\n        return !noTransition;\n    }\n    function fixedToAbsolute(element) {\n        const elementRectAsFixed = element.getBoundingClientRect();\n        element.style.position = 'absolute';\n        const offsetParentRect = element.offsetParent.getBoundingClientRect();\n        setInlineStyle(element, {\n            left: (elementRectAsFixed.left - computedStyleNumber(element, 'margin-left') - offsetParentRect.left) + 'px',\n            top: (elementRectAsFixed.top - computedStyleNumber(element, 'margin-top') - offsetParentRect.top) + 'px',\n            right: '',\n            bottom: ''\n        });\n    }\n    function setMissingAttrs(element, attrs) {\n        for (let key in attrs) {\n            setMissingAttr(element, key, attrs[key]);\n        }\n    }\n    function setMissingAttr(element, key, value) {\n        if (u.isMissing(element.getAttribute(key))) {\n            element.setAttribute(key, value);\n        }\n    }\n    function unwrap(wrapper) {\n        preservingFocus(function () {\n            let childNodes = [...wrapper.childNodes];\n            for (let child of childNodes)\n                insertBefore(wrapper, child);\n            wrapper.remove();\n        });\n    }\n    function wrapNodes(nodeOrNodes) {\n        const wrapper = document.createElement('up-wrapper');\n        wrapper.append(...u.wrapList(nodeOrNodes));\n        return wrapper;\n    }\n    function wrapIfRequired(nodes) {\n        if (nodes.length === 1 && u.isElement(nodes[0])) {\n            return nodes[0];\n        }\n        else {\n            return wrapNodes(nodes);\n        }\n    }\n    function wrapChildren(element) {\n        const wrapper = wrapNodes(element.childNodes);\n        element.append(wrapper);\n        return wrapper;\n    }\n    function preservingFocus(fn) {\n        const oldFocusElement = document.activeElement;\n        try {\n            return fn();\n        }\n        finally {\n            if (oldFocusElement && oldFocusElement !== document.activeElement) {\n                oldFocusElement.focus({ preventScroll: true });\n            }\n        }\n    }\n    function parseAttr(element, attribute, ...parsers) {\n        if (!element.hasAttribute?.(attribute))\n            return undefined;\n        let rawValue = element.getAttribute(attribute);\n        for (let parser of parsers) {\n            let parserResult = parser(rawValue, attribute, element);\n            if (u.isDefined(parserResult))\n                return parserResult;\n        }\n    }\n    function stringAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseString);\n    }\n    let tryParseString = u.identity;\n    function booleanAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseBoolean);\n    }\n    function tryParseBoolean(value, attribute) {\n        switch (value) {\n            case 'false': {\n                return false;\n            }\n            case 'true':\n            case '':\n            case attribute:\n                {\n                    return true;\n                }\n        }\n    }\n    function booleanOrStringAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseBoolean, tryParseString);\n    }\n    function booleanOrNumberAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseBoolean, tryParseNumber);\n    }\n    function numberAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseNumber);\n    }\n    function tryParseNumber(value) {\n        value = value.replaceAll('_', '');\n        if (value.match(/^-?[\\d.]+$/)) {\n            return parseFloat(value);\n        }\n    }\n    function jsonAttr(element, attribute) {\n        return parseAttr(element, attribute, tryParseJSON);\n    }\n    function tryParseJSON(value) {\n        if (value?.trim()) {\n            return u.parseRelaxedJSON(value);\n        }\n    }\n    function callbackAttr(link, attr, callbackOptions) {\n        return parseAttr(link, attr, (value) => tryParseCallback(value, link, callbackOptions));\n    }\n    function tryParseCallback(code, link, { exposedKeys = [], mainKey = 'event' } = {}) {\n        const callback = up.NonceableCallback.fromString(code).toFunction(mainKey, ...exposedKeys);\n        return function (event) {\n            const exposedValues = Object.values(u.pick(event, exposedKeys));\n            return callback.call(link, event, ...exposedValues);\n        };\n    }\n    function closestAttr(element, attr, readAttrFn = stringAttr) {\n        let match = element.closest('[' + attr + ']');\n        if (match) {\n            return readAttrFn(match, attr);\n        }\n    }\n    function addClasses(element, classes) {\n        for (let klass of classes)\n            element.classList.add(klass);\n    }\n    function addClassTemp(element, klass) {\n        return setClassStateTemp(element, klass, true);\n    }\n    function removeClassTemp(element, klass) {\n        return setClassStateTemp(element, klass, false);\n    }\n    function setClassStateTemp(element, klass, targetState) {\n        if (element.classList.contains(klass) === targetState)\n            return u.noop;\n        element.classList.toggle(klass, targetState);\n        return () => element.classList.toggle(klass, !targetState);\n    }\n    function computedStyle(element, props) {\n        const style = window.getComputedStyle(element);\n        return extractFromStyleObject(style, props);\n    }\n    function computedStyleNumber(element, prop) {\n        const rawValue = computedStyle(element, prop);\n        if (u.isPresent(rawValue)) {\n            return parseFloat(rawValue);\n        }\n    }\n    function inlineStyle(element, props) {\n        const { style } = element;\n        return extractFromStyleObject(style, props);\n    }\n    function extractFromStyleObject(style, keyOrKeys) {\n        if (up.migrate.loaded)\n            keyOrKeys = up.migrate.fixGetStyleProps(keyOrKeys);\n        if (u.isString(keyOrKeys)) {\n            return style.getPropertyValue(keyOrKeys);\n        }\n        else {\n            return u.mapObject(keyOrKeys, (key) => [key, style.getPropertyValue(key)]);\n        }\n    }\n    function setInlineStyle(element, props, unit = '') {\n        if (up.migrate.loaded)\n            props = up.migrate.fixSetStyleProps(props, unit);\n        if (u.isString(props)) {\n            element.setAttribute('style', props);\n        }\n        else {\n            const { style } = element;\n            for (let key in props) {\n                let value = props[key];\n                style.setProperty(key, value + unit);\n            }\n        }\n    }\n    function setStyleTemp(element, newStyles) {\n        const oldStyles = inlineStyle(element, Object.keys(newStyles));\n        setInlineStyle(element, newStyles);\n        return () => setInlineStyle(element, oldStyles);\n    }\n    function isVisible(element) {\n        return !!(element.offsetWidth || element.offsetHeight || element.getClientRects().length);\n    }\n    function isUpPrefixed(string) {\n        return /^up-/.test(string);\n    }\n    function pickAttrs(element, attrNames) {\n        return u.mapObject(attrNames, (name) => [name, element.getAttribute(name)]);\n    }\n    function upAttrs(element) {\n        let attrNames = element.getAttributeNames().filter(isUpPrefixed);\n        return pickAttrs(element, attrNames);\n    }\n    function upClasses(element) {\n        return u.filter(element.classList.values(), isUpPrefixed);\n    }\n    function cleanJQuery(element) {\n        if (up.browser.canJQuery()) {\n            jQuery(element).remove();\n        }\n    }\n    function isEmpty(element) {\n        return !element.children.length > 0 && !element.innerText.trim();\n    }\n    function crossOriginSelector(attr) {\n        return `[${attr}*=\"//\"]:not([${attr}*=\"//${location.host}/\"])`;\n    }\n    function isIntersectingWindow(element, { margin = 0 } = {}) {\n        const rect = up.Rect.fromElement(element);\n        rect.grow(margin);\n        return (rect.bottom > 0) && (rect.top < window.innerHeight) &&\n            (rect.right > 0) && (rect.left < window.innerWidth);\n    }\n    function unionSelector(includes, excludes) {\n        let selector = `:is(${includes.join()})`;\n        if (u.isPresent(excludes))\n            selector += `:not(${excludes.join()})`;\n        return selector;\n    }\n    function matchSelectorMap(selectorMap, element) {\n        let matches = [];\n        if (selectorMap) {\n            for (let [selector, value] of Object.entries(selectorMap)) {\n                if (u.isDefined(value) && element.matches(selector)) {\n                    matches.push(value);\n                }\n            }\n        }\n        return matches;\n    }\n    function documentPosition(element) {\n        let nextSibling = element.nextElementSibling;\n        if (nextSibling) {\n            return [nextSibling, 'beforebegin'];\n        }\n        else {\n            return [element.parentElement, 'beforeend'];\n        }\n    }\n    const FIRST_TAG_NAME_PATTERN = /^\\s*(<!--[^-]*.*?-->\\s*)*<([a-z-!]+)\\b/i;\n    function firstTagNameInHTML(html) {\n        return FIRST_TAG_NAME_PATTERN.exec(html)?.[2].toUpperCase();\n    }\n    function isFullDocumentHTML(html) {\n        let firstTag = firstTagNameInHTML(html);\n        return firstTag === 'HTML' || firstTag === '!DOCTYPE';\n    }\n    return {\n        subtree,\n        subtreeFirst,\n        contains,\n        closestAttr,\n        ancestor,\n        around,\n        get: getOne,\n        list: getList,\n        toggle,\n        hide,\n        hideTemp,\n        show,\n        showTemp,\n        metaContent,\n        insertBefore,\n        createFromSelector,\n        setAttrs,\n        setAttrsTemp,\n        affix,\n        idSelector,\n        classSelector,\n        isSingleton,\n        attrSelector,\n        tagName: elementTagName,\n        createBrokenDocumentFromHTML,\n        revivedClone,\n        createNodesFromHTML,\n        createFromHTML,\n        extractSingular,\n        get root() { return getRoot(); },\n        paint,\n        concludeCSSTransition,\n        hasCSSTransition,\n        fixedToAbsolute,\n        setMissingAttrs,\n        setMissingAttr,\n        unwrap,\n        wrapChildren,\n        wrapIfRequired,\n        attr: stringAttr,\n        booleanAttr,\n        numberAttr,\n        jsonAttr,\n        callbackAttr,\n        booleanOrStringAttr,\n        booleanOrNumberAttr,\n        setStyleTemp,\n        style: computedStyle,\n        styleNumber: computedStyleNumber,\n        inlineStyle,\n        setStyle: setInlineStyle,\n        isVisible,\n        upAttrs,\n        upClasses,\n        setAttrPresence,\n        addClasses,\n        addClassTemp,\n        removeClassTemp,\n        cleanJQuery,\n        parseSelector,\n        isEmpty,\n        crossOriginSelector,\n        isIntersectingWindow,\n        unionSelector,\n        matchSelectorMap,\n        elementLikeMatches,\n        documentPosition,\n        firstTagNameInHTML,\n        isFullDocumentHTML,\n    };\n})();\n\n\n/***/ }),\n/* 8 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 9 */\n/***/ (() => {\n\nup.Error = class Error extends window.Error {\n    constructor(message, props = {}) {\n        if (Array.isArray(message)) {\n            message = up.util.sprintf(...message);\n        }\n        super(message);\n        let name = 'up.' + this.constructor.name;\n        Object.assign(this, { name }, props);\n    }\n};\n\n\n/***/ }),\n/* 10 */\n/***/ (() => {\n\nup.NotImplemented = class NotImplemented extends up.Error {\n};\n\n\n/***/ }),\n/* 11 */\n/***/ (() => {\n\nup.Aborted = class Aborted extends up.Error {\n    constructor(message) {\n        super(message, { name: 'AbortError' });\n    }\n};\n\n\n/***/ }),\n/* 12 */\n/***/ (() => {\n\nup.CannotMatch = class CannotMatch extends up.Error {\n};\n\n\n/***/ }),\n/* 13 */\n/***/ (() => {\n\nup.CannotParse = class CannotParse extends up.Error {\n};\n\n\n/***/ }),\n/* 14 */\n/***/ (() => {\n\nup.CannotTarget = class CannotTarget extends up.Error {\n};\n\n\n/***/ }),\n/* 15 */\n/***/ (() => {\n\nup.Offline = class Offline extends up.Error {\n};\n\n\n/***/ }),\n/* 16 */\n/***/ (() => {\n\nconst u = up.util;\nup.Record = class Record {\n    keys() {\n        throw 'Return an array of keys';\n    }\n    defaults(_options) {\n        return {};\n    }\n    constructor(options) {\n        Object.assign(this, u.mergeDefined(this.defaults(options), this.attributes(options)));\n    }\n    attributes(source = this) {\n        return u.pick(source, this.keys());\n    }\n    [u.copy.key]() {\n        return u.variant(this);\n    }\n    [u.isEqual.key](other) {\n        return (this.constructor === other.constructor) && u.isEqual(this.attributes(), other.attributes());\n    }\n};\n\n\n/***/ }),\n/* 17 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Config = class Config {\n    constructor(blueprintFn = (() => ({}))) {\n        this._blueprintFn = blueprintFn;\n        this.reset();\n        document.addEventListener('up:framework:reset', () => this.reset());\n    }\n    reset() {\n        Object.assign(this, this._blueprintFn());\n    }\n    matches(element, prop) {\n        return element.matches(this.selector(prop));\n    }\n    selector(prop) {\n        let includes = this[prop];\n        let excludes = this['no' + u.upperCaseFirst(prop)];\n        return e.unionSelector(includes, excludes);\n    }\n    selectorFn(prop) {\n        return () => this.selector(prop);\n    }\n};\n\n\n/***/ }),\n/* 18 */\n/***/ (() => {\n\nlet enabledKey = 'up.log.enabled';\nlet enabled = false;\ntry {\n    enabled = !!sessionStorage?.getItem(enabledKey);\n}\ncatch {\n}\nup.LogConfig = class LogConfig extends up.Config {\n    constructor() {\n        super(() => ({\n            banner: true,\n            format: true,\n        }));\n    }\n    get enabled() {\n        return enabled;\n    }\n    set enabled(newEnabled) {\n        enabled = newEnabled;\n        try {\n            sessionStorage?.setItem(enabledKey, newEnabled ? '1' : '');\n        }\n        catch {\n        }\n    }\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (() => {\n\nconst u = up.util;\nup.Registry = class Registry {\n    constructor(valueDescription, normalize = u.identity) {\n        this._data = {};\n        this._normalize = normalize;\n        this._valueDescription = valueDescription;\n        this.put = this.put.bind(this);\n        document.addEventListener('up:framework:reset', () => this.reset());\n    }\n    put(key, object) {\n        object = this._normalize(object);\n        object.isDefault = up.framework.evaling;\n        this._data[key] = object;\n    }\n    get(name) {\n        return this._data[name] || up.fail(\"Unknown %s %o\", this._valueDescription, name);\n    }\n    reset() {\n        this._data = u.pickBy(this._data, 'isDefault');\n    }\n};\n\n\n/***/ }),\n/* 20 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.OptionsParser = class OptionsParser {\n    constructor(element, options, parserOptions = {}) {\n        this._options = options;\n        this._element = element;\n        this._fail = parserOptions.fail;\n        this._closest = parserOptions.closest;\n        this._attrPrefix = parserOptions.attrPrefix || 'up-';\n        this._defaults = parserOptions.defaults ?? {};\n    }\n    string(key, keyOptions) {\n        this.parse(e.attr, key, keyOptions);\n    }\n    boolean(key, keyOptions) {\n        this.parse(e.booleanAttr, key, keyOptions);\n    }\n    number(key, keyOptions) {\n        this.parse(e.numberAttr, key, keyOptions);\n    }\n    booleanOrString(key, keyOptions) {\n        this.parse(e.booleanOrStringAttr, key, keyOptions);\n    }\n    booleanOrNumber(key, keyOptions) {\n        this.parse(e.booleanOrNumberAttr, key, keyOptions);\n    }\n    json(key, keyOptions) {\n        this.parse(e.jsonAttr, key, keyOptions);\n    }\n    callback(key, keyOptions = {}) {\n        let parser = (link, attr) => e.callbackAttr(link, attr, keyOptions);\n        this.parse(parser, key, keyOptions);\n    }\n    parse(attrValueFn, key, keyOptions = {}) {\n        const attrNames = u.wrapList(keyOptions.attr ?? this._attrNameForKey(key));\n        let value = this._options[key];\n        for (let attrName of attrNames) {\n            value ??= this._parseFromAttr(attrValueFn, this._element, attrName);\n        }\n        if (this._defaults !== false) {\n            value ??= keyOptions.default ?? this._defaults[key];\n        }\n        if (u.isDefined(value)) {\n            let normalizeFn = keyOptions.normalize;\n            if (normalizeFn) {\n                value = normalizeFn(value);\n            }\n            this._options[key] = value;\n        }\n        let failKey;\n        if (this._fail && (failKey = up.fragment.failKey(key))) {\n            const failAttrNames = u.compact(u.map(attrNames, (attrName) => this._deriveFailAttrName(attrName)));\n            this.parse(attrValueFn, failKey, { ...keyOptions, attr: failAttrNames });\n        }\n    }\n    include(optionsFn, parserOptions) {\n        let fnResult = optionsFn(this._element, this._options, { defaults: this._defaults, ...parserOptions });\n        Object.assign(this._options, fnResult);\n    }\n    _parseFromAttr(attrValueFn, element, attrName) {\n        if (this._closest) {\n            return e.closestAttr(element, attrName, attrValueFn);\n        }\n        else {\n            return attrValueFn(element, attrName);\n        }\n    }\n    _deriveFailAttrName(attr) {\n        return this._deriveFailAttrNameForPrefix(attr, this._attrPrefix + 'on-') ||\n            this._deriveFailAttrNameForPrefix(attr, this._attrPrefix);\n    }\n    _deriveFailAttrNameForPrefix(attr, prefix) {\n        if (attr.startsWith(prefix)) {\n            return `${prefix}fail-${attr.substring(prefix.length)}`;\n        }\n    }\n    _attrNameForKey(option) {\n        return `${this._attrPrefix}${u.camelToKebabCase(option)}`;\n    }\n};\n\n\n/***/ }),\n/* 21 */\n/***/ (() => {\n\nconst u = up.util;\nup.FIFOCache = class FIFOCache {\n    constructor({ capacity = 10, normalizeKey = u.identity } = {}) {\n        this._map = new Map();\n        this._capacity = capacity;\n        this._normalizeKey = normalizeKey;\n    }\n    get(key) {\n        key = this._normalizeKey(key);\n        return this._map.get(key);\n    }\n    set(key, value) {\n        if (this._map.size === this._capacity) {\n            let oldestKey = this._map.keys().next().value;\n            this._map.delete(oldestKey);\n        }\n        key = this._normalizeKey(key);\n        this._map.set(key, value);\n    }\n    clear() {\n        this._map.clear();\n    }\n};\n\n\n/***/ }),\n/* 22 */\n/***/ (() => {\n\nup.Rect = class Rect extends up.Record {\n    keys() {\n        return [\n            'left',\n            'top',\n            'width',\n            'height'\n        ];\n    }\n    get bottom() {\n        return this.top + this.height;\n    }\n    get right() {\n        return this.left + this.width;\n    }\n    grow(padding) {\n        this.left -= padding;\n        this.top -= padding;\n        this.width += padding * 2;\n        this.height += padding * 2;\n    }\n    static fromElement(element) {\n        return new (this)(element.getBoundingClientRect());\n    }\n    static fromElementAsFixed(element) {\n        let fixedClone = element.cloneNode(true);\n        element.after(fixedClone);\n        fixedClone.style.position = 'fixed';\n        let rect = this.fromElement(fixedClone);\n        fixedClone.remove();\n        return rect;\n    }\n};\n\n\n/***/ }),\n/* 23 */\n/***/ (() => {\n\nconst e = up.element;\nconst u = up.util;\nconst SHIFT_CLASS = 'up-scrollbar-away';\nup.BodyShifter = class BodyShifter {\n    constructor() {\n        this._anchoredElements = new Set();\n        this._stack = 0;\n        this._cleaner = u.cleaner();\n    }\n    lowerStack() {\n        if (--this._stack === 0)\n            this._cleaner.clean();\n    }\n    raiseStack() {\n        if (++this._stack === 1)\n            this._shiftNow();\n    }\n    onAnchoredElementInserted(element) {\n        this._anchoredElements.add(element);\n        this._shiftElement(element, 'right');\n        return () => this._anchoredElements.delete(element);\n    }\n    _isShifted() {\n        return this._rootScrollbarWidth && this._stack > 0;\n    }\n    _shiftNow() {\n        this._rootScrollbarWidth = up.viewport.rootScrollbarWidth();\n        this._cleaner(e.setStyleTemp(e.root, {\n            '--up-scrollbar-width': this._rootScrollbarWidth + 'px'\n        }));\n        this._shiftElement(document.body, 'padding-right');\n        for (let element of this._anchoredElements) {\n            this._shiftElement(element, 'right');\n        }\n    }\n    _shiftElement(element, styleProp) {\n        if (!this._isShifted())\n            return;\n        let originalValue = e.style(element, styleProp);\n        this._cleaner(e.setStyleTemp(element, { ['--up-original-' + styleProp]: originalValue }), e.addClassTemp(element, SHIFT_CLASS));\n    }\n};\n\n\n/***/ }),\n/* 24 */\n/***/ (() => {\n\nconst u = up.util;\nup.Change = class Change {\n    constructor(options) {\n        this.options = options;\n    }\n    execute() {\n        throw new up.NotImplemented();\n    }\n    improveHistoryValue(existingValue, newValue) {\n        if ((existingValue === false) || u.isString(existingValue)) {\n            return existingValue;\n        }\n        else {\n            return newValue;\n        }\n    }\n    deriveFailOptions() {\n        return up.RenderOptions.deriveFailOptions(this.options);\n    }\n    ensureLayerAlive(layer = this.layer) {\n        if (!layer.isAlive()) {\n            throw new up.Aborted(\"Layer is already \" + layer.state);\n        }\n    }\n};\n\n\n/***/ }),\n/* 25 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Change.Addition = class Addition extends up.Change {\n    constructor(options) {\n        super(options);\n        this._acceptLayer = options.acceptLayer;\n        this._dismissLayer = options.dismissLayer;\n        this._eventPlans = options.eventPlans || [];\n        this._response = options.response;\n    }\n    handleLayerChangeRequests() {\n        if (this.layer.isOverlay()) {\n            this._tryAcceptLayerFromServer();\n            this.ensureLayerAlive();\n            this.layer.tryAcceptForLocation(this._responseOptions());\n            this.ensureLayerAlive();\n            this._tryDismissLayerFromServer();\n            this.ensureLayerAlive();\n            this.layer.tryDismissForLocation(this._responseOptions());\n            this.ensureLayerAlive();\n        }\n        this.layer.asCurrent(() => {\n            for (let eventPlan of this._eventPlans) {\n                up.emit({ ...eventPlan, ...this._responseOptions() });\n                this.ensureLayerAlive();\n            }\n        });\n    }\n    _tryAcceptLayerFromServer() {\n        if (u.isDefined(this._acceptLayer) && this.layer.isOverlay()) {\n            this.layer.accept(this._acceptLayer, this._responseOptions());\n        }\n    }\n    _tryDismissLayerFromServer() {\n        if (u.isDefined(this._dismissLayer) && this.layer.isOverlay()) {\n            this.layer.dismiss(this._dismissLayer, this._responseOptions());\n        }\n    }\n    _setSource({ oldElement, newElement, source }) {\n        if (source === 'keep') {\n            source = (oldElement && up.fragment.source(oldElement));\n        }\n        if (source) {\n            e.setMissingAttr(newElement, 'up-source', up.fragment.normalizeSource(source));\n        }\n    }\n    _setTime({ newElement, time }) {\n        e.setMissingAttr(newElement, 'up-time', time ? time.toUTCString() : false);\n    }\n    _setETag({ newElement, etag }) {\n        e.setMissingAttr(newElement, 'up-etag', etag || false);\n    }\n    setReloadAttrs(options) {\n        this._setSource(options);\n        this._setTime(options);\n        this._setETag(options);\n    }\n    _responseOptions() {\n        return { response: this._response };\n    }\n    executeSteps({ steps, responseDoc, noneOptions, passRenderOptions = this.options }) {\n        return new up.Change.UpdateSteps({ steps, noneOptions, passRenderOptions }).execute(responseDoc);\n    }\n};\n\n\n/***/ }),\n/* 26 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.RenderJob = (_a = class RenderJob {\n        constructor(renderOptions) {\n            this.renderOptions = renderOptions;\n        }\n        execute() {\n            this._rendered = this._executePromise();\n            return this;\n        }\n        async _executePromise() {\n            try {\n                this._emitGuardEvent();\n                this.renderOptions = up.RenderOptions.preprocess(this.renderOptions);\n                up.browser.assertConfirmed(this.renderOptions);\n                up.RenderOptions.assertContentGiven(this.renderOptions);\n                let result = await this._getChange().execute();\n                this._handleResult(result);\n                return result;\n            }\n            catch (resultOrError) {\n                this._handleResult(resultOrError) || this._handleError(resultOrError);\n                throw resultOrError;\n            }\n        }\n        _handleResult(result) {\n            if (result instanceof up.RenderResult) {\n                let { onRendered, onFinished } = result.renderOptions;\n                if (!result.none)\n                    up.error.guard(() => onRendered?.(result));\n                let guardedOnFinished = function (result) {\n                    up.error.guard(() => onFinished?.(result));\n                };\n                this.finished.then(guardedOnFinished, u.noop);\n                return true;\n            }\n        }\n        _handleError(error) {\n            let prefix = error instanceof up.Aborted ? 'Rendering was aborted' : 'Error while rendering';\n            up.puts('up.render()', `${prefix}: ${error.name}: ${error.message}`);\n            up.error.guard(() => this.renderOptions.onError?.(error));\n        }\n        get finished() {\n            return this._awaitFinished();\n        }\n        async _awaitFinished() {\n            try {\n                let result = await this._rendered;\n                return await result.finished;\n            }\n            catch (error) {\n                if (error instanceof up.RenderResult) {\n                    throw await error.finished;\n                }\n                else {\n                    throw error;\n                }\n            }\n        }\n        _getChange() {\n            let handleAbort = u.memoize((request) => this._handleAbortOption(request));\n            let renderOptions = { ...this.renderOptions, handleAbort };\n            if (renderOptions.url) {\n                return new up.Change.FromURL(renderOptions);\n            }\n            else if (renderOptions.response) {\n                return new up.Change.FromResponse(renderOptions);\n            }\n            else {\n                return new up.Change.FromContent(renderOptions);\n            }\n        }\n        _emitGuardEvent() {\n            let guardEvent = u.pluckKey(this.renderOptions, 'guardEvent');\n            if (guardEvent) {\n                guardEvent.renderOptions = this.renderOptions;\n                if (up.emit(guardEvent, { target: this.renderOptions.origin }).defaultPrevented) {\n                    throw new up.Aborted(`Rendering was prevented by ${guardEvent.type} listener`);\n                }\n            }\n        }\n        _handleAbortOption({ bindFragments, bindLayer, origin, layer, request }) {\n            let { abort } = this.renderOptions;\n            if (!abort)\n                return;\n            let abortOptions = {\n                except: request,\n                logOnce: ['up.render()', 'Change with { abort } option will abort other requests'],\n                newLayer: (layer === 'new'),\n                origin,\n                jid: this.renderOptions.jid,\n            };\n            if (abort === 'target') {\n                up.fragment.abort(bindFragments, { ...abortOptions });\n            }\n            else if (abort === 'layer') {\n                up.fragment.abort({ ...abortOptions, layer: bindLayer });\n            }\n            else if (abort === 'all' || abort === true) {\n                up.fragment.abort({ ...abortOptions, layer: 'any' });\n            }\n            else if (u.isFunction(abort)) {\n                abort(abortOptions);\n            }\n            else {\n                up.fragment.abort(abort, { ...abortOptions, layer: bindLayer });\n            }\n        }\n    },\n    (() => {\n        u.delegatePromise(_a.prototype, function () { return this._rendered; });\n        u.memoizeMethod(_a.prototype, {\n            _awaitFinished: true,\n            _getChange: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 27 */\n/***/ (() => {\n\nup.Change.DestroyFragment = class DestroyFragment extends up.Change {\n    constructor(options) {\n        super(options);\n        this._layer = up.layer.get(options) || up.layer.current;\n        this._element = this.options.element;\n        this._animation = this.options.animation;\n        this._log = this.options.log;\n        this._onFinished = this.options.onFinished;\n    }\n    execute() {\n        this._parent = this._element.parentNode;\n        up.fragment.markAsDestroying(this._element);\n        if (up.motion.willAnimate(this._element, this._animation, this.options)) {\n            this._destroyAfterAnimation();\n        }\n        else {\n            this._destroyNow();\n        }\n    }\n    async _destroyAfterAnimation() {\n        this._emitDestroyed();\n        await this._animate();\n        this._erase();\n        this._onFinished?.();\n    }\n    _destroyNow() {\n        this._erase();\n        this._emitDestroyed();\n        this._onFinished?.();\n    }\n    _animate() {\n        return up.motion.animate(this._element, this._animation, this.options);\n    }\n    _erase() {\n        this._layer.asCurrent(() => {\n            up.fragment.abort(this._element);\n            up.script.clean(this._element, { layer: this._layer });\n            up.element.cleanJQuery(this._element);\n            this._element.remove();\n        });\n    }\n    _emitDestroyed() {\n        up.fragment.emitDestroyed(this._element, { parent: this._parent, log: this._log });\n    }\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (() => {\n\nlet u = up.util;\nup.Change.OpenLayer = class OpenLayer extends up.Change.Addition {\n    constructor(options) {\n        super(options);\n        this.target = options.target;\n        this._origin = options.origin;\n        this._baseLayer = options.baseLayer;\n    }\n    getPreflightProps() {\n        return {\n            mode: this.options.mode,\n            context: this._buildLayer().context,\n            origin: this.options.origin,\n            target: this.target,\n            bindLayer: this._baseLayer,\n            layer: 'new',\n            bindFragments: u.compact([up.fragment.get(':main', { layer: this._baseLayer })]),\n            fragments: [],\n        };\n    }\n    execute(responseDoc, onApplicable) {\n        this.responseDoc = responseDoc;\n        this._matchPostflight();\n        onApplicable();\n        this._createOverlay();\n        let unbindClosing = this.layer.on('up:layer:accepting up:layer:dimissing', this._renderOtherLayers.bind(this));\n        try {\n            this._renderOverlayContent();\n            this._renderOtherLayers();\n            return up.RenderResult.both(this._newOverlayResult, this._otherLayersResult);\n        }\n        finally {\n            unbindClosing();\n        }\n    }\n    _matchPostflight() {\n        if (this.target === ':none') {\n            this._content = document.createElement('up-none');\n        }\n        else {\n            this._content = this.responseDoc.select(this.target);\n        }\n        if (!this._content || !this._baseLayer.isAlive()) {\n            throw new up.CannotMatch();\n        }\n    }\n    _createOverlay() {\n        up.puts('up.render()', `Opening element \"${this.target}\" in new overlay`);\n        this._assertOpenEventEmitted();\n        this.layer = this._buildLayer();\n        this._baseLayer.peel({ history: !this.layer.history });\n        this._baseLayer.saveHistory();\n        up.layer.stack.push(this.layer);\n        this.layer.createElements();\n        this.layer.setupHandlers();\n    }\n    _renderOverlayContent() {\n        this._handleHistory();\n        this.handleLayerChangeRequests();\n        this.responseDoc.commitElement(this._content);\n        this.layer.setContent(this._content);\n        this.responseDoc.finalizeElement(this._content);\n        this.setReloadAttrs({ newElement: this._content, source: this.options.source });\n        this._helloPromise = up.hello(this.layer.element, { ...this.options, layer: this.layer, dataRoot: this._content });\n        this._newOverlayResult = new up.RenderResult({\n            layer: this.layer,\n            fragments: [this._content],\n            target: this.target,\n            renderOptions: this.options,\n        });\n        this._handleScroll();\n        this._newOverlayResult.finished = this._finish();\n        this.layer.state = 'opened';\n        this._emitOpenedEvent();\n        this.ensureLayerAlive();\n    }\n    _renderOtherLayers() {\n        if (this._otherLayersResult)\n            return;\n        let otherLayerSteps = this._getHungrySteps().other;\n        this._otherLayersResult = this.executeSteps({\n            steps: otherLayerSteps,\n            responseDoc: this.responseDoc,\n        });\n    }\n    async _finish() {\n        await this.layer.startOpenAnimation();\n        this.ensureLayerAlive();\n        this._handleFocus();\n        await this._helloPromise;\n        return this._newOverlayResult;\n    }\n    _buildLayer() {\n        const beforeNew = (optionsWithLayerDefaults) => {\n            return this.options = up.RenderOptions.finalize(optionsWithLayerDefaults);\n        };\n        return up.layer.build(this.options, beforeNew);\n    }\n    _handleHistory() {\n        if (this.layer.history === 'auto') {\n            this.layer.history = up.fragment.hasAutoHistory([this._content], this.layer);\n        }\n        this.layer.history &&= this._baseLayer.history;\n        this.layer.updateHistory(this.options);\n    }\n    _handleFocus() {\n        this._baseLayer.overlayFocus?.moveToBack();\n        this.layer.overlayFocus.moveToFront();\n        const fragmentFocus = new up.FragmentFocus({\n            fragment: this._content,\n            layer: this.layer,\n            autoMeans: ['autofocus', 'layer'],\n            inputDevice: this.options.inputDevice,\n        });\n        fragmentFocus.process(this.options.focus);\n    }\n    _handleScroll() {\n        const scrollingOptions = {\n            ...this.options,\n            fragment: this._content,\n            layer: this.layer,\n            autoMeans: ['hash', 'layer']\n        };\n        const scrolling = new up.FragmentScrolling(scrollingOptions);\n        scrolling.process(this.options.scroll);\n    }\n    _assertOpenEventEmitted() {\n        up.event.assertEmitted('up:layer:open', {\n            origin: this._origin,\n            baseLayer: this._baseLayer,\n            layerOptions: this.options,\n            log: \"Opening new overlay\"\n        });\n    }\n    _emitOpenedEvent() {\n        this.layer.emit('up:layer:opened', {\n            origin: this._origin,\n            callback: this.layer.callback('onOpened'),\n            log: `Opened new ${this.layer}`\n        });\n    }\n    _getHungrySteps() {\n        return up.radio.hungrySteps(this._getEffectiveRenderOptions());\n    }\n    _getEffectiveRenderOptions() {\n        return {\n            ...this.options,\n            layer: this.layer,\n            history: this.layer.history,\n        };\n    }\n};\n\n\n/***/ }),\n/* 29 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.Change.UpdateLayer = (_a = class UpdateLayer extends up.Change.Addition {\n        constructor(options) {\n            options = up.RenderOptions.finalize(options);\n            super(options);\n            this.layer = options.layer;\n            this.target = options.target;\n            this._context = options.context;\n            this._steps = up.fragment.parseTargetSteps(this.target, this.options);\n        }\n        getPreflightProps() {\n            this._matchPreflight();\n            let fragments = this._getFragments();\n            return {\n                layer: this.layer,\n                bindLayer: this.layer,\n                mode: this.layer.mode,\n                context: u.merge(this.layer.context, this._context),\n                origin: this.options.origin,\n                target: this._bestPreflightSelector(),\n                fragments,\n                bindFragments: fragments,\n            };\n        }\n        _bestPreflightSelector() {\n            this._matchPreflight();\n            return up.fragment.targetForSteps(this._steps);\n        }\n        _getFragments() {\n            this._matchPreflight();\n            return u.map(this._steps, 'oldElement');\n        }\n        execute(responseDoc, onApplicable) {\n            this.responseDoc = responseDoc;\n            this._matchPostflight();\n            onApplicable();\n            let unbindClosing = this.layer.on('up:layer:accepting up:layer:dimissing', this._renderOtherLayers.bind(this));\n            try {\n                this._renderCurrentLayer();\n                this._renderOtherLayers();\n                return up.RenderResult.both(this._currentLayerResult, this._otherLayersResult);\n            }\n            finally {\n                unbindClosing();\n            }\n        }\n        _renderCurrentLayer() {\n            if (this._steps.length) {\n                up.puts('up.render()', `Updating \"${this._bestPreflightSelector()}\" in ${this.layer}`);\n            }\n            this._setScrollAndFocusOptions();\n            if (this.options.saveScroll) {\n                up.viewport.saveScroll({ layer: this.layer });\n            }\n            if (this.options.saveFocus) {\n                up.viewport.saveFocus({ layer: this.layer });\n            }\n            if (this.options.peel) {\n                this.layer.peel({ history: !this._hasHistory() });\n            }\n            if (this.options.abort !== false) {\n                up.fragment.abort(this._getFragments(), {\n                    reason: 'Fragment is being replaced',\n                    jid: this.options.jid,\n                });\n            }\n            Object.assign(this.layer.context, this._context);\n            if (this._hasHistory()) {\n                this.layer.updateHistory(this.options);\n            }\n            this.handleLayerChangeRequests();\n            this._currentLayerResult = this.executeSteps({\n                steps: this._steps,\n                responseDoc: this.responseDoc,\n                noneOptions: this.options,\n            });\n        }\n        _renderOtherLayers() {\n            if (this._otherLayersResult)\n                return;\n            let otherLayerSteps = this._getHungrySteps().other;\n            this._otherLayersResult = this.executeSteps({\n                steps: otherLayerSteps,\n                responseDoc: this.responseDoc,\n            });\n        }\n        _matchPreflight() {\n            this._matchOldElements();\n            this._compressNestedSteps();\n        }\n        _matchPostflight() {\n            this._matchOldElements();\n            this._addHungryStepsOnCurrentLayer();\n            this._compressNestedSteps();\n            this._matchNewElements();\n        }\n        _addHungryStepsOnCurrentLayer() {\n            this._steps.push(...this._getHungrySteps().current);\n        }\n        _matchOldElements() {\n            this._steps = this._steps.filter((step) => {\n                const finder = new up.FragmentFinder(u.pick(step, ['selector', 'origin', 'layer', 'match', 'preferOldElements']));\n                step.oldElement ||= finder.find();\n                if (step.oldElement) {\n                    return true;\n                }\n                else if (!step.maybe) {\n                    throw new up.CannotMatch();\n                }\n            });\n        }\n        _matchNewElements() {\n            this._steps = this.responseDoc.selectSteps(this._steps);\n        }\n        _compressNestedSteps() {\n            this._steps = up.fragment.compressNestedSteps(this._steps);\n        }\n        _getHungrySteps() {\n            return up.radio.hungrySteps(this._getEffectiveRenderOptions());\n        }\n        _setScrollAndFocusOptions() {\n            let focusCapsule = up.FocusCapsule.preserve(this.layer);\n            this._steps.forEach((step, i) => {\n                step.focusCapsule = focusCapsule;\n                if (i > 0) {\n                    step.scroll = false;\n                    step.focus = false;\n                }\n            });\n        }\n        _hasHistory() {\n            return u.evalAutoOption(this.options.history, this._hasAutoHistory.bind(this));\n        }\n        _hasAutoHistory() {\n            const oldFragments = u.map(this._steps, 'oldElement');\n            return up.fragment.hasAutoHistory(oldFragments, this.layer);\n        }\n        _getEffectiveRenderOptions() {\n            return {\n                ...this.options,\n                layer: this.layer,\n                history: this._hasHistory(),\n            };\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _matchPreflight: true,\n            _matchOldElements: true,\n            _hasHistory: true,\n            _getHungrySteps: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 30 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Change.UpdateSteps = class UpdateSteps extends up.Change.Addition {\n    constructor(options) {\n        super(options);\n        this._steps = u.copy(u.assert(options.steps));\n        this._passRenderOptions = u.assert(options.passRenderOptions);\n        this._noneOptions = options.noneOptions || {};\n        this._finishDelays = [];\n    }\n    execute(responseDoc) {\n        this.responseDoc = responseDoc;\n        this._steps = responseDoc.selectSteps(this._steps);\n        this._steps = responseDoc.commitSteps(this._steps);\n        this.renderResult = new up.RenderResult({\n            layer: this._passRenderOptions.layer,\n            target: up.fragment.targetForSteps(this._steps),\n            renderOptions: this._passRenderOptions,\n        });\n        if (!this._steps.length) {\n            this._handleFocus(null, this._noneOptions);\n            this._handleScroll(null, this._noneOptions);\n        }\n        else {\n            this._steps.reverse();\n            up.fragment.mutate(() => {\n                const motionEndPromises = this._steps.map((step) => this._executeStep(step));\n                this.renderResult.finished = this._finish(motionEndPromises);\n            });\n        }\n        return this.renderResult;\n    }\n    _delayFinish(delay) {\n        this._finishDelays.push(delay);\n    }\n    async _finish() {\n        await Promise.all(this._finishDelays);\n        for (let step of this._steps) {\n            this.ensureLayerAlive(step.layer);\n        }\n        return this.renderResult;\n    }\n    _addToResult(fragment) {\n        let newFragments = fragment.matches('up-wrapper') ? fragment.children : [fragment];\n        this.renderResult.fragments.unshift(...newFragments);\n    }\n    _executeStep(step) {\n        switch (step.placement) {\n            case 'swap': {\n                let keepPlan = up.fragment.keepPlan(step);\n                if (keepPlan) {\n                    this._handleFocus(step.oldElement, step);\n                    this._handleScroll(step.oldElement, step);\n                    up.fragment.emitKept(keepPlan);\n                    break;\n                }\n                else {\n                    this._preserveDescendantKeepables(step);\n                    const parent = step.oldElement.parentNode;\n                    const morphOptions = {\n                        ...step,\n                        beforeStart() {\n                            up.fragment.markAsDestroying(step.oldElement);\n                        },\n                        afterInsert: () => {\n                            this._restoreDescendantKeepables(step);\n                            this._welcomeElement(step.newElement, step);\n                            this._finalizeDescendantKeepables(step);\n                        },\n                        beforeDetach: () => {\n                            up.script.clean(step.oldElement, { layer: step.layer });\n                        },\n                        afterDetach() {\n                            e.cleanJQuery();\n                            up.fragment.emitDestroyed(step.oldElement, { parent, log: false });\n                            step.afterDetach?.();\n                        },\n                        scrollNew: () => {\n                            this._handleFocus(step.newElement, step);\n                            this._handleScroll(step.newElement, step);\n                        }\n                    };\n                    this._delayFinish(up.morph(step.oldElement, step.newElement, step.transition, morphOptions));\n                    break;\n                }\n            }\n            case 'content': {\n                let oldWrapper = e.wrapChildren(step.oldElement);\n                let newWrapper = e.wrapChildren(step.newElement);\n                let wrapperStep = {\n                    ...step,\n                    placement: 'swap',\n                    oldElement: oldWrapper,\n                    newElement: newWrapper,\n                    focus: false,\n                    afterDetach: () => {\n                        e.unwrap(newWrapper);\n                        this._handleFocus(step.oldElement, step);\n                    },\n                };\n                this._executeStep(wrapperStep);\n                break;\n            }\n            case 'before':\n            case 'after': {\n                let wrapper = e.wrapChildren(step.newElement);\n                let position = step.placement === 'before' ? 'afterbegin' : 'beforeend';\n                step.oldElement.insertAdjacentElement(position, wrapper);\n                this._welcomeElement(wrapper, step);\n                this._handleFocus(wrapper, step);\n                this._handleScroll(wrapper, step);\n                this._delayFinish(up.animate(wrapper, step.animation, step).then(() => e.unwrap(wrapper)));\n                break;\n            }\n            default: {\n                up.fail('Unknown placement: %o', step.placement);\n            }\n        }\n    }\n    _welcomeElement(element, step) {\n        this.responseDoc.finalizeElement(element);\n        this.setReloadAttrs(step);\n        this._delayFinish(up.hello(element, step));\n        this._addToResult(element);\n    }\n    _preserveDescendantKeepables(step) {\n        const descendantKeepPlans = [];\n        if (step.keep) {\n            for (let keepable of step.oldElement.querySelectorAll('[up-keep]')) {\n                let keepPlan = up.fragment.keepPlan({ ...step, oldElement: keepable, descendantsOnly: true });\n                if (keepPlan) {\n                    const keepableClone = keepable.cloneNode(true);\n                    keepable.insertAdjacentElement('beforebegin', keepableClone);\n                    keepable.classList.add('up-keeping');\n                    up.script.disableSubtree(keepPlan.newElement);\n                    let viewports = up.viewport.subtree(keepPlan.oldElement);\n                    keepPlan.revivers = u.map(viewports, function (viewport) {\n                        let cursorProps = up.viewport.copyCursorProps(viewport);\n                        return () => up.viewport.copyCursorProps(cursorProps, viewport);\n                    });\n                    if (this._willChangeBody()) {\n                        keepPlan.newElement.replaceWith(keepable);\n                    }\n                    else {\n                        document.body.append(keepable);\n                    }\n                    descendantKeepPlans.push(keepPlan);\n                }\n            }\n        }\n        step.descendantKeepPlans = descendantKeepPlans;\n    }\n    _restoreDescendantKeepables(step) {\n        for (let keepPlan of step.descendantKeepPlans) {\n            keepPlan.newElement.replaceWith(keepPlan.oldElement);\n            for (let reviver of keepPlan.revivers) {\n                reviver();\n            }\n        }\n    }\n    _finalizeDescendantKeepables(step) {\n        for (let keepPlan of step.descendantKeepPlans) {\n            keepPlan.oldElement.classList.remove('up-keeping');\n            up.fragment.emitKept(keepPlan);\n        }\n    }\n    _willChangeBody() {\n        return u.some(this._steps, (step) => step.oldElement.matches('body'));\n    }\n    _handleFocus(fragment, options) {\n        const fragmentFocus = new up.FragmentFocus({\n            ...options,\n            fragment,\n            autoMeans: up.fragment.config.autoFocus,\n        });\n        return fragmentFocus.process(options.focus);\n    }\n    _handleScroll(fragment, options) {\n        const scrolling = new up.FragmentScrolling({\n            ...options,\n            fragment,\n            autoMeans: up.fragment.config.autoScroll\n        });\n        return scrolling.process(options.scroll);\n    }\n};\n\n\n/***/ }),\n/* 31 */\n/***/ (() => {\n\nconst u = up.util;\nup.Change.CloseLayer = class CloseLayer extends up.Change {\n    constructor(options) {\n        super(options);\n        this._verb = options.verb;\n        this.layer = up.layer.get(options);\n        this._origin = options.origin;\n        this._value = options.value;\n        this._preventable = options.preventable ?? true;\n        this._response = options.response;\n        this._history = options.history ?? true;\n    }\n    execute() {\n        this.ensureLayerAlive();\n        up.browser.assertConfirmed(this.options);\n        if (this._emitCloseEvent().defaultPrevented && this._preventable) {\n            throw new up.Aborted('Close event was prevented');\n        }\n        this._emitClosingEvent();\n        up.fragment.abort({ reason: 'Layer is closing', layer: this.layer });\n        this.layer.state = 'closing';\n        const { parent } = this.layer;\n        this.layer.peel();\n        this._handleFocus(parent);\n        this.layer.teardownHandlers();\n        this.layer.destroyElements(this.options);\n        this.layer.stack.remove(this.layer);\n        if (this._history) {\n            parent.restoreHistory();\n        }\n        this.layer.state = 'closed';\n        this._emitClosedEvent(parent);\n    }\n    _emitCloseEvent() {\n        let event = this.layer.emit(this._buildEvent(`up:layer:${this._verb}`), {\n            callback: this.layer.callback(`on${u.upperCaseFirst(this._verb)}`),\n            log: [`Will ${this._verb} ${this.layer} with value %o`, this._value]\n        });\n        this._value = event.value;\n        return event;\n    }\n    _emitClosingEvent() {\n        let event = this._buildEvent(`up:layer:${this._verb}ing`);\n        this.layer.emit(event, { log: false });\n    }\n    _emitClosedEvent(formerParent) {\n        const verbPast = `${this._verb}ed`;\n        const verbPastUpperCaseFirst = u.upperCaseFirst(verbPast);\n        return this.layer.emit(this._buildEvent(`up:layer:${verbPast}`), {\n            baseLayer: formerParent,\n            callback: this.layer.callback(`on${verbPastUpperCaseFirst}`),\n            ensureBubbles: true,\n            log: [`${verbPastUpperCaseFirst} ${this.layer} with value %o`, this._value]\n        });\n    }\n    _buildEvent(name) {\n        return up.event.build(name, {\n            layer: this.layer,\n            value: this._value,\n            origin: this._origin,\n            response: this._response,\n        });\n    }\n    _handleFocus(formerParent) {\n        let hadFocus = this.layer.hasFocus();\n        this.layer.overlayFocus.teardown();\n        formerParent.overlayFocus?.moveToFront();\n        if (hadFocus) {\n            let newFocusElement = this.layer.origin || formerParent.element;\n            up.focus(newFocusElement, { preventScroll: true });\n        }\n    }\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.Change.FromURL = (_a = class FromURL extends up.Change {\n        async execute() {\n            let newPageReason = this._newPageReason();\n            if (newPageReason) {\n                up.puts('up.render()', newPageReason);\n                up.network.loadPage(this.options);\n                return u.unresolvablePromise();\n            }\n            let requestAttrs = this._getRequestAttrs();\n            let request = this.request = up.request(requestAttrs);\n            this.options.onRequestKnown?.(request);\n            if (this.options.preload)\n                return request;\n            this.options.handleAbort({ request, ...requestAttrs });\n            request.runPreviews(this.options);\n            return await u.always(request, (responseOrError) => this._onRequestSettled(responseOrError));\n        }\n        _newPageReason() {\n            if (u.isCrossOrigin(this.options.url)) {\n                return 'Loading cross-origin content in new page';\n            }\n            if (this.options.history && !up.browser.canPushState()) {\n                return 'Loading content in new page to restore history support';\n            }\n        }\n        _getRequestAttrs() {\n            const successAttrs = this._preflightPropsForRenderOptions(this.options);\n            const failAttrs = this._preflightPropsForRenderOptions(this.deriveFailOptions(), { optional: true });\n            return {\n                ...this.options,\n                ...successAttrs,\n                ...u.withRenamedKeys(failAttrs, up.fragment.failKey),\n            };\n        }\n        getPreflightProps() {\n            return this._getRequestAttrs();\n        }\n        _preflightPropsForRenderOptions(renderOptions, getPreflightPropsOptions) {\n            const preflightChange = new up.Change.FromContent({ ...renderOptions, preflight: true });\n            return preflightChange.getPreflightProps(getPreflightPropsOptions);\n        }\n        _onRequestSettled(response) {\n            if (response instanceof up.Response) {\n                return this._onRequestSettledWithResponse(response);\n            }\n            else {\n                return this._onRequestSettledWithError(response);\n            }\n        }\n        _onRequestSettledWithResponse(response) {\n            return new up.Change.FromResponse({ ...this.options, response }).execute();\n        }\n        _onRequestSettledWithError(error) {\n            if (error instanceof up.Offline) {\n                this.request.emit('up:fragment:offline', {\n                    callback: this.options.onOffline,\n                    renderOptions: this.options,\n                    retry: (retryOptions) => up.render({ ...this.options, ...retryOptions }),\n                    log: ['Cannot load fragment from %s: %s', this.request.description, error.reason],\n                });\n            }\n            throw error;\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _getRequestAttrs: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 33 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.Change.FromResponse = (_a = class FromResponse extends up.Change {\n        constructor(options) {\n            super(options);\n            this._response = options.response;\n            this._request = this._response.request;\n        }\n        execute() {\n            if (up.fragment.config.skipResponse(this._loadedEventProps())) {\n                this._skip();\n            }\n            else {\n                this._request.assertEmitted('up:fragment:loaded', {\n                    ...this._loadedEventProps(),\n                    callback: this.options.onLoaded,\n                    log: ['Loaded fragment from %s', this._response.description],\n                    skip: () => this._skip()\n                });\n                this._assetRenderableResponse();\n            }\n            let fail = u.evalOption(this.options.fail, this._response) ?? !this._response.ok;\n            if (fail) {\n                throw this._updateContentFromResponse(this.deriveFailOptions());\n            }\n            return this._updateContentFromResponse(this.options);\n        }\n        _assetRenderableResponse() {\n            if (!up.fragment.config.renderableResponse(this._response)) {\n                throw new up.CannotParse(['Cannot render response with content-type \"%s\" (configure with up.fragment.config.renderableResponse)', this._response.contentType]);\n            }\n        }\n        _skip() {\n            up.puts('up.render()', 'Skipping ' + this._response.description);\n            this.options.target = ':none';\n            this.options.failTarget = ':none';\n        }\n        _updateContentFromResponse(finalRenderOptions) {\n            if (finalRenderOptions.didForceFailOptions) {\n                up.puts('up.render()', 'Rendering failed response using fail-prefixed options (https://unpoly.com/failed-responses)');\n            }\n            this._augmentOptionsFromResponse(finalRenderOptions);\n            finalRenderOptions.meta = this._compilerPassMeta();\n            let result = new up.Change.FromContent(finalRenderOptions).execute();\n            result.finished = this.finish(result, finalRenderOptions);\n            return result;\n        }\n        async finish(renderResult, originalRenderOptions) {\n            renderResult = await renderResult.finished;\n            if (up.fragment.shouldRevalidate(this._request, this._response, originalRenderOptions)) {\n                renderResult = await this._revalidate(renderResult, originalRenderOptions);\n            }\n            return renderResult;\n        }\n        async _revalidate(renderResult, originalRenderOptions) {\n            let inputTarget = originalRenderOptions.target;\n            let effectiveTarget = renderResult.target;\n            if (/:(before|after)/.test(inputTarget)) {\n                up.warn('up.render()', 'Cannot revalidate cache when prepending/appending (target %s)', inputTarget);\n            }\n            else {\n                up.puts('up.render()', 'Revalidating cached response for target \"%s\"', effectiveTarget);\n                let verifyResult = await up.reload(effectiveTarget, {\n                    ...originalRenderOptions,\n                    ...up.RenderOptions.NO_MOTION,\n                    ...up.RenderOptions.NO_INPUT_INTERFERENCE,\n                    ...up.RenderOptions.NO_PREVIEWS,\n                    preferOldElements: renderResult.fragments,\n                    layer: renderResult.layer,\n                    onFinished: null,\n                    expiredResponse: this._response,\n                    preview: this._revalidatePreview(originalRenderOptions),\n                    abort: false,\n                    cache: false,\n                    background: true,\n                });\n                if (!verifyResult.none) {\n                    renderResult = verifyResult;\n                }\n            }\n            return renderResult;\n        }\n        _revalidatePreview({ preview, revalidatePreview }) {\n            if (revalidatePreview === true) {\n                return preview;\n            }\n            else {\n                return revalidatePreview;\n            }\n        }\n        _loadedEventProps() {\n            const { expiredResponse } = this.options;\n            return {\n                request: this._request,\n                response: this._response,\n                renderOptions: this.options,\n                revalidating: !!expiredResponse,\n                expiredResponse,\n            };\n        }\n        _compilerPassMeta() {\n            let meta = { revalidating: !!this.options.expiredResponse };\n            up.migrate.processCompilerPassMeta?.(meta, this._response);\n            return meta;\n        }\n        _augmentOptionsFromResponse(renderOptions) {\n            const responseURL = this._response.url;\n            let serverLocation = responseURL;\n            let hash = this._request.hash;\n            if (hash) {\n                renderOptions.hash = hash;\n                serverLocation += hash;\n            }\n            const isReloadable = (this._response.method === 'GET');\n            if (isReloadable) {\n                renderOptions.source = this.improveHistoryValue(renderOptions.source, responseURL);\n            }\n            else {\n                renderOptions.source = this.improveHistoryValue(renderOptions.source, 'keep');\n                renderOptions.history = !!renderOptions.location;\n            }\n            let openLayerOptions = this._response.openLayer;\n            if (openLayerOptions) {\n                Object.assign(renderOptions, {\n                    ...up.Layer.Overlay.UNSET_VISUALS,\n                    target: undefined,\n                    ...up.fragment.config.navigateOptions,\n                    ...openLayerOptions,\n                    layer: 'new',\n                });\n                Object.assign(renderOptions, openLayerOptions);\n            }\n            renderOptions.location = this.improveHistoryValue(renderOptions.location, serverLocation);\n            renderOptions.title = this.improveHistoryValue(renderOptions.title, this._response.title);\n            renderOptions.eventPlans = this._response.eventPlans;\n            let serverTarget = this._response.target;\n            if (serverTarget) {\n                renderOptions.target = serverTarget;\n            }\n            renderOptions.acceptLayer = this._response.acceptLayer;\n            renderOptions.dismissLayer = this._response.dismissLayer;\n            renderOptions.document = this._response.text;\n            if (this._response.none) {\n                renderOptions.target = ':none';\n            }\n            renderOptions.context = u.merge(renderOptions.context, this._response.context);\n            renderOptions.cspInfo = this._response.cspInfo;\n            renderOptions.time ??= this._response.lastModified;\n            renderOptions.etag ??= this._response.etag;\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _loadedEventProps: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 34 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.Change.FromContent = (_a = class FromContent extends up.Change {\n        constructor(options) {\n            super(options);\n            this._origin = options.origin;\n            this._preflight = options.preflight;\n            this._layers = up.layer.getAll(options);\n        }\n        _getPlans() {\n            let plans = [];\n            this._filterLayers();\n            this._improveOptionsFromResponseDoc();\n            this._expandIntoPlans(plans, this._layers, this.options.target);\n            this._expandIntoPlans(plans, this._layers, this.options.fallback);\n            return plans;\n        }\n        _isRenderableLayer(layer) {\n            return (layer === 'new') || layer.isAlive();\n        }\n        _filterLayers() {\n            this._layers = u.filter(this._layers, this._isRenderableLayer);\n        }\n        _expandIntoPlans(plans, layers, targets) {\n            for (let layer of layers) {\n                for (let target of this._expandTargets(targets, layer)) {\n                    const props = { ...this.options, target, layer, defaultPlacement: this._defaultPlacement() };\n                    const change = layer === 'new' ? new up.Change.OpenLayer(props) : new up.Change.UpdateLayer(props);\n                    plans.push(change);\n                }\n            }\n        }\n        _expandTargets(targets, layer) {\n            return up.fragment.expandTargets(targets, { layer, mode: this.options.mode, origin: this._origin });\n        }\n        execute() {\n            if (this.options.preload) {\n                return Promise.resolve();\n            }\n            return this._seekPlan(this._executePlan.bind(this)) || this._cannotMatchPostflightTarget();\n        }\n        _executePlan(matchedPlan) {\n            return matchedPlan.execute(this._getResponseDoc(), this._onPlanApplicable.bind(this, matchedPlan));\n        }\n        _isApplicablePlanError(error) {\n            return !(error instanceof up.CannotMatch);\n        }\n        _onPlanApplicable(plan) {\n            let primaryPlan = this._getPlans()[0];\n            if (plan !== primaryPlan) {\n                up.puts('up.render()', 'Could not match primary target \"%s\". Updating a fallback target \"%s\".', primaryPlan.target, plan.target);\n            }\n            let { assets } = this._getResponseDoc();\n            if (assets) {\n                up.script.assertAssetsOK(assets, plan.options);\n            }\n            this.options.handleAbort(this.getPreflightProps());\n        }\n        _getResponseDoc() {\n            if (this._preflight)\n                return;\n            const docOptions = u.pick(this.options, [\n                'target',\n                'content',\n                'fragment',\n                'document',\n                'html',\n                'cspInfo',\n                'origin',\n                'data',\n            ]);\n            up.migrate.handleResponseDocOptions?.(docOptions);\n            if (this._defaultPlacement() === 'content') {\n                docOptions.target = this._firstExpandedTarget(docOptions.target);\n            }\n            return new up.ResponseDoc(docOptions);\n        }\n        _improveOptionsFromResponseDoc() {\n            if (this._preflight)\n                return;\n            let responseDoc = this._getResponseDoc();\n            if (this.options.fragment) {\n                this.options.target ||= responseDoc.rootSelector();\n            }\n            this.options.title = this.improveHistoryValue(this.options.title, responseDoc.title);\n            this.options.metaTags = this.improveHistoryValue(this.options.metaTags, responseDoc.metaTags);\n            this.options.lang = this.improveHistoryValue(this.options.lang, responseDoc.lang);\n        }\n        _defaultPlacement() {\n            if (!this.options.document && !this.options.fragment) {\n                return 'content';\n            }\n        }\n        _firstExpandedTarget(target) {\n            let layer = this._layers[0] || up.layer.root;\n            return this._expandTargets(target || ':main', layer)[0];\n        }\n        getPreflightProps(opts = {}) {\n            const getPlanProps = (plan) => plan.getPreflightProps();\n            return this._seekPlan(getPlanProps) || opts.optional || this._cannotMatchPreflightTarget();\n        }\n        _cannotMatchPreflightTarget() {\n            this._cannotMatchTarget('Could not find target in current page');\n        }\n        _cannotMatchPostflightTarget() {\n            this._cannotMatchTarget('Could not find common target in current page and response');\n        }\n        _cannotMatchTarget(reason) {\n            if (this._getPlans().length) {\n                const planTargets = u.uniq(u.map(this._getPlans(), 'target'));\n                const humanizedLayerOption = up.layer.optionToString(this.options.layer);\n                throw new up.CannotMatch([reason + \" (tried selectors %o in %s)\", planTargets, humanizedLayerOption]);\n            }\n            else if (this._layers.length === 0) {\n                this._cannotMatchLayer();\n            }\n            else if (this.options.didForceFailOptions) {\n                throw new up.CannotMatch('No target selector given for failed responses (https://unpoly.com/failed-responses)');\n            }\n            else {\n                throw new up.CannotMatch('No target selector given');\n            }\n        }\n        _cannotMatchLayer() {\n            throw new up.CannotMatch('Could not find a layer to render in. You may have passed an unmatchable layer reference, or a detached element.');\n        }\n        _seekPlan(fn) {\n            for (let plan of this._getPlans()) {\n                try {\n                    return fn(plan);\n                }\n                catch (error) {\n                    if (this._isApplicablePlanError(error)) {\n                        throw error;\n                    }\n                }\n            }\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _getPlans: true,\n            _getResponseDoc: true,\n            getPreflightProps: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 35 */\n/***/ (() => {\n\nconst u = up.util;\nup.CompilerPass = class CompilerPass {\n    constructor(root, compilers, { layer, data, dataRoot, dataMap, meta }) {\n        layer ||= up.layer.get(root) || up.layer.current;\n        this._root = root;\n        this._compilers = compilers;\n        this._layer = layer;\n        this._data = data;\n        this._dataRoot = dataRoot || root;\n        this._dataMap = dataMap;\n        this._compilePromises = [];\n        meta ||= {};\n        meta.layer = layer;\n        this._meta = meta;\n    }\n    run() {\n        this._layer.asCurrent(() => {\n            this.setCompileData();\n            for (let compiler of this._compilers) {\n                this._runCompiler(compiler);\n            }\n        });\n        return Promise.all(this._compilePromises);\n    }\n    setCompileData() {\n        if (this._data) {\n            this._dataRoot.upCompileData = this._data;\n        }\n        if (this._dataMap) {\n            for (let selector in this._dataMap) {\n                for (let match of this._select(selector)) {\n                    match.upCompileData = this._dataMap[selector];\n                }\n            }\n        }\n    }\n    _runCompiler(compiler) {\n        const matches = this._selectOnce(compiler);\n        if (!matches.length) {\n            return;\n        }\n        if (!compiler.isDefault) {\n            up.puts('up.hello()', 'Compiling %d\u00D7 \"%s\" on %s', matches.length, compiler.selector, this._layer);\n        }\n        if (compiler.batch) {\n            this._compileBatch(compiler, matches);\n        }\n        else {\n            for (let match of matches) {\n                this._compileOneElement(compiler, match);\n            }\n        }\n        up.migrate.postCompile?.(matches, compiler);\n    }\n    _compileOneElement(compiler, element) {\n        const compileArgs = [element];\n        if (compiler.length !== 1) {\n            const data = up.script.data(element);\n            compileArgs.push(data, this._meta);\n        }\n        let onDestructor = (destructor) => up.destructor(element, destructor);\n        this._applyCompilerFunction(compiler, element, compileArgs, onDestructor);\n    }\n    _compileBatch(compiler, elements) {\n        const compileArgs = [elements];\n        if (compiler.length !== 1) {\n            const dataList = u.map(elements, up.script.data);\n            compileArgs.push(dataList, this._meta);\n        }\n        let onDestructor = () => this._reportBatchCompilerWithDestructor(compiler);\n        this._applyCompilerFunction(compiler, elements, compileArgs, onDestructor);\n    }\n    async _applyCompilerFunction(compiler, elementOrElements, compileArgs, onDestructor) {\n        let maybeDestructor = up.error.guard(() => compiler.apply(elementOrElements, compileArgs));\n        if (u.isPromise(maybeDestructor)) {\n            let guardedPromise = up.error.guardPromise(maybeDestructor);\n            this._compilePromises.push(guardedPromise);\n            maybeDestructor = await guardedPromise;\n        }\n        if (maybeDestructor)\n            onDestructor(maybeDestructor);\n    }\n    _reportBatchCompilerWithDestructor(compiler) {\n        let error = new up.Error(['Batch compiler (%s) cannot return a destructor', compiler.selector]);\n        reportError(error);\n    }\n    _select(selector) {\n        return up.fragment.subtree(this._root, u.evalOption(selector), { layer: this._layer });\n    }\n    _selectOnce(compiler) {\n        let matches = this._select(compiler.selector);\n        if (!compiler.rerun) {\n            matches = u.filter(matches, (element) => {\n                let appliedCompilers = (element.upAppliedCompilers ||= new Set());\n                if (!appliedCompilers.has(compiler)) {\n                    appliedCompilers.add(compiler);\n                    return true;\n                }\n            });\n        }\n        return matches;\n    }\n};\n\n\n/***/ }),\n/* 36 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.CSSTransition = class CSSTransition {\n    constructor(element, lastFrame, options) {\n        this._element = element;\n        this._lastFrame = lastFrame;\n        this._lastFrameKeys = Object.keys(this._lastFrame);\n        this._finishEvent = options.finishEvent;\n        this._duration = options.duration;\n        this._easing = options.easing;\n        this._finished = false;\n    }\n    start() {\n        if (this._lastFrameKeys.length === 0) {\n            this._finished = true;\n            return Promise.resolve();\n        }\n        this._deferred = u.newDeferred();\n        this._pauseOldTransition();\n        this._startTime = new Date();\n        this._startFallbackTimer();\n        this._listenToFinishEvent();\n        this._listenToTransitionEnd();\n        this._startMotion();\n        return this._deferred;\n    }\n    _listenToFinishEvent() {\n        if (this._finishEvent) {\n            this._stopListenToFinishEvent = up.on(this._element, this._finishEvent, this._onFinishEvent.bind(this));\n        }\n    }\n    _onFinishEvent(event) {\n        event.stopPropagation();\n        this._finish();\n    }\n    _startFallbackTimer() {\n        const timingTolerance = 100;\n        this._fallbackTimer = u.timer((this._duration + timingTolerance), () => this._finish());\n    }\n    _stopFallbackTimer() {\n        clearTimeout(this._fallbackTimer);\n    }\n    _listenToTransitionEnd() {\n        this._stopListenToTransitionEnd = up.on(this._element, 'transitionend', this._onTransitionEnd.bind(this));\n    }\n    _onTransitionEnd(event) {\n        if (event.target !== this._element) {\n            return;\n        }\n        const elapsed = new Date() - this._startTime;\n        if (elapsed <= (0.25 * this._duration)) {\n            return;\n        }\n        const completedProperty = event.propertyName;\n        if (u.contains(this._lastFrameKeys, completedProperty)) {\n            this._finish();\n        }\n    }\n    _finish() {\n        if (this._finished) {\n            return;\n        }\n        this._finished = true;\n        this._stopFallbackTimer();\n        this._stopListenToFinishEvent?.();\n        this._stopListenToTransitionEnd?.();\n        e.concludeCSSTransition(this._element);\n        this._resumeOldTransition();\n        this._deferred.resolve();\n    }\n    _pauseOldTransition() {\n        const oldTransition = e.style(this._element, [\n            'transition-property',\n            'transition-duration',\n            'transition-delay',\n            'transition-timing-function'\n        ]);\n        if (e.hasCSSTransition(oldTransition)) {\n            if (oldTransition['transition-property'] !== 'all') {\n                const oldTransitionProperties = oldTransition['transition-property'].split(/\\s*,\\s*/);\n                const oldTransitionFrame = e.style(this._element, oldTransitionProperties);\n                this._setOldTransitionTargetFrame = e.setStyleTemp(this._element, oldTransitionFrame);\n            }\n            this._setOldTransition = e.concludeCSSTransition(this._element);\n        }\n    }\n    _resumeOldTransition() {\n        this._setOldTransitionTargetFrame?.();\n        this._setOldTransition?.();\n    }\n    _startMotion() {\n        e.setStyle(this._element, {\n            'transition-property': this._lastFrameKeys.join(),\n            'transition-duration': `${this._duration}ms`,\n            'transition-timing-function': this._easing\n        });\n        e.setStyle(this._element, this._lastFrame);\n    }\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (() => {\n\nconst u = up.util;\nup.DestructorPass = class DestructorPass {\n    constructor(fragment, options) {\n        this._fragment = fragment;\n        this._options = options;\n    }\n    run() {\n        for (let cleanable of this._selectCleanables()) {\n            let registry = u.pluckKey(cleanable, 'upDestructors');\n            registry?.clean(cleanable);\n        }\n    }\n    _selectCleanables() {\n        const selectOptions = { ...this._options, destroying: true };\n        return up.fragment.subtree(this._fragment, '.up-can-clean', selectOptions);\n    }\n};\n\n\n/***/ }),\n/* 38 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.EventEmitter = class EventEmitter extends up.Record {\n    keys() {\n        return [\n            'target',\n            'event',\n            'baseLayer',\n            'callback',\n            'log',\n            'ensureBubbles',\n        ];\n    }\n    emit() {\n        this._logEmission();\n        if (this.baseLayer) {\n            this.baseLayer.asCurrent(() => this._dispatchEvent());\n        }\n        else {\n            this._dispatchEvent();\n        }\n        return this.event;\n    }\n    _dispatchEvent() {\n        this.target.dispatchEvent(this.event);\n        if (this.ensureBubbles && !this.target.isConnected) {\n            document.dispatchEvent(this.event);\n        }\n        up.error.guard(() => this.callback?.(this.event));\n    }\n    assertEmitted() {\n        const event = this.emit();\n        if (event.defaultPrevented) {\n            throw new up.Aborted(`Event ${event.type} was prevented`);\n        }\n    }\n    _logEmission() {\n        if (!up.log.config.enabled) {\n            return;\n        }\n        let message = this.log;\n        let messageArgs;\n        if (u.isArray(message)) {\n            [message, ...messageArgs] = message;\n        }\n        else {\n            messageArgs = [];\n        }\n        const { type } = this.event;\n        if (u.isString(message)) {\n            up.puts(type, message, ...messageArgs);\n        }\n        else if (message !== false) {\n            up.puts(type, `Event ${type}`);\n        }\n    }\n    static fromEmitArgs(args, defaults = {}) {\n        let options = u.extractOptions(args);\n        options = u.merge(defaults, options);\n        if (u.isElementLike(args[0])) {\n            options.target = e.get(args.shift());\n        }\n        else if (args[0] instanceof up.Layer) {\n            options.layer = args.shift();\n        }\n        let layer;\n        if (u.isGiven(options.layer)) {\n            layer = up.layer.get(options.layer);\n            options.target ||= layer.element;\n            options.baseLayer ||= layer;\n        }\n        if (options.baseLayer) {\n            options.baseLayer = up.layer.get(options.baseLayer);\n        }\n        if (u.isString(options.target)) {\n            options.target = up.fragment.get(options.target, { layer: options.layer });\n        }\n        else if (!options.target) {\n            options.target = document;\n        }\n        if (args[0]?.preventDefault) {\n            options.event = args[0];\n            options.log ??= args[0].log;\n        }\n        else if (u.isString(args[0])) {\n            options.event = up.event.build(args[0], options);\n        }\n        else {\n            options.event = up.event.build(options);\n        }\n        return new (this)(options);\n    }\n};\n\n\n/***/ }),\n/* 39 */\n/***/ (() => {\n\nconst u = up.util;\nup.EventListener = class EventListener extends up.Record {\n    keys() {\n        return [\n            'element',\n            'eventType',\n            'selector',\n            'callback',\n            'guard',\n            'baseLayer',\n            'passive',\n            'once',\n            'capture',\n            'beforeBoot',\n        ];\n    }\n    constructor(attributes) {\n        super(attributes);\n        this._key = this.constructor._buildKey(attributes);\n        this.isDefault = up.framework.evaling;\n        this.beforeBoot ??= (this.eventType.indexOf('up:framework:') === 0);\n        this.nativeCallback = this.nativeCallback.bind(this);\n    }\n    bind() {\n        const map = (this.element.upEventListeners ||= {});\n        if (map[this._key]) {\n            up.fail('up.on(): The %o callback %o cannot be registered more than once', this.eventType, this.callback);\n        }\n        map[this._key] = this;\n        this.element.addEventListener(...this._addListenerArg());\n    }\n    _addListenerArg() {\n        let options = u.compactObject(u.pick(this, ['once', 'passive', 'capture']));\n        return [this.eventType, this.nativeCallback, options];\n    }\n    unbind() {\n        let map = this.element.upEventListeners;\n        if (map) {\n            delete map[this._key];\n        }\n        this.element.removeEventListener(...this._addListenerArg());\n    }\n    nativeCallback(event) {\n        if (up.framework.beforeBoot && !this.beforeBoot) {\n            return;\n        }\n        let element = event.target;\n        if (this.selector) {\n            let selector = u.evalOption(this.selector);\n            element = element.closest(selector);\n        }\n        if (this.guard && !this.guard(event)) {\n            return;\n        }\n        if (element) {\n            const args = [event, element];\n            const expectedArgCount = this.callback.length;\n            if (expectedArgCount !== 1 && expectedArgCount !== 2) {\n                const data = up.script.data(element);\n                args.push(data);\n            }\n            if (this.eventType === 'click' && element.disabled) {\n                return;\n            }\n            const applyCallback = this.callback.bind(element, ...args);\n            if (this.baseLayer) {\n                this.baseLayer.asCurrent(applyCallback);\n            }\n            else {\n                applyCallback();\n            }\n        }\n    }\n    static fromElement(attributes) {\n        let map = attributes.element.upEventListeners;\n        if (map) {\n            const key = this._buildKey(attributes);\n            return map[key];\n        }\n    }\n    static _buildKey(attributes) {\n        attributes.callback.upUid ||= u.uid();\n        return [\n            attributes.eventType,\n            attributes.selector,\n            attributes.callback.upUid\n        ].join('|');\n    }\n    static allNonDefault(element) {\n        let map = element.upEventListeners;\n        if (map) {\n            const listeners = Object.values(map);\n            return u.reject(listeners, 'isDefault');\n        }\n        else {\n            return [];\n        }\n    }\n};\n\n\n/***/ }),\n/* 40 */\n/***/ (() => {\n\nconst u = up.util;\nup.EventListenerGroup = class EventListenerGroup extends up.Record {\n    keys() {\n        return [\n            'elements',\n            'eventTypes',\n            'selector',\n            'callback',\n            'guard',\n            'baseLayer',\n            'passive',\n            'once',\n            'capture',\n            'beforeBoot',\n        ];\n    }\n    bind() {\n        const cleaner = u.cleaner();\n        this._eachListenerAttributes(function (attrs) {\n            const listener = new up.EventListener(attrs);\n            listener.bind();\n            return cleaner(listener.unbind.bind(listener));\n        });\n        return cleaner.clean;\n    }\n    _eachListenerAttributes(fn) {\n        for (let element of this.elements) {\n            for (let eventType of this.eventTypes) {\n                fn(this._listenerAttributes(element, eventType));\n            }\n        }\n    }\n    _listenerAttributes(element, eventType) {\n        return { ...this.attributes(), element, eventType };\n    }\n    unbind() {\n        this._eachListenerAttributes(function (attrs) {\n            let listener = up.EventListener.fromElement(attrs);\n            if (listener) {\n                listener.unbind();\n            }\n        });\n    }\n    static fromBindArgs(args, overrides) {\n        args = u.copy(args);\n        const callback = args.pop();\n        let elements;\n        if (args[0].addEventListener) {\n            elements = [args.shift()];\n        }\n        else if (u.isJQuery(args[0]) || (u.isList(args[0]) && args[0][0].addEventListener)) {\n            elements = args.shift();\n        }\n        else {\n            elements = [document];\n        }\n        let eventTypes = u.getSimpleTokens(args.shift());\n        let fixTypes = up.migrate.fixEventTypes;\n        if (fixTypes) {\n            eventTypes = fixTypes(eventTypes);\n        }\n        const options = u.extractOptions(args);\n        const selector = args[0];\n        const attributes = { elements, eventTypes, selector, callback, ...options, ...overrides };\n        return new (this)(attributes);\n    }\n};\n\n\n/***/ }),\n/* 41 */\n/***/ (() => {\n\nconst u = up.util;\nup.SelectorTracker = class SelectorTracker {\n    constructor(selector, options, addCallback) {\n        this._selector = selector;\n        this._addCallback = addCallback;\n        this._layer = options.layer || 'any';\n        this._filter = options.filter || u.identity;\n        this._knownMatches = new Map();\n        this._syncScheduled = false;\n    }\n    start() {\n        this._scheduleSync();\n        return u.sequence(this._trackFragments(), () => this._removeAllMatches());\n    }\n    _trackFragments() {\n        return up.on('up:fragment:inserted up:fragment:destroyed', () => this._scheduleSync());\n    }\n    _scheduleSync() {\n        if (!this._syncScheduled) {\n            this._syncScheduled = true;\n            up.fragment.afterMutate(() => this._sync());\n        }\n    }\n    _sync() {\n        this._syncScheduled = false;\n        let removeMap = new Map(this._knownMatches);\n        this._knownMatches.clear();\n        for (let newMatch of this._currentMatches) {\n            let knownRemoveCallback = removeMap.get(newMatch);\n            removeMap.delete(newMatch);\n            let removeCallback = knownRemoveCallback || this._addCallback(newMatch) || u.noop;\n            this._knownMatches.set(newMatch, removeCallback);\n        }\n        this._runRemoveCallbacks(removeMap);\n    }\n    get _currentMatches() {\n        let allMatches = up.fragment.all(this._selector, { layer: this._layer });\n        return this._filter(allMatches);\n    }\n    _removeAllMatches() {\n        this._runRemoveCallbacks(this._knownMatches);\n    }\n    _runRemoveCallbacks(map) {\n        for (let [element, removeCallback] of map) {\n            removeCallback(element);\n        }\n    }\n};\n\n\n/***/ }),\n/* 42 */\n/***/ (() => {\n\nconst u = up.util;\nup.FieldWatcher = class FieldWatcher {\n    constructor(root, options, callback) {\n        this._options = options;\n        this._root = root;\n        this._callback = callback;\n        this._batch = options.batch;\n        this._logPrefix = options.logPrefix ?? 'up.watch()';\n        this._ensureWatchable();\n    }\n    start() {\n        this._scheduledValues = null;\n        this._processedValues = this._readFieldValues();\n        this._currentTimer = null;\n        this._callbackRunning = false;\n        return u.sequence(this._trackFields(), this._trackAbort(), this._trackReset(), () => this._abort());\n    }\n    _ensureWatchable() {\n        const fail = (message) => up.fail(message, this._logPrefix, this._root);\n        if (!this._callback) {\n            fail('No callback provided for %s (%o)');\n        }\n        if (this._root.matches('input[type=radio]')) {\n            fail('Use %s with the container of a radio group, not with an individual radio button (%o)');\n        }\n        if (up.form.isField(this._root) && !this._root.name) {\n            fail('%s can only watch fields with a name (%o)');\n        }\n    }\n    _trackFields() {\n        if (up.form.isField(this._root)) {\n            return this._watchField(this._root);\n        }\n        else {\n            return up.form.trackFields(this._root, (field) => this._watchField(field));\n        }\n    }\n    _trackAbort() {\n        let guard = ({ target }) => target.contains(this._region);\n        return up.on('up:fragment:aborted', { guard }, () => this._abort());\n    }\n    _trackReset() {\n        let guard = ({ target }) => target === this._region;\n        return up.on('reset', { guard }, (event) => this._onFormReset(event));\n    }\n    get _region() {\n        return up.form.getRegion(this._root);\n    }\n    _fieldOptions(field) {\n        let rootOptions = u.copy(this._options);\n        return up.form.watchOptions(field, rootOptions, { defaults: { event: 'input' } });\n    }\n    _watchField(field) {\n        let fieldOptions = this._fieldOptions(field);\n        let eventType = fieldOptions.event;\n        return up.on(field, eventType, (event) => this._check(event, fieldOptions));\n    }\n    _abort() {\n        this._scheduledValues = null;\n    }\n    _scheduleValues(values, fieldOptions) {\n        this._scheduledValues = values;\n        this._scheduledFieldOptions = fieldOptions;\n        let delay = fieldOptions.delay || 0;\n        clearTimeout(this._currentTimer);\n        this._currentTimer = u.timer(delay, () => {\n            this._currentTimer = null;\n            this._requestCallback();\n        });\n    }\n    _isNewValues(values) {\n        return !u.isEqual(values, this._processedValues) && !u.isEqual(this._scheduledValues, values);\n    }\n    async _requestCallback() {\n        if (!this._scheduledValues)\n            return;\n        if (this._callbackRunning)\n            return;\n        if (this._currentTimer)\n            return;\n        if (!up.fragment.isAlive(this._region))\n            return;\n        let callbackOptions = u.omit(this._scheduledFieldOptions, ['event', 'delay']);\n        const diff = this._changedValues(this._processedValues, this._scheduledValues);\n        this._processedValues = this._scheduledValues;\n        this._scheduledValues = null;\n        this._callbackRunning = true;\n        this._scheduledFieldOptions = null;\n        const callbackReturnValues = [];\n        if (this._batch) {\n            callbackReturnValues.push(this._runCallback(diff, callbackOptions));\n        }\n        else {\n            for (let name in diff) {\n                const value = diff[name];\n                callbackReturnValues.push(this._runCallback(value, name, callbackOptions));\n            }\n        }\n        if (u.some(callbackReturnValues, u.isPromise)) {\n            let callbackDone = Promise.allSettled(callbackReturnValues);\n            await callbackDone;\n        }\n        this._callbackRunning = false;\n        this._requestCallback();\n    }\n    _runCallback(...args) {\n        return up.error.guard(this._callback, ...args);\n    }\n    _changedValues(previous, next) {\n        const changes = {};\n        let keys = Object.keys(previous);\n        keys = keys.concat(Object.keys(next));\n        keys = u.uniq(keys);\n        for (let key of keys) {\n            const previousValue = previous[key];\n            const nextValue = next[key];\n            if (!u.isEqual(previousValue, nextValue)) {\n                changes[key] = nextValue;\n            }\n        }\n        return changes;\n    }\n    _readFieldValues() {\n        return up.Params.fromContainer(this._root).toObject();\n    }\n    _check(event, fieldOptions = {}) {\n        const values = this._readFieldValues();\n        if (this._isNewValues(values)) {\n            up.log.putsEvent(event);\n            this._scheduleValues(values, fieldOptions);\n        }\n    }\n    _onFormReset(event) {\n        u.task(() => this._check(event));\n    }\n};\n\n\n/***/ }),\n/* 43 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nconst BUILTIN_SWITCH_EFFECTS = [\n    { attr: 'up-hide-for', toggle(target, active) { e.toggle(target, !active); } },\n    { attr: 'up-show-for', toggle(target, active) { e.toggle(target, active); } },\n    { attr: 'up-disable-for', toggle(target, active) { up.form.setDisabled(target, active); } },\n    { attr: 'up-enable-for', toggle(target, active) { up.form.setDisabled(target, !active); } },\n];\nup.Switcher = class Switcher {\n    constructor(root) {\n        this._root = root;\n        this._switcheeSelector = root.getAttribute('up-switch') || up.fail(\"No switch target given for %o\", root);\n        this._regionSelector = root.getAttribute('up-switch-region');\n    }\n    start() {\n        this._switchRegion();\n        return u.sequence(this._trackFieldChanges(), this._trackNewSwitchees());\n    }\n    _trackFieldChanges() {\n        let callback = () => this._onFieldChanged();\n        return up.migrate.watchForSwitch?.(this._root, callback)\n            || up.watch(this._root, { logPrefix: '[up-switch]' }, callback);\n    }\n    _trackNewSwitchees() {\n        let filter = (matches) => {\n            let scope = this._scope;\n            return u.filter(matches, (match) => scope?.contains(match));\n        };\n        let onSwitcheeAdded = (switchee) => this._switchSwitchee(switchee);\n        return up.fragment.trackSelector(this._switcheeSelector, { filter }, onSwitcheeAdded);\n    }\n    _onFieldChanged() {\n        this._switchRegion();\n    }\n    _switchRegion() {\n        const fieldTokens = this._buildFieldTokens();\n        for (let switchee of this._findSwitchees()) {\n            this._switchSwitchee(switchee, fieldTokens);\n        }\n    }\n    _switchSwitchee(switchee, fieldTokens = this._buildFieldTokens()) {\n        let previousValues = switchee.upSwitchValues;\n        if (!u.isEqual(previousValues, fieldTokens)) {\n            switchee.upSwitchValues = fieldTokens;\n            this._switchSwitcheeNow(switchee, fieldTokens);\n        }\n    }\n    _switchSwitcheeNow(switchee, fieldTokens) {\n        for (let { attr, toggle } of BUILTIN_SWITCH_EFFECTS) {\n            let attrValue = switchee.getAttribute(attr);\n            if (attrValue) {\n                let activeTokens = this._parseSwitcheeTokens(attrValue);\n                let isActive = u.intersect(fieldTokens, activeTokens).length > 0;\n                toggle(switchee, isActive);\n            }\n        }\n        let log = ['Switching %o', switchee];\n        up.emit(switchee, 'up:form:switch', { field: this._root, fieldTokens, log });\n    }\n    _findSwitchees() {\n        let scope = this._scope;\n        return scope ? up.fragment.subtree(scope, this._switcheeSelector) : [];\n    }\n    get _scope() {\n        if (this._regionSelector) {\n            return up.fragment.get(this._regionSelector, { origin: this._root });\n        }\n        else {\n            return up.form.getRegion(this._root);\n        }\n    }\n    _parseSwitcheeTokens(str) {\n        return u.getSimpleTokens(str, { json: true });\n    }\n    _buildFieldTokens() {\n        let values = up.Params.fromContainer(this._root).values();\n        let tokens = [...values];\n        let anyPresent = u.some(values, u.isPresent);\n        tokens.push(anyPresent ? ':present' : ':blank');\n        let fields = up.form.fields(this._root);\n        if (fields[0]?.matches('[type=radio], [type=checkbox]')) {\n            let anyChecked = u.some(fields, 'checked');\n            tokens.push(anyChecked ? ':checked' : ':unchecked');\n        }\n        return tokens;\n    }\n};\n\n\n/***/ }),\n/* 44 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.FormValidator = class FormValidator {\n    constructor(form) {\n        this._form = form;\n        this._dirtySolutions = [];\n        this._nextRenderTimer = null;\n        this._rendering = false;\n        this._honorAbort();\n    }\n    start() {\n        let guard = (field) => this._isValidatingField(field);\n        let callback = (field) => this._onFieldAdded(field);\n        return up.form.trackFields(this._form, { guard }, callback);\n    }\n    _isValidatingField(field) {\n        return field.closest('[up-validate]:not([up-validate=false])');\n    }\n    _onFieldAdded(field) {\n        let eventType = up.form.validateOptions(field).event;\n        return up.on(field, eventType, (event) => {\n            up.log.putsEvent(event);\n            up.error.muteUncriticalRejection(this.validate({ origin: field }));\n        });\n    }\n    _honorAbort() {\n        up.fragment.onAborted(this._form, (event) => this._onAborted(event));\n    }\n    _onAborted(event) {\n        let abortedError = new up.Aborted(event.reason);\n        let solution;\n        while (solution = this._dirtySolutions.shift()) {\n            solution.deferred.reject(abortedError);\n        }\n    }\n    validate(options = {}) {\n        let newSolutions = this._getSolutions(options);\n        this._dirtySolutions.push(...newSolutions);\n        this._scheduleNextRender();\n        return newSolutions[0]?.deferred;\n    }\n    _getSolutions(options) {\n        let solutions = this._getTargetSelectorSolutions(options)\n            || this._getFieldSolutions(options)\n            || this._getElementSolutions(options.origin);\n        let deferred = u.newDeferred();\n        for (let solution of solutions) {\n            let renderOptions = up.form.validateOptions(solution.origin, options);\n            solution.batch = u.pluckKey(renderOptions, 'batch');\n            solution.renderOptions = renderOptions;\n            solution.destination = `${renderOptions.method} ${renderOptions.url}`;\n            solution.target = up.fragment.resolveOrigin(solution.target, solution);\n            solution.deferred = deferred;\n        }\n        return solutions;\n    }\n    _getFieldSolutions({ origin, ...options }) {\n        if (up.form.isField(origin)) {\n            return this._getValidateAttrSolutions(origin) || this._getFormGroupSolutions(origin, options);\n        }\n    }\n    _getFormGroupSolutions(field, { formGroup = true }) {\n        if (!formGroup)\n            return;\n        let solution = up.form.groupSolution(field);\n        if (solution) {\n            up.puts('up.validate()', 'Validating form group of field %o', field);\n            return [solution];\n        }\n    }\n    _getTargetSelectorSolutions({ target, origin }) {\n        if (u.isString(target)) {\n            up.puts('up.validate()', 'Validating target \"%s\"', target);\n            let simpleSelectors = up.fragment.splitTarget(target);\n            return u.compact(simpleSelectors.map(function (simpleSelector) {\n                let element = up.fragment.get(simpleSelector, { origin });\n                if (element) {\n                    return {\n                        element,\n                        target: simpleSelector,\n                        origin\n                    };\n                }\n                else {\n                    up.fail('Validation target \"%s\" does not match an element', simpleSelector);\n                }\n            }));\n        }\n    }\n    _getElementSolutions(element) {\n        up.puts('up.validate()', 'Validating element %o', element);\n        return [{\n                element,\n                target: up.fragment.toTarget(element),\n                origin: element\n            }];\n    }\n    _getValidateAttrSolutions(field) {\n        let containerWithAttr = field.closest('[up-validate]');\n        if (containerWithAttr) {\n            let target = e.booleanOrStringAttr(containerWithAttr, 'up-validate');\n            return this._getTargetSelectorSolutions({ target, origin: field });\n        }\n    }\n    _scheduleNextRender() {\n        let solutionDelays = this._dirtySolutions.map((solution) => solution.renderOptions.delay);\n        let shortestDelay = Math.min(...solutionDelays) || 0;\n        clearTimeout(this._nextRenderTimer);\n        this._nextRenderTimer = u.timer(shortestDelay, () => {\n            this._nextRenderTimer = null;\n            this._renderDirtySolutions();\n        });\n    }\n    _renderDirtySolutions() {\n        up.error.muteUncriticalRejection(this._doRenderDirtySolutions());\n    }\n    async _doRenderDirtySolutions() {\n        if (!this._dirtySolutions.length)\n            return;\n        if (this._rendering)\n            return;\n        if (this._nextRenderTimer)\n            return;\n        let solutionsBatch = this._selectDirtySolutionsBatch();\n        let renderOptions = this._mergeRenderOptions(solutionsBatch);\n        this._rendering = true;\n        try {\n            let renderPromise = up.render(renderOptions);\n            for (let solution of solutionsBatch) {\n                solution.deferred.resolve(renderPromise);\n            }\n            await renderPromise;\n        }\n        finally {\n            this._rendering = false;\n            this._renderDirtySolutions();\n        }\n    }\n    _selectDirtySolutionsBatch() {\n        let batch = [];\n        let i = 0;\n        while (i < this._dirtySolutions.length) {\n            let solution = this._dirtySolutions[i];\n            if (batch.length === 0 || this._canBatchSolutions(batch[0], solution)) {\n                batch.push(solution);\n                this._dirtySolutions.splice(i, 1);\n            }\n            else {\n                i++;\n            }\n        }\n        return batch;\n    }\n    _canBatchSolutions(s1, s2) {\n        return s1.destination === s2.destination && s1.batch && s2.batch;\n    }\n    _mergeRenderOptions(dirtySolutions) {\n        let dirtyOrigins = u.map(dirtySolutions, 'origin');\n        let dirtyFields = u.flatMap(dirtyOrigins, up.form.fields);\n        let dirtyNames = u.uniq(u.map(dirtyFields, 'name'));\n        let dirtyRenderOptionsList = u.map(dirtySolutions, 'renderOptions');\n        let formDestinationOptions = up.form.destinationOptions(this._form);\n        let options = u.mergeDefined(formDestinationOptions, ...dirtyRenderOptionsList);\n        options.target = u.map(dirtySolutions, 'target').join(', ');\n        options.origin = this._form;\n        options.focus ??= 'keep';\n        options.failOptions = false;\n        options.defaultMaybe = true;\n        options.params = up.Params.merge(formDestinationOptions.params, ...u.map(dirtyRenderOptionsList, 'params'));\n        options.headers = u.merge(formDestinationOptions.headers, ...u.map(dirtyRenderOptionsList, 'headers'));\n        this._addValidateHeader(options.headers, dirtyNames);\n        options.feedback = u.some(dirtyRenderOptionsList, 'feedback');\n        options.data = undefined;\n        options.dataMap = u.mapObject(dirtySolutions, ({ target, element, renderOptions: { data, keepData } }) => [\n            target,\n            keepData ? up.data(element) : data\n        ]);\n        options.preview = undefined;\n        options.previewMap = u.mapObject(dirtySolutions, ({ target, renderOptions: { preview } }) => [target, preview]);\n        options.placeholder = undefined;\n        options.placeholderMap = u.mapObject(dirtySolutions, ({ target, renderOptions: { placeholder } }) => [target, placeholder]);\n        options.disable = dirtySolutions.map((solution) => up.fragment.resolveOrigin(solution.renderOptions.disable, solution));\n        options.guardEvent = up.event.build('up:form:validate', {\n            fields: dirtyFields,\n            log: 'Validating form',\n            params: options.params,\n            form: this._form,\n        });\n        return options;\n    }\n    _addValidateHeader(headers, names) {\n        let key = up.protocol.headerize('validate');\n        let value = names.join(' ');\n        if (!value || value.length > up.protocol.config.maxHeaderSize)\n            value = ':unknown';\n        headers[key] = value;\n    }\n};\n\n\n/***/ }),\n/* 45 */\n/***/ (() => {\n\nup.FocusCapsule = class FocusCapsule {\n    constructor(element, target) {\n        this._element = element;\n        this._target = target;\n        this._cursorProps = up.viewport.copyCursorProps(this._element);\n    }\n    wasLost() {\n        return document.activeElement !== this._element && !this._voided;\n    }\n    autoVoid() {\n        up.on('focusin', { once: true }, () => this._voided = true);\n    }\n    restore(layer, focusOptions) {\n        if (!this.wasLost()) {\n            return false;\n        }\n        let rediscoveredElement = up.fragment.get(this._target, { layer });\n        if (rediscoveredElement) {\n            up.viewport.copyCursorProps(this._cursorProps, rediscoveredElement);\n            up.focus(rediscoveredElement, focusOptions);\n            return true;\n        }\n    }\n    static preserve(layer) {\n        let focusedElement = up.viewport.focusedElementWithin(layer.element);\n        if (!focusedElement)\n            return;\n        let target = up.fragment.tryToTarget(focusedElement);\n        if (!target)\n            return;\n        return new this(focusedElement, target);\n    }\n};\n\n\n/***/ }),\n/* 46 */\n/***/ (() => {\n\nconst u = up.util;\nup.FragmentProcessor = class FragmentProcessor extends up.Record {\n    keys() {\n        return [\n            'fragment',\n            'autoMeans',\n            'origin',\n            'layer'\n        ];\n    }\n    process(opt) {\n        let preprocessed = this.preprocess(opt);\n        return this.tryProcess(preprocessed);\n    }\n    preprocess(opt) {\n        return u.getComplexTokens(opt);\n    }\n    tryProcess(opt) {\n        if (u.isArray(opt)) {\n            return this.processArray(opt);\n        }\n        if (u.isFunction(opt)) {\n            let result = up.error.guard(opt, this.fragment, this.attributes());\n            return this.tryProcess(result);\n        }\n        if (u.isElement(opt)) {\n            return this.processElement(opt);\n        }\n        if (u.isString(opt)) {\n            if (opt === 'auto') {\n                return this.tryProcess(this.autoMeans);\n            }\n            let match = opt.match(/^(.+?)-if-(.+?)$/);\n            if (match) {\n                return this.resolveCondition(match[2]) && this.process(match[1]);\n            }\n        }\n        return this.processPrimitive(opt);\n    }\n    processArray(array) {\n        return u.find(array, (opt) => this.tryProcess(opt));\n    }\n    resolveCondition(condition) {\n        if (condition === 'main') {\n            return this.fragment && up.fragment.contains(this.fragment, ':main');\n        }\n    }\n    findSelector(selector) {\n        const lookupOpts = { layer: this.layer, origin: this.origin };\n        let matchWithinFragment = this.fragment && up.fragment.get(this.fragment, selector, lookupOpts);\n        let match = matchWithinFragment || up.fragment.get(selector, lookupOpts);\n        if (match) {\n            return match;\n        }\n        else {\n            up.warn('up.render()', 'Could not find an element matching \"%s\"', selector);\n        }\n    }\n};\n\n\n/***/ }),\n/* 47 */\n/***/ (() => {\n\nconst u = up.util;\nconst DESCENDANT_SELECTOR = /^([^ >+(]+) (.+)$/;\nup.FragmentFinder = class FragmentFinder {\n    constructor(options) {\n        this._options = options;\n        this._origin = options.origin;\n        this._selector = options.selector;\n        this._document = options.document || window.document;\n        this._match = options.match ?? up.fragment.config.match;\n        this._preferOldElements = options.preferOldElements;\n    }\n    find() {\n        return this._findInPreferredElements() || this._findInRegion() || this._findFirst();\n    }\n    _findInPreferredElements() {\n        if (this._preferOldElements) {\n            return this._preferOldElements.find((preferOldElement) => this._document.contains(preferOldElement) && up.fragment.matches(preferOldElement, this._selector));\n        }\n    }\n    _findInRegion() {\n        if (this._match === 'region' && !up.fragment.containsMainPseudo(this._selector) && this._origin?.isConnected) {\n            return this._findClosest() || this._findDescendantInRegion();\n        }\n    }\n    _findClosest() {\n        return up.fragment.closest(this._origin, this._selector, this._options);\n    }\n    _findDescendantInRegion() {\n        let simpleSelectors = up.fragment.splitTarget(this._selector);\n        return u.findResult(simpleSelectors, (simpleSelector) => {\n            let parts = simpleSelector.match(DESCENDANT_SELECTOR);\n            if (parts) {\n                let parent = up.fragment.closest(this._origin, parts[1], this._options);\n                if (parent) {\n                    return up.fragment.getFirstDescendant(parent, parts[2]);\n                }\n            }\n        });\n    }\n    _findFirst() {\n        return up.fragment.getFirstDescendant(this._document, this._selector, this._options);\n    }\n};\n\n\n/***/ }),\n/* 48 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nconst PREVENT_SCROLL_OPTIONS = { preventScroll: true };\nup.FragmentFocus = class FragmentFocus extends up.FragmentProcessor {\n    keys() {\n        return super.keys().concat([\n            'hash',\n            'focusVisible',\n            'focusCapsule',\n            'inputDevice',\n        ]);\n    }\n    processPrimitive(opt) {\n        switch (opt) {\n            case 'keep':\n                return this._restoreLostFocus();\n            case 'restore':\n                return this._restorePreviousFocusForLocation();\n            case 'target':\n            case true:\n                return this._focusElement(this.fragment);\n            case 'layer':\n                return this._focusElement(this.layer.getFocusElement());\n            case 'main':\n                return this._focusSelector(':main');\n            case 'hash':\n                return this._focusHash();\n            case 'autofocus':\n                return this._autofocus();\n            default:\n                if (u.isString(opt)) {\n                    return this._focusSelector(opt);\n                }\n        }\n    }\n    processElement(element) {\n        return this._focusElement(element);\n    }\n    resolveCondition(condition) {\n        if (condition === 'lost') {\n            return this._wasFocusLost();\n        }\n        else {\n            return super.resolveCondition(condition);\n        }\n    }\n    _focusSelector(selector) {\n        let match = this.findSelector(selector);\n        return this._focusElement(match);\n    }\n    _restoreLostFocus() {\n        return this.focusCapsule?.restore(this.layer, PREVENT_SCROLL_OPTIONS);\n    }\n    _restorePreviousFocusForLocation() {\n        return up.viewport.restoreFocus({ layer: this.layer });\n    }\n    _autofocus() {\n        let autofocusElement = this.fragment && e.subtreeFirst(this.fragment, '[autofocus]');\n        if (autofocusElement) {\n            return this._focusElement(autofocusElement);\n        }\n    }\n    _focusElement(element) {\n        if (element) {\n            up.focus(element, {\n                force: true,\n                ...PREVENT_SCROLL_OPTIONS,\n                inputDevice: this.inputDevice,\n                focusVisible: this.focusVisible,\n            });\n            return true;\n        }\n    }\n    _focusHash() {\n        let hashTarget = up.viewport.firstHashTarget(this.hash, { layer: this.layer });\n        if (hashTarget) {\n            return this._focusElement(hashTarget);\n        }\n    }\n    _wasFocusLost() {\n        return this.focusCapsule?.wasLost();\n    }\n};\n\n\n/***/ }),\n/* 49 */\n/***/ (() => {\n\nconst e = up.element;\nconst u = up.util;\nup.FragmentPolling = class FragmentPolling {\n    static forFragment(fragment) {\n        return fragment.upPolling ||= new this(fragment);\n    }\n    constructor(fragment) {\n        this._options = up.radio.pollOptions(fragment);\n        this._fragment = fragment;\n        up.destructor(fragment, this._onFragmentDestroyed.bind(this));\n        this._state = 'stopped';\n        this._forceIntent = null;\n        this._reloadJID = u.uid();\n        this._loading = false;\n        this._satisfyInterval();\n    }\n    onPollAttributeObserved() {\n        this._start();\n    }\n    _onFragmentAborted({ newLayer, jid }) {\n        const isOurAbort = (jid === this._reloadJID);\n        if (isOurAbort || newLayer)\n            return;\n        this._stop();\n    }\n    _onFragmentKept() {\n        if (this._forceIntent !== 'stop') {\n            this._start();\n        }\n    }\n    _onFragmentDestroyed() {\n        this._stop();\n    }\n    _start(options) {\n        Object.assign(this._options, options);\n        if (this._state === 'stopped') {\n            if (!up.fragment.isTargetable(this._fragment)) {\n                up.warn('[up-poll]', 'Cannot poll untargetable fragment %o', this._fragment);\n                return;\n            }\n            this._state = 'started';\n            this._bindEvents();\n            this._scheduleRemainingTime();\n        }\n    }\n    _stop() {\n        if (this._state === 'started') {\n            this._clearReloadTimer();\n            this._state = 'stopped';\n        }\n    }\n    forceStart(options) {\n        Object.assign(this._options, options);\n        this._forceIntent = 'start';\n        this._start();\n    }\n    forceStop() {\n        this._forceIntent = 'stop';\n        this._stop();\n    }\n    _bindEvents() {\n        if (this._eventsBound)\n            return;\n        this._eventsBound = true;\n        up.destructor(this._fragment, up.on('visibilitychange up:layer:opened up:layer:dismissed up:layer:accepted', this._onVisibilityChange.bind(this)));\n        up.fragment.onAborted(this._fragment, this._onFragmentAborted.bind(this));\n        up.fragment.onKept(this._fragment, this._onFragmentKept.bind(this));\n    }\n    _onVisibilityChange() {\n        if (this._isFragmentVisible()) {\n            this._scheduleRemainingTime();\n        }\n        else {\n            this._clearReloadTimer();\n        }\n    }\n    _isFragmentVisible() {\n        return (!document.hidden) &&\n            (this._options.ifLayer === 'any' || this._isOnFrontLayer());\n    }\n    _clearReloadTimer() {\n        clearTimeout(this._reloadTimer);\n        this._reloadTimer = null;\n    }\n    _scheduleRemainingTime() {\n        if (this._reloadTimer || this._loading || this._state === 'stopped')\n            return;\n        this._clearReloadTimer();\n        this._reloadTimer = setTimeout(this._onTimerReached.bind(this), this._getRemainingDelay());\n    }\n    _onTimerReached() {\n        this._reloadTimer = null;\n        this._tryReload();\n    }\n    _tryReload() {\n        if (this._state === 'stopped') {\n            return;\n        }\n        if (!up.fragment.isAlive(this._fragment)) {\n            this._stop();\n            up.puts('[up-poll]', 'Stopped polling a detached fragment');\n            return;\n        }\n        if (!this._isFragmentVisible()) {\n            up.puts('[up-poll]', 'Will not poll hidden fragment');\n            return;\n        }\n        this._reloadNow();\n    }\n    _getFullDelay() {\n        return this._options.interval ?? e.numberAttr(this._fragment, 'up-interval') ?? up.radio.config.pollInterval;\n    }\n    _getRemainingDelay() {\n        return Math.max(this._getFullDelay() - this._getFragmentAge(), 0);\n    }\n    _getFragmentAge() {\n        return new Date() - this._lastAttempt;\n    }\n    _isOnFrontLayer() {\n        this.layer ||= up.layer.get(this._fragment);\n        return this.layer?.isFront?.();\n    }\n    _reloadNow() {\n        this._clearReloadTimer();\n        this._loading = true;\n        let guardEvent = up.event.build('up:fragment:poll', { log: ['Polling fragment', this._fragment] });\n        let reloadOptions = { ...this._options, guardEvent, jid: this._reloadJID };\n        up.reload(this._fragment, reloadOptions).then(this._onReloadSuccess.bind(this), this._onReloadFailure.bind(this));\n    }\n    _onReloadSuccess({ fragment }) {\n        this._loading = false;\n        this._satisfyInterval();\n        if (fragment) {\n            this._onFragmentSwapped(fragment);\n        }\n        else {\n            this._scheduleRemainingTime();\n        }\n    }\n    _onFragmentSwapped(newFragment) {\n        if (this._forceIntent === 'start' && up.fragment.matches(this._fragment, newFragment)) {\n            this.constructor.forFragment(newFragment).forceStart(this._options);\n        }\n    }\n    _onReloadFailure(reason) {\n        this._loading = false;\n        this._satisfyInterval();\n        this._scheduleRemainingTime();\n        up.error.throwCritical(reason);\n    }\n    _satisfyInterval() {\n        this._lastAttempt = new Date();\n    }\n};\n\n\n/***/ }),\n/* 50 */\n/***/ (() => {\n\nconst u = up.util;\nup.FragmentScrolling = class FragmentScrolling extends up.FragmentProcessor {\n    keys() {\n        return super.keys().concat([\n            'hash',\n            'mode',\n            'revealTop',\n            'revealMax',\n            'revealSnap',\n            'scrollBehavior',\n        ]);\n    }\n    processPrimitive(opt) {\n        switch (opt) {\n            case 'top':\n                return this._scrollTo(0);\n            case 'bottom':\n                return this._scrollTo(99999999);\n            case 'layer':\n                return this._revealLayer();\n            case 'main':\n                return this._revealSelector(':main');\n            case 'restore':\n                return this._restore();\n            case 'hash':\n                return this.hash && up.viewport.revealHash(this.hash, this.attributes());\n            case 'target':\n            case 'reveal':\n            case true:\n                return this._revealElement(this.fragment);\n            default:\n                if (u.isString(opt)) {\n                    return this._revealSelector(opt);\n                }\n        }\n    }\n    processElement(element) {\n        return this._revealElement(element);\n    }\n    _revealElement(element) {\n        if (element) {\n            up.reveal(element, this.attributes());\n            return true;\n        }\n    }\n    _revealSelector(selector) {\n        let match = this.findSelector(selector);\n        return this._revealElement(match);\n    }\n    _revealLayer() {\n        return this._revealElement(this.layer.getBoxElement());\n    }\n    _scrollTo(position) {\n        return up.viewport.scrollTo(position, { ...this.attributes(), around: this.fragment });\n    }\n    _restore() {\n        return up.viewport.restoreScroll({ ...this.attributes(), around: this.fragment });\n    }\n};\n\n\n/***/ }),\n/* 51 */\n/***/ (() => {\n\nconst e = up.element;\nconst u = up.util;\nup.Layer = class Layer extends up.Record {\n    keys() {\n        return [\n            'element',\n            'stack',\n            'history',\n            'mode',\n            'context',\n            'lastScrollTops',\n            'lastFocusCapsules',\n        ];\n    }\n    defaults() {\n        return {\n            context: {},\n            lastScrollTops: up.viewport.newStateCache(),\n            lastFocusCapsules: up.viewport.newStateCache()\n        };\n    }\n    constructor(options = {}) {\n        super(options);\n        u.assert(this.mode);\n    }\n    setupHandlers() {\n        up.link.convertClicks(this);\n        this._unbindLocationChanged = up.on('up:location:changed', (event) => this._onBrowserLocationChanged(event));\n    }\n    teardownHandlers() {\n        this._unbindLocationChanged?.();\n    }\n    mainTargets() {\n        return up.layer.mainTargets(this.mode);\n    }\n    sync() {\n    }\n    accept() {\n        throw new up.NotImplemented();\n    }\n    dismiss() {\n        throw new up.NotImplemented();\n    }\n    peel(options) {\n        this.stack.peel(this, options);\n    }\n    evalOption(option) {\n        return u.evalOption(option, this);\n    }\n    isCurrent() {\n        return this.stack.isCurrent(this);\n    }\n    isFront() {\n        return this.stack.isFront(this);\n    }\n    isRoot() {\n        return this.stack.isRoot(this);\n    }\n    isOverlay() {\n        return this.stack.isOverlay(this);\n    }\n    isAlive() {\n        throw new up.NotImplemented();\n    }\n    get parent() {\n        return this.stack.parentOf(this);\n    }\n    get child() {\n        return this.stack.childOf(this);\n    }\n    get ancestors() {\n        return this.stack.ancestorsOf(this);\n    }\n    get descendants() {\n        return this.stack.descendantsOf(this);\n    }\n    get subtree() {\n        return [this, ...this.descendants];\n    }\n    get index() {\n        return this._index ??= this.stack.indexOf(this);\n    }\n    getContentElement() {\n        return this.contentElement || this.element;\n    }\n    getBoxElement() {\n        return this.boxElement || this.element;\n    }\n    getFocusElement() {\n        return this.getBoxElement();\n    }\n    getFirstSwappableElement() {\n        throw new up.NotImplemented();\n    }\n    contains(element) {\n        return element.closest(up.layer.anySelector()) === this.element;\n    }\n    on(...args) {\n        return this._buildEventListenerGroup(args).bind();\n    }\n    off(...args) {\n        return this._buildEventListenerGroup(args).unbind();\n    }\n    _buildEventListenerGroup(args) {\n        return up.EventListenerGroup.fromBindArgs(args, {\n            guard: (event) => this._containsEventTarget(event),\n            elements: [this.element],\n            baseLayer: this\n        });\n    }\n    _containsEventTarget(event) {\n        return this.contains(event.target);\n    }\n    wasHitByMouseEvent({ clientX, clientY }) {\n        const hittableElement = document.elementFromPoint(clientX, clientY);\n        return !hittableElement || this.contains(hittableElement);\n    }\n    _buildEventEmitter(args) {\n        return up.EventEmitter.fromEmitArgs(args, { layer: this });\n    }\n    emit(...args) {\n        return this._buildEventEmitter(args).emit();\n    }\n    isDetached() {\n        return !this.element.isConnected;\n    }\n    saveHistory() {\n        u.assert(this.isFront());\n        if (!this.showsLiveHistory())\n            return;\n        this._savedTitle = this.title;\n        this._savedMetaTags = this.metaTags;\n        this._savedLocation = this.location;\n        this._savedLang = this.lang;\n    }\n    restoreHistory() {\n        if (!this.showsLiveHistory())\n            return;\n        if (this._savedLocation) {\n            up.history.push(this._savedLocation);\n        }\n        if (this._savedTitle) {\n            document.title = this._savedTitle;\n        }\n        if (this._savedMetaTags) {\n            up.history.updateMetaTags(this._savedMetaTags);\n        }\n        if (u.isString(this._savedLang)) {\n            up.history.updateLang(this._savedLang);\n        }\n    }\n    asCurrent(fn) {\n        return this.stack.asCurrent(this, fn);\n    }\n    updateHistory(options) {\n        if (u.isString(options.location)) {\n            this._updateLocation(options.location, { push: true });\n        }\n        if (up.history.config.updateMetaTags && u.isList(options.metaTags)) {\n            up.migrate?.warnOfHungryMetaTags?.(options.metaTags);\n            this._updateMetaTags(options.metaTags);\n        }\n        if (u.isString(options.title)) {\n            this._updateTitle(options.title);\n        }\n        if (u.isString(options.lang)) {\n            this._updateLang(options.lang);\n        }\n    }\n    showsLiveHistory() {\n        return this.history && this.isFront();\n    }\n    _onBrowserLocationChanged({ location }) {\n        if (this.showsLiveHistory()) {\n            this._updateLocation(location, { push: false });\n        }\n    }\n    get title() {\n        if (this.showsLiveHistory()) {\n            return document.title;\n        }\n        else {\n            return this._savedTitle;\n        }\n    }\n    _updateTitle(title) {\n        this._savedTitle = title;\n        if (this.showsLiveHistory()) {\n            document.title = title;\n        }\n    }\n    get metaTags() {\n        if (this.showsLiveHistory()) {\n            return up.history.findMetaTags();\n        }\n        else {\n            return this._savedMetaTags;\n        }\n    }\n    _updateMetaTags(metaTags) {\n        this._savedMetaTags = metaTags;\n        if (this.showsLiveHistory()) {\n            up.history.updateMetaTags(metaTags);\n        }\n    }\n    get lang() {\n        if (this.showsLiveHistory()) {\n            return up.history.getLang();\n        }\n        else {\n            return this._savedLang;\n        }\n    }\n    _updateLang(lang) {\n        this._savedLang = lang;\n        if (this.showsLiveHistory()) {\n            up.history.updateLang(lang);\n        }\n    }\n    get location() {\n        if (this.showsLiveHistory()) {\n            return up.history.location;\n        }\n        else {\n            return this._savedLocation;\n        }\n    }\n    _updateLocation(newLocation, { push }) {\n        let prevSavedLocation = this._savedLocation;\n        let liveLocation = up.history.location;\n        this._savedLocation = newLocation;\n        if (newLocation !== liveLocation && this.showsLiveHistory() && push) {\n            up.history.push(newLocation);\n        }\n        if (newLocation !== prevSavedLocation && this.state !== 'opening') {\n            this.emit('up:layer:location:changed', { location: newLocation, previousLocation: prevSavedLocation, log: false });\n        }\n    }\n    selector(part) {\n        return this.constructor.selector(part);\n    }\n    static selector(_part) {\n        throw new up.NotImplemented();\n    }\n    toString() {\n        throw new up.NotImplemented();\n    }\n    affix(...args) {\n        return e.affix(this.getFirstSwappableElement(), ...args);\n    }\n    [u.isEqual.key](other) {\n        return (this.constructor === other.constructor) && (this.element === other.element);\n    }\n    hasFocus() {\n        let focusedElement = document.activeElement;\n        return focusedElement !== document.body && this.element.contains(focusedElement);\n    }\n    reset() {\n        Object.assign(this, this.defaults());\n    }\n};\n\n\n/***/ }),\n/* 52 */\n/***/ (() => {\n\nvar _a;\nconst e = up.element;\nconst u = up.util;\nup.Layer.Overlay = (_a = class Overlay extends up.Layer {\n        keys() {\n            return [\n                ...super.keys(),\n                ...this.constructor.VISUAL_KEYS,\n                'onOpened',\n                'onAccept',\n                'onAccepted',\n                'onDismiss',\n                'onDismissed',\n                'acceptEvent',\n                'dismissEvent',\n                'acceptLocation',\n                'dismissLocation',\n            ];\n        }\n        constructor(options) {\n            super(options);\n            this.state = 'opening';\n            if (this.dismissable === true) {\n                this.dismissable = ['button', 'key', 'outside'];\n            }\n            else if (this.dismissable === false) {\n                this.dismissable = [];\n            }\n            else {\n                this.dismissable = u.getSimpleTokens(this.dismissable);\n            }\n            if (this.acceptLocation) {\n                this.acceptLocation = new up.URLPattern(this.acceptLocation);\n            }\n            if (this.dismissLocation) {\n                this.dismissLocation = new up.URLPattern(this.dismissLocation);\n            }\n        }\n        callback(name) {\n            let fn = this[name];\n            if (fn) {\n                return fn.bind(this);\n            }\n        }\n        createElement(parentElement) {\n            this.nesting ||= this._suggestVisualNesting();\n            const elementAttrs = u.compactObject(u.pick(this, ['align', 'position', 'size', 'class', 'nesting']));\n            this.element = this.affixPart(parentElement, null, elementAttrs);\n        }\n        createBackdropElement(parentElement) {\n            this.backdropElement = this.affixPart(parentElement, 'backdrop');\n        }\n        createViewportElement(parentElement) {\n            this.viewportElement = this.affixPart(parentElement, 'viewport', { 'up-viewport': '' });\n        }\n        createBoxElement(parentElement) {\n            this.boxElement = this.affixPart(parentElement, 'box');\n        }\n        createContentElement(parentElement) {\n            this.contentElement = this.affixPart(parentElement, 'content');\n        }\n        setContent(content) {\n            this.contentElement.append(content);\n            this.onContentSet();\n        }\n        onContentSet() {\n        }\n        createDismissElement(parentElement) {\n            this.dismissElement = this.affixPart(parentElement, 'dismiss', {\n                'up-dismiss': '\":button\"',\n                'aria-label': this.dismissARIALabel\n            });\n            return e.affix(this.dismissElement, 'span[aria-hidden=\"true\"]', { text: this.dismissLabel });\n        }\n        affixPart(parentElement, part, options = {}) {\n            return e.affix(parentElement, this.selector(part), options);\n        }\n        static selector(part) {\n            return u.compact(['up', this.mode, part]).join('-');\n        }\n        _suggestVisualNesting() {\n            const { parent } = this;\n            if (this.mode === parent.mode) {\n                return 1 + parent._suggestVisualNesting();\n            }\n            else {\n                return 0;\n            }\n        }\n        setupHandlers() {\n            super.setupHandlers();\n            this.overlayFocus = new up.OverlayFocus(this);\n            if (this._supportsDismissMethod('button')) {\n                this.createDismissElement(this.getBoxElement());\n            }\n            if (this._supportsDismissMethod('outside')) {\n                if (this.viewportElement) {\n                    up.on(this.viewportElement, 'up:click', (event) => {\n                        if (event.target === this.viewportElement) {\n                            this._onOutsideClicked(event, true);\n                        }\n                    });\n                }\n                else {\n                    this._unbindParentClicked = this.parent.on('up:click', (event, element) => {\n                        if (!up.layer.isWithinForeignOverlay(element)) {\n                            const originClicked = this.origin && this.origin.contains(element);\n                            this._onOutsideClicked(event, originClicked);\n                        }\n                    });\n                }\n            }\n            if (this._supportsDismissMethod('key')) {\n                this._unbindEscapePressed = up.event.onEscape((event) => this.onEscapePressed(event));\n            }\n            this.registerAttrCloser('up-accept', (value, closeOptions) => {\n                this.accept(value, closeOptions);\n            });\n            this.registerAttrCloser('up-dismiss', (value, closeOptions) => {\n                this.dismiss(value, closeOptions);\n            });\n            up.migrate.registerLayerCloser?.(this);\n            this._registerExternalEventCloser(this.acceptEvent, this.accept);\n            this._registerExternalEventCloser(this.dismissEvent, this.dismiss);\n            this.on('up:click', 'label[for]', (event, label) => this._onLabelClicked(event, label));\n        }\n        _onLabelClicked(event, label) {\n            let id = label.getAttribute('for');\n            let fieldSelector = up.form.fieldSelector(e.idSelector(id));\n            let fieldsAnywhere = up.fragment.all(fieldSelector, { layer: 'any' });\n            let fieldsInLayer = up.fragment.all(fieldSelector, { layer: this });\n            if (fieldsAnywhere.length > 1 && fieldsInLayer[0] !== fieldsAnywhere[0]) {\n                event.preventDefault();\n                const field = fieldsInLayer[0];\n                field.focus();\n                if (field.matches('input[type=checkbox], input[type=radio]')) {\n                    field.click();\n                }\n            }\n        }\n        _onOutsideClicked(event, halt) {\n            up.log.putsEvent(event);\n            if (halt)\n                up.event.halt(event);\n            up.error.muteUncriticalSync(() => this.dismiss(':outside', { origin: event.target }));\n        }\n        onEscapePressed(event) {\n            if (this.isFront()) {\n                let field = up.form.focusedField();\n                if (field) {\n                    field.blur();\n                }\n                else if (this._supportsDismissMethod('key')) {\n                    up.event.halt(event, { log: true });\n                    up.error.muteUncriticalSync(() => this.dismiss(':key'));\n                }\n            }\n        }\n        registerAttrCloser(attribute, closeFn) {\n            this._registerClickCloser(attribute, closeFn);\n            this._registerSubmitCloser(attribute, closeFn);\n        }\n        _registerClickCloser(attribute, closeFn) {\n            this.on('up:click', `[${attribute}]:not(form)`, (event, link) => {\n                up.event.halt(event, { log: true });\n                const value = e.jsonAttr(link, attribute);\n                this._onAttrCloserActivated(link, value, closeFn);\n            });\n        }\n        _registerSubmitCloser(attribute, closeFn) {\n            this.on('submit', `[${attribute}]`, (event, form) => {\n                up.event.halt(event, { log: true });\n                const value = up.Params.fromForm(form);\n                this._onAttrCloserActivated(form, value, closeFn);\n            });\n        }\n        _onAttrCloserActivated(origin, value, closeFn) {\n            const closeOptions = { origin };\n            const parser = new up.OptionsParser(origin, closeOptions);\n            parser.booleanOrString('animation');\n            parser.string('easing');\n            parser.number('duration');\n            parser.string('confirm');\n            up.error.muteUncriticalSync(() => closeFn(value, closeOptions));\n        }\n        _registerExternalEventCloser(eventTypes, closeFn) {\n            if (!eventTypes) {\n                return;\n            }\n            return this.on(eventTypes, (event) => {\n                event.preventDefault();\n                up.error.muteUncriticalSync(() => closeFn.call(this, event, { response: event.response }));\n            });\n        }\n        tryAcceptForLocation(options) {\n            this._tryCloseForLocation(this.acceptLocation, this.accept, options);\n        }\n        tryDismissForLocation(options) {\n            this._tryCloseForLocation(this.dismissLocation, this.dismiss, options);\n        }\n        _tryCloseForLocation(urlPattern, closeFn, options) {\n            let location, resolution;\n            if (urlPattern && (location = this.location) && (resolution = urlPattern.recognize(location))) {\n                const closeValue = { ...resolution, location };\n                up.error.muteUncriticalSync(() => closeFn.call(this, closeValue, options));\n            }\n        }\n        teardownHandlers() {\n            super.teardownHandlers();\n            this._unbindParentClicked?.();\n            this._unbindEscapePressed?.();\n        }\n        destroyElements(options) {\n            const animation = () => this.startCloseAnimation(options);\n            const onFinished = () => {\n                this.onElementsRemoved();\n                options.onFinished?.();\n            };\n            const destroyOptions = { ...options, animation, onFinished, log: false };\n            up.destroy(this.element, destroyOptions);\n        }\n        onElementsRemoved() {\n        }\n        _startAnimation(options = {}) {\n            const boxDone = up.animate(this.getBoxElement(), options.boxAnimation, options);\n            let backdropDone;\n            if (this.backdrop && !up.motion.isNone(options.boxAnimation)) {\n                backdropDone = up.animate(this.backdropElement, options.backdropAnimation, options);\n            }\n            return Promise.all([boxDone, backdropDone]);\n        }\n        async startOpenAnimation(options = {}) {\n            let boxAnimation = options.animation ?? this.evalOption(this.openAnimation);\n            let backdropAnimation = 'fade-in';\n            await this._startAnimation({\n                boxAnimation,\n                backdropAnimation,\n                easing: options.easing || this.openEasing,\n                duration: options.duration || this.openDuration\n            });\n            this.wasEverVisible = true;\n        }\n        startCloseAnimation(options = {}) {\n            let boxAnimation = this.wasEverVisible && (options.animation ?? this.evalOption(this.closeAnimation));\n            let backdropAnimation = 'fade-out';\n            return this._startAnimation({\n                boxAnimation,\n                backdropAnimation,\n                easing: options.easing || this.closeEasing,\n                duration: options.duration || this.closeDuration,\n            });\n        }\n        isAlive() {\n            return ['opening', 'opened'].includes(this.state);\n        }\n        accept(value = null, options = {}) {\n            return this._executeCloseChange('accept', value, options);\n        }\n        dismiss(value = null, options = {}) {\n            return this._executeCloseChange('dismiss', value, options);\n        }\n        _supportsDismissMethod(method) {\n            return u.contains(this.dismissable, method);\n        }\n        _executeCloseChange(verb, value, options) {\n            options = { ...options, verb, value, layer: this };\n            return new up.Change.CloseLayer(options).execute();\n        }\n        getFirstSwappableElement() {\n            return this.getContentElement().children[0];\n        }\n        toString() {\n            return `${this.mode} overlay`;\n        }\n    },\n    _a.VISUAL_KEYS = [\n        'mode',\n        'position',\n        'align',\n        'size',\n        'origin',\n        'class',\n        'backdrop',\n        'dismissable',\n        'dismissLabel',\n        'dismissARIALabel',\n        'openAnimation',\n        'closeAnimation',\n        'openDuration',\n        'closeDuration',\n        'openEasing',\n        'closeEasing',\n        'trapFocus',\n    ],\n    _a.UNSET_VISUALS = u.spanObject(_a.VISUAL_KEYS, undefined),\n    _a);\n\n\n/***/ }),\n/* 53 */\n/***/ (() => {\n\nup.Layer.OverlayWithTether = class OverlayWithTether extends up.Layer.Overlay {\n    createElements() {\n        if (!this.origin) {\n            up.fail('Missing { origin } option');\n        }\n        this._tether = new up.Tether({\n            anchor: this.origin,\n            align: this.align,\n            position: this.position\n        });\n        this.createElement(this._tether.parent);\n        this.createContentElement(this.element);\n    }\n    onContentSet() {\n        this._tether.start(this.element);\n    }\n    onElementsRemoved() {\n        this._tether.stop();\n    }\n    sync() {\n        if (this.isAlive()) {\n            if (this.isDetached() || this._tether.isDetached()) {\n                this.dismiss(':detached', {\n                    animation: false,\n                    preventable: false\n                });\n            }\n            else {\n                this._tether.sync();\n            }\n        }\n    }\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (() => {\n\nup.Layer.OverlayWithViewport = class OverlayWithViewport extends up.Layer.Overlay {\n    static getParentElement() {\n        return document.body;\n    }\n    createElements() {\n        up.viewport.bodyShifter.raiseStack();\n        this.createElement(this.constructor.getParentElement());\n        if (this.backdrop) {\n            this.createBackdropElement(this.element);\n        }\n        this.createViewportElement(this.element);\n        this.createBoxElement(this.viewportElement);\n        this.createContentElement(this.boxElement);\n    }\n    onElementsRemoved() {\n        up.viewport.bodyShifter.lowerStack();\n    }\n    sync() {\n        if (this.isDetached() && this.isAlive()) {\n            this.constructor.getParentElement().appendChild(this.element);\n        }\n    }\n};\n\n\n/***/ }),\n/* 55 */\n/***/ (() => {\n\nvar _a;\nconst e = up.element;\nup.Layer.Root = (_a = class Root extends up.Layer {\n        get element() {\n            return e.root;\n        }\n        constructor(options) {\n            super(options);\n            this.setupHandlers();\n        }\n        getFirstSwappableElement() {\n            return document.body;\n        }\n        static selector() {\n            return 'html';\n        }\n        setupHandlers() {\n            if (!this.element.upHandlersApplied) {\n                this.element.upHandlersApplied = true;\n                super.setupHandlers();\n            }\n        }\n        sync() {\n            this.setupHandlers();\n        }\n        isAlive() {\n            return true;\n        }\n        accept() {\n            this._cannotCloseRoot();\n        }\n        dismiss() {\n            this._cannotCloseRoot();\n        }\n        _cannotCloseRoot() {\n            up.fail('Cannot close the root layer');\n        }\n        toString() {\n            return \"root layer\";\n        }\n    },\n    _a.mode = 'root',\n    _a);\n\n\n/***/ }),\n/* 56 */\n/***/ (() => {\n\nvar _a;\nup.Layer.Modal = (_a = class Modal extends up.Layer.OverlayWithViewport {\n    },\n    _a.mode = 'modal',\n    _a);\n\n\n/***/ }),\n/* 57 */\n/***/ (() => {\n\nvar _a;\nup.Layer.Popup = (_a = class Popup extends up.Layer.OverlayWithTether {\n    },\n    _a.mode = 'popup',\n    _a);\n\n\n/***/ }),\n/* 58 */\n/***/ (() => {\n\nvar _a;\nup.Layer.Drawer = (_a = class Drawer extends up.Layer.OverlayWithViewport {\n    },\n    _a.mode = 'drawer',\n    _a);\n\n\n/***/ }),\n/* 59 */\n/***/ (() => {\n\nvar _a;\nup.Layer.Cover = (_a = class Cover extends up.Layer.OverlayWithViewport {\n    },\n    _a.mode = 'cover',\n    _a);\n\n\n/***/ }),\n/* 60 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nconst e = up.element;\nup.LayerLookup = (_a = class LayerLookup {\n        constructor(stack, options) {\n            this._stack = stack;\n            if (options.normalizeLayerOptions !== false) {\n                up.layer.normalizeOptions(options);\n            }\n            this._options = options;\n            this._values = u.getSimpleTokens(options.layer);\n        }\n        all() {\n            let results = u.flatMap(this._values, (value) => this._resolveValue(value));\n            results = u.compact(results);\n            results = u.uniq(results);\n            return results;\n        }\n        static all(stack, ...args) {\n            const options = u.parseArgIntoOptions(args, 'layer');\n            const { layer } = options;\n            if (layer instanceof up.Layer) {\n                return [layer];\n            }\n            return new this(stack, options).all();\n        }\n        _forElement(element) {\n            element = e.get(element);\n            return u.find(this._stack.reversed(), (layer) => layer.contains(element));\n        }\n        _forIndex(value) {\n            return this._stack.at(value);\n        }\n        _resolveValue(value) {\n            if (value instanceof up.Layer) {\n                return value;\n            }\n            if (u.isNumber(value)) {\n                return this._forIndex(value);\n            }\n            if (/^\\d+$/.test(value)) {\n                return this._forIndex(Number(value));\n            }\n            if (u.isElementLike(value)) {\n                return this._forElement(value);\n            }\n            switch (value) {\n                case 'any':\n                    return [this._getBaseLayer(), ...this._stack.reversed()];\n                case 'current':\n                    return this._getBaseLayer();\n                case 'closest':\n                    return this._stack.selfAndAncestorsOf(this._getBaseLayer());\n                case 'parent':\n                    return this._getBaseLayer().parent;\n                case 'ancestor':\n                case 'ancestors':\n                    return this._getBaseLayer().ancestors;\n                case 'child':\n                    return this._getBaseLayer().child;\n                case 'descendant':\n                case 'descendants':\n                    return this._getBaseLayer().descendants;\n                case 'subtree':\n                    return this._getBaseLayer().subtree;\n                case 'new':\n                    return 'new';\n                case 'root':\n                    return this._stack.root;\n                case 'overlay':\n                case 'overlays':\n                    return u.reverse(this._stack.overlays);\n                case 'front':\n                    return this._stack.front;\n                case 'origin':\n                    return this._getOriginLayer();\n                default:\n                    return up.fail(\"Unknown { layer } option: %o\", value);\n            }\n        }\n        _getOriginLayer() {\n            let { origin, originLayer } = this._options;\n            if (originLayer) {\n                return originLayer;\n            }\n            if (origin) {\n                return this._forElement(origin);\n            }\n        }\n        _getBaseLayer() {\n            let { baseLayer } = this._options;\n            if (u.isString(baseLayer)) {\n                const recursiveOptions = { ...this._options, baseLayer: this._stack.current, normalizeLayerOptions: false, layer: baseLayer };\n                return this.constructor.all(this._stack, recursiveOptions)[0];\n            }\n            else {\n                return baseLayer || this._getOriginLayer() || this._stack.current;\n            }\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _getBaseLayer: true,\n            _getOriginLayer: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 61 */\n/***/ (() => {\n\nconst u = up.util;\nup.LayerStack = class LayerStack {\n    constructor() {\n        this._currentOverrides = [];\n        this.layers = [this._buildRoot()];\n    }\n    _buildRoot() {\n        return up.layer.build({ mode: 'root', stack: this });\n    }\n    remove(layer) {\n        u.remove(this.layers, layer);\n    }\n    peel(layer, options) {\n        const descendants = u.reverse(layer.descendants);\n        const dismissOptions = { ...options, preventable: false };\n        for (let descendant of descendants) {\n            descendant.dismiss(':peel', dismissOptions);\n        }\n    }\n    reset() {\n        this.peel(this.root, { animation: false });\n        this._currentOverrides = [];\n        this.root.reset();\n    }\n    parentOf(layer) {\n        return this.layers[layer.index - 1];\n    }\n    childOf(layer) {\n        return this.layers[layer.index + 1];\n    }\n    ancestorsOf(layer) {\n        return u.reverse(this.layers.slice(0, layer.index));\n    }\n    selfAndAncestorsOf(layer) {\n        return [layer, ...layer.ancestors];\n    }\n    descendantsOf(layer) {\n        return this.layers.slice(layer.index + 1);\n    }\n    isRoot(layer) {\n        return this.root === layer;\n    }\n    isOverlay(layer) {\n        return this.root !== layer;\n    }\n    isCurrent(layer) {\n        return this.current === layer;\n    }\n    isFront(layer) {\n        return this.front === layer;\n    }\n    get(...args) {\n        return this.getAll(...args)[0];\n    }\n    getAll(...args) {\n        return up.LayerLookup.all(this, ...args);\n    }\n    sync() {\n        for (let layer of this.layers) {\n            layer.sync();\n        }\n    }\n    asCurrent(layer, fn) {\n        try {\n            this._currentOverrides.push(layer);\n            return fn();\n        }\n        finally {\n            this._currentOverrides.pop();\n        }\n    }\n    reversed() {\n        return u.reverse(this.layers);\n    }\n    dismissOverlays(value = null, options = {}) {\n        options.dismissable = false;\n        for (let overlay of u.reverse(this.overlays)) {\n            overlay.dismiss(value, options);\n        }\n    }\n    at(index) {\n        return this.layers[index];\n    }\n    indexOf(layer) {\n        return this.layers.indexOf(layer);\n    }\n    get count() {\n        return this.layers.length;\n    }\n    get root() {\n        return this.layers[0];\n    }\n    get overlays() {\n        return this.root.descendants;\n    }\n    get current() {\n        return u.last(this._currentOverrides) || this.front;\n    }\n    get front() {\n        return u.last(this.layers);\n    }\n};\n\n\n/***/ }),\n/* 62 */\n/***/ (() => {\n\nconst u = up.util;\nup.LinkCurrentURLs = class LinkCurrentURLs {\n    constructor(link) {\n        this._isSafe = up.link.isSafe(link);\n        if (this._isSafe) {\n            const href = link.getAttribute('href');\n            if (href && (href !== '#')) {\n                this._href = u.matchableURL(href);\n            }\n            const upHREF = link.getAttribute('up-href');\n            if (upHREF) {\n                this._upHREF = u.matchableURL(upHREF);\n            }\n            const alias = link.getAttribute('up-alias');\n            if (alias) {\n                this._aliasPattern = new up.URLPattern(alias);\n            }\n        }\n    }\n    isCurrent(normalizedLocation) {\n        if (!normalizedLocation) {\n            return false;\n        }\n        return !!(this._href === normalizedLocation ||\n            this._upHREF === normalizedLocation ||\n            this._aliasPattern?.test?.(normalizedLocation, false));\n    }\n    isAnyCurrent(normalizedLocations) {\n        return normalizedLocations.some((normalizedLocation) => (this._href === normalizedLocation ||\n            this._upHREF === normalizedLocation ||\n            this._aliasPattern?.test?.(normalizedLocation, false)));\n    }\n};\n\n\n/***/ }),\n/* 63 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.LinkFollowIntent = class LinkFollowIntent {\n    constructor(link, callback) {\n        this._link = link;\n        this._callback = callback;\n        this._lastRequest = null;\n        this._on('mouseenter mousedown touchstart', (event) => this._scheduleCallback(event));\n        this._on('mouseleave', () => this._unscheduleCallback());\n        up.fragment.onAborted(this._link, () => this._unscheduleCallback());\n    }\n    _on(eventType, fn) {\n        up.on(this._link, eventType, { passive: true }, fn);\n    }\n    _scheduleCallback(event) {\n        if (!up.link.shouldFollowEvent(event, this._link))\n            return;\n        this._unscheduleCallback();\n        const applyDelay = (event.type === 'mouseenter');\n        if (applyDelay) {\n            let delay = this._parseDelay();\n            this._timer = u.timer(delay, () => this._runCallback(event));\n        }\n        else {\n            this._runCallback(event);\n        }\n    }\n    _unscheduleCallback() {\n        clearTimeout(this._timer);\n        if (this._lastRequest?.background)\n            this._lastRequest.abort();\n        this._lastRequest = null;\n    }\n    _parseDelay() {\n        return e.numberAttr(this._link, 'up-preload-delay') ?? up.link.config.preloadDelay;\n    }\n    _runCallback(event) {\n        up.log.putsEvent(event);\n        if (!up.fragment.isAlive(this._link))\n            return;\n        this._callback({ onRequestKnown: (request) => this._lastRequest = request });\n    }\n};\n\n\n/***/ }),\n/* 64 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.MotionController = class MotionController {\n    constructor(name) {\n        this._activeClass = `up-${name}`;\n        this._selector = `.${this._activeClass}`;\n        this.finishEvent = `up:${name}:finish`;\n        this.finishCount = 0;\n        this._clusterCount = 0;\n    }\n    startFunction(cluster, startMotion, memory = {}) {\n        cluster = e.list(cluster);\n        const mutedAnimator = () => up.error.muteUncriticalRejection(startMotion());\n        memory.trackMotion = memory.trackMotion ?? up.motion.isEnabled();\n        if (memory.trackMotion === false) {\n            return mutedAnimator();\n        }\n        else {\n            memory.trackMotion = false;\n            this.finish(cluster);\n            this._markCluster(cluster);\n            let promise = this._whileForwardingFinishEvent(cluster, mutedAnimator);\n            promise = promise.then(() => this._unmarkCluster(cluster));\n            return promise;\n        }\n    }\n    finish(elements) {\n        this.finishCount++;\n        if ((this._clusterCount === 0) || !up.motion.isEnabled()) {\n            return;\n        }\n        elements = this._expandFinishRequest(elements);\n        for (let element of elements) {\n            this._finishOneElement(element);\n        }\n        return up.migrate.formerlyAsync?.('up.motion.finish()');\n    }\n    _expandFinishRequest(elements) {\n        if (elements) {\n            return u.flatMap(elements, (el) => e.list(el.closest(this._selector), el.querySelectorAll(this._selector)));\n        }\n        else {\n            return document.querySelectorAll(this._selector);\n        }\n    }\n    isActive(element) {\n        return element.classList.contains(this._activeClass);\n    }\n    _finishOneElement(element) {\n        this._emitFinishEvent(element);\n    }\n    _emitFinishEvent(element, eventAttrs = {}) {\n        eventAttrs = { target: element, log: false, ...eventAttrs };\n        return up.emit(this.finishEvent, eventAttrs);\n    }\n    _markCluster(cluster) {\n        this._clusterCount++;\n        this._toggleActive(cluster, true);\n    }\n    _unmarkCluster(cluster) {\n        this._clusterCount--;\n        this._toggleActive(cluster, false);\n    }\n    _toggleActive(cluster, isActive) {\n        for (let element of cluster) {\n            element.classList.toggle(this._activeClass, isActive);\n        }\n    }\n    _whileForwardingFinishEvent(cluster, fn) {\n        if (cluster.length < 2) {\n            return fn();\n        }\n        const doForward = (event) => {\n            if (!event.forwarded) {\n                for (let element of cluster) {\n                    if (element !== event.target && this.isActive(element)) {\n                        this._emitFinishEvent(element, { forwarded: true });\n                    }\n                }\n            }\n        };\n        const unbindFinish = up.on(cluster, this.finishEvent, doForward);\n        return fn().then(unbindFinish);\n    }\n    async reset() {\n        await this.finish();\n        this.finishCount = 0;\n        this._clusterCount = 0;\n    }\n};\n\n\n/***/ }),\n/* 65 */\n/***/ (() => {\n\nconst e = up.element;\nup.NonceableCallback = class NonceableCallback {\n    constructor(script, nonce) {\n        this.script = script;\n        this.nonce = nonce;\n    }\n    static fromString(string) {\n        let match = string.match(/^(nonce-([^\\s]+)\\s)?(.*)$/);\n        return new this(match[3], match[2]);\n    }\n    toFunction(...argNames) {\n        let script = this.script;\n        if (this.nonce) {\n            let callbackThis = this;\n            return function (...args) {\n                return callbackThis._runAsNoncedFunction(script, this, argNames, args);\n            };\n        }\n        else {\n            return new Function(...argNames, script);\n        }\n    }\n    toString() {\n        return `nonce-${this.nonce} ${this.script}`;\n    }\n    _runAsNoncedFunction(script, thisArg, argNames, args) {\n        let wrappedScript = `\n      try {\n        up.noncedEval.value = (function(${argNames.join()}) {\n          ${script}\n        }).apply(up.noncedEval.thisArg, up.noncedEval.args)\n      } catch (error) {\n        up.noncedEval.error = error\n      }\n    `;\n        let scriptElement;\n        try {\n            up.noncedEval = { args, thisArg: thisArg };\n            scriptElement = e.affix(document.body, 'script', { nonce: this.nonce, text: wrappedScript });\n            if (up.noncedEval.error) {\n                throw up.noncedEval.error;\n            }\n            else {\n                return up.noncedEval.value;\n            }\n        }\n        finally {\n            up.noncedEval = undefined;\n            if (scriptElement) {\n                scriptElement.remove();\n            }\n        }\n    }\n};\n\n\n/***/ }),\n/* 66 */\n/***/ (() => {\n\nconst e = up.element;\nconst u = up.util;\nup.OverlayFocus = class OverlayFocus {\n    constructor(layer) {\n        this._layer = layer;\n        this._focusElement = this._layer.getFocusElement();\n        this._trapFocus = this._layer.trapFocus;\n    }\n    moveToFront() {\n        if (this._active) {\n            return;\n        }\n        this._active = true;\n        this._unsetAttrs = e.setAttrsTemp(this._focusElement, {\n            'tabindex': '0',\n            'role': 'dialog',\n            'aria-modal': this._trapFocus.toString()\n        });\n        if (this._trapFocus) {\n            this._untrapFocus = up.on('focusin', (event) => this._onFocus(event));\n            this._focusTrapBefore = e.affix(this._focusElement, 'beforebegin', 'up-focus-trap[tabindex=0]');\n            this._focusTrapAfter = e.affix(this._focusElement, 'afterend', 'up-focus-trap[tabindex=0]');\n        }\n    }\n    moveToBack() {\n        this.teardown();\n    }\n    teardown() {\n        if (!this._active) {\n            return;\n        }\n        this._active = false;\n        this._unsetAttrs();\n        if (this._trapFocus) {\n            this._untrapFocus();\n            this._focusTrapBefore.remove();\n            this._focusTrapAfter.remove();\n        }\n    }\n    _onFocus(event) {\n        const { target } = event;\n        if (this._processingFocusEvent || up.layer.isWithinForeignOverlay(target)) {\n            return;\n        }\n        this._processingFocusEvent = true;\n        if (target === this._focusTrapBefore) {\n            this._focusEnd();\n        }\n        else if ((target === this._focusTrapAfter) || !this._layer.contains(target)) {\n            this._focusStart();\n        }\n        this._processingFocusEvent = false;\n    }\n    _focusStart(focusOptions) {\n        up.focus(this._focusElement, focusOptions);\n    }\n    _focusEnd() {\n        this._focusLastDescendant(this._layer.getBoxElement()) || this._focusStart();\n    }\n    _focusLastDescendant(element) {\n        for (let child of u.reverse(element.children)) {\n            if (up.viewport.tryFocus(child) || this._focusLastDescendant(child)) {\n                return true;\n            }\n        }\n    }\n};\n\n\n/***/ }),\n/* 67 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Params = class Params {\n    constructor(raw) {\n        this.clear();\n        this.addAll(raw);\n    }\n    clear() {\n        this.entries = [];\n    }\n    [u.copy.key]() {\n        return new up.Params(this);\n    }\n    toObject() {\n        const obj = {};\n        for (let entry of this.entries) {\n            const { name, value } = entry;\n            if (!u.isBasicObjectProperty(name)) {\n                if (this._isArrayKey(name)) {\n                    obj[name] ||= [];\n                    obj[name].push(value);\n                }\n                else {\n                    obj[name] = value;\n                }\n            }\n        }\n        return obj;\n    }\n    toArray() {\n        return this.entries;\n    }\n    toFormData() {\n        const formData = new FormData();\n        for (let entry of this.entries) {\n            formData.append(entry.name, entry.value);\n        }\n        if (!formData.entries) {\n            formData.originalArray = this.entries;\n        }\n        return formData;\n    }\n    toQuery() {\n        let simpleEntries = this.withoutBinaryEntries().entries;\n        let parts = simpleEntries.map(this._arrayEntryToQuery);\n        return parts.join('&');\n    }\n    _arrayEntryToQuery(entry) {\n        const { value } = entry;\n        let query = encodeURIComponent(entry.name);\n        if (u.isGiven(value)) {\n            query += \"=\";\n            query += encodeURIComponent(value);\n        }\n        return query;\n    }\n    _isBinaryEntry({ value }) {\n        return value instanceof Blob;\n    }\n    hasBinaryEntries() {\n        return u.some(this.entries, this._isBinaryEntry);\n    }\n    withoutBinaryEntries() {\n        let simpleEntries = u.reject(this.entries, this._isBinaryEntry);\n        return new this.constructor(simpleEntries);\n    }\n    toURL(base) {\n        let parts = [base, this.toQuery()];\n        parts = u.filter(parts, u.isPresent);\n        const separator = u.contains(base, '?') ? '&' : '?';\n        return parts.join(separator);\n    }\n    add(name, value) {\n        this.entries.push({ name, value });\n    }\n    addAll(raw) {\n        if (u.isMissing(raw)) {\n        }\n        else if (raw instanceof this.constructor) {\n            this.entries.push(...raw.entries);\n        }\n        else if (u.isArray(raw)) {\n            this.entries.push(...raw);\n        }\n        else if (u.isString(raw)) {\n            this._addAllFromQuery(raw);\n        }\n        else if (u.isFormData(raw)) {\n            this._addAllFromFormData(raw);\n        }\n        else if (u.isObject(raw)) {\n            this._addAllFromObject(raw);\n        }\n        else {\n            up.fail(\"Unsupported params type: %o\", raw);\n        }\n    }\n    keys() {\n        return u.map(this.entries, 'name');\n    }\n    values() {\n        return u.map(this.entries, 'value');\n    }\n    _addAllFromObject(object) {\n        for (let key in object) {\n            const value = object[key];\n            const valueElements = u.isArray(value) ? value : [value];\n            for (let valueElement of valueElements) {\n                this.add(key, valueElement);\n            }\n        }\n    }\n    _addAllFromQuery(query) {\n        for (let part of query.split('&')) {\n            if (part) {\n                let [name, value] = part.split('=');\n                name = decodeURIComponent(name);\n                if (u.isGiven(value)) {\n                    value = decodeURIComponent(value);\n                }\n                else {\n                    value = null;\n                }\n                this.add(name, value);\n            }\n        }\n    }\n    _addAllFromFormData(formData) {\n        for (let value of formData.entries()) {\n            this.add(...value);\n        }\n    }\n    set(name, value) {\n        this.delete(name);\n        this.add(name, value);\n    }\n    delete(name) {\n        this.entries = u.reject(this.entries, this._matchEntryFn(name));\n    }\n    _matchEntryFn(name) {\n        return (entry) => entry.name === name;\n    }\n    get(name) {\n        if (this._isArrayKey(name)) {\n            return this.getAll(name);\n        }\n        else {\n            return this.getFirst(name);\n        }\n    }\n    getFirst(name) {\n        const entry = u.find(this.entries, this._matchEntryFn(name));\n        return entry?.value;\n    }\n    getAll(name) {\n        const entries = u.filter(this.entries, this._matchEntryFn(name));\n        return u.map(entries, 'value');\n    }\n    _isArrayKey(key) {\n        return u.evalOption(up.form.config.arrayParam, key);\n    }\n    [u.isBlank.key]() {\n        return this.entries.length === 0;\n    }\n    static fromForm(form) {\n        return this.fromContainer(form);\n    }\n    static fromContainer(container) {\n        let fields = up.form.fields(container);\n        return this.fromFields(fields);\n    }\n    static fromFields(fields) {\n        const params = new (this)();\n        for (let field of u.wrapList(fields)) {\n            params.addField(field);\n        }\n        return params;\n    }\n    addField(field) {\n        field = e.get(field);\n        let name = field.name;\n        if (name && !field.disabled) {\n            const { tagName } = field;\n            const { type } = field;\n            if (tagName === 'SELECT') {\n                for (let option of field.querySelectorAll('option')) {\n                    if (option.selected) {\n                        this.add(name, option.value);\n                    }\n                }\n            }\n            else if ((type === 'checkbox') || (type === 'radio')) {\n                if (field.checked) {\n                    this.add(name, field.value);\n                }\n            }\n            else if (type === 'file') {\n                for (let file of field.files) {\n                    this.add(name, file);\n                }\n            }\n            else {\n                return this.add(name, field.value);\n            }\n        }\n    }\n    [u.isEqual.key](other) {\n        return (this.constructor === other.constructor) && u.isEqual(this.entries, other.entries);\n    }\n    static fromURL(url) {\n        const params = new (this)();\n        const urlParts = u.parseURL(url);\n        let query = urlParts.search;\n        if (query) {\n            query = query.replace(/^\\?/, '');\n            params.addAll(query);\n        }\n        return params;\n    }\n    static stripURL(url) {\n        return u.normalizeURL(url, { search: false });\n    }\n    static merge(start, ...objects) {\n        let merged = u.copy(start);\n        for (let object of objects) {\n            let other = u.wrapValue(this, object);\n            for (let key of other.keys())\n                merged.delete(key);\n            merged.addAll(other);\n        }\n        return merged;\n    }\n};\n\n\n/***/ }),\n/* 68 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Preview = class Preview {\n    constructor({ fragment, request, renderOptions, cleaner }) {\n        this.fragment = fragment;\n        this.request = request;\n        this.renderOptions = renderOptions;\n        this._cleaner = cleaner;\n    }\n    undo(...args) {\n        if (this.ended) {\n            reportError(new up.Error('Preview used after end of request'));\n        }\n        else {\n            this._cleaner.guard(...args);\n        }\n    }\n    get origin() {\n        return this.request.origin;\n    }\n    get params() {\n        return this.request.params;\n    }\n    get layer() {\n        return this.request.layer;\n    }\n    get ended() {\n        return this.request.ended;\n    }\n    get expiredResponse() {\n        return this.renderOptions.expiredResponse;\n    }\n    get revalidating() {\n        return !!this.expiredResponse;\n    }\n    run(value, options = {}) {\n        for (let fn of up.status.resolvePreviewFns(value)) {\n            this.undo(up.error.guard(fn, this, options));\n        }\n    }\n    revert() {\n        this._cleaner.clean();\n    }\n    setAttrs(...args) {\n        let [element, attrs] = this._parseMutatorArgs(args, 'val', 'val');\n        this.undo(e.setAttrsTemp(element, attrs));\n    }\n    addClass(...args) {\n        let [element, klass] = this._parseMutatorArgs(args, 'val', 'val');\n        this.undo(e.addClassTemp(element, klass));\n    }\n    addClassBatch(elements, classes) {\n        for (let element of elements) {\n            for (let klass of classes) {\n                this.addClass(element, klass);\n            }\n        }\n    }\n    removeClass(...args) {\n        let [element, klass] = this._parseMutatorArgs(args, 'val', 'val');\n        this.undo(e.removeClassTemp(element, klass));\n    }\n    setStyle(...args) {\n        let [element, styles] = this._parseMutatorArgs(args, 'val', 'val');\n        this.undo(e.setStyleTemp(element, styles));\n    }\n    disable(...args) {\n        let [element] = this._parseMutatorArgs(args, 'val');\n        this.undo(up.form.disableTemp(element));\n    }\n    insert(...args) {\n        let [reference, position = 'beforeend', tempValue] = this._parseMutatorArgs(args, 'val', u.isAdjacentPosition, 'val');\n        this.undo(up.fragment.insertTemp(reference, position, tempValue));\n    }\n    show(...args) {\n        let [element] = this._parseMutatorArgs(args, 'val');\n        this.undo(e.showTemp(element));\n    }\n    hide(...args) {\n        let [element] = this._parseMutatorArgs(args, 'val');\n        this.undo(e.hideTemp(element));\n    }\n    hideContent(...args) {\n        let [parent] = this._parseMutatorArgs(args, 'val');\n        let wrapper = e.wrapChildren(parent);\n        e.hide(wrapper);\n        this.undo(() => e.unwrap(wrapper));\n    }\n    showPlaceholder(...args) {\n        let [parent, placeholderReference] = this._parseMutatorArgs(args, 'val', 'val');\n        let placeholderNodes = up.fragment.provideNodes(placeholderReference, { origin: this.origin });\n        up.puts('[up-placeholder]', 'Showing placeholder %o', placeholderReference);\n        if (parent) {\n            this.swapContent(parent, placeholderNodes);\n        }\n        else if (this.layer === 'new') {\n            this.openLayer(placeholderNodes, { closeAnimation: false });\n            this.renderOptions.openAnimation = false;\n        }\n    }\n    swapContent(...args) {\n        let [parent, newContent] = this._parseMutatorArgs(args, 'val', 'val');\n        this.hideContent(parent);\n        this.insert(parent, newContent);\n    }\n    openLayer(content, options = {}) {\n        let undoDismissValue = ':undo-preview';\n        let onDismiss = ({ value }) => {\n            if (value !== undoDismissValue)\n                this.request.abort({ reason: 'Preview overlay dismissed' });\n        };\n        up.layer.open({\n            ...u.pick(this.renderOptions, [...up.Layer.Overlay.VISUAL_KEYS, 'target']),\n            ...options,\n            content,\n            abort: false,\n            onDismiss\n        });\n        let overlay = up.layer.front;\n        this.undo(() => overlay.dismiss(undoDismissValue, { preventable: false }));\n        return overlay;\n    }\n    _parseMutatorArgs(args, ...specs) {\n        let [element, ...rest] = u.args(args, ...specs);\n        element = up.fragment.get(element, { layer: this.layer, origin: this.origin }) || this.fragment;\n        return [element, ...rest];\n    }\n};\n\n\n/***/ }),\n/* 69 */\n/***/ (() => {\n\nconst e = up.element;\nconst TRANSITION_DELAY = 300;\nup.ProgressBar = class ProgressBar {\n    constructor() {\n        this._step = 0;\n        this._element = e.affix(document.body, 'up-progress-bar');\n        this._element.style.transition = `width ${TRANSITION_DELAY}ms ease-out`;\n        this._moveTo(0);\n        e.paint(this._element);\n        this._width = 31;\n        this._nextStep();\n    }\n    _nextStep() {\n        let diff;\n        if (this._width < 80) {\n            if (Math.random() < 0.15) {\n                diff = 7 + (5 * Math.random());\n            }\n            else {\n                diff = 1.5 + (0.5 * Math.random());\n            }\n        }\n        else {\n            diff = 0.13 * (100 - this._width) * Math.random();\n        }\n        this._moveTo(this._width + diff);\n        this._step++;\n        const nextStepDelay = TRANSITION_DELAY + (this._step * 40);\n        this.timeout = setTimeout(this._nextStep.bind(this), nextStepDelay);\n    }\n    _moveTo(width) {\n        this._width = width;\n        this._element.style.width = `${width}vw`;\n    }\n    destroy() {\n        clearTimeout(this.timeout);\n        this._element.remove();\n    }\n    conclude() {\n        clearTimeout(this.timeout);\n        this._moveTo(100);\n        setTimeout(this.destroy.bind(this), TRANSITION_DELAY);\n    }\n};\n\n\n/***/ }),\n/* 70 */\n/***/ (() => {\n\nconst u = up.util;\nup.RenderOptions = (function () {\n    const NO_PREVIEWS = {\n        preview: false,\n        disable: false,\n        placeholder: false,\n        feedback: false,\n    };\n    const NO_INPUT_INTERFERENCE = {\n        scroll: false,\n        focus: 'keep',\n        confirm: false,\n    };\n    const NO_MOTION = {\n        transition: false,\n        animation: false,\n        openAnimation: false,\n        closeAnimation: false,\n    };\n    const PREFLIGHT_KEYS = [\n        'url',\n        'method',\n        'origin',\n        'headers',\n        'params',\n        'cache',\n        'fallback',\n        'abort',\n        'abortable',\n        'handleAbort',\n        'confirm',\n        'feedback',\n        'disable',\n        'placeholder',\n        'preview',\n        'origin',\n        'originLayer',\n        'baseLayer',\n        'navigate',\n        'fail',\n        'onError',\n    ];\n    const SHARED_KEYS = PREFLIGHT_KEYS.concat([\n        'keep',\n        'hungry',\n        'history',\n        'source',\n        'saveScroll',\n    ]);\n    const CONTENT_KEYS = [\n        'url',\n        'response',\n        'content',\n        'fragment',\n        'document',\n    ];\n    const LATE_KEYS = [\n        'history',\n        'focus',\n        'scroll',\n    ];\n    function navigateDefaults(options) {\n        if (options.navigate) {\n            return up.fragment.config.navigateOptions;\n        }\n    }\n    function normalizeURL({ url }) {\n        if (url) {\n            return { url: u.normalizeURL(url) };\n        }\n    }\n    function removeUsePrefix(options) {\n        u.renameKey(options, 'useData', 'data');\n        u.renameKey(options, 'useHungry', 'hungry');\n        u.renameKey(options, 'useKeep', 'keep');\n    }\n    function preprocess(options) {\n        up.migrate.preprocessRenderOptions?.(options);\n        up.layer.normalizeOptions(options);\n        removeUsePrefix(options);\n        const defaults = u.merge(up.fragment.config.renderOptions, navigateDefaults(options));\n        return u.merge(u.omit(defaults, LATE_KEYS), { defaults }, { inputDevice: up.event.inputDevice }, options, normalizeURL(options), rememberOriginLayer(options));\n    }\n    function rememberOriginLayer({ origin, originLayer }) {\n        if (origin && !originLayer) {\n            return {\n                originLayer: up.layer.get(origin),\n            };\n        }\n    }\n    function finalize(preprocessedOptions, lateDefaults) {\n        return u.merge(preprocessedOptions.defaults, lateDefaults, preprocessedOptions);\n    }\n    function assertContentGiven(options) {\n        if (!u.some(CONTENT_KEYS, (contentKey) => u.isGiven(options[contentKey]))) {\n            if (options.defaultToEmptyContent) {\n                options.content = '';\n            }\n            else {\n                up.fail('up.render() needs either { ' + CONTENT_KEYS.join(', ') + ' } option');\n            }\n        }\n    }\n    function failOverrides(options) {\n        const overrides = {};\n        for (let key in options) {\n            const value = options[key];\n            let unprefixed = up.fragment.successKey(key);\n            if (unprefixed) {\n                overrides[unprefixed] = value;\n            }\n        }\n        return overrides;\n    }\n    function deriveFailOptions(preprocessedOptions) {\n        let markFailure = { didFail: true };\n        let overrides = failOverrides(preprocessedOptions);\n        if (preprocessedOptions.failOptions) {\n            return {\n                ...preprocessedOptions.defaults,\n                ...u.pick(preprocessedOptions, SHARED_KEYS),\n                ...overrides,\n                didForceFailOptions: true,\n                ...markFailure,\n            };\n        }\n        else {\n            return {\n                ...preprocessedOptions,\n                ...overrides,\n                ...markFailure,\n            };\n        }\n    }\n    return {\n        preprocess,\n        finalize,\n        assertContentGiven,\n        deriveFailOptions,\n        NO_PREVIEWS,\n        NO_MOTION,\n        NO_INPUT_INTERFERENCE,\n    };\n})();\n\n\n/***/ }),\n/* 71 */\n/***/ (() => {\n\nup.RenderResult = class RenderResult extends up.Record {\n    keys() {\n        return [\n            'fragments',\n            'layer',\n            'target',\n            'renderOptions',\n            'finished',\n        ];\n    }\n    defaults() {\n        return {\n            fragments: [],\n            finished: Promise.resolve(),\n        };\n    }\n    get none() {\n        return !this.fragments.length;\n    }\n    get fragment() {\n        return this.fragments[0];\n    }\n    get ok() {\n        return !this.renderOptions.didFail;\n    }\n    static both(main, extension, mergeFinished = true) {\n        if (!extension) {\n            return main;\n        }\n        return new this({\n            ...main,\n            fragments: main.fragments.concat(extension.fragments),\n            finished: (mergeFinished && this.mergeFinished(main, extension))\n        });\n    }\n    static async mergeFinished(main, extension) {\n        return this.both(await main.finished, await extension.finished, false);\n    }\n};\n\n\n/***/ }),\n/* 72 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nup.Request = (_a = class Request extends up.Record {\n        keys() {\n            return [\n                'method',\n                'url',\n                'hash',\n                'params',\n                'target',\n                'failTarget',\n                'headers',\n                'timeout',\n                'background',\n                'cache',\n                'expireCache',\n                'evictCache',\n                'layer',\n                'mode',\n                'context',\n                'failLayer',\n                'failMode',\n                'failContext',\n                'origin',\n                'originLayer',\n                'originMode',\n                'builtAt',\n                'wrapMethod',\n                'contentType',\n                'payload',\n                'onLoading',\n                'fail',\n                'abortable',\n                'lateDelay',\n                'previews',\n            ];\n        }\n        defaults() {\n            let config = up.network.config;\n            return {\n                state: 'new',\n                abortable: true,\n                headers: {},\n                timeout: config.timeout,\n                builtAt: new Date(),\n                previews: [],\n                wrapMethod: config.wrapMethod,\n            };\n        }\n        constructor(options) {\n            super(options);\n            this.params = new up.Params(this.params);\n            this._normalize();\n            if ((this.target || this.layer || this.origin) && !options.basic) {\n                const layerLookupOptions = { origin: this.origin };\n                this.layer = up.layer.get(this.layer, layerLookupOptions);\n                this.context ||= this.layer.context || {};\n                this.mode ||= this.layer.mode;\n                this.failLayer = up.layer.get(this.failLayer, layerLookupOptions);\n                this.failContext ||= this.failLayer?.context || {};\n                this.failMode ||= this.failLayer?.mode;\n                this.originLayer ||= up.layer.get(this.origin) || up.layer.current;\n                this.originMode ||= this.originLayer?.mode;\n            }\n            this.bindLayer = options.bindLayer || this.layer;\n            this._fragments = options.fragments;\n            this._bindFragments = options.bindFragments;\n            this._deferred = u.newDeferred();\n            this._setAutoHeaders();\n        }\n        get effectiveLateTime() {\n            if (this.background) {\n                return false;\n            }\n            else {\n                return this.lateDelay ?? u.evalOption(up.network.config.lateDelay, this);\n            }\n        }\n        isTimed() {\n            return u.isNumber(this.effectiveLateTime);\n        }\n        get xhr() {\n            return this._xhr ??= new XMLHttpRequest();\n        }\n        get fragments() {\n            return (this._fragments ||= this._findFragments());\n        }\n        _findFragments() {\n            let steps = up.fragment.parseTargetSteps(this.target);\n            let lookupOpts = { origin: this.origin, layer: this.layer };\n            let matches = u.map(steps, (step) => up.fragment.get(step.selector, lookupOpts));\n            return u.compact(matches);\n        }\n        get bindFragments() {\n            return this._bindFragments || this.fragments;\n        }\n        get fragment() {\n            return this.fragments?.[0];\n        }\n        _normalize() {\n            this.method = u.normalizeMethod(this.method);\n            this._extractHashFromURL();\n            this._transferParamsToURL();\n            this.url = u.normalizeURL(this.url);\n        }\n        _evictExpensiveAttrs() {\n            u.task(() => {\n                this.layer = undefined;\n                this.failLayer = undefined;\n                this.bindLayer = undefined;\n                this.origin = undefined;\n                this.originLayer = undefined;\n                this._fragments = undefined;\n                this._bindFragments = undefined;\n            });\n        }\n        _extractHashFromURL() {\n            let match = this.url?.match(/^([^#]*)(#.+)$/);\n            if (match) {\n                this.url = match[1];\n                return this.hash = match[2];\n            }\n        }\n        _transferParamsToURL() {\n            if (!this.url || this.allowsPayload() || u.isBlank(this.params)) {\n                return;\n            }\n            this.url = this.params.toURL(this.url);\n            this.params.clear();\n        }\n        isSafe() {\n            return up.network.isSafeMethod(this.method);\n        }\n        allowsPayload() {\n            return u.methodAllowsPayload(this.method);\n        }\n        will302RedirectWithGET() {\n            return this.isSafe() || (this.method === 'POST');\n        }\n        willCache() {\n            return u.evalAutoOption(this.cache, up.network.config.autoCache, this);\n        }\n        runQueuedCallbacks() {\n            u.always(this, () => this._evictExpensiveAttrs());\n        }\n        load() {\n            if (this.state !== 'new')\n                return;\n            if (this._emitLoad()) {\n                this.state = 'loading';\n                this._normalize();\n                this.onLoading?.();\n                this.expired = false;\n                new up.Request.XHRRenderer(this).buildAndSend({\n                    onload: () => this._onXHRLoad(),\n                    onerror: () => this._onXHRError(),\n                    ontimeout: () => this._onXHRTimeout(),\n                    onabort: () => this._onXHRAbort()\n                });\n                return true;\n            }\n            else {\n                this.abort({ reason: 'Prevented by event listener' });\n            }\n        }\n        runPreviews(renderOptions) {\n            if (!this.ended && !this.fromCache) {\n                this._revertPreviews = up.status.runPreviews(this, renderOptions);\n            }\n        }\n        _emitLoad() {\n            let event = this.emit('up:request:load', { log: ['Loading %s', this.description] });\n            return !event.defaultPrevented;\n        }\n        loadPage() {\n            up.network.abort();\n            new up.Request.FormRenderer(this).buildAndSubmit();\n        }\n        _onXHRLoad() {\n            const response = this._extractResponseFromXHR();\n            const log = 'Loaded ' + response.description;\n            this.emit('up:request:loaded', { request: response.request, response, log });\n            this.respondWith(response);\n        }\n        _onXHRError() {\n            this._setOfflineState('Network error');\n        }\n        _onXHRTimeout() {\n            this._setOfflineState('Timeout');\n        }\n        _onXHRAbort() {\n            this._setAbortedState();\n        }\n        abort({ reason } = {}) {\n            if (this._setAbortedState(reason) && this._xhr) {\n                this._xhr.abort();\n            }\n        }\n        _setAbortedState(reason) {\n            if (this.ended)\n                return;\n            let message = 'Aborted request to ' + this.description + (reason ? ': ' + reason : '');\n            this.state = 'aborted';\n            this._reject(new up.Aborted(message));\n            this.emit('up:request:aborted', { log: message });\n            return true;\n        }\n        _setOfflineState(reason) {\n            if (this.ended)\n                return;\n            let message = 'Cannot load request to ' + this.description + (reason ? ': ' + reason : '');\n            this.state = 'offline';\n            this.emit('up:request:offline', { log: message });\n            this._reject(new up.Offline(message));\n        }\n        respondWith(response) {\n            this.response = response;\n            if (this.ended)\n                return;\n            this.state = 'loaded';\n            if (response.ok) {\n                this._resolve(response);\n            }\n            else {\n                this._reject(response);\n            }\n        }\n        _resolve(response) {\n            this._onSettle();\n            this._deferred.resolve(response);\n        }\n        _reject(responseOrError) {\n            this._onSettle();\n            this._deferred.reject(responseOrError);\n        }\n        _onSettle() {\n            this._revertPreviews?.();\n        }\n        get ended() {\n            return (this.state !== 'new') && (this.state !== 'loading') && (this.state !== 'tracking');\n        }\n        csrfHeader() {\n            return up.protocol.csrfHeader();\n        }\n        csrfParam() {\n            return up.protocol.csrfParam();\n        }\n        csrfToken() {\n            if (!this.isSafe() && !this.isCrossOrigin()) {\n                return up.protocol.csrfToken();\n            }\n        }\n        isCrossOrigin() {\n            return u.isCrossOrigin(this.url);\n        }\n        _extractResponseFromXHR() {\n            const responseAttrs = {\n                method: this.method,\n                url: this.url,\n                request: this,\n                xhr: this.xhr,\n                text: this.xhr.responseText,\n                status: this.xhr.status,\n                title: up.protocol.titleFromXHR(this.xhr),\n                target: up.protocol.targetFromXHR(this.xhr),\n                openLayer: up.protocol.openLayerFromXHR(this.xhr),\n                acceptLayer: up.protocol.acceptLayerFromXHR(this.xhr),\n                dismissLayer: up.protocol.dismissLayerFromXHR(this.xhr),\n                eventPlans: up.protocol.eventPlansFromXHR(this.xhr),\n                context: up.protocol.contextFromXHR(this.xhr),\n                expireCache: up.protocol.expireCacheFromXHR(this.xhr),\n                evictCache: up.protocol.evictCacheFromXHR(this.xhr),\n                fail: this.fail,\n            };\n            let methodFromResponse = up.protocol.methodFromXHR(this.xhr);\n            let urlFromResponse = up.protocol.locationFromXHR(this.xhr);\n            if (urlFromResponse) {\n                if (!u.matchURLs(this.url, urlFromResponse)) {\n                    methodFromResponse ||= 'GET';\n                }\n                responseAttrs.url = urlFromResponse;\n            }\n            if (methodFromResponse) {\n                responseAttrs.method = methodFromResponse;\n            }\n            return new up.Response(responseAttrs);\n        }\n        _buildEventEmitter(args) {\n            return up.EventEmitter.fromEmitArgs(args, {\n                layer: this.bindLayer,\n                request: this,\n                origin: this.origin\n            });\n        }\n        emit(...args) {\n            return this._buildEventEmitter(args).emit();\n        }\n        assertEmitted(...args) {\n            this._buildEventEmitter(args).assertEmitted();\n        }\n        get description() {\n            return this.method + ' ' + this.url;\n        }\n        isBoundToSubtrees(subtreeRoots) {\n            subtreeRoots = u.wrapList(subtreeRoots);\n            return u.some(this.bindFragments, function (fragment) {\n                return u.some(subtreeRoots, (subtreeElement) => subtreeElement.contains(fragment));\n            });\n        }\n        isBoundToLayers(layers) {\n            return u.contains(layers, this.bindLayer);\n        }\n        get age() {\n            return new Date() - this.builtAt;\n        }\n        header(name) {\n            return this.headers[name];\n        }\n        _setAutoHeaders() {\n            for (let key of ['target', 'failTarget', 'mode', 'failMode', 'context', 'failContext', 'originMode']) {\n                this._setPropertyHeader(key);\n            }\n            let csrfHeader, csrfToken;\n            if ((csrfHeader = this.csrfHeader()) && (csrfToken = this.csrfToken())) {\n                this._setAutoHeader(csrfHeader, csrfToken);\n            }\n            this._setAutoHeader(up.protocol.headerize('version'), up.version);\n        }\n        _setPropertyHeader(key) {\n            this._setAutoHeader(up.protocol.headerize(key), this[key]);\n        }\n        _setAutoHeader(name, value) {\n            if (u.isMissing(value)) {\n                return;\n            }\n            if (u.isOptions(value) || u.isArray(value)) {\n                value = u.safeStringifyJSON(value);\n            }\n            this.headers[name] = value;\n        }\n        mergeIfUnsent(trackingRequest) {\n            if (this.state !== 'new')\n                return;\n            if (!this.target || !trackingRequest.target)\n                return;\n            let targetAtoms = up.fragment.splitTarget(this.target + ',' + trackingRequest.target);\n            this.target = u.uniq(targetAtoms).join(', ');\n            this._setPropertyHeader('target');\n            this._fragments = u.uniq([...this.fragments, ...trackingRequest.fragments]);\n        }\n        static tester(condition, { except } = {}) {\n            let testFn;\n            if (u.isFunction(condition)) {\n                testFn = condition;\n            }\n            else if (condition instanceof this) {\n                testFn = (request) => condition === request;\n            }\n            else if (u.isString(condition)) {\n                let pattern = new up.URLPattern(condition);\n                testFn = (request) => pattern.test(request.url);\n            }\n            else {\n                testFn = (_request) => condition;\n            }\n            if (except) {\n                return (request) => !up.cache.willHaveSameResponse(request, except) && testFn(request);\n            }\n            else {\n                return testFn;\n            }\n        }\n    },\n    (() => {\n        u.delegatePromise(_a.prototype, function () { return this._deferred; });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 73 */\n/***/ (() => {\n\nconst u = up.util;\nclass Route {\n    constructor() {\n        this.varyHeaders = new Set();\n        this.requests = [];\n    }\n    matchBest(newRequest) {\n        let matches = this.requests.filter((cachedRequest) => this.satisfies(cachedRequest, newRequest));\n        return u.last(matches);\n    }\n    delete(request) {\n        u.remove(this.requests, request);\n    }\n    put(request) {\n        this.requests.push(request);\n    }\n    updateVary(response) {\n        for (let headerName of response.varyHeaderNames) {\n            this.varyHeaders.add(headerName);\n        }\n    }\n    satisfies(cachedRequest, newRequest) {\n        if (cachedRequest === newRequest)\n            return true;\n        return u.every(this.varyHeaders, (varyHeader) => {\n            let cachedValue = cachedRequest.header(varyHeader);\n            let newValue = newRequest.header(varyHeader);\n            if (varyHeader === 'X-Up-Target' || varyHeader === 'X-Up-Fail-Target') {\n                if (!cachedValue)\n                    return true;\n                if (!newValue)\n                    return false;\n                let cachedTokens = up.fragment.splitTarget(cachedValue);\n                let newTokens = up.fragment.splitTarget(newValue);\n                return u.containsAll(cachedTokens, newTokens);\n            }\n            else {\n                return cachedValue === newValue;\n            }\n        });\n    }\n}\nup.Request.Cache = class Cache {\n    constructor() {\n        this.reset();\n    }\n    reset() {\n        this._routes = {};\n        this._requests = [];\n    }\n    get(request) {\n        request = this._wrap(request);\n        let route = this._getRoute(request);\n        let cachedRequest = route.matchBest(request);\n        if (cachedRequest) {\n            if (this._isUsable(cachedRequest)) {\n                return cachedRequest;\n            }\n            else {\n                this._delete(request, route);\n            }\n        }\n    }\n    async put(request) {\n        request = this._wrap(request);\n        let route = this._getRoute(request);\n        let { response } = request;\n        if (response)\n            route.updateVary(response);\n        let superseded = route.requests.filter((oldRequest) => route.satisfies(request, oldRequest));\n        for (let r of superseded) {\n            this._delete(r);\n        }\n        request.cacheRoute = route;\n        route.put(request);\n        this._requests.push(request);\n        this._limitSize();\n    }\n    async track(existingRequest, newRequest, options = {}) {\n        newRequest.trackedRequest = existingRequest;\n        newRequest.state = 'tracking';\n        let value;\n        if (existingRequest.ended && existingRequest.response) {\n            value = existingRequest.response;\n        }\n        else {\n            value = await u.always(existingRequest);\n        }\n        if (value instanceof up.Response) {\n            if (options.force || existingRequest.cacheRoute.satisfies(existingRequest, newRequest)) {\n                newRequest.fromCache = true;\n                value = u.variant(value, { request: newRequest });\n                newRequest.respondWith(value);\n                u.delegate(newRequest, ['expired', 'state'], () => existingRequest);\n            }\n            else {\n                delete newRequest.trackedRequest;\n                newRequest.state = 'new';\n                options.onIncompatible?.(newRequest);\n            }\n        }\n        else {\n            newRequest.state = existingRequest.state;\n            newRequest._reject(value);\n        }\n    }\n    willHaveSameResponse(existingRequest, newRequest) {\n        return existingRequest === newRequest || existingRequest === newRequest.trackedRequest;\n    }\n    evict(condition = true, testerOptions) {\n        this._eachMatch(condition, testerOptions, (request) => this._delete(request));\n    }\n    expire(condition = true, testerOptions) {\n        this._eachMatch(condition, testerOptions, (request) => request.expired = true);\n    }\n    reindex(request) {\n        this._delete(request);\n        delete request.cacheRoute;\n        this.put(request);\n    }\n    _delete(request) {\n        u.remove(this._requests, request);\n        request.cacheRoute?.delete(request);\n    }\n    _getRoute(request) {\n        return request.cacheRoute || (this._routes[request.description] ||= new Route());\n    }\n    _isUsable(request) {\n        return request.age < up.network.config.cacheEvictAge;\n    }\n    get currentSize() {\n        return this._requests.length;\n    }\n    get _capacity() {\n        return up.network.config.cacheSize;\n    }\n    _limitSize() {\n        for (let i = 0; i < (this.currentSize - this._capacity); i++) {\n            this._delete(this._requests[0]);\n        }\n    }\n    _eachMatch(condition = true, testerOptions, fn) {\n        let tester = up.Request.tester(condition, testerOptions);\n        let results = u.filter(this._requests, tester);\n        u.each(results, fn);\n    }\n    _wrap(requestOrOptions) {\n        return u.wrapValue(up.Request, requestOrOptions);\n    }\n};\n\n\n/***/ }),\n/* 74 */\n/***/ (() => {\n\nconst u = up.util;\nup.Request.Queue = class Queue {\n    constructor() {\n        this.reset();\n    }\n    reset() {\n        this._queuedRequests = [];\n        this._currentRequests = [];\n        this._emittedLate = false;\n    }\n    get allRequests() {\n        return this._currentRequests.concat(this._queuedRequests);\n    }\n    asap(request) {\n        request.runQueuedCallbacks();\n        u.always(request, () => this._onRequestSettled(request));\n        this._scheduleSlowTimer(request);\n        this._queueRequest(request);\n        queueMicrotask(() => this._poke());\n    }\n    promoteToForeground(request) {\n        if (request.background) {\n            request.background = false;\n            this._scheduleSlowTimer(request);\n        }\n    }\n    _scheduleSlowTimer(request) {\n        if (!request.isTimed())\n            return;\n        let timeUntilLate = Math.max(request.effectiveLateTime - request.age);\n        u.timer(timeUntilLate, () => this._checkForLate());\n    }\n    _getMaxConcurrency() {\n        return u.evalOption(up.network.config.concurrency);\n    }\n    _hasConcurrencyLeft() {\n        const maxConcurrency = this._getMaxConcurrency();\n        return (maxConcurrency === -1) || (this._currentRequests.length < maxConcurrency);\n    }\n    isBusy() {\n        return this._currentRequests.length > 0 || this._queuedRequests.length > 0;\n    }\n    _queueRequest(request) {\n        this._queuedRequests.push(request);\n    }\n    _pluckNextRequest() {\n        let request = u.find(this._queuedRequests, (request) => !request.background);\n        request ||= this._queuedRequests[0];\n        return u.remove(this._queuedRequests, request);\n    }\n    _sendRequestNow(request) {\n        if (request.load()) {\n            this._currentRequests.push(request);\n        }\n    }\n    _onRequestSettled(request) {\n        u.remove(this._currentRequests, request) || u.remove(this._queuedRequests, request);\n        queueMicrotask(() => this._poke());\n        u.task(() => this._checkForRecover());\n    }\n    _poke() {\n        let request;\n        if (this._hasConcurrencyLeft() && (request = this._pluckNextRequest())) {\n            return this._sendRequestNow(request);\n        }\n    }\n    abort(...args) {\n        let [conditions = true, { except, reason, logOnce }] = u.args(args, 'val', 'options');\n        let tester = up.Request.tester(conditions, { except });\n        for (let list of [this._currentRequests, this._queuedRequests]) {\n            const abortableRequests = u.filter(list, tester);\n            for (let abortableRequest of abortableRequests) {\n                if (logOnce) {\n                    up.puts(...logOnce);\n                    logOnce = null;\n                }\n                abortableRequest.abort({ reason });\n                u.remove(list, abortableRequest);\n            }\n        }\n    }\n    _checkForLate() {\n        if (!this._emittedLate && this._hasLateTimedRequests()) {\n            this._emittedLate = true;\n            up.emit('up:network:late', { log: 'Server is slow to respond' });\n        }\n    }\n    _checkForRecover() {\n        if (this._emittedLate && !this._timedRequests.length) {\n            this._emittedLate = false;\n            up.emit('up:network:recover', { log: 'Slow requests were loaded' });\n        }\n    }\n    get _timedRequests() {\n        return this.allRequests.filter((request) => request.isTimed());\n    }\n    _hasLateTimedRequests() {\n        const timerTolerance = 1;\n        const isLate = (request) => request.age >= (request.effectiveLateTime - timerTolerance);\n        return u.some(this._timedRequests, isLate);\n    }\n};\n\n\n/***/ }),\n/* 75 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nconst HTML_FORM_METHODS = ['GET', 'POST'];\nup.Request.FormRenderer = class FormRenderer {\n    constructor(request) {\n        this._request = request;\n    }\n    buildAndSubmit() {\n        this.params = this._request.params.withoutBinaryEntries();\n        let action = this._request.url;\n        let { method } = this._request;\n        const paramsFromQuery = up.Params.fromURL(action);\n        this.params.addAll(paramsFromQuery);\n        action = up.Params.stripURL(action);\n        if (!u.contains(HTML_FORM_METHODS, method)) {\n            method = up.protocol.wrapMethod(method, this.params);\n        }\n        this._form = e.affix(document.body, 'form.up-request-loader', { method, action });\n        let contentType = this._request.contentType;\n        if (contentType) {\n            this._form.setAttribute('enctype', contentType);\n        }\n        let csrfParam, csrfToken;\n        if ((csrfParam = this._request.csrfParam()) && (csrfToken = this._request.csrfToken())) {\n            this.params.add(csrfParam, csrfToken);\n        }\n        u.each(this.params.toArray(), this._addField.bind(this));\n        up.browser.submitForm(this._form);\n    }\n    _addField(attrs) {\n        e.affix(this._form, 'input[type=hidden]', attrs);\n    }\n};\n\n\n/***/ }),\n/* 76 */\n/***/ (() => {\n\nvar _a;\nconst CONTENT_TYPE_URL_ENCODED = 'application/x-www-form-urlencoded';\nconst CONTENT_TYPE_FORM_DATA = 'multipart/form-data';\nconst u = up.util;\nup.Request.XHRRenderer = (_a = class XHRRenderer {\n        constructor(request) {\n            this._request = request;\n        }\n        buildAndSend(handlers) {\n            const xhr = this._request.xhr;\n            this._params = u.copy(this._request.params);\n            if (this._request.timeout) {\n                xhr.timeout = this._request.timeout;\n            }\n            xhr.open(this._getMethod(), this._request.url);\n            let contentType = this._getContentType();\n            if (contentType) {\n                xhr.setRequestHeader('Content-Type', contentType);\n            }\n            for (let headerName in this._request.headers) {\n                let headerValue = this._request.headers[headerName];\n                xhr.setRequestHeader(headerName, headerValue);\n            }\n            Object.assign(xhr, handlers);\n            xhr.send(this._getPayload());\n        }\n        _getMethod() {\n            let method = this._request.method;\n            if (this._request.wrapMethod && !this._request.will302RedirectWithGET()) {\n                method = up.protocol.wrapMethod(method, this._params);\n            }\n            return method;\n        }\n        _getContentType() {\n            this._finalizePayload();\n            return this._contentType;\n        }\n        _getPayload() {\n            this._finalizePayload();\n            return this._payload;\n        }\n        _finalizePayload() {\n            this._payload = this._request.payload;\n            this._contentType = this._request.contentType;\n            if (!this._payload && this._request.allowsPayload()) {\n                if (!this._contentType) {\n                    this._contentType = this._params.hasBinaryEntries() ? CONTENT_TYPE_FORM_DATA : CONTENT_TYPE_URL_ENCODED;\n                }\n                if (this._contentType === CONTENT_TYPE_FORM_DATA) {\n                    this._contentType = null;\n                    this._payload = this._params.toFormData();\n                }\n                else {\n                    this._payload = this._params.toQuery().replace(/%20/g, '+');\n                }\n            }\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _finalizePayload: true,\n            _getMethod: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 77 */\n/***/ (() => {\n\nconst u = up.util;\nconst HTML_CONTENT_TYPE = /^(text\\/html|application\\/xhtml\\+xml) *(;|$)/i;\nup.Response = class Response extends up.Record {\n    keys() {\n        return [\n            'method',\n            'url',\n            'text',\n            'status',\n            'request',\n            'xhr',\n            'target',\n            'title',\n            'openLayer',\n            'acceptLayer',\n            'dismissLayer',\n            'eventPlans',\n            'context',\n            'expireCache',\n            'evictCache',\n            'headers',\n            'loadedAt',\n            'fail',\n        ];\n    }\n    defaults() {\n        return {\n            headers: {},\n            loadedAt: new Date(),\n        };\n    }\n    get ok() {\n        return !u.evalOption(this.fail ?? up.network.config.fail, this);\n    }\n    get none() {\n        return !this.text;\n    }\n    header(name) {\n        return this.headers[name] || this.xhr?.getResponseHeader(name);\n    }\n    get varyHeaderNames() {\n        let varyHeaderValue = this.header('Vary');\n        return u.getSimpleTokens(varyHeaderValue, { separator: ',' });\n    }\n    get contentType() {\n        return this.header('Content-Type');\n    }\n    isHTML() {\n        return HTML_CONTENT_TYPE.test(this.contentType);\n    }\n    get cspInfo() {\n        let policy = this.header('Content-Security-Policy') || this.header('Content-Security-Policy-Report-Only');\n        return up.protocol.cspInfoFromHeader(policy);\n    }\n    get lastModified() {\n        let header = this.header('Last-Modified');\n        if (header) {\n            return new Date(header);\n        }\n    }\n    get etag() {\n        return this.header('ETag');\n    }\n    get json() {\n        return this.parsedJSON ||= JSON.parse(this.text);\n    }\n    get age() {\n        let now = new Date();\n        return now - this.loadedAt;\n    }\n    get expired() {\n        return this.age > up.network.config.cacheExpireAge ||\n            this.request.expired;\n    }\n    get description() {\n        return `HTTP ${this.status} response to ${this.request.description}`;\n    }\n    get redirect() {\n        return (this.url !== this.request.url) || (this.method !== this.request.method);\n    }\n    get redirectRequest() {\n        if (!this.redirect)\n            return;\n        let finalRequest = u.variant(this.request, {\n            method: this.method,\n            url: this.url,\n            cacheRoute: null,\n        });\n        up.cache.track(this.request, finalRequest, { force: true });\n        return finalRequest;\n    }\n};\n\n\n/***/ }),\n/* 78 */\n/***/ (() => {\n\nvar _a;\nconst u = up.util;\nconst e = up.element;\nup.ResponseDoc = (_a = class ResponseDoc {\n        constructor({ document, fragment, content, target, origin, data, cspInfo, match }) {\n            if (document) {\n                this._parseDocument(document, origin, data);\n            }\n            else if (fragment) {\n                this._parseFragment(fragment, origin, data);\n            }\n            else {\n                this._parseContent(content || '', origin, target, data);\n            }\n            this._cspInfo = cspInfo || {};\n            if (origin) {\n                let originSelector = up.fragment.tryToTarget(origin);\n                if (originSelector) {\n                    this._rediscoveredOrigin = this.select(originSelector);\n                }\n            }\n            this._match = match;\n        }\n        _parseDocument(value, origin, data) {\n            if (value instanceof Document) {\n                this._document = value;\n                this._isFullDocument = true;\n            }\n            else if (u.isString(value)) {\n                this._isFullDocument = e.isFullDocumentHTML(value);\n                let htmlParser = (html) => [e.createBrokenDocumentFromHTML(html)];\n                let nodes = up.fragment.provideNodes(value, { origin, data, htmlParser });\n                if (nodes[0] instanceof Document) {\n                    this._document = nodes[0];\n                }\n                else {\n                    this._document = this._buildFauxDocument(nodes);\n                }\n            }\n            else {\n                this._document = this._buildFauxDocument(value);\n            }\n        }\n        _parseFragment(value, origin, data) {\n            let element = e.extractSingular(up.fragment.provideNodes(value, { origin, data }));\n            this._document = this._buildFauxDocument(element);\n        }\n        _parseContent(value, origin, target, data) {\n            if (!target)\n                up.fail(\"must pass a { target } when passing { content }\");\n            let simplifiedTarget = u.map(up.fragment.parseTargetSteps(target), 'selector').join();\n            let nodes = up.fragment.provideNodes(value, { origin, data });\n            let matchingElement = e.createFromSelector(simplifiedTarget, { content: nodes });\n            this._document = this._buildFauxDocument(matchingElement);\n        }\n        _buildFauxDocument(nodes) {\n            nodes = u.wrapList(nodes);\n            let fauxDocument = document.createElement('up-document');\n            fauxDocument.append(...nodes);\n            return fauxDocument;\n        }\n        rootSelector() {\n            return up.fragment.toTarget(this._document.children[0]);\n        }\n        get title() {\n            return this._fromHead(this._getTitleText);\n        }\n        _getHead() {\n            if (this._isFullDocument) {\n                return this._document.head;\n            }\n        }\n        _fromHead(fn) {\n            let head = this._getHead();\n            return head && fn(head);\n        }\n        get metaTags() {\n            return this._fromHead(up.history.findMetaTags);\n        }\n        get assets() {\n            return this._fromHead((head) => {\n                let assets = up.script.findAssets(head);\n                return u.map(assets, (asset) => {\n                    this._adoptNoncesInSubtree(asset);\n                    let clone = this._reviveElementAsClone(asset);\n                    return clone;\n                });\n            });\n        }\n        get lang() {\n            if (this._isFullDocument) {\n                return up.history.getLang(this._document);\n            }\n        }\n        _getTitleText(head) {\n            return head.querySelector('title')?.textContent;\n        }\n        select(selector) {\n            let finder = new up.FragmentFinder({\n                selector: selector,\n                origin: this._rediscoveredOrigin,\n                document: this._document,\n                match: this._match,\n            });\n            return finder.find();\n        }\n        selectSteps(steps) {\n            return steps.filter((step) => {\n                return this._trySelectStep(step) || this._cannotMatchStep(step);\n            });\n        }\n        commitSteps(steps) {\n            return steps.filter((step) => this.commitElement(step.newElement));\n        }\n        _trySelectStep(step) {\n            if (step.newElement) {\n                return true;\n            }\n            let newElement = this.select(step.selector);\n            if (!newElement) {\n                return;\n            }\n            let { selectEvent } = step;\n            if (selectEvent) {\n                selectEvent.newFragment = newElement;\n                selectEvent.renderOptions = step.originalRenderOptions;\n                up.emit(step.oldElement, selectEvent, { callback: step.selectCallback });\n                if (selectEvent.defaultPrevented) {\n                    return;\n                }\n            }\n            step.newElement = newElement;\n            return true;\n        }\n        _cannotMatchStep(step) {\n            if (!step.maybe) {\n                throw new up.CannotMatch();\n            }\n        }\n        _disableScriptsInSubtree(element) {\n            let pageNonce = up.protocol.cspNonce();\n            up.script.disableSubtree(element, (script) => !this._isScriptAllowed(script, pageNonce));\n        }\n        _isScriptAllowed(scriptElement, pageNonce) {\n            let strategy = up.fragment.config.runScripts;\n            if (strategy === true && this._cspInfo.declaration?.includes(\"'strict-dynamic'\")) {\n                return pageNonce && (pageNonce === scriptElement.nonce);\n            }\n            else {\n                return u.evalOption(strategy, scriptElement);\n            }\n        }\n        _reviveElementAsClone(element) {\n            return e.revivedClone(element);\n        }\n        _reviveSubtreeInPlace(element) {\n            if (this._document instanceof Document) {\n                for (let brokenElement of e.subtree(element, ':is(noscript, script, audio, video):not(.up-keeping, .up-keeping *)')) {\n                    let clone = this._reviveElementAsClone(brokenElement);\n                    brokenElement.replaceWith(clone);\n                }\n            }\n        }\n        _adoptNoncesInSubtree(element) {\n            up.script.adoptNoncesInSubtree(element, this._cspInfo.nonces);\n        }\n        commitElement(element) {\n            if (this._document.contains(element)) {\n                this._adoptNoncesInSubtree(element);\n                this._disableScriptsInSubtree(element);\n                element.remove();\n                return true;\n            }\n        }\n        finalizeElement(element) {\n            this._reviveSubtreeInPlace(element);\n        }\n    },\n    (() => {\n        u.memoizeMethod(_a.prototype, {\n            _getHead: true,\n        });\n    })(),\n    _a);\n\n\n/***/ }),\n/* 79 */\n/***/ (() => {\n\nconst e = up.element;\nconst u = up.util;\nup.RevealMotion = class RevealMotion {\n    constructor(element, options = {}) {\n        this._element = element;\n        this._viewport = e.get(options.viewport) || up.viewport.get(this._element);\n        this._obstructionsLayer = up.layer.get(this._viewport);\n        this._behavior = options.scrollBehavior ?? options.behavior ?? 'instant';\n        const viewportConfig = up.viewport.config;\n        this._snap = options.snap ?? options.revealSnap ?? viewportConfig.revealSnap;\n        this._padding = options.padding ?? options.revealPadding ?? viewportConfig.revealPadding;\n        this._top = options.top ?? options.revealTop ?? viewportConfig.revealTop;\n        this._max = options.max ?? options.revealMax ?? viewportConfig.revealMax;\n        this._topObstructionSelector = viewportConfig.selector('fixedTopSelectors');\n        this._bottomObstructionSelector = viewportConfig.selector('fixedBottomSelectors');\n    }\n    start() {\n        const viewportRect = this._getViewportRect(this._viewport);\n        const elementRect = up.Rect.fromElement(this._element);\n        if (this._max) {\n            const maxPixels = u.evalOption(this._max, this._element);\n            elementRect.height = Math.min(elementRect.height, maxPixels);\n        }\n        elementRect.grow(this._padding);\n        this._substractObstructions(viewportRect);\n        if (viewportRect.height < 0) {\n            up.fail('Viewport has no visible area');\n        }\n        const originalScrollTop = this._viewport.scrollTop;\n        let newScrollTop = originalScrollTop;\n        if (this._top || (elementRect.height > viewportRect.height)) {\n            const diff = elementRect.top - viewportRect.top;\n            newScrollTop += diff;\n        }\n        else if (elementRect.top < viewportRect.top) {\n            newScrollTop -= (viewportRect.top - elementRect.top);\n        }\n        else if (elementRect.bottom > viewportRect.bottom) {\n            newScrollTop += (elementRect.bottom - viewportRect.bottom);\n        }\n        else {\n        }\n        if (u.isNumber(this._snap) && (newScrollTop < this._snap) && (elementRect.top < (0.5 * viewportRect.height))) {\n            newScrollTop = 0;\n        }\n        if (newScrollTop !== originalScrollTop) {\n            this._viewport.scrollTo({ top: newScrollTop, behavior: this._behavior });\n        }\n    }\n    _getViewportRect() {\n        if (up.viewport.isRoot(this._viewport)) {\n            return new up.Rect({\n                left: 0,\n                top: 0,\n                width: up.viewport.rootWidth(),\n                height: up.viewport.rootHeight()\n            });\n        }\n        else {\n            return up.Rect.fromElement(this._viewport);\n        }\n    }\n    _computeObstructionRects(selector) {\n        let elements = up.fragment.all(selector, { layer: this._obstructionsLayer });\n        elements = u.filter(elements, e.isVisible);\n        return u.map(elements, (element) => {\n            if (e.style(element, 'position') === 'sticky') {\n                return up.Rect.fromElementAsFixed(element);\n            }\n            else {\n                return up.Rect.fromElement(element);\n            }\n        });\n    }\n    _substractObstructions(viewportRect) {\n        for (let obstructionRect of this._computeObstructionRects(this._topObstructionSelector)) {\n            let diff = obstructionRect.bottom - viewportRect.top;\n            if (diff > 0) {\n                viewportRect.top += diff;\n                viewportRect.height -= diff;\n            }\n        }\n        for (let obstructionRect of this._computeObstructionRects(this._bottomObstructionSelector)) {\n            let diff = viewportRect.bottom - obstructionRect.top;\n            if (diff > 0) {\n                viewportRect.height -= diff;\n            }\n        }\n    }\n};\n\n\n/***/ }),\n/* 80 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Selector = class Selector {\n    constructor(selector, elementOrDocument, options = {}) {\n        this._filters = [];\n        let matchingInExternalDocument = elementOrDocument && !document.contains(elementOrDocument);\n        if (!matchingInExternalDocument && !options.destroying) {\n            this._filters.push(up.fragment.isNotDestroying);\n        }\n        this._ignoreLayers = matchingInExternalDocument || options.layer === 'any' || up.layer.count === 1;\n        let expandTargetLayer;\n        if (this._ignoreLayers) {\n            expandTargetLayer = up.layer.root;\n        }\n        else {\n            options.layer ??= u.presence(elementOrDocument, u.isElement);\n            this._layers = up.layer.getAll(options);\n            if (!this._layers.length)\n                throw new up.CannotMatch([\"Unknown layer: %o\", options.layer]);\n            this._filters.push((match) => u.some(this._layers, (layer) => layer.contains(match)));\n            expandTargetLayer = this._layers[0];\n        }\n        this._selectors = up.fragment.expandTargets(selector, { ...options, layer: expandTargetLayer });\n        this._unionSelector = this._selectors.join() || 'match-none';\n    }\n    matches(element) {\n        return e.elementLikeMatches(element, this._unionSelector) && this._passesFilter(element);\n    }\n    closest(element) {\n        return this._filterOne(element.closest(this._unionSelector));\n    }\n    descendants(root = document) {\n        return this._filterMany(root.querySelectorAll(this._unionSelector));\n    }\n    firstDescendant(root) {\n        if (this._ignoreLayers) {\n            root ||= document;\n            return this._firstSelectorMatch((selector) => root.querySelectorAll(selector));\n        }\n        else {\n            return u.findResult(this._layers, (layer) => {\n                return this._firstSelectorMatch((selector) => e.subtree(layer.element, selector));\n            });\n        }\n    }\n    subtree(root) {\n        return this._filterMany(e.subtree(root, this._unionSelector));\n    }\n    _firstSelectorMatch(fn) {\n        return u.findResult(this._selectors, (selector) => {\n            return this._filterMany(fn(selector))[0];\n        });\n    }\n    _passesFilter(element) {\n        return element && u.every(this._filters, (filter) => filter(element));\n    }\n    _filterOne(element) {\n        return u.presence(element, this._passesFilter.bind(this));\n    }\n    _filterMany(elements) {\n        return u.filter(elements, this._passesFilter.bind(this));\n    }\n};\n\n\n/***/ }),\n/* 81 */\n/***/ (() => {\n\nconst u = up.util;\nconst e = up.element;\nup.Tether = class Tether {\n    constructor(options) {\n        up.migrate.handleTetherOptions?.(options);\n        this._anchor = options.anchor;\n        this._align = options.align;\n        this._position = options.position;\n        this._alignAxis = (this._position === 'top') || (this._position === 'bottom') ? 'horizontal' : 'vertical';\n        this._viewport = up.viewport.get(this._anchor);\n        this.parent = this._viewport === e.root ? document.body : this._viewport;\n        this._syncOnScroll = !this._viewport.contains(this._anchor.offsetParent);\n    }\n    start(element) {\n        this._element = element;\n        this._element.style.position = 'absolute';\n        this._setOffset(0, 0);\n        this.sync();\n        this._changeEventSubscription('on');\n    }\n    stop() {\n        this._changeEventSubscription('off');\n    }\n    _changeEventSubscription(fn) {\n        let doScheduleSync = this._scheduleSync.bind(this);\n        up[fn](window, 'resize', doScheduleSync);\n        if (this._syncOnScroll) {\n            up[fn](this._viewport, 'scroll', doScheduleSync);\n        }\n    }\n    _scheduleSync() {\n        clearTimeout(this.syncTimer);\n        return this.syncTimer = u.task(this.sync.bind(this));\n    }\n    isDetached() {\n        return !this.parent.isConnected || !this._anchor.isConnected;\n    }\n    sync() {\n        const elementBox = this._element.getBoundingClientRect();\n        const elementMargin = {\n            top: e.styleNumber(this._element, 'margin-top'),\n            right: e.styleNumber(this._element, 'margin-right'),\n            bottom: e.styleNumber(this._element, 'margin-bottom'),\n            left: e.styleNumber(this._element, 'margin-left')\n        };\n        const anchorBox = this._anchor.getBoundingClientRect();\n        let left;\n        let top;\n        switch (this._alignAxis) {\n            case 'horizontal': {\n                switch (this._position) {\n                    case 'top':\n                        top = anchorBox.top - elementMargin.bottom - elementBox.height;\n                        break;\n                    case 'bottom':\n                        top = anchorBox.top + anchorBox.height + elementMargin.top;\n                        break;\n                }\n                switch (this._align) {\n                    case 'left':\n                        left = anchorBox.left + elementMargin.left;\n                        break;\n                    case 'center':\n                        left = anchorBox.left + (0.5 * (anchorBox.width - elementBox.width));\n                        break;\n                    case 'right':\n                        left = (anchorBox.left + anchorBox.width) - elementBox.width - elementMargin.right;\n                        break;\n                }\n                break;\n            }\n            case 'vertical': {\n                switch (this._align) {\n                    case 'top':\n                        top = anchorBox.top + elementMargin.top;\n                        break;\n                    case 'center':\n                        top = anchorBox.top + (0.5 * (anchorBox.height - elementBox.height));\n                        break;\n                    case 'bottom':\n                        top = (anchorBox.top + anchorBox.height) - elementBox.height - elementMargin.bottom;\n                        break;\n                }\n                switch (this._position) {\n                    case 'left':\n                        left = anchorBox.left - elementMargin.right - elementBox.width;\n                        break;\n                    case 'right':\n                        left = anchorBox.left + anchorBox.width + elementMargin.left;\n                        break;\n                }\n                break;\n            }\n        }\n        if (u.isDefined(left) || u.isDefined(top)) {\n            this._moveTo(left, top);\n        }\n        else {\n            up.fail('Invalid tether constraints: %o', this._describeConstraints());\n        }\n    }\n    _describeConstraints() {\n        return { position: this._position, align: this._align };\n    }\n    _moveTo(targetLeft, targetTop) {\n        const elementBox = this._element.getBoundingClientRect();\n        this._setOffset((targetLeft - elementBox.left) + this.offsetLeft, (targetTop - elementBox.top) + this.offsetTop);\n    }\n    _setOffset(left, top) {\n        this.offsetLeft = left;\n        this.offsetTop = top;\n        e.setStyle(this._element, { left, top }, 'px');\n    }\n};\n\n\n/***/ }),\n/* 82 */\n/***/ (() => {\n\nconst u = up.util;\nup.URLPattern = class URLPattern {\n    constructor(fullPattern) {\n        this._groups = [];\n        const positiveList = [];\n        const negativeList = [];\n        for (let pattern of u.getSimpleTokens(fullPattern)) {\n            if (pattern[0] === '-') {\n                negativeList.push(pattern.substring(1));\n            }\n            else {\n                positiveList.push(pattern);\n            }\n        }\n        this._positiveRegexp = this._buildRegexp(positiveList, true);\n        this._negativeRegexp = this._buildRegexp(negativeList, false);\n    }\n    _buildRegexp(list, capture) {\n        if (!list.length) {\n            return;\n        }\n        list = u.flatMap(list, u.matchableURLPatternAtom);\n        list = list.map(u.escapeRegExp);\n        let reCode = list.join('|');\n        reCode = reCode.replace(/\\\\\\*/g, '.*?');\n        reCode = reCode.replace(/(:|\\\\\\$)([a-z][\\w-]*)/ig, (match, type, name) => {\n            if (type === '\\\\$') {\n                if (capture) {\n                    this._groups.push({ name, cast: Number });\n                }\n                return '(\\\\d+)';\n            }\n            else {\n                if (capture) {\n                    this._groups.push({ name, cast: String });\n                }\n                return '([^/?#]+)';\n            }\n        });\n        return new RegExp('^(?:' + reCode + ')$');\n    }\n    test(url, doNormalize = true) {\n        if (doNormalize) {\n            url = u.matchableURL(url);\n        }\n        return this._positiveRegexp.test(url) && !this._isExcluded(url);\n    }\n    recognize(url, doNormalize = true) {\n        if (doNormalize) {\n            url = u.matchableURL(url);\n        }\n        let match = this._positiveRegexp.exec(url);\n        if (match && !this._isExcluded(url)) {\n            const resolution = {};\n            this._groups.forEach((group, groupIndex) => {\n                let value = match[groupIndex + 1];\n                if (value) {\n                    return resolution[group.name] = group.cast(value);\n                }\n            });\n            return resolution;\n        }\n    }\n    _isExcluded(url) {\n        return this._negativeRegexp?.test(url);\n    }\n};\n\n\n/***/ }),\n/* 83 */\n/***/ (() => {\n\nup.framework = (function () {\n    let readyState = 'evaling';\n    function emitReset() {\n        up.emit('up:framework:reset', { log: false });\n    }\n    function boot({ mode = 'manual' } = {}) {\n        if (readyState !== 'configuring') {\n            console.error('Unpoly has already booted');\n            return;\n        }\n        let issue = supportIssue();\n        if (!issue) {\n            readyState = 'booting';\n            up.emit('up:framework:boot', { mode, log: false });\n            readyState = 'booted';\n            up.emit('up:framework:booted', { mode, log: false });\n        }\n        else {\n            console.error(\"Unpoly cannot boot: %s\", issue);\n        }\n    }\n    function mustManualBoot() {\n        if (document.currentScript?.async) {\n            return true;\n        }\n        if (document.querySelector('[up-boot=manual]:is(html, script)')) {\n            return true;\n        }\n        if (document.readyState === 'complete') {\n            return true;\n        }\n    }\n    function onEvaled() {\n        up.emit('up:framework:evaled', { log: false });\n        if (mustManualBoot()) {\n            console.debug('Call up.boot() after you have configured Unpoly');\n        }\n        else {\n            document.addEventListener('DOMContentLoaded', () => boot({ mode: 'auto' }));\n        }\n        readyState = 'configuring';\n    }\n    function startExtension() {\n        if (readyState !== 'configuring') {\n            throw new Error('Unpoly extensions must be loaded before booting');\n        }\n        readyState = 'evaling';\n    }\n    function stopExtension() {\n        readyState = 'configuring';\n    }\n    function isSupported() {\n        return !supportIssue();\n    }\n    function supportIssue() {\n        for (let feature of ['Promise', 'DOMParser', 'FormData', 'reportError']) {\n            if (!window[feature]) {\n                return `Browser doesn't support the ${feature} API`;\n            }\n        }\n        if (document.compatMode === 'BackCompat') {\n            return 'Browser is in quirks mode (missing DOCTYPE?)';\n        }\n        for (let selector of [':is(*)', ':has(*)']) {\n            if (!CSS.supports(`selector(${selector})`)) {\n                return `Browser doesn't support the ${selector} selector`;\n            }\n        }\n    }\n    return {\n        onEvaled,\n        boot,\n        startExtension,\n        stopExtension,\n        reset: emitReset,\n        get evaling() { return readyState === 'evaling'; },\n        get booted() { return readyState === 'booted'; },\n        get beforeBoot() { return readyState !== 'booting' && readyState !== 'booted'; },\n        isSupported,\n    };\n})();\nup.boot = up.framework.boot;\n\n\n/***/ }),\n/* 84 */\n/***/ (() => {\n\nup.event = (function () {\n    const u = up.util;\n    const e = up.element;\n    function reset() {\n        for (let globalElement of [window, document, e.root, document.body]) {\n            for (let listener of up.EventListener.allNonDefault(globalElement)) {\n                listener.unbind();\n            }\n        }\n    }\n    function on(...args) {\n        return buildListenerGroup(args).bind();\n    }\n    function onAncestor(fragment, eventType, callback) {\n        let guard = (event) => event.target.contains(fragment);\n        let unsubscribe = up.on(eventType, { guard }, callback);\n        up.destructor(fragment, unsubscribe);\n        return unsubscribe;\n    }\n    function off(...args) {\n        return buildListenerGroup(args).unbind();\n    }\n    function buildListenerGroup(args, options) {\n        return up.EventListenerGroup.fromBindArgs(args, options);\n    }\n    function buildEmitter(args) {\n        return up.EventEmitter.fromEmitArgs(args);\n    }\n    function emit(...args) {\n        return buildEmitter(args).emit();\n    }\n    function build(...args) {\n        const props = u.extractOptions(args);\n        const type = args[0] || props.type || up.fail('Missing event type');\n        const event = new Event(type, { bubbles: true, cancelable: true });\n        Object.assign(event, u.omit(props, ['type', 'target']));\n        return event;\n    }\n    function assertEmitted(...args) {\n        return buildEmitter(args).assertEmitted();\n    }\n    function onEscape(listener) {\n        return on('keydown', function (event) {\n            if (event.key === 'Escape') {\n                return listener(event);\n            }\n        });\n    }\n    function halt(event, options = {}) {\n        if (options.log)\n            up.log.putsEvent(event);\n        event.stopImmediatePropagation();\n        event.preventDefault();\n    }\n    const keyModifiers = ['metaKey', 'shiftKey', 'ctrlKey', 'altKey'];\n    function isModified(event) {\n        return (event.button > 0) || u.some(keyModifiers, (modifier) => event[modifier]);\n    }\n    function isSyntheticClick(event) {\n        return u.isMissing(event.clientX);\n    }\n    function fork(originalEvent, newType, copyKeys = []) {\n        const newEvent = build(newType, u.pick(originalEvent, copyKeys));\n        newEvent.originalEvent = originalEvent;\n        ['stopPropagation', 'stopImmediatePropagation', 'preventDefault'].forEach(function (key) {\n            const originalMethod = newEvent[key];\n            return newEvent[key] = function () {\n                originalEvent[key]();\n                return originalMethod.call(newEvent);\n            };\n        });\n        if (originalEvent.defaultPrevented) {\n            newEvent.preventDefault();\n        }\n        return newEvent;\n    }\n    function executeEmitAttr(event, element) {\n        if (isModified(event)) {\n            return;\n        }\n        const eventType = e.attr(element, 'up-emit');\n        const eventProps = e.jsonAttr(element, 'up-emit-props');\n        const forkedEvent = fork(event, eventType);\n        Object.assign(forkedEvent, eventProps);\n        up.emit(element, forkedEvent);\n    }\n    on('up:click', '[up-emit]', executeEmitAttr);\n    let inputDevices = ['unknown'];\n    function getInputDevice() {\n        return u.last(inputDevices);\n    }\n    function observeInputDevice(newModality) {\n        inputDevices.push(newModality);\n        setTimeout(() => inputDevices.pop());\n    }\n    on('keydown keyup', { capture: true }, () => observeInputDevice('key'));\n    on('pointerdown pointerup', { capture: true }, () => observeInputDevice('pointer'));\n    on('up:framework:reset', reset);\n    return {\n        on,\n        onAncestor,\n        off,\n        build,\n        emit,\n        assertEmitted,\n        onEscape,\n        halt,\n        isModified,\n        isSyntheticClick,\n        fork,\n        keyModifiers,\n        get inputDevice() { return getInputDevice(); }\n    };\n})();\nup.on = up.event.on;\nup.off = up.event.off;\nup.emit = up.event.emit;\n\n\n/***/ }),\n/* 85 */\n/***/ (() => {\n\nup.protocol = (function () {\n    const u = up.util;\n    const e = up.element;\n    const headerize = function (camel) {\n        const header = camel.replace(/(^.|[A-Z])/g, (char) => '-' + char.toUpperCase());\n        return 'X-Up' + header;\n    };\n    const extractHeader = function (xhr, shortHeader, parseFn = u.identity) {\n        let value = xhr.getResponseHeader(headerize(shortHeader));\n        if (value) {\n            return parseFn(value);\n        }\n    };\n    function targetFromXHR(xhr) {\n        return extractHeader(xhr, 'target');\n    }\n    function parseModifyCacheValue(value) {\n        if (value === 'false') {\n            return false;\n        }\n        else {\n            return value;\n        }\n    }\n    function evictCacheFromXHR(xhr) {\n        return extractHeader(xhr, 'evictCache', parseModifyCacheValue);\n    }\n    function expireCacheFromXHR(xhr) {\n        return extractHeader(xhr, 'expireCache') || up.migrate.clearCacheFromXHR?.(xhr);\n    }\n    function contextFromXHR(xhr) {\n        return extractHeader(xhr, 'context', u.parseRelaxedJSON);\n    }\n    function methodFromXHR(xhr) {\n        return extractHeader(xhr, 'method', u.normalizeMethod);\n    }\n    function titleFromXHR(xhr) {\n        return up.migrate.titleFromXHR?.(xhr) ?? extractHeader(xhr, 'title', u.parseRelaxedJSON);\n    }\n    function eventPlansFromXHR(xhr) {\n        return extractHeader(xhr, 'events', u.parseRelaxedJSON);\n    }\n    function openLayerFromXHR(xhr) {\n        return extractHeader(xhr, 'openLayer', u.parseRelaxedJSON);\n    }\n    function acceptLayerFromXHR(xhr) {\n        return extractHeader(xhr, 'acceptLayer', u.parseRelaxedJSON);\n    }\n    function dismissLayerFromXHR(xhr) {\n        return extractHeader(xhr, 'dismissLayer', u.parseRelaxedJSON);\n    }\n    const initialRequestMethod = u.memoize(function () {\n        return u.normalizeMethod(up.browser.popCookie('_up_method'));\n    });\n    function locationFromXHR(xhr) {\n        let location = extractHeader(xhr, 'location') || xhr.responseURL;\n        if (location) {\n            return u.normalizeURL(location);\n        }\n    }\n    const config = new up.Config(() => ({\n        methodParam: '_method',\n        csrfParam() { return e.metaContent('csrf-param'); },\n        csrfToken() { return e.metaContent('csrf-token'); },\n        cspNonce() { return e.metaContent('csp-nonce'); },\n        csrfHeader: 'X-CSRF-Token',\n        maxHeaderSize: 2048,\n    }));\n    function csrfHeader() {\n        return u.evalOption(config.csrfHeader);\n    }\n    function csrfParam() {\n        return u.evalOption(config.csrfParam);\n    }\n    function csrfToken() {\n        return u.evalOption(config.csrfToken);\n    }\n    function cspNonce() {\n        return u.evalOption(config.cspNonce);\n    }\n    const NONCE_PATTERN = /'nonce-([^']+)'/g;\n    function findNonces(cspPart) {\n        let matches = cspPart.matchAll(NONCE_PATTERN);\n        return u.map(matches, '1');\n    }\n    function cspInfoFromHeader(cspHeader) {\n        let results = {};\n        if (cspHeader) {\n            let declarations = cspHeader.split(/\\s*;\\s*/);\n            for (let declaration of declarations) {\n                let directive = declaration.match(/^(script|default)-src\\s/)?.[1];\n                if (directive) {\n                    results[directive] = {\n                        declaration: declaration,\n                        nonces: findNonces(declaration)\n                    };\n                }\n            }\n        }\n        return results.script || results.default || {};\n    }\n    function wrapMethod(method, params) {\n        params.add(config.methodParam, method);\n        return 'POST';\n    }\n    return {\n        config,\n        locationFromXHR,\n        titleFromXHR,\n        targetFromXHR,\n        methodFromXHR,\n        openLayerFromXHR,\n        acceptLayerFromXHR,\n        contextFromXHR,\n        dismissLayerFromXHR,\n        eventPlansFromXHR,\n        expireCacheFromXHR,\n        evictCacheFromXHR,\n        csrfHeader,\n        csrfParam,\n        csrfToken,\n        cspNonce,\n        initialRequestMethod,\n        headerize,\n        wrapMethod,\n        cspInfoFromHeader,\n    };\n})();\n\n\n/***/ }),\n/* 86 */\n/***/ (() => {\n\nup.log = (function () {\n    const u = up.util;\n    const config = new up.LogConfig();\n    function printToStandard(...args) {\n        if (config.enabled) {\n            printToStream('log', ...args);\n        }\n    }\n    const printToWarn = (...args) => printToStream('warn', ...args);\n    const printToError = (...args) => printToStream('error', ...args);\n    function printToStream(stream, prefix, message, ...args) {\n        printToStreamStyled(stream, prefix, '', message, ...args);\n    }\n    function printToStreamStyled(stream, prefix, customStyles, message, ...args) {\n        if (message) {\n            if (config.format) {\n                console[stream](`%c${prefix}%c ${message}`, 'color: #666666; padding: 1px 3px; border: 1px solid #bbbbbb; border-radius: 2px; font-size: 90%; display: inline-block;' + customStyles, '', ...args);\n            }\n            else {\n                console[stream](`[${prefix}] ${u.sprintf(message, ...args)}`);\n            }\n        }\n    }\n    let lastPrintedUserEvent;\n    function printUserEvent(event) {\n        if (config.enabled && lastPrintedUserEvent !== event) {\n            lastPrintedUserEvent = event;\n            let originalEvent = event.originalEvent || event;\n            let color = '#5566cc';\n            printToStreamStyled('log', originalEvent.type, `color: white; border-color: ${color}; background-color: ${color}`, 'Interaction on %o', originalEvent.target);\n        }\n    }\n    function printBanner() {\n        if (!config.banner) {\n            return;\n        }\n        const logo = \" __ _____  ___  ___  / /_ __\\n\" +\n            `/ // / _ \\\\/ _ \\\\/ _ \\\\/ / // /  ${up.version}\\n` +\n            \"\\\\___/_//_/ .__/\\\\___/_/\\\\_. / \\n\" +\n            \"        / /            / /\\n\\n\";\n        let text = \"\";\n        if (!up.migrate.loaded) {\n            text += \"Load unpoly-migrate.js to polyfill deprecated APIs.\\n\\n\";\n        }\n        if (config.enabled) {\n            text += \"Call `up.log.disable()` to disable logging for this session.\";\n        }\n        else {\n            text += \"Call `up.log.enable()` to enable logging for this session.\";\n        }\n        const color = 'color: #777777';\n        if (config.format) {\n            console.log('%c' + logo + '%c' + text, 'font-family: monospace;' + color, color);\n        }\n        else {\n            console.log(logo + text);\n        }\n    }\n    up.on('up:framework:boot', printBanner);\n    function enable() {\n        config.enabled = true;\n    }\n    function disable() {\n        config.enabled = false;\n    }\n    return {\n        puts: printToStandard,\n        putsEvent: printUserEvent,\n        error: printToError,\n        warn: printToWarn,\n        config,\n        enable,\n        disable,\n    };\n})();\nup.puts = up.log.puts;\nup.warn = up.log.warn;\n\n\n/***/ }),\n/* 87 */\n/***/ (() => {\n\nup.script = (function () {\n    const u = up.util;\n    const e = up.element;\n    const config = new up.Config(() => ({\n        assetSelectors: [\n            'link[rel=stylesheet]',\n            'script[src]',\n            '[up-asset]'\n        ],\n        noAssetSelectors: [\n            '[up-asset=false]',\n        ],\n        nonceableAttributes: [\n            'up-watch',\n            'up-on-keep',\n            'up-on-hungry',\n            'up-on-opened',\n            'up-on-accepted',\n            'up-on-dismissed',\n            'up-on-loaded',\n            'up-on-rendered',\n            'up-on-finished',\n            'up-on-error',\n            'up-on-offline',\n        ],\n        scriptSelectors: [\n            'script:not([type])',\n            'script[type=\"text/javascript\"]',\n            'script[type=\"module\"]',\n            'script[type=\"importmap\"]',\n        ],\n        noScriptSelectors: [\n            'script[type=\"application/ld+json\"]'\n        ]\n    }));\n    const SYSTEM_MACRO_PRIORITIES = {\n        '[up-back]': -100,\n        '[up-clickable]': -200,\n        '[up-drawer]': -200,\n        '[up-modal]': -200,\n        '[up-cover]': -200,\n        '[up-popup]': -200,\n        '[up-tooltip]': -200,\n        '[up-dash]': -200,\n        '[up-flashes]': -200,\n        '[up-expand]': -300,\n        '[data-method]': -400,\n        '[data-confirm]': -400,\n        '[up-keep]': 9999999999,\n    };\n    let registeredCompilers = [];\n    let registeredMacros = [];\n    function registerCompiler(...args) {\n        registerProcessor(args);\n    }\n    function registerMacro(...args) {\n        registerProcessor(args, { macro: true });\n    }\n    function registerAttrCompiler(...args) {\n        let [attr, options, valueCallback] = parseProcessorArgs(args);\n        let selector = `[${attr}]`;\n        let { defaultValue } = options;\n        let callback = (element) => {\n            let value = e.booleanOrStringAttr(element, attr);\n            if (value === false)\n                return;\n            if (u.isDefined(defaultValue) && value === true)\n                value = defaultValue;\n            return valueCallback(element, value);\n        };\n        registerProcessor([selector, options, callback]);\n    }\n    function detectSystemMacroPriority(macroSelector) {\n        macroSelector = u.evalOption(macroSelector);\n        for (let substr in SYSTEM_MACRO_PRIORITIES) {\n            if (macroSelector.indexOf(substr) >= 0) {\n                return SYSTEM_MACRO_PRIORITIES[substr];\n            }\n        }\n        up.fail('Unregistered priority for system macro %o', macroSelector);\n    }\n    function registerProcessor(args, overrides = {}) {\n        let processor = buildProcessor(args, overrides);\n        if (processor.macro) {\n            if (up.framework.evaling) {\n                processor.priority ||= detectSystemMacroPriority(processor.selector);\n            }\n            insertProcessor(registeredMacros, processor);\n        }\n        else {\n            insertProcessor(registeredCompilers, processor);\n        }\n    }\n    const parseProcessorArgs = function (args) {\n        return u.args(args, 'val', 'options', 'callback');\n    };\n    function buildProcessor(args, overrides) {\n        let [selector, options, callback] = parseProcessorArgs(args);\n        options = u.options(options, {\n            selector,\n            isDefault: up.framework.evaling,\n            priority: 0,\n            batch: false,\n            rerun: false,\n        });\n        return Object.assign(callback, options, overrides);\n    }\n    function insertProcessor(queue, newCompiler) {\n        let existingCompiler;\n        let index = 0;\n        while ((existingCompiler = queue[index]) && (existingCompiler.priority >= newCompiler.priority)) {\n            index += 1;\n        }\n        queue.splice(index, 0, newCompiler);\n        if (up.framework.booted) {\n            if (newCompiler.priority === 0) {\n                for (let layer of up.layer.stack) {\n                    compile(layer.element, { layer, compilers: [newCompiler] });\n                }\n            }\n            else {\n                up.puts('up.compiler()', 'Compiler %s was registered after booting Unpoly. Compiler will run for future fragments only.', newCompiler.selector);\n            }\n        }\n        return newCompiler;\n    }\n    function compile(fragment, options) {\n        up.emit(fragment, 'up:fragment:compile', { log: false });\n        let compilers = options.compilers || registeredMacros.concat(registeredCompilers);\n        const pass = new up.CompilerPass(fragment, compilers, options);\n        return pass.run();\n    }\n    function registerDestructor(element, value) {\n        let fns = u.scanFunctions(value);\n        if (!fns.length)\n            return;\n        if (element.isConnected) {\n            let registry = (element.upDestructors ||= buildDestructorRegistry(element));\n            registry.guard(fns);\n        }\n        else {\n            up.puts('up.destructor()', 'Immediately calling destructor for detached element (%o)', element);\n            for (let fn of fns)\n                up.error.guard(fn, element);\n        }\n    }\n    function buildDestructorRegistry(element) {\n        let registry = u.cleaner();\n        registry(e.addClassTemp(element, 'up-can-clean'));\n        return registry;\n    }\n    async function hello(element, options = {}) {\n        element = up.fragment.get(element, options);\n        up.puts('up.hello()', \"Compiling fragment %o\", element);\n        await up.fragment.mutate(async () => {\n            let compilePromise = compile(element, options);\n            up.fragment.emitInserted(element);\n            await compilePromise;\n        });\n        return element;\n    }\n    function clean(fragment, options = {}) {\n        new up.DestructorPass(fragment, options).run();\n    }\n    function readData(element) {\n        element = up.fragment.get(element);\n        return element.upData ||= buildData(element);\n    }\n    function buildData(element) {\n        let parsedJSON = e.jsonAttr(element, 'up-data') ?? {};\n        if (!u.isOptions(parsedJSON)) {\n            return parsedJSON;\n        }\n        return {\n            ...element.upTemplateData,\n            ...element.dataset,\n            ...parsedJSON,\n            ...element.upCompileData,\n        };\n    }\n    function findAssets(head = document.head) {\n        return head.querySelectorAll(config.selector('assetSelectors'));\n    }\n    function assertAssetsOK(newAssets, renderOptions) {\n        let oldAssets = findAssets();\n        let oldHTML = u.map(oldAssets, 'outerHTML').join();\n        let newHTML = u.map(newAssets, 'outerHTML').join();\n        if (oldHTML !== newHTML) {\n            up.event.assertEmitted('up:assets:changed', { oldAssets, newAssets, renderOptions });\n        }\n    }\n    function disableScriptsInSubtree(root, guard = () => true) {\n        for (let script of findScripts(root)) {\n            if (guard(script)) {\n                script.type = 'up-disabled-script';\n            }\n        }\n    }\n    function findScripts(root, selectorSuffix = '') {\n        let selector = config.selector('scriptSelectors') + selectorSuffix;\n        return e.subtree(root, selector);\n    }\n    function isScript(value) {\n        return config.matches(value, 'scriptSelectors');\n    }\n    function adoptNoncesInSubtree(root, responseNonces) {\n        let pageNonce = up.protocol.cspNonce();\n        if (!responseNonces?.length || !pageNonce)\n            return;\n        for (let script of findScripts(root, '[nonce]')) {\n            if (responseNonces.includes(script.nonce)) {\n                script.nonce = pageNonce;\n            }\n        }\n        for (let attribute of config.nonceableAttributes) {\n            let matches = e.subtree(root, `[${attribute}^=\"nonce-\"]`);\n            for (let match of matches) {\n                let attributeValue = match.getAttribute(attribute);\n                let callback = up.NonceableCallback.fromString(attributeValue);\n                if (responseNonces.includes(callback.nonce)) {\n                    callback.nonce = pageNonce;\n                    match.setAttribute(attribute, callback.toString());\n                }\n            }\n        }\n    }\n    function reset() {\n        registeredCompilers = u.filter(registeredCompilers, 'isDefault');\n        registeredMacros = u.filter(registeredMacros, 'isDefault');\n    }\n    up.on('up:framework:reset', reset);\n    return {\n        config,\n        compiler: registerCompiler,\n        macro: registerMacro,\n        attrCompiler: registerAttrCompiler,\n        destructor: registerDestructor,\n        hello,\n        clean,\n        data: readData,\n        findAssets,\n        assertAssetsOK,\n        disableSubtree: disableScriptsInSubtree,\n        adoptNoncesInSubtree,\n        isScript,\n    };\n})();\nup.compiler = up.script.compiler;\nup.destructor = up.script.destructor;\nup.macro = up.script.macro;\nup.data = up.script.data;\nup.hello = up.script.hello;\nup.attribute = up.script.attrCompiler;\n\n\n/***/ }),\n/* 88 */\n/***/ (() => {\n\nup.history = (function () {\n    const u = up.util;\n    const e = up.element;\n    const config = new up.Config(() => ({\n        enabled: true,\n        updateMetaTags: true,\n        restoreTargets: ['body'],\n        metaTagSelectors: [\n            'meta',\n            'link[rel=alternate]',\n            'link[rel=canonical]',\n            'link[rel=icon]',\n            '[up-meta]',\n            'script[type=\"application/ld+json\"]',\n        ],\n        noMetaTagSelectors: [\n            'meta[http-equiv]',\n            '[up-meta=false]',\n            'meta[name=csp-nonce]',\n        ],\n    }));\n    let previousLocation;\n    let nextPreviousLocation;\n    let nextTrackOptions;\n    let adoptedBases = new up.FIFOCache({ capacity: 100, normalizeKey: getBase });\n    function reset() {\n        previousLocation = undefined;\n        nextPreviousLocation = undefined;\n        nextTrackOptions = undefined;\n        adoptedBases.clear();\n        trackCurrentLocation({ reason: null, alreadyHandled: true });\n        adoptBase();\n    }\n    function currentLocation() {\n        return u.normalizeURL(location.href);\n    }\n    function withTrackOptions(trackOptions, fn) {\n        try {\n            nextTrackOptions = trackOptions;\n            fn();\n        }\n        finally {\n            nextTrackOptions = undefined;\n        }\n    }\n    function trackCurrentLocation(trackOptions) {\n        let { reason, alreadyHandled, pauseTracking } = nextTrackOptions || trackOptions;\n        if (pauseTracking)\n            return;\n        let location = currentLocation();\n        if (isAdoptedState()) {\n            adoptBase(location);\n        }\n        else if (isAdoptedBase(location)) {\n            adoptState();\n        }\n        if (nextPreviousLocation !== location) {\n            previousLocation = nextPreviousLocation;\n            nextPreviousLocation = location;\n            if (reason === 'detect') {\n                reason = (getBase(location) === getBase(previousLocation)) ? 'hash' : 'pop';\n            }\n            let willHandle = !alreadyHandled && isAdoptedBase(location);\n            let locationChangedEvent = up.event.build('up:location:changed', {\n                reason,\n                location,\n                previousLocation,\n                alreadyHandled,\n                willHandle,\n                log: `New location is ${location}`\n            });\n            up.migrate.prepareLocationChangedEvent?.(locationChangedEvent);\n            if (reason) {\n                up.emit(locationChangedEvent);\n                reactToChange(locationChangedEvent);\n            }\n        }\n    }\n    function splitLocation(location) {\n        return location?.split(/(?=#)/) || [];\n    }\n    function getBase(location) {\n        return splitLocation(location)[0];\n    }\n    function isLocation(url, options) {\n        return u.matchURLs(url, location.href, { hash: true, ...options });\n    }\n    function replace(location, trackOptions) {\n        placeAdoptedHistoryEntry('replaceState', location, trackOptions);\n    }\n    function push(location, trackOptions) {\n        if (isLocation(location))\n            return;\n        placeAdoptedHistoryEntry('pushState', location, trackOptions);\n    }\n    function placeAdoptedHistoryEntry(method, location, trackOptions) {\n        adoptBase(location);\n        if (config.enabled) {\n            withTrackOptions(trackOptions, function () {\n                history[method](null, { up: true }, location);\n            });\n        }\n    }\n    function isAdoptedBase(location) {\n        return !!adoptedBases.get(location);\n    }\n    function adoptBase(location = currentLocation()) {\n        location = u.normalizeURL(location);\n        adoptedBases.set(location, true);\n    }\n    function isAdoptedState() {\n        return history.state?.up;\n    }\n    function adoptState() {\n        let { state } = history;\n        if (isAdoptedState())\n            return;\n        if (u.isBlank(state) || u.isObject(state)) {\n            withTrackOptions({ pauseTracking: true }, function () {\n                history.replaceState({ ...state, up: true }, '');\n            });\n        }\n    }\n    function restoreLocation(location) {\n        up.error.muteUncriticalRejection(up.render({\n            guardEvent: up.event.build('up:location:restore', { location, log: `Restoring location ${location}` }),\n            url: location,\n            target: config.restoreTargets,\n            fail: false,\n            history: true,\n            location,\n            peel: true,\n            layer: 'root',\n            cache: 'auto',\n            revalidate: 'auto',\n            saveScroll: false,\n            scroll: ['restore', 'auto'],\n            saveFocus: false,\n            focus: ['restore', 'auto'],\n        }));\n    }\n    function reactToChange(event) {\n        if (event.alreadyHandled) {\n            return;\n        }\n        if (!event.willHandle) {\n            up.puts('up.history', 'Ignoring history entry owned by foreign script');\n            return;\n        }\n        if (event.reason === 'pop') {\n            up.viewport.saveFocus({ location: event.previousLocation });\n            up.viewport.saveScroll({ location: event.previousLocation });\n            restoreLocation(event.location);\n        }\n        else if (event.reason === 'hash') {\n            up.viewport.revealHash(location.hash, { strong: true });\n        }\n    }\n    function findMetaTags(head = document.head) {\n        return head.querySelectorAll(config.selector('metaTagSelectors'));\n    }\n    function updateMetaTags(newMetaTags) {\n        let oldMetaTags = findMetaTags();\n        for (let oldMetaTag of oldMetaTags) {\n            oldMetaTag.remove();\n        }\n        for (let newMetaTag of newMetaTags) {\n            document.head.append(newMetaTag);\n        }\n    }\n    function getLang(doc = document) {\n        let { documentElement } = doc;\n        if (documentElement.matches('html')) {\n            return doc.documentElement.lang;\n        }\n    }\n    function updateLang(newLang) {\n        e.setAttrPresence(e.root, 'lang', newLang, !!newLang);\n    }\n    function patchHistoryAPI() {\n        const originalPushState = history.pushState;\n        history.pushState = function (...args) {\n            originalPushState.apply(this, args);\n            trackCurrentLocation({ reason: 'push', alreadyHandled: true });\n        };\n        const originalReplaceState = history.replaceState;\n        history.replaceState = function (...args) {\n            originalReplaceState.apply(this, args);\n            trackCurrentLocation({ reason: 'replace', alreadyHandled: true });\n        };\n    }\n    function adoptInitialHistoryEntry() {\n        if (up.protocol.initialRequestMethod() === 'GET') {\n            adoptState();\n            adoptBase();\n        }\n    }\n    up.on('up:framework:boot', function ({ mode }) {\n        trackCurrentLocation({ reason: null, alreadyHandled: true });\n        patchHistoryAPI();\n        adoptInitialHistoryEntry();\n        if (mode === 'auto') {\n            up.viewport.revealHash(location.hash, { strong: true });\n        }\n    });\n    up.on(window, 'hashchange, popstate', () => {\n        trackCurrentLocation({ reason: 'detect', alreadyHandled: false });\n    });\n    function onJumpLinkClicked(event, link) {\n        if (event.defaultPrevented)\n            return;\n        if (up.event.isModified(event))\n            return;\n        let [currentBase, currentHash] = splitLocation(up.layer.current.location);\n        let [linkBase, linkHash] = splitLocation(u.normalizeURL(link));\n        let verbatimHREF = link.getAttribute('href');\n        let isJumpLink = (currentBase === linkBase) || verbatimHREF.startsWith('#');\n        if (!isJumpLink)\n            return;\n        let behavior = link.getAttribute('up-scroll-behavior') ?? 'auto';\n        let layer = up.layer.get(link);\n        let revealFn = up.viewport.revealHashFn(linkHash, { layer, behavior });\n        if (revealFn) {\n            up.event.halt(event);\n            up.log.putsEvent(event);\n            if (linkHash !== currentHash && layer.showsLiveHistory()) {\n                let newHREF = currentBase + linkHash;\n                push(newHREF, { reason: 'hash', alreadyHandled: true });\n            }\n            revealFn();\n        }\n        else {\n        }\n    }\n    up.on('up:click', 'a[href*=\"#\"]', onJumpLinkClicked);\n    up.macro('[up-back]', function (link) {\n        if (previousLocation) {\n            e.setMissingAttrs(link, {\n                'up-href': previousLocation,\n                'up-scroll': 'restore'\n            });\n            link.removeAttribute('up-back');\n            up.link.makeFollowable(link);\n        }\n    });\n    up.on('up:framework:reset', reset);\n    return {\n        config,\n        push,\n        replace,\n        get location() { return currentLocation(); },\n        get previousLocation() { return previousLocation; },\n        isLocation,\n        findMetaTags,\n        updateMetaTags,\n        getLang,\n        updateLang,\n    };\n})();\n\n\n/***/ }),\n/* 89 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(90);\nconst u = up.util;\nconst e = up.element;\nup.fragment = (function () {\n    function upTagName(element) {\n        let tagName = e.tagName(element);\n        if (tagName.startsWith('up-')) {\n            return tagName;\n        }\n    }\n    const STRONG_TARGET_DERIVERS = [\n        '[up-id]',\n        '[id]',\n        'html',\n        'head',\n        'body',\n    ];\n    const config = new up.Config(() => ({\n        badTargetClasses: [/^up-/],\n        strongTargetDerivers: STRONG_TARGET_DERIVERS,\n        targetDerivers: [\n            ...STRONG_TARGET_DERIVERS,\n            'main',\n            '[up-main]',\n            upTagName,\n            'link[rel][type]',\n            'link[rel=preload][href]',\n            'link[rel=preconnect][href]',\n            'link[rel=prefetch][href]',\n            'link[rel]',\n            'meta[property]',\n            '*[name]',\n            'form[action]',\n            'a[href]',\n            '[class]',\n            '[up-flashes]',\n            'form',\n        ],\n        verifyDerivedTarget: true,\n        renderOptions: {\n            hungry: true,\n            keep: true,\n            saveScroll: true,\n            saveFocus: true,\n            focus: 'keep',\n            focusVisible: 'auto',\n            abort: 'target',\n            failOptions: true,\n            feedback: true,\n        },\n        navigateOptions: {\n            cache: 'auto',\n            revalidate: 'auto',\n            fallback: true,\n            focus: 'auto',\n            scroll: 'auto',\n            history: 'auto',\n            peel: true,\n        },\n        match: 'region',\n        runScripts: false,\n        autoHistoryTargets: [':main'],\n        autoFocus: ['hash', 'autofocus', 'main-if-main', 'keep', 'target-if-lost'],\n        autoScroll: ['hash', 'layer-if-main'],\n        autoRevalidate: (response) => response.expired,\n        skipResponse: defaultSkipResponse,\n        renderableResponse: (response) => response.isHTML(),\n        normalizeKeepHTML: defaultNormalizeKeepHTML\n    }));\n    u.delegate(config, ['mainTargets'], () => up.layer.config.any);\n    function defaultSkipResponse({ response, expiredResponse }) {\n        return !response.text || response.text === expiredResponse?.text;\n    }\n    function sourceOf(element, options = {}) {\n        element = getSmart(element, options);\n        return e.closestAttr(element, 'up-source');\n    }\n    function normalizeSource(source) {\n        return u.normalizeURL(source, { hash: false });\n    }\n    function timeOf(element) {\n        let value = e.closestAttr(element, 'up-time');\n        if (value && value !== 'false') {\n            if (/^\\d+$/.test(value)) {\n                value = Number(value) * 1000;\n            }\n            return new Date(value);\n        }\n    }\n    function etagOf(element) {\n        let value = e.closestAttr(element, 'up-etag');\n        if (value && value !== 'false') {\n            return value;\n        }\n    }\n    const render = up.mockable((...args) => {\n        let options = parseTargetAndOptions(args);\n        return new up.RenderJob(options).execute();\n    });\n    const navigate = up.mockable((...args) => {\n        const options = parseTargetAndOptions(args);\n        return render({ ...options, navigate: true });\n    });\n    function emitFragmentKeep({ oldElement, newElement: newFragment, newData, renderOptions }) {\n        const log = ['Keeping fragment %o', oldElement];\n        const callback = e.callbackAttr(oldElement, 'up-on-keep', { exposedKeys: ['newFragment', 'newData'] });\n        return up.emit(oldElement, 'up:fragment:keep', { log, callback, newFragment, newData, renderOptions });\n    }\n    function emitFragmentKept({ oldElement, newElement: newFragment, newData }) {\n        return up.emit(oldElement, 'up:fragment:kept', { log: true, newFragment, newData });\n    }\n    function findKeepPlan(options) {\n        if (options.keep === false)\n            return;\n        const { oldElement, newElement } = options;\n        let oldElementMode = keepMode(oldElement);\n        if (!oldElementMode) {\n            return;\n        }\n        let partner;\n        let partnerSelector = up.fragment.toTarget(oldElement);\n        const lookupOpts = { layer: options.layer };\n        if (options.descendantsOnly) {\n            partner = up.fragment.get(newElement, partnerSelector, lookupOpts);\n        }\n        else {\n            partner = e.subtreeFirst(newElement, partnerSelector, lookupOpts);\n        }\n        if (!partner)\n            return;\n        let partnerMode = keepMode(partner);\n        if (partnerMode === false)\n            return;\n        let oldIdentity = keepIdentity(oldElement, oldElementMode);\n        let partnerIdentity = keepIdentity(partner, oldElementMode);\n        if (!u.isEqual(oldIdentity, partnerIdentity))\n            return;\n        const plan = {\n            oldElement,\n            newElement: partner,\n            newData: up.script.data(partner),\n            renderOptions: options,\n        };\n        if (emitFragmentKeep(plan).defaultPrevented)\n            return;\n        return plan;\n    }\n    function keepIdentity(element, mode = keepMode(element)) {\n        return element.upKeepIdentity ??= u.copy(buildKeepIdentity(element, mode));\n    }\n    function defaultNormalizeKeepHTML(html) {\n        let tagPattern = /<[^<]+>/g;\n        let attrs = ['up-etag', 'up-source', 'up-time', 'nonce', ...up.script.config.nonceableAttributes];\n        let attrPattern = new RegExp(`\\\\s+(${attrs.join('|')})=\"[^\"]*\"`, 'g');\n        let cleanTag = (match) => match.replace(attrPattern, '');\n        html = html.replace(tagPattern, cleanTag);\n        html = html.replace(/^[ \\t]+/mg, '');\n        return html;\n    }\n    function buildKeepIdentity(element, mode) {\n        if (mode === 'same-html') {\n            return config.normalizeKeepHTML(element.outerHTML);\n        }\n        else if (mode === 'same-data') {\n            return up.data(element);\n        }\n        else {\n            return true;\n        }\n    }\n    up.macro('[up-keep]', (element) => keepIdentity(element));\n    function keepMode(element) {\n        return e.booleanOrStringAttr(element, 'up-keep');\n    }\n    function emitFragmentInserted(element) {\n        if (element.upInserted)\n            return;\n        element.upInserted = true;\n        return up.emit(element, 'up:fragment:inserted', {\n            log: ['Inserted fragment %o', element],\n        });\n    }\n    function emitFragmentDestroyed(fragment, options) {\n        const log = options.log ?? ['Destroyed fragment %o', fragment];\n        const parent = options.parent || document;\n        return up.emit(parent, 'up:fragment:destroyed', { fragment, parent, log });\n    }\n    function isNotDestroying(element) {\n        return !element.closest('.up-destroying');\n    }\n    function isAlive(fragment) {\n        return fragment.isConnected && isNotDestroying(fragment);\n    }\n    function getSmart(...args) {\n        let [root, selector, options] = parseGetArgs(args);\n        if (u.isElementLike(selector)) {\n            return e.get(selector);\n        }\n        if (root) {\n            return getFirstDescendant(root, selector, options);\n        }\n        return new up.FragmentFinder({\n            selector,\n            ...u.pick(options, ['layer', 'match', 'origin', 'destroying']),\n        }).find();\n    }\n    function getFirstDescendant(...args) {\n        let [root, selectorString, options] = parseGetArgs(args);\n        let selector = new up.Selector(selectorString, root, options);\n        return selector.firstDescendant(root);\n    }\n    function parseGetArgs(args) {\n        return u.args(args, 'val', 'val', 'options');\n    }\n    function getAll(...args) {\n        let [root, selectorString, options] = parseGetArgs(args);\n        if (u.isElement(selectorString)) {\n            return [selectorString];\n        }\n        if (u.isList(selectorString)) {\n            return selectorString;\n        }\n        let selector = new up.Selector(selectorString, root, options);\n        return selector.descendants(root);\n    }\n    function getSubtree(element, selector, options = {}) {\n        return new up.Selector(selector, element, options).subtree(element);\n    }\n    function contains(root, selectorOrElement) {\n        if (u.isElement(selectorOrElement)) {\n            return e.contains(root, selectorOrElement) && up.layer.get(root).contains(selectorOrElement);\n        }\n        else {\n            return getSubtree(root, selectorOrElement).length > 0;\n        }\n    }\n    function closest(element, selector, options) {\n        return new up.Selector(selector, element, options).closest(element);\n    }\n    function destroy(...args) {\n        const options = parseTargetAndOptions(args);\n        const element = getSmart(options.target, options);\n        if (element) {\n            new up.Change.DestroyFragment({ ...options, element }).execute();\n        }\n        return up.migrate.formerlyAsync?.('up.destroy()');\n    }\n    function parseTargetAndOptions(args) {\n        const options = u.parseArgIntoOptions(args, 'target');\n        if (u.isElement(options.target)) {\n            options.origin ||= options.target;\n        }\n        return options;\n    }\n    function markFragmentAsDestroying(element) {\n        element.classList.add('up-destroying');\n        element.setAttribute('inert', '');\n    }\n    function reload(...args) {\n        const options = parseTargetAndOptions(args);\n        options.target ||= ':main';\n        const element = getSmart(options.target, options);\n        options.url ||= sourceOf(element);\n        options.headers = u.merge(options.headers, conditionalHeaders(element));\n        if (options.keepData || e.booleanAttr(element, 'up-keep-data')) {\n            options.data = up.data(element);\n        }\n        up.migrate.postprocessReloadOptions?.(options);\n        return render(options);\n    }\n    function conditionalHeaders(element) {\n        let headers = {};\n        let time = timeOf(element);\n        if (time) {\n            headers['If-Modified-Since'] = time.toUTCString();\n        }\n        let etag = etagOf(element);\n        if (etag) {\n            headers['If-None-Match'] = etag;\n        }\n        return headers;\n    }\n    function visit(url, options) {\n        return navigate({ ...options, url });\n    }\n    const KEY_PATTERN = /^(onFail|on|fail)?(.+)$/;\n    function successKey(key) {\n        let match = KEY_PATTERN.exec(key);\n        if (match) {\n            let [_, prefix, suffix] = match;\n            switch (prefix) {\n                case 'onFail':\n                    return 'on' + u.upperCaseFirst(suffix);\n                case 'fail':\n                    return u.lowerCaseFirst(suffix);\n            }\n        }\n    }\n    function failKey(key) {\n        let match = KEY_PATTERN.exec(key);\n        if (match) {\n            let [_, prefix, suffix] = match;\n            switch (prefix) {\n                case 'on':\n                    return 'onFail' + u.upperCaseFirst(suffix);\n                case undefined:\n                    return 'fail' + u.upperCaseFirst(suffix);\n            }\n        }\n    }\n    function toTarget(element, options) {\n        return u.presence(element, u.isString) || tryToTarget(element, options) || cannotTarget(element);\n    }\n    function isTargetable(element, options) {\n        return !!tryToTarget(element, options);\n    }\n    function untargetableMessage(element) {\n        return `Cannot derive good target selector from a <${e.tagName(element)}> element without identifying attributes. Try setting an [id] or configure up.fragment.config.targetDerivers.`;\n    }\n    function cannotTarget(element) {\n        throw new up.CannotTarget(untargetableMessage(element));\n    }\n    function tryToTarget(element, options = {}) {\n        let derivers = options.strong ? config.strongTargetDerivers : config.targetDerivers;\n        return u.findResult(derivers, function (deriver) {\n            let target = deriveTarget(element, deriver);\n            if (target && isGoodTarget(target, element, options)) {\n                return target;\n            }\n        });\n    }\n    function deriveTarget(element, deriver) {\n        if (u.isFunction(deriver)) {\n            return deriver(element);\n        }\n        else if (element.matches(deriver)) {\n            try {\n                return deriveTargetFromPattern(element, deriver);\n            }\n            catch (e) {\n                if (e instanceof up.CannotParse) {\n                    return deriver;\n                }\n                else {\n                    throw e;\n                }\n            }\n        }\n    }\n    function deriveTargetFromPattern(element, deriver) {\n        let { includePath, excludeRaw } = e.parseSelector(deriver);\n        if (includePath.length !== 1) {\n            throw new up.CannotParse(deriver);\n        }\n        let { tagName, id, classNames, attributes } = includePath[0];\n        let result = '';\n        if (tagName === '*') {\n            result += e.tagName(element);\n        }\n        else if (tagName) {\n            result += tagName;\n        }\n        for (let className of classNames) {\n            result += e.classSelector(className);\n        }\n        if (id) {\n            result += e.idSelector(id);\n        }\n        for (let attributeName in attributes) {\n            let attributeValue = attributes[attributeName] || element.getAttribute(attributeName);\n            if (attributeName === 'id') {\n                result += e.idSelector(attributeValue);\n            }\n            else if (attributeName === 'class') {\n                for (let goodClass of goodClassesForTarget(element)) {\n                    result += e.classSelector(goodClass);\n                }\n            }\n            else {\n                result += e.attrSelector(attributeName, attributeValue);\n            }\n        }\n        if (excludeRaw) {\n            result += excludeRaw;\n        }\n        return result;\n    }\n    function isGoodTarget(target, element, options = {}) {\n        let verify = options.verify ?? config.verifyDerivedTarget;\n        return !isAlive(element) || !verify || up.fragment.get(target, { layer: element, ...options }) === element;\n    }\n    function matchesPattern(pattern, str) {\n        if (u.isRegExp(pattern)) {\n            return pattern.test(str);\n        }\n        else {\n            return pattern === str;\n        }\n    }\n    function goodClassesForTarget(element) {\n        let isGood = (klass) => !u.some(config.badTargetClasses, (badTargetClass) => matchesPattern(badTargetClass, klass));\n        return u.filter(element.classList, isGood);\n    }\n    const MAIN_PSEUDO = /:main\\b/;\n    const LAYER_PSEUDO = /:layer\\b/;\n    const ORIGIN_PSEUDO = /:origin\\b/;\n    function containsMainPseudo(target) {\n        return MAIN_PSEUDO.test(target);\n    }\n    function expandTargets(targets, options = {}) {\n        const { layer } = options;\n        if (layer !== 'new' && !(layer instanceof up.Layer)) {\n            up.fail('Must pass an up.Layer as { layer } option, but got %o', layer);\n        }\n        targets = u.copy(u.wrapList(targets));\n        const expanded = [];\n        while (targets.length) {\n            let target = targets.shift();\n            if (target === true)\n                target = ':main';\n            if (containsMainPseudo(target)) {\n                let mode = resolveMode(options);\n                let replaced = up.layer.mainTargets(mode).map((mainTarget) => target.replace(MAIN_PSEUDO, mainTarget));\n                targets.unshift(...replaced);\n            }\n            else if (LAYER_PSEUDO.test(target)) {\n                if (layer === 'new' || layer.state === 'opening')\n                    continue;\n                let firstSwappableTarget = toTarget(layer.getFirstSwappableElement(), options);\n                targets.unshift(target.replace(LAYER_PSEUDO, firstSwappableTarget));\n            }\n            else if (u.isElementLike(target)) {\n                expanded.push(toTarget(target, options));\n            }\n            else if (u.isString(target)) {\n                expanded.push(resolveOrigin(target, options));\n            }\n        }\n        return u.uniq(expanded);\n    }\n    function resolveMode({ layer, mode }) {\n        if (layer === 'new') {\n            return mode || up.fail('Must pass a { mode } option together with { layer: \"new\" }');\n        }\n        else {\n            return layer.mode;\n        }\n    }\n    function modernResolveOrigin(target, { origin } = {}) {\n        return target.replace(ORIGIN_PSEUDO, function (match) {\n            if (origin) {\n                return toTarget(origin);\n            }\n            else {\n                up.fail('Missing { origin } element to resolve \"%s\" reference (found in %s)', match, target);\n            }\n        });\n    }\n    function resolveOrigin(target, options) {\n        if (!u.isString(target))\n            return target;\n        return (up.migrate.resolveOrigin || modernResolveOrigin)(target, options);\n    }\n    function splitTarget(target) {\n        return u.getComplexTokens(target);\n    }\n    function parseTargetSteps(target, options = {}) {\n        let defaultPlacement = options.defaultPlacement || 'swap';\n        let defaultMaybe = options.defaultMaybe ?? false;\n        let steps = [];\n        let simpleSelectors = splitTarget(target);\n        for (let selector of simpleSelectors) {\n            if (selector === ':none')\n                continue;\n            let placement = defaultPlacement;\n            let maybe = defaultMaybe;\n            selector = selector.replace(/\\b::?(before|after|content)\\b/, (_match, customPlacement) => {\n                placement = customPlacement;\n                return '';\n            });\n            selector = selector.replace(/\\b:maybe\\b/, () => {\n                maybe = true;\n                return '';\n            });\n            const step = {\n                ...options,\n                selector,\n                placement,\n                maybe,\n                originalRenderOptions: options,\n            };\n            steps.push(step);\n        }\n        return steps;\n    }\n    function hasAutoHistory(newFragments, layer) {\n        let vanillaSelector = expandTargets(config.autoHistoryTargets, { layer }).join();\n        for (let newFragment of newFragments) {\n            if (e.subtree(newFragment, vanillaSelector).length) {\n                return true;\n            }\n        }\n        up.puts('up.render()', \"Will not auto-update history because fragment doesn't contain a selector from up.fragment.config.autoHistoryTargets\");\n        return false;\n    }\n    function matches(element, selector, options = {}) {\n        element = e.get(element);\n        if (u.isElement(selector)) {\n            let target = tryToTarget(selector);\n            return target && element.matches(target);\n        }\n        else {\n            return new up.Selector(selector, element, options).matches(element);\n        }\n    }\n    function shouldRevalidate(request, response, options = {}) {\n        return request.fromCache && u.evalAutoOption(options.revalidate, config.autoRevalidate, response);\n    }\n    function targetForSteps(steps) {\n        let bestSteps = steps.filter((step) => !step.maybe || step.oldElement?.isConnected);\n        let selectors = u.map(bestSteps, 'selector');\n        return selectors.join(', ') || ':none';\n    }\n    function isContainedByRivalStep(steps, candidateStep) {\n        return u.some(steps, function (rivalStep) {\n            return (rivalStep !== candidateStep) &&\n                ((rivalStep.placement === 'swap') || (rivalStep.placement === 'content')) &&\n                rivalStep.oldElement.contains(candidateStep.oldElement);\n        });\n    }\n    function compressNestedSteps(steps) {\n        if (steps.length < 2)\n            return steps;\n        let compressed = u.uniqBy(steps, 'oldElement');\n        compressed = u.reject(compressed, (step) => isContainedByRivalStep(compressed, step));\n        return compressed;\n    }\n    function abort(...args) {\n        let options = parseTargetAndOptions(args);\n        let testFn;\n        let { reason, newLayer, jid } = options;\n        let elements;\n        if (options.target) {\n            elements = getAll(options.target, options);\n            testFn = (request) => request.isBoundToSubtrees(elements);\n            reason ||= 'Aborting requests within fragment';\n        }\n        else {\n            let layers = up.layer.getAll(options);\n            elements = u.map(layers, 'element');\n            testFn = (request) => request.isBoundToLayers(layers);\n            reason ||= 'Aborting requests within ' + layers.join(', ');\n        }\n        let testFnWithAbortable = (request) => request.abortable && testFn(request);\n        up.network.abort(testFnWithAbortable, { ...options, reason });\n        for (let element of elements) {\n            up.emit(element, 'up:fragment:aborted', { reason, newLayer, jid, log: reason });\n        }\n    }\n    function onAborted(fragment, callback) {\n        return up.event.onAncestor(fragment, 'up:fragment:aborted', callback);\n    }\n    function onKept(fragment, callback) {\n        return up.event.onAncestor(fragment, 'up:fragment:kept', callback);\n    }\n    function onFirstIntersect(element, callback, { margin = 0 } = {}) {\n        if (e.isIntersectingWindow(element, { margin })) {\n            callback();\n            return;\n        }\n        function processIntersectEntries(entries) {\n            for (let entry of entries) {\n                if (entry.isIntersecting) {\n                    disconnect();\n                    callback();\n                    return;\n                }\n            }\n        }\n        let observer = new IntersectionObserver(processIntersectEntries, { rootMargin: `${margin}px` });\n        let disconnect = () => observer.disconnect();\n        observer.observe(element);\n        up.destructor(element, disconnect);\n    }\n    const STARTS_WITH_SELECTOR = /^([\\w-]+|\\*)?(#|\\.|[:[][a-z-]{3,})/;\n    function provideNodes(value, { origin, originLayer, data, htmlParser = e.createNodesFromHTML } = {}) {\n        if (u.isString(value) && STARTS_WITH_SELECTOR.test(value)) {\n            let [parsedValue, parsedData] = u.parseScalarJSONPairs(value)[0];\n            data = { ...data, ...parsedData };\n            value = up.fragment.get(parsedValue, { layer: 'closest', origin, originLayer }) || up.fail(`Cannot find template \"%s\"`, value);\n        }\n        if (u.isString(value)) {\n            value = htmlParser(value);\n        }\n        if (isTemplate(value)) {\n            value = cloneTemplate(value, data, { htmlParser });\n        }\n        return u.wrapList(value);\n    }\n    function isTemplate(value) {\n        return u.isElement(value) && value.matches('template, script[type]') && !up.script.isScript(value);\n    }\n    function cloneTemplate(templateOrSelector, data = {}, { origin, htmlParser } = {}) {\n        let template = getSmart(templateOrSelector, { origin }) || up.fail('Template not found: %o', templateOrSelector);\n        let event = up.emit(template, 'up:template:clone', { data, nodes: null, log: [\"Using template %o\", templateOrSelector] });\n        let nodes = event.nodes ?? defaultTemplateNodes(template, htmlParser);\n        for (let node of nodes) {\n            node.upTemplateData = data;\n        }\n        return nodes;\n    }\n    function defaultTemplateNodes(template, htmlParser = e.createNodesFromHTML) {\n        let templateText = template.innerHTML;\n        return htmlParser(templateText);\n    }\n    function insertTemp(...args) {\n        let [reference, position = 'beforeend', tempValue] = u.args(args, 'val', u.isAdjacentPosition, 'val');\n        let tempNodes = provideNodes(tempValue, { origin: reference });\n        let tempElement = e.wrapIfRequired(tempNodes);\n        let oldPosition = document.contains(tempElement) && e.documentPosition(tempElement);\n        reference.insertAdjacentElement(position, tempElement);\n        if (oldPosition) {\n            return () => {\n                oldPosition[0].insertAdjacentElement(oldPosition[1], tempElement);\n            };\n        }\n        else {\n            up.hello(tempElement);\n            return () => up.destroy(tempElement);\n        }\n    }\n    function trackSelector(...args) {\n        let parsedArgs = u.args(args, 'val', 'options', 'callback');\n        let tracker = new up.SelectorTracker(...parsedArgs);\n        return tracker.start();\n    }\n    let mutateLevel = 0;\n    let afterMutateCleaner = u.cleaner('fifo');\n    function mutate(callback) {\n        try {\n            mutateLevel++;\n            return callback();\n        }\n        finally {\n            if (--mutateLevel === 0)\n                afterMutateCleaner.clean();\n        }\n    }\n    function afterMutate(callback) {\n        if (mutateLevel === 0) {\n            callback();\n        }\n        else {\n            afterMutateCleaner(callback);\n        }\n    }\n    up.on('up:framework:boot', function () {\n        const { documentElement } = document;\n        up.hello(documentElement);\n        documentElement.setAttribute('up-source', normalizeSource(location.href));\n        if (!up.browser.canPushState()) {\n            return up.warn('Cannot push history changes. Next render pass with history will load a full page.');\n        }\n    });\n    return {\n        config,\n        reload,\n        destroy,\n        render,\n        navigate,\n        get: getSmart,\n        getFirstDescendant,\n        all: getAll,\n        subtree: getSubtree,\n        contains,\n        closest,\n        source: sourceOf,\n        normalizeSource,\n        visit,\n        markAsDestroying: markFragmentAsDestroying,\n        emitInserted: emitFragmentInserted,\n        emitDestroyed: emitFragmentDestroyed,\n        emitKeep: emitFragmentKeep,\n        emitKept: emitFragmentKept,\n        keepPlan: findKeepPlan,\n        defaultNormalizeKeepHTML,\n        successKey,\n        failKey,\n        expandTargets,\n        resolveOrigin,\n        toTarget,\n        tryToTarget,\n        isTargetable,\n        matches,\n        hasAutoHistory,\n        time: timeOf,\n        etag: etagOf,\n        shouldRevalidate,\n        abort,\n        onAborted,\n        onKept,\n        onFirstIntersect,\n        splitTarget,\n        parseTargetSteps,\n        isAlive,\n        isNotDestroying,\n        targetForSteps,\n        compressNestedSteps,\n        containsMainPseudo,\n        insertTemp,\n        provideNodes,\n        cloneTemplate,\n        trackSelector,\n        mutate,\n        afterMutate,\n    };\n})();\nup.reload = up.fragment.reload;\nup.destroy = up.fragment.destroy;\nup.render = up.fragment.render;\nup.navigate = up.fragment.navigate;\nup.visit = up.fragment.visit;\nup.template = { clone: up.fragment.cloneTemplate };\nu.delegate(up, ['context'], () => up.layer.current);\n\n\n/***/ }),\n/* 90 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 91 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(92);\nup.viewport = (function () {\n    const u = up.util;\n    const e = up.element;\n    const f = up.fragment;\n    const config = new up.Config(() => ({\n        viewportSelectors: ['[up-viewport]', '[up-fixed]'],\n        fixedTopSelectors: ['[up-fixed~=top]'],\n        fixedBottomSelectors: ['[up-fixed~=bottom]'],\n        anchoredRightSelectors: ['[up-anchored~=right]', '[up-fixed~=top]', '[up-fixed~=bottom]', '[up-fixed~=right]'],\n        revealSnap: 200,\n        revealPadding: 0,\n        revealTop: false,\n        revealMax() { return 0.5 * window.innerHeight; },\n        autoFocusVisible({ element, inputDevice }) { return inputDevice === 'key' || up.form.isField(element); }\n    }));\n    const bodyShifter = new up.BodyShifter();\n    up.compiler(config.selectorFn('anchoredRightSelectors'), function (element) {\n        return bodyShifter.onAnchoredElementInserted(element);\n    });\n    const reveal = up.mockable(function (element, options) {\n        options = u.options(options);\n        element = f.get(element, options);\n        if (!(options.layer = up.layer.get(element))) {\n            up.fail('Cannot reveal a detached element');\n        }\n        if (options.peel) {\n            options.layer.peel();\n        }\n        const motion = new up.RevealMotion(element, options);\n        motion.start();\n        return up.migrate.formerlyAsync?.('up.reveal()') || true;\n    });\n    function doFocus(element, { preventScroll, force, inputDevice, focusVisible } = {}) {\n        if (force) {\n            if (!element.hasAttribute('tabindex') && element.tabIndex === -1) {\n                element.setAttribute('tabindex', '-1');\n            }\n        }\n        inputDevice ??= up.event.inputDevice;\n        focusVisible ??= 'auto';\n        focusVisible = u.evalAutoOption(focusVisible, config.autoFocusVisible, { element, inputDevice });\n        element.focus({\n            preventScroll: true,\n            focusVisible,\n        });\n        removeFocusClasses(element);\n        element.classList.add(focusVisible ? 'up-focus-visible' : 'up-focus-hidden');\n        if (!preventScroll) {\n            return reveal(element);\n        }\n    }\n    function removeFocusClasses(element) {\n        element?.classList.remove('up-focus-hidden', 'up-focus-visible');\n    }\n    up.on('focusin', function ({ relatedTarget }) {\n        removeFocusClasses(relatedTarget);\n    });\n    function tryFocus(element, options) {\n        doFocus(element, options);\n        return element === document.activeElement;\n    }\n    function revealHash(...args) {\n        return revealHashFn(...args)?.();\n    }\n    function revealHashFn(hash, { strong, layer, origin, behavior = 'instant' } = {}) {\n        if (!hash)\n            return;\n        let match = firstHashTarget(hash, { layer, origin });\n        if (match) {\n            return () => {\n                let doReveal = () => reveal(match, { top: true, behavior });\n                if (strong)\n                    u.fastTask(doReveal);\n                return doReveal();\n            };\n        }\n        else if (hash === '#top') {\n            return () => {\n                return scrollTo(0, { behavior });\n            };\n        }\n    }\n    function allSelector() {\n        return [rootSelector(), ...config.viewportSelectors].join();\n    }\n    function closest(target, options = {}) {\n        const element = f.get(target, options);\n        return element.closest(allSelector());\n    }\n    function getSubtree(element, options = {}) {\n        element = f.get(element, options);\n        return e.subtree(element, allSelector());\n    }\n    function getAround(element, options = {}) {\n        element = f.get(element, options);\n        return e.around(element, allSelector());\n    }\n    function getAll(options = {}) {\n        return f.all(allSelector(), options);\n    }\n    function rootSelector() {\n        return getRoot().tagName;\n    }\n    function getRoot() {\n        return document.scrollingElement;\n    }\n    function rootWidth() {\n        return e.root.clientWidth;\n    }\n    function rootHeight() {\n        return e.root.clientHeight;\n    }\n    function isRoot(element) {\n        return element === getRoot();\n    }\n    function rootScrollbarWidth() {\n        return window.innerWidth - rootWidth();\n    }\n    function scrollTopKey(viewport) {\n        return up.fragment.tryToTarget(viewport);\n    }\n    function fixedElements(root = document) {\n        const queryParts = ['[up-fixed]'].concat(config.fixedTopSelectors).concat(config.fixedBottomSelectors);\n        return root.querySelectorAll(queryParts.join());\n    }\n    function saveScroll(...args) {\n        const [viewports, options] = parseOptions(args);\n        const location = options.location || options.layer.location;\n        if (location) {\n            const tops = getScrollTopsForSave(viewports);\n            options.layer.lastScrollTops.set(location, tops);\n        }\n    }\n    function getScrollTopsForSave(viewports) {\n        let tops = {};\n        for (let viewport of viewports) {\n            let key = scrollTopKey(viewport);\n            if (key) {\n                tops[key] = viewport.scrollTop;\n            }\n            else {\n                up.warn('up.viewport.saveScroll()', 'Cannot save scroll positions for untargetable viewport %o', viewport);\n            }\n        }\n        return tops;\n    }\n    function restoreScroll(...args) {\n        const [viewports, options] = parseOptions(args);\n        const { location } = options.layer;\n        const locationScrollTops = options.layer.lastScrollTops.get(location);\n        if (locationScrollTops) {\n            setScrollPositions(viewports, locationScrollTops, 0);\n            up.puts('up.viewport.restoreScroll()', 'Restored scroll positions to %o', locationScrollTops);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    function saveFocus(options = {}) {\n        const layer = up.layer.get(options);\n        const location = options.location || layer.location;\n        if (location) {\n            const focusCapsule = up.FocusCapsule.preserve(layer);\n            layer.lastFocusCapsules.set(location, focusCapsule);\n        }\n    }\n    function restoreFocus(options = {}) {\n        const layer = up.layer.get(options);\n        const location = options.location || layer.location;\n        const locationCapsule = options.layer.lastFocusCapsules.get(location);\n        if (locationCapsule && locationCapsule.restore(layer)) {\n            up.puts('up.viewport.restoreFocus()', 'Restored focus to \"%s\"', locationCapsule.target);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    function newStateCache() {\n        return new up.FIFOCache({ capacity: 30, normalizeKey: u.matchableURL });\n    }\n    function parseOptions(args) {\n        const [reference, options] = u.args(args, 'val', 'options');\n        options.layer = up.layer.get(options);\n        let viewports;\n        if (reference) {\n            viewports = [closest(reference, options)];\n        }\n        else if (options.around) {\n            viewports = getAround(options.around, options);\n        }\n        else {\n            viewports = getAll(options);\n        }\n        return [viewports, options];\n    }\n    function scrollTo(position, ...args) {\n        const [viewports, options] = parseOptions(args);\n        setScrollPositions(viewports, {}, position, options.behavior);\n        return true;\n    }\n    function setScrollPositions(viewports, tops, defaultTop, behavior = 'instant') {\n        for (let viewport of viewports) {\n            const key = scrollTopKey(viewport);\n            const top = tops[key] || defaultTop;\n            viewport.scrollTo({ top, behavior });\n        }\n    }\n    function absolutize(element, options = {}) {\n        const viewport = closest(element);\n        const viewportRect = viewport.getBoundingClientRect();\n        const originalRect = element.getBoundingClientRect();\n        const boundsRect = new up.Rect({\n            left: originalRect.left - viewportRect.left,\n            top: originalRect.top - viewportRect.top,\n            width: originalRect.width,\n            height: originalRect.height\n        });\n        options.afterMeasure?.();\n        e.setStyle(element, {\n            position: element.style.position === 'static' ? 'static' : 'relative',\n            top: 'auto',\n            right: 'auto',\n            bottom: 'auto',\n            left: 'auto',\n            width: '100%',\n            height: '100%'\n        });\n        const bounds = e.createFromSelector('up-bounds');\n        e.insertBefore(element, bounds);\n        bounds.appendChild(element);\n        const moveBounds = function (diffX, diffY) {\n            boundsRect.left += diffX;\n            boundsRect.top += diffY;\n            return e.setStyle(bounds, boundsRect, 'px');\n        };\n        moveBounds(0, 0);\n        const newElementRect = element.getBoundingClientRect();\n        moveBounds(originalRect.left - newElementRect.left, originalRect.top - newElementRect.top);\n        u.each(fixedElements(element), e.fixedToAbsolute);\n        return {\n            bounds,\n            moveBounds\n        };\n    }\n    function firstHashTarget(hash, options = {}) {\n        hash = pureHash(hash);\n        if (hash) {\n            const selector = [\n                e.idSelector(hash),\n                'a' + e.attrSelector('name', hash)\n            ].join();\n            return f.get(selector, options);\n        }\n    }\n    function pureHash(value) {\n        return value?.replace(/^#/, '');\n    }\n    function focusedElementWithin(scopeElement) {\n        const focusedElement = document.activeElement;\n        if (up.fragment.contains(scopeElement, focusedElement)) {\n            return focusedElement;\n        }\n    }\n    const CURSOR_PROPS = ['selectionStart', 'selectionEnd', 'scrollLeft', 'scrollTop'];\n    function copyCursorProps(from, to = {}) {\n        for (let key of CURSOR_PROPS) {\n            try {\n                to[key] = from[key];\n            }\n            catch (error) {\n            }\n        }\n        return to;\n    }\n    return {\n        reveal,\n        revealHash,\n        revealHashFn,\n        firstHashTarget,\n        config,\n        get: closest,\n        subtree: getSubtree,\n        around: getAround,\n        get root() { return getRoot(); },\n        rootWidth,\n        rootHeight,\n        isRoot,\n        rootScrollbarWidth,\n        saveScroll,\n        restoreScroll,\n        scrollTo,\n        saveFocus,\n        restoreFocus,\n        absolutize,\n        focus: doFocus,\n        tryFocus,\n        newStateCache,\n        focusedElementWithin,\n        copyCursorProps,\n        bodyShifter,\n    };\n})();\nup.focus = up.viewport.focus;\nup.reveal = up.viewport.reveal;\n\n\n/***/ }),\n/* 92 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 93 */\n/***/ (() => {\n\nup.motion = (function () {\n    const u = up.util;\n    const e = up.element;\n    const motionController = new up.MotionController('motion');\n    const config = new up.Config(() => ({\n        duration: 175,\n        easing: 'ease',\n        enabled: !matchMedia('(prefers-reduced-motion: reduce)').matches\n    }));\n    let namedAnimations = new up.Registry('animation', findAnimationFn);\n    let namedTransitions = new up.Registry('transition', findTransitionFn);\n    function reset() {\n        motionController.reset();\n    }\n    function isEnabled() {\n        return config.enabled;\n    }\n    function animate(element, animation, options) {\n        element = up.fragment.get(element);\n        options = u.options(options);\n        let animationFn = findAnimationFn(animation);\n        const willRun = willAnimate(element, animation, options);\n        animationFn = up.error.guardFn(animationFn);\n        if (willRun) {\n            const runNow = () => animationFn(element, options);\n            return motionController.startFunction(element, runNow, options);\n        }\n        else {\n            return skipAnimate(element, animation);\n        }\n    }\n    function willAnimate(element, animationOrTransition, options) {\n        applyConfig(options);\n        return isEnabled() && !isNone(animationOrTransition) && (options.duration > 0) && !e.isSingleton(element);\n    }\n    function skipAnimate(element, animation) {\n        if (u.isOptions(animation)) {\n            e.setStyle(element, animation);\n        }\n        return Promise.resolve();\n    }\n    function animateNow(element, lastFrame, options) {\n        if (up.migrate.loaded)\n            lastFrame = up.migrate.fixSetStyleProps(lastFrame);\n        options = { ...options, finishEvent: motionController.finishEvent };\n        const cssTransition = new up.CSSTransition(element, lastFrame, options);\n        return cssTransition.start();\n    }\n    function applyConfig(options) {\n        options.easing ??= config.easing;\n        options.duration ??= config.duration;\n    }\n    function finish(element) {\n        return motionController.finish(element);\n    }\n    function morph(oldElement, newElement, transitionObject, options) {\n        options = u.options(options);\n        applyConfig(options);\n        oldElement = up.fragment.get(oldElement);\n        newElement = up.fragment.get(newElement);\n        let transitionFn = findTransitionFn(transitionObject);\n        const willMorph = willAnimate(oldElement, transitionFn, options);\n        transitionFn = up.error.guardFn(transitionFn);\n        const beforeStart = u.pluckKey(options, 'beforeStart') || u.noop;\n        const afterInsert = u.pluckKey(options, 'afterInsert') || u.noop;\n        const beforeDetach = u.pluckKey(options, 'beforeDetach') || u.noop;\n        const afterDetach = u.pluckKey(options, 'afterDetach') || u.noop;\n        const scrollNew = u.pluckKey(options, 'scrollNew') || u.noop;\n        beforeStart();\n        if (willMorph) {\n            if (motionController.isActive(oldElement) && (options.trackMotion === false)) {\n                return transitionFn(oldElement, newElement, options);\n            }\n            up.puts('up.morph()', 'Morphing %o to %o with transition %O over %d ms', oldElement, newElement, transitionObject, options.duration);\n            const viewport = up.viewport.get(oldElement);\n            const scrollTopBeforeReveal = viewport.scrollTop;\n            const oldRemote = up.viewport.absolutize(oldElement, {\n                afterMeasure() {\n                    e.insertBefore(oldElement, newElement);\n                    afterInsert();\n                }\n            });\n            const trackable = async function () {\n                scrollNew();\n                const scrollTopAfterReveal = viewport.scrollTop;\n                oldRemote.moveBounds(0, scrollTopAfterReveal - scrollTopBeforeReveal);\n                await transitionFn(oldElement, newElement, options);\n                beforeDetach();\n                oldRemote.bounds.remove();\n                afterDetach();\n            };\n            return motionController.startFunction([oldElement, newElement], trackable, options);\n        }\n        else {\n            beforeDetach();\n            swapElementsDirectly(oldElement, newElement);\n            afterInsert();\n            afterDetach();\n            scrollNew();\n            return Promise.resolve();\n        }\n    }\n    function findTransitionFn(value) {\n        if (isNone(value)) {\n            return undefined;\n        }\n        else if (u.isFunction(value)) {\n            return value;\n        }\n        else if (u.isArray(value)) {\n            return composeTransitionFn(...value);\n        }\n        else if (u.isString(value) && value.includes('/')) {\n            return composeTransitionFn(...value.split('/'));\n        }\n        else {\n            return namedTransitions.get(value);\n        }\n    }\n    function composeTransitionFn(oldAnimation, newAnimation) {\n        if (!isNone(oldAnimation) && !isNone(newAnimation)) {\n            const oldAnimationFn = findAnimationFn(oldAnimation) || u.asyncNoop;\n            const newAnimationFn = findAnimationFn(newAnimation) || u.asyncNoop;\n            return (oldElement, newElement, options) => Promise.all([\n                oldAnimationFn(oldElement, options),\n                newAnimationFn(newElement, options)\n            ]);\n        }\n    }\n    function findAnimationFn(value) {\n        if (isNone(value)) {\n            return undefined;\n        }\n        else if (u.isFunction(value)) {\n            return value;\n        }\n        else if (u.isOptions(value)) {\n            return (element, options) => animateNow(element, value, options);\n        }\n        else {\n            return namedAnimations.get(value);\n        }\n    }\n    const swapElementsDirectly = up.mockable(function (oldElement, newElement) {\n        oldElement.replaceWith(newElement);\n    });\n    function motionOptions(element, options, parserOptions) {\n        options = u.options(options);\n        let parser = new up.OptionsParser(element, options, parserOptions);\n        parser.booleanOrString('animation');\n        parser.booleanOrString('transition');\n        parser.string('easing');\n        parser.number('duration');\n        return options;\n    }\n    up.on('up:framework:boot', function () {\n        if (!isEnabled()) {\n            up.puts('up.motion', 'Animations are disabled');\n        }\n    });\n    function isNone(animationOrTransition) {\n        return !animationOrTransition || animationOrTransition === 'none';\n    }\n    function registerOpacityAnimation(name, from, to) {\n        namedAnimations.put(name, function (element, options) {\n            element.style.opacity = from;\n            return animateNow(element, { opacity: to }, options);\n        });\n    }\n    registerOpacityAnimation('fade-in', 0, 1);\n    registerOpacityAnimation('fade-out', 1, 0);\n    function translateCSS(dx, dy) {\n        return { transform: `translate(${dx}px, ${dy}px)` };\n    }\n    function noTranslateCSS() {\n        return { transform: '' };\n    }\n    function untranslatedBox(element) {\n        e.setStyle(element, noTranslateCSS());\n        return element.getBoundingClientRect();\n    }\n    function registerMoveAnimations(direction, boxToTransform) {\n        const animationToName = `move-to-${direction}`;\n        const animationFromName = `move-from-${direction}`;\n        namedAnimations.put(animationToName, function (element, options) {\n            const box = untranslatedBox(element);\n            const transform = boxToTransform(box);\n            return animateNow(element, transform, options);\n        });\n        namedAnimations.put(animationFromName, function (element, options) {\n            const box = untranslatedBox(element);\n            const transform = boxToTransform(box);\n            e.setStyle(element, transform);\n            return animateNow(element, noTranslateCSS(), options);\n        });\n    }\n    registerMoveAnimations('top', function (box) {\n        const travelDistance = box.top + box.height;\n        return translateCSS(0, -travelDistance);\n    });\n    registerMoveAnimations('bottom', function (box) {\n        const travelDistance = up.viewport.rootHeight() - box.top;\n        return translateCSS(0, travelDistance);\n    });\n    registerMoveAnimations('left', function (box) {\n        const travelDistance = box.left + box.width;\n        return translateCSS(-travelDistance, 0);\n    });\n    registerMoveAnimations('right', function (box) {\n        const travelDistance = up.viewport.rootWidth() - box.left;\n        return translateCSS(travelDistance, 0);\n    });\n    namedTransitions.put('cross-fade', ['fade-out', 'fade-in']);\n    namedTransitions.put('move-left', ['move-to-left', 'move-from-right']);\n    namedTransitions.put('move-right', ['move-to-right', 'move-from-left']);\n    namedTransitions.put('move-up', ['move-to-top', 'move-from-bottom']);\n    namedTransitions.put('move-down', ['move-to-bottom', 'move-from-top']);\n    up.on('up:framework:reset', reset);\n    return {\n        morph,\n        animate,\n        finish,\n        finishCount() { return motionController.finishCount; },\n        transition: namedTransitions.put,\n        animation: namedAnimations.put,\n        config,\n        isEnabled,\n        isNone,\n        willAnimate,\n        swapElementsDirectly,\n        motionOptions,\n    };\n})();\nup.transition = up.motion.transition;\nup.animation = up.motion.animation;\nup.morph = up.motion.morph;\nup.animate = up.motion.animate;\n\n\n/***/ }),\n/* 94 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(95);\nconst u = up.util;\nup.network = (function () {\n    const config = new up.Config(() => ({\n        concurrency: 6,\n        wrapMethod: true,\n        cacheSize: 70,\n        cacheExpireAge: 15 * 1000,\n        cacheEvictAge: 90 * 60 * 1000,\n        lateDelay: 400,\n        fail(response) { return (response.status < 200 || response.status > 299) && response.status !== 304; },\n        autoCache(request) { return request.isSafe(); },\n        expireCache(request) { return !request.isSafe(); },\n        evictCache: false,\n        progressBar: true,\n        timeout: 90000,\n    }));\n    const queue = new up.Request.Queue();\n    const cache = new up.Request.Cache();\n    let progressBar = null;\n    function reset() {\n        abortRequests();\n        queue.reset();\n        cache.reset();\n        progressBar?.destroy();\n        progressBar = null;\n    }\n    function makeRequest(...args) {\n        const options = parseRequestOptions(args);\n        const request = new up.Request(options);\n        processRequest(request);\n        return request;\n    }\n    function parseRequestOptions(args) {\n        let options = u.parseArgIntoOptions(args, 'url');\n        up.migrate.handleRequestOptions?.(options);\n        return options;\n    }\n    function processRequest(request) {\n        cache.expire(request.expireCache ?? u.evalOption(config.expireCache, request) ?? false);\n        cache.evict(request.evictCache ?? u.evalOption(config.evictCache, request) ?? false);\n        useCachedRequest(request) || queueRequest(request);\n    }\n    function useCachedRequest(newRequest) {\n        let cachedRequest;\n        if (newRequest.willCache() && (cachedRequest = cache.get(newRequest))) {\n            up.puts('up.request()', 'Re-using previous request to %s', newRequest.description);\n            if (!newRequest.background) {\n                queue.promoteToForeground(cachedRequest);\n            }\n            cachedRequest.mergeIfUnsent(newRequest);\n            cache.track(cachedRequest, newRequest, { onIncompatible: processRequest });\n            return true;\n        }\n    }\n    function queueRequest(request) {\n        handleCaching(request);\n        queue.asap(request);\n        return true;\n    }\n    function handleCaching(request) {\n        if (request.willCache()) {\n            cache.put(request);\n            request.onLoading = () => cache.reindex(request);\n        }\n        u.always(request, function (responseOrError) {\n            cache.expire(responseOrError.expireCache ?? false, { except: request });\n            cache.evict(responseOrError.evictCache ?? false, { except: request });\n            let isResponse = responseOrError instanceof up.Response;\n            let isNetworkError = !isResponse;\n            let isSuccessResponse = isResponse && responseOrError.ok;\n            let isErrorResponse = isResponse && !responseOrError.ok;\n            let isEmptyResponse = isResponse && responseOrError.none;\n            let redirectRequest = isResponse && responseOrError.redirectRequest;\n            if (isErrorResponse) {\n                cache.evict(request.url);\n            }\n            else if (isNetworkError || isEmptyResponse) {\n                cache.evict(request);\n            }\n            else if (isSuccessResponse) {\n                if (cache.get(request)) {\n                    cache.put(request);\n                }\n                if (redirectRequest && (redirectRequest.willCache() || cache.get(redirectRequest))) {\n                    cache.put(redirectRequest);\n                }\n            }\n        });\n    }\n    function isBusy() {\n        return queue.isBusy();\n    }\n    function loadPage(requestsAttrs) {\n        new up.Request(requestsAttrs).loadPage();\n    }\n    function abortRequests(...args) {\n        up.migrate.preprocessAbortArgs?.(args);\n        queue.abort(...args);\n    }\n    function isSafeMethod(method) {\n        return u.contains(['GET', 'OPTIONS', 'HEAD'], u.normalizeMethod(method));\n    }\n    function onLate() {\n        if (u.evalOption(config.progressBar)) {\n            progressBar = new up.ProgressBar();\n        }\n    }\n    function onRecover() {\n        progressBar?.conclude();\n    }\n    up.on('up:network:late', onLate);\n    up.on('up:network:recover', onRecover);\n    up.on('up:framework:reset', reset);\n    return {\n        request: makeRequest,\n        cache,\n        isBusy,\n        isSafeMethod,\n        config,\n        abort: abortRequests,\n        queue,\n        loadPage,\n    };\n})();\nup.request = up.network.request;\nup.cache = up.network.cache;\n\n\n/***/ }),\n/* 95 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 96 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(97);\nconst u = up.util;\nconst e = up.element;\nup.layer = (function () {\n    const LAYER_CLASSES = [\n        up.Layer.Root,\n        up.Layer.Modal,\n        up.Layer.Popup,\n        up.Layer.Drawer,\n        up.Layer.Cover\n    ];\n    const config = new up.Config(function () {\n        const newConfig = {\n            mode: 'modal',\n            any: {\n                mainTargets: [\n                    \"[up-main='']\",\n                    'main',\n                    ':layer'\n                ]\n            },\n            root: {\n                mainTargets: ['[up-main~=root]'],\n                history: true\n            },\n            overlay: {\n                mainTargets: ['[up-main~=overlay]'],\n                openAnimation: 'fade-in',\n                closeAnimation: 'fade-out',\n                dismissLabel: '\u00D7',\n                dismissARIALabel: 'Dismiss dialog',\n                dismissable: true,\n                history: 'auto',\n                trapFocus: true,\n            },\n            cover: {\n                mainTargets: ['[up-main~=cover]']\n            },\n            drawer: {\n                mainTargets: ['[up-main~=drawer]'],\n                backdrop: true,\n                position: 'left',\n                size: 'medium',\n                openAnimation(layer) {\n                    switch (layer.position) {\n                        case 'left': return 'move-from-left';\n                        case 'right': return 'move-from-right';\n                    }\n                },\n                closeAnimation(layer) {\n                    switch (layer.position) {\n                        case 'left': return 'move-to-left';\n                        case 'right': return 'move-to-right';\n                    }\n                }\n            },\n            modal: {\n                mainTargets: ['[up-main~=modal]'],\n                backdrop: true,\n                size: 'medium'\n            },\n            popup: {\n                mainTargets: ['[up-main~=popup]'],\n                position: 'bottom',\n                size: 'medium',\n                align: 'left',\n                dismissable: 'outside key',\n                trapFocus: false,\n            },\n            foreignOverlaySelectors: ['dialog']\n        };\n        for (let Class of LAYER_CLASSES) {\n            newConfig[Class.mode].Class = Class;\n        }\n        return newConfig;\n    });\n    let stack = null;\n    let handlers = [];\n    function mainTargets(mode) {\n        return u.flatMap(modeConfigs(mode), 'mainTargets');\n    }\n    function modeConfigs(mode) {\n        if (mode === 'root') {\n            return [config.root, config.any];\n        }\n        else {\n            return [config[mode], config.overlay, config.any];\n        }\n    }\n    function normalizeLayerOption(options) {\n        if (options.layer instanceof up.Layer)\n            return;\n        up.migrate.handleLayerOptions?.(options);\n        if (u.isGiven(options.layer)) {\n            let match = String(options.layer).match(/^(new|shatter|swap)( (\\w+))?/);\n            if (match) {\n                options.layer = 'new';\n                const openMethod = match[1];\n                const shorthandMode = match[3];\n                options.mode ||= shorthandMode || config.mode;\n                if (openMethod === 'swap') {\n                    if (up.layer.isOverlay()) {\n                        options.baseLayer = 'parent';\n                    }\n                }\n                else if (openMethod === 'shatter') {\n                    options.baseLayer = 'root';\n                }\n            }\n        }\n        else if (u.isElementLike(options.target)) {\n            options.layer = stack.get(options.target, { normalizeLayerOptions: false });\n        }\n        else if (options.origin) {\n            options.layer = 'origin';\n        }\n        else {\n            options.layer = 'current';\n        }\n    }\n    function setBaseLayerOption(options) {\n        if (options.baseLayer instanceof up.Layer)\n            return;\n        options.baseLayer = stack.get('current', { ...options, normalizeLayerOptions: false });\n    }\n    function normalizeOptions(options) {\n        normalizeLayerOption(options);\n        options.context ??= {};\n        setBaseLayerOption(options);\n    }\n    function build(options, beforeNew) {\n        const { mode } = options;\n        const { Class } = config[mode];\n        const configs = u.reverse(modeConfigs(mode));\n        let handleDeprecatedConfig = up.migrate.handleLayerConfig;\n        if (handleDeprecatedConfig) {\n            configs.forEach(handleDeprecatedConfig);\n        }\n        options.openAnimation ??= u.pluckKey(options, 'animation');\n        options = u.mergeDefined(...configs, { mode, stack }, options);\n        if (beforeNew) {\n            options = beforeNew(options);\n        }\n        return new Class(options);\n    }\n    function openCallbackAttr(link, attr) {\n        return e.callbackAttr(link, attr, { exposedKeys: ['layer'] });\n    }\n    function closeCallbackAttr(link, attr) {\n        return e.callbackAttr(link, attr, { exposedKeys: ['layer', 'value', 'response'] });\n    }\n    function reset() {\n        stack.reset();\n        handlers = u.filter(handlers, 'isDefault');\n    }\n    async function open(options) {\n        options = u.options(options, {\n            layer: 'new',\n            defaultToEmptyContent: true,\n            navigate: true\n        });\n        let result = await up.render(options);\n        return result.layer;\n    }\n    function ask(options) {\n        return new Promise(function (resolve, reject) {\n            options = {\n                ...options,\n                onAccepted: (event) => resolve(event.value),\n                onDismissed: (event) => reject(event.value)\n            };\n            open(options);\n        });\n    }\n    function anySelector() {\n        return u.map(LAYER_CLASSES, (Class) => Class.selector()).join();\n    }\n    function optionToString(option) {\n        if (u.isString(option)) {\n            return `layer \"${option}\"`;\n        }\n        else {\n            return option.toString();\n        }\n    }\n    function isWithinForeignOverlay(element) {\n        let selector = config.selector('foreignOverlaySelectors');\n        return !!(selector && element.closest(selector));\n    }\n    up.on('up:fragment:destroyed', function () {\n        stack.sync();\n    });\n    up.on('up:framework:evaled', function () {\n        stack = new up.LayerStack();\n    });\n    up.on('up:framework:reset', reset);\n    const api = {\n        config,\n        mainTargets,\n        open,\n        build,\n        ask,\n        normalizeOptions,\n        openCallbackAttr,\n        closeCallbackAttr,\n        anySelector,\n        optionToString,\n        get stack() { return stack.layers; },\n        isWithinForeignOverlay\n    };\n    u.delegate(api, [\n        'get',\n        'getAll',\n        'root',\n        'overlays',\n        'current',\n        'front',\n        'sync',\n        'count',\n        'dismissOverlays'\n    ], () => stack);\n    u.delegate(api, [\n        'accept',\n        'dismiss',\n        'isRoot',\n        'isOverlay',\n        'isFront',\n        'on',\n        'off',\n        'emit',\n        'parent',\n        'history',\n        'location',\n        'mode',\n        'context',\n        'element',\n        'contains',\n        'size',\n        'affix'\n    ], () => stack.current);\n    return api;\n})();\n\n\n/***/ }),\n/* 97 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 98 */\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\n__webpack_require__(99);\nup.link = (function () {\n    const u = up.util;\n    const e = up.element;\n    let lastTouchstartTarget = null;\n    let lastMousedownTarget = null;\n    let lastInstantTarget = null;\n    const ATTRS_WITH_LOCAL_HTML = '[up-content], [up-fragment], [up-document]';\n    const ATTRS_SUGGESTING_FOLLOW = `${ATTRS_WITH_LOCAL_HTML}, [up-target], [up-layer], [up-transition], [up-preload]`;\n    const DEFAULT_INTERACTIVE_ELEMENT = 'a[href], button';\n    const config = new up.Config(() => ({\n        followSelectors: ['[up-follow]', `a:is(${ATTRS_SUGGESTING_FOLLOW})`],\n        noFollowSelectors: ['[up-follow=false]', 'a[download]', 'a[target]', 'a[href^=\"javascript:\"]', 'a[href^=\"mailto:\"]', 'a[href^=\"tel:\"]', `a[href^=\"#\"]:not(${ATTRS_WITH_LOCAL_HTML})`, e.crossOriginSelector('href'), e.crossOriginSelector('up-href')],\n        instantSelectors: ['[up-instant]'],\n        noInstantSelectors: ['[up-instant=false]', '[onclick]'],\n        preloadSelectors: ['[up-preload]'],\n        noPreloadSelectors: ['[up-preload=false]'],\n        clickableSelectors: ['[up-clickable]', '[up-follow]', '[up-emit]', '[up-accept]', '[up-dismiss]', `a:is(${ATTRS_SUGGESTING_FOLLOW})`],\n        noClickableSelectors: ['[up-clickable=false]', DEFAULT_INTERACTIVE_ELEMENT],\n        preloadDelay: 90,\n    }));\n    function isPreloadDisabled(link) {\n        return !up.browser.canPushState() || !isFollowable(link) || !willCache(link);\n    }\n    function willCache(link) {\n        const options = parseRequestOptions(link);\n        if (options.url) {\n            if (options.cache == null) {\n                options.cache = 'auto';\n            }\n            options.basic = true;\n            const request = new up.Request(options);\n            return request.willCache();\n        }\n    }\n    function reset() {\n        lastTouchstartTarget = null;\n        lastMousedownTarget = null;\n        lastInstantTarget = null;\n    }\n    const follow = up.mockable(function (link, options, parserOptions) {\n        return up.render(followOptions(link, options, parserOptions));\n    });\n    function parseRequestOptions(link, options, parserOptions) {\n        options = u.options(options);\n        const parser = new up.OptionsParser(link, options, { ...parserOptions, fail: false });\n        options.url = followURL(link, options);\n        options.method = followMethod(link, options);\n        parser.json('headers');\n        parser.json('params');\n        parser.booleanOrString('cache');\n        parser.booleanOrString('expireCache');\n        parser.booleanOrString('evictCache');\n        parser.booleanOrString('revalidate');\n        parser.booleanOrString('abort');\n        parser.boolean('abortable');\n        parser.boolean('background');\n        parser.string('contentType');\n        parser.booleanOrNumber('lateDelay');\n        parser.number('timeout');\n        parser.booleanOrString('fail');\n        return options;\n    }\n    function followOptions(link, options, parserOptions) {\n        link = up.fragment.get(link);\n        options = u.options(options);\n        const parser = new up.OptionsParser(link, options, { fail: true, ...parserOptions });\n        parser.include(parseRequestOptions);\n        options.origin ||= link;\n        parser.boolean('navigate', { default: true });\n        parser.string('confirm', { attr: ['up-confirm', 'data-confirm'] });\n        parser.string('target');\n        parser.booleanOrString('fallback');\n        parser.string('match');\n        parser.string('document');\n        parser.string('fragment');\n        parser.string('content');\n        parser.boolean('keep', { attr: 'up-use-keep' });\n        parser.boolean('hungry', { attr: 'up-use-hungry' });\n        parser.json('data', { attr: 'up-use-data' });\n        parser.callback('onLoaded');\n        parser.callback('onRendered', { mainKey: 'result' });\n        parser.callback('onFinished', { mainKey: 'result' });\n        parser.callback('onOffline', { mainKey: 'error' });\n        parser.callback('onError', { mainKey: 'error' });\n        parser.boolean('peel');\n        parser.string('layer');\n        parser.string('baseLayer');\n        parser.json('context');\n        parser.string('mode');\n        parser.string('align');\n        parser.string('position');\n        parser.string('class');\n        parser.string('size');\n        parser.booleanOrString('dismissable');\n        parser.parse(up.layer.openCallbackAttr, 'onOpened');\n        parser.parse(up.layer.closeCallbackAttr, 'onAccepted');\n        parser.parse(up.layer.closeCallbackAttr, 'onDismissed');\n        parser.string('acceptEvent');\n        parser.string('dismissEvent');\n        parser.string('acceptLocation');\n        parser.string('dismissLocation');\n        parser.booleanOrString('closeAnimation');\n        parser.string('closeEasing');\n        parser.number('closeDuration');\n        parser.include(up.status.statusOptions);\n        parser.booleanOrString('focus');\n        parser.booleanOrString('focusVisible');\n        parser.boolean('saveScroll');\n        parser.boolean('saveFocus');\n        parser.booleanOrString('scroll');\n        parser.boolean('revealTop');\n        parser.number('revealMax');\n        parser.number('revealPadding');\n        parser.number('revealSnap');\n        parser.string('scrollBehavior');\n        parser.booleanOrString('history');\n        parser.booleanOrString('location');\n        parser.booleanOrString('title');\n        parser.boolean('metaTags');\n        parser.booleanOrString('lang');\n        parser.include(up.motion.motionOptions);\n        options.guardEvent ??= up.event.build('up:link:follow', { log: ['Following link %o', link] });\n        return options;\n    }\n    function preload(link, options) {\n        link = up.fragment.get(link);\n        let issue = preloadIssue(link);\n        if (issue) {\n            return Promise.reject(new up.Error(issue));\n        }\n        const guardEvent = up.event.build('up:link:preload', { log: ['Preloading link %o', link] });\n        return follow(link, {\n            abort: false,\n            abortable: false,\n            background: true,\n            cache: true,\n            ...options,\n            ...up.RenderOptions.NO_INPUT_INTERFERENCE,\n            ...up.RenderOptions.NO_PREVIEWS,\n            guardEvent,\n            preload: true,\n        });\n    }\n    function preloadIssue(link) {\n        if (!isSafe(link)) {\n            return 'Will not preload an unsafe link';\n        }\n    }\n    function followMethod(link, options = {}) {\n        return u.normalizeMethod(options.method || link.getAttribute('up-method') || link.getAttribute('data-method'));\n    }\n    function followURL(link, options = {}) {\n        const url = options.url || link.getAttribute('up-href') || link.getAttribute('href');\n        if (url !== '#') {\n            return url;\n        }\n    }\n    function isFollowable(link) {\n        link = up.fragment.get(link);\n        return config.matches(link, 'followSelectors');\n    }\n    function makeFollowable(link) {\n        if (!isFollowable(link)) {\n            link.setAttribute('up-follow', '');\n        }\n    }\n    function makeClickable(element) {\n        let role = element.matches('a, [up-follow]') ? 'link' : 'button';\n        e.setMissingAttrs(element, {\n            tabindex: '0',\n            role,\n            'up-clickable': ''\n        });\n        element.addEventListener('keydown', function (event) {\n            if ((event.key === 'Enter') || (element.role === 'button' && event.key === 'Space')) {\n                return forkEventAsUpClick(event);\n            }\n        });\n    }\n    up.macro(config.selectorFn('clickableSelectors'), makeClickable);\n    function shouldFollowEvent(event, link) {\n        if (event.defaultPrevented) {\n            return false;\n        }\n        const betterTargetSelector = `a, [up-follow], ${up.form.fieldSelector()}`;\n        const betterTarget = event.target.closest(betterTargetSelector);\n        return !betterTarget || (betterTarget === link);\n    }\n    function isInstant(linkOrDescendant) {\n        const element = linkOrDescendant.closest(config.selector('instantSelectors'));\n        return element && !isInstantDisabled(element);\n    }\n    function isInstantDisabled(link) {\n        return config.matches(link, 'noInstantSelectors') || config.matches(link, 'noFollowSelectors');\n    }\n    function convertClicks(layer) {\n        layer.on('click', function (event, element) {\n            if (up.event.isModified(event)) {\n                return;\n            }\n            if (isInstant(element) && lastInstantTarget === element) {\n                up.event.halt(event);\n            }\n            else if (up.event.inputDevice === 'key' || up.event.isSyntheticClick(event) || (layer.wasHitByMouseEvent(event) && !didUserDragAway(event))) {\n                forkEventAsUpClick(event);\n            }\n            lastMousedownTarget = null;\n            lastInstantTarget = null;\n        });\n        layer.on('touchstart', { passive: true }, function (event, element) {\n            lastTouchstartTarget = element;\n        });\n        layer.on('mousedown', function (event, element) {\n            if (up.event.isModified(event)) {\n                return;\n            }\n            lastMousedownTarget = element;\n            if (isInstant(element) && !isLongPressPossible(event)) {\n                lastInstantTarget = element;\n                forkEventAsUpClick(event);\n            }\n            lastTouchstartTarget = null;\n        });\n    }\n    function isLongPressPossible(mousedownEvent) {\n        let mousedownTarget = mousedownEvent.target;\n        return (lastTouchstartTarget === mousedownTarget) && mousedownTarget.closest('[href]');\n    }\n    function didUserDragAway(clickEvent) {\n        return lastMousedownTarget && (lastMousedownTarget !== clickEvent.target);\n    }\n    function forkEventAsUpClick(originalEvent) {\n        let forwardedProps = ['clientX', 'clientY', 'button', ...up.event.keyModifiers];\n        const newEvent = up.event.fork(originalEvent, 'up:click', forwardedProps);\n        up.emit(originalEvent.target, newEvent, { log: false });\n    }\n    function isSafe(link) {\n        const method = followMethod(link);\n        return up.network.isSafeMethod(method);\n    }\n    function onLoadCondition(condition, link, callback) {\n        switch (condition) {\n            case 'insert':\n                callback();\n                break;\n            case 'reveal': {\n                let margin = e.numberAttr(link, 'up-intersect-margin');\n                up.fragment.onFirstIntersect(link, callback, { margin });\n                break;\n            }\n            case 'hover':\n                new up.LinkFollowIntent(link, callback);\n                break;\n            case 'manual':\n                break;\n        }\n    }\n    function loadDeferred(link, options) {\n        let guardEvent = up.event.build('up:deferred:load', { log: ['Loading deferred %o', link] });\n        let forcedOptions = {\n            navigate: false,\n            guardEvent,\n            ...options,\n        };\n        let defaults = {\n            target: ':origin',\n            cache: 'auto',\n            revalidate: 'auto',\n            feedback: true,\n        };\n        return follow(link, forcedOptions, { defaults });\n    }\n    up.attribute('up-defer', { defaultValue: 'insert' }, function (link, condition) {\n        let doLoad = (options) => up.error.muteUncriticalRejection(loadDeferred(link, options));\n        onLoadCondition(condition, link, doLoad);\n    });\n    up.on('up:click', config.selectorFn('followSelectors'), function (event, link) {\n        if (shouldFollowEvent(event, link)) {\n            up.event.halt(event, { log: true });\n            up.focus(link, { preventScroll: true });\n            up.error.muteUncriticalRejection(follow(link));\n        }\n    });\n    up.attribute('up-expand', { defaultValue: 'a, [up-href]', macro: true }, function (area, childLinkSelector) {\n        let childLink = e.get(area, childLinkSelector);\n        if (childLink) {\n            e.setMissingAttrs(area, {\n                'up-href': e.attr(childLink, 'href'),\n                ...e.upAttrs(childLink)\n            });\n            childLink.upExpandedPair = area.upExpandedPair = [area, childLink];\n            e.addClasses(area, e.upClasses(childLink));\n            makeFollowable(area);\n        }\n    });\n    up.compiler(config.selectorFn('preloadSelectors'), function (link) {\n        if (!isPreloadDisabled(link)) {\n            let doPreload = (options) => up.error.muteUncriticalRejection(preload(link, options));\n            let condition = e.booleanOrStringAttr(link, 'up-preload');\n            if (condition === true || u.isUndefined(condition))\n                condition = 'hover';\n            onLoadCondition(condition, link, doPreload);\n        }\n    });\n    up.on('up:framework:reset', reset);\n    return {\n        follow,\n        followOptions,\n        requestOptions: parseRequestOptions,\n        preload,\n        makeFollowable,\n        isSafe,\n        isFollowable,\n        shouldFollowEvent,\n        convertClicks,\n        config,\n        loadDeferred,\n    };\n})();\nup.follow = up.link.follow;\nup.deferred = { load: up.link.loadDeferred };\n\n\n/***/ }),\n/* 99 */\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n/* 100 */\n/***/ (() => {\n\nup.form = (function () {\n    const u = up.util;\n    const e = up.element;\n    const config = new up.Config(() => ({\n        groupSelectors: ['[up-form-group]', 'fieldset', 'label', 'form'],\n        fieldSelectors: ['select', 'input:not([type=submit], [type=image], [type=button])', 'button[type]:not([type=submit], [type=button])', 'textarea'],\n        submitSelectors: ['form:is([up-submit], [up-target], [up-layer], [up-transition])'],\n        noSubmitSelectors: ['[up-submit=false]', '[target]', e.crossOriginSelector('action')],\n        submitButtonSelectors: ['input[type=submit]', 'input[type=image]', 'button[type=submit]', 'button:not([type])'],\n        genericButtonSelectors: ['input[type=button]', 'button[type=button]'],\n        validateBatch: true,\n        watchInputEvents: ['input', 'change'],\n        watchInputDelay: 0,\n        watchChangeEvents: ['change'],\n        watchableEvents: ['input', 'change'],\n        arrayParam: (name) => name.endsWith('[]'),\n    }));\n    function fieldSelector(suffix = '') {\n        return config.fieldSelectors.map((field) => field + suffix).join();\n    }\n    function isField(element) {\n        return element.matches(fieldSelector());\n    }\n    function findFields(root) {\n        root = e.get(root);\n        let fields = e.subtree(root, fieldSelector());\n        if (root.matches('form[id]')) {\n            const outsideFieldSelector = fieldSelector(e.attrSelector('form', root.getAttribute('id')));\n            const outsideFields = up.fragment.all(outsideFieldSelector, { layer: root });\n            fields = u.uniq([...fields, ...outsideFields]);\n        }\n        return fields;\n    }\n    function findFieldsAndButtons(container) {\n        return [\n            ...findFields(container),\n            ...findSubmitButtons(container),\n            ...findGenericButtons(container),\n        ];\n    }\n    function findSubmitButtons(root) {\n        return e.subtree(root, submitButtonSelector());\n    }\n    function findGenericButtons(root) {\n        return e.subtree(root, config.selector('genericButtonSelectors'));\n    }\n    function isSubmitButton(element) {\n        return element?.matches(submitButtonSelector());\n    }\n    function submitButtonSelector() {\n        return config.selector('submitButtonSelectors');\n    }\n    const submit = up.mockable((form, options) => {\n        return up.render(submitOptions(form, options));\n    });\n    function submitOptions(form, options, parserOptions) {\n        form = up.fragment.get(form);\n        form = getForm(form);\n        options = u.options(options);\n        let parser = new up.OptionsParser(form, options, parserOptions);\n        parser.include(destinationOptions);\n        parser.string('failTarget', { default: up.fragment.tryToTarget(form) });\n        options.guardEvent ||= up.event.build('up:form:submit', {\n            submitButton: options.submitButton,\n            log: 'Submitting form',\n            params: options.params,\n            form,\n        });\n        options.origin ||= up.viewport.focusedElementWithin(form) || options.submitButton || form;\n        options.activeElements = u.uniq([options.origin, options.submitButton, form].filter(u.isElement));\n        parser.include(up.link.followOptions);\n        Object.assign(options, submitButtonOverrides(options.submitButton));\n        return options;\n    }\n    function watchOptions(field, options, parserOptions = {}) {\n        options = u.options(options);\n        parserOptions.closest ??= true;\n        parserOptions.attrPrefix ??= 'up-watch-';\n        let parser = new up.OptionsParser(field, options, parserOptions);\n        parser.include(up.status.statusOptions, parserOptions);\n        parser.string('event');\n        parser.number('delay');\n        let config = up.form.config;\n        if (options.event === 'input') {\n            options.event = u.evalOption(config.watchInputEvents, field);\n            options.delay ??= config.watchInputDelay;\n        }\n        else if (options.event === 'change') {\n            options.event = u.evalOption(config.watchChangeEvents, field);\n        }\n        options.origin ||= field;\n        return options;\n    }\n    function validateOptions(field, options, parserOptions = {}) {\n        options = u.options(options);\n        let parser = new up.OptionsParser(field, options, { ...parserOptions, closest: true, attrPrefix: 'up-validate-' });\n        parser.string('url');\n        parser.string('method', { normalize: u.normalizeMethod });\n        parser.boolean('batch', { default: config.validateBatch });\n        parser.json('params');\n        parser.json('headers');\n        parser.include(watchOptions, { defaults: { event: 'change' } });\n        return options;\n    }\n    function disableContainerTemp(container) {\n        let controls = findFieldsAndButtons(container);\n        return u.sequence(u.map(controls, disableControlTemp));\n    }\n    function disableControlTemp(control) {\n        if (control.disabled)\n            return;\n        let focusFallback;\n        if (document.activeElement === control) {\n            focusFallback = findGroup(control);\n            control.disabled = true;\n            up.focus(focusFallback, { force: true, preventScroll: true });\n        }\n        else {\n            control.disabled = true;\n        }\n        return () => { control.disabled = false; };\n    }\n    function getDisableContainers(disable, origin) {\n        let originScope = () => getRegion(origin);\n        if (disable === true) {\n            return [originScope()];\n        }\n        else if (u.isElement(disable)) {\n            return [disable];\n        }\n        else if (u.isString(disable)) {\n            return up.fragment.subtree(originScope(), disable, { origin });\n        }\n        else if (u.isArray(disable)) {\n            return u.flatMap(disable, (d) => getDisableContainers(d, origin));\n        }\n        else {\n            return [];\n        }\n    }\n    function getDisablePreviewFn(disable, origin) {\n        return function (preview) {\n            let containers = getDisableContainers(disable, origin);\n            for (let container of containers) {\n                preview.disable(container);\n            }\n        };\n    }\n    function setContainerDisabled(container, disabled) {\n        for (let control of findFieldsAndButtons(container)) {\n            control.disabled = disabled;\n        }\n    }\n    function destinationOptions(form, options, parserOptions) {\n        options = u.options(options);\n        form = getForm(form);\n        const parser = new up.OptionsParser(form, options, parserOptions);\n        parser.string('contentType', { attr: 'enctype' });\n        parser.json('headers');\n        const paramParts = [\n            up.Params.fromForm(form),\n            e.jsonAttr(form, 'up-params'),\n        ];\n        const headerParts = [\n            e.jsonAttr(form, 'up-headers'),\n        ];\n        const submitButton = (options.submitButton ??= findSubmitButtons(form)[0]);\n        if (submitButton) {\n            paramParts.push(up.Params.fromFields(submitButton), e.jsonAttr(submitButton, 'up-params'));\n            headerParts.push(e.jsonAttr(submitButton, 'up-headers'));\n            options.method ||= submitButton.getAttribute('formmethod');\n            options.url ||= submitButton.getAttribute('formaction');\n        }\n        options.params = up.Params.merge(...paramParts, options.params);\n        options.headers = u.merge(...headerParts, options.headers);\n        parser.string('url', { attr: 'action', default: up.fragment.source(form) });\n        parser.string('method', {\n            attr: ['up-method', 'data-method', 'method'],\n            default: 'GET',\n            normalize: u.normalizeMethod\n        });\n        if (options.method === 'GET') {\n            options.url = up.Params.stripURL(options.url);\n        }\n        return options;\n    }\n    function submitButtonOverrides(submitButton) {\n        if (!submitButton)\n            return {};\n        let followOptions = up.link.followOptions(submitButton, {}, { defaults: false });\n        return u.omit(followOptions, ['method', 'url', 'guardEvent', 'origin', 'params', 'headers']);\n    }\n    function watch(...args) {\n        let [root, options, callback] = u.args(args, 'val', 'options', 'callback');\n        root = up.element.get(root);\n        callback ||= watchCallbackFromElement(root) || up.fail('No callback given for up.watch()');\n        const watcher = new up.FieldWatcher(root, options, callback);\n        return watcher.start();\n    }\n    function watchCallbackFromElement(element) {\n        let rawCallback = element.getAttribute('up-watch');\n        if (rawCallback) {\n            return up.NonceableCallback.fromString(rawCallback).toFunction('value', 'name', 'options').bind(element);\n        }\n    }\n    function autosubmit(target, options = {}) {\n        const onChange = (_diff, renderOptions) => submit(target, renderOptions);\n        return watch(target, { logPrefix: 'up.autosubmit()', ...options, batch: true }, onChange);\n    }\n    function getGroupSelectors() {\n        return up.migrate.migratedFormGroupSelectors?.() || config.groupSelectors;\n    }\n    function findGroup(field) {\n        return findGroupSolution(field).element;\n    }\n    function findGroupSolution(field) {\n        return u.findResult(getGroupSelectors(), function (groupSelector) {\n            let group = field.closest(groupSelector);\n            if (group) {\n                let strongDerivedGroupTarget = up.fragment.tryToTarget(group, { strong: true });\n                let goodDerivedFieldTarget = up.fragment.tryToTarget(field);\n                let groupHasFieldTarget = goodDerivedFieldTarget && (group !== field) && `${groupSelector}:has(${goodDerivedFieldTarget})`;\n                let target = strongDerivedGroupTarget || groupHasFieldTarget;\n                if (target) {\n                    return {\n                        target,\n                        element: group,\n                        origin: field\n                    };\n                }\n            }\n        });\n    }\n    function validate(...args) {\n        let options = parseValidateArgs(...args);\n        let form = getForm(options.origin);\n        let validator = getFormValidator(form);\n        return validator.validate(options);\n    }\n    function parseValidateArgs(originOrTarget, ...args) {\n        const options = u.extractOptions(args);\n        if (options.origin) {\n            options.target ||= up.fragment.toTarget(originOrTarget);\n        }\n        else {\n            options.origin ||= up.fragment.get(originOrTarget);\n        }\n        return options;\n    }\n    function getForm(element) {\n        return getLiteralForm(element) || getClosestForm(element) || getAssociatedForm(element);\n    }\n    function getLiteralForm(element) {\n        if (element instanceof HTMLFormElement)\n            return element;\n    }\n    function getClosestForm(element) {\n        return element.closest('form');\n    }\n    function getAssociatedForm(element) {\n        let formID = element.getAttribute('form');\n        if (formID) {\n            let selector = 'form' + e.idSelector(formID);\n            return up.fragment.get(selector, { layer: element });\n        }\n    }\n    function getFormValidator(form) {\n        return form.upFormValidator ||= setupFormValidator(form);\n    }\n    function setupFormValidator(form) {\n        const validator = new up.FormValidator(form);\n        const stop = validator.start();\n        up.destructor(form, stop);\n        return validator;\n    }\n    function getRegion(origin) {\n        return getOriginRegion(origin) || up.layer.current.element;\n    }\n    function getOriginRegion(origin) {\n        if (origin) {\n            return getForm(origin) || up.layer.get(origin)?.element;\n        }\n    }\n    const trackFields = up.mockable(function (...args) {\n        let [root, { guard }, callback] = u.args(args, 'val', 'options', 'callback');\n        let filter = function (fields) {\n            let region = getRegion(root);\n            return u.filter(fields, function (field) {\n                return (root === region || root.contains(field))\n                    && (getRegion(field) === region)\n                    && (!guard || guard(field));\n            });\n        };\n        return up.fragment.trackSelector(fieldSelector(), { filter }, callback);\n    });\n    function focusedField() {\n        return u.presence(document.activeElement, isField);\n    }\n    function isSubmittable(form) {\n        form = up.fragment.get(form);\n        return config.matches(form, 'submitSelectors');\n    }\n    up.on('submit', config.selectorFn('submitSelectors'), function (event, form) {\n        const submitButton = u.presence(event.submitter, isSubmitButton);\n        if (submitButton?.getAttribute('up-submit') === 'false')\n            return;\n        if (event.defaultPrevented)\n            return;\n        up.event.halt(event, { log: true });\n        up.error.muteUncriticalRejection(submit(form, { submitButton }));\n    });\n    up.compiler('[up-validate]', { rerun: true }, function (element) {\n        let form = getForm(element);\n        if (form)\n            getFormValidator(form);\n    });\n    up.compiler('[up-switch]', (switcher) => {\n        return new up.Switcher(switcher).start();\n    });\n    up.attribute('up-watch', (formOrField) => watch(formOrField));\n    up.attribute('up-autosubmit', (formOrField) => autosubmit(formOrField, { logPrefix: '[up-autosubmit]' }));\n    return {\n        config,\n        submit,\n        submitOptions,\n        destinationOptions,\n        submitButtonOverrides,\n        watchOptions,\n        validateOptions,\n        isSubmittable,\n        watch,\n        validate,\n        autosubmit,\n        fieldSelector,\n        fields: findFields,\n        trackFields,\n        isField,\n        submitButtons: findSubmitButtons,\n        focusedField,\n        disableTemp: disableContainerTemp,\n        setDisabled: setContainerDisabled,\n        getDisablePreviewFn,\n        group: findGroup,\n        groupSolution: findGroupSolution,\n        groupSelectors: getGroupSelectors,\n        get: getForm,\n        getRegion,\n    };\n})();\nup.submit = up.form.submit;\nup.watch = up.form.watch;\nup.autosubmit = up.form.autosubmit;\nup.validate = up.form.validate;\n\n\n/***/ }),\n/* 101 */\n/***/ (() => {\n\nup.status = (function () {\n    const u = up.util;\n    const e = up.element;\n    const config = new up.Config(() => ({\n        currentClasses: ['up-current'],\n        activeClasses: ['up-active'],\n        loadingClasses: ['up-loading'],\n        navSelectors: ['[up-nav]', 'nav'],\n        noNavSelectors: ['[up-nav=false]'],\n    }));\n    let namedPreviewFns = new up.Registry('preview');\n    const SELECTOR_LINK = 'a, [up-href]';\n    function linkCurrentURLs(link) {\n        return link.upCurrentURLs ||= new up.LinkCurrentURLs(link);\n    }\n    function getNavLocations(nav) {\n        let layerRef = e.attr(nav, 'up-layer') || 'origin';\n        let layers = up.layer.getAll(layerRef, { origin: nav });\n        return u.compact(layers.map(getMatchableLayerLocation));\n    }\n    function updateNav(nav, links, { newLinks, anyLocationChanged }) {\n        let currentLocations = (!anyLocationChanged && nav.upNavLocations) || getNavLocations(nav);\n        if (newLinks || !u.isEqual(nav.upNavLocations, currentLocations)) {\n            for (let link of links) {\n                const isCurrent = linkCurrentURLs(link).isAnyCurrent(currentLocations);\n                for (let currentClass of config.currentClasses) {\n                    link.classList.toggle(currentClass, isCurrent);\n                }\n                e.setAttrPresence(link, 'aria-current', 'page', isCurrent);\n            }\n            nav.upNavLocations = currentLocations;\n        }\n    }\n    function updateNavsAround(root, opts) {\n        const navSelector = config.selector('navSelectors');\n        const fullNavs = e.around(root, navSelector);\n        for (let fullNav of fullNavs) {\n            let links = e.subtree(fullNav, SELECTOR_LINK);\n            updateNav(fullNav, links, opts);\n        }\n    }\n    function getMatchableLayerLocation(layer) {\n        return u.matchableURL(layer.location);\n    }\n    function findActivatableAreas(element) {\n        return element.upExpandedPair || [element];\n    }\n    function runPreviews(request, renderOptions) {\n        let { bindLayer } = request;\n        let focusCapsule = up.FocusCapsule.preserve(bindLayer);\n        let applyPreviews = () => doRunPreviews(request, renderOptions);\n        let revertPreviews = bindLayer.asCurrent(applyPreviews);\n        focusCapsule?.autoVoid();\n        return () => {\n            bindLayer.asCurrent(revertPreviews);\n            focusCapsule?.restore(bindLayer, { preventScroll: true });\n        };\n    }\n    function doRunPreviews(request, renderOptions) {\n        let { fragment, fragments, origin } = request;\n        let cleaner = u.cleaner();\n        let previewForFragment = (fragment) => new up.Preview({ fragment, request, renderOptions, cleaner });\n        let singlePreview = previewForFragment(fragment);\n        singlePreview.run(resolvePreviewFns(renderOptions.preview));\n        singlePreview.run(getPlaceholderPreviewFn(renderOptions.placeholder));\n        singlePreview.run(getFeedbackClassesPreviewFn(renderOptions.feedback, fragments));\n        singlePreview.run(up.form.getDisablePreviewFn(renderOptions.disable, origin));\n        for (let fragment of fragments) {\n            let eachPreview = previewForFragment(fragment);\n            eachPreview.run(e.matchSelectorMap(renderOptions.previewMap, fragment));\n            eachPreview.run(e.matchSelectorMap(renderOptions.placeholderMap, fragment).flatMap(getPlaceholderPreviewFn));\n        }\n        return cleaner.clean;\n    }\n    function getPlaceholderPreviewFn(placeholder) {\n        if (!placeholder)\n            return;\n        return function (preview) {\n            preview.showPlaceholder(placeholder);\n        };\n    }\n    function resolvePreviewFns(value) {\n        if (u.isFunction(value)) {\n            return [value];\n        }\n        else if (u.isString(value)) {\n            return resolvePreviewString(value);\n        }\n        else if (u.isArray(value)) {\n            return value.flatMap(resolvePreviewFns);\n        }\n        else {\n            return [];\n        }\n    }\n    function resolvePreviewString(str) {\n        return u.map(u.parseScalarJSONPairs(str), ([name, parsedOptions]) => {\n            let previewFn = namedPreviewFns.get(name);\n            return function (preview, runOptions) {\n                up.puts('[up-preview]', 'Showing preview %o', name);\n                return previewFn(preview, parsedOptions || runOptions);\n            };\n        });\n    }\n    function getActiveElements({ origin, activeElements }) {\n        activeElements ||= u.wrapList(origin);\n        return u.flatMap(activeElements, findActivatableAreas);\n    }\n    function getFeedbackClassesPreviewFn(feedbackOption, fragments) {\n        if (!feedbackOption)\n            return;\n        return function (preview) {\n            preview.addClassBatch(getActiveElements(preview.renderOptions), config.activeClasses);\n            preview.addClassBatch(fragments, config.loadingClasses);\n        };\n    }\n    function statusOptions(element, options, parserOptions) {\n        options = u.options(options);\n        const parser = new up.OptionsParser(element, options, parserOptions);\n        parser.booleanOrString('disable');\n        parser.boolean('feedback');\n        parser.string('preview');\n        parser.booleanOrString('revalidatePreview');\n        parser.string('placeholder');\n        return options;\n    }\n    up.on('up:fragment:compile', (_event, newFragment) => {\n        updateNavsAround(newFragment, { newLinks: true, anyLocationChanged: false });\n    });\n    up.on('up:layer:location:changed up:layer:opened up:layer:dismissed up:layer:accepted', () => {\n        updateNavsAround(document.body, { newLinks: false, anyLocationChanged: true });\n    });\n    return {\n        config,\n        preview: namedPreviewFns.put,\n        resolvePreviewFns,\n        runPreviews,\n        statusOptions,\n    };\n})();\nup.preview = up.status.preview;\n\n\n/***/ }),\n/* 102 */\n/***/ (() => {\n\nup.radio = (function () {\n    const e = up.element;\n    const config = new up.Config(() => ({\n        hungrySelectors: ['[up-hungry]'],\n        noHungrySelectors: ['[up-hungry=false]'],\n        pollInterval: 30000,\n    }));\n    function hungrySteps(renderOptions) {\n        let { hungry, origin, layer: renderLayer, meta } = renderOptions;\n        let steps = { current: [], other: [] };\n        if (!hungry)\n            return steps;\n        let hungrySelector = config.selector('hungrySelectors');\n        const layerPreference = [renderLayer, ...renderLayer.ancestors, ...renderLayer.descendants];\n        for (let elementLayer of layerPreference) {\n            let hungries = up.fragment.all(elementLayer.element, hungrySelector, { layer: elementLayer });\n            for (let element of hungries) {\n                let selector = up.fragment.tryToTarget(element, { origin });\n                if (!selector) {\n                    up.warn('[up-hungry]', 'Ignoring untargetable fragment %o', element);\n                    continue;\n                }\n                let ifLayer = e.attr(element, 'up-if-layer');\n                let applicableLayers = ifLayer ? up.layer.getAll(ifLayer, { baseLayer: elementLayer }) : [elementLayer];\n                let motionOptions = up.motion.motionOptions(element);\n                let selectEvent = up.event.build('up:fragment:hungry', { log: false });\n                let selectCallback = e.callbackAttr(element, 'up-on-hungry', { exposedKeys: ['newFragment', 'renderOptions'] });\n                let step = {\n                    selector,\n                    oldElement: element,\n                    layer: elementLayer,\n                    origin,\n                    ...motionOptions,\n                    placement: 'swap',\n                    keep: true,\n                    maybe: true,\n                    meta,\n                    selectEvent,\n                    selectCallback,\n                    originalRenderOptions: renderOptions,\n                };\n                if (applicableLayers.includes(renderLayer)) {\n                    let list = renderLayer === elementLayer ? steps.current : steps.other;\n                    list.push(step);\n                }\n            }\n        }\n        steps.other = up.fragment.compressNestedSteps(steps.other);\n        return steps;\n    }\n    function startPolling(fragment, options = {}) {\n        up.FragmentPolling.forFragment(fragment).forceStart(options);\n    }\n    function stopPolling(element) {\n        up.FragmentPolling.forFragment(element).forceStop();\n    }\n    function pollOptions(fragment, options = {}) {\n        const defaults = { background: true };\n        const parser = new up.OptionsParser(fragment, options, { defaults });\n        parser.number('interval', { default: config.pollInterval });\n        parser.string('ifLayer', { default: 'front' });\n        parser.include(up.link.requestOptions);\n        parser.include(up.status.statusOptions);\n        return options;\n    }\n    up.attribute('up-poll', function (fragment) {\n        up.FragmentPolling.forFragment(fragment).onPollAttributeObserved();\n    });\n    up.macro('[up-flashes]', function (fragment) {\n        e.setMissingAttrs(fragment, {\n            'up-hungry': '',\n            'up-if-layer': 'subtree',\n            'up-keep': '',\n            'role': 'alert',\n        });\n        fragment.addEventListener('up:fragment:keep', function (event) {\n            if (!e.isEmpty(event.newFragment))\n                event.preventDefault();\n        });\n    });\n    return {\n        config,\n        hungrySteps,\n        startPolling,\n        stopPolling,\n        pollOptions,\n    };\n})();\n\n\n/***/ }),\n/* 103 */\n/***/ (() => {\n\n(function () {\n    const e = up.element;\n    function isRails() {\n        return window.Rails ||\n            window.jQuery?.rails;\n    }\n    for (let feature of ['method', 'confirm']) {\n        const upAttribute = `up-${feature}`;\n        const dataAttribute = `data-${feature}`;\n        up.macro(`a[${dataAttribute}]`, function (link) {\n            if (isRails() && up.link.isFollowable(link)) {\n                e.setMissingAttr(link, upAttribute, link.getAttribute(dataAttribute));\n                link.removeAttribute(dataAttribute);\n            }\n        });\n    }\n})();\n\n\n/***/ })\n/******/ \t]);\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.\n(() => {\n__webpack_require__(1);\n__webpack_require__(2);\n__webpack_require__(3);\n__webpack_require__(4);\n__webpack_require__(5);\n__webpack_require__(6);\n__webpack_require__(7);\n__webpack_require__(9);\n__webpack_require__(10);\n__webpack_require__(11);\n__webpack_require__(12);\n__webpack_require__(13);\n__webpack_require__(14);\n__webpack_require__(15);\n__webpack_require__(16);\n__webpack_require__(17);\n__webpack_require__(18);\n__webpack_require__(19);\n__webpack_require__(20);\n__webpack_require__(21);\n__webpack_require__(22);\n__webpack_require__(23);\n__webpack_require__(24);\n__webpack_require__(25);\n__webpack_require__(26);\n__webpack_require__(27);\n__webpack_require__(28);\n__webpack_require__(29);\n__webpack_require__(30);\n__webpack_require__(31);\n__webpack_require__(32);\n__webpack_require__(33);\n__webpack_require__(34);\n__webpack_require__(35);\n__webpack_require__(36);\n__webpack_require__(37);\n__webpack_require__(38);\n__webpack_require__(39);\n__webpack_require__(40);\n__webpack_require__(41);\n__webpack_require__(42);\n__webpack_require__(43);\n__webpack_require__(44);\n__webpack_require__(45);\n__webpack_require__(46);\n__webpack_require__(47);\n__webpack_require__(48);\n__webpack_require__(49);\n__webpack_require__(50);\n__webpack_require__(51);\n__webpack_require__(52);\n__webpack_require__(53);\n__webpack_require__(54);\n__webpack_require__(55);\n__webpack_require__(56);\n__webpack_require__(57);\n__webpack_require__(58);\n__webpack_require__(59);\n__webpack_require__(60);\n__webpack_require__(61);\n__webpack_require__(62);\n__webpack_require__(63);\n__webpack_require__(64);\n__webpack_require__(65);\n__webpack_require__(66);\n__webpack_require__(67);\n__webpack_require__(68);\n__webpack_require__(69);\n__webpack_require__(70);\n__webpack_require__(71);\n__webpack_require__(72);\n__webpack_require__(73);\n__webpack_require__(74);\n__webpack_require__(75);\n__webpack_require__(76);\n__webpack_require__(77);\n__webpack_require__(78);\n__webpack_require__(79);\n__webpack_require__(80);\n__webpack_require__(81);\n__webpack_require__(82);\n__webpack_require__(83);\n__webpack_require__(84);\n__webpack_require__(85);\n__webpack_require__(86);\n__webpack_require__(87);\n__webpack_require__(88);\n__webpack_require__(89);\n__webpack_require__(91);\n__webpack_require__(93);\n__webpack_require__(94);\n__webpack_require__(96);\n__webpack_require__(98);\n__webpack_require__(100);\n__webpack_require__(101);\n__webpack_require__(102);\n__webpack_require__(103);\nup.framework.onEvaled();\n\n})();\n\n/******/ })()\n;", "export default new class Environment {\n\n  toString() {\n    return document.body.getAttribute('data-environment')\n  }\n\n  get isTest() {\n    return this.toString() === 'test'\n  }\n\n  get isDevelopment() {\n    return this.toString() === 'development'\n  }\n\n}()\n", "import environment from '../util/environment'\n\nup.layer.config.modal.dismissable = ['key', 'button']\n\n// Some articles link to files which need to be handled without Unpoly. Note that this can not be `[href^=\"/system/\"]` because link hrefs are sometimes \"../../../system/...\" or similar.\nup.link.config.noFollowSelectors.push('[href*=\"/system/\"]')\n\nup.status.config.currentClasses.push('active')\n\nup.form.config.submitSelectors.push('form')\n\nup.fragment.config.runScripts = false\n\nup.history.config.updateMetaTags = true\n\nup.motion.config.enabled = !environment.isTest\n", "up.link.config.followSelectors.push('a[href]')\nup.link.config.instantSelectors.push('a[href]')\nup.link.config.noInstantSelectors.push('.btn:not(.btn-link)')\n", "import '../../shared/config/unpoly.js'\nimport '../../shared/config/unpoly_follow_all.js'\nimport '../../shared/config/unpoly.sass'\n\nup.link.config.preloadSelectors.push('a[href]')\nup.status.config.navSelectors = up.status.config.navSelectors.filter(selector => selector !== 'nav')\n", "\n        import * as module0 from './shared/components/autofocus.js';import * as module1 from './shared/components/content_loading.js';import * as module2 from './shared/components/data_confirm.js';import * as module3 from './shared/components/file_input.js';import * as module4 from './shared/components/flash_message.js';import * as module5 from './shared/components/input_type_number.js';import * as module6 from './shared/components/lazysizes.js'\n\n        const modules = [module0,module1,module2,module3,module4,module5,module6];\n\n        export default modules;\n        export const filenames = ['./shared/components/autofocus.js','./shared/components/content_loading.js','./shared/components/data_confirm.js','./shared/components/file_input.js','./shared/components/flash_message.js','./shared/components/input_type_number.js','./shared/components/lazysizes.js']\n      ", "class Application {\n\n  constructor() {\n    this.configurations = {}\n  }\n\n  configure(configKey, data) {\n    const config = new Configuration(data)\n    this.configurations[configKey] = config\n    return config\n  }\n\n  getConfiguration(configKey) {\n    return this.configurations[configKey]\n  }\n\n}\n\nclass Configuration {\n\n  constructor(data) {\n    for (const [key, value] of Object.entries(data)) {\n      Object.defineProperty(this, key, {\n        get: () => value,\n        configurable: true, // to allow Jasmine's spyOnProperty\n      })\n    }\n  }\n\n}\n\nexport default new Application()\n", "export default class Timeout {\n  constructor(callback, microseconds = 0) {\n    this.callback = callback\n    this.timerId = null\n    this.startedAt = null\n    this.initialMicroseconds = microseconds\n    this.microsecondsLeft = microseconds\n    this.paused = false\n    this.resume()\n  }\n\n  get percent() {\n    const percent = Math.round(100 * this.elapsed / this.initialMicroseconds)\n    return Math.max(0, Math.min(100, percent))\n  }\n\n  get percentRemaining() {\n    return 100 - this.percent\n  }\n\n  get elapsed() {\n    return this.initialMicroseconds - this.remaining\n  }\n\n  get remaining() {\n    return Math.max(0, this.microsecondsLeft - this._getMicrosecondsSinceLastStarted())\n  }\n\n  pause() {\n    this.clear()\n    this.microsecondsLeft -= this._getMicrosecondsSinceLastStarted()\n    this.paused = true\n  }\n\n  resume() {\n    this.clear()\n    this.startedAt = new Date()\n    this.timerId = window.setTimeout(this.callback, this.microsecondsLeft)\n    this.paused = false\n  }\n\n  clear() {\n    window.clearTimeout(this.timerId)\n  }\n\n  _getMicrosecondsSinceLastStarted() {\n    return this.paused ? 0 : new Date() - this.startedAt\n  }\n}\n", "import application from '../util/application'\nimport environment from '../util/environment'\nimport Timeout from '../util/timeout'\n\nconst config = application.configure('[flash-message]', {\n  timeoutDelay: 5000,\n  updateFrequency: 100,\n})\n\nup.compiler('[flash-message]', (element) => {\n  const indicator = element.querySelector('[flash-message--timer-indicator]')\n  const closeButton = element.querySelector('[flash-message--close]')\n\n  function updateIndicator() {\n    const percent = removeTimer ? removeTimer.percent : 0\n\n    if (!environment.isTest) {\n      up.element.setStyle(indicator, {\n        transition: `width ${config.updateFrequency}ms linear`,\n        width: `${percent}%`,\n      })\n    }\n  }\n\n  function removeAutomatically() {\n    if (environment.isTest) {\n      // We don't want to remove flashes automatically in feature tests because\n      // - tests might not see flashes if they are slow,\n      // - it could cause flickering behavior if flashes cover elements only sometimes.\n    } else {\n      updateIndicator()\n      remove()\n    }\n  }\n\n  function remove() {\n    window.clearInterval(updateIndicatorInterval)\n    removeTimer.clear()\n    up.animate(element, 'move-to-top').then(() => { element.remove() })\n  }\n\n  const removeTimer = new Timeout(removeAutomatically, config.timeoutDelay)\n  const updateIndicatorInterval = window.setInterval(updateIndicator, config.updateFrequency)\n\n  updateIndicator()\n  element.addEventListener('mouseenter', () => { removeTimer.pause() })\n  element.addEventListener('mouseleave', () => { removeTimer.resume() })\n  closeButton.addEventListener('click', remove)\n\n  return remove\n})\n", "import 'lazysizes'\nimport 'lazysizes/plugins/parent-fit/ls.parent-fit'\n\nfunction revealSource(target) {\n  const imageUrl = target.getAttribute('lazy-src')\n\n  if (imageUrl) {\n    target.src = imageUrl\n    target.classList.add('lazyloaded')\n  }\n}\n\nfunction revealBackground(target) {\n  const backgroundImageUrl = target.getAttribute('lazy-bg')\n  if (backgroundImageUrl) {\n    target.style.backgroundImage = `url(\"${backgroundImageUrl}\")`\n    target.classList.add('lazy-bg-loaded')\n  }\n}\n\ndocument.addEventListener('lazybeforeunveil', (event) => {\n  const target = event.target\n  revealSource(target)\n  revealBackground(target)\n})\n", "export default function observeResizeDebounced(elementOrElements, callback, { delay = 100 } = {}) {\n  let debounceTimeout\n\n  function debouncedCallback() {\n    clearTimeout(debounceTimeout)\n    debounceTimeout = setTimeout(callback, delay)\n  }\n\n  const resizeObserver = new ResizeObserver(debouncedCallback)\n  up.util.wrapList(elementOrElements).forEach((element) => {\n    resizeObserver.observe(element)\n  })\n\n  return function destructor() {\n    resizeObserver.disconnect()\n  }\n}\n", "import observeResizeDebounced from '../../util/debounced_resize_observer'\n\nup.compiler('.nav-tabs', (element) => {\n  function update() {\n    element.style.setProperty('--nav-height', `${element.clientHeight}px`)\n\n    const activeTab = element.querySelector('.nav-link.active')\n    activeTab?.scrollIntoView({ behavior: 'auto', block: 'nearest', inline: 'center' })\n  }\n\n  update()\n\n  return [\n    observeResizeDebounced([element], update),\n  ]\n})\n", "\n        import * as module0 from './frontend/components/bootstrap_ext/nav_tabs.js';import * as module1 from './frontend/components/events_page.js';import * as module2 from './frontend/components/filterable_list.js';import * as module3 from './frontend/components/layout.js';import * as module4 from './frontend/components/lightbox_gallery.js';import * as module5 from './frontend/components/lightbox_image.js';import * as module6 from './frontend/components/search_form.js';import * as module7 from './frontend/components/track_page_view.js'\n\n        const modules = [module0,module1,module2,module3,module4,module5,module6,module7];\n\n        export default modules;\n        export const filenames = ['./frontend/components/bootstrap_ext/nav_tabs.js','./frontend/components/events_page.js','./frontend/components/filterable_list.js','./frontend/components/layout.js','./frontend/components/lightbox_gallery.js','./frontend/components/lightbox_image.js','./frontend/components/search_form.js','./frontend/components/track_page_view.js']\n      ", "import observeResizeDebounced from '../util/debounced_resize_observer'\n\nup.compiler('.layout', (element) => {\n  function update() {\n    if (up.layer.current === up.layer.root) {\n      element.style.setProperty('--scrollbar-width', `${window.innerWidth - document.body.clientWidth}px`)\n    }\n  }\n\n  update()\n\n  return [\n    observeResizeDebounced([element], update),\n  ]\n})\n", "/** @typedef {import('../photoswipe.js').Point} Point */\r\n\r\n/** @typedef {undefined | null | false | '' | 0} Falsy */\r\n/** @typedef {keyof HTMLElementTagNameMap} HTMLElementTagName */\r\n\r\n/**\r\n * @template {HTMLElementTagName | Falsy} [T=\"div\"]\r\n * @template {Node | undefined} [NodeToAppendElementTo=undefined]\r\n * @param {string=} className\r\n * @param {T=} [tagName]\r\n * @param {NodeToAppendElementTo=} appendToEl\r\n * @returns {T extends HTMLElementTagName ? HTMLElementTagNameMap[T] : HTMLElementTagNameMap['div']}\r\n */\r\nexport function createElement(className, tagName, appendToEl) {\r\n  const el = document.createElement(tagName || 'div');\r\n  if (className) {\r\n    el.className = className;\r\n  }\r\n  if (appendToEl) {\r\n    appendToEl.appendChild(el);\r\n  }\r\n  // @ts-expect-error\r\n  return el;\r\n}\r\n\r\n/**\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function equalizePoints(p1, p2) {\r\n  p1.x = p2.x;\r\n  p1.y = p2.y;\r\n  if (p2.id !== undefined) {\r\n    p1.id = p2.id;\r\n  }\r\n  return p1;\r\n}\r\n\r\n/**\r\n * @param {Point} p\r\n */\r\nexport function roundPoint(p) {\r\n  p.x = Math.round(p.x);\r\n  p.y = Math.round(p.y);\r\n}\r\n\r\n/**\r\n * Returns distance between two points.\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function getDistanceBetween(p1, p2) {\r\n  const x = Math.abs(p1.x - p2.x);\r\n  const y = Math.abs(p1.y - p2.y);\r\n  return Math.sqrt((x * x) + (y * y));\r\n}\r\n\r\n/**\r\n * Whether X and Y positions of points are qual\r\n *\r\n * @param {Point} p1\r\n * @param {Point} p2\r\n */\r\nexport function pointsEqual(p1, p2) {\r\n  return p1.x === p2.x && p1.y === p2.y;\r\n}\r\n\r\n/**\r\n * The float result between the min and max values.\r\n *\r\n * @param {number} val\r\n * @param {number} min\r\n * @param {number} max\r\n */\r\nexport function clamp(val, min, max) {\r\n  return Math.min(Math.max(val, min), max);\r\n}\r\n\r\n/**\r\n * Get transform string\r\n *\r\n * @param {number} x\r\n * @param {number=} y\r\n * @param {number=} scale\r\n */\r\nexport function toTransformString(x, y, scale) {\r\n  let propValue = 'translate3d('\r\n    + x + 'px,' + (y || 0) + 'px'\r\n    + ',0)';\r\n\r\n  if (scale !== undefined) {\r\n    propValue += ' scale3d('\r\n      + scale + ',' + scale\r\n      + ',1)';\r\n  }\r\n\r\n  return propValue;\r\n}\r\n\r\n/**\r\n * Apply transform:translate(x, y) scale(scale) to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {number} x\r\n * @param {number=} y\r\n * @param {number=} scale\r\n */\r\nexport function setTransform(el, x, y, scale) {\r\n  el.style.transform = toTransformString(x, y, scale);\r\n}\r\n\r\nconst defaultCSSEasing = 'cubic-bezier(.4,0,.22,1)';\r\n\r\n/**\r\n * Apply CSS transition to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string=} prop CSS property to animate\r\n * @param {number=} duration in ms\r\n * @param {string=} ease CSS easing function\r\n */\r\nexport function setTransitionStyle(el, prop, duration, ease) {\r\n  // inOut: 'cubic-bezier(.4, 0, .22, 1)', // for \"toggle state\" transitions\r\n  // out: 'cubic-bezier(0, 0, .22, 1)', // for \"show\" transitions\r\n  // in: 'cubic-bezier(.4, 0, 1, 1)'// for \"hide\" transitions\r\n  el.style.transition = prop\r\n    ? (prop + ' ' + duration + 'ms ' + (ease || defaultCSSEasing))\r\n    : 'none';\r\n}\r\n\r\n/**\r\n * Apply width and height CSS properties to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {string | number} w\r\n * @param {string | number} h\r\n */\r\nexport function setWidthHeight(el, w, h) {\r\n  el.style.width = (typeof w === 'number') ? (w + 'px') : w;\r\n  el.style.height = (typeof h === 'number') ? (h + 'px') : h;\r\n}\r\n\r\n/**\r\n * @param {HTMLElement} el\r\n */\r\nexport function removeTransitionStyle(el) {\r\n  setTransitionStyle(el);\r\n}\r\n\r\n/**\r\n * @param {HTMLImageElement} img\r\n * @returns {Promise<HTMLImageElement | void>}\r\n */\r\nexport function decodeImage(img) {\r\n  if ('decode' in img) {\r\n    return img.decode();\r\n  }\r\n\r\n  if (img.complete) {\r\n    return Promise.resolve(img);\r\n  }\r\n\r\n  return new Promise((resolve, reject) => {\r\n    img.onload = () => resolve(img);\r\n    img.onerror = reject;\r\n  });\r\n}\r\n\r\n/** @typedef {LOAD_STATE[keyof LOAD_STATE]} LoadState */\r\n/** @type {{ IDLE: 'idle'; LOADING: 'loading'; LOADED: 'loaded'; ERROR: 'error' }} */\r\nexport const LOAD_STATE = {\r\n  IDLE: 'idle',\r\n  LOADING: 'loading',\r\n  LOADED: 'loaded',\r\n  ERROR: 'error',\r\n};\r\n\r\n\r\n/**\r\n * Check if click or keydown event was dispatched\r\n * with a special key or via mouse wheel.\r\n *\r\n * @param {MouseEvent | KeyboardEvent} e\r\n */\r\nexport function specialKeyUsed(e) {\r\n  if (e.which === 2 || e.ctrlKey || e.metaKey || e.altKey || e.shiftKey) {\r\n    return true;\r\n  }\r\n}\r\n\r\n/**\r\n * Parse `gallery` or `children` options.\r\n *\r\n * @param {HTMLElement | NodeListOf<HTMLElement> | string} option\r\n * @param {string=} legacySelector\r\n * @param {HTMLElement | Document} [parent]\r\n * @returns HTMLElement[]\r\n */\r\nexport function getElementsFromOption(option, legacySelector, parent = document) {\r\n  /** @type {HTMLElement[]} */\r\n  let elements = [];\r\n\r\n  if (option instanceof Element) {\r\n    elements = [option];\r\n  } else if (option instanceof NodeList || Array.isArray(option)) {\r\n    elements = Array.from(option);\r\n  } else {\r\n    const selector = typeof option === 'string' ? option : legacySelector;\r\n    if (selector) {\r\n      elements = Array.from(parent.querySelectorAll(selector));\r\n    }\r\n  }\r\n\r\n  return elements;\r\n}\r\n\r\n/**\r\n * Check if variable is PhotoSwipe class\r\n *\r\n * @param {any} fn\r\n */\r\nexport function isPswpClass(fn) {\r\n  return typeof fn === 'function'\r\n    && fn.prototype\r\n    && fn.prototype.goTo;\r\n}\r\n", "/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../ui/ui-element.js').UIElementData} UIElementData */\r\n/** @typedef {import('../slide/content.js').default} ContentDefault */\r\n/** @typedef {import('../slide/slide.js').default} Slide */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n/** @typedef {import('../slide/zoom-level.js').default} ZoomLevel */\r\n/** @typedef {import('../slide/get-thumb-bounds.js').Bounds} Bounds */\r\n\r\n/**\r\n * Allow adding an arbitrary props to the Content\r\n * https://photoswipe.com/custom-content/#using-webp-image-format\r\n * @typedef {ContentDefault & Record<string, any>} Content\r\n */\r\n/** @typedef {{ x?: number; y?: number }} Point */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeEventsMap https://photoswipe.com/events/\r\n *\r\n *\r\n * https://photoswipe.com/adding-ui-elements/\r\n *\r\n * @prop {undefined} uiRegister\r\n * @prop {{ data: UIElementData }} uiElementCreate\r\n *\r\n *\r\n * https://photoswipe.com/events/#initialization-events\r\n *\r\n * @prop {undefined} beforeOpen\r\n * @prop {undefined} firstUpdate\r\n * @prop {undefined} initialLayout\r\n * @prop {undefined} change\r\n * @prop {undefined} afterInit\r\n * @prop {undefined} bindEvents\r\n *\r\n *\r\n * https://photoswipe.com/events/#opening-or-closing-transition-events\r\n *\r\n * @prop {undefined} openingAnimationStart\r\n * @prop {undefined} openingAnimationEnd\r\n * @prop {undefined} closingAnimationStart\r\n * @prop {undefined} closingAnimationEnd\r\n *\r\n *\r\n * https://photoswipe.com/events/#closing-events\r\n *\r\n * @prop {undefined} close\r\n * @prop {undefined} destroy\r\n *\r\n *\r\n * https://photoswipe.com/events/#pointer-and-gesture-events\r\n *\r\n * @prop {{ originalEvent: PointerEvent }} pointerDown\r\n * @prop {{ originalEvent: PointerEvent }} pointerMove\r\n * @prop {{ originalEvent: PointerEvent }} pointerUp\r\n * @prop {{ bgOpacity: number }} pinchClose can be default prevented\r\n * @prop {{ panY: number }} verticalDrag can be default prevented\r\n *\r\n *\r\n * https://photoswipe.com/events/#slide-content-events\r\n *\r\n * @prop {{ content: Content }} contentInit\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoad can be default prevented\r\n * @prop {{ content: Content; isLazy: boolean }} contentLoadImage can be default prevented\r\n * @prop {{ content: Content; slide: Slide; isError?: boolean }} loadComplete\r\n * @prop {{ content: Content; slide: Slide }} loadError\r\n * @prop {{ content: Content; width: number; height: number }} contentResize can be default prevented\r\n * @prop {{ content: Content; width: number; height: number; slide: Slide }} imageSizeChange\r\n * @prop {{ content: Content }} contentLazyLoad can be default prevented\r\n * @prop {{ content: Content }} contentAppend can be default prevented\r\n * @prop {{ content: Content }} contentActivate can be default prevented\r\n * @prop {{ content: Content }} contentDeactivate can be default prevented\r\n * @prop {{ content: Content }} contentRemove can be default prevented\r\n * @prop {{ content: Content }} contentDestroy can be default prevented\r\n *\r\n *\r\n * undocumented\r\n *\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} imageClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} bgClickAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} tapAction can be default prevented\r\n * @prop {{ point: Point; originalEvent: PointerEvent }} doubleTapAction can be default prevented\r\n *\r\n * @prop {{ originalEvent: KeyboardEvent }} keydown can be default prevented\r\n * @prop {{ x: number; dragging: boolean }} moveMainScroll\r\n * @prop {{ slide: Slide }} firstZoomPan\r\n * @prop {{ slide: Slide, data: SlideData, index: number }} gettingData\r\n * @prop {undefined} beforeResize\r\n * @prop {undefined} resize\r\n * @prop {undefined} viewportSize\r\n * @prop {undefined} updateScrollOffset\r\n * @prop {{ slide: Slide }} slideInit\r\n * @prop {{ slide: Slide }} afterSetContent\r\n * @prop {{ slide: Slide }} slideLoad\r\n * @prop {{ slide: Slide }} appendHeavy can be default prevented\r\n * @prop {{ slide: Slide }} appendHeavyContent\r\n * @prop {{ slide: Slide }} slideActivate\r\n * @prop {{ slide: Slide }} slideDeactivate\r\n * @prop {{ slide: Slide }} slideDestroy\r\n * @prop {{ destZoomLevel: number, centerPoint: Point, transitionDuration: number | false }} beforeZoomTo\r\n * @prop {{ slide: Slide }} zoomPanUpdate\r\n * @prop {{ slide: Slide }} initialZoomPan\r\n * @prop {{ slide: Slide }} calcSlideSize\r\n * @prop {undefined} resolutionChanged\r\n * @prop {{ originalEvent: WheelEvent }} wheel can be default prevented\r\n * @prop {{ content: Content }} contentAppendImage can be default prevented\r\n * @prop {{ index: number; itemData: SlideData }} lazyLoadSlide can be default prevented\r\n * @prop {undefined} lazyLoad\r\n * @prop {{ slide: Slide }} calcBounds\r\n * @prop {{ zoomLevels: ZoomLevel, slideData: SlideData }} zoomLevelsUpdate\r\n *\r\n *\r\n * legacy\r\n *\r\n * @prop {undefined} init\r\n * @prop {undefined} initialZoomIn\r\n * @prop {undefined} initialZoomOut\r\n * @prop {undefined} initialZoomInEnd\r\n * @prop {undefined} initialZoomOutEnd\r\n * @prop {{ dataSource: DataSource, numItems: number }} numItems\r\n * @prop {{ itemData: SlideData; index: number }} itemData\r\n * @prop {{ index: number, itemData: SlideData, instance: PhotoSwipe }} thumbBounds\r\n */\r\n\r\n/**\r\n * @typedef {Object} PhotoSwipeFiltersMap https://photoswipe.com/filters/\r\n *\r\n * @prop {(numItems: number, dataSource: DataSource) => number} numItems\r\n * Modify the total amount of slides. Example on Data sources page.\r\n * https://photoswipe.com/filters/#numitems\r\n *\r\n * @prop {(itemData: SlideData, index: number) => SlideData} itemData\r\n * Modify slide item data. Example on Data sources page.\r\n * https://photoswipe.com/filters/#itemdata\r\n *\r\n * @prop {(itemData: SlideData, element: HTMLElement, linkEl: HTMLAnchorElement) => SlideData} domItemData\r\n * Modify item data when it's parsed from DOM element. Example on Data sources page.\r\n * https://photoswipe.com/filters/#domitemdata\r\n *\r\n * @prop {(clickedIndex: number, e: MouseEvent, instance: PhotoSwipeLightbox) => number} clickedIndex\r\n * Modify clicked gallery item index.\r\n * https://photoswipe.com/filters/#clickedindex\r\n *\r\n * @prop {(placeholderSrc: string | false, content: Content) => string | false} placeholderSrc\r\n * Modify placeholder image source.\r\n * https://photoswipe.com/filters/#placeholdersrc\r\n *\r\n * @prop {(isContentLoading: boolean, content: Content) => boolean} isContentLoading\r\n * Modify if the content is currently loading.\r\n * https://photoswipe.com/filters/#iscontentloading\r\n *\r\n * @prop {(isContentZoomable: boolean, content: Content) => boolean} isContentZoomable\r\n * Modify if the content can be zoomed.\r\n * https://photoswipe.com/filters/#iscontentzoomable\r\n *\r\n * @prop {(useContentPlaceholder: boolean, content: Content) => boolean} useContentPlaceholder\r\n * Modify if the placeholder should be used for the content.\r\n * https://photoswipe.com/filters/#usecontentplaceholder\r\n *\r\n * @prop {(isKeepingPlaceholder: boolean, content: Content) => boolean} isKeepingPlaceholder\r\n * Modify if the placeholder should be kept after the content is loaded.\r\n * https://photoswipe.com/filters/#iskeepingplaceholder\r\n *\r\n *\r\n * @prop {(contentErrorElement: HTMLElement, content: Content) => HTMLElement} contentErrorElement\r\n * Modify an element when the content has error state (for example, if image cannot be loaded).\r\n * https://photoswipe.com/filters/#contenterrorelement\r\n *\r\n * @prop {(element: HTMLElement, data: UIElementData) => HTMLElement} uiElement\r\n * Modify a UI element that's being created.\r\n * https://photoswipe.com/filters/#uielement\r\n *\r\n * @prop {(thumbnail: HTMLElement, itemData: SlideData, index: number) => HTMLElement} thumbEl\r\n * Modify the thubmnail element from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbel\r\n *\r\n * @prop {(thumbBounds: Bounds, itemData: SlideData, index: number) => Bounds} thumbBounds\r\n * Modify the thubmnail bounds from which opening zoom animation starts or ends.\r\n * https://photoswipe.com/filters/#thumbbounds\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeFiltersMap} T\r\n * @typedef {{ fn: PhotoSwipeFiltersMap[T], priority: number }} Filter<T>\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {PhotoSwipeEventsMap[T] extends undefined ? PhotoSwipeEvent<T> : PhotoSwipeEvent<T> & PhotoSwipeEventsMap[T]} AugmentedEvent\r\n */\r\n\r\n/**\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n * @typedef {(event: AugmentedEvent<T>) => void} EventCallback<T>\r\n */\r\n\r\n/**\r\n * Base PhotoSwipe event object\r\n *\r\n * @template {keyof PhotoSwipeEventsMap} T\r\n */\r\nclass PhotoSwipeEvent {\r\n  /**\r\n   * @param {T} type\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   */\r\n  constructor(type, details) {\r\n    this.type = type;\r\n    if (details) {\r\n      Object.assign(this, details);\r\n    }\r\n  }\r\n\r\n  preventDefault() {\r\n    this.defaultPrevented = true;\r\n  }\r\n}\r\n\r\n/**\r\n * PhotoSwipe base class that can listen and dispatch for events.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox, extended by base.js\r\n */\r\nclass Eventable {\r\n  constructor() {\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeEventsMap]?: ((event: AugmentedEvent<T>) => void)[] }}\r\n     */\r\n    this._listeners = {};\r\n\r\n    /**\r\n     * @type {{ [T in keyof PhotoSwipeFiltersMap]?: Filter<T>[] }}\r\n     */\r\n    this._filters = {};\r\n\r\n    /** @type {PhotoSwipe=} */\r\n    this.pswp = undefined;\r\n\r\n    /** @type {PhotoSwipeOptions} */\r\n    this.options = undefined;\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   * @param {number} priority\r\n   */\r\n  addFilter(name, fn, priority = 100) {\r\n    if (!this._filters[name]) {\r\n      this._filters[name] = [];\r\n    }\r\n\r\n    this._filters[name].push({ fn, priority });\r\n    this._filters[name].sort((f1, f2) => f1.priority - f2.priority);\r\n\r\n    if (this.pswp) {\r\n      this.pswp.addFilter(name, fn, priority);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeFiltersMap[T]} fn\r\n   */\r\n  removeFilter(name, fn) {\r\n    if (this._filters[name]) {\r\n      // @ts-expect-error\r\n      this._filters[name] = this._filters[name].filter(filter => (filter.fn !== fn));\r\n    }\r\n\r\n    if (this.pswp) {\r\n      this.pswp.removeFilter(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeFiltersMap} T\r\n   * @param {T} name\r\n   * @param {Parameters<PhotoSwipeFiltersMap[T]>} args\r\n   * @returns {Parameters<PhotoSwipeFiltersMap[T]>[0]}\r\n   */\r\n  applyFilters(name, ...args) {\r\n    if (this._filters[name]) {\r\n      this._filters[name].forEach((filter) => {\r\n        // @ts-expect-error\r\n        args[0] = filter.fn.apply(this, args);\r\n      });\r\n    }\r\n    return args[0];\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  on(name, fn) {\r\n    if (!this._listeners[name]) {\r\n      this._listeners[name] = [];\r\n    }\r\n    this._listeners[name].push(fn);\r\n\r\n    // When binding events to lightbox,\r\n    // also bind events to PhotoSwipe Core,\r\n    // if it's open.\r\n    if (this.pswp) {\r\n      this.pswp.on(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {EventCallback<T>} fn\r\n   */\r\n  off(name, fn) {\r\n    if (this._listeners[name]) {\r\n      // @ts-expect-error\r\n      this._listeners[name] = this._listeners[name].filter(listener => (fn !== listener));\r\n    }\r\n\r\n    if (this.pswp) {\r\n      this.pswp.off(name, fn);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @template {keyof PhotoSwipeEventsMap} T\r\n   * @param {T} name\r\n   * @param {PhotoSwipeEventsMap[T]} [details]\r\n   * @returns {AugmentedEvent<T>}\r\n   */\r\n  dispatch(name, details) {\r\n    if (this.pswp) {\r\n      return this.pswp.dispatch(name, details);\r\n    }\r\n\r\n    const event = /** @type {AugmentedEvent<T>} */ (new PhotoSwipeEvent(name, details));\r\n\r\n    if (!this._listeners) {\r\n      return event;\r\n    }\r\n\r\n    if (this._listeners[name]) {\r\n      this._listeners[name].forEach((listener) => {\r\n        listener.call(this, event);\r\n      });\r\n    }\r\n\r\n    return event;\r\n  }\r\n}\r\n\r\nexport default Eventable;\r\n", "import { createElement, setWidthHeight, toTransformString } from '../util/util.js';\r\n\r\nclass Placeholder {\r\n  /**\r\n   * @param {string | false} imageSrc\r\n   * @param {HTMLElement} container\r\n   */\r\n  constructor(imageSrc, container) {\r\n    // Create placeholder\r\n    // (stretched thumbnail or simple div behind the main image)\r\n    this.element = createElement(\r\n      'pswp__img pswp__img--placeholder',\r\n      imageSrc ? 'img' : '',\r\n      container\r\n    );\r\n\r\n    if (imageSrc) {\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).decoding = 'async';\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).alt = '';\r\n      /** @type {HTMLImageElement} */\r\n      (this.element).src = imageSrc;\r\n      this.element.setAttribute('role', 'presentation');\r\n    }\r\n\r\n    this.element.setAttribute('aria-hiden', 'true');\r\n  }\r\n\r\n  /**\r\n   * @param {number} width\r\n   * @param {number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.element.tagName === 'IMG') {\r\n      // Use transform scale() to modify img placeholder size\r\n      // (instead of changing width/height directly).\r\n      // This helps with performance, specifically in iOS15 Safari.\r\n      setWidthHeight(this.element, 250, 'auto');\r\n      this.element.style.transformOrigin = '0 0';\r\n      this.element.style.transform = toTransformString(0, 0, width / 250);\r\n    } else {\r\n      setWidthHeight(this.element, width, height);\r\n    }\r\n  }\r\n\r\n  destroy() {\r\n    if (this.element.parentNode) {\r\n      this.element.remove();\r\n    }\r\n    this.element = null;\r\n  }\r\n}\r\n\r\nexport default Placeholder;\r\n", "import { createElement, LOAD_STATE, setWidthHeight } from '../util/util.js';\r\nimport Placeholder from './placeholder.js';\r\n\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../util/util.js').LoadState} LoadState */\r\n\r\nclass Content {\r\n  /**\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {PhotoSwipe} instance PhotoSwipe or PhotoSwipeLightbox instance\r\n   * @param {number} index\r\n   */\r\n  constructor(itemData, instance, index) {\r\n    this.instance = instance;\r\n    this.data = itemData;\r\n    this.index = index;\r\n\r\n    /** @type {HTMLImageElement | HTMLDivElement} */\r\n    this.element = undefined;\r\n\r\n    this.width = Number(this.data.w) || Number(this.data.width) || 0;\r\n    this.height = Number(this.data.h) || Number(this.data.height) || 0;\r\n\r\n    this.isAttached = false;\r\n    this.hasSlide = false;\r\n    /** @type {LoadState} */\r\n    this.state = LOAD_STATE.IDLE;\r\n\r\n    if (this.data.type) {\r\n      this.type = this.data.type;\r\n    } else if (this.data.src) {\r\n      this.type = 'image';\r\n    } else {\r\n      this.type = 'html';\r\n    }\r\n\r\n    this.instance.dispatch('contentInit', { content: this });\r\n  }\r\n\r\n  removePlaceholder() {\r\n    if (this.placeholder && !this.keepPlaceholder()) {\r\n      // With delay, as image might be loaded, but not rendered\r\n      setTimeout(() => {\r\n        if (this.placeholder) {\r\n          this.placeholder.destroy();\r\n          this.placeholder = null;\r\n        }\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload content\r\n   *\r\n   * @param {boolean=} isLazy\r\n   * @param {boolean=} reload\r\n   */\r\n  load(isLazy, reload) {\r\n    if (!this.placeholder && this.slide && this.usePlaceholder()) {\r\n      // use   -based placeholder only for the first slide,\r\n      // as rendering (even small stretched thumbnail) is an expensive operation\r\n      const placeholderSrc = this.instance.applyFilters(\r\n        'placeholderSrc',\r\n        (this.data.msrc && this.slide.isFirstSlide) ? this.data.msrc : false,\r\n        this\r\n      );\r\n      this.placeholder = new Placeholder(\r\n        placeholderSrc,\r\n        this.slide.container\r\n      );\r\n    }\r\n\r\n    if (this.element && !reload) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentLoad', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent()) {\r\n      this.loadImage(isLazy);\r\n    } else {\r\n      this.element = createElement('pswp__content');\r\n      this.element.innerHTML = this.data.html || '';\r\n    }\r\n\r\n    if (reload && this.slide) {\r\n      this.slide.updateContentSize(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Preload image\r\n   *\r\n   * @param {boolean} isLazy\r\n   */\r\n  loadImage(isLazy) {\r\n    const imageElement = createElement('pswp__img', 'img');\r\n    this.element = imageElement;\r\n\r\n    if (this.instance.dispatch('contentLoadImage', { content: this, isLazy }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.data.srcset) {\r\n      imageElement.srcset = this.data.srcset;\r\n    }\r\n\r\n    imageElement.src = this.data.src;\r\n\r\n    imageElement.alt = this.data.alt || '';\r\n\r\n    this.state = LOAD_STATE.LOADING;\r\n\r\n    if (imageElement.complete) {\r\n      this.onLoaded();\r\n    } else {\r\n      imageElement.onload = () => {\r\n        this.onLoaded();\r\n      };\r\n\r\n      imageElement.onerror = () => {\r\n        this.onError();\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Assign slide to content\r\n   *\r\n   * @param {Slide} slide\r\n   */\r\n  setSlide(slide) {\r\n    this.slide = slide;\r\n    this.hasSlide = true;\r\n    this.instance = slide.pswp;\r\n\r\n    // todo: do we need to unset slide?\r\n  }\r\n\r\n  /**\r\n   * Content load success handler\r\n   */\r\n  onLoaded() {\r\n    this.state = LOAD_STATE.LOADED;\r\n\r\n    if (this.slide) {\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, content: this });\r\n\r\n      // if content is reloaded\r\n      if (this.slide.isActive\r\n          && this.slide.heavyAppended\r\n          && !this.element.parentNode) {\r\n        this.slide.container.innerHTML = '';\r\n        this.append();\r\n        this.slide.updateContentSize(true);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Content load error handler\r\n   */\r\n  onError() {\r\n    this.state = LOAD_STATE.ERROR;\r\n\r\n    if (this.slide) {\r\n      this.displayError();\r\n      this.instance.dispatch('loadComplete', { slide: this.slide, isError: true, content: this });\r\n      this.instance.dispatch('loadError', { slide: this.slide, content: this });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {Boolean} If the content is currently loading\r\n   */\r\n  isLoading() {\r\n    return this.instance.applyFilters(\r\n      'isContentLoading',\r\n      this.state === LOAD_STATE.LOADING,\r\n      this\r\n    );\r\n  }\r\n\r\n  isError() {\r\n    return this.state === LOAD_STATE.ERROR;\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content is image\r\n   */\r\n  isImageContent() {\r\n    return this.type === 'image';\r\n  }\r\n\r\n  /**\r\n   * Update content size\r\n   *\r\n   * @param {Number} width\r\n   * @param {Number} height\r\n   */\r\n  setDisplayedSize(width, height) {\r\n    if (!this.element) {\r\n      return;\r\n    }\r\n\r\n    if (this.placeholder) {\r\n      this.placeholder.setDisplayedSize(width, height);\r\n    }\r\n\r\n    // eslint-disable-next-line max-len\r\n    if (this.instance.dispatch('contentResize', { content: this, width, height }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    setWidthHeight(this.element, width, height);\r\n\r\n    if (this.isImageContent() && !this.isError()) {\r\n      const image = /** @type HTMLImageElement */ (this.element);\r\n\r\n      // Handle srcset sizes attribute.\r\n      //\r\n      // Never lower quality, if it was increased previously.\r\n      // Chrome does this automatically, Firefox and Safari do not,\r\n      // so we store largest used size in dataset.\r\n      if (image.srcset\r\n          // eslint-disable-next-line max-len\r\n          && (!image.dataset.largestUsedSize || width > parseInt(image.dataset.largestUsedSize, 10))) {\r\n        image.sizes = width + 'px';\r\n        image.dataset.largestUsedSize = String(width);\r\n      }\r\n\r\n      if (this.slide) {\r\n        // eslint-disable-next-line max-len\r\n        this.instance.dispatch('imageSizeChange', { slide: this.slide, width, height, content: this });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If the content can be zoomed\r\n   */\r\n  isZoomable() {\r\n    return this.instance.applyFilters(\r\n      'isContentZoomable',\r\n      this.isImageContent() && (this.state !== LOAD_STATE.ERROR),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If content should use a placeholder (from msrc by default)\r\n   */\r\n  usePlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'useContentPlaceholder',\r\n      this.isImageContent(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Preload content with lazy-loading param\r\n   */\r\n  lazyLoad() {\r\n    if (this.instance.dispatch('contentLazyLoad', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.load(true);\r\n  }\r\n\r\n  /**\r\n   * @returns {boolean} If placeholder should be kept after content is loaded\r\n   */\r\n  keepPlaceholder() {\r\n    return this.instance.applyFilters(\r\n      'isKeepingPlaceholder',\r\n      this.isLoading(),\r\n      this\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Destroy the content\r\n   */\r\n  destroy() {\r\n    this.hasSlide = false;\r\n    this.slide = null;\r\n\r\n    if (this.instance.dispatch('contentDestroy', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    this.remove();\r\n\r\n    if (this.isImageContent() && this.element) {\r\n      this.element.onload = null;\r\n      this.element.onerror = null;\r\n      this.element = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Display error message\r\n   */\r\n  displayError() {\r\n    if (this.slide) {\r\n      /** @type {HTMLElement} */\r\n      let errorMsgEl = createElement('pswp__error-msg');\r\n      errorMsgEl.innerText = this.instance.options.errorMsg;\r\n      errorMsgEl = this.instance.applyFilters(\r\n        'contentErrorElement',\r\n        errorMsgEl,\r\n        this\r\n      );\r\n      this.element = createElement('pswp__content pswp__error-msg-container');\r\n      this.element.appendChild(errorMsgEl);\r\n      this.slide.container.innerHTML = '';\r\n      this.slide.container.appendChild(this.element);\r\n      this.slide.updateContentSize(true);\r\n      this.removePlaceholder();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the content\r\n   */\r\n  append() {\r\n    this.isAttached = true;\r\n\r\n    if (this.state === LOAD_STATE.ERROR) {\r\n      this.displayError();\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppend', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.isImageContent()) {\r\n      // Use decode() on nearby slides\r\n      //\r\n      // Nearby slide images are in DOM and not hidden via display:none.\r\n      // However, they are placed offscreen (to the left and right side).\r\n      //\r\n      // Some browsers do not composite the image until it's actually visible,\r\n      // using decode() helps.\r\n      //\r\n      // You might ask \"why dont you just decode() and then append all images\",\r\n      // that's because I want to show image before it's fully loaded,\r\n      // as browser can render parts of image while it is loading.\r\n      if (this.slide\r\n          && !this.slide.isActive\r\n          && ('decode' in this.element)) {\r\n        this.isDecoding = true;\r\n        // Make sure that we start decoding on the next frame\r\n        requestAnimationFrame(() => {\r\n          // element might change\r\n          if (this.element && this.element.tagName === 'IMG') {\r\n            /** @type {HTMLImageElement} */\r\n            (this.element).decode().then(() => {\r\n              this.isDecoding = false;\r\n              requestAnimationFrame(() => {\r\n                this.appendImage();\r\n              });\r\n            }).catch(() => {\r\n              this.isDecoding = false;\r\n            });\r\n          }\r\n        });\r\n      } else {\r\n        if (this.placeholder\r\n          // eslint-disable-next-line max-len\r\n          && (this.state === LOAD_STATE.LOADED || /** @type {LoadState} */ (this.state) === LOAD_STATE.ERROR)\r\n        ) {\r\n          this.removePlaceholder();\r\n        }\r\n        this.appendImage();\r\n      }\r\n    } else if (this.element && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Activate the slide,\r\n   * active slide is generally the current one,\r\n   * meaning the user can see it.\r\n   */\r\n  activate() {\r\n    if (this.instance.dispatch('contentActivate', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.slide) {\r\n      if (this.isImageContent() && this.isDecoding) {\r\n        // add image to slide when it becomes active,\r\n        // even if it's not finished decoding\r\n        this.appendImage();\r\n      } else if (this.isError()) {\r\n        this.load(false, true); // try to reload\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Deactivate the content\r\n   */\r\n  deactivate() {\r\n    this.instance.dispatch('contentDeactivate', { content: this });\r\n  }\r\n\r\n\r\n  /**\r\n   * Remove the content from DOM\r\n   */\r\n  remove() {\r\n    this.isAttached = false;\r\n\r\n    if (this.instance.dispatch('contentRemove', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    if (this.element && this.element.parentNode) {\r\n      this.element.remove();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Append the image content to slide container\r\n   */\r\n  appendImage() {\r\n    if (!this.isAttached) {\r\n      return;\r\n    }\r\n\r\n    if (this.instance.dispatch('contentAppendImage', { content: this }).defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    // ensure that element exists and is not already appended\r\n    if (this.slide && this.element && !this.element.parentNode) {\r\n      this.slide.container.appendChild(this.element);\r\n\r\n      if (this.placeholder\r\n        && (this.state === LOAD_STATE.LOADED || this.state === LOAD_STATE.ERROR)) {\r\n        this.removePlaceholder();\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport default Content;\r\n", "import Eventable from './eventable.js';\r\nimport {\r\n  getElementsFromOption\r\n} from '../util/util.js';\r\nimport Content from '../slide/content.js';\r\n\r\n/** @typedef {import(\"../photoswipe.js\").default} PhotoSwipe */\r\n/** @typedef {import(\"../photoswipe.js\").PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import(\"../slide/slide.js\").SlideData} SlideData */\r\n\r\n/**\r\n * PhotoSwipe base class that can retrieve data about every slide.\r\n * Shared by PhotoSwipe Core and PhotoSwipe Lightbox\r\n */\r\nclass PhotoSwipeBase extends Eventable {\r\n  /**\r\n   * Get total number of slides\r\n   *\r\n   * @returns {number}\r\n   */\r\n  getNumItems() {\r\n    let numItems;\r\n    const { dataSource } = this.options;\r\n    if (!dataSource) {\r\n      numItems = 0;\r\n    } else if ('length' in dataSource) {\r\n      // may be an array or just object with length property\r\n      numItems = dataSource.length;\r\n    } else if ('gallery' in dataSource) {\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      if (dataSource.items) {\r\n        numItems = dataSource.items.length;\r\n      }\r\n    }\r\n\r\n    // legacy event, before filters were introduced\r\n    const event = this.dispatch('numItems', {\r\n      dataSource,\r\n      numItems\r\n    });\r\n    return this.applyFilters('numItems', event.numItems, dataSource);\r\n  }\r\n\r\n  /**\r\n   * @param {SlideData} slideData\r\n   * @param {number} index\r\n   */\r\n  createContentFromData(slideData, index) {\r\n    // @ts-expect-error\r\n    return new Content(slideData, this, index);\r\n  }\r\n\r\n  /**\r\n   * Get item data by index.\r\n   *\r\n   * \"item data\" should contain normalized information that PhotoSwipe needs to generate a slide.\r\n   * For example, it may contain properties like\r\n   * `src`, `srcset`, `w`, `h`, which will be used to generate a slide with image.\r\n   *\r\n   * @param {number} index\r\n   */\r\n  getItemData(index) {\r\n    const { dataSource } = this.options;\r\n    let dataSourceItem;\r\n    if (Array.isArray(dataSource)) {\r\n      // Datasource is an array of elements\r\n      dataSourceItem = dataSource[index];\r\n    } else if (dataSource && dataSource.gallery) {\r\n      // dataSource has gallery property,\r\n      // thus it was created by Lightbox, based on\r\n      // gallery and children options\r\n\r\n      // query DOM elements\r\n      if (!dataSource.items) {\r\n        dataSource.items = this._getGalleryDOMElements(dataSource.gallery);\r\n      }\r\n\r\n      dataSourceItem = dataSource.items[index];\r\n    }\r\n\r\n    let itemData = dataSourceItem;\r\n\r\n    if (itemData instanceof Element) {\r\n      itemData = this._domElementToItemData(itemData);\r\n    }\r\n\r\n    // Dispatching the itemData event,\r\n    // it's a legacy verion before filters were introduced\r\n    const event = this.dispatch('itemData', {\r\n      itemData: itemData || {},\r\n      index\r\n    });\r\n\r\n    return this.applyFilters('itemData', event.itemData, index);\r\n  }\r\n\r\n  /**\r\n   * Get array of gallery DOM elements,\r\n   * based on childSelector and gallery element.\r\n   *\r\n   * @param {HTMLElement} galleryElement\r\n   */\r\n  _getGalleryDOMElements(galleryElement) {\r\n    if (this.options.children || this.options.childSelector) {\r\n      return getElementsFromOption(\r\n        this.options.children,\r\n        this.options.childSelector,\r\n        galleryElement\r\n      ) || [];\r\n    }\r\n\r\n    return [galleryElement];\r\n  }\r\n\r\n  /**\r\n   * Converts DOM element to item data object.\r\n   *\r\n   * @param {HTMLElement} element DOM element\r\n   */\r\n  // eslint-disable-next-line class-methods-use-this\r\n  _domElementToItemData(element) {\r\n    /** @type {SlideData} */\r\n    const itemData = {\r\n      element\r\n    };\r\n\r\n    // eslint-disable-next-line max-len\r\n    const linkEl = /** @type {HTMLAnchorElement} */ (element.tagName === 'A' ? element : element.querySelector('a'));\r\n\r\n    if (linkEl) {\r\n      // src comes from data-pswp-src attribute,\r\n      // if it's empty link href is used\r\n      itemData.src = linkEl.dataset.pswpSrc || linkEl.href;\r\n\r\n      if (linkEl.dataset.pswpSrcset) {\r\n        itemData.srcset = linkEl.dataset.pswpSrcset;\r\n      }\r\n\r\n      itemData.width = parseInt(linkEl.dataset.pswpWidth, 10);\r\n      itemData.height = parseInt(linkEl.dataset.pswpHeight, 10);\r\n\r\n      // support legacy w & h properties\r\n      itemData.w = itemData.width;\r\n      itemData.h = itemData.height;\r\n\r\n      if (linkEl.dataset.pswpType) {\r\n        itemData.type = linkEl.dataset.pswpType;\r\n      }\r\n\r\n      const thumbnailEl = element.querySelector('img');\r\n\r\n      if (thumbnailEl) {\r\n        // msrc is URL to placeholder image that's displayed before large image is loaded\r\n        // by default it's displayed only for the first slide\r\n        itemData.msrc = thumbnailEl.currentSrc || thumbnailEl.src;\r\n        itemData.alt = thumbnailEl.getAttribute('alt');\r\n      }\r\n\r\n      if (linkEl.dataset.pswpCropped || linkEl.dataset.cropped) {\r\n        itemData.thumbCropped = true;\r\n      }\r\n    }\r\n\r\n    return this.applyFilters('domItemData', itemData, element, linkEl);\r\n  }\r\n}\r\n\r\nexport default PhotoSwipeBase;\r\n", "/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {PhotoSwipe} pswp\r\n */\r\nexport function getViewportSize(options, pswp) {\r\n  if (options.getViewportSizeFn) {\r\n    const newViewportSize = options.getViewportSizeFn(options, pswp);\r\n    if (newViewportSize) {\r\n      return newViewportSize;\r\n    }\r\n  }\r\n\r\n  return {\r\n    x: document.documentElement.clientWidth,\r\n\r\n    // TODO: height on mobile is very incosistent due to toolbar\r\n    // find a way to improve this\r\n    //\r\n    // document.documentElement.clientHeight - doesn't seem to work well\r\n    y: window.innerHeight\r\n  };\r\n}\r\n\r\n/**\r\n * Parses padding option.\r\n * Supported formats:\r\n *\r\n * // Object\r\n * padding: {\r\n *  top: 0,\r\n *  bottom: 0,\r\n *  left: 0,\r\n *  right: 0\r\n * }\r\n *\r\n * // A function that returns the object\r\n * paddingFn: (viewportSize, itemData, index) => {\r\n *  return {\r\n *    top: 0,\r\n *    bottom: 0,\r\n *    left: 0,\r\n *    right: 0\r\n *  };\r\n * }\r\n *\r\n * // Legacy variant\r\n * paddingLeft: 0,\r\n * paddingRight: 0,\r\n * paddingTop: 0,\r\n * paddingBottom: 0,\r\n *\r\n * @param {'left' | 'top' | 'bottom' | 'right'} prop\r\n * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n * @param {{ x?: number; y?: number }} viewportSize PhotoSwipe viewport size, for example: { x:800, y:600 }\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {number} index Slide index\r\n * @returns {number}\r\n */\r\nexport function parsePaddingOption(prop, options, viewportSize, itemData, index) {\r\n  /** @type {number} */\r\n  let paddingValue;\r\n\r\n  if (options.paddingFn) {\r\n    paddingValue = options.paddingFn(viewportSize, itemData, index)[prop];\r\n  } else if (options.padding) {\r\n    paddingValue = options.padding[prop];\r\n  } else {\r\n    const legacyPropName = 'padding' + prop[0].toUpperCase() + prop.slice(1);\r\n    // @ts-expect-error\r\n    if (options[legacyPropName]) {\r\n      // @ts-expect-error\r\n      paddingValue = options[legacyPropName];\r\n    }\r\n  }\r\n\r\n  return paddingValue || 0;\r\n}\r\n\r\n/**\r\n * @param {PhotoSwipeOptions} options\r\n * @param {{ x?: number; y?: number }} viewportSize\r\n * @param {SlideData} itemData\r\n * @param {number} index\r\n */\r\nexport function getPanAreaSize(options, viewportSize, itemData, index) {\r\n  return {\r\n    x: viewportSize.x\r\n      - parsePaddingOption('left', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('right', options, viewportSize, itemData, index),\r\n    y: viewportSize.y\r\n      - parsePaddingOption('top', options, viewportSize, itemData, index)\r\n      - parsePaddingOption('bottom', options, viewportSize, itemData, index)\r\n  };\r\n}\r\n", "const MAX_IMAGE_WIDTH = 4000;\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../slide/slide.js').SlideData} SlideData */\r\n\r\n/** @typedef {'fit' | 'fill' | number | ((zoomLevelObject: ZoomLevel) => number)} ZoomLevelOption */\r\n\r\n/**\r\n * Calculates zoom levels for specific slide.\r\n * Depends on viewport size and image size.\r\n */\r\nclass ZoomLevel {\r\n  /**\r\n   * @param {PhotoSwipeOptions} options PhotoSwipe options\r\n   * @param {SlideData} itemData Slide data\r\n   * @param {number} index Slide index\r\n   * @param {PhotoSwipe=} pswp PhotoSwipe instance, can be undefined if not initialized yet\r\n   */\r\n  constructor(options, itemData, index, pswp) {\r\n    this.pswp = pswp;\r\n    this.options = options;\r\n    this.itemData = itemData;\r\n    this.index = index;\r\n  }\r\n\r\n  /**\r\n   * Calculate initial, secondary and maximum zoom level for the specified slide.\r\n   *\r\n   * It should be called when either image or viewport size changes.\r\n   *\r\n   * @param {number} maxWidth\r\n   * @param {number} maxHeight\r\n   * @param {{ x?: number; y?: number }} panAreaSize\r\n   */\r\n  update(maxWidth, maxHeight, panAreaSize) {\r\n    this.elementSize = {\r\n      x: maxWidth,\r\n      y: maxHeight\r\n    };\r\n\r\n    this.panAreaSize = panAreaSize;\r\n\r\n    const hRatio = this.panAreaSize.x / this.elementSize.x;\r\n    const vRatio = this.panAreaSize.y / this.elementSize.y;\r\n\r\n    this.fit = Math.min(1, hRatio < vRatio ? hRatio : vRatio);\r\n    this.fill = Math.min(1, hRatio > vRatio ? hRatio : vRatio);\r\n\r\n    // zoom.vFill defines zoom level of the image\r\n    // when it has 100% of viewport vertical space (height)\r\n    this.vFill = Math.min(1, vRatio);\r\n\r\n    this.initial = this._getInitial();\r\n    this.secondary = this._getSecondary();\r\n    this.max = Math.max(\r\n      this.initial,\r\n      this.secondary,\r\n      this._getMax()\r\n    );\r\n\r\n    this.min = Math.min(\r\n      this.fit,\r\n      this.initial,\r\n      this.secondary\r\n    );\r\n\r\n    if (this.pswp) {\r\n      this.pswp.dispatch('zoomLevelsUpdate', { zoomLevels: this, slideData: this.itemData });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Parses user-defined zoom option.\r\n   *\r\n   * @private\r\n   * @param {'initial' | 'secondary' | 'max'} optionPrefix Zoom level option prefix (initial, secondary, max)\r\n   */\r\n  _parseZoomLevelOption(optionPrefix) {\r\n    // eslint-disable-next-line max-len\r\n    const optionName = /** @type {'initialZoomLevel' | 'secondaryZoomLevel' | 'maxZoomLevel'} */ (optionPrefix + 'ZoomLevel');\r\n    const optionValue = this.options[optionName];\r\n\r\n    if (!optionValue) {\r\n      return;\r\n    }\r\n\r\n    if (typeof optionValue === 'function') {\r\n      return optionValue(this);\r\n    }\r\n\r\n    if (optionValue === 'fill') {\r\n      return this.fill;\r\n    }\r\n\r\n    if (optionValue === 'fit') {\r\n      return this.fit;\r\n    }\r\n\r\n    return Number(optionValue);\r\n  }\r\n\r\n  /**\r\n   * Get zoom level to which image will be zoomed after double-tap gesture,\r\n   * or when user clicks on zoom icon,\r\n   * or mouse-click on image itself.\r\n   * If you return 1 image will be zoomed to its original size.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getSecondary() {\r\n    let currZoomLevel = this._parseZoomLevelOption('secondary');\r\n\r\n    if (currZoomLevel) {\r\n      return currZoomLevel;\r\n    }\r\n\r\n    // 3x of \"fit\" state, but not larger than original\r\n    currZoomLevel = Math.min(1, this.fit * 3);\r\n\r\n    if (currZoomLevel * this.elementSize.x > MAX_IMAGE_WIDTH) {\r\n      currZoomLevel = MAX_IMAGE_WIDTH / this.elementSize.x;\r\n    }\r\n\r\n    return currZoomLevel;\r\n  }\r\n\r\n  /**\r\n   * Get initial image zoom level.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getInitial() {\r\n    return this._parseZoomLevelOption('initial') || this.fit;\r\n  }\r\n\r\n  /**\r\n   * Maximum zoom level when user zooms\r\n   * via zoom/pinch gesture,\r\n   * via cmd/ctrl-wheel or via trackpad.\r\n   *\r\n   * @private\r\n   * @return {number}\r\n   */\r\n  _getMax() {\r\n    const currZoomLevel = this._parseZoomLevelOption('max');\r\n\r\n    if (currZoomLevel) {\r\n      return currZoomLevel;\r\n    }\r\n\r\n    // max zoom level is x4 from \"fit state\",\r\n    // used for zoom gesture and ctrl/trackpad zoom\r\n    return Math.max(1, this.fit * 4);\r\n  }\r\n}\r\n\r\nexport default ZoomLevel;\r\n", "import { getViewportSize, getPanAreaSize } from '../util/viewport-size.js';\r\nimport ZoomLevel from './zoom-level.js';\r\n\r\n/** @typedef {import('./content.js').default} Content */\r\n/** @typedef {import('./slide.js').default} Slide */\r\n/** @typedef {import('./slide.js').SlideData} SlideData */\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../lightbox/lightbox.js').default} PhotoSwipeLightbox */\r\n\r\nconst MIN_SLIDES_TO_CACHE = 5;\r\n\r\n/**\r\n * Lazy-load an image\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * @param {SlideData} itemData Data about the slide\r\n * @param {PhotoSwipe | PhotoSwipeLightbox} instance PhotoSwipe or PhotoSwipeLightbox\r\n * @param {number} index\r\n * @returns Image that is being decoded or false.\r\n */\r\nexport function lazyLoadData(itemData, instance, index) {\r\n  // src/slide/content/content.js\r\n  const content = instance.createContentFromData(itemData, index);\r\n\r\n  if (!content || !content.lazyLoad) {\r\n    return;\r\n  }\r\n\r\n  const { options } = instance;\r\n\r\n  // We need to know dimensions of the image to preload it,\r\n  // as it might use srcset and we need to define sizes\r\n  // @ts-expect-error should provide pswp instance?\r\n  const viewportSize = instance.viewportSize || getViewportSize(options, instance);\r\n  const panAreaSize = getPanAreaSize(options, viewportSize, itemData, index);\r\n\r\n  const zoomLevel = new ZoomLevel(options, itemData, -1);\r\n  zoomLevel.update(content.width, content.height, panAreaSize);\r\n\r\n  content.lazyLoad();\r\n  content.setDisplayedSize(\r\n    Math.ceil(content.width * zoomLevel.initial),\r\n    Math.ceil(content.height * zoomLevel.initial)\r\n  );\r\n\r\n  return content;\r\n}\r\n\r\n\r\n/**\r\n * Lazy-loads specific slide.\r\n * This function is used both by Lightbox and PhotoSwipe core,\r\n * thus it can be called before dialog is opened.\r\n *\r\n * By default it loads image based on viewport size and initial zoom level.\r\n *\r\n * @param {number} index Slide index\r\n * @param {PhotoSwipe | PhotoSwipeLightbox} instance PhotoSwipe or PhotoSwipeLightbox eventable instance\r\n */\r\nexport function lazyLoadSlide(index, instance) {\r\n  const itemData = instance.getItemData(index);\r\n\r\n  if (instance.dispatch('lazyLoadSlide', { index, itemData }).defaultPrevented) {\r\n    return;\r\n  }\r\n\r\n  return lazyLoadData(itemData, instance, index);\r\n}\r\n\r\n\r\nclass ContentLoader {\r\n  /**\r\n   * @param {PhotoSwipe} pswp\r\n   */\r\n  constructor(pswp) {\r\n    this.pswp = pswp;\r\n    // Total amount of cached images\r\n    this.limit = Math.max(\r\n      pswp.options.preload[0] + pswp.options.preload[1] + 1,\r\n      MIN_SLIDES_TO_CACHE\r\n    );\r\n    /** @type {Content[]} */\r\n    this._cachedItems = [];\r\n  }\r\n\r\n  /**\r\n   * Lazy load nearby slides based on `preload` option.\r\n   *\r\n   * @param {number=} diff Difference between slide indexes that was changed recently, or 0.\r\n   */\r\n  updateLazy(diff) {\r\n    const { pswp } = this;\r\n\r\n    if (pswp.dispatch('lazyLoad').defaultPrevented) {\r\n      return;\r\n    }\r\n\r\n    const { preload } = pswp.options;\r\n    const isForward = diff === undefined ? true : (diff >= 0);\r\n    let i;\r\n\r\n    // preload[1] - num items to preload in forward direction\r\n    for (i = 0; i <= preload[1]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? i : (-i)));\r\n    }\r\n\r\n    // preload[0] - num items to preload in backward direction\r\n    for (i = 1; i <= preload[0]; i++) {\r\n      this.loadSlideByIndex(pswp.currIndex + (isForward ? (-i) : i));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} index\r\n   */\r\n  loadSlideByIndex(index) {\r\n    index = this.pswp.getLoopedIndex(index);\r\n    // try to get cached content\r\n    let content = this.getContentByIndex(index);\r\n    if (!content) {\r\n      // no cached content, so try to load from scratch:\r\n      content = lazyLoadSlide(index, this.pswp);\r\n      // if content can be loaded, add it to cache:\r\n      if (content) {\r\n        this.addToCache(content);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {Slide} slide\r\n   */\r\n  getContentBySlide(slide) {\r\n    let content = this.getContentByIndex(slide.index);\r\n    if (!content) {\r\n      // create content if not found in cache\r\n      content = this.pswp.createContentFromData(slide.data, slide.index);\r\n      if (content) {\r\n        this.addToCache(content);\r\n      }\r\n    }\r\n\r\n    if (content) {\r\n      // assign slide to content\r\n      content.setSlide(slide);\r\n    }\r\n    return content;\r\n  }\r\n\r\n  /**\r\n   * @param {Content} content\r\n   */\r\n  addToCache(content) {\r\n    // move to the end of array\r\n    this.removeByIndex(content.index);\r\n    this._cachedItems.push(content);\r\n\r\n    if (this._cachedItems.length > this.limit) {\r\n      // Destroy the first content that's not attached\r\n      const indexToRemove = this._cachedItems.findIndex((item) => {\r\n        return !item.isAttached && !item.hasSlide;\r\n      });\r\n      if (indexToRemove !== -1) {\r\n        const removedItem = this._cachedItems.splice(indexToRemove, 1)[0];\r\n        removedItem.destroy();\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Removes an image from cache, does not destroy() it, just removes.\r\n   *\r\n   * @param {number} index\r\n   */\r\n  removeByIndex(index) {\r\n    const indexToRemove = this._cachedItems.findIndex(item => item.index === index);\r\n    if (indexToRemove !== -1) {\r\n      this._cachedItems.splice(indexToRemove, 1);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @param {number} index\r\n   */\r\n  getContentByIndex(index) {\r\n    return this._cachedItems.find(content => content.index === index);\r\n  }\r\n\r\n  destroy() {\r\n    this._cachedItems.forEach(content => content.destroy());\r\n    this._cachedItems = null;\r\n  }\r\n}\r\n\r\nexport default ContentLoader;\r\n", "import {\r\n  specialKeyUsed,\r\n  getElementsFromOption,\r\n  isPswpClass\r\n} from '../util/util.js';\r\n\r\nimport PhotoSwipeBase from '../core/base.js';\r\nimport { lazyLoadSlide } from '../slide/loader.js';\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('../types.js').Type<T>} Type<T>\r\n */\r\n\r\n/** @typedef {import('../photoswipe.js').default} PhotoSwipe */\r\n/** @typedef {import('../photoswipe.js').PhotoSwipeOptions} PhotoSwipeOptions */\r\n/** @typedef {import('../photoswipe.js').DataSource} DataSource */\r\n/** @typedef {import('../slide/content.js').default} Content */\r\n/** @typedef {import('../core/eventable.js').PhotoSwipeEventsMap} PhotoSwipeEventsMap */\r\n/** @typedef {import('../core/eventable.js').PhotoSwipeFiltersMap} PhotoSwipeFiltersMap */\r\n\r\n/**\r\n * @template T\r\n * @typedef {import('../core/eventable.js').EventCallback<T>} EventCallback<T>\r\n */\r\n\r\n/**\r\n * PhotoSwipe Lightbox\r\n *\r\n * - If user has unsupported browser it falls back to default browser action (just opens URL)\r\n * - Binds click event to links that should open PhotoSwipe\r\n * - parses DOM strcture for PhotoSwipe (retrieves large image URLs and sizes)\r\n * - Initializes PhotoSwipe\r\n *\r\n *\r\n * Loader options use the same object as PhotoSwipe, and supports such options:\r\n *\r\n * gallery - Element | Element[] | NodeList | string selector for the gallery element\r\n * children - Element | Element[] | NodeList | string selector for the gallery children\r\n *\r\n */\r\nclass PhotoSwipeLightbox extends PhotoSwipeBase {\r\n  /**\r\n   * @param {PhotoSwipeOptions} options\r\n   */\r\n  constructor(options) {\r\n    super();\r\n    /** @type {PhotoSwipeOptions} */\r\n    this.options = options || {};\r\n    this._uid = 0;\r\n  }\r\n\r\n  /**\r\n   * Initialize lightbox, should be called only once.\r\n   * It's not included in the main constructor, so you may bind events before it.\r\n   */\r\n  init() {\r\n    this.onThumbnailsClick = this.onThumbnailsClick.bind(this);\r\n\r\n    // Bind click events to each gallery\r\n    getElementsFromOption(this.options.gallery, this.options.gallerySelector)\r\n      .forEach((galleryElement) => {\r\n        galleryElement.addEventListener('click', this.onThumbnailsClick, false);\r\n      });\r\n  }\r\n\r\n  /**\r\n   * @param {MouseEvent} e\r\n   */\r\n  onThumbnailsClick(e) {\r\n    // Exit and allow default browser action if:\r\n    if (specialKeyUsed(e) // ... if clicked with a special key (ctrl/cmd...)\r\n        || window.pswp // ... if PhotoSwipe is already open\r\n        || window.navigator.onLine === false) { // ... if offline\r\n      return;\r\n    }\r\n\r\n    // If both clientX and clientY are 0 or not defined,\r\n    // the event is likely triggered by keyboard,\r\n    // so we do not pass the initialPoint\r\n    //\r\n    // Note that some screen readers emulate the mouse position,\r\n    // so it's not ideal way to detect them.\r\n    //\r\n    let initialPoint = { x: e.clientX, y: e.clientY };\r\n\r\n    if (!initialPoint.x && !initialPoint.y) {\r\n      initialPoint = null;\r\n    }\r\n\r\n    let clickedIndex = this.getClickedIndex(e);\r\n    clickedIndex = this.applyFilters('clickedIndex', clickedIndex, e, this);\r\n    const dataSource = {\r\n      gallery: /** @type {HTMLElement} */ (e.currentTarget)\r\n    };\r\n\r\n    if (clickedIndex >= 0) {\r\n      e.preventDefault();\r\n      this.loadAndOpen(clickedIndex, dataSource, initialPoint);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Get index of gallery item that was clicked.\r\n   *\r\n   * @param {MouseEvent} e click event\r\n   */\r\n  getClickedIndex(e) {\r\n    // legacy option\r\n    if (this.options.getClickedIndexFn) {\r\n      return this.options.getClickedIndexFn.call(this, e);\r\n    }\r\n\r\n    const clickedTarget = /** @type {HTMLElement} */ (e.target);\r\n    const childElements = getElementsFromOption(\r\n      this.options.children,\r\n      this.options.childSelector,\r\n      /** @type {HTMLElement} */ (e.currentTarget)\r\n    );\r\n    const clickedChildIndex = childElements.findIndex(\r\n      child => child === clickedTarget || child.contains(clickedTarget)\r\n    );\r\n\r\n    if (clickedChildIndex !== -1) {\r\n      return clickedChildIndex;\r\n    } else if (this.options.children || this.options.childSelector) {\r\n      // click wasn't on a child element\r\n      return -1;\r\n    }\r\n\r\n    // There is only one item (which is the gallery)\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Load and open PhotoSwipe\r\n   *\r\n   * @param {number} index\r\n   * @param {DataSource=} dataSource\r\n   * @param {{ x?: number; y?: number }} [initialPoint]\r\n   */\r\n  loadAndOpen(index, dataSource, initialPoint) {\r\n    // Check if the gallery is already open\r\n    if (window.pswp) {\r\n      return false;\r\n    }\r\n\r\n    // set initial index\r\n    this.options.index = index;\r\n\r\n    // define options for PhotoSwipe constructor\r\n    this.options.initialPointerPos = initialPoint;\r\n\r\n    this.shouldOpen = true;\r\n    this.preload(index, dataSource);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * Load the main module and the slide content by index\r\n   *\r\n   * @param {number} index\r\n   * @param {DataSource=} dataSource\r\n   */\r\n  preload(index, dataSource) {\r\n    const { options } = this;\r\n\r\n    if (dataSource) {\r\n      options.dataSource = dataSource;\r\n    }\r\n\r\n    // Add the main module\r\n    /** @type {Promise<Type<PhotoSwipe>>[]} */\r\n    const promiseArray = [];\r\n\r\n    const pswpModuleType = typeof options.pswpModule;\r\n    if (isPswpClass(options.pswpModule)) {\r\n      promiseArray.push(Promise.resolve(/** @type {Type<PhotoSwipe>} */ (options.pswpModule)));\r\n    } else if (pswpModuleType === 'string') {\r\n      throw new Error('pswpModule as string is no longer supported');\r\n    } else if (pswpModuleType === 'function') {\r\n      promiseArray.push(/** @type {() => Promise<Type<PhotoSwipe>>} */ (options.pswpModule)());\r\n    } else {\r\n      throw new Error('pswpModule is not valid');\r\n    }\r\n\r\n    // Add custom-defined promise, if any\r\n    if (typeof options.openPromise === 'function') {\r\n      // allow developers to perform some task before opening\r\n      promiseArray.push(options.openPromise());\r\n    }\r\n\r\n    if (options.preloadFirstSlide !== false && index >= 0) {\r\n      this._preloadedContent = lazyLoadSlide(index, this);\r\n    }\r\n\r\n    // Wait till all promises resolve and open PhotoSwipe\r\n    const uid = ++this._uid;\r\n    Promise.all(promiseArray).then((iterableModules) => {\r\n      if (this.shouldOpen) {\r\n        const mainModule = iterableModules[0];\r\n        this._openPhotoswipe(mainModule, uid);\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * @private\r\n   * @param {Type<PhotoSwipe> | { default: Type<PhotoSwipe> }} module\r\n   * @param {number} uid\r\n   */\r\n  _openPhotoswipe(module, uid) {\r\n    // Cancel opening if UID doesn't match the current one\r\n    // (if user clicked on another gallery item before current was loaded).\r\n    //\r\n    // Or if shouldOpen flag is set to false\r\n    // (developer may modify it via public API)\r\n    if (uid !== this._uid && this.shouldOpen) {\r\n      return;\r\n    }\r\n\r\n    this.shouldOpen = false;\r\n\r\n    // PhotoSwipe is already open\r\n    if (window.pswp) {\r\n      return;\r\n    }\r\n\r\n    /**\r\n     * Pass data to PhotoSwipe and open init\r\n     *\r\n     * @type {PhotoSwipe}\r\n     */\r\n    const pswp = typeof module === 'object'\r\n        ? new module.default(this.options) // eslint-disable-line\r\n        : new module(this.options); // eslint-disable-line\r\n\r\n    this.pswp = pswp;\r\n    window.pswp = pswp;\r\n\r\n    // map listeners from Lightbox to PhotoSwipe Core\r\n    /** @type {(keyof PhotoSwipeEventsMap)[]} */\r\n    (Object.keys(this._listeners)).forEach((name) => {\r\n      this._listeners[name].forEach((fn) => {\r\n        pswp.on(name, /** @type {EventCallback<typeof name>} */(fn));\r\n      });\r\n    });\r\n\r\n    // same with filters\r\n    /** @type {(keyof PhotoSwipeFiltersMap)[]} */\r\n    (Object.keys(this._filters)).forEach((name) => {\r\n      this._filters[name].forEach((filter) => {\r\n        pswp.addFilter(name, filter.fn, filter.priority);\r\n      });\r\n    });\r\n\r\n    if (this._preloadedContent) {\r\n      pswp.contentLoader.addToCache(this._preloadedContent);\r\n      this._preloadedContent = null;\r\n    }\r\n\r\n    pswp.on('destroy', () => {\r\n      // clean up public variables\r\n      this.pswp = null;\r\n      window.pswp = null;\r\n    });\r\n\r\n    pswp.init();\r\n  }\r\n\r\n  /**\r\n   * Unbinds all events, closes PhotoSwipe if it's open.\r\n   */\r\n  destroy() {\r\n    if (this.pswp) {\r\n      this.pswp.destroy();\r\n    }\r\n\r\n    this.shouldOpen = false;\r\n    this._listeners = null;\r\n\r\n    getElementsFromOption(this.options.gallery, this.options.gallerySelector)\r\n      .forEach((galleryElement) => {\r\n        galleryElement.removeEventListener('click', this.onThumbnailsClick, false);\r\n      });\r\n  }\r\n}\r\n\r\nexport default PhotoSwipeLightbox;\r\n", "import PhotoSwipeLightbox from 'photoswipe/lightbox'\nimport 'photoswipe/photoswipe.css'\n\nup.compiler('[lightbox-gallery]', async (element) => {\n\n  const lightbox = new PhotoSwipeLightbox({\n    gallery: element,\n    children: '[lightbox-image]',\n    showHideAnimationType: 'zoom',\n    pswpModule: (await import('photoswipe')).default,\n  })\n\n  lightbox.on('itemData', (event) => {\n    const lightboxImage = event.itemData.element\n    event.itemData = lightboxImage.getItemData()\n  })\n\n  // Support captions: https://photoswipe.com/caption/\n  lightbox.on('uiRegister', () => {\n    lightbox.pswp.ui.registerElement({\n      name: 'custom-caption',\n      order: 9,\n      isButton: false,\n      appendTo: 'root',\n      html: '',\n      onInit: (captionElement, _pswp) => {\n        lightbox.pswp.on('change', () => {\n          const { copyrightText, descriptionText, titleText } = lightbox.pswp.currSlide.data\n\n          captionElement.innerHTML = ''\n\n          if (titleText) up.element.affix(captionElement, 'h5.m-0', { text: titleText })\n          if (descriptionText) up.element.affix(captionElement, 'div', { text: descriptionText })\n          if (copyrightText) up.element.affix(captionElement, '.small.text-muted', { text: `Copyright information: ${copyrightText}` })\n        })\n      },\n    })\n  })\n\n  lightbox.init()\n\n})\n"],
  "mappings": "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CxD,MAAO,GAAa,IAAI,AAAC,GAAgB,CACrC,GAAI,CAAC,GAAQ,GAAQ,IAAQ,EAAY,MAAM,mBAAmB,EAClE,MAAO,CACH,EAAQ,GAAO,KAAK,CAAC,EACrB,IAAQ,GAAiB,EAAQ,EAAI,CAAC,CAC1C,CACJ,CAAC,CACL,CACA,YAAoB,EAAM,EAAO,CAC7B,MAAO,IAAU,EAAM,AAAC,GAAQ,CAAC,EAAK,CAAK,CAAC,CAChD,CACA,YAAgB,EAAO,EAAS,GAAU,CACtC,GAAI,EAAO,CAAK,EACZ,MAAO,GAGP,KAAM,eAEd,CACA,MAAO,CACH,WACA,eACA,eACA,0BACA,YACA,kBACA,sBACA,QACA,SACA,gBACA,QAAS,GACT,uBACA,QACA,MACA,WACA,aACA,cACA,cACA,QACA,SACA,KAAM,GACN,OAAQ,GACR,SACA,aACA,WACA,iBACA,QACA,UACA,QACA,SACA,YACA,cACA,UACA,YACA,YACA,WACA,WACA,WACA,aACA,WACA,YACA,WACA,YACA,cACA,WACA,gBACA,YACA,YACA,WACA,cACA,SACA,WACA,sBACA,MAAO,GACP,YACA,eACA,kBACA,UACA,QACA,UACA,QACA,uBACA,UACA,UACA,YACA,YACA,iBACA,kBACA,OACA,YACA,YACA,cACA,gBACA,YACA,cACA,kBACA,WACA,cACA,UACA,wBACA,gBACA,KAAM,GACN,SAAU,GACV,UACA,mBACA,oBACA,YACA,aACA,OACA,kBACA,kBACA,SAAU,GACV,mBACA,WACA,oBACA,WACA,mBACA,iBACA,qBACA,WACA,WACA,iBACA,KAAM,GACN,oBACA,wBACA,eACA,qBACA,eACA,SACJ,CACJ,EAAG,CAGG,EAEC,IAAM,CAEb,GAAG,MAAS,UAAY,CACpB,cAAiB,EAAM,CACnB,KAAM,IAAI,IAAG,MAAM,CAAI,CAC3B,CACA,WAAoB,EAAO,CACvB,MAAQ,OAAO,IAAU,UAAe,EAAM,OAAS,cAAiB,CAAE,aAAiB,IAAG,eAAiB,CAAE,aAAiB,IAAG,SACzI,CACA,WAAiC,EAAS,CACtC,MAAO,GAAQ,MAAM,CAAa,CACtC,CACA,WAA4B,EAAO,CAC/B,GAAI,CACA,MAAO,GAAM,CACjB,OACO,EAAP,CACI,EAAc,CAAC,CACnB,CACJ,CACA,WAAuB,EAAO,CAC1B,GAAI,EAAW,CAAK,EAChB,KAAM,EAEd,CACA,WAAe,KAAO,EAAM,CACxB,GAAI,CACA,MAAO,GAAG,GAAG,CAAI,CACrB,OACO,EAAP,CACI,YAAY,CAAK,CACrB,CACJ,CACA,WAAsB,EAAS,CAC3B,MAAO,GAAQ,MAAM,WAAW,CACpC,CACA,WAAiB,EAAI,CACjB,MAAO,IAAI,IAAS,EAAM,IAAM,EAAG,GAAG,CAAI,CAAC,CAC/C,CACA,MAAO,CACH,OACA,gBACA,0BACA,qBACA,QACA,eACA,SACJ,CACJ,EAAG,EACH,GAAG,KAAO,GAAG,MAAM,IAGb,EAEC,IAAM,CAEb,GAAG,QAAU,CACT,OAAQ,CAAC,CACb,CAGM,EAEC,IAAM,CAEb,GAAG,QAAW,UAAY,CACtB,WAAoB,EAAM,CACtB,EAAK,OAAO,CAChB,CACA,YAAwB,CACpB,MAAO,IAAG,SAAS,qBAAqB,IAAM,KAClD,CACA,YAAqB,CACjB,MAAO,CAAC,CAAC,OAAO,MACpB,CACA,WAAmB,EAAM,CACrB,GAAI,GAAQ,SAAS,OAAO,MAAM,GAAI,QAAO,EAAO,SAAS,CAAC,IAAI,GAClE,GAAI,EACA,gBAAS,OAAS,EAAO,qBAClB,CAEf,CACA,WAAyB,EAAS,CAE9B,GAAI,CADc,EAAC,EAAQ,SAAW,OAAO,QAAQ,EAAQ,OAAO,GAEhE,KAAM,IAAI,IAAG,QAAQ,sBAAsB,EAE/C,MAAO,EACX,CACA,MAAO,CACH,aACA,eACA,YACA,kBACA,WACJ,CACJ,EAAG,CAGG,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,CAAC,EACrB,GAAG,QAAW,UAAY,CACtB,GAAM,GAAI,GAAG,KACb,cAAkB,EAAM,CACpB,GAAI,CAAC,EAAO,SAAU,GAAY,EAAE,KAAK,EAAM,MAAO,KAAK,EAC3D,MAAO,GAAK,cAAc,CAAQ,CACtC,CACA,WAAiB,EAAM,EAAU,CAC7B,GAAM,GAAoB,EAAK,iBAAiB,CAAQ,EACxD,MAAI,GAAmB,EAAM,CAAQ,EAC1B,CAAC,EAAM,GAAG,CAAiB,EAG3B,CAEf,CACA,WAAsB,EAAM,EAAU,CAClC,MAAO,GAAmB,EAAM,CAAQ,EAAI,EAAO,EAAK,cAAc,CAAQ,CAClF,CACA,WAA4B,EAAa,EAAU,CAC/C,MAAO,GAAE,UAAU,CAAW,GAAK,EAAY,QAAQ,CAAQ,CACnE,CACA,WAAkB,EAAM,EAAmB,CACvC,GAAM,GAAU,EAAO,CAAiB,EACxC,MAAO,MAAK,UAAU,SAAS,KAAK,EAAM,CAAO,CACrD,CACA,WAAkB,EAAS,EAAU,CACjC,MAAO,GAAQ,YAAY,QAAQ,CAAQ,CAC/C,CACA,WAAgB,EAAS,EAAU,CAC/B,MAAO,GAAQ,EAAQ,QAAQ,CAAQ,EAAG,EAAQ,EAAS,CAAQ,CAAC,CACxE,CACA,cAAmB,EAAM,CACrB,GAAM,GAAQ,EAAK,IAAI,EACvB,MAAI,GAAE,UAAU,CAAK,EACV,EAEF,EAAE,SAAS,CAAK,EACd,EAAM,GAAG,EAAM,CAAK,EAEtB,EAAE,OAAO,CAAK,EACf,GAAM,OAAS,GACf,GAAG,KAAK,2EAA4E,CAAK,EAEtF,EAAM,IAGN,CAEf,CACA,cAAoB,EAAM,CACtB,MAAO,GAAE,QAAQ,EAAM,CAAW,CACtC,CACA,WAAqB,EAAO,CACxB,MAAI,GAAE,SAAS,CAAK,EACT,SAAS,iBAAiB,CAAK,EAG/B,EAAE,SAAS,CAAK,CAE/B,CACA,WAAc,EAAS,CACnB,EAAW,EAAS,EAAK,CAC7B,CACA,YAAc,EAAS,CACnB,EAAW,EAAS,EAAI,CAC5B,CACA,YAAkB,EAAS,CACvB,MAAO,IAAe,EAAS,EAAI,CACvC,CACA,WAAkB,EAAS,CACvB,MAAO,IAAe,EAAS,EAAK,CACxC,CACA,YAAwB,EAAS,EAAY,CACzC,MAAI,KAAe,GAAU,CAAO,EACzB,EAAE,KACb,GAAW,EAAS,CAAU,EACvB,IAAM,EAAW,EAAS,CAAC,CAAU,EAChD,CACA,WAAoB,EAAS,EAAY,CACrC,AAAI,EACA,GAAQ,gBAAgB,QAAQ,EAC5B,EAAQ,MAAM,UAAY,QAC1B,GAAQ,MAAM,QAAU,KAI5B,EAAQ,aAAa,SAAU,EAAE,CAEzC,CACA,WAAgB,EAAS,EAAa,CAAC,GAAU,CAAO,EAAG,CACvD,EAAW,EAAS,CAAU,CAClC,CACA,WAAyB,EAAS,EAAM,EAAO,GAAY,CACvD,MAAI,IACO,EAAQ,aAAa,EAAM,CAAK,EAGhC,EAAQ,gBAAgB,CAAI,CAE3C,CACA,WAAkB,EAAS,EAAO,CAC9B,OAAS,KAAO,GAAO,CACnB,GAAM,IAAQ,EAAM,GACpB,AAAI,EAAE,QAAQ,EAAK,EACf,EAAQ,aAAa,EAAK,EAAK,EAG/B,EAAQ,gBAAgB,CAAG,CAEnC,CACJ,CACA,YAAsB,EAAS,EAAO,CAClC,GAAI,GAAO,OAAO,KAAK,CAAK,EACxB,GAAW,GAAU,EAAS,CAAI,EACtC,SAAS,EAAS,CAAK,EAChB,IAAM,EAAS,EAAS,EAAQ,CAC3C,CACA,WAAqB,EAAM,CACvB,GAAM,GAAW,OAAS,GAAa,OAAQ,CAAI,EACnD,MAAO,UAAS,KAAK,cAAc,CAAQ,GAAG,aAAa,SAAS,CACxE,CACA,WAAsB,EAAc,EAAS,CACzC,EAAa,WAAW,aAAa,EAAS,CAAY,CAC9D,CACA,WAA4B,EAAU,EAAQ,CAAC,EAAG,CAC9C,GAAI,CAAE,eAAgB,EAAc,CAAQ,EACxC,GACA,GACA,GACJ,OAAS,MAAkB,GAAa,CACpC,GAAI,CAAE,YAAY,GAClB,AAAI,EAAC,IAAW,KAAY,MACxB,IAAU,OAEd,GAAe,SAAS,cAAc,EAAO,EACxC,IACD,IAAc,IAElB,EAAc,GAAc,EAAc,EAC1C,IAAiB,YAAY,EAAY,EACzC,GAAkB,EACtB,CACA,OAAS,MAAO,GAAO,CACnB,GAAI,IAAQ,EAAM,IAClB,AAAI,KAAQ,QACR,GAAW,GAAa,EAAE,SAAS,EAAK,CAAC,EAExC,AAAI,KAAQ,QACb,GAAe,GAAa,EAAK,EAEhC,AAAI,KAAQ,OACb,GAAY,YAAc,GAEzB,AAAI,KAAQ,UACb,AAAI,EAAE,SAAS,EAAK,EAChB,GAAY,UAAY,GAGxB,GAAY,OAAO,GAAG,EAAE,SAAS,EAAK,CAAC,EAI3C,GAAY,aAAa,GAAK,EAAK,CAE3C,CACA,MAAO,GACX,CACA,WAAuB,EAAS,CAAE,KAAI,aAAY,eAAc,CAC5D,AAAI,GACA,GAAQ,GAAK,GAEjB,OAAS,CAAC,GAAM,KAAU,QAAO,QAAQ,EAAU,EAC/C,EAAQ,aAAa,GAAM,EAAK,EAEpC,GAAW,EAAS,CAAU,CAClC,CACA,WAAuB,EAAa,CAChC,GAAI,GACE,CAAE,OAAQ,EAAiB,QAAS,IAA6B,EAAE,kBAAkB,CAAW,EAChG,GAAsB,EAAgB,QAAQ,gBAAiB,SAAU,GAAO,CAClF,SAAa,GAAwB,EAAK,EACnC,EACX,CAAC,EACG,GAAa,GAAwB,EAAmB,EAiC5D,MAAO,CACH,YAhCc,AADM,GAAoB,MAAM,OAAO,EACvB,IAAI,SAAU,GAAe,CAC3D,GAAI,IAAS,CACT,QAAS,KACT,WAAY,CAAC,EACb,GAAI,KACJ,WAAY,CAAC,CACjB,EACA,UAAgB,GAAc,QAAQ,WAAY,SAAU,GAAO,CAC/D,UAAO,QAAU,GACV,EACX,CAAC,EACD,GAAgB,GAAc,QAAQ,YAAa,SAAU,GAAQ,GAAI,CACrE,UAAO,GAAK,GACL,EACX,CAAC,EACD,GAAgB,GAAc,QAAQ,cAAe,SAAU,GAAQ,GAAW,CAC9E,UAAO,WAAW,KAAK,EAAS,EACzB,EACX,CAAC,EACD,GAAgB,GAAc,QAAQ,aAAc,SAAU,GAAM,CAChE,GAAO,GAAwB,EAAI,EACnC,GAAI,CAAC,GAAM,GAAM,GAAW,GAAO,IAAS,GAAK,MAAM,iDAAiD,EACxG,YAAU,IACV,GAAO,WAAW,IAAQ,GAAQ,EAAE,YAAY,GAAQ,GAAQ,EAAK,EAAI,GAClE,EACX,CAAC,EACG,IACA,GAAG,KAAK,0BAA4B,CAAW,EAE5C,EACX,CAAC,EAGG,cACA,YACJ,CACJ,CACA,cAAkB,EAAM,CACpB,GAAI,CAAC,EAAQ,EAAW,YAAa,GAAU,IAAc,EAAE,KAAK,EAAM,MAAO,EAAE,mBAAoB,MAAO,SAAS,EACjH,GAAU,EAAmB,GAAU,EAAU,EACvD,SAAO,sBAAsB,EAAU,EAAO,EACvC,EACX,CACA,GAAM,GAAsB,CAAC,OAAQ,OAAQ,OAAQ,OAAO,EACtD,EAAc,GAAG,SAAS,AAAC,GAAY,EAAQ,QAAQ,EAAoB,KAAK,CAAC,CAAC,EACxF,WAAwB,EAAS,CAC7B,MAAO,GAAQ,QAAQ,YAAY,CACvC,CACA,YAAsB,EAAW,EAAO,CACpC,MAAI,GAAE,QAAQ,CAAK,EACf,GAAQ,EAAM,QAAQ,KAAM,KAAK,EAC1B,IAAI,MAAc,OAGlB,IAAI,IAEnB,CACA,WAAoB,EAAI,CACpB,MAAI,GAAG,MAAM,sBAAsB,EACxB,IAAI,IAGJ,GAAa,KAAM,CAAE,CAEpC,CACA,WAAuB,EAAO,CAC1B,SAAQ,EAAM,QAAQ,UAAW,MAAM,EAChC,IAAI,GACf,CACA,WAAsC,EAAM,CACxC,GAAM,GAAW,GAAmB,CAAI,EACxC,MAAI,CAAC,KAAM,KAAM,KAAM,QAAS,OAAO,EAAE,SAAS,CAAQ,GACtD,GAAO,UAAU,aAEd,GAAI,WAAU,EAAE,gBAAgB,EAAM,WAAW,CAC5D,CACA,WAAsB,EAAS,CAC3B,GAAI,GAAQ,EAAe,EAAQ,SAAS,EAC5C,MAAI,SAAW,IACX,GAAM,MAAQ,EAAQ,OACnB,CACX,CACA,WAAwB,EAAM,CAC1B,MAAO,IAAgB,GAAoB,CAAI,CAAC,CACpD,CACA,YAAyB,EAAO,CAC5B,GAAI,EAAM,SAAW,GAAK,EAAE,cAAc,EAAM,EAAE,EAC9C,MAAO,GAAM,GAGb,GAAG,KAAK,iDAAkD,EAAM,MAAM,CAE9E,CACA,YAA6B,EAAM,CAC/B,EAAO,EAAK,KAAK,EACjB,GAAM,GAAQ,SAAS,YAAY,EACnC,SAAM,SAAS,SAAS,KAAM,CAAC,EAExB,AADU,EAAM,yBAAyB,CAAI,EACpC,UACpB,CACA,YAAmB,CACf,MAAO,UAAS,eACpB,CACA,WAAe,EAAS,CACpB,EAAQ,YACZ,CACA,WAA+B,EAAS,CACpC,GAAM,GAAO,GAAa,EAAS,CAAE,WAAY,MAAO,CAAC,EACzD,SAAM,CAAO,EACN,CACX,CACA,WAA0B,EAAW,CACjC,GAAM,GAAO,EAAU,uBACjB,EAAW,EAAU,uBAE3B,MAAO,CADgB,KAAS,QAAa,IAAS,OAAW,IAAa,EAElF,CACA,YAAyB,EAAS,CAC9B,GAAM,GAAqB,EAAQ,sBAAsB,EACzD,EAAQ,MAAM,SAAW,WACzB,GAAM,GAAmB,EAAQ,aAAa,sBAAsB,EACpE,GAAe,EAAS,CACpB,KAAO,EAAmB,KAAO,GAAoB,EAAS,aAAa,EAAI,EAAiB,KAAQ,KACxG,IAAM,EAAmB,IAAM,GAAoB,EAAS,YAAY,EAAI,EAAiB,IAAO,KACpG,MAAO,GACP,OAAQ,EACZ,CAAC,CACL,CACA,YAAyB,EAAS,EAAO,CACrC,OAAS,KAAO,GACZ,GAAe,EAAS,EAAK,EAAM,EAAI,CAE/C,CACA,YAAwB,EAAS,EAAK,EAAO,CACzC,AAAI,EAAE,UAAU,EAAQ,aAAa,CAAG,CAAC,GACrC,EAAQ,aAAa,EAAK,CAAK,CAEvC,CACA,YAAgB,EAAS,CACrB,GAAgB,UAAY,CACxB,GAAI,GAAa,CAAC,GAAG,EAAQ,UAAU,EACvC,OAAS,KAAS,GACd,EAAa,EAAS,CAAK,EAC/B,EAAQ,OAAO,CACnB,CAAC,CACL,CACA,YAAmB,EAAa,CAC5B,GAAM,GAAU,SAAS,cAAc,YAAY,EACnD,SAAQ,OAAO,GAAG,EAAE,SAAS,CAAW,CAAC,EAClC,CACX,CACA,YAAwB,EAAO,CAC3B,MAAI,GAAM,SAAW,GAAK,EAAE,UAAU,EAAM,EAAE,EACnC,EAAM,GAGN,GAAU,CAAK,CAE9B,CACA,YAAsB,EAAS,CAC3B,GAAM,GAAU,GAAU,EAAQ,UAAU,EAC5C,SAAQ,OAAO,CAAO,EACf,CACX,CACA,YAAyB,EAAI,CACzB,GAAM,GAAkB,SAAS,cACjC,GAAI,CACA,MAAO,GAAG,CACd,QACA,CACI,AAAI,GAAmB,IAAoB,SAAS,eAChD,EAAgB,MAAM,CAAE,cAAe,EAAK,CAAC,CAErD,CACJ,CACA,YAAmB,EAAS,KAAc,EAAS,CAC/C,GAAI,CAAC,EAAQ,eAAe,CAAS,EACjC,OACJ,GAAI,IAAW,EAAQ,aAAa,CAAS,EAC7C,OAAS,MAAU,GAAS,CACxB,GAAI,IAAe,GAAO,GAAU,EAAW,CAAO,EACtD,GAAI,EAAE,UAAU,EAAY,EACxB,MAAO,GACf,CACJ,CACA,YAAoB,EAAS,EAAW,CACpC,MAAO,IAAU,EAAS,EAAW,EAAc,CACvD,CACA,GAAI,IAAiB,EAAE,SACvB,YAAqB,EAAS,EAAW,CACrC,MAAO,IAAU,EAAS,EAAW,EAAe,CACxD,CACA,YAAyB,EAAO,EAAW,CACvC,OAAQ,OACC,QACD,MAAO,OAEN,WACA,OACA,GAEG,MAAO,GAGvB,CACA,YAA6B,EAAS,EAAW,CAC7C,MAAO,IAAU,EAAS,EAAW,GAAiB,EAAc,CACxE,CACA,YAA6B,EAAS,EAAW,CAC7C,MAAO,IAAU,EAAS,EAAW,GAAiB,EAAc,CACxE,CACA,YAAoB,EAAS,EAAW,CACpC,MAAO,IAAU,EAAS,EAAW,EAAc,CACvD,CACA,YAAwB,EAAO,CAE3B,GADA,EAAQ,EAAM,WAAW,IAAK,EAAE,EAC5B,EAAM,MAAM,YAAY,EACxB,MAAO,YAAW,CAAK,CAE/B,CACA,YAAkB,EAAS,EAAW,CAClC,MAAO,IAAU,EAAS,EAAW,CAAY,CACrD,CACA,WAAsB,EAAO,CACzB,GAAI,GAAO,KAAK,EACZ,MAAO,GAAE,iBAAiB,CAAK,CAEvC,CACA,YAAsB,EAAM,EAAM,EAAiB,CAC/C,MAAO,IAAU,EAAM,EAAM,AAAC,IAAU,GAAiB,GAAO,EAAM,CAAe,CAAC,CAC1F,CACA,YAA0B,EAAM,EAAM,CAAE,cAAc,CAAC,EAAG,WAAU,SAAY,CAAC,EAAG,CAChF,GAAM,IAAW,GAAG,kBAAkB,WAAW,CAAI,EAAE,WAAW,GAAS,GAAG,CAAW,EACzF,MAAO,UAAU,GAAO,CACpB,GAAM,IAAgB,OAAO,OAAO,EAAE,KAAK,GAAO,CAAW,CAAC,EAC9D,MAAO,IAAS,KAAK,EAAM,GAAO,GAAG,EAAa,CACtD,CACJ,CACA,YAAqB,EAAS,EAAM,EAAa,GAAY,CACzD,GAAI,IAAQ,EAAQ,QAAQ,IAAM,EAAO,GAAG,EAC5C,GAAI,GACA,MAAO,GAAW,GAAO,CAAI,CAErC,CACA,YAAoB,EAAS,EAAS,CAClC,OAAS,KAAS,GACd,EAAQ,UAAU,IAAI,CAAK,CACnC,CACA,YAAsB,EAAS,EAAO,CAClC,MAAO,IAAkB,EAAS,EAAO,EAAI,CACjD,CACA,YAAyB,EAAS,EAAO,CACrC,MAAO,IAAkB,EAAS,EAAO,EAAK,CAClD,CACA,YAA2B,EAAS,EAAO,EAAa,CACpD,MAAI,GAAQ,UAAU,SAAS,CAAK,IAAM,EAC/B,EAAE,KACb,GAAQ,UAAU,OAAO,EAAO,CAAW,EACpC,IAAM,EAAQ,UAAU,OAAO,EAAO,CAAC,CAAW,EAC7D,CACA,YAAuB,EAAS,EAAO,CACnC,GAAM,GAAQ,OAAO,iBAAiB,CAAO,EAC7C,MAAO,IAAuB,EAAO,CAAK,CAC9C,CACA,YAA6B,EAAS,EAAM,CACxC,GAAM,GAAW,GAAc,EAAS,CAAI,EAC5C,GAAI,EAAE,UAAU,CAAQ,EACpB,MAAO,YAAW,CAAQ,CAElC,CACA,YAAqB,EAAS,EAAO,CACjC,GAAM,CAAE,SAAU,EAClB,MAAO,IAAuB,EAAO,CAAK,CAC9C,CACA,YAAgC,EAAO,EAAW,CAG9C,MAFI,IAAG,QAAQ,QACX,GAAY,GAAG,QAAQ,iBAAiB,CAAS,GACjD,EAAE,SAAS,CAAS,EACb,EAAM,iBAAiB,CAAS,EAGhC,EAAE,UAAU,EAAW,AAAC,GAAQ,CAAC,EAAK,EAAM,iBAAiB,CAAG,CAAC,CAAC,CAEjF,CACA,YAAwB,EAAS,EAAO,EAAO,GAAI,CAG/C,GAFI,GAAG,QAAQ,QACX,GAAQ,GAAG,QAAQ,iBAAiB,EAAO,CAAI,GAC/C,EAAE,SAAS,CAAK,EAChB,EAAQ,aAAa,QAAS,CAAK,MAElC,CACD,GAAM,CAAE,UAAU,EAClB,OAAS,MAAO,GAAO,CACnB,GAAI,IAAQ,EAAM,IAClB,GAAM,YAAY,GAAK,GAAQ,CAAI,CACvC,CACJ,CACJ,CACA,YAAsB,EAAS,EAAW,CACtC,GAAM,GAAY,GAAY,EAAS,OAAO,KAAK,CAAS,CAAC,EAC7D,UAAe,EAAS,CAAS,EAC1B,IAAM,GAAe,EAAS,CAAS,CAClD,CACA,YAAmB,EAAS,CACxB,MAAO,CAAC,CAAE,GAAQ,aAAe,EAAQ,cAAgB,EAAQ,eAAe,EAAE,OACtF,CACA,YAAsB,EAAQ,CAC1B,MAAO,OAAO,KAAK,CAAM,CAC7B,CACA,YAAmB,EAAS,EAAW,CACnC,MAAO,GAAE,UAAU,EAAW,AAAC,GAAS,CAAC,EAAM,EAAQ,aAAa,CAAI,CAAC,CAAC,CAC9E,CACA,YAAiB,EAAS,CACtB,GAAI,GAAY,EAAQ,kBAAkB,EAAE,OAAO,EAAY,EAC/D,MAAO,IAAU,EAAS,CAAS,CACvC,CACA,YAAmB,EAAS,CACxB,MAAO,GAAE,OAAO,EAAQ,UAAU,OAAO,EAAG,EAAY,CAC5D,CACA,YAAqB,EAAS,CAC1B,AAAI,GAAG,QAAQ,UAAU,GACrB,OAAO,CAAO,EAAE,OAAO,CAE/B,CACA,WAAiB,EAAS,CACtB,MAAO,CAAC,EAAQ,SAAS,OAAS,GAAK,CAAC,EAAQ,UAAU,KAAK,CACnE,CACA,WAA6B,EAAM,CAC/B,MAAO,IAAI,iBAAoB,SAAY,SAAS,UACxD,CACA,WAA8B,EAAS,CAAE,SAAS,GAAM,CAAC,EAAG,CACxD,GAAM,GAAO,GAAG,KAAK,YAAY,CAAO,EACxC,SAAK,KAAK,CAAM,EACR,EAAK,OAAS,GAAO,EAAK,IAAM,OAAO,aAC1C,EAAK,MAAQ,GAAO,EAAK,KAAO,OAAO,UAChD,CACA,WAAuB,EAAU,EAAU,CACvC,GAAI,GAAW,OAAO,EAAS,KAAK,KACpC,MAAI,GAAE,UAAU,CAAQ,GACpB,IAAY,QAAQ,EAAS,KAAK,MAC/B,CACX,CACA,YAA0B,EAAa,EAAS,CAC5C,GAAI,GAAU,CAAC,EACf,GAAI,EACA,OAAS,CAAC,GAAU,KAAU,QAAO,QAAQ,CAAW,EACpD,AAAI,EAAE,UAAU,EAAK,GAAK,EAAQ,QAAQ,EAAQ,GAC9C,EAAQ,KAAK,EAAK,EAI9B,MAAO,EACX,CACA,YAA0B,EAAS,CAC/B,GAAI,GAAc,EAAQ,mBAC1B,MAAI,GACO,CAAC,EAAa,aAAa,EAG3B,CAAC,EAAQ,cAAe,WAAW,CAElD,CACA,GAAM,IAAyB,0CAC/B,YAA4B,EAAM,CAC9B,MAAO,IAAuB,KAAK,CAAI,IAAI,GAAG,YAAY,CAC9D,CACA,YAA4B,EAAM,CAC9B,GAAI,GAAW,GAAmB,CAAI,EACtC,MAAO,KAAa,QAAU,IAAa,UAC/C,CACA,MAAO,CACH,UACA,eACA,WACA,eACA,WACA,SACA,IAAK,EACL,KAAM,EACN,SACA,OACA,WACA,QACA,YACA,cACA,eACA,qBACA,WACA,gBACA,QACA,aACA,gBACA,cACA,gBACA,QAAS,EACT,+BACA,eACA,uBACA,iBACA,mBACA,GAAI,OAAO,CAAE,MAAO,GAAQ,CAAG,EAC/B,QACA,wBACA,mBACA,mBACA,mBACA,kBACA,UACA,gBACA,kBACA,KAAM,GACN,eACA,cACA,YACA,gBACA,uBACA,uBACA,gBACA,MAAO,GACP,YAAa,GACb,eACA,SAAU,GACV,aACA,WACA,aACA,kBACA,cACA,gBACA,mBACA,eACA,gBACA,UACA,sBACA,uBACA,gBACA,oBACA,qBACA,oBACA,sBACA,qBACJ,CACJ,EAAG,CAGG,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,IAAM,CAEb,GAAG,MAAQ,aAAoB,QAAO,KAAM,CACxC,YAAY,EAAS,EAAQ,CAAC,EAAG,CAC7B,AAAI,MAAM,QAAQ,CAAO,GACrB,GAAU,GAAG,KAAK,QAAQ,GAAG,CAAO,GAExC,MAAM,CAAO,EACb,GAAI,GAAO,MAAQ,KAAK,YAAY,KACpC,OAAO,OAAO,KAAM,CAAE,MAAK,EAAG,CAAK,CACvC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,eAAiB,aAA6B,IAAG,KAAM,CAC1D,CAGM,EAEC,IAAM,CAEb,GAAG,QAAU,aAAsB,IAAG,KAAM,CACxC,YAAY,EAAS,CACjB,MAAM,EAAS,CAAE,KAAM,YAAa,CAAC,CACzC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,YAAc,aAA0B,IAAG,KAAM,CACpD,CAGM,EAEC,IAAM,CAEb,GAAG,YAAc,aAA0B,IAAG,KAAM,CACpD,CAGM,EAEC,IAAM,CAEb,GAAG,aAAe,aAA2B,IAAG,KAAM,CACtD,CAGM,EAEC,IAAM,CAEb,GAAG,QAAU,aAAsB,IAAG,KAAM,CAC5C,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,OAAS,KAAa,CACrB,MAAO,CACH,KAAM,yBACV,CACA,SAAS,EAAU,CACf,MAAO,CAAC,CACZ,CACA,YAAY,EAAS,CACjB,OAAO,OAAO,KAAM,EAAE,aAAa,KAAK,SAAS,CAAO,EAAG,KAAK,WAAW,CAAO,CAAC,CAAC,CACxF,CACA,WAAW,EAAS,KAAM,CACtB,MAAO,GAAE,KAAK,EAAQ,KAAK,KAAK,CAAC,CACrC,CACA,CAAC,EAAE,KAAK,MAAO,CACX,MAAO,GAAE,QAAQ,IAAI,CACzB,CACA,CAAC,EAAE,QAAQ,KAAK,EAAO,CACnB,MAAQ,MAAK,cAAgB,EAAM,aAAgB,EAAE,QAAQ,KAAK,WAAW,EAAG,EAAM,WAAW,CAAC,CACtG,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,OAAS,KAAa,CACrB,YAAY,EAAe,IAAO,EAAC,GAAK,CACpC,KAAK,aAAe,EACpB,KAAK,MAAM,EACX,SAAS,iBAAiB,qBAAsB,IAAM,KAAK,MAAM,CAAC,CACtE,CACA,OAAQ,CACJ,OAAO,OAAO,KAAM,KAAK,aAAa,CAAC,CAC3C,CACA,QAAQ,EAAS,EAAM,CACnB,MAAO,GAAQ,QAAQ,KAAK,SAAS,CAAI,CAAC,CAC9C,CACA,SAAS,EAAM,CACX,GAAI,GAAW,KAAK,GAChB,EAAW,KAAK,KAAO,EAAE,eAAe,CAAI,GAChD,MAAO,GAAE,cAAc,EAAU,CAAQ,CAC7C,CACA,WAAW,EAAM,CACb,MAAO,IAAM,KAAK,SAAS,CAAI,CACnC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GAAa,iBACb,EAAU,GACd,GAAI,CACA,EAAU,CAAC,CAAC,gBAAgB,QAAQ,CAAU,CAClD,MACA,CACA,CACA,GAAG,UAAY,aAAwB,IAAG,MAAO,CAC7C,aAAc,CACV,MAAM,IAAO,EACT,OAAQ,GACR,OAAQ,EACZ,EAAE,CACN,CACA,GAAI,UAAU,CACV,MAAO,EACX,CACA,GAAI,SAAQ,EAAY,CACpB,EAAU,EACV,GAAI,CACA,gBAAgB,QAAQ,EAAY,EAAa,IAAM,EAAE,CAC7D,MACA,CACA,CACJ,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,SAAW,KAAe,CACzB,YAAY,EAAkB,EAAY,EAAE,SAAU,CAClD,KAAK,MAAQ,CAAC,EACd,KAAK,WAAa,EAClB,KAAK,kBAAoB,EACzB,KAAK,IAAM,KAAK,IAAI,KAAK,IAAI,EAC7B,SAAS,iBAAiB,qBAAsB,IAAM,KAAK,MAAM,CAAC,CACtE,CACA,IAAI,EAAK,EAAQ,CACb,EAAS,KAAK,WAAW,CAAM,EAC/B,EAAO,UAAY,GAAG,UAAU,QAChC,KAAK,MAAM,GAAO,CACtB,CACA,IAAI,EAAM,CACN,MAAO,MAAK,MAAM,IAAS,GAAG,KAAK,gBAAiB,KAAK,kBAAmB,CAAI,CACpF,CACA,OAAQ,CACJ,KAAK,MAAQ,EAAE,OAAO,KAAK,MAAO,WAAW,CACjD,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,cAAgB,KAAoB,CACnC,YAAY,EAAS,EAAS,EAAgB,CAAC,EAAG,CAC9C,KAAK,SAAW,EAChB,KAAK,SAAW,EAChB,KAAK,MAAQ,EAAc,KAC3B,KAAK,SAAW,EAAc,QAC9B,KAAK,YAAc,EAAc,YAAc,MAC/C,KAAK,UAAY,EAAc,UAAY,CAAC,CAChD,CACA,OAAO,EAAK,EAAY,CACpB,KAAK,MAAM,EAAE,KAAM,EAAK,CAAU,CACtC,CACA,QAAQ,EAAK,EAAY,CACrB,KAAK,MAAM,EAAE,YAAa,EAAK,CAAU,CAC7C,CACA,OAAO,EAAK,EAAY,CACpB,KAAK,MAAM,EAAE,WAAY,EAAK,CAAU,CAC5C,CACA,gBAAgB,EAAK,EAAY,CAC7B,KAAK,MAAM,EAAE,oBAAqB,EAAK,CAAU,CACrD,CACA,gBAAgB,EAAK,EAAY,CAC7B,KAAK,MAAM,EAAE,oBAAqB,EAAK,CAAU,CACrD,CACA,KAAK,EAAK,EAAY,CAClB,KAAK,MAAM,EAAE,SAAU,EAAK,CAAU,CAC1C,CACA,SAAS,EAAK,EAAa,CAAC,EAAG,CAC3B,GAAI,GAAS,CAAC,EAAM,IAAS,EAAE,aAAa,EAAM,EAAM,CAAU,EAClE,KAAK,MAAM,EAAQ,EAAK,CAAU,CACtC,CACA,MAAM,EAAa,EAAK,EAAa,CAAC,EAAG,CACrC,GAAM,GAAY,EAAE,SAAS,EAAW,MAAQ,KAAK,gBAAgB,CAAG,CAAC,EACrE,EAAQ,KAAK,SAAS,GAC1B,OAAS,KAAY,GACjB,IAAU,KAAK,eAAe,EAAa,KAAK,SAAU,CAAQ,EAKtE,GAHI,KAAK,YAAc,IACnB,KAAU,EAAW,SAAW,KAAK,UAAU,IAE/C,EAAE,UAAU,CAAK,EAAG,CACpB,GAAI,GAAc,EAAW,UAC7B,AAAI,GACA,GAAQ,EAAY,CAAK,GAE7B,KAAK,SAAS,GAAO,CACzB,CACA,GAAI,GACJ,GAAI,KAAK,OAAU,GAAU,GAAG,SAAS,QAAQ,CAAG,GAAI,CACpD,GAAM,GAAgB,EAAE,QAAQ,EAAE,IAAI,EAAW,AAAC,GAAa,KAAK,oBAAoB,CAAQ,CAAC,CAAC,EAClG,KAAK,MAAM,EAAa,EAAS,CAAE,GAAG,EAAY,KAAM,CAAc,CAAC,CAC3E,CACJ,CACA,QAAQ,EAAW,EAAe,CAC9B,GAAI,GAAW,EAAU,KAAK,SAAU,KAAK,SAAU,CAAE,SAAU,KAAK,UAAW,GAAG,CAAc,CAAC,EACrG,OAAO,OAAO,KAAK,SAAU,CAAQ,CACzC,CACA,eAAe,EAAa,EAAS,EAAU,CAC3C,MAAI,MAAK,SACE,EAAE,YAAY,EAAS,EAAU,CAAW,EAG5C,EAAY,EAAS,CAAQ,CAE5C,CACA,oBAAoB,EAAM,CACtB,MAAO,MAAK,6BAA6B,EAAM,KAAK,YAAc,KAAK,GACnE,KAAK,6BAA6B,EAAM,KAAK,WAAW,CAChE,CACA,6BAA6B,EAAM,EAAQ,CACvC,GAAI,EAAK,WAAW,CAAM,EACtB,MAAO,GAAG,SAAc,EAAK,UAAU,EAAO,MAAM,GAE5D,CACA,gBAAgB,EAAQ,CACpB,MAAO,GAAG,KAAK,cAAc,EAAE,iBAAiB,CAAM,GAC1D,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,UAAY,KAAgB,CAC3B,YAAY,CAAE,WAAW,GAAI,eAAe,EAAE,UAAa,CAAC,EAAG,CAC3D,KAAK,KAAO,GAAI,KAChB,KAAK,UAAY,EACjB,KAAK,cAAgB,CACzB,CACA,IAAI,EAAK,CACL,SAAM,KAAK,cAAc,CAAG,EACrB,KAAK,KAAK,IAAI,CAAG,CAC5B,CACA,IAAI,EAAK,EAAO,CACZ,GAAI,KAAK,KAAK,OAAS,KAAK,UAAW,CACnC,GAAI,GAAY,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE,MACxC,KAAK,KAAK,OAAO,CAAS,CAC9B,CACA,EAAM,KAAK,cAAc,CAAG,EAC5B,KAAK,KAAK,IAAI,EAAK,CAAK,CAC5B,CACA,OAAQ,CACJ,KAAK,KAAK,MAAM,CACpB,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,KAAO,aAAmB,IAAG,MAAO,CACnC,MAAO,CACH,MAAO,CACH,OACA,MACA,QACA,QACJ,CACJ,CACA,GAAI,SAAS,CACT,MAAO,MAAK,IAAM,KAAK,MAC3B,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,KAAO,KAAK,KAC5B,CACA,KAAK,EAAS,CACV,KAAK,MAAQ,EACb,KAAK,KAAO,EACZ,KAAK,OAAS,EAAU,EACxB,KAAK,QAAU,EAAU,CAC7B,CACA,MAAO,aAAY,EAAS,CACxB,MAAO,IAAK,MAAM,EAAQ,sBAAsB,CAAC,CACrD,CACA,MAAO,oBAAmB,EAAS,CAC/B,GAAI,GAAa,EAAQ,UAAU,EAAI,EACvC,EAAQ,MAAM,CAAU,EACxB,EAAW,MAAM,SAAW,QAC5B,GAAI,GAAO,KAAK,YAAY,CAAU,EACtC,SAAW,OAAO,EACX,CACX,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACP,EAAc,oBACpB,GAAG,YAAc,KAAkB,CAC/B,aAAc,CACV,KAAK,kBAAoB,GAAI,KAC7B,KAAK,OAAS,EACd,KAAK,SAAW,EAAE,QAAQ,CAC9B,CACA,YAAa,CACT,AAAI,EAAE,KAAK,SAAW,GAClB,KAAK,SAAS,MAAM,CAC5B,CACA,YAAa,CACT,AAAI,EAAE,KAAK,SAAW,GAClB,KAAK,UAAU,CACvB,CACA,0BAA0B,EAAS,CAC/B,YAAK,kBAAkB,IAAI,CAAO,EAClC,KAAK,cAAc,EAAS,OAAO,EAC5B,IAAM,KAAK,kBAAkB,OAAO,CAAO,CACtD,CACA,YAAa,CACT,MAAO,MAAK,qBAAuB,KAAK,OAAS,CACrD,CACA,WAAY,CACR,KAAK,oBAAsB,GAAG,SAAS,mBAAmB,EAC1D,KAAK,SAAS,EAAE,aAAa,EAAE,KAAM,CACjC,uBAAwB,KAAK,oBAAsB,IACvD,CAAC,CAAC,EACF,KAAK,cAAc,SAAS,KAAM,eAAe,EACjD,OAAS,KAAW,MAAK,kBACrB,KAAK,cAAc,EAAS,OAAO,CAE3C,CACA,cAAc,EAAS,EAAW,CAC9B,GAAI,CAAC,KAAK,WAAW,EACjB,OACJ,GAAI,GAAgB,EAAE,MAAM,EAAS,CAAS,EAC9C,KAAK,SAAS,EAAE,aAAa,EAAS,CAAE,CAAC,iBAAmB,GAAY,CAAc,CAAC,EAAG,EAAE,aAAa,EAAS,CAAW,CAAC,CAClI,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,OAAS,KAAa,CACrB,YAAY,EAAS,CACjB,KAAK,QAAU,CACnB,CACA,SAAU,CACN,KAAM,IAAI,IAAG,cACjB,CACA,oBAAoB,EAAe,EAAU,CACzC,MAAK,KAAkB,IAAU,EAAE,SAAS,CAAa,EAC9C,EAGA,CAEf,CACA,mBAAoB,CAChB,MAAO,IAAG,cAAc,kBAAkB,KAAK,OAAO,CAC1D,CACA,iBAAiB,EAAQ,KAAK,MAAO,CACjC,GAAI,CAAC,EAAM,QAAQ,EACf,KAAM,IAAI,IAAG,QAAQ,oBAAsB,EAAM,KAAK,CAE9D,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,OAAO,SAAW,aAAuB,IAAG,MAAO,CAClD,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,aAAe,EAAQ,YAC5B,KAAK,cAAgB,EAAQ,aAC7B,KAAK,YAAc,EAAQ,YAAc,CAAC,EAC1C,KAAK,UAAY,EAAQ,QAC7B,CACA,2BAA4B,CACxB,AAAI,KAAK,MAAM,UAAU,GACrB,MAAK,0BAA0B,EAC/B,KAAK,iBAAiB,EACtB,KAAK,MAAM,qBAAqB,KAAK,iBAAiB,CAAC,EACvD,KAAK,iBAAiB,EACtB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,MAAM,sBAAsB,KAAK,iBAAiB,CAAC,EACxD,KAAK,iBAAiB,GAE1B,KAAK,MAAM,UAAU,IAAM,CACvB,OAAS,KAAa,MAAK,YACvB,GAAG,KAAK,CAAE,GAAG,EAAW,GAAG,KAAK,iBAAiB,CAAE,CAAC,EACpD,KAAK,iBAAiB,CAE9B,CAAC,CACL,CACA,2BAA4B,CACxB,AAAI,EAAE,UAAU,KAAK,YAAY,GAAK,KAAK,MAAM,UAAU,GACvD,KAAK,MAAM,OAAO,KAAK,aAAc,KAAK,iBAAiB,CAAC,CAEpE,CACA,4BAA6B,CACzB,AAAI,EAAE,UAAU,KAAK,aAAa,GAAK,KAAK,MAAM,UAAU,GACxD,KAAK,MAAM,QAAQ,KAAK,cAAe,KAAK,iBAAiB,CAAC,CAEtE,CACA,WAAW,CAAE,aAAY,aAAY,UAAU,CAC3C,AAAI,IAAW,QACX,GAAU,GAAc,GAAG,SAAS,OAAO,CAAU,GAErD,GACA,EAAE,eAAe,EAAY,YAAa,GAAG,SAAS,gBAAgB,CAAM,CAAC,CAErF,CACA,SAAS,CAAE,aAAY,QAAQ,CAC3B,EAAE,eAAe,EAAY,UAAW,EAAO,EAAK,YAAY,EAAI,EAAK,CAC7E,CACA,SAAS,CAAE,aAAY,QAAQ,CAC3B,EAAE,eAAe,EAAY,UAAW,GAAQ,EAAK,CACzD,CACA,eAAe,EAAS,CACpB,KAAK,WAAW,CAAO,EACvB,KAAK,SAAS,CAAO,EACrB,KAAK,SAAS,CAAO,CACzB,CACA,kBAAmB,CACf,MAAO,CAAE,SAAU,KAAK,SAAU,CACtC,CACA,aAAa,CAAE,QAAO,cAAa,cAAa,oBAAoB,KAAK,SAAW,CAChF,MAAO,IAAI,IAAG,OAAO,YAAY,CAAE,QAAO,cAAa,mBAAkB,CAAC,EAAE,QAAQ,CAAW,CACnG,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,UAAa,GAAK,KAAgB,CAC7B,YAAY,EAAe,CACvB,KAAK,cAAgB,CACzB,CACA,SAAU,CACN,YAAK,UAAY,KAAK,gBAAgB,EAC/B,IACX,CACA,KAAM,kBAAkB,CACpB,GAAI,CACA,KAAK,gBAAgB,EACrB,KAAK,cAAgB,GAAG,cAAc,WAAW,KAAK,aAAa,EACnE,GAAG,QAAQ,gBAAgB,KAAK,aAAa,EAC7C,GAAG,cAAc,mBAAmB,KAAK,aAAa,EACtD,GAAI,GAAS,KAAM,MAAK,WAAW,EAAE,QAAQ,EAC7C,YAAK,cAAc,CAAM,EAClB,CACX,OACO,EAAP,CACI,WAAK,cAAc,CAAa,GAAK,KAAK,aAAa,CAAa,EAC9D,CACV,CACJ,CACA,cAAc,EAAQ,CAClB,GAAI,YAAkB,IAAG,aAAc,CACnC,GAAI,CAAE,aAAY,cAAe,EAAO,cACxC,AAAK,EAAO,MACR,GAAG,MAAM,MAAM,IAAM,IAAa,CAAM,CAAC,EAC7C,GAAI,GAAoB,SAAU,EAAQ,CACtC,GAAG,MAAM,MAAM,IAAM,IAAa,CAAM,CAAC,CAC7C,EACA,YAAK,SAAS,KAAK,EAAmB,EAAE,IAAI,EACrC,EACX,CACJ,CACA,aAAa,EAAO,CAChB,GAAI,GAAS,YAAiB,IAAG,QAAU,wBAA0B,wBACrE,GAAG,KAAK,cAAe,GAAG,MAAW,EAAM,SAAS,EAAM,SAAS,EACnE,GAAG,MAAM,MAAM,IAAM,KAAK,cAAc,UAAU,CAAK,CAAC,CAC5D,CACA,GAAI,WAAW,CACX,MAAO,MAAK,eAAe,CAC/B,CACA,KAAM,iBAAiB,CACnB,GAAI,CAEA,MAAO,MAAM,AADA,MAAM,MAAK,WACJ,QACxB,OACO,EAAP,CACI,KAAI,aAAiB,IAAG,aACd,KAAM,GAAM,SAGZ,CAEd,CACJ,CACA,YAAa,CACT,GAAI,GAAc,EAAE,QAAQ,AAAC,GAAY,KAAK,mBAAmB,CAAO,CAAC,EACrE,EAAgB,CAAE,GAAG,KAAK,cAAe,aAAY,EACzD,MAAI,GAAc,IACP,GAAI,IAAG,OAAO,QAAQ,CAAa,EAErC,EAAc,SACZ,GAAI,IAAG,OAAO,aAAa,CAAa,EAGxC,GAAI,IAAG,OAAO,YAAY,CAAa,CAEtD,CACA,iBAAkB,CACd,GAAI,GAAa,EAAE,SAAS,KAAK,cAAe,YAAY,EAC5D,GAAI,GACA,GAAW,cAAgB,KAAK,cAC5B,GAAG,KAAK,EAAY,CAAE,OAAQ,KAAK,cAAc,MAAO,CAAC,EAAE,kBAC3D,KAAM,IAAI,IAAG,QAAQ,8BAA8B,EAAW,eAAe,CAGzF,CACA,mBAAmB,CAAE,gBAAe,YAAW,SAAQ,QAAO,WAAW,CACrE,GAAI,CAAE,SAAU,KAAK,cACrB,GAAI,CAAC,EACD,OACJ,GAAI,GAAe,CACf,OAAQ,EACR,QAAS,CAAC,cAAe,wDAAwD,EACjF,SAAW,IAAU,MACrB,SACA,IAAK,KAAK,cAAc,GAC5B,EACA,AAAI,IAAU,SACV,GAAG,SAAS,MAAM,EAAe,CAAE,GAAG,CAAa,CAAC,EAEnD,AAAI,IAAU,QACf,GAAG,SAAS,MAAM,CAAE,GAAG,EAAc,MAAO,CAAU,CAAC,EAEtD,AAAI,IAAU,OAAS,IAAU,GAClC,GAAG,SAAS,MAAM,CAAE,GAAG,EAAc,MAAO,KAAM,CAAC,EAElD,AAAI,EAAE,WAAW,CAAK,EACvB,EAAM,CAAY,EAGlB,GAAG,SAAS,MAAM,EAAO,CAAE,GAAG,EAAc,MAAO,CAAU,CAAC,CAEtE,CACJ,EAEI,EAAE,gBAAgB,EAAG,UAAW,UAAY,CAAE,MAAO,MAAK,SAAW,CAAC,EACtE,EAAE,cAAc,EAAG,UAAW,CAC1B,eAAgB,GAChB,WAAY,EAChB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAG,OAAO,gBAAkB,aAA8B,IAAG,MAAO,CAChE,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,OAAS,GAAG,MAAM,IAAI,CAAO,GAAK,GAAG,MAAM,QAChD,KAAK,SAAW,KAAK,QAAQ,QAC7B,KAAK,WAAa,KAAK,QAAQ,UAC/B,KAAK,KAAO,KAAK,QAAQ,IACzB,KAAK,YAAc,KAAK,QAAQ,UACpC,CACA,SAAU,CACN,KAAK,QAAU,KAAK,SAAS,WAC7B,GAAG,SAAS,iBAAiB,KAAK,QAAQ,EAC1C,AAAI,GAAG,OAAO,YAAY,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,EAClE,KAAK,uBAAuB,EAG5B,KAAK,YAAY,CAEzB,CACA,KAAM,yBAAyB,CAC3B,KAAK,eAAe,EACpB,KAAM,MAAK,SAAS,EACpB,KAAK,OAAO,EACZ,KAAK,cAAc,CACvB,CACA,aAAc,CACV,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,cAAc,CACvB,CACA,UAAW,CACP,MAAO,IAAG,OAAO,QAAQ,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,CACzE,CACA,QAAS,CACL,KAAK,OAAO,UAAU,IAAM,CACxB,GAAG,SAAS,MAAM,KAAK,QAAQ,EAC/B,GAAG,OAAO,MAAM,KAAK,SAAU,CAAE,MAAO,KAAK,MAAO,CAAC,EACrD,GAAG,QAAQ,YAAY,KAAK,QAAQ,EACpC,KAAK,SAAS,OAAO,CACzB,CAAC,CACL,CACA,gBAAiB,CACb,GAAG,SAAS,cAAc,KAAK,SAAU,CAAE,OAAQ,KAAK,QAAS,IAAK,KAAK,IAAK,CAAC,CACrF,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GAAI,GAAG,KACX,GAAG,OAAO,UAAY,aAAwB,IAAG,OAAO,QAAS,CAC7D,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,OAAS,EAAQ,OACtB,KAAK,QAAU,EAAQ,OACvB,KAAK,WAAa,EAAQ,SAC9B,CACA,mBAAoB,CAChB,MAAO,CACH,KAAM,KAAK,QAAQ,KACnB,QAAS,KAAK,YAAY,EAAE,QAC5B,OAAQ,KAAK,QAAQ,OACrB,OAAQ,KAAK,OACb,UAAW,KAAK,WAChB,MAAO,MACP,cAAe,EAAE,QAAQ,CAAC,GAAG,SAAS,IAAI,QAAS,CAAE,MAAO,KAAK,UAAW,CAAC,CAAC,CAAC,EAC/E,UAAW,CAAC,CAChB,CACJ,CACA,QAAQ,EAAa,EAAc,CAC/B,KAAK,YAAc,EACnB,KAAK,iBAAiB,EACtB,EAAa,EACb,KAAK,eAAe,EACpB,GAAI,GAAgB,KAAK,MAAM,GAAG,wCAAyC,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC7G,GAAI,CACA,YAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACjB,GAAG,aAAa,KAAK,KAAK,kBAAmB,KAAK,kBAAkB,CAC/E,QACA,CACI,EAAc,CAClB,CACJ,CACA,kBAAmB,CAOf,GANA,AAAI,KAAK,SAAW,QAChB,KAAK,SAAW,SAAS,cAAc,SAAS,EAGhD,KAAK,SAAW,KAAK,YAAY,OAAO,KAAK,MAAM,EAEnD,CAAC,KAAK,UAAY,CAAC,KAAK,WAAW,QAAQ,EAC3C,KAAM,IAAI,IAAG,WAErB,CACA,gBAAiB,CACb,GAAG,KAAK,cAAe,oBAAoB,KAAK,wBAAwB,EACxE,KAAK,wBAAwB,EAC7B,KAAK,MAAQ,KAAK,YAAY,EAC9B,KAAK,WAAW,KAAK,CAAE,QAAS,CAAC,KAAK,MAAM,OAAQ,CAAC,EACrD,KAAK,WAAW,YAAY,EAC5B,GAAG,MAAM,MAAM,KAAK,KAAK,KAAK,EAC9B,KAAK,MAAM,eAAe,EAC1B,KAAK,MAAM,cAAc,CAC7B,CACA,uBAAwB,CACpB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,YAAY,cAAc,KAAK,QAAQ,EAC5C,KAAK,MAAM,WAAW,KAAK,QAAQ,EACnC,KAAK,YAAY,gBAAgB,KAAK,QAAQ,EAC9C,KAAK,eAAe,CAAE,WAAY,KAAK,SAAU,OAAQ,KAAK,QAAQ,MAAO,CAAC,EAC9E,KAAK,cAAgB,GAAG,MAAM,KAAK,MAAM,QAAS,CAAE,GAAG,KAAK,QAAS,MAAO,KAAK,MAAO,SAAU,KAAK,QAAS,CAAC,EACjH,KAAK,kBAAoB,GAAI,IAAG,aAAa,CACzC,MAAO,KAAK,MACZ,UAAW,CAAC,KAAK,QAAQ,EACzB,OAAQ,KAAK,OACb,cAAe,KAAK,OACxB,CAAC,EACD,KAAK,cAAc,EACnB,KAAK,kBAAkB,SAAW,KAAK,QAAQ,EAC/C,KAAK,MAAM,MAAQ,SACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,CAC1B,CACA,oBAAqB,CACjB,GAAI,KAAK,mBACL,OACJ,GAAI,GAAkB,KAAK,gBAAgB,EAAE,MAC7C,KAAK,mBAAqB,KAAK,aAAa,CACxC,MAAO,EACP,YAAa,KAAK,WACtB,CAAC,CACL,CACA,KAAM,UAAU,CACZ,YAAM,MAAK,MAAM,mBAAmB,EACpC,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAM,MAAK,cACJ,KAAK,iBAChB,CACA,aAAc,CACV,GAAM,GAAY,AAAC,GACR,KAAK,QAAU,GAAG,cAAc,SAAS,CAAwB,EAE5E,MAAO,IAAG,MAAM,MAAM,KAAK,QAAS,CAAS,CACjD,CACA,gBAAiB,CACb,AAAI,KAAK,MAAM,UAAY,QACvB,MAAK,MAAM,QAAU,GAAG,SAAS,eAAe,CAAC,KAAK,QAAQ,EAAG,KAAK,KAAK,GAE/E,KAAK,MAAM,UAAY,KAAK,WAAW,QACvC,KAAK,MAAM,cAAc,KAAK,OAAO,CACzC,CACA,cAAe,CACX,KAAK,WAAW,cAAc,WAAW,EACzC,KAAK,MAAM,aAAa,YAAY,EAOpC,AANsB,GAAI,IAAG,cAAc,CACvC,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,UAAW,CAAC,YAAa,OAAO,EAChC,YAAa,KAAK,QAAQ,WAC9B,CAAC,EACa,QAAQ,KAAK,QAAQ,KAAK,CAC5C,CACA,eAAgB,CACZ,GAAM,GAAmB,CACrB,GAAG,KAAK,QACR,SAAU,KAAK,SACf,MAAO,KAAK,MACZ,UAAW,CAAC,OAAQ,OAAO,CAC/B,EAEA,AADkB,GAAI,IAAG,kBAAkB,CAAgB,EACjD,QAAQ,KAAK,QAAQ,MAAM,CACzC,CACA,yBAA0B,CACtB,GAAG,MAAM,cAAc,gBAAiB,CACpC,OAAQ,KAAK,QACb,UAAW,KAAK,WAChB,aAAc,KAAK,QACnB,IAAK,qBACT,CAAC,CACL,CACA,kBAAmB,CACf,KAAK,MAAM,KAAK,kBAAmB,CAC/B,OAAQ,KAAK,QACb,SAAU,KAAK,MAAM,SAAS,UAAU,EACxC,IAAK,cAAc,KAAK,OAC5B,CAAC,CACL,CACA,iBAAkB,CACd,MAAO,IAAG,MAAM,YAAY,KAAK,2BAA2B,CAAC,CACjE,CACA,4BAA6B,CACzB,MAAO,CACH,GAAG,KAAK,QACR,MAAO,KAAK,MACZ,QAAS,KAAK,MAAM,OACxB,CACJ,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,OAAO,YAAe,GAAK,aAA0B,IAAG,OAAO,QAAS,CACnE,YAAY,EAAS,CACjB,EAAU,GAAG,cAAc,SAAS,CAAO,EAC3C,MAAM,CAAO,EACb,KAAK,MAAQ,EAAQ,MACrB,KAAK,OAAS,EAAQ,OACtB,KAAK,SAAW,EAAQ,QACxB,KAAK,OAAS,GAAG,SAAS,iBAAiB,KAAK,OAAQ,KAAK,OAAO,CACxE,CACA,mBAAoB,CAChB,KAAK,gBAAgB,EACrB,GAAI,GAAY,KAAK,cAAc,EACnC,MAAO,CACH,MAAO,KAAK,MACZ,UAAW,KAAK,MAChB,KAAM,KAAK,MAAM,KACjB,QAAS,EAAE,MAAM,KAAK,MAAM,QAAS,KAAK,QAAQ,EAClD,OAAQ,KAAK,QAAQ,OACrB,OAAQ,KAAK,uBAAuB,EACpC,YACA,cAAe,CACnB,CACJ,CACA,wBAAyB,CACrB,YAAK,gBAAgB,EACd,GAAG,SAAS,eAAe,KAAK,MAAM,CACjD,CACA,eAAgB,CACZ,YAAK,gBAAgB,EACd,EAAE,IAAI,KAAK,OAAQ,YAAY,CAC1C,CACA,QAAQ,EAAa,EAAc,CAC/B,KAAK,YAAc,EACnB,KAAK,iBAAiB,EACtB,EAAa,EACb,GAAI,GAAgB,KAAK,MAAM,GAAG,wCAAyC,KAAK,mBAAmB,KAAK,IAAI,CAAC,EAC7G,GAAI,CACA,YAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACjB,GAAG,aAAa,KAAK,KAAK,oBAAqB,KAAK,kBAAkB,CACjF,QACA,CACI,EAAc,CAClB,CACJ,CACA,qBAAsB,CAClB,AAAI,KAAK,OAAO,QACZ,GAAG,KAAK,cAAe,aAAa,KAAK,uBAAuB,SAAS,KAAK,OAAO,EAEzF,KAAK,0BAA0B,EAC3B,KAAK,QAAQ,YACb,GAAG,SAAS,WAAW,CAAE,MAAO,KAAK,KAAM,CAAC,EAE5C,KAAK,QAAQ,WACb,GAAG,SAAS,UAAU,CAAE,MAAO,KAAK,KAAM,CAAC,EAE3C,KAAK,QAAQ,MACb,KAAK,MAAM,KAAK,CAAE,QAAS,CAAC,KAAK,YAAY,CAAE,CAAC,EAEhD,KAAK,QAAQ,QAAU,IACvB,GAAG,SAAS,MAAM,KAAK,cAAc,EAAG,CACpC,OAAQ,6BACR,IAAK,KAAK,QAAQ,GACtB,CAAC,EAEL,OAAO,OAAO,KAAK,MAAM,QAAS,KAAK,QAAQ,EAC3C,KAAK,YAAY,GACjB,KAAK,MAAM,cAAc,KAAK,OAAO,EAEzC,KAAK,0BAA0B,EAC/B,KAAK,oBAAsB,KAAK,aAAa,CACzC,MAAO,KAAK,OACZ,YAAa,KAAK,YAClB,YAAa,KAAK,OACtB,CAAC,CACL,CACA,oBAAqB,CACjB,GAAI,KAAK,mBACL,OACJ,GAAI,GAAkB,KAAK,gBAAgB,EAAE,MAC7C,KAAK,mBAAqB,KAAK,aAAa,CACxC,MAAO,EACP,YAAa,KAAK,WACtB,CAAC,CACL,CACA,iBAAkB,CACd,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,CAC9B,CACA,kBAAmB,CACf,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACnC,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,CAC3B,CACA,+BAAgC,CAC5B,KAAK,OAAO,KAAK,GAAG,KAAK,gBAAgB,EAAE,OAAO,CACtD,CACA,mBAAoB,CAChB,KAAK,OAAS,KAAK,OAAO,OAAO,AAAC,GAAS,CACvC,GAAM,GAAS,GAAI,IAAG,eAAe,EAAE,KAAK,EAAM,CAAC,WAAY,SAAU,QAAS,QAAS,mBAAmB,CAAC,CAAC,EAEhH,GADA,EAAK,aAAe,EAAO,KAAK,EAC5B,EAAK,WACL,MAAO,GAEN,GAAI,CAAC,EAAK,MACX,KAAM,IAAI,IAAG,WAErB,CAAC,CACL,CACA,mBAAoB,CAChB,KAAK,OAAS,KAAK,YAAY,YAAY,KAAK,MAAM,CAC1D,CACA,sBAAuB,CACnB,KAAK,OAAS,GAAG,SAAS,oBAAoB,KAAK,MAAM,CAC7D,CACA,iBAAkB,CACd,MAAO,IAAG,MAAM,YAAY,KAAK,2BAA2B,CAAC,CACjE,CACA,2BAA4B,CACxB,GAAI,GAAe,GAAG,aAAa,SAAS,KAAK,KAAK,EACtD,KAAK,OAAO,QAAQ,CAAC,EAAM,IAAM,CAC7B,EAAK,aAAe,EAChB,EAAI,GACJ,GAAK,OAAS,GACd,EAAK,MAAQ,GAErB,CAAC,CACL,CACA,aAAc,CACV,MAAO,GAAE,eAAe,KAAK,QAAQ,QAAS,KAAK,gBAAgB,KAAK,IAAI,CAAC,CACjF,CACA,iBAAkB,CACd,GAAM,GAAe,EAAE,IAAI,KAAK,OAAQ,YAAY,EACpD,MAAO,IAAG,SAAS,eAAe,EAAc,KAAK,KAAK,CAC9D,CACA,4BAA6B,CACzB,MAAO,CACH,GAAG,KAAK,QACR,MAAO,KAAK,MACZ,QAAS,KAAK,YAAY,CAC9B,CACJ,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,gBAAiB,GACjB,kBAAmB,GACnB,YAAa,GACb,gBAAiB,EACrB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,OAAO,YAAc,aAA0B,IAAG,OAAO,QAAS,CACjE,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,OAAS,EAAE,KAAK,EAAE,OAAO,EAAQ,KAAK,CAAC,EAC5C,KAAK,mBAAqB,EAAE,OAAO,EAAQ,iBAAiB,EAC5D,KAAK,aAAe,EAAQ,aAAe,CAAC,EAC5C,KAAK,cAAgB,CAAC,CAC1B,CACA,QAAQ,EAAa,CACjB,YAAK,YAAc,EACnB,KAAK,OAAS,EAAY,YAAY,KAAK,MAAM,EACjD,KAAK,OAAS,EAAY,YAAY,KAAK,MAAM,EACjD,KAAK,aAAe,GAAI,IAAG,aAAa,CACpC,MAAO,KAAK,mBAAmB,MAC/B,OAAQ,GAAG,SAAS,eAAe,KAAK,MAAM,EAC9C,cAAe,KAAK,kBACxB,CAAC,EACD,AAAK,KAAK,OAAO,OAKb,MAAK,OAAO,QAAQ,EACpB,GAAG,SAAS,OAAO,IAAM,CACrB,GAAM,GAAoB,KAAK,OAAO,IAAI,AAAC,GAAS,KAAK,aAAa,CAAI,CAAC,EAC3E,KAAK,aAAa,SAAW,KAAK,QAAQ,CAAiB,CAC/D,CAAC,GARD,MAAK,aAAa,KAAM,KAAK,YAAY,EACzC,KAAK,cAAc,KAAM,KAAK,YAAY,GASvC,KAAK,YAChB,CACA,aAAa,EAAO,CAChB,KAAK,cAAc,KAAK,CAAK,CACjC,CACA,KAAM,UAAU,CACZ,KAAM,SAAQ,IAAI,KAAK,aAAa,EACpC,OAAS,KAAQ,MAAK,OAClB,KAAK,iBAAiB,EAAK,KAAK,EAEpC,MAAO,MAAK,YAChB,CACA,aAAa,EAAU,CACnB,GAAI,GAAe,EAAS,QAAQ,YAAY,EAAI,EAAS,SAAW,CAAC,CAAQ,EACjF,KAAK,aAAa,UAAU,QAAQ,GAAG,CAAY,CACvD,CACA,aAAa,EAAM,CACf,OAAQ,EAAK,eACJ,OAAQ,CACT,GAAI,GAAW,GAAG,SAAS,SAAS,CAAI,EACxC,GAAI,EAAU,CACV,KAAK,aAAa,EAAK,WAAY,CAAI,EACvC,KAAK,cAAc,EAAK,WAAY,CAAI,EACxC,GAAG,SAAS,SAAS,CAAQ,EAC7B,KACJ,KACK,CACD,KAAK,6BAA6B,CAAI,EACtC,GAAM,GAAS,EAAK,WAAW,WACzB,EAAe,CACjB,GAAG,EACH,aAAc,CACV,GAAG,SAAS,iBAAiB,EAAK,UAAU,CAChD,EACA,YAAa,IAAM,CACf,KAAK,4BAA4B,CAAI,EACrC,KAAK,gBAAgB,EAAK,WAAY,CAAI,EAC1C,KAAK,6BAA6B,CAAI,CAC1C,EACA,aAAc,IAAM,CAChB,GAAG,OAAO,MAAM,EAAK,WAAY,CAAE,MAAO,EAAK,KAAM,CAAC,CAC1D,EACA,aAAc,CACV,EAAE,YAAY,EACd,GAAG,SAAS,cAAc,EAAK,WAAY,CAAE,SAAQ,IAAK,EAAM,CAAC,EACjE,EAAK,cAAc,CACvB,EACA,UAAW,IAAM,CACb,KAAK,aAAa,EAAK,WAAY,CAAI,EACvC,KAAK,cAAc,EAAK,WAAY,CAAI,CAC5C,CACJ,EACA,KAAK,aAAa,GAAG,MAAM,EAAK,WAAY,EAAK,WAAY,EAAK,WAAY,CAAY,CAAC,EAC3F,KACJ,CACJ,KACK,UAAW,CACZ,GAAI,GAAa,EAAE,aAAa,EAAK,UAAU,EAC3C,EAAa,EAAE,aAAa,EAAK,UAAU,EAC3C,EAAc,CACd,GAAG,EACH,UAAW,OACX,WAAY,EACZ,WAAY,EACZ,MAAO,GACP,YAAa,IAAM,CACf,EAAE,OAAO,CAAU,EACnB,KAAK,aAAa,EAAK,WAAY,CAAI,CAC3C,CACJ,EACA,KAAK,aAAa,CAAW,EAC7B,KACJ,KACK,aACA,QAAS,CACV,GAAI,GAAU,EAAE,aAAa,EAAK,UAAU,EACxC,EAAW,EAAK,YAAc,SAAW,aAAe,YAC5D,EAAK,WAAW,sBAAsB,EAAU,CAAO,EACvD,KAAK,gBAAgB,EAAS,CAAI,EAClC,KAAK,aAAa,EAAS,CAAI,EAC/B,KAAK,cAAc,EAAS,CAAI,EAChC,KAAK,aAAa,GAAG,QAAQ,EAAS,EAAK,UAAW,CAAI,EAAE,KAAK,IAAM,EAAE,OAAO,CAAO,CAAC,CAAC,EACzF,KACJ,SAEI,GAAG,KAAK,wBAAyB,EAAK,SAAS,EAG3D,CACA,gBAAgB,EAAS,EAAM,CAC3B,KAAK,YAAY,gBAAgB,CAAO,EACxC,KAAK,eAAe,CAAI,EACxB,KAAK,aAAa,GAAG,MAAM,EAAS,CAAI,CAAC,EACzC,KAAK,aAAa,CAAO,CAC7B,CACA,6BAA6B,EAAM,CAC/B,GAAM,GAAsB,CAAC,EAC7B,GAAI,EAAK,KACL,OAAS,KAAY,GAAK,WAAW,iBAAiB,WAAW,EAAG,CAChE,GAAI,GAAW,GAAG,SAAS,SAAS,CAAE,GAAG,EAAM,WAAY,EAAU,gBAAiB,EAAK,CAAC,EAC5F,GAAI,EAAU,CACV,GAAM,GAAgB,EAAS,UAAU,EAAI,EAC7C,EAAS,sBAAsB,cAAe,CAAa,EAC3D,EAAS,UAAU,IAAI,YAAY,EACnC,GAAG,OAAO,eAAe,EAAS,UAAU,EAC5C,GAAI,GAAY,GAAG,SAAS,QAAQ,EAAS,UAAU,EACvD,EAAS,SAAW,EAAE,IAAI,EAAW,SAAU,EAAU,CACrD,GAAI,GAAc,GAAG,SAAS,gBAAgB,CAAQ,EACtD,MAAO,IAAM,GAAG,SAAS,gBAAgB,EAAa,CAAQ,CAClE,CAAC,EACD,AAAI,KAAK,gBAAgB,EACrB,EAAS,WAAW,YAAY,CAAQ,EAGxC,SAAS,KAAK,OAAO,CAAQ,EAEjC,EAAoB,KAAK,CAAQ,CACrC,CACJ,CAEJ,EAAK,oBAAsB,CAC/B,CACA,4BAA4B,EAAM,CAC9B,OAAS,KAAY,GAAK,oBAAqB,CAC3C,EAAS,WAAW,YAAY,EAAS,UAAU,EACnD,OAAS,KAAW,GAAS,SACzB,EAAQ,CAEhB,CACJ,CACA,6BAA6B,EAAM,CAC/B,OAAS,KAAY,GAAK,oBACtB,EAAS,WAAW,UAAU,OAAO,YAAY,EACjD,GAAG,SAAS,SAAS,CAAQ,CAErC,CACA,iBAAkB,CACd,MAAO,GAAE,KAAK,KAAK,OAAQ,AAAC,GAAS,EAAK,WAAW,QAAQ,MAAM,CAAC,CACxE,CACA,aAAa,EAAU,EAAS,CAM5B,MAAO,AALe,IAAI,IAAG,cAAc,CACvC,GAAG,EACH,WACA,UAAW,GAAG,SAAS,OAAO,SAClC,CAAC,EACoB,QAAQ,EAAQ,KAAK,CAC9C,CACA,cAAc,EAAU,EAAS,CAM7B,MAAO,AALW,IAAI,IAAG,kBAAkB,CACvC,GAAG,EACH,WACA,UAAW,GAAG,SAAS,OAAO,UAClC,CAAC,EACgB,QAAQ,EAAQ,MAAM,CAC3C,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,OAAO,WAAa,aAAyB,IAAG,MAAO,CACtD,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,MAAQ,EAAQ,KACrB,KAAK,MAAQ,GAAG,MAAM,IAAI,CAAO,EACjC,KAAK,QAAU,EAAQ,OACvB,KAAK,OAAS,EAAQ,MACtB,KAAK,aAAe,EAAQ,aAAe,GAC3C,KAAK,UAAY,EAAQ,SACzB,KAAK,SAAW,EAAQ,SAAW,EACvC,CACA,SAAU,CAGN,GAFA,KAAK,iBAAiB,EACtB,GAAG,QAAQ,gBAAgB,KAAK,OAAO,EACnC,KAAK,gBAAgB,EAAE,kBAAoB,KAAK,aAChD,KAAM,IAAI,IAAG,QAAQ,2BAA2B,EAEpD,KAAK,kBAAkB,EACvB,GAAG,SAAS,MAAM,CAAE,OAAQ,mBAAoB,MAAO,KAAK,KAAM,CAAC,EACnE,KAAK,MAAM,MAAQ,UACnB,GAAM,CAAE,UAAW,KAAK,MACxB,KAAK,MAAM,KAAK,EAChB,KAAK,aAAa,CAAM,EACxB,KAAK,MAAM,iBAAiB,EAC5B,KAAK,MAAM,gBAAgB,KAAK,OAAO,EACvC,KAAK,MAAM,MAAM,OAAO,KAAK,KAAK,EAC9B,KAAK,UACL,EAAO,eAAe,EAE1B,KAAK,MAAM,MAAQ,SACnB,KAAK,iBAAiB,CAAM,CAChC,CACA,iBAAkB,CACd,GAAI,GAAQ,KAAK,MAAM,KAAK,KAAK,YAAY,YAAY,KAAK,OAAO,EAAG,CACpE,SAAU,KAAK,MAAM,SAAS,KAAK,EAAE,eAAe,KAAK,KAAK,GAAG,EACjE,IAAK,CAAC,QAAQ,KAAK,SAAS,KAAK,sBAAuB,KAAK,MAAM,CACvE,CAAC,EACD,YAAK,OAAS,EAAM,MACb,CACX,CACA,mBAAoB,CAChB,GAAI,GAAQ,KAAK,YAAY,YAAY,KAAK,UAAU,EACxD,KAAK,MAAM,KAAK,EAAO,CAAE,IAAK,EAAM,CAAC,CACzC,CACA,iBAAiB,EAAc,CAC3B,GAAM,GAAW,GAAG,KAAK,UACnB,EAAyB,EAAE,eAAe,CAAQ,EACxD,MAAO,MAAK,MAAM,KAAK,KAAK,YAAY,YAAY,GAAU,EAAG,CAC7D,UAAW,EACX,SAAU,KAAK,MAAM,SAAS,KAAK,GAAwB,EAC3D,cAAe,GACf,IAAK,CAAC,GAAG,KAA0B,KAAK,sBAAuB,KAAK,MAAM,CAC9E,CAAC,CACL,CACA,YAAY,EAAM,CACd,MAAO,IAAG,MAAM,MAAM,EAAM,CACxB,MAAO,KAAK,MACZ,MAAO,KAAK,OACZ,OAAQ,KAAK,QACb,SAAU,KAAK,SACnB,CAAC,CACL,CACA,aAAa,EAAc,CACvB,GAAI,GAAW,KAAK,MAAM,SAAS,EAGnC,GAFA,KAAK,MAAM,aAAa,SAAS,EACjC,EAAa,cAAc,YAAY,EACnC,EAAU,CACV,GAAI,GAAkB,KAAK,MAAM,QAAU,EAAa,QACxD,GAAG,MAAM,EAAiB,CAAE,cAAe,EAAK,CAAC,CACrD,CACJ,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,OAAO,QAAW,GAAK,aAAsB,IAAG,MAAO,CAClD,KAAM,UAAU,CACZ,GAAI,GAAgB,KAAK,eAAe,EACxC,GAAI,EACA,UAAG,KAAK,cAAe,CAAa,EACpC,GAAG,QAAQ,SAAS,KAAK,OAAO,EACzB,EAAE,oBAAoB,EAEjC,GAAI,GAAe,KAAK,iBAAiB,EACrC,EAAU,KAAK,QAAU,GAAG,QAAQ,CAAY,EAEpD,MADA,MAAK,QAAQ,iBAAiB,CAAO,EACjC,KAAK,QAAQ,QACN,EACX,MAAK,QAAQ,YAAY,CAAE,UAAS,GAAG,CAAa,CAAC,EACrD,EAAQ,YAAY,KAAK,OAAO,EACzB,KAAM,GAAE,OAAO,EAAS,AAAC,GAAoB,KAAK,kBAAkB,CAAe,CAAC,EAC/F,CACA,gBAAiB,CACb,GAAI,EAAE,cAAc,KAAK,QAAQ,GAAG,EAChC,MAAO,2CAEX,GAAI,KAAK,QAAQ,SAAW,CAAC,GAAG,QAAQ,aAAa,EACjD,MAAO,wDAEf,CACA,kBAAmB,CACf,GAAM,GAAe,KAAK,gCAAgC,KAAK,OAAO,EAChE,EAAY,KAAK,gCAAgC,KAAK,kBAAkB,EAAG,CAAE,SAAU,EAAK,CAAC,EACnG,MAAO,CACH,GAAG,KAAK,QACR,GAAG,EACH,GAAG,EAAE,gBAAgB,EAAW,GAAG,SAAS,OAAO,CACvD,CACJ,CACA,mBAAoB,CAChB,MAAO,MAAK,iBAAiB,CACjC,CACA,gCAAgC,EAAe,EAA0B,CAErE,MAAO,AADiB,IAAI,IAAG,OAAO,YAAY,CAAE,GAAG,EAAe,UAAW,EAAK,CAAC,EAChE,kBAAkB,CAAwB,CACrE,CACA,kBAAkB,EAAU,CACxB,MAAI,aAAoB,IAAG,SAChB,KAAK,8BAA8B,CAAQ,EAG3C,KAAK,2BAA2B,CAAQ,CAEvD,CACA,8BAA8B,EAAU,CACpC,MAAO,IAAI,IAAG,OAAO,aAAa,CAAE,GAAG,KAAK,QAAS,UAAS,CAAC,EAAE,QAAQ,CAC7E,CACA,2BAA2B,EAAO,CAC9B,KAAI,aAAiB,IAAG,SACpB,KAAK,QAAQ,KAAK,sBAAuB,CACrC,SAAU,KAAK,QAAQ,UACvB,cAAe,KAAK,QACpB,MAAO,AAAC,GAAiB,GAAG,OAAO,CAAE,GAAG,KAAK,QAAS,GAAG,CAAa,CAAC,EACvE,IAAK,CAAC,mCAAoC,KAAK,QAAQ,YAAa,EAAM,MAAM,CACpF,CAAC,EAEC,CACV,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,iBAAkB,EACtB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,OAAO,aAAgB,GAAK,aAA2B,IAAG,MAAO,CAC5D,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,UAAY,EAAQ,SACzB,KAAK,SAAW,KAAK,UAAU,OACnC,CACA,SAAU,CAcN,GAbA,AAAI,GAAG,SAAS,OAAO,aAAa,KAAK,kBAAkB,CAAC,EACxD,KAAK,MAAM,EAGX,MAAK,SAAS,cAAc,qBAAsB,CAC9C,GAAG,KAAK,kBAAkB,EAC1B,SAAU,KAAK,QAAQ,SACvB,IAAK,CAAC,0BAA2B,KAAK,UAAU,WAAW,EAC3D,KAAM,IAAM,KAAK,MAAM,CAC3B,CAAC,EACD,KAAK,yBAAyB,GAEvB,EAAE,WAAW,KAAK,QAAQ,KAAM,KAAK,SAAS,GAAK,CAAC,KAAK,UAAU,GAE1E,KAAM,MAAK,2BAA2B,KAAK,kBAAkB,CAAC,EAElE,MAAO,MAAK,2BAA2B,KAAK,OAAO,CACvD,CACA,0BAA2B,CACvB,GAAI,CAAC,GAAG,SAAS,OAAO,mBAAmB,KAAK,SAAS,EACrD,KAAM,IAAI,IAAG,YAAY,CAAC,uGAAwG,KAAK,UAAU,WAAW,CAAC,CAErK,CACA,OAAQ,CACJ,GAAG,KAAK,cAAe,YAAc,KAAK,UAAU,WAAW,EAC/D,KAAK,QAAQ,OAAS,QACtB,KAAK,QAAQ,WAAa,OAC9B,CACA,2BAA2B,EAAoB,CAC3C,AAAI,EAAmB,qBACnB,GAAG,KAAK,cAAe,6FAA6F,EAExH,KAAK,4BAA4B,CAAkB,EACnD,EAAmB,KAAO,KAAK,kBAAkB,EACjD,GAAI,GAAS,GAAI,IAAG,OAAO,YAAY,CAAkB,EAAE,QAAQ,EACnE,SAAO,SAAW,KAAK,OAAO,EAAQ,CAAkB,EACjD,CACX,CACA,KAAM,QAAO,EAAc,EAAuB,CAC9C,SAAe,KAAM,GAAa,SAC9B,GAAG,SAAS,iBAAiB,KAAK,SAAU,KAAK,UAAW,CAAqB,GACjF,GAAe,KAAM,MAAK,YAAY,EAAc,CAAqB,GAEtE,CACX,CACA,KAAM,aAAY,EAAc,EAAuB,CACnD,GAAI,GAAc,EAAsB,OACpC,EAAkB,EAAa,OACnC,GAAI,kBAAkB,KAAK,CAAW,EAClC,GAAG,KAAK,cAAe,gEAAiE,CAAW,MAElG,CACD,GAAG,KAAK,cAAe,+CAAgD,CAAe,EACtF,GAAI,GAAe,KAAM,IAAG,OAAO,EAAiB,CAChD,GAAG,EACH,GAAG,GAAG,cAAc,UACpB,GAAG,GAAG,cAAc,sBACpB,GAAG,GAAG,cAAc,YACpB,kBAAmB,EAAa,UAChC,MAAO,EAAa,MACpB,WAAY,KACZ,gBAAiB,KAAK,UACtB,QAAS,KAAK,mBAAmB,CAAqB,EACtD,MAAO,GACP,MAAO,GACP,WAAY,EAChB,CAAC,EACD,AAAK,EAAa,MACd,GAAe,EAEvB,CACA,MAAO,EACX,CACA,mBAAmB,CAAE,UAAS,qBAAqB,CAC/C,MAAI,KAAsB,GACf,EAGA,CAEf,CACA,mBAAoB,CAChB,GAAM,CAAE,mBAAoB,KAAK,QACjC,MAAO,CACH,QAAS,KAAK,SACd,SAAU,KAAK,UACf,cAAe,KAAK,QACpB,aAAc,CAAC,CAAC,EAChB,iBACJ,CACJ,CACA,mBAAoB,CAChB,GAAI,GAAO,CAAE,aAAc,CAAC,CAAC,KAAK,QAAQ,eAAgB,EAC1D,UAAG,QAAQ,0BAA0B,EAAM,KAAK,SAAS,EAClD,CACX,CACA,4BAA4B,EAAe,CACvC,GAAM,GAAc,KAAK,UAAU,IAC/B,EAAiB,EACjB,EAAO,KAAK,SAAS,KACzB,AAAI,GACA,GAAc,KAAO,EACrB,GAAkB,GAGtB,AADsB,KAAK,UAAU,SAAW,MAE5C,EAAc,OAAS,KAAK,oBAAoB,EAAc,OAAQ,CAAW,EAGjF,GAAc,OAAS,KAAK,oBAAoB,EAAc,OAAQ,MAAM,EAC5E,EAAc,QAAU,CAAC,CAAC,EAAc,UAE5C,GAAI,GAAmB,KAAK,UAAU,UACtC,AAAI,GACA,QAAO,OAAO,EAAe,CACzB,GAAG,GAAG,MAAM,QAAQ,cACpB,OAAQ,OACR,GAAG,GAAG,SAAS,OAAO,gBACtB,GAAG,EACH,MAAO,KACX,CAAC,EACD,OAAO,OAAO,EAAe,CAAgB,GAEjD,EAAc,SAAW,KAAK,oBAAoB,EAAc,SAAU,CAAc,EACxF,EAAc,MAAQ,KAAK,oBAAoB,EAAc,MAAO,KAAK,UAAU,KAAK,EACxF,EAAc,WAAa,KAAK,UAAU,WAC1C,GAAI,GAAe,KAAK,UAAU,OAClC,AAAI,GACA,GAAc,OAAS,GAE3B,EAAc,YAAc,KAAK,UAAU,YAC3C,EAAc,aAAe,KAAK,UAAU,aAC5C,EAAc,SAAW,KAAK,UAAU,KACpC,KAAK,UAAU,MACf,GAAc,OAAS,SAE3B,EAAc,QAAU,EAAE,MAAM,EAAc,QAAS,KAAK,UAAU,OAAO,EAC7E,EAAc,QAAU,KAAK,UAAU,QACvC,EAAc,OAAS,KAAK,UAAU,aACtC,EAAc,OAAS,KAAK,UAAU,IAC1C,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,kBAAmB,EACvB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,OAAO,YAAe,GAAK,aAA0B,IAAG,MAAO,CAC1D,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,QAAU,EAAQ,OACvB,KAAK,WAAa,EAAQ,UAC1B,KAAK,QAAU,GAAG,MAAM,OAAO,CAAO,CAC1C,CACA,WAAY,CACR,GAAI,GAAQ,CAAC,EACb,YAAK,cAAc,EACnB,KAAK,+BAA+B,EACpC,KAAK,iBAAiB,EAAO,KAAK,QAAS,KAAK,QAAQ,MAAM,EAC9D,KAAK,iBAAiB,EAAO,KAAK,QAAS,KAAK,QAAQ,QAAQ,EACzD,CACX,CACA,mBAAmB,EAAO,CACtB,MAAQ,KAAU,OAAU,EAAM,QAAQ,CAC9C,CACA,eAAgB,CACZ,KAAK,QAAU,EAAE,OAAO,KAAK,QAAS,KAAK,kBAAkB,CACjE,CACA,iBAAiB,EAAO,EAAQ,EAAS,CACrC,OAAS,KAAS,GACd,OAAS,KAAU,MAAK,eAAe,EAAS,CAAK,EAAG,CACpD,GAAM,GAAQ,CAAE,GAAG,KAAK,QAAS,SAAQ,QAAO,iBAAkB,KAAK,kBAAkB,CAAE,EACrF,EAAS,IAAU,MAAQ,GAAI,IAAG,OAAO,UAAU,CAAK,EAAI,GAAI,IAAG,OAAO,YAAY,CAAK,EACjG,EAAM,KAAK,CAAM,CACrB,CAER,CACA,eAAe,EAAS,EAAO,CAC3B,MAAO,IAAG,SAAS,cAAc,EAAS,CAAE,QAAO,KAAM,KAAK,QAAQ,KAAM,OAAQ,KAAK,OAAQ,CAAC,CACtG,CACA,SAAU,CACN,MAAI,MAAK,QAAQ,QACN,QAAQ,QAAQ,EAEpB,KAAK,UAAU,KAAK,aAAa,KAAK,IAAI,CAAC,GAAK,KAAK,6BAA6B,CAC7F,CACA,aAAa,EAAa,CACtB,MAAO,GAAY,QAAQ,KAAK,gBAAgB,EAAG,KAAK,kBAAkB,KAAK,KAAM,CAAW,CAAC,CACrG,CACA,uBAAuB,EAAO,CAC1B,MAAO,CAAE,aAAiB,IAAG,YACjC,CACA,kBAAkB,EAAM,CACpB,GAAI,GAAc,KAAK,UAAU,EAAE,GACnC,AAAI,IAAS,GACT,GAAG,KAAK,cAAe,wEAAyE,EAAY,OAAQ,EAAK,MAAM,EAEnI,GAAI,CAAE,UAAW,KAAK,gBAAgB,EACtC,AAAI,GACA,GAAG,OAAO,eAAe,EAAQ,EAAK,OAAO,EAEjD,KAAK,QAAQ,YAAY,KAAK,kBAAkB,CAAC,CACrD,CACA,iBAAkB,CACd,GAAI,KAAK,WACL,OACJ,GAAM,GAAa,EAAE,KAAK,KAAK,QAAS,CACpC,SACA,UACA,WACA,WACA,OACA,UACA,SACA,MACJ,CAAC,EACD,UAAG,QAAQ,2BAA2B,CAAU,EAC5C,KAAK,kBAAkB,IAAM,WAC7B,GAAW,OAAS,KAAK,qBAAqB,EAAW,MAAM,GAE5D,GAAI,IAAG,YAAY,CAAU,CACxC,CACA,gCAAiC,CAC7B,GAAI,KAAK,WACL,OACJ,GAAI,GAAc,KAAK,gBAAgB,EACvC,AAAI,KAAK,QAAQ,UACb,MAAK,QAAQ,SAAW,EAAY,aAAa,GAErD,KAAK,QAAQ,MAAQ,KAAK,oBAAoB,KAAK,QAAQ,MAAO,EAAY,KAAK,EACnF,KAAK,QAAQ,SAAW,KAAK,oBAAoB,KAAK,QAAQ,SAAU,EAAY,QAAQ,EAC5F,KAAK,QAAQ,KAAO,KAAK,oBAAoB,KAAK,QAAQ,KAAM,EAAY,IAAI,CACpF,CACA,mBAAoB,CAChB,GAAI,CAAC,KAAK,QAAQ,UAAY,CAAC,KAAK,QAAQ,SACxC,MAAO,SAEf,CACA,qBAAqB,EAAQ,CACzB,GAAI,GAAQ,KAAK,QAAQ,IAAM,GAAG,MAAM,KACxC,MAAO,MAAK,eAAe,GAAU,QAAS,CAAK,EAAE,EACzD,CACA,kBAAkB,EAAO,CAAC,EAAG,CACzB,GAAM,GAAe,AAAC,GAAS,EAAK,kBAAkB,EACtD,MAAO,MAAK,UAAU,CAAY,GAAK,EAAK,UAAY,KAAK,4BAA4B,CAC7F,CACA,6BAA8B,CAC1B,KAAK,mBAAmB,uCAAuC,CACnE,CACA,8BAA+B,CAC3B,KAAK,mBAAmB,2DAA2D,CACvF,CACA,mBAAmB,EAAQ,CACvB,GAAI,KAAK,UAAU,EAAE,OAAQ,CACzB,GAAM,GAAc,EAAE,KAAK,EAAE,IAAI,KAAK,UAAU,EAAG,QAAQ,CAAC,EACtD,EAAuB,GAAG,MAAM,eAAe,KAAK,QAAQ,KAAK,EACvE,KAAM,IAAI,IAAG,YAAY,CAAC,EAAS,8BAA+B,EAAa,CAAoB,CAAC,CACxG,SACS,KAAK,QAAQ,SAAW,EAC7B,KAAK,kBAAkB,MAEtB,MAAI,MAAK,QAAQ,oBACZ,GAAI,IAAG,YAAY,qFAAqF,EAGxG,GAAI,IAAG,YAAY,0BAA0B,CAE3D,CACA,mBAAoB,CAChB,KAAM,IAAI,IAAG,YAAY,iHAAiH,CAC9I,CACA,UAAU,EAAI,CACV,OAAS,KAAQ,MAAK,UAAU,EAC5B,GAAI,CACA,MAAO,GAAG,CAAI,CAClB,OACO,EAAP,CACI,GAAI,KAAK,uBAAuB,CAAK,EACjC,KAAM,EAEd,CAER,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,UAAW,GACX,gBAAiB,GACjB,kBAAmB,EACvB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,aAAe,KAAmB,CACjC,YAAY,EAAM,EAAW,CAAE,QAAO,OAAM,WAAU,UAAS,QAAQ,CACnE,IAAU,GAAG,MAAM,IAAI,CAAI,GAAK,GAAG,MAAM,QACzC,KAAK,MAAQ,EACb,KAAK,WAAa,EAClB,KAAK,OAAS,EACd,KAAK,MAAQ,EACb,KAAK,UAAY,GAAY,EAC7B,KAAK,SAAW,EAChB,KAAK,iBAAmB,CAAC,EACzB,IAAS,CAAC,EACV,EAAK,MAAQ,EACb,KAAK,MAAQ,CACjB,CACA,KAAM,CACF,YAAK,OAAO,UAAU,IAAM,CACxB,KAAK,eAAe,EACpB,OAAS,KAAY,MAAK,WACtB,KAAK,aAAa,CAAQ,CAElC,CAAC,EACM,QAAQ,IAAI,KAAK,gBAAgB,CAC5C,CACA,gBAAiB,CAIb,GAHI,KAAK,OACL,MAAK,UAAU,cAAgB,KAAK,OAEpC,KAAK,SACL,OAAS,KAAY,MAAK,SACtB,OAAS,KAAS,MAAK,QAAQ,CAAQ,EACnC,EAAM,cAAgB,KAAK,SAAS,EAIpD,CACA,aAAa,EAAU,CACnB,GAAM,GAAU,KAAK,YAAY,CAAQ,EACzC,GAAI,EAAC,EAAQ,OAMb,IAHK,EAAS,WACV,GAAG,KAAK,aAAc,8BAA4B,EAAQ,OAAQ,EAAS,SAAU,KAAK,MAAM,EAEhG,EAAS,MACT,KAAK,cAAc,EAAU,CAAO,MAGpC,QAAS,KAAS,GACd,KAAK,mBAAmB,EAAU,CAAK,EAG/C,GAAG,QAAQ,cAAc,EAAS,CAAQ,EAC9C,CACA,mBAAmB,EAAU,EAAS,CAClC,GAAM,GAAc,CAAC,CAAO,EAC5B,GAAI,EAAS,SAAW,EAAG,CACvB,GAAM,GAAO,GAAG,OAAO,KAAK,CAAO,EACnC,EAAY,KAAK,EAAM,KAAK,KAAK,CACrC,CACA,GAAI,GAAe,AAAC,GAAe,GAAG,WAAW,EAAS,CAAU,EACpE,KAAK,uBAAuB,EAAU,EAAS,EAAa,CAAY,CAC5E,CACA,cAAc,EAAU,EAAU,CAC9B,GAAM,GAAc,CAAC,CAAQ,EAC7B,GAAI,EAAS,SAAW,EAAG,CACvB,GAAM,GAAW,EAAE,IAAI,EAAU,GAAG,OAAO,IAAI,EAC/C,EAAY,KAAK,EAAU,KAAK,KAAK,CACzC,CACA,GAAI,GAAe,IAAM,KAAK,mCAAmC,CAAQ,EACzE,KAAK,uBAAuB,EAAU,EAAU,EAAa,CAAY,CAC7E,CACA,KAAM,wBAAuB,EAAU,EAAmB,EAAa,EAAc,CACjF,GAAI,GAAkB,GAAG,MAAM,MAAM,IAAM,EAAS,MAAM,EAAmB,CAAW,CAAC,EACzF,GAAI,EAAE,UAAU,CAAe,EAAG,CAC9B,GAAI,GAAiB,GAAG,MAAM,aAAa,CAAe,EAC1D,KAAK,iBAAiB,KAAK,CAAc,EACzC,EAAkB,KAAM,EAC5B,CACA,AAAI,GACA,EAAa,CAAe,CACpC,CACA,mCAAmC,EAAU,CACzC,GAAI,GAAQ,GAAI,IAAG,MAAM,CAAC,iDAAkD,EAAS,QAAQ,CAAC,EAC9F,YAAY,CAAK,CACrB,CACA,QAAQ,EAAU,CACd,MAAO,IAAG,SAAS,QAAQ,KAAK,MAAO,EAAE,WAAW,CAAQ,EAAG,CAAE,MAAO,KAAK,MAAO,CAAC,CACzF,CACA,YAAY,EAAU,CAClB,GAAI,GAAU,KAAK,QAAQ,EAAS,QAAQ,EAC5C,MAAK,GAAS,OACV,GAAU,EAAE,OAAO,EAAS,AAAC,GAAY,CACrC,GAAI,GAAoB,EAAQ,qBAAuB,GAAI,KAC3D,GAAI,CAAC,EAAiB,IAAI,CAAQ,EAC9B,SAAiB,IAAI,CAAQ,EACtB,EAEf,CAAC,GAEE,CACX,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,cAAgB,KAAoB,CACnC,YAAY,EAAS,EAAW,EAAS,CACrC,KAAK,SAAW,EAChB,KAAK,WAAa,EAClB,KAAK,eAAiB,OAAO,KAAK,KAAK,UAAU,EACjD,KAAK,aAAe,EAAQ,YAC5B,KAAK,UAAY,EAAQ,SACzB,KAAK,QAAU,EAAQ,OACvB,KAAK,UAAY,EACrB,CACA,OAAQ,CACJ,MAAI,MAAK,eAAe,SAAW,EAC/B,MAAK,UAAY,GACV,QAAQ,QAAQ,GAE3B,MAAK,UAAY,EAAE,YAAY,EAC/B,KAAK,oBAAoB,EACzB,KAAK,WAAa,GAAI,MACtB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EACX,KAAK,UAChB,CACA,sBAAuB,CACnB,AAAI,KAAK,cACL,MAAK,yBAA2B,GAAG,GAAG,KAAK,SAAU,KAAK,aAAc,KAAK,eAAe,KAAK,IAAI,CAAC,EAE9G,CACA,eAAe,EAAO,CAClB,EAAM,gBAAgB,EACtB,KAAK,QAAQ,CACjB,CACA,qBAAsB,CAElB,KAAK,eAAiB,EAAE,MAAO,KAAK,UAAY,IAAkB,IAAM,KAAK,QAAQ,CAAC,CAC1F,CACA,oBAAqB,CACjB,aAAa,KAAK,cAAc,CACpC,CACA,wBAAyB,CACrB,KAAK,2BAA6B,GAAG,GAAG,KAAK,SAAU,gBAAiB,KAAK,iBAAiB,KAAK,IAAI,CAAC,CAC5G,CACA,iBAAiB,EAAO,CAKpB,GAJI,EAAM,SAAW,KAAK,UAItB,AADY,GAAI,MAAS,KAAK,YAClB,IAAO,KAAK,UACxB,OAEJ,GAAM,GAAoB,EAAM,aAChC,AAAI,EAAE,SAAS,KAAK,eAAgB,CAAiB,GACjD,KAAK,QAAQ,CAErB,CACA,SAAU,CACN,AAAI,KAAK,WAGT,MAAK,UAAY,GACjB,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,EAAE,sBAAsB,KAAK,QAAQ,EACrC,KAAK,qBAAqB,EAC1B,KAAK,UAAU,QAAQ,EAC3B,CACA,qBAAsB,CAClB,GAAM,GAAgB,EAAE,MAAM,KAAK,SAAU,CACzC,sBACA,sBACA,mBACA,4BACJ,CAAC,EACD,GAAI,EAAE,iBAAiB,CAAa,EAAG,CACnC,GAAI,EAAc,yBAA2B,MAAO,CAChD,GAAM,GAA0B,EAAc,uBAAuB,MAAM,SAAS,EAC9E,EAAqB,EAAE,MAAM,KAAK,SAAU,CAAuB,EACzE,KAAK,6BAA+B,EAAE,aAAa,KAAK,SAAU,CAAkB,CACxF,CACA,KAAK,kBAAoB,EAAE,sBAAsB,KAAK,QAAQ,CAClE,CACJ,CACA,sBAAuB,CACnB,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,CAC7B,CACA,cAAe,CACX,EAAE,SAAS,KAAK,SAAU,CACtB,sBAAuB,KAAK,eAAe,KAAK,EAChD,sBAAuB,GAAG,KAAK,cAC/B,6BAA8B,KAAK,OACvC,CAAC,EACD,EAAE,SAAS,KAAK,SAAU,KAAK,UAAU,CAC7C,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,eAAiB,KAAqB,CACrC,YAAY,EAAU,EAAS,CAC3B,KAAK,UAAY,EACjB,KAAK,SAAW,CACpB,CACA,KAAM,CACF,OAAS,KAAa,MAAK,kBAAkB,EAEzC,AADe,EAAE,SAAS,EAAW,eAAe,GAC1C,MAAM,CAAS,CAEjC,CACA,mBAAoB,CAChB,GAAM,GAAgB,CAAE,GAAG,KAAK,SAAU,WAAY,EAAK,EAC3D,MAAO,IAAG,SAAS,QAAQ,KAAK,UAAW,gBAAiB,CAAa,CAC7E,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,aAAe,aAA2B,IAAG,MAAO,CACnD,MAAO,CACH,MAAO,CACH,SACA,QACA,YACA,WACA,MACA,eACJ,CACJ,CACA,MAAO,CACH,YAAK,aAAa,EAClB,AAAI,KAAK,UACL,KAAK,UAAU,UAAU,IAAM,KAAK,eAAe,CAAC,EAGpD,KAAK,eAAe,EAEjB,KAAK,KAChB,CACA,gBAAiB,CACb,KAAK,OAAO,cAAc,KAAK,KAAK,EAChC,KAAK,eAAiB,CAAC,KAAK,OAAO,aACnC,SAAS,cAAc,KAAK,KAAK,EAErC,GAAG,MAAM,MAAM,IAAM,KAAK,WAAW,KAAK,KAAK,CAAC,CACpD,CACA,eAAgB,CACZ,GAAM,GAAQ,KAAK,KAAK,EACxB,GAAI,EAAM,iBACN,KAAM,IAAI,IAAG,QAAQ,SAAS,EAAM,oBAAoB,CAEhE,CACA,cAAe,CACX,GAAI,CAAC,GAAG,IAAI,OAAO,QACf,OAEJ,GAAI,GAAU,KAAK,IACf,EACJ,AAAI,EAAE,QAAQ,CAAO,EACjB,CAAC,EAAS,GAAG,CAAW,EAAI,EAG5B,EAAc,CAAC,EAEnB,GAAM,CAAE,QAAS,KAAK,MACtB,AAAI,EAAE,SAAS,CAAO,EAClB,GAAG,KAAK,EAAM,EAAS,GAAG,CAAW,EAEhC,IAAY,IACjB,GAAG,KAAK,EAAM,SAAS,GAAM,CAErC,CACA,MAAO,cAAa,EAAM,EAAW,CAAC,EAAG,CACrC,GAAI,GAAU,EAAE,eAAe,CAAI,EACnC,EAAU,EAAE,MAAM,EAAU,CAAO,EACnC,AAAI,EAAE,cAAc,EAAK,EAAE,EACvB,EAAQ,OAAS,EAAE,IAAI,EAAK,MAAM,CAAC,EAE9B,EAAK,YAAc,IAAG,OAC3B,GAAQ,MAAQ,EAAK,MAAM,GAE/B,GAAI,GACJ,MAAI,GAAE,QAAQ,EAAQ,KAAK,GACvB,GAAQ,GAAG,MAAM,IAAI,EAAQ,KAAK,EAClC,EAAQ,SAAW,EAAM,QACzB,EAAQ,YAAc,GAEtB,EAAQ,WACR,GAAQ,UAAY,GAAG,MAAM,IAAI,EAAQ,SAAS,GAEtD,AAAI,EAAE,SAAS,EAAQ,MAAM,EACzB,EAAQ,OAAS,GAAG,SAAS,IAAI,EAAQ,OAAQ,CAAE,MAAO,EAAQ,KAAM,CAAC,EAEnE,EAAQ,QACd,GAAQ,OAAS,UAErB,AAAI,EAAK,IAAI,eACT,GAAQ,MAAQ,EAAK,GACrB,EAAQ,MAAQ,EAAK,GAAG,KAEvB,AAAI,EAAE,SAAS,EAAK,EAAE,EACvB,EAAQ,MAAQ,GAAG,MAAM,MAAM,EAAK,GAAI,CAAO,EAG/C,EAAQ,MAAQ,GAAG,MAAM,MAAM,CAAO,EAEnC,GAAK,MAAM,CAAO,CAC7B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,cAAgB,aAA4B,IAAG,MAAO,CACrD,MAAO,CACH,MAAO,CACH,UACA,YACA,WACA,WACA,QACA,YACA,UACA,OACA,UACA,YACJ,CACJ,CACA,YAAY,EAAY,CACpB,MAAM,CAAU,EAChB,KAAK,KAAO,KAAK,YAAY,UAAU,CAAU,EACjD,KAAK,UAAY,GAAG,UAAU,QAC9B,KAAK,aAAgB,KAAK,UAAU,QAAQ,eAAe,IAAM,EACjE,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,CACvD,CACA,MAAO,CACH,GAAM,GAAO,KAAK,QAAQ,mBAAqB,CAAC,EAChD,AAAI,EAAI,KAAK,OACT,GAAG,KAAK,kEAAmE,KAAK,UAAW,KAAK,QAAQ,EAE5G,EAAI,KAAK,MAAQ,KACjB,KAAK,QAAQ,iBAAiB,GAAG,KAAK,gBAAgB,CAAC,CAC3D,CACA,iBAAkB,CACd,GAAI,GAAU,EAAE,cAAc,EAAE,KAAK,KAAM,CAAC,OAAQ,UAAW,SAAS,CAAC,CAAC,EAC1E,MAAO,CAAC,KAAK,UAAW,KAAK,eAAgB,CAAO,CACxD,CACA,QAAS,CACL,GAAI,GAAM,KAAK,QAAQ,iBACvB,AAAI,GACA,MAAO,GAAI,KAAK,MAEpB,KAAK,QAAQ,oBAAoB,GAAG,KAAK,gBAAgB,CAAC,CAC9D,CACA,eAAe,EAAO,CAClB,GAAI,GAAG,UAAU,YAAc,CAAC,KAAK,WACjC,OAEJ,GAAI,GAAU,EAAM,OACpB,GAAI,KAAK,SAAU,CACf,GAAI,GAAW,EAAE,WAAW,KAAK,QAAQ,EACzC,EAAU,EAAQ,QAAQ,CAAQ,CACtC,CACA,GAAI,OAAK,OAAS,CAAC,KAAK,MAAM,CAAK,IAG/B,EAAS,CACT,GAAM,GAAO,CAAC,EAAO,CAAO,EACtB,EAAmB,KAAK,SAAS,OACvC,GAAI,IAAqB,GAAK,IAAqB,EAAG,CAClD,GAAM,GAAO,GAAG,OAAO,KAAK,CAAO,EACnC,EAAK,KAAK,CAAI,CAClB,CACA,GAAI,KAAK,YAAc,SAAW,EAAQ,SACtC,OAEJ,GAAM,GAAgB,KAAK,SAAS,KAAK,EAAS,GAAG,CAAI,EACzD,AAAI,KAAK,UACL,KAAK,UAAU,UAAU,CAAa,EAGtC,EAAc,CAEtB,CACJ,CACA,MAAO,aAAY,EAAY,CAC3B,GAAI,GAAM,EAAW,QAAQ,iBAC7B,GAAI,EAAK,CACL,GAAM,GAAM,KAAK,UAAU,CAAU,EACrC,MAAO,GAAI,EACf,CACJ,CACA,MAAO,WAAU,EAAY,CACzB,SAAW,SAAS,QAAU,EAAE,IAAI,EAC7B,CACH,EAAW,UACX,EAAW,SACX,EAAW,SAAS,KACxB,EAAE,KAAK,GAAG,CACd,CACA,MAAO,eAAc,EAAS,CAC1B,GAAI,GAAM,EAAQ,iBAClB,GAAI,EAAK,CACL,GAAM,GAAY,OAAO,OAAO,CAAG,EACnC,MAAO,GAAE,OAAO,EAAW,WAAW,CAC1C,KAEI,OAAO,CAAC,CAEhB,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,mBAAqB,aAAiC,IAAG,MAAO,CAC/D,MAAO,CACH,MAAO,CACH,WACA,aACA,WACA,WACA,QACA,YACA,UACA,OACA,UACA,YACJ,CACJ,CACA,MAAO,CACH,GAAM,GAAU,EAAE,QAAQ,EAC1B,YAAK,wBAAwB,SAAU,EAAO,CAC1C,GAAM,GAAW,GAAI,IAAG,cAAc,CAAK,EAC3C,SAAS,KAAK,EACP,EAAQ,EAAS,OAAO,KAAK,CAAQ,CAAC,CACjD,CAAC,EACM,EAAQ,KACnB,CACA,wBAAwB,EAAI,CACxB,OAAS,KAAW,MAAK,SACrB,OAAS,KAAa,MAAK,WACvB,EAAG,KAAK,oBAAoB,EAAS,CAAS,CAAC,CAG3D,CACA,oBAAoB,EAAS,EAAW,CACpC,MAAO,CAAE,GAAG,KAAK,WAAW,EAAG,UAAS,WAAU,CACtD,CACA,QAAS,CACL,KAAK,wBAAwB,SAAU,EAAO,CAC1C,GAAI,GAAW,GAAG,cAAc,YAAY,CAAK,EACjD,AAAI,GACA,EAAS,OAAO,CAExB,CAAC,CACL,CACA,MAAO,cAAa,EAAM,EAAW,CACjC,EAAO,EAAE,KAAK,CAAI,EAClB,GAAM,GAAW,EAAK,IAAI,EACtB,EACJ,AAAI,EAAK,GAAG,iBACR,EAAW,CAAC,EAAK,MAAM,CAAC,EAEvB,AAAI,EAAE,SAAS,EAAK,EAAE,GAAM,EAAE,OAAO,EAAK,EAAE,GAAK,EAAK,GAAG,GAAG,iBAC7D,EAAW,EAAK,MAAM,EAGtB,EAAW,CAAC,QAAQ,EAExB,GAAI,GAAa,EAAE,gBAAgB,EAAK,MAAM,CAAC,EAC3C,EAAW,GAAG,QAAQ,cAC1B,AAAI,GACA,GAAa,EAAS,CAAU,GAEpC,GAAM,GAAU,EAAE,eAAe,CAAI,EAC/B,EAAW,EAAK,GAChB,EAAa,CAAE,WAAU,aAAY,WAAU,WAAU,GAAG,EAAS,GAAG,CAAU,EACxF,MAAO,IAAK,MAAM,CAAU,CAChC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,gBAAkB,KAAsB,CACvC,YAAY,EAAU,EAAS,EAAa,CACxC,KAAK,UAAY,EACjB,KAAK,aAAe,EACpB,KAAK,OAAS,EAAQ,OAAS,MAC/B,KAAK,QAAU,EAAQ,QAAU,EAAE,SACnC,KAAK,cAAgB,GAAI,KACzB,KAAK,eAAiB,EAC1B,CACA,OAAQ,CACJ,YAAK,cAAc,EACZ,EAAE,SAAS,KAAK,gBAAgB,EAAG,IAAM,KAAK,kBAAkB,CAAC,CAC5E,CACA,iBAAkB,CACd,MAAO,IAAG,GAAG,6CAA8C,IAAM,KAAK,cAAc,CAAC,CACzF,CACA,eAAgB,CACZ,AAAK,KAAK,gBACN,MAAK,eAAiB,GACtB,GAAG,SAAS,YAAY,IAAM,KAAK,MAAM,CAAC,EAElD,CACA,OAAQ,CACJ,KAAK,eAAiB,GACtB,GAAI,GAAY,GAAI,KAAI,KAAK,aAAa,EAC1C,KAAK,cAAc,MAAM,EACzB,OAAS,KAAY,MAAK,gBAAiB,CACvC,GAAI,GAAsB,EAAU,IAAI,CAAQ,EAChD,EAAU,OAAO,CAAQ,EACzB,GAAI,GAAiB,GAAuB,KAAK,aAAa,CAAQ,GAAK,EAAE,KAC7E,KAAK,cAAc,IAAI,EAAU,CAAc,CACnD,CACA,KAAK,oBAAoB,CAAS,CACtC,CACA,GAAI,kBAAkB,CAClB,GAAI,GAAa,GAAG,SAAS,IAAI,KAAK,UAAW,CAAE,MAAO,KAAK,MAAO,CAAC,EACvE,MAAO,MAAK,QAAQ,CAAU,CAClC,CACA,mBAAoB,CAChB,KAAK,oBAAoB,KAAK,aAAa,CAC/C,CACA,oBAAoB,EAAK,CACrB,OAAS,CAAC,EAAS,IAAmB,GAClC,EAAe,CAAO,CAE9B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,aAAe,KAAmB,CACjC,YAAY,EAAM,EAAS,EAAU,CACjC,KAAK,SAAW,EAChB,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,OAAS,EAAQ,MACtB,KAAK,WAAa,EAAQ,WAAa,aACvC,KAAK,iBAAiB,CAC1B,CACA,OAAQ,CACJ,YAAK,iBAAmB,KACxB,KAAK,iBAAmB,KAAK,iBAAiB,EAC9C,KAAK,cAAgB,KACrB,KAAK,iBAAmB,GACjB,EAAE,SAAS,KAAK,aAAa,EAAG,KAAK,YAAY,EAAG,KAAK,YAAY,EAAG,IAAM,KAAK,OAAO,CAAC,CACtG,CACA,kBAAmB,CACf,GAAM,GAAO,AAAC,GAAY,GAAG,KAAK,EAAS,KAAK,WAAY,KAAK,KAAK,EACtE,AAAK,KAAK,WACN,EAAK,kCAAkC,EAEvC,KAAK,MAAM,QAAQ,mBAAmB,GACtC,EAAK,sFAAsF,EAE3F,GAAG,KAAK,QAAQ,KAAK,KAAK,GAAK,CAAC,KAAK,MAAM,MAC3C,EAAK,2CAA2C,CAExD,CACA,cAAe,CACX,MAAI,IAAG,KAAK,QAAQ,KAAK,KAAK,EACnB,KAAK,YAAY,KAAK,KAAK,EAG3B,GAAG,KAAK,YAAY,KAAK,MAAO,AAAC,GAAU,KAAK,YAAY,CAAK,CAAC,CAEjF,CACA,aAAc,CACV,GAAI,GAAQ,CAAC,CAAE,YAAa,EAAO,SAAS,KAAK,OAAO,EACxD,MAAO,IAAG,GAAG,sBAAuB,CAAE,OAAM,EAAG,IAAM,KAAK,OAAO,CAAC,CACtE,CACA,aAAc,CACV,GAAI,GAAQ,CAAC,CAAE,YAAa,IAAW,KAAK,QAC5C,MAAO,IAAG,GAAG,QAAS,CAAE,OAAM,EAAG,AAAC,GAAU,KAAK,aAAa,CAAK,CAAC,CACxE,CACA,GAAI,UAAU,CACV,MAAO,IAAG,KAAK,UAAU,KAAK,KAAK,CACvC,CACA,cAAc,EAAO,CACjB,GAAI,GAAc,EAAE,KAAK,KAAK,QAAQ,EACtC,MAAO,IAAG,KAAK,aAAa,EAAO,EAAa,CAAE,SAAU,CAAE,MAAO,OAAQ,CAAE,CAAC,CACpF,CACA,YAAY,EAAO,CACf,GAAI,GAAe,KAAK,cAAc,CAAK,EACvC,EAAY,EAAa,MAC7B,MAAO,IAAG,GAAG,EAAO,EAAW,AAAC,GAAU,KAAK,OAAO,EAAO,CAAY,CAAC,CAC9E,CACA,QAAS,CACL,KAAK,iBAAmB,IAC5B,CACA,gBAAgB,EAAQ,EAAc,CAClC,KAAK,iBAAmB,EACxB,KAAK,uBAAyB,EAC9B,GAAI,GAAQ,EAAa,OAAS,EAClC,aAAa,KAAK,aAAa,EAC/B,KAAK,cAAgB,EAAE,MAAM,EAAO,IAAM,CACtC,KAAK,cAAgB,KACrB,KAAK,iBAAiB,CAC1B,CAAC,CACL,CACA,aAAa,EAAQ,CACjB,MAAO,CAAC,EAAE,QAAQ,EAAQ,KAAK,gBAAgB,GAAK,CAAC,EAAE,QAAQ,KAAK,iBAAkB,CAAM,CAChG,CACA,KAAM,mBAAmB,CAOrB,GANI,CAAC,KAAK,kBAEN,KAAK,kBAEL,KAAK,eAEL,CAAC,GAAG,SAAS,QAAQ,KAAK,OAAO,EACjC,OACJ,GAAI,GAAkB,EAAE,KAAK,KAAK,uBAAwB,CAAC,QAAS,OAAO,CAAC,EACtE,EAAO,KAAK,eAAe,KAAK,iBAAkB,KAAK,gBAAgB,EAC7E,KAAK,iBAAmB,KAAK,iBAC7B,KAAK,iBAAmB,KACxB,KAAK,iBAAmB,GACxB,KAAK,uBAAyB,KAC9B,GAAM,GAAuB,CAAC,EAC9B,GAAI,KAAK,OACL,EAAqB,KAAK,KAAK,aAAa,EAAM,CAAe,CAAC,MAGlE,QAAS,KAAQ,GAAM,CACnB,GAAM,GAAQ,EAAK,GACnB,EAAqB,KAAK,KAAK,aAAa,EAAO,EAAM,CAAe,CAAC,CAC7E,CAEJ,AAAI,EAAE,KAAK,EAAsB,EAAE,SAAS,GAExC,KADmB,SAAQ,WAAW,CAAoB,EAG9D,KAAK,iBAAmB,GACxB,KAAK,iBAAiB,CAC1B,CACA,gBAAgB,EAAM,CAClB,MAAO,IAAG,MAAM,MAAM,KAAK,UAAW,GAAG,CAAI,CACjD,CACA,eAAe,EAAU,EAAM,CAC3B,GAAM,GAAU,CAAC,EACb,EAAO,OAAO,KAAK,CAAQ,EAC/B,EAAO,EAAK,OAAO,OAAO,KAAK,CAAI,CAAC,EACpC,EAAO,EAAE,KAAK,CAAI,EAClB,OAAS,KAAO,GAAM,CAClB,GAAM,GAAgB,EAAS,GACzB,EAAY,EAAK,GACvB,AAAK,EAAE,QAAQ,EAAe,CAAS,GACnC,GAAQ,GAAO,EAEvB,CACA,MAAO,EACX,CACA,kBAAmB,CACf,MAAO,IAAG,OAAO,cAAc,KAAK,KAAK,EAAE,SAAS,CACxD,CACA,OAAO,EAAO,EAAe,CAAC,EAAG,CAC7B,GAAM,GAAS,KAAK,iBAAiB,EACrC,AAAI,KAAK,aAAa,CAAM,GACxB,IAAG,IAAI,UAAU,CAAK,EACtB,KAAK,gBAAgB,EAAQ,CAAY,EAEjD,CACA,aAAa,EAAO,CAChB,EAAE,KAAK,IAAM,KAAK,OAAO,CAAK,CAAC,CACnC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAyB,CAC3B,CAAE,KAAM,cAAe,OAAO,EAAQ,EAAQ,CAAE,EAAE,OAAO,EAAQ,CAAC,CAAM,CAAG,CAAE,EAC7E,CAAE,KAAM,cAAe,OAAO,EAAQ,EAAQ,CAAE,EAAE,OAAO,EAAQ,CAAM,CAAG,CAAE,EAC5E,CAAE,KAAM,iBAAkB,OAAO,EAAQ,EAAQ,CAAE,GAAG,KAAK,YAAY,EAAQ,CAAM,CAAG,CAAE,EAC1F,CAAE,KAAM,gBAAiB,OAAO,EAAQ,EAAQ,CAAE,GAAG,KAAK,YAAY,EAAQ,CAAC,CAAM,CAAG,CAAE,CAC9F,EACA,GAAG,SAAW,KAAe,CACzB,YAAY,EAAM,CACd,KAAK,MAAQ,EACb,KAAK,kBAAoB,EAAK,aAAa,WAAW,GAAK,GAAG,KAAK,gCAAiC,CAAI,EACxG,KAAK,gBAAkB,EAAK,aAAa,kBAAkB,CAC/D,CACA,OAAQ,CACJ,YAAK,cAAc,EACZ,EAAE,SAAS,KAAK,mBAAmB,EAAG,KAAK,mBAAmB,CAAC,CAC1E,CACA,oBAAqB,CACjB,GAAI,GAAW,IAAM,KAAK,gBAAgB,EAC1C,MAAO,IAAG,QAAQ,iBAAiB,KAAK,MAAO,CAAQ,GAChD,GAAG,MAAM,KAAK,MAAO,CAAE,UAAW,aAAc,EAAG,CAAQ,CACtE,CACA,oBAAqB,CACjB,GAAI,GAAS,AAAC,GAAY,CACtB,GAAI,GAAQ,KAAK,OACjB,MAAO,GAAE,OAAO,EAAS,AAAC,GAAU,GAAO,SAAS,CAAK,CAAC,CAC9D,EACI,EAAkB,AAAC,GAAa,KAAK,gBAAgB,CAAQ,EACjE,MAAO,IAAG,SAAS,cAAc,KAAK,kBAAmB,CAAE,QAAO,EAAG,CAAe,CACxF,CACA,iBAAkB,CACd,KAAK,cAAc,CACvB,CACA,eAAgB,CACZ,GAAM,GAAc,KAAK,kBAAkB,EAC3C,OAAS,KAAY,MAAK,eAAe,EACrC,KAAK,gBAAgB,EAAU,CAAW,CAElD,CACA,gBAAgB,EAAU,EAAc,KAAK,kBAAkB,EAAG,CAC9D,GAAI,GAAiB,EAAS,eAC9B,AAAK,EAAE,QAAQ,EAAgB,CAAW,GACtC,GAAS,eAAiB,EAC1B,KAAK,mBAAmB,EAAU,CAAW,EAErD,CACA,mBAAmB,EAAU,EAAa,CACtC,OAAS,CAAE,OAAM,WAAY,GAAwB,CACjD,GAAI,GAAY,EAAS,aAAa,CAAI,EAC1C,GAAI,EAAW,CACX,GAAI,GAAe,KAAK,qBAAqB,CAAS,EAClD,EAAW,EAAE,UAAU,EAAa,CAAY,EAAE,OAAS,EAC/D,EAAO,EAAU,CAAQ,CAC7B,CACJ,CACA,GAAI,GAAM,CAAC,eAAgB,CAAQ,EACnC,GAAG,KAAK,EAAU,iBAAkB,CAAE,MAAO,KAAK,MAAO,cAAa,KAAI,CAAC,CAC/E,CACA,gBAAiB,CACb,GAAI,GAAQ,KAAK,OACjB,MAAO,GAAQ,GAAG,SAAS,QAAQ,EAAO,KAAK,iBAAiB,EAAI,CAAC,CACzE,CACA,GAAI,SAAS,CACT,MAAI,MAAK,gBACE,GAAG,SAAS,IAAI,KAAK,gBAAiB,CAAE,OAAQ,KAAK,KAAM,CAAC,EAG5D,GAAG,KAAK,UAAU,KAAK,KAAK,CAE3C,CACA,qBAAqB,EAAK,CACtB,MAAO,GAAE,gBAAgB,EAAK,CAAE,KAAM,EAAK,CAAC,CAChD,CACA,mBAAoB,CAChB,GAAI,GAAS,GAAG,OAAO,cAAc,KAAK,KAAK,EAAE,OAAO,EACpD,EAAS,CAAC,GAAG,CAAM,EACnB,EAAa,EAAE,KAAK,EAAQ,EAAE,SAAS,EAC3C,EAAO,KAAK,EAAa,WAAa,QAAQ,EAC9C,GAAI,GAAS,GAAG,KAAK,OAAO,KAAK,KAAK,EACtC,GAAI,EAAO,IAAI,QAAQ,+BAA+B,EAAG,CACrD,GAAI,GAAa,EAAE,KAAK,EAAQ,SAAS,EACzC,EAAO,KAAK,EAAa,WAAa,YAAY,CACtD,CACA,MAAO,EACX,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,cAAgB,KAAoB,CACnC,YAAY,EAAM,CACd,KAAK,MAAQ,EACb,KAAK,gBAAkB,CAAC,EACxB,KAAK,iBAAmB,KACxB,KAAK,WAAa,GAClB,KAAK,YAAY,CACrB,CACA,OAAQ,CACJ,GAAI,GAAQ,AAAC,GAAU,KAAK,mBAAmB,CAAK,EAChD,EAAW,AAAC,GAAU,KAAK,cAAc,CAAK,EAClD,MAAO,IAAG,KAAK,YAAY,KAAK,MAAO,CAAE,OAAM,EAAG,CAAQ,CAC9D,CACA,mBAAmB,EAAO,CACtB,MAAO,GAAM,QAAQ,wCAAwC,CACjE,CACA,cAAc,EAAO,CACjB,GAAI,GAAY,GAAG,KAAK,gBAAgB,CAAK,EAAE,MAC/C,MAAO,IAAG,GAAG,EAAO,EAAW,AAAC,GAAU,CACtC,GAAG,IAAI,UAAU,CAAK,EACtB,GAAG,MAAM,wBAAwB,KAAK,SAAS,CAAE,OAAQ,CAAM,CAAC,CAAC,CACrE,CAAC,CACL,CACA,aAAc,CACV,GAAG,SAAS,UAAU,KAAK,MAAO,AAAC,GAAU,KAAK,WAAW,CAAK,CAAC,CACvE,CACA,WAAW,EAAO,CACd,GAAI,GAAe,GAAI,IAAG,QAAQ,EAAM,MAAM,EAC1C,EACJ,KAAO,EAAW,KAAK,gBAAgB,MAAM,GACzC,EAAS,SAAS,OAAO,CAAY,CAE7C,CACA,SAAS,EAAU,CAAC,EAAG,CACnB,GAAI,GAAe,KAAK,cAAc,CAAO,EAC7C,YAAK,gBAAgB,KAAK,GAAG,CAAY,EACzC,KAAK,oBAAoB,EAClB,EAAa,IAAI,QAC5B,CACA,cAAc,EAAS,CACnB,GAAI,GAAY,KAAK,4BAA4B,CAAO,GACjD,KAAK,mBAAmB,CAAO,GAC/B,KAAK,qBAAqB,EAAQ,MAAM,EAC3C,EAAW,EAAE,YAAY,EAC7B,OAAS,KAAY,GAAW,CAC5B,GAAI,GAAgB,GAAG,KAAK,gBAAgB,EAAS,OAAQ,CAAO,EACpE,EAAS,MAAQ,EAAE,SAAS,EAAe,OAAO,EAClD,EAAS,cAAgB,EACzB,EAAS,YAAc,GAAG,EAAc,UAAU,EAAc,MAChE,EAAS,OAAS,GAAG,SAAS,cAAc,EAAS,OAAQ,CAAQ,EACrE,EAAS,SAAW,CACxB,CACA,MAAO,EACX,CACA,mBAAmB,CAAE,YAAW,GAAW,CACvC,GAAI,GAAG,KAAK,QAAQ,CAAM,EACtB,MAAO,MAAK,0BAA0B,CAAM,GAAK,KAAK,uBAAuB,EAAQ,CAAO,CAEpG,CACA,uBAAuB,EAAO,CAAE,YAAY,IAAQ,CAChD,GAAI,CAAC,EACD,OACJ,GAAI,GAAW,GAAG,KAAK,cAAc,CAAK,EAC1C,GAAI,EACA,UAAG,KAAK,gBAAiB,oCAAqC,CAAK,EAC5D,CAAC,CAAQ,CAExB,CACA,4BAA4B,CAAE,SAAQ,UAAU,CAC5C,GAAI,EAAE,SAAS,CAAM,EAAG,CACpB,GAAG,KAAK,gBAAiB,yBAA0B,CAAM,EACzD,GAAI,GAAkB,GAAG,SAAS,YAAY,CAAM,EACpD,MAAO,GAAE,QAAQ,EAAgB,IAAI,SAAU,EAAgB,CAC3D,GAAI,GAAU,GAAG,SAAS,IAAI,EAAgB,CAAE,QAAO,CAAC,EACxD,GAAI,EACA,MAAO,CACH,UACA,OAAQ,EACR,QACJ,EAGA,GAAG,KAAK,mDAAoD,CAAc,CAElF,CAAC,CAAC,CACN,CACJ,CACA,qBAAqB,EAAS,CAC1B,UAAG,KAAK,gBAAiB,wBAAyB,CAAO,EAClD,CAAC,CACA,UACA,OAAQ,GAAG,SAAS,SAAS,CAAO,EACpC,OAAQ,CACZ,CAAC,CACT,CACA,0BAA0B,EAAO,CAC7B,GAAI,GAAoB,EAAM,QAAQ,eAAe,EACrD,GAAI,EAAmB,CACnB,GAAI,GAAS,EAAE,oBAAoB,EAAmB,aAAa,EACnE,MAAO,MAAK,4BAA4B,CAAE,SAAQ,OAAQ,CAAM,CAAC,CACrE,CACJ,CACA,qBAAsB,CAClB,GAAI,GAAiB,KAAK,gBAAgB,IAAI,AAAC,GAAa,EAAS,cAAc,KAAK,EACpF,EAAgB,KAAK,IAAI,GAAG,CAAc,GAAK,EACnD,aAAa,KAAK,gBAAgB,EAClC,KAAK,iBAAmB,EAAE,MAAM,EAAe,IAAM,CACjD,KAAK,iBAAmB,KACxB,KAAK,sBAAsB,CAC/B,CAAC,CACL,CACA,uBAAwB,CACpB,GAAG,MAAM,wBAAwB,KAAK,wBAAwB,CAAC,CACnE,CACA,KAAM,0BAA0B,CAK5B,GAJI,CAAC,KAAK,gBAAgB,QAEtB,KAAK,YAEL,KAAK,iBACL,OACJ,GAAI,GAAiB,KAAK,2BAA2B,EACjD,EAAgB,KAAK,oBAAoB,CAAc,EAC3D,KAAK,WAAa,GAClB,GAAI,CACA,GAAI,GAAgB,GAAG,OAAO,CAAa,EAC3C,OAAS,KAAY,GACjB,EAAS,SAAS,QAAQ,CAAa,EAE3C,KAAM,EACV,QACA,CACI,KAAK,WAAa,GAClB,KAAK,sBAAsB,CAC/B,CACJ,CACA,4BAA6B,CACzB,GAAI,GAAQ,CAAC,EACT,EAAI,EACR,KAAO,EAAI,KAAK,gBAAgB,QAAQ,CACpC,GAAI,GAAW,KAAK,gBAAgB,GACpC,AAAI,EAAM,SAAW,GAAK,KAAK,mBAAmB,EAAM,GAAI,CAAQ,EAChE,GAAM,KAAK,CAAQ,EACnB,KAAK,gBAAgB,OAAO,EAAG,CAAC,GAGhC,GAER,CACA,MAAO,EACX,CACA,mBAAmB,EAAI,EAAI,CACvB,MAAO,GAAG,cAAgB,EAAG,aAAe,EAAG,OAAS,EAAG,KAC/D,CACA,oBAAoB,EAAgB,CAChC,GAAI,GAAe,EAAE,IAAI,EAAgB,QAAQ,EAC7C,EAAc,EAAE,QAAQ,EAAc,GAAG,KAAK,MAAM,EACpD,EAAa,EAAE,KAAK,EAAE,IAAI,EAAa,MAAM,CAAC,EAC9C,EAAyB,EAAE,IAAI,EAAgB,eAAe,EAC9D,EAAyB,GAAG,KAAK,mBAAmB,KAAK,KAAK,EAC9D,EAAU,EAAE,aAAa,EAAwB,GAAG,CAAsB,EAC9E,SAAQ,OAAS,EAAE,IAAI,EAAgB,QAAQ,EAAE,KAAK,IAAI,EAC1D,EAAQ,OAAS,KAAK,MACtB,EAAQ,QAAU,OAClB,EAAQ,YAAc,GACtB,EAAQ,aAAe,GACvB,EAAQ,OAAS,GAAG,OAAO,MAAM,EAAuB,OAAQ,GAAG,EAAE,IAAI,EAAwB,QAAQ,CAAC,EAC1G,EAAQ,QAAU,EAAE,MAAM,EAAuB,QAAS,GAAG,EAAE,IAAI,EAAwB,SAAS,CAAC,EACrG,KAAK,mBAAmB,EAAQ,QAAS,CAAU,EACnD,EAAQ,SAAW,EAAE,KAAK,EAAwB,UAAU,EAC5D,EAAQ,KAAO,OACf,EAAQ,QAAU,EAAE,UAAU,EAAgB,CAAC,CAAE,SAAQ,UAAS,cAAe,CAAE,OAAM,eAAiB,CACtG,EACA,EAAW,GAAG,KAAK,CAAO,EAAI,CAClC,CAAC,EACD,EAAQ,QAAU,OAClB,EAAQ,WAAa,EAAE,UAAU,EAAgB,CAAC,CAAE,SAAQ,cAAe,CAAE,cAAgB,CAAC,EAAQ,CAAO,CAAC,EAC9G,EAAQ,YAAc,OACtB,EAAQ,eAAiB,EAAE,UAAU,EAAgB,CAAC,CAAE,SAAQ,cAAe,CAAE,kBAAoB,CAAC,EAAQ,CAAW,CAAC,EAC1H,EAAQ,QAAU,EAAe,IAAI,AAAC,GAAa,GAAG,SAAS,cAAc,EAAS,cAAc,QAAS,CAAQ,CAAC,EACtH,EAAQ,WAAa,GAAG,MAAM,MAAM,mBAAoB,CACpD,OAAQ,EACR,IAAK,kBACL,OAAQ,EAAQ,OAChB,KAAM,KAAK,KACf,CAAC,EACM,CACX,CACA,mBAAmB,EAAS,EAAO,CAC/B,GAAI,GAAM,GAAG,SAAS,UAAU,UAAU,EACtC,EAAQ,EAAM,KAAK,GAAG,EAC1B,AAAI,EAAC,GAAS,EAAM,OAAS,GAAG,SAAS,OAAO,gBAC5C,GAAQ,YACZ,EAAQ,GAAO,CACnB,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,aAAe,KAAmB,CACjC,YAAY,EAAS,EAAQ,CACzB,KAAK,SAAW,EAChB,KAAK,QAAU,EACf,KAAK,aAAe,GAAG,SAAS,gBAAgB,KAAK,QAAQ,CACjE,CACA,SAAU,CACN,MAAO,UAAS,gBAAkB,KAAK,UAAY,CAAC,KAAK,OAC7D,CACA,UAAW,CACP,GAAG,GAAG,UAAW,CAAE,KAAM,EAAK,EAAG,IAAM,KAAK,QAAU,EAAI,CAC9D,CACA,QAAQ,EAAO,EAAc,CACzB,GAAI,CAAC,KAAK,QAAQ,EACd,MAAO,GAEX,GAAI,GAAsB,GAAG,SAAS,IAAI,KAAK,QAAS,CAAE,OAAM,CAAC,EACjE,GAAI,EACA,UAAG,SAAS,gBAAgB,KAAK,aAAc,CAAmB,EAClE,GAAG,MAAM,EAAqB,CAAY,EACnC,EAEf,CACA,MAAO,UAAS,EAAO,CACnB,GAAI,GAAiB,GAAG,SAAS,qBAAqB,EAAM,OAAO,EACnE,GAAI,CAAC,EACD,OACJ,GAAI,GAAS,GAAG,SAAS,YAAY,CAAc,EACnD,GAAI,EAAC,EAEL,MAAO,IAAI,MAAK,EAAgB,CAAM,CAC1C,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,kBAAoB,aAAgC,IAAG,MAAO,CAC7D,MAAO,CACH,MAAO,CACH,WACA,YACA,SACA,OACJ,CACJ,CACA,QAAQ,EAAK,CACT,GAAI,GAAe,KAAK,WAAW,CAAG,EACtC,MAAO,MAAK,WAAW,CAAY,CACvC,CACA,WAAW,EAAK,CACZ,MAAO,GAAE,iBAAiB,CAAG,CACjC,CACA,WAAW,EAAK,CACZ,GAAI,EAAE,QAAQ,CAAG,EACb,MAAO,MAAK,aAAa,CAAG,EAEhC,GAAI,EAAE,WAAW,CAAG,EAAG,CACnB,GAAI,GAAS,GAAG,MAAM,MAAM,EAAK,KAAK,SAAU,KAAK,WAAW,CAAC,EACjE,MAAO,MAAK,WAAW,CAAM,CACjC,CACA,GAAI,EAAE,UAAU,CAAG,EACf,MAAO,MAAK,eAAe,CAAG,EAElC,GAAI,EAAE,SAAS,CAAG,EAAG,CACjB,GAAI,IAAQ,OACR,MAAO,MAAK,WAAW,KAAK,SAAS,EAEzC,GAAI,GAAQ,EAAI,MAAM,kBAAkB,EACxC,GAAI,EACA,MAAO,MAAK,iBAAiB,EAAM,EAAE,GAAK,KAAK,QAAQ,EAAM,EAAE,CAEvE,CACA,MAAO,MAAK,iBAAiB,CAAG,CACpC,CACA,aAAa,EAAO,CAChB,MAAO,GAAE,KAAK,EAAO,AAAC,GAAQ,KAAK,WAAW,CAAG,CAAC,CACtD,CACA,iBAAiB,EAAW,CACxB,GAAI,IAAc,OACd,MAAO,MAAK,UAAY,GAAG,SAAS,SAAS,KAAK,SAAU,OAAO,CAE3E,CACA,aAAa,EAAU,CACnB,GAAM,GAAa,CAAE,MAAO,KAAK,MAAO,OAAQ,KAAK,MAAO,EAExD,EAAQ,AADc,KAAK,UAAY,GAAG,SAAS,IAAI,KAAK,SAAU,EAAU,CAAU,GAC3D,GAAG,SAAS,IAAI,EAAU,CAAU,EACvE,GAAI,EACA,MAAO,GAGP,GAAG,KAAK,cAAe,0CAA2C,CAAQ,CAElF,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAsB,oBAC5B,GAAG,eAAiB,KAAqB,CACrC,YAAY,EAAS,CACjB,KAAK,SAAW,EAChB,KAAK,QAAU,EAAQ,OACvB,KAAK,UAAY,EAAQ,SACzB,KAAK,UAAY,EAAQ,UAAY,OAAO,SAC5C,KAAK,OAAS,EAAQ,OAAS,GAAG,SAAS,OAAO,MAClD,KAAK,mBAAqB,EAAQ,iBACtC,CACA,MAAO,CACH,MAAO,MAAK,yBAAyB,GAAK,KAAK,cAAc,GAAK,KAAK,WAAW,CACtF,CACA,0BAA2B,CACvB,GAAI,KAAK,mBACL,MAAO,MAAK,mBAAmB,KAAK,AAAC,GAAqB,KAAK,UAAU,SAAS,CAAgB,GAAK,GAAG,SAAS,QAAQ,EAAkB,KAAK,SAAS,CAAC,CAEpK,CACA,eAAgB,CACZ,GAAI,KAAK,SAAW,UAAY,CAAC,GAAG,SAAS,mBAAmB,KAAK,SAAS,GAAK,KAAK,SAAS,YAC7F,MAAO,MAAK,aAAa,GAAK,KAAK,wBAAwB,CAEnE,CACA,cAAe,CACX,MAAO,IAAG,SAAS,QAAQ,KAAK,QAAS,KAAK,UAAW,KAAK,QAAQ,CAC1E,CACA,yBAA0B,CACtB,GAAI,GAAkB,GAAG,SAAS,YAAY,KAAK,SAAS,EAC5D,MAAO,GAAE,WAAW,EAAiB,AAAC,GAAmB,CACrD,GAAI,GAAQ,EAAe,MAAM,CAAmB,EACpD,GAAI,EAAO,CACP,GAAI,GAAS,GAAG,SAAS,QAAQ,KAAK,QAAS,EAAM,GAAI,KAAK,QAAQ,EACtE,GAAI,EACA,MAAO,IAAG,SAAS,mBAAmB,EAAQ,EAAM,EAAE,CAE9D,CACJ,CAAC,CACL,CACA,YAAa,CACT,MAAO,IAAG,SAAS,mBAAmB,KAAK,UAAW,KAAK,UAAW,KAAK,QAAQ,CACvF,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAyB,CAAE,cAAe,EAAK,EACrD,GAAG,cAAgB,aAA4B,IAAG,iBAAkB,CAChE,MAAO,CACH,MAAO,OAAM,KAAK,EAAE,OAAO,CACvB,OACA,eACA,eACA,aACJ,CAAC,CACL,CACA,iBAAiB,EAAK,CAClB,OAAQ,OACC,OACD,MAAO,MAAK,kBAAkB,MAC7B,UACD,MAAO,MAAK,iCAAiC,MAC5C,aACA,GACD,MAAO,MAAK,cAAc,KAAK,QAAQ,MACtC,QACD,MAAO,MAAK,cAAc,KAAK,MAAM,gBAAgB,CAAC,MACrD,OACD,MAAO,MAAK,eAAe,OAAO,MACjC,OACD,MAAO,MAAK,WAAW,MACtB,YACD,MAAO,MAAK,WAAW,UAEvB,GAAI,EAAE,SAAS,CAAG,EACd,MAAO,MAAK,eAAe,CAAG,EAG9C,CACA,eAAe,EAAS,CACpB,MAAO,MAAK,cAAc,CAAO,CACrC,CACA,iBAAiB,EAAW,CACxB,MAAI,KAAc,OACP,KAAK,cAAc,EAGnB,MAAM,iBAAiB,CAAS,CAE/C,CACA,eAAe,EAAU,CACrB,GAAI,GAAQ,KAAK,aAAa,CAAQ,EACtC,MAAO,MAAK,cAAc,CAAK,CACnC,CACA,mBAAoB,CAChB,MAAO,MAAK,cAAc,QAAQ,KAAK,MAAO,CAAsB,CACxE,CACA,kCAAmC,CAC/B,MAAO,IAAG,SAAS,aAAa,CAAE,MAAO,KAAK,KAAM,CAAC,CACzD,CACA,YAAa,CACT,GAAI,GAAmB,KAAK,UAAY,EAAE,aAAa,KAAK,SAAU,aAAa,EACnF,GAAI,EACA,MAAO,MAAK,cAAc,CAAgB,CAElD,CACA,cAAc,EAAS,CACnB,GAAI,EACA,UAAG,MAAM,EAAS,CACd,MAAO,GACP,GAAG,EACH,YAAa,KAAK,YAClB,aAAc,KAAK,YACvB,CAAC,EACM,EAEf,CACA,YAAa,CACT,GAAI,GAAa,GAAG,SAAS,gBAAgB,KAAK,KAAM,CAAE,MAAO,KAAK,KAAM,CAAC,EAC7E,GAAI,EACA,MAAO,MAAK,cAAc,CAAU,CAE5C,CACA,eAAgB,CACZ,MAAO,MAAK,cAAc,QAAQ,CACtC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACb,GAAG,gBAAkB,KAAsB,CACvC,MAAO,aAAY,EAAU,CACzB,MAAO,GAAS,YAAc,GAAI,MAAK,CAAQ,CACnD,CACA,YAAY,EAAU,CAClB,KAAK,SAAW,GAAG,MAAM,YAAY,CAAQ,EAC7C,KAAK,UAAY,EACjB,GAAG,WAAW,EAAU,KAAK,qBAAqB,KAAK,IAAI,CAAC,EAC5D,KAAK,OAAS,UACd,KAAK,aAAe,KACpB,KAAK,WAAa,EAAE,IAAI,EACxB,KAAK,SAAW,GAChB,KAAK,iBAAiB,CAC1B,CACA,yBAA0B,CACtB,KAAK,OAAO,CAChB,CACA,mBAAmB,CAAE,WAAU,OAAO,CAElC,AAAI,AADgB,IAAQ,KAAK,YACf,GAElB,KAAK,MAAM,CACf,CACA,iBAAkB,CACd,AAAI,KAAK,eAAiB,QACtB,KAAK,OAAO,CAEpB,CACA,sBAAuB,CACnB,KAAK,MAAM,CACf,CACA,OAAO,EAAS,CAEZ,GADA,OAAO,OAAO,KAAK,SAAU,CAAO,EAChC,KAAK,SAAW,UAAW,CAC3B,GAAI,CAAC,GAAG,SAAS,aAAa,KAAK,SAAS,EAAG,CAC3C,GAAG,KAAK,YAAa,uCAAwC,KAAK,SAAS,EAC3E,MACJ,CACA,KAAK,OAAS,UACd,KAAK,YAAY,EACjB,KAAK,uBAAuB,CAChC,CACJ,CACA,OAAQ,CACJ,AAAI,KAAK,SAAW,WAChB,MAAK,kBAAkB,EACvB,KAAK,OAAS,UAEtB,CACA,WAAW,EAAS,CAChB,OAAO,OAAO,KAAK,SAAU,CAAO,EACpC,KAAK,aAAe,QACpB,KAAK,OAAO,CAChB,CACA,WAAY,CACR,KAAK,aAAe,OACpB,KAAK,MAAM,CACf,CACA,aAAc,CACV,AAAI,KAAK,cAET,MAAK,aAAe,GACpB,GAAG,WAAW,KAAK,UAAW,GAAG,GAAG,wEAAyE,KAAK,oBAAoB,KAAK,IAAI,CAAC,CAAC,EACjJ,GAAG,SAAS,UAAU,KAAK,UAAW,KAAK,mBAAmB,KAAK,IAAI,CAAC,EACxE,GAAG,SAAS,OAAO,KAAK,UAAW,KAAK,gBAAgB,KAAK,IAAI,CAAC,EACtE,CACA,qBAAsB,CAClB,AAAI,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAG5B,KAAK,kBAAkB,CAE/B,CACA,oBAAqB,CACjB,MAAQ,CAAC,SAAS,QACb,MAAK,SAAS,UAAY,OAAS,KAAK,gBAAgB,EACjE,CACA,mBAAoB,CAChB,aAAa,KAAK,YAAY,EAC9B,KAAK,aAAe,IACxB,CACA,wBAAyB,CACrB,AAAI,KAAK,cAAgB,KAAK,UAAY,KAAK,SAAW,WAE1D,MAAK,kBAAkB,EACvB,KAAK,aAAe,WAAW,KAAK,gBAAgB,KAAK,IAAI,EAAG,KAAK,mBAAmB,CAAC,EAC7F,CACA,iBAAkB,CACd,KAAK,aAAe,KACpB,KAAK,WAAW,CACpB,CACA,YAAa,CACT,GAAI,KAAK,SAAW,UAGpB,IAAI,CAAC,GAAG,SAAS,QAAQ,KAAK,SAAS,EAAG,CACtC,KAAK,MAAM,EACX,GAAG,KAAK,YAAa,qCAAqC,EAC1D,MACJ,CACA,GAAI,CAAC,KAAK,mBAAmB,EAAG,CAC5B,GAAG,KAAK,YAAa,+BAA+B,EACpD,MACJ,CACA,KAAK,WAAW,EACpB,CACA,eAAgB,CACZ,MAAO,MAAK,SAAS,UAAY,EAAE,WAAW,KAAK,UAAW,aAAa,GAAK,GAAG,MAAM,OAAO,YACpG,CACA,oBAAqB,CACjB,MAAO,MAAK,IAAI,KAAK,cAAc,EAAI,KAAK,gBAAgB,EAAG,CAAC,CACpE,CACA,iBAAkB,CACd,MAAO,IAAI,MAAS,KAAK,YAC7B,CACA,iBAAkB,CACd,YAAK,QAAU,GAAG,MAAM,IAAI,KAAK,SAAS,EACnC,KAAK,OAAO,UAAU,CACjC,CACA,YAAa,CACT,KAAK,kBAAkB,EACvB,KAAK,SAAW,GAChB,GAAI,GAAa,GAAG,MAAM,MAAM,mBAAoB,CAAE,IAAK,CAAC,mBAAoB,KAAK,SAAS,CAAE,CAAC,EAC7F,EAAgB,CAAE,GAAG,KAAK,SAAU,aAAY,IAAK,KAAK,UAAW,EACzE,GAAG,OAAO,KAAK,UAAW,CAAa,EAAE,KAAK,KAAK,iBAAiB,KAAK,IAAI,EAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC,CACpH,CACA,iBAAiB,CAAE,YAAY,CAC3B,KAAK,SAAW,GAChB,KAAK,iBAAiB,EACtB,AAAI,EACA,KAAK,mBAAmB,CAAQ,EAGhC,KAAK,uBAAuB,CAEpC,CACA,mBAAmB,EAAa,CAC5B,AAAI,KAAK,eAAiB,SAAW,GAAG,SAAS,QAAQ,KAAK,UAAW,CAAW,GAChF,KAAK,YAAY,YAAY,CAAW,EAAE,WAAW,KAAK,QAAQ,CAE1E,CACA,iBAAiB,EAAQ,CACrB,KAAK,SAAW,GAChB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,GAAG,MAAM,cAAc,CAAM,CACjC,CACA,kBAAmB,CACf,KAAK,aAAe,GAAI,KAC5B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,kBAAoB,aAAgC,IAAG,iBAAkB,CACxE,MAAO,CACH,MAAO,OAAM,KAAK,EAAE,OAAO,CACvB,OACA,OACA,YACA,YACA,aACA,gBACJ,CAAC,CACL,CACA,iBAAiB,EAAK,CAClB,OAAQ,OACC,MACD,MAAO,MAAK,UAAU,CAAC,MACtB,SACD,MAAO,MAAK,UAAU,QAAQ,MAC7B,QACD,MAAO,MAAK,aAAa,MACxB,OACD,MAAO,MAAK,gBAAgB,OAAO,MAClC,UACD,MAAO,MAAK,SAAS,MACpB,OACD,MAAO,MAAK,MAAQ,GAAG,SAAS,WAAW,KAAK,KAAM,KAAK,WAAW,CAAC,MACtE,aACA,aACA,GACD,MAAO,MAAK,eAAe,KAAK,QAAQ,UAExC,GAAI,EAAE,SAAS,CAAG,EACd,MAAO,MAAK,gBAAgB,CAAG,EAG/C,CACA,eAAe,EAAS,CACpB,MAAO,MAAK,eAAe,CAAO,CACtC,CACA,eAAe,EAAS,CACpB,GAAI,EACA,UAAG,OAAO,EAAS,KAAK,WAAW,CAAC,EAC7B,EAEf,CACA,gBAAgB,EAAU,CACtB,GAAI,GAAQ,KAAK,aAAa,CAAQ,EACtC,MAAO,MAAK,eAAe,CAAK,CACpC,CACA,cAAe,CACX,MAAO,MAAK,eAAe,KAAK,MAAM,cAAc,CAAC,CACzD,CACA,UAAU,EAAU,CAChB,MAAO,IAAG,SAAS,SAAS,EAAU,CAAE,GAAG,KAAK,WAAW,EAAG,OAAQ,KAAK,QAAS,CAAC,CACzF,CACA,UAAW,CACP,MAAO,IAAG,SAAS,cAAc,CAAE,GAAG,KAAK,WAAW,EAAG,OAAQ,KAAK,QAAS,CAAC,CACpF,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACb,GAAG,MAAQ,aAAoB,IAAG,MAAO,CACrC,MAAO,CACH,MAAO,CACH,UACA,QACA,UACA,OACA,UACA,iBACA,mBACJ,CACJ,CACA,UAAW,CACP,MAAO,CACH,QAAS,CAAC,EACV,eAAgB,GAAG,SAAS,cAAc,EAC1C,kBAAmB,GAAG,SAAS,cAAc,CACjD,CACJ,CACA,YAAY,EAAU,CAAC,EAAG,CACtB,MAAM,CAAO,EACb,EAAE,OAAO,KAAK,IAAI,CACtB,CACA,eAAgB,CACZ,GAAG,KAAK,cAAc,IAAI,EAC1B,KAAK,uBAAyB,GAAG,GAAG,sBAAuB,AAAC,GAAU,KAAK,0BAA0B,CAAK,CAAC,CAC/G,CACA,kBAAmB,CACf,KAAK,yBAAyB,CAClC,CACA,aAAc,CACV,MAAO,IAAG,MAAM,YAAY,KAAK,IAAI,CACzC,CACA,MAAO,CACP,CACA,QAAS,CACL,KAAM,IAAI,IAAG,cACjB,CACA,SAAU,CACN,KAAM,IAAI,IAAG,cACjB,CACA,KAAK,EAAS,CACV,KAAK,MAAM,KAAK,KAAM,CAAO,CACjC,CACA,WAAW,EAAQ,CACf,MAAO,GAAE,WAAW,EAAQ,IAAI,CACpC,CACA,WAAY,CACR,MAAO,MAAK,MAAM,UAAU,IAAI,CACpC,CACA,SAAU,CACN,MAAO,MAAK,MAAM,QAAQ,IAAI,CAClC,CACA,QAAS,CACL,MAAO,MAAK,MAAM,OAAO,IAAI,CACjC,CACA,WAAY,CACR,MAAO,MAAK,MAAM,UAAU,IAAI,CACpC,CACA,SAAU,CACN,KAAM,IAAI,IAAG,cACjB,CACA,GAAI,SAAS,CACT,MAAO,MAAK,MAAM,SAAS,IAAI,CACnC,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,MAAM,QAAQ,IAAI,CAClC,CACA,GAAI,YAAY,CACZ,MAAO,MAAK,MAAM,YAAY,IAAI,CACtC,CACA,GAAI,cAAc,CACd,MAAO,MAAK,MAAM,cAAc,IAAI,CACxC,CACA,GAAI,UAAU,CACV,MAAO,CAAC,KAAM,GAAG,KAAK,WAAW,CACrC,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,SAAW,KAAK,MAAM,QAAQ,IAAI,CAClD,CACA,mBAAoB,CAChB,MAAO,MAAK,gBAAkB,KAAK,OACvC,CACA,eAAgB,CACZ,MAAO,MAAK,YAAc,KAAK,OACnC,CACA,iBAAkB,CACd,MAAO,MAAK,cAAc,CAC9B,CACA,0BAA2B,CACvB,KAAM,IAAI,IAAG,cACjB,CACA,SAAS,EAAS,CACd,MAAO,GAAQ,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAM,KAAK,OAC5D,CACA,MAAM,EAAM,CACR,MAAO,MAAK,yBAAyB,CAAI,EAAE,KAAK,CACpD,CACA,OAAO,EAAM,CACT,MAAO,MAAK,yBAAyB,CAAI,EAAE,OAAO,CACtD,CACA,yBAAyB,EAAM,CAC3B,MAAO,IAAG,mBAAmB,aAAa,EAAM,CAC5C,MAAO,AAAC,GAAU,KAAK,qBAAqB,CAAK,EACjD,SAAU,CAAC,KAAK,OAAO,EACvB,UAAW,IACf,CAAC,CACL,CACA,qBAAqB,EAAO,CACxB,MAAO,MAAK,SAAS,EAAM,MAAM,CACrC,CACA,mBAAmB,CAAE,UAAS,WAAW,CACrC,GAAM,GAAkB,SAAS,iBAAiB,EAAS,CAAO,EAClE,MAAO,CAAC,GAAmB,KAAK,SAAS,CAAe,CAC5D,CACA,mBAAmB,EAAM,CACrB,MAAO,IAAG,aAAa,aAAa,EAAM,CAAE,MAAO,IAAK,CAAC,CAC7D,CACA,QAAQ,EAAM,CACV,MAAO,MAAK,mBAAmB,CAAI,EAAE,KAAK,CAC9C,CACA,YAAa,CACT,MAAO,CAAC,KAAK,QAAQ,WACzB,CACA,aAAc,CAEV,AADA,EAAE,OAAO,KAAK,QAAQ,CAAC,EACnB,AAAC,KAAK,iBAAiB,GAE3B,MAAK,YAAc,KAAK,MACxB,KAAK,eAAiB,KAAK,SAC3B,KAAK,eAAiB,KAAK,SAC3B,KAAK,WAAa,KAAK,KAC3B,CACA,gBAAiB,CACb,AAAI,CAAC,KAAK,iBAAiB,GAEvB,MAAK,gBACL,GAAG,QAAQ,KAAK,KAAK,cAAc,EAEnC,KAAK,aACL,UAAS,MAAQ,KAAK,aAEtB,KAAK,gBACL,GAAG,QAAQ,eAAe,KAAK,cAAc,EAE7C,EAAE,SAAS,KAAK,UAAU,GAC1B,GAAG,QAAQ,WAAW,KAAK,UAAU,EAE7C,CACA,UAAU,EAAI,CACV,MAAO,MAAK,MAAM,UAAU,KAAM,CAAE,CACxC,CACA,cAAc,EAAS,CACnB,AAAI,EAAE,SAAS,EAAQ,QAAQ,GAC3B,KAAK,gBAAgB,EAAQ,SAAU,CAAE,KAAM,EAAK,CAAC,EAErD,GAAG,QAAQ,OAAO,gBAAkB,EAAE,OAAO,EAAQ,QAAQ,GAC7D,IAAG,SAAS,uBAAuB,EAAQ,QAAQ,EACnD,KAAK,gBAAgB,EAAQ,QAAQ,GAErC,EAAE,SAAS,EAAQ,KAAK,GACxB,KAAK,aAAa,EAAQ,KAAK,EAE/B,EAAE,SAAS,EAAQ,IAAI,GACvB,KAAK,YAAY,EAAQ,IAAI,CAErC,CACA,kBAAmB,CACf,MAAO,MAAK,SAAW,KAAK,QAAQ,CACxC,CACA,0BAA0B,CAAE,YAAY,CACpC,AAAI,KAAK,iBAAiB,GACtB,KAAK,gBAAgB,EAAU,CAAE,KAAM,EAAM,CAAC,CAEtD,CACA,GAAI,QAAQ,CACR,MAAI,MAAK,iBAAiB,EACf,SAAS,MAGT,KAAK,WAEpB,CACA,aAAa,EAAO,CAChB,KAAK,YAAc,EACf,KAAK,iBAAiB,GACtB,UAAS,MAAQ,EAEzB,CACA,GAAI,WAAW,CACX,MAAI,MAAK,iBAAiB,EACf,GAAG,QAAQ,aAAa,EAGxB,KAAK,cAEpB,CACA,gBAAgB,EAAU,CACtB,KAAK,eAAiB,EAClB,KAAK,iBAAiB,GACtB,GAAG,QAAQ,eAAe,CAAQ,CAE1C,CACA,GAAI,OAAO,CACP,MAAI,MAAK,iBAAiB,EACf,GAAG,QAAQ,QAAQ,EAGnB,KAAK,UAEpB,CACA,YAAY,EAAM,CACd,KAAK,WAAa,EACd,KAAK,iBAAiB,GACtB,GAAG,QAAQ,WAAW,CAAI,CAElC,CACA,GAAI,WAAW,CACX,MAAI,MAAK,iBAAiB,EACf,GAAG,QAAQ,SAGX,KAAK,cAEpB,CACA,gBAAgB,EAAa,CAAE,QAAQ,CACnC,GAAI,GAAoB,KAAK,eACzB,EAAe,GAAG,QAAQ,SAC9B,KAAK,eAAiB,EAClB,IAAgB,GAAgB,KAAK,iBAAiB,GAAK,GAC3D,GAAG,QAAQ,KAAK,CAAW,EAE3B,IAAgB,GAAqB,KAAK,QAAU,WACpD,KAAK,KAAK,4BAA6B,CAAE,SAAU,EAAa,iBAAkB,EAAmB,IAAK,EAAM,CAAC,CAEzH,CACA,SAAS,EAAM,CACX,MAAO,MAAK,YAAY,SAAS,CAAI,CACzC,CACA,MAAO,UAAS,EAAO,CACnB,KAAM,IAAI,IAAG,cACjB,CACA,UAAW,CACP,KAAM,IAAI,IAAG,cACjB,CACA,SAAS,EAAM,CACX,MAAO,GAAE,MAAM,KAAK,yBAAyB,EAAG,GAAG,CAAI,CAC3D,CACA,CAAC,EAAE,QAAQ,KAAK,EAAO,CACnB,MAAQ,MAAK,cAAgB,EAAM,aAAiB,KAAK,UAAY,EAAM,OAC/E,CACA,UAAW,CACP,GAAI,GAAiB,SAAS,cAC9B,MAAO,KAAmB,SAAS,MAAQ,KAAK,QAAQ,SAAS,CAAc,CACnF,CACA,OAAQ,CACJ,OAAO,OAAO,KAAM,KAAK,SAAS,CAAC,CACvC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACb,GAAG,MAAM,QAAW,GAAK,aAAsB,IAAG,KAAM,CAChD,MAAO,CACH,MAAO,CACH,GAAG,MAAM,KAAK,EACd,GAAG,KAAK,YAAY,YACpB,WACA,WACA,aACA,YACA,cACA,cACA,eACA,iBACA,iBACJ,CACJ,CACA,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,MAAQ,UACb,AAAI,KAAK,cAAgB,GACrB,KAAK,YAAc,CAAC,SAAU,MAAO,SAAS,EAE7C,AAAI,KAAK,cAAgB,GAC1B,KAAK,YAAc,CAAC,EAGpB,KAAK,YAAc,EAAE,gBAAgB,KAAK,WAAW,EAErD,KAAK,gBACL,MAAK,eAAiB,GAAI,IAAG,WAAW,KAAK,cAAc,GAE3D,KAAK,iBACL,MAAK,gBAAkB,GAAI,IAAG,WAAW,KAAK,eAAe,EAErE,CACA,SAAS,EAAM,CACX,GAAI,GAAK,KAAK,GACd,GAAI,EACA,MAAO,GAAG,KAAK,IAAI,CAE3B,CACA,cAAc,EAAe,CACzB,KAAK,UAAY,KAAK,sBAAsB,EAC5C,GAAM,GAAe,EAAE,cAAc,EAAE,KAAK,KAAM,CAAC,QAAS,WAAY,OAAQ,QAAS,SAAS,CAAC,CAAC,EACpG,KAAK,QAAU,KAAK,UAAU,EAAe,KAAM,CAAY,CACnE,CACA,sBAAsB,EAAe,CACjC,KAAK,gBAAkB,KAAK,UAAU,EAAe,UAAU,CACnE,CACA,sBAAsB,EAAe,CACjC,KAAK,gBAAkB,KAAK,UAAU,EAAe,WAAY,CAAE,cAAe,EAAG,CAAC,CAC1F,CACA,iBAAiB,EAAe,CAC5B,KAAK,WAAa,KAAK,UAAU,EAAe,KAAK,CACzD,CACA,qBAAqB,EAAe,CAChC,KAAK,eAAiB,KAAK,UAAU,EAAe,SAAS,CACjE,CACA,WAAW,EAAS,CAChB,KAAK,eAAe,OAAO,CAAO,EAClC,KAAK,aAAa,CACtB,CACA,cAAe,CACf,CACA,qBAAqB,EAAe,CAChC,YAAK,eAAiB,KAAK,UAAU,EAAe,UAAW,CAC3D,aAAc,YACd,aAAc,KAAK,gBACvB,CAAC,EACM,EAAE,MAAM,KAAK,eAAgB,2BAA4B,CAAE,KAAM,KAAK,YAAa,CAAC,CAC/F,CACA,UAAU,EAAe,EAAM,EAAU,CAAC,EAAG,CACzC,MAAO,GAAE,MAAM,EAAe,KAAK,SAAS,CAAI,EAAG,CAAO,CAC9D,CACA,MAAO,UAAS,EAAM,CAClB,MAAO,GAAE,QAAQ,CAAC,KAAM,KAAK,KAAM,CAAI,CAAC,EAAE,KAAK,GAAG,CACtD,CACA,uBAAwB,CACpB,GAAM,CAAE,UAAW,KACnB,MAAI,MAAK,OAAS,EAAO,KACd,EAAI,EAAO,sBAAsB,EAGjC,CAEf,CACA,eAAgB,CACZ,MAAM,cAAc,EACpB,KAAK,aAAe,GAAI,IAAG,aAAa,IAAI,EACxC,KAAK,uBAAuB,QAAQ,GACpC,KAAK,qBAAqB,KAAK,cAAc,CAAC,EAE9C,KAAK,uBAAuB,SAAS,GACrC,CAAI,KAAK,gBACL,GAAG,GAAG,KAAK,gBAAiB,WAAY,AAAC,GAAU,CAC/C,AAAI,EAAM,SAAW,KAAK,iBACtB,KAAK,kBAAkB,EAAO,EAAI,CAE1C,CAAC,EAGD,KAAK,qBAAuB,KAAK,OAAO,GAAG,WAAY,CAAC,EAAO,IAAY,CACvE,GAAI,CAAC,GAAG,MAAM,uBAAuB,CAAO,EAAG,CAC3C,GAAM,GAAgB,KAAK,QAAU,KAAK,OAAO,SAAS,CAAO,EACjE,KAAK,kBAAkB,EAAO,CAAa,CAC/C,CACJ,CAAC,GAGL,KAAK,uBAAuB,KAAK,GACjC,MAAK,qBAAuB,GAAG,MAAM,SAAS,AAAC,GAAU,KAAK,gBAAgB,CAAK,CAAC,GAExF,KAAK,mBAAmB,YAAa,CAAC,EAAO,IAAiB,CAC1D,KAAK,OAAO,EAAO,CAAY,CACnC,CAAC,EACD,KAAK,mBAAmB,aAAc,CAAC,EAAO,IAAiB,CAC3D,KAAK,QAAQ,EAAO,CAAY,CACpC,CAAC,EACD,GAAG,QAAQ,sBAAsB,IAAI,EACrC,KAAK,6BAA6B,KAAK,YAAa,KAAK,MAAM,EAC/D,KAAK,6BAA6B,KAAK,aAAc,KAAK,OAAO,EACjE,KAAK,GAAG,WAAY,aAAc,CAAC,EAAO,IAAU,KAAK,gBAAgB,EAAO,CAAK,CAAC,CAC1F,CACA,gBAAgB,EAAO,EAAO,CAC1B,GAAI,GAAK,EAAM,aAAa,KAAK,EAC7B,EAAgB,GAAG,KAAK,cAAc,EAAE,WAAW,CAAE,CAAC,EACtD,EAAiB,GAAG,SAAS,IAAI,EAAe,CAAE,MAAO,KAAM,CAAC,EAChE,EAAgB,GAAG,SAAS,IAAI,EAAe,CAAE,MAAO,IAAK,CAAC,EAClE,GAAI,EAAe,OAAS,GAAK,EAAc,KAAO,EAAe,GAAI,CACrE,EAAM,eAAe,EACrB,GAAM,GAAQ,EAAc,GAC5B,EAAM,MAAM,EACR,EAAM,QAAQ,yCAAyC,GACvD,EAAM,MAAM,CAEpB,CACJ,CACA,kBAAkB,EAAO,EAAM,CAC3B,GAAG,IAAI,UAAU,CAAK,EAClB,GACA,GAAG,MAAM,KAAK,CAAK,EACvB,GAAG,MAAM,mBAAmB,IAAM,KAAK,QAAQ,WAAY,CAAE,OAAQ,EAAM,MAAO,CAAC,CAAC,CACxF,CACA,gBAAgB,EAAO,CACnB,GAAI,KAAK,QAAQ,EAAG,CAChB,GAAI,GAAQ,GAAG,KAAK,aAAa,EACjC,AAAI,EACA,EAAM,KAAK,EAEN,KAAK,uBAAuB,KAAK,GACtC,IAAG,MAAM,KAAK,EAAO,CAAE,IAAK,EAAK,CAAC,EAClC,GAAG,MAAM,mBAAmB,IAAM,KAAK,QAAQ,MAAM,CAAC,EAE9D,CACJ,CACA,mBAAmB,EAAW,EAAS,CACnC,KAAK,qBAAqB,EAAW,CAAO,EAC5C,KAAK,sBAAsB,EAAW,CAAO,CACjD,CACA,qBAAqB,EAAW,EAAS,CACrC,KAAK,GAAG,WAAY,IAAI,eAAwB,CAAC,EAAO,IAAS,CAC7D,GAAG,MAAM,KAAK,EAAO,CAAE,IAAK,EAAK,CAAC,EAClC,GAAM,GAAQ,EAAE,SAAS,EAAM,CAAS,EACxC,KAAK,uBAAuB,EAAM,EAAO,CAAO,CACpD,CAAC,CACL,CACA,sBAAsB,EAAW,EAAS,CACtC,KAAK,GAAG,SAAU,IAAI,KAAc,CAAC,EAAO,IAAS,CACjD,GAAG,MAAM,KAAK,EAAO,CAAE,IAAK,EAAK,CAAC,EAClC,GAAM,GAAQ,GAAG,OAAO,SAAS,CAAI,EACrC,KAAK,uBAAuB,EAAM,EAAO,CAAO,CACpD,CAAC,CACL,CACA,uBAAuB,EAAQ,EAAO,EAAS,CAC3C,GAAM,GAAe,CAAE,QAAO,EACxB,EAAS,GAAI,IAAG,cAAc,EAAQ,CAAY,EACxD,EAAO,gBAAgB,WAAW,EAClC,EAAO,OAAO,QAAQ,EACtB,EAAO,OAAO,UAAU,EACxB,EAAO,OAAO,SAAS,EACvB,GAAG,MAAM,mBAAmB,IAAM,EAAQ,EAAO,CAAY,CAAC,CAClE,CACA,6BAA6B,EAAY,EAAS,CAC9C,GAAI,EAAC,EAGL,MAAO,MAAK,GAAG,EAAY,AAAC,GAAU,CAClC,EAAM,eAAe,EACrB,GAAG,MAAM,mBAAmB,IAAM,EAAQ,KAAK,KAAM,EAAO,CAAE,SAAU,EAAM,QAAS,CAAC,CAAC,CAC7F,CAAC,CACL,CACA,qBAAqB,EAAS,CAC1B,KAAK,qBAAqB,KAAK,eAAgB,KAAK,OAAQ,CAAO,CACvE,CACA,sBAAsB,EAAS,CAC3B,KAAK,qBAAqB,KAAK,gBAAiB,KAAK,QAAS,CAAO,CACzE,CACA,qBAAqB,EAAY,EAAS,EAAS,CAC/C,GAAI,GAAU,EACd,GAAI,GAAe,GAAW,KAAK,WAAc,GAAa,EAAW,UAAU,CAAQ,GAAI,CAC3F,GAAM,GAAa,CAAE,GAAG,EAAY,UAAS,EAC7C,GAAG,MAAM,mBAAmB,IAAM,EAAQ,KAAK,KAAM,EAAY,CAAO,CAAC,CAC7E,CACJ,CACA,kBAAmB,CACf,MAAM,iBAAiB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,CAChC,CACA,gBAAgB,EAAS,CAMrB,GAAM,GAAiB,CAAE,GAAG,EAAS,UALnB,IAAM,KAAK,oBAAoB,CAAO,EAKR,WAJ7B,IAAM,CACrB,KAAK,kBAAkB,EACvB,EAAQ,aAAa,CACzB,EAC4D,IAAK,EAAM,EACvE,GAAG,QAAQ,KAAK,QAAS,CAAc,CAC3C,CACA,mBAAoB,CACpB,CACA,gBAAgB,EAAU,CAAC,EAAG,CAC1B,GAAM,GAAU,GAAG,QAAQ,KAAK,cAAc,EAAG,EAAQ,aAAc,CAAO,EAC1E,EACJ,MAAI,MAAK,UAAY,CAAC,GAAG,OAAO,OAAO,EAAQ,YAAY,GACvD,GAAe,GAAG,QAAQ,KAAK,gBAAiB,EAAQ,kBAAmB,CAAO,GAE/E,QAAQ,IAAI,CAAC,EAAS,CAAY,CAAC,CAC9C,CACA,KAAM,oBAAmB,EAAU,CAAC,EAAG,CACnC,GAAI,GAAe,EAAQ,WAAa,KAAK,WAAW,KAAK,aAAa,EACtE,EAAoB,UACxB,KAAM,MAAK,gBAAgB,CACvB,eACA,oBACA,OAAQ,EAAQ,QAAU,KAAK,WAC/B,SAAU,EAAQ,UAAY,KAAK,YACvC,CAAC,EACD,KAAK,eAAiB,EAC1B,CACA,oBAAoB,EAAU,CAAC,EAAG,CAC9B,GAAI,GAAe,KAAK,gBAAmB,GAAQ,WAAa,KAAK,WAAW,KAAK,cAAc,GAC/F,EAAoB,WACxB,MAAO,MAAK,gBAAgB,CACxB,eACA,oBACA,OAAQ,EAAQ,QAAU,KAAK,YAC/B,SAAU,EAAQ,UAAY,KAAK,aACvC,CAAC,CACL,CACA,SAAU,CACN,MAAO,CAAC,UAAW,QAAQ,EAAE,SAAS,KAAK,KAAK,CACpD,CACA,OAAO,EAAQ,KAAM,EAAU,CAAC,EAAG,CAC/B,MAAO,MAAK,oBAAoB,SAAU,EAAO,CAAO,CAC5D,CACA,QAAQ,EAAQ,KAAM,EAAU,CAAC,EAAG,CAChC,MAAO,MAAK,oBAAoB,UAAW,EAAO,CAAO,CAC7D,CACA,uBAAuB,EAAQ,CAC3B,MAAO,GAAE,SAAS,KAAK,YAAa,CAAM,CAC9C,CACA,oBAAoB,EAAM,EAAO,EAAS,CACtC,SAAU,CAAE,GAAG,EAAS,OAAM,QAAO,MAAO,IAAK,EAC1C,GAAI,IAAG,OAAO,WAAW,CAAO,EAAE,QAAQ,CACrD,CACA,0BAA2B,CACvB,MAAO,MAAK,kBAAkB,EAAE,SAAS,EAC7C,CACA,UAAW,CACP,MAAO,GAAG,KAAK,cACnB,CACJ,EACA,EAAG,YAAc,CACb,OACA,WACA,QACA,OACA,SACA,QACA,WACA,cACA,eACA,mBACA,gBACA,iBACA,eACA,gBACA,aACA,cACA,WACJ,EACA,EAAG,cAAgB,EAAE,WAAW,EAAG,YAAa,MAAS,EACzD,EAGE,EAEC,IAAM,CAEb,GAAG,MAAM,kBAAoB,aAAgC,IAAG,MAAM,OAAQ,CAC1E,gBAAiB,CACb,AAAK,KAAK,QACN,GAAG,KAAK,2BAA2B,EAEvC,KAAK,QAAU,GAAI,IAAG,OAAO,CACzB,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,SAAU,KAAK,QACnB,CAAC,EACD,KAAK,cAAc,KAAK,QAAQ,MAAM,EACtC,KAAK,qBAAqB,KAAK,OAAO,CAC1C,CACA,cAAe,CACX,KAAK,QAAQ,MAAM,KAAK,OAAO,CACnC,CACA,mBAAoB,CAChB,KAAK,QAAQ,KAAK,CACtB,CACA,MAAO,CACH,AAAI,KAAK,QAAQ,GACb,CAAI,KAAK,WAAW,GAAK,KAAK,QAAQ,WAAW,EAC7C,KAAK,QAAQ,YAAa,CACtB,UAAW,GACX,YAAa,EACjB,CAAC,EAGD,KAAK,QAAQ,KAAK,EAG9B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,MAAM,oBAAsB,aAAkC,IAAG,MAAM,OAAQ,CAC9E,MAAO,mBAAmB,CACtB,MAAO,UAAS,IACpB,CACA,gBAAiB,CACb,GAAG,SAAS,YAAY,WAAW,EACnC,KAAK,cAAc,KAAK,YAAY,iBAAiB,CAAC,EAClD,KAAK,UACL,KAAK,sBAAsB,KAAK,OAAO,EAE3C,KAAK,sBAAsB,KAAK,OAAO,EACvC,KAAK,iBAAiB,KAAK,eAAe,EAC1C,KAAK,qBAAqB,KAAK,UAAU,CAC7C,CACA,mBAAoB,CAChB,GAAG,SAAS,YAAY,WAAW,CACvC,CACA,MAAO,CACH,AAAI,KAAK,WAAW,GAAK,KAAK,QAAQ,GAClC,KAAK,YAAY,iBAAiB,EAAE,YAAY,KAAK,OAAO,CAEpE,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,QACb,GAAG,MAAM,KAAQ,GAAK,aAAmB,IAAG,KAAM,CAC1C,GAAI,UAAU,CACV,MAAO,GAAE,IACb,CACA,YAAY,EAAS,CACjB,MAAM,CAAO,EACb,KAAK,cAAc,CACvB,CACA,0BAA2B,CACvB,MAAO,UAAS,IACpB,CACA,MAAO,WAAW,CACd,MAAO,MACX,CACA,eAAgB,CACZ,AAAK,KAAK,QAAQ,mBACd,MAAK,QAAQ,kBAAoB,GACjC,MAAM,cAAc,EAE5B,CACA,MAAO,CACH,KAAK,cAAc,CACvB,CACA,SAAU,CACN,MAAO,EACX,CACA,QAAS,CACL,KAAK,iBAAiB,CAC1B,CACA,SAAU,CACN,KAAK,iBAAiB,CAC1B,CACA,kBAAmB,CACf,GAAG,KAAK,6BAA6B,CACzC,CACA,UAAW,CACP,MAAO,YACX,CACJ,EACA,EAAG,KAAO,OACV,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAG,MAAM,MAAS,GAAK,aAAoB,IAAG,MAAM,mBAAoB,CACpE,EACA,EAAG,KAAO,QACV,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAG,MAAM,MAAS,GAAK,aAAoB,IAAG,MAAM,iBAAkB,CAClE,EACA,EAAG,KAAO,QACV,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAG,MAAM,OAAU,GAAK,aAAqB,IAAG,MAAM,mBAAoB,CACtE,EACA,EAAG,KAAO,SACV,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAG,MAAM,MAAS,GAAK,aAAoB,IAAG,MAAM,mBAAoB,CACpE,EACA,EAAG,KAAO,QACV,EAGE,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,YAAe,GAAK,KAAkB,CACjC,YAAY,EAAO,EAAS,CACxB,KAAK,OAAS,EACV,EAAQ,wBAA0B,IAClC,GAAG,MAAM,iBAAiB,CAAO,EAErC,KAAK,SAAW,EAChB,KAAK,QAAU,EAAE,gBAAgB,EAAQ,KAAK,CAClD,CACA,KAAM,CACF,GAAI,GAAU,EAAE,QAAQ,KAAK,QAAS,AAAC,GAAU,KAAK,cAAc,CAAK,CAAC,EAC1E,SAAU,EAAE,QAAQ,CAAO,EAC3B,EAAU,EAAE,KAAK,CAAO,EACjB,CACX,CACA,MAAO,KAAI,KAAU,EAAM,CACvB,GAAM,GAAU,EAAE,oBAAoB,EAAM,OAAO,EAC7C,CAAE,SAAU,EAClB,MAAI,aAAiB,IAAG,MACb,CAAC,CAAK,EAEV,GAAI,MAAK,EAAO,CAAO,EAAE,IAAI,CACxC,CACA,YAAY,EAAS,CACjB,SAAU,EAAE,IAAI,CAAO,EAChB,EAAE,KAAK,KAAK,OAAO,SAAS,EAAG,AAAC,GAAU,EAAM,SAAS,CAAO,CAAC,CAC5E,CACA,UAAU,EAAO,CACb,MAAO,MAAK,OAAO,GAAG,CAAK,CAC/B,CACA,cAAc,EAAO,CACjB,GAAI,YAAiB,IAAG,MACpB,MAAO,GAEX,GAAI,EAAE,SAAS,CAAK,EAChB,MAAO,MAAK,UAAU,CAAK,EAE/B,GAAI,QAAQ,KAAK,CAAK,EAClB,MAAO,MAAK,UAAU,OAAO,CAAK,CAAC,EAEvC,GAAI,EAAE,cAAc,CAAK,EACrB,MAAO,MAAK,YAAY,CAAK,EAEjC,OAAQ,OACC,MACD,MAAO,CAAC,KAAK,cAAc,EAAG,GAAG,KAAK,OAAO,SAAS,CAAC,MACtD,UACD,MAAO,MAAK,cAAc,MACzB,UACD,MAAO,MAAK,OAAO,mBAAmB,KAAK,cAAc,CAAC,MACzD,SACD,MAAO,MAAK,cAAc,EAAE,WAC3B,eACA,YACD,MAAO,MAAK,cAAc,EAAE,cAC3B,QACD,MAAO,MAAK,cAAc,EAAE,UAC3B,iBACA,cACD,MAAO,MAAK,cAAc,EAAE,gBAC3B,UACD,MAAO,MAAK,cAAc,EAAE,YAC3B,MACD,MAAO,UACN,OACD,MAAO,MAAK,OAAO,SAClB,cACA,WACD,MAAO,GAAE,QAAQ,KAAK,OAAO,QAAQ,MACpC,QACD,MAAO,MAAK,OAAO,UAClB,SACD,MAAO,MAAK,gBAAgB,UAE5B,MAAO,IAAG,KAAK,+BAAgC,CAAK,EAEhE,CACA,iBAAkB,CACd,GAAI,CAAE,SAAQ,eAAgB,KAAK,SACnC,GAAI,EACA,MAAO,GAEX,GAAI,EACA,MAAO,MAAK,YAAY,CAAM,CAEtC,CACA,eAAgB,CACZ,GAAI,CAAE,aAAc,KAAK,SACzB,GAAI,EAAE,SAAS,CAAS,EAAG,CACvB,GAAM,GAAmB,CAAE,GAAG,KAAK,SAAU,UAAW,KAAK,OAAO,QAAS,sBAAuB,GAAO,MAAO,CAAU,EAC5H,MAAO,MAAK,YAAY,IAAI,KAAK,OAAQ,CAAgB,EAAE,EAC/D,KAEI,OAAO,IAAa,KAAK,gBAAgB,GAAK,KAAK,OAAO,OAElE,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,cAAe,GACf,gBAAiB,EACrB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,WAAa,KAAiB,CAC7B,aAAc,CACV,KAAK,kBAAoB,CAAC,EAC1B,KAAK,OAAS,CAAC,KAAK,WAAW,CAAC,CACpC,CACA,YAAa,CACT,MAAO,IAAG,MAAM,MAAM,CAAE,KAAM,OAAQ,MAAO,IAAK,CAAC,CACvD,CACA,OAAO,EAAO,CACV,EAAE,OAAO,KAAK,OAAQ,CAAK,CAC/B,CACA,KAAK,EAAO,EAAS,CACjB,GAAM,GAAc,EAAE,QAAQ,EAAM,WAAW,EACzC,EAAiB,CAAE,GAAG,EAAS,YAAa,EAAM,EACxD,OAAS,KAAc,GACnB,EAAW,QAAQ,QAAS,CAAc,CAElD,CACA,OAAQ,CACJ,KAAK,KAAK,KAAK,KAAM,CAAE,UAAW,EAAM,CAAC,EACzC,KAAK,kBAAoB,CAAC,EAC1B,KAAK,KAAK,MAAM,CACpB,CACA,SAAS,EAAO,CACZ,MAAO,MAAK,OAAO,EAAM,MAAQ,EACrC,CACA,QAAQ,EAAO,CACX,MAAO,MAAK,OAAO,EAAM,MAAQ,EACrC,CACA,YAAY,EAAO,CACf,MAAO,GAAE,QAAQ,KAAK,OAAO,MAAM,EAAG,EAAM,KAAK,CAAC,CACtD,CACA,mBAAmB,EAAO,CACtB,MAAO,CAAC,EAAO,GAAG,EAAM,SAAS,CACrC,CACA,cAAc,EAAO,CACjB,MAAO,MAAK,OAAO,MAAM,EAAM,MAAQ,CAAC,CAC5C,CACA,OAAO,EAAO,CACV,MAAO,MAAK,OAAS,CACzB,CACA,UAAU,EAAO,CACb,MAAO,MAAK,OAAS,CACzB,CACA,UAAU,EAAO,CACb,MAAO,MAAK,UAAY,CAC5B,CACA,QAAQ,EAAO,CACX,MAAO,MAAK,QAAU,CAC1B,CACA,OAAO,EAAM,CACT,MAAO,MAAK,OAAO,GAAG,CAAI,EAAE,EAChC,CACA,UAAU,EAAM,CACZ,MAAO,IAAG,YAAY,IAAI,KAAM,GAAG,CAAI,CAC3C,CACA,MAAO,CACH,OAAS,KAAS,MAAK,OACnB,EAAM,KAAK,CAEnB,CACA,UAAU,EAAO,EAAI,CACjB,GAAI,CACA,YAAK,kBAAkB,KAAK,CAAK,EAC1B,EAAG,CACd,QACA,CACI,KAAK,kBAAkB,IAAI,CAC/B,CACJ,CACA,UAAW,CACP,MAAO,GAAE,QAAQ,KAAK,MAAM,CAChC,CACA,gBAAgB,EAAQ,KAAM,EAAU,CAAC,EAAG,CACxC,EAAQ,YAAc,GACtB,OAAS,KAAW,GAAE,QAAQ,KAAK,QAAQ,EACvC,EAAQ,QAAQ,EAAO,CAAO,CAEtC,CACA,GAAG,EAAO,CACN,MAAO,MAAK,OAAO,EACvB,CACA,QAAQ,EAAO,CACX,MAAO,MAAK,OAAO,QAAQ,CAAK,CACpC,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,OAAO,MACvB,CACA,GAAI,OAAO,CACP,MAAO,MAAK,OAAO,EACvB,CACA,GAAI,WAAW,CACX,MAAO,MAAK,KAAK,WACrB,CACA,GAAI,UAAU,CACV,MAAO,GAAE,KAAK,KAAK,iBAAiB,GAAK,KAAK,KAClD,CACA,GAAI,QAAQ,CACR,MAAO,GAAE,KAAK,KAAK,MAAM,CAC7B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,gBAAkB,KAAsB,CACvC,YAAY,EAAM,CAEd,GADA,KAAK,QAAU,GAAG,KAAK,OAAO,CAAI,EAC9B,KAAK,QAAS,CACd,GAAM,GAAO,EAAK,aAAa,MAAM,EACrC,AAAI,GAAS,IAAS,KAClB,MAAK,MAAQ,EAAE,aAAa,CAAI,GAEpC,GAAM,GAAS,EAAK,aAAa,SAAS,EAC1C,AAAI,GACA,MAAK,QAAU,EAAE,aAAa,CAAM,GAExC,GAAM,GAAQ,EAAK,aAAa,UAAU,EAC1C,AAAI,GACA,MAAK,cAAgB,GAAI,IAAG,WAAW,CAAK,EAEpD,CACJ,CACA,UAAU,EAAoB,CAC1B,MAAK,GAGE,CAAC,CAAE,MAAK,QAAU,GACrB,KAAK,UAAY,GACjB,KAAK,eAAe,OAAO,EAAoB,EAAK,GAJ7C,EAKf,CACA,aAAa,EAAqB,CAC9B,MAAO,GAAoB,KAAK,AAAC,GAAwB,KAAK,QAAU,GACpE,KAAK,UAAY,GACjB,KAAK,eAAe,OAAO,EAAoB,EAAK,CAAE,CAC9D,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,iBAAmB,KAAuB,CACzC,YAAY,EAAM,EAAU,CACxB,KAAK,MAAQ,EACb,KAAK,UAAY,EACjB,KAAK,aAAe,KACpB,KAAK,IAAI,kCAAmC,AAAC,GAAU,KAAK,kBAAkB,CAAK,CAAC,EACpF,KAAK,IAAI,aAAc,IAAM,KAAK,oBAAoB,CAAC,EACvD,GAAG,SAAS,UAAU,KAAK,MAAO,IAAM,KAAK,oBAAoB,CAAC,CACtE,CACA,IAAI,EAAW,EAAI,CACf,GAAG,GAAG,KAAK,MAAO,EAAW,CAAE,QAAS,EAAK,EAAG,CAAE,CACtD,CACA,kBAAkB,EAAO,CACrB,GAAI,CAAC,GAAG,KAAK,kBAAkB,EAAO,KAAK,KAAK,EAC5C,OAGJ,GAFA,KAAK,oBAAoB,EACL,EAAM,OAAS,aACnB,CACZ,GAAI,GAAQ,KAAK,YAAY,EAC7B,KAAK,OAAS,EAAE,MAAM,EAAO,IAAM,KAAK,aAAa,CAAK,CAAC,CAC/D,KAEI,MAAK,aAAa,CAAK,CAE/B,CACA,qBAAsB,CAClB,aAAa,KAAK,MAAM,EACpB,KAAK,cAAc,YACnB,KAAK,aAAa,MAAM,EAC5B,KAAK,aAAe,IACxB,CACA,aAAc,CACV,MAAO,GAAE,WAAW,KAAK,MAAO,kBAAkB,GAAK,GAAG,KAAK,OAAO,YAC1E,CACA,aAAa,EAAO,CAEhB,AADA,GAAG,IAAI,UAAU,CAAK,EAClB,AAAC,GAAG,SAAS,QAAQ,KAAK,KAAK,GAEnC,KAAK,UAAU,CAAE,eAAgB,AAAC,GAAY,KAAK,aAAe,CAAQ,CAAC,CAC/E,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,iBAAmB,KAAuB,CACzC,YAAY,EAAM,CACd,KAAK,aAAe,MAAM,IAC1B,KAAK,UAAY,IAAI,KAAK,eAC1B,KAAK,YAAc,MAAM,WACzB,KAAK,YAAc,EACnB,KAAK,cAAgB,CACzB,CACA,cAAc,EAAS,EAAa,EAAS,CAAC,EAAG,CAC7C,EAAU,EAAE,KAAK,CAAO,EACxB,GAAM,GAAgB,IAAM,GAAG,MAAM,wBAAwB,EAAY,CAAC,EAE1E,GADA,EAAO,YAAc,EAAO,aAAe,GAAG,OAAO,UAAU,EAC3D,EAAO,cAAgB,GACvB,MAAO,GAAc,EAEpB,CACD,EAAO,YAAc,GACrB,KAAK,OAAO,CAAO,EACnB,KAAK,aAAa,CAAO,EACzB,GAAI,GAAU,KAAK,4BAA4B,EAAS,CAAa,EACrE,SAAU,EAAQ,KAAK,IAAM,KAAK,eAAe,CAAO,CAAC,EAClD,CACX,CACJ,CACA,OAAO,EAAU,CAEb,GADA,KAAK,cACA,OAAK,gBAAkB,GAAM,CAAC,GAAG,OAAO,UAAU,GAGvD,GAAW,KAAK,qBAAqB,CAAQ,EAC7C,OAAS,KAAW,GAChB,KAAK,kBAAkB,CAAO,EAElC,MAAO,IAAG,QAAQ,gBAAgB,oBAAoB,EAC1D,CACA,qBAAqB,EAAU,CAC3B,MAAI,GACO,EAAE,QAAQ,EAAU,AAAC,GAAO,EAAE,KAAK,EAAG,QAAQ,KAAK,SAAS,EAAG,EAAG,iBAAiB,KAAK,SAAS,CAAC,CAAC,EAGnG,SAAS,iBAAiB,KAAK,SAAS,CAEvD,CACA,SAAS,EAAS,CACd,MAAO,GAAQ,UAAU,SAAS,KAAK,YAAY,CACvD,CACA,kBAAkB,EAAS,CACvB,KAAK,iBAAiB,CAAO,CACjC,CACA,iBAAiB,EAAS,EAAa,CAAC,EAAG,CACvC,SAAa,CAAE,OAAQ,EAAS,IAAK,GAAO,GAAG,CAAW,EACnD,GAAG,KAAK,KAAK,YAAa,CAAU,CAC/C,CACA,aAAa,EAAS,CAClB,KAAK,gBACL,KAAK,cAAc,EAAS,EAAI,CACpC,CACA,eAAe,EAAS,CACpB,KAAK,gBACL,KAAK,cAAc,EAAS,EAAK,CACrC,CACA,cAAc,EAAS,EAAU,CAC7B,OAAS,KAAW,GAChB,EAAQ,UAAU,OAAO,KAAK,aAAc,CAAQ,CAE5D,CACA,4BAA4B,EAAS,EAAI,CACrC,GAAI,EAAQ,OAAS,EACjB,MAAO,GAAG,EAEd,GAAM,GAAY,AAAC,GAAU,CACzB,GAAI,CAAC,EAAM,UACP,OAAS,KAAW,GAChB,AAAI,IAAY,EAAM,QAAU,KAAK,SAAS,CAAO,GACjD,KAAK,iBAAiB,EAAS,CAAE,UAAW,EAAK,CAAC,CAIlE,EACM,EAAe,GAAG,GAAG,EAAS,KAAK,YAAa,CAAS,EAC/D,MAAO,GAAG,EAAE,KAAK,CAAY,CACjC,CACA,KAAM,QAAQ,CACV,KAAM,MAAK,OAAO,EAClB,KAAK,YAAc,EACnB,KAAK,cAAgB,CACzB,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACb,GAAG,kBAAoB,KAAwB,CAC3C,YAAY,EAAQ,EAAO,CACvB,KAAK,OAAS,EACd,KAAK,MAAQ,CACjB,CACA,MAAO,YAAW,EAAQ,CACtB,GAAI,GAAQ,EAAO,MAAM,2BAA2B,EACpD,MAAO,IAAI,MAAK,EAAM,GAAI,EAAM,EAAE,CACtC,CACA,cAAc,EAAU,CACpB,GAAI,GAAS,KAAK,OAClB,GAAI,KAAK,MAAO,CACZ,GAAI,GAAe,KACnB,MAAO,aAAa,EAAM,CACtB,MAAO,GAAa,qBAAqB,EAAQ,KAAM,EAAU,CAAI,CACzE,CACJ,KAEI,OAAO,IAAI,UAAS,GAAG,EAAU,CAAM,CAE/C,CACA,UAAW,CACP,MAAO,SAAS,KAAK,SAAS,KAAK,QACvC,CACA,qBAAqB,EAAQ,EAAS,EAAU,EAAM,CAClD,GAAI,GAAgB;AAAA;AAAA,0CAEc,EAAS,KAAK;AAAA,YAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,EACJ,GAAI,CAGA,GAFA,GAAG,WAAa,CAAE,OAAM,QAAS,CAAQ,EACzC,EAAgB,EAAE,MAAM,SAAS,KAAM,SAAU,CAAE,MAAO,KAAK,MAAO,KAAM,CAAc,CAAC,EACvF,GAAG,WAAW,MACd,KAAM,IAAG,WAAW,MAGpB,MAAO,IAAG,WAAW,KAE7B,QACA,CACI,GAAG,WAAa,OACZ,GACA,EAAc,OAAO,CAE7B,CACJ,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACb,GAAG,aAAe,KAAmB,CACjC,YAAY,EAAO,CACf,KAAK,OAAS,EACd,KAAK,cAAgB,KAAK,OAAO,gBAAgB,EACjD,KAAK,WAAa,KAAK,OAAO,SAClC,CACA,aAAc,CACV,AAAI,KAAK,SAGT,MAAK,QAAU,GACf,KAAK,YAAc,EAAE,aAAa,KAAK,cAAe,CAClD,SAAY,IACZ,KAAQ,SACR,aAAc,KAAK,WAAW,SAAS,CAC3C,CAAC,EACG,KAAK,YACL,MAAK,aAAe,GAAG,GAAG,UAAW,AAAC,GAAU,KAAK,SAAS,CAAK,CAAC,EACpE,KAAK,iBAAmB,EAAE,MAAM,KAAK,cAAe,cAAe,2BAA2B,EAC9F,KAAK,gBAAkB,EAAE,MAAM,KAAK,cAAe,WAAY,2BAA2B,GAElG,CACA,YAAa,CACT,KAAK,SAAS,CAClB,CACA,UAAW,CACP,AAAI,CAAC,KAAK,SAGV,MAAK,QAAU,GACf,KAAK,YAAY,EACb,KAAK,YACL,MAAK,aAAa,EAClB,KAAK,iBAAiB,OAAO,EAC7B,KAAK,gBAAgB,OAAO,GAEpC,CACA,SAAS,EAAO,CACZ,GAAM,CAAE,UAAW,EACnB,AAAI,KAAK,uBAAyB,GAAG,MAAM,uBAAuB,CAAM,GAGxE,MAAK,sBAAwB,GAC7B,AAAI,IAAW,KAAK,iBAChB,KAAK,UAAU,EAET,KAAW,KAAK,iBAAoB,CAAC,KAAK,OAAO,SAAS,CAAM,IACtE,KAAK,YAAY,EAErB,KAAK,sBAAwB,GACjC,CACA,YAAY,EAAc,CACtB,GAAG,MAAM,KAAK,cAAe,CAAY,CAC7C,CACA,WAAY,CACR,KAAK,qBAAqB,KAAK,OAAO,cAAc,CAAC,GAAK,KAAK,YAAY,CAC/E,CACA,qBAAqB,EAAS,CAC1B,OAAS,KAAS,GAAE,QAAQ,EAAQ,QAAQ,EACxC,GAAI,GAAG,SAAS,SAAS,CAAK,GAAK,KAAK,qBAAqB,CAAK,EAC9D,MAAO,EAGnB,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,OAAS,KAAa,CACrB,YAAY,EAAK,CACb,KAAK,MAAM,EACX,KAAK,OAAO,CAAG,CACnB,CACA,OAAQ,CACJ,KAAK,QAAU,CAAC,CACpB,CACA,CAAC,EAAE,KAAK,MAAO,CACX,MAAO,IAAI,IAAG,OAAO,IAAI,CAC7B,CACA,UAAW,CACP,GAAM,GAAM,CAAC,EACb,OAAS,KAAS,MAAK,QAAS,CAC5B,GAAM,CAAE,OAAM,SAAU,EACxB,AAAK,EAAE,sBAAsB,CAAI,GAC7B,CAAI,KAAK,YAAY,CAAI,EACrB,GAAI,KAAU,CAAC,EACf,EAAI,GAAM,KAAK,CAAK,GAGpB,EAAI,GAAQ,EAGxB,CACA,MAAO,EACX,CACA,SAAU,CACN,MAAO,MAAK,OAChB,CACA,YAAa,CACT,GAAM,GAAW,GAAI,UACrB,OAAS,KAAS,MAAK,QACnB,EAAS,OAAO,EAAM,KAAM,EAAM,KAAK,EAE3C,MAAK,GAAS,SACV,GAAS,cAAgB,KAAK,SAE3B,CACX,CACA,SAAU,CAGN,MAAO,AADK,AADQ,MAAK,qBAAqB,EAAE,QACtB,IAAI,KAAK,kBAAkB,EACxC,KAAK,GAAG,CACzB,CACA,mBAAmB,EAAO,CACtB,GAAM,CAAE,SAAU,EACd,EAAQ,mBAAmB,EAAM,IAAI,EACzC,MAAI,GAAE,QAAQ,CAAK,GACf,IAAS,IACT,GAAS,mBAAmB,CAAK,GAE9B,CACX,CACA,eAAe,CAAE,SAAS,CACtB,MAAO,aAAiB,KAC5B,CACA,kBAAmB,CACf,MAAO,GAAE,KAAK,KAAK,QAAS,KAAK,cAAc,CACnD,CACA,sBAAuB,CACnB,GAAI,GAAgB,EAAE,OAAO,KAAK,QAAS,KAAK,cAAc,EAC9D,MAAO,IAAI,MAAK,YAAY,CAAa,CAC7C,CACA,MAAM,EAAM,CACR,GAAI,GAAQ,CAAC,EAAM,KAAK,QAAQ,CAAC,EACjC,EAAQ,EAAE,OAAO,EAAO,EAAE,SAAS,EACnC,GAAM,GAAY,EAAE,SAAS,EAAM,GAAG,EAAI,IAAM,IAChD,MAAO,GAAM,KAAK,CAAS,CAC/B,CACA,IAAI,EAAM,EAAO,CACb,KAAK,QAAQ,KAAK,CAAE,OAAM,OAAM,CAAC,CACrC,CACA,OAAO,EAAK,CACR,AAAI,EAAE,UAAU,CAAG,GAEd,CAAI,YAAe,MAAK,YACzB,KAAK,QAAQ,KAAK,GAAG,EAAI,OAAO,EAE/B,AAAI,EAAE,QAAQ,CAAG,EAClB,KAAK,QAAQ,KAAK,GAAG,CAAG,EAEvB,AAAI,EAAE,SAAS,CAAG,EACnB,KAAK,iBAAiB,CAAG,EAExB,AAAI,EAAE,WAAW,CAAG,EACrB,KAAK,oBAAoB,CAAG,EAE3B,AAAI,EAAE,SAAS,CAAG,EACnB,KAAK,kBAAkB,CAAG,EAG1B,GAAG,KAAK,8BAA+B,CAAG,EAElD,CACA,MAAO,CACH,MAAO,GAAE,IAAI,KAAK,QAAS,MAAM,CACrC,CACA,QAAS,CACL,MAAO,GAAE,IAAI,KAAK,QAAS,OAAO,CACtC,CACA,kBAAkB,EAAQ,CACtB,OAAS,KAAO,GAAQ,CACpB,GAAM,GAAQ,EAAO,GACf,EAAgB,EAAE,QAAQ,CAAK,EAAI,EAAQ,CAAC,CAAK,EACvD,OAAS,KAAgB,GACrB,KAAK,IAAI,EAAK,CAAY,CAElC,CACJ,CACA,iBAAiB,EAAO,CACpB,OAAS,KAAQ,GAAM,MAAM,GAAG,EAC5B,GAAI,EAAM,CACN,GAAI,CAAC,EAAM,GAAS,EAAK,MAAM,GAAG,EAClC,EAAO,mBAAmB,CAAI,EAC9B,AAAI,EAAE,QAAQ,CAAK,EACf,EAAQ,mBAAmB,CAAK,EAGhC,EAAQ,KAEZ,KAAK,IAAI,EAAM,CAAK,CACxB,CAER,CACA,oBAAoB,EAAU,CAC1B,OAAS,KAAS,GAAS,QAAQ,EAC/B,KAAK,IAAI,GAAG,CAAK,CAEzB,CACA,IAAI,EAAM,EAAO,CACb,KAAK,OAAO,CAAI,EAChB,KAAK,IAAI,EAAM,CAAK,CACxB,CACA,OAAO,EAAM,CACT,KAAK,QAAU,EAAE,OAAO,KAAK,QAAS,KAAK,cAAc,CAAI,CAAC,CAClE,CACA,cAAc,EAAM,CAChB,MAAO,AAAC,IAAU,EAAM,OAAS,CACrC,CACA,IAAI,EAAM,CACN,MAAI,MAAK,YAAY,CAAI,EACd,KAAK,OAAO,CAAI,EAGhB,KAAK,SAAS,CAAI,CAEjC,CACA,SAAS,EAAM,CAEX,MAAO,AADO,GAAE,KAAK,KAAK,QAAS,KAAK,cAAc,CAAI,CAAC,GAC7C,KAClB,CACA,OAAO,EAAM,CACT,GAAM,GAAU,EAAE,OAAO,KAAK,QAAS,KAAK,cAAc,CAAI,CAAC,EAC/D,MAAO,GAAE,IAAI,EAAS,OAAO,CACjC,CACA,YAAY,EAAK,CACb,MAAO,GAAE,WAAW,GAAG,KAAK,OAAO,WAAY,CAAG,CACtD,CACA,CAAC,EAAE,QAAQ,MAAO,CACd,MAAO,MAAK,QAAQ,SAAW,CACnC,CACA,MAAO,UAAS,EAAM,CAClB,MAAO,MAAK,cAAc,CAAI,CAClC,CACA,MAAO,eAAc,EAAW,CAC5B,GAAI,GAAS,GAAG,KAAK,OAAO,CAAS,EACrC,MAAO,MAAK,WAAW,CAAM,CACjC,CACA,MAAO,YAAW,EAAQ,CACtB,GAAM,GAAS,GAAK,MACpB,OAAS,KAAS,GAAE,SAAS,CAAM,EAC/B,EAAO,SAAS,CAAK,EAEzB,MAAO,EACX,CACA,SAAS,EAAO,CACZ,EAAQ,EAAE,IAAI,CAAK,EACnB,GAAI,GAAO,EAAM,KACjB,GAAI,GAAQ,CAAC,EAAM,SAAU,CACzB,GAAM,CAAE,WAAY,EACd,CAAE,QAAS,EACjB,GAAI,IAAY,SACZ,OAAS,KAAU,GAAM,iBAAiB,QAAQ,EAC9C,AAAI,EAAO,UACP,KAAK,IAAI,EAAM,EAAO,KAAK,UAI7B,IAAS,YAAgB,IAAS,QACxC,AAAI,EAAM,SACN,KAAK,IAAI,EAAM,EAAM,KAAK,UAGzB,IAAS,OACd,OAAS,KAAQ,GAAM,MACnB,KAAK,IAAI,EAAM,CAAI,MAIvB,OAAO,MAAK,IAAI,EAAM,EAAM,KAAK,CAEzC,CACJ,CACA,CAAC,EAAE,QAAQ,KAAK,EAAO,CACnB,MAAQ,MAAK,cAAgB,EAAM,aAAgB,EAAE,QAAQ,KAAK,QAAS,EAAM,OAAO,CAC5F,CACA,MAAO,SAAQ,EAAK,CAChB,GAAM,GAAS,GAAK,MAEhB,EAAQ,AADK,EAAE,SAAS,CAAG,EACV,OACrB,MAAI,IACA,GAAQ,EAAM,QAAQ,MAAO,EAAE,EAC/B,EAAO,OAAO,CAAK,GAEhB,CACX,CACA,MAAO,UAAS,EAAK,CACjB,MAAO,GAAE,aAAa,EAAK,CAAE,OAAQ,EAAM,CAAC,CAChD,CACA,MAAO,OAAM,KAAU,EAAS,CAC5B,GAAI,GAAS,EAAE,KAAK,CAAK,EACzB,OAAS,KAAU,GAAS,CACxB,GAAI,GAAQ,EAAE,UAAU,KAAM,CAAM,EACpC,OAAS,KAAO,GAAM,KAAK,EACvB,EAAO,OAAO,CAAG,EACrB,EAAO,OAAO,CAAK,CACvB,CACA,MAAO,EACX,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,QAAU,KAAc,CACvB,YAAY,CAAE,WAAU,UAAS,gBAAe,WAAW,CACvD,KAAK,SAAW,EAChB,KAAK,QAAU,EACf,KAAK,cAAgB,EACrB,KAAK,SAAW,CACpB,CACA,QAAQ,EAAM,CACV,AAAI,KAAK,MACL,YAAY,GAAI,IAAG,MAAM,mCAAmC,CAAC,EAG7D,KAAK,SAAS,MAAM,GAAG,CAAI,CAEnC,CACA,GAAI,SAAS,CACT,MAAO,MAAK,QAAQ,MACxB,CACA,GAAI,SAAS,CACT,MAAO,MAAK,QAAQ,MACxB,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,QAAQ,KACxB,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,QAAQ,KACxB,CACA,GAAI,kBAAkB,CAClB,MAAO,MAAK,cAAc,eAC9B,CACA,GAAI,eAAe,CACf,MAAO,CAAC,CAAC,KAAK,eAClB,CACA,IAAI,EAAO,EAAU,CAAC,EAAG,CACrB,OAAS,KAAM,IAAG,OAAO,kBAAkB,CAAK,EAC5C,KAAK,KAAK,GAAG,MAAM,MAAM,EAAI,KAAM,CAAO,CAAC,CAEnD,CACA,QAAS,CACL,KAAK,SAAS,MAAM,CACxB,CACA,YAAY,EAAM,CACd,GAAI,CAAC,EAAS,GAAS,KAAK,kBAAkB,EAAM,MAAO,KAAK,EAChE,KAAK,KAAK,EAAE,aAAa,EAAS,CAAK,CAAC,CAC5C,CACA,YAAY,EAAM,CACd,GAAI,CAAC,EAAS,GAAS,KAAK,kBAAkB,EAAM,MAAO,KAAK,EAChE,KAAK,KAAK,EAAE,aAAa,EAAS,CAAK,CAAC,CAC5C,CACA,cAAc,EAAU,EAAS,CAC7B,OAAS,KAAW,GAChB,OAAS,KAAS,GACd,KAAK,SAAS,EAAS,CAAK,CAGxC,CACA,eAAe,EAAM,CACjB,GAAI,CAAC,EAAS,GAAS,KAAK,kBAAkB,EAAM,MAAO,KAAK,EAChE,KAAK,KAAK,EAAE,gBAAgB,EAAS,CAAK,CAAC,CAC/C,CACA,YAAY,EAAM,CACd,GAAI,CAAC,EAAS,GAAU,KAAK,kBAAkB,EAAM,MAAO,KAAK,EACjE,KAAK,KAAK,EAAE,aAAa,EAAS,CAAM,CAAC,CAC7C,CACA,WAAW,EAAM,CACb,GAAI,CAAC,GAAW,KAAK,kBAAkB,EAAM,KAAK,EAClD,KAAK,KAAK,GAAG,KAAK,YAAY,CAAO,CAAC,CAC1C,CACA,UAAU,EAAM,CACZ,GAAI,CAAC,EAAW,EAAW,YAAa,GAAa,KAAK,kBAAkB,EAAM,MAAO,EAAE,mBAAoB,KAAK,EACpH,KAAK,KAAK,GAAG,SAAS,WAAW,EAAW,EAAU,CAAS,CAAC,CACpE,CACA,QAAQ,EAAM,CACV,GAAI,CAAC,GAAW,KAAK,kBAAkB,EAAM,KAAK,EAClD,KAAK,KAAK,EAAE,SAAS,CAAO,CAAC,CACjC,CACA,QAAQ,EAAM,CACV,GAAI,CAAC,GAAW,KAAK,kBAAkB,EAAM,KAAK,EAClD,KAAK,KAAK,EAAE,SAAS,CAAO,CAAC,CACjC,CACA,eAAe,EAAM,CACjB,GAAI,CAAC,GAAU,KAAK,kBAAkB,EAAM,KAAK,EAC7C,EAAU,EAAE,aAAa,CAAM,EACnC,EAAE,KAAK,CAAO,EACd,KAAK,KAAK,IAAM,EAAE,OAAO,CAAO,CAAC,CACrC,CACA,mBAAmB,EAAM,CACrB,GAAI,CAAC,EAAQ,GAAwB,KAAK,kBAAkB,EAAM,MAAO,KAAK,EAC1E,EAAmB,GAAG,SAAS,aAAa,EAAsB,CAAE,OAAQ,KAAK,MAAO,CAAC,EAC7F,GAAG,KAAK,mBAAoB,yBAA0B,CAAoB,EAC1E,AAAI,EACA,KAAK,YAAY,EAAQ,CAAgB,EAEpC,KAAK,QAAU,OACpB,MAAK,UAAU,EAAkB,CAAE,eAAgB,EAAM,CAAC,EAC1D,KAAK,cAAc,cAAgB,GAE3C,CACA,eAAe,EAAM,CACjB,GAAI,CAAC,EAAQ,GAAc,KAAK,kBAAkB,EAAM,MAAO,KAAK,EACpE,KAAK,YAAY,CAAM,EACvB,KAAK,OAAO,EAAQ,CAAU,CAClC,CACA,UAAU,EAAS,EAAU,CAAC,EAAG,CAC7B,GAAI,GAAmB,gBACnB,EAAY,CAAC,CAAE,WAAY,CAC3B,AAAI,IAAU,GACV,KAAK,QAAQ,MAAM,CAAE,OAAQ,2BAA4B,CAAC,CAClE,EACA,GAAG,MAAM,KAAK,CACV,GAAG,EAAE,KAAK,KAAK,cAAe,CAAC,GAAG,GAAG,MAAM,QAAQ,YAAa,QAAQ,CAAC,EACzE,GAAG,EACH,UACA,MAAO,GACP,WACJ,CAAC,EACD,GAAI,GAAU,GAAG,MAAM,MACvB,YAAK,KAAK,IAAM,EAAQ,QAAQ,EAAkB,CAAE,YAAa,EAAM,CAAC,CAAC,EAClE,CACX,CACA,kBAAkB,KAAS,EAAO,CAC9B,GAAI,CAAC,KAAY,GAAQ,EAAE,KAAK,EAAM,GAAG,CAAK,EAC9C,SAAU,GAAG,SAAS,IAAI,EAAS,CAAE,MAAO,KAAK,MAAO,OAAQ,KAAK,MAAO,CAAC,GAAK,KAAK,SAChF,CAAC,EAAS,GAAG,CAAI,CAC5B,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAmB,IACzB,GAAG,YAAc,KAAkB,CAC/B,aAAc,CACV,KAAK,MAAQ,EACb,KAAK,SAAW,EAAE,MAAM,SAAS,KAAM,iBAAiB,EACxD,KAAK,SAAS,MAAM,WAAa,SAAS,eAC1C,KAAK,QAAQ,CAAC,EACd,EAAE,MAAM,KAAK,QAAQ,EACrB,KAAK,OAAS,GACd,KAAK,UAAU,CACnB,CACA,WAAY,CACR,GAAI,GACJ,AAAI,KAAK,OAAS,GACd,AAAI,KAAK,OAAO,EAAI,IAChB,EAAO,EAAK,EAAI,KAAK,OAAO,EAG5B,EAAO,IAAO,GAAM,KAAK,OAAO,EAIpC,EAAO,IAAQ,KAAM,KAAK,QAAU,KAAK,OAAO,EAEpD,KAAK,QAAQ,KAAK,OAAS,CAAI,EAC/B,KAAK,QACL,GAAM,GAAgB,EAAoB,KAAK,MAAQ,GACvD,KAAK,QAAU,WAAW,KAAK,UAAU,KAAK,IAAI,EAAG,CAAa,CACtE,CACA,QAAQ,EAAO,CACX,KAAK,OAAS,EACd,KAAK,SAAS,MAAM,MAAQ,GAAG,KACnC,CACA,SAAU,CACN,aAAa,KAAK,OAAO,EACzB,KAAK,SAAS,OAAO,CACzB,CACA,UAAW,CACP,aAAa,KAAK,OAAO,EACzB,KAAK,QAAQ,GAAG,EAChB,WAAW,KAAK,QAAQ,KAAK,IAAI,EAAG,CAAgB,CACxD,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,cAAiB,UAAY,CAC5B,GAAM,GAAc,CAChB,QAAS,GACT,QAAS,GACT,YAAa,GACb,SAAU,EACd,EACM,EAAwB,CAC1B,OAAQ,GACR,MAAO,OACP,QAAS,EACb,EACM,EAAY,CACd,WAAY,GACZ,UAAW,GACX,cAAe,GACf,eAAgB,EACpB,EAwBM,EAAc,AAvBG,CACnB,MACA,SACA,SACA,UACA,SACA,QACA,WACA,QACA,YACA,cACA,UACA,WACA,UACA,cACA,UACA,SACA,cACA,YACA,WACA,OACA,SACJ,EACmC,OAAO,CACtC,OACA,SACA,UACA,SACA,YACJ,CAAC,EACK,EAAe,CACjB,MACA,WACA,UACA,WACA,UACJ,EACM,EAAY,CACd,UACA,QACA,QACJ,EACA,WAA0B,EAAS,CAC/B,GAAI,EAAQ,SACR,MAAO,IAAG,SAAS,OAAO,eAElC,CACA,WAAsB,CAAE,OAAO,CAC3B,GAAI,EACA,MAAO,CAAE,IAAK,EAAE,aAAa,CAAG,CAAE,CAE1C,CACA,WAAyB,EAAS,CAC9B,EAAE,UAAU,EAAS,UAAW,MAAM,EACtC,EAAE,UAAU,EAAS,YAAa,QAAQ,EAC1C,EAAE,UAAU,EAAS,UAAW,MAAM,CAC1C,CACA,WAAoB,EAAS,CACzB,GAAG,QAAQ,0BAA0B,CAAO,EAC5C,GAAG,MAAM,iBAAiB,CAAO,EACjC,EAAgB,CAAO,EACvB,GAAM,IAAW,EAAE,MAAM,GAAG,SAAS,OAAO,cAAe,EAAiB,CAAO,CAAC,EACpF,MAAO,GAAE,MAAM,EAAE,KAAK,GAAU,CAAS,EAAG,CAAE,WAAS,EAAG,CAAE,YAAa,GAAG,MAAM,WAAY,EAAG,EAAS,EAAa,CAAO,EAAG,EAAoB,CAAO,CAAC,CACjK,CACA,WAA6B,CAAE,SAAQ,gBAAe,CAClD,GAAI,GAAU,CAAC,GACX,MAAO,CACH,YAAa,GAAG,MAAM,IAAI,CAAM,CACpC,CAER,CACA,WAAkB,EAAqB,GAAc,CACjD,MAAO,GAAE,MAAM,EAAoB,SAAU,GAAc,CAAmB,CAClF,CACA,WAA4B,EAAS,CACjC,AAAK,EAAE,KAAK,EAAc,AAAC,IAAe,EAAE,QAAQ,EAAQ,GAAW,CAAC,GACpE,CAAI,EAAQ,sBACR,EAAQ,QAAU,GAGlB,GAAG,KAAK,8BAAgC,EAAa,KAAK,IAAI,EAAI,WAAW,EAGzF,CACA,YAAuB,EAAS,CAC5B,GAAM,IAAY,CAAC,EACnB,OAAS,KAAO,GAAS,CACrB,GAAM,GAAQ,EAAQ,GAClB,EAAa,GAAG,SAAS,WAAW,CAAG,EAC3C,AAAI,GACA,IAAU,GAAc,EAEhC,CACA,MAAO,GACX,CACA,YAA2B,EAAqB,CAC5C,GAAI,IAAc,CAAE,QAAS,EAAK,EAC9B,EAAY,GAAc,CAAmB,EACjD,MAAI,GAAoB,YACb,CACH,GAAG,EAAoB,SACvB,GAAG,EAAE,KAAK,EAAqB,CAAW,EAC1C,GAAG,EACH,oBAAqB,GACrB,GAAG,EACP,EAGO,CACH,GAAG,EACH,GAAG,EACH,GAAG,EACP,CAER,CACA,MAAO,CACH,aACA,WACA,qBACA,qBACA,cACA,YACA,uBACJ,CACJ,EAAG,CAGG,EAEC,IAAM,CAEb,GAAG,aAAe,aAA2B,IAAG,MAAO,CACnD,MAAO,CACH,MAAO,CACH,YACA,QACA,SACA,gBACA,UACJ,CACJ,CACA,UAAW,CACP,MAAO,CACH,UAAW,CAAC,EACZ,SAAU,QAAQ,QAAQ,CAC9B,CACJ,CACA,GAAI,OAAO,CACP,MAAO,CAAC,KAAK,UAAU,MAC3B,CACA,GAAI,WAAW,CACX,MAAO,MAAK,UAAU,EAC1B,CACA,GAAI,KAAK,CACL,MAAO,CAAC,KAAK,cAAc,OAC/B,CACA,MAAO,MAAK,EAAM,EAAW,EAAgB,GAAM,CAC/C,MAAK,GAGE,GAAI,MAAK,CACZ,GAAG,EACH,UAAW,EAAK,UAAU,OAAO,EAAU,SAAS,EACpD,SAAW,GAAiB,KAAK,cAAc,EAAM,CAAS,CAClE,CAAC,EANU,CAOf,CACA,YAAa,eAAc,EAAM,EAAW,CACxC,MAAO,MAAK,KAAK,KAAM,GAAK,SAAU,KAAM,GAAU,SAAU,EAAK,CACzE,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACb,GAAG,QAAW,GAAK,aAAsB,IAAG,MAAO,CAC3C,MAAO,CACH,MAAO,CACH,SACA,MACA,OACA,SACA,SACA,aACA,UACA,UACA,aACA,QACA,cACA,aACA,QACA,OACA,UACA,YACA,WACA,cACA,SACA,cACA,aACA,UACA,aACA,cACA,UACA,YACA,OACA,YACA,YACA,UACJ,CACJ,CACA,UAAW,CACP,GAAI,GAAS,GAAG,QAAQ,OACxB,MAAO,CACH,MAAO,MACP,UAAW,GACX,QAAS,CAAC,EACV,QAAS,EAAO,QAChB,QAAS,GAAI,MACb,SAAU,CAAC,EACX,WAAY,EAAO,UACvB,CACJ,CACA,YAAY,EAAS,CAIjB,GAHA,MAAM,CAAO,EACb,KAAK,OAAS,GAAI,IAAG,OAAO,KAAK,MAAM,EACvC,KAAK,WAAW,EACX,MAAK,QAAU,KAAK,OAAS,KAAK,SAAW,CAAC,EAAQ,MAAO,CAC9D,GAAM,GAAqB,CAAE,OAAQ,KAAK,MAAO,EACjD,KAAK,MAAQ,GAAG,MAAM,IAAI,KAAK,MAAO,CAAkB,EACxD,KAAK,UAAY,KAAK,MAAM,SAAW,CAAC,EACxC,KAAK,OAAS,KAAK,MAAM,KACzB,KAAK,UAAY,GAAG,MAAM,IAAI,KAAK,UAAW,CAAkB,EAChE,KAAK,cAAgB,KAAK,WAAW,SAAW,CAAC,EACjD,KAAK,WAAa,KAAK,WAAW,KAClC,KAAK,cAAgB,GAAG,MAAM,IAAI,KAAK,MAAM,GAAK,GAAG,MAAM,QAC3D,KAAK,aAAe,KAAK,aAAa,IAC1C,CACA,KAAK,UAAY,EAAQ,WAAa,KAAK,MAC3C,KAAK,WAAa,EAAQ,UAC1B,KAAK,eAAiB,EAAQ,cAC9B,KAAK,UAAY,EAAE,YAAY,EAC/B,KAAK,gBAAgB,CACzB,CACA,GAAI,oBAAoB,CACpB,MAAI,MAAK,WACE,GAGA,KAAK,WAAa,EAAE,WAAW,GAAG,QAAQ,OAAO,UAAW,IAAI,CAE/E,CACA,SAAU,CACN,MAAO,GAAE,SAAS,KAAK,iBAAiB,CAC5C,CACA,GAAI,MAAM,CACN,MAAO,MAAK,OAAS,GAAI,eAC7B,CACA,GAAI,YAAY,CACZ,MAAQ,MAAK,aAAe,KAAK,eAAe,CACpD,CACA,gBAAiB,CACb,GAAI,GAAQ,GAAG,SAAS,iBAAiB,KAAK,MAAM,EAChD,EAAa,CAAE,OAAQ,KAAK,OAAQ,MAAO,KAAK,KAAM,EACtD,EAAU,EAAE,IAAI,EAAO,AAAC,GAAS,GAAG,SAAS,IAAI,EAAK,SAAU,CAAU,CAAC,EAC/E,MAAO,GAAE,QAAQ,CAAO,CAC5B,CACA,GAAI,gBAAgB,CAChB,MAAO,MAAK,gBAAkB,KAAK,SACvC,CACA,GAAI,WAAW,CACX,MAAO,MAAK,YAAY,EAC5B,CACA,YAAa,CACT,KAAK,OAAS,EAAE,gBAAgB,KAAK,MAAM,EAC3C,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,IAAM,EAAE,aAAa,KAAK,GAAG,CACtC,CACA,sBAAuB,CACnB,EAAE,KAAK,IAAM,CACT,KAAK,MAAQ,OACb,KAAK,UAAY,OACjB,KAAK,UAAY,OACjB,KAAK,OAAS,OACd,KAAK,YAAc,OACnB,KAAK,WAAa,OAClB,KAAK,eAAiB,MAC1B,CAAC,CACL,CACA,qBAAsB,CAClB,GAAI,GAAQ,KAAK,KAAK,MAAM,gBAAgB,EAC5C,GAAI,EACA,YAAK,IAAM,EAAM,GACV,KAAK,KAAO,EAAM,EAEjC,CACA,sBAAuB,CACnB,AAAI,CAAC,KAAK,KAAO,KAAK,cAAc,GAAK,EAAE,QAAQ,KAAK,MAAM,GAG9D,MAAK,IAAM,KAAK,OAAO,MAAM,KAAK,GAAG,EACrC,KAAK,OAAO,MAAM,EACtB,CACA,QAAS,CACL,MAAO,IAAG,QAAQ,aAAa,KAAK,MAAM,CAC9C,CACA,eAAgB,CACZ,MAAO,GAAE,oBAAoB,KAAK,MAAM,CAC5C,CACA,wBAAyB,CACrB,MAAO,MAAK,OAAO,GAAM,KAAK,SAAW,MAC7C,CACA,WAAY,CACR,MAAO,GAAE,eAAe,KAAK,MAAO,GAAG,QAAQ,OAAO,UAAW,IAAI,CACzE,CACA,oBAAqB,CACjB,EAAE,OAAO,KAAM,IAAM,KAAK,qBAAqB,CAAC,CACpD,CACA,MAAO,CACH,GAAI,KAAK,QAAU,MAEnB,IAAI,KAAK,UAAU,EACf,YAAK,MAAQ,UACb,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,QAAU,GACf,GAAI,IAAG,QAAQ,YAAY,IAAI,EAAE,aAAa,CAC1C,OAAQ,IAAM,KAAK,WAAW,EAC9B,QAAS,IAAM,KAAK,YAAY,EAChC,UAAW,IAAM,KAAK,cAAc,EACpC,QAAS,IAAM,KAAK,YAAY,CACpC,CAAC,EACM,GAGP,KAAK,MAAM,CAAE,OAAQ,6BAA8B,CAAC,EAE5D,CACA,YAAY,EAAe,CACvB,AAAI,CAAC,KAAK,OAAS,CAAC,KAAK,WACrB,MAAK,gBAAkB,GAAG,OAAO,YAAY,KAAM,CAAa,EAExE,CACA,WAAY,CAER,MAAO,CAAC,AADI,KAAK,KAAK,kBAAmB,CAAE,IAAK,CAAC,aAAc,KAAK,WAAW,CAAE,CAAC,EACpE,gBAClB,CACA,UAAW,CACP,GAAG,QAAQ,MAAM,EACjB,GAAI,IAAG,QAAQ,aAAa,IAAI,EAAE,eAAe,CACrD,CACA,YAAa,CACT,GAAM,GAAW,KAAK,wBAAwB,EACxC,EAAM,UAAY,EAAS,YACjC,KAAK,KAAK,oBAAqB,CAAE,QAAS,EAAS,QAAS,WAAU,KAAI,CAAC,EAC3E,KAAK,YAAY,CAAQ,CAC7B,CACA,aAAc,CACV,KAAK,iBAAiB,eAAe,CACzC,CACA,eAAgB,CACZ,KAAK,iBAAiB,SAAS,CACnC,CACA,aAAc,CACV,KAAK,iBAAiB,CAC1B,CACA,MAAM,CAAE,UAAW,CAAC,EAAG,CACnB,AAAI,KAAK,iBAAiB,CAAM,GAAK,KAAK,MACtC,KAAK,KAAK,MAAM,CAExB,CACA,iBAAiB,EAAQ,CACrB,GAAI,KAAK,MACL,OACJ,GAAI,GAAU,sBAAwB,KAAK,YAAe,GAAS,KAAO,EAAS,IACnF,YAAK,MAAQ,UACb,KAAK,QAAQ,GAAI,IAAG,QAAQ,CAAO,CAAC,EACpC,KAAK,KAAK,qBAAsB,CAAE,IAAK,CAAQ,CAAC,EACzC,EACX,CACA,iBAAiB,EAAQ,CACrB,GAAI,KAAK,MACL,OACJ,GAAI,GAAU,0BAA4B,KAAK,YAAe,GAAS,KAAO,EAAS,IACvF,KAAK,MAAQ,UACb,KAAK,KAAK,qBAAsB,CAAE,IAAK,CAAQ,CAAC,EAChD,KAAK,QAAQ,GAAI,IAAG,QAAQ,CAAO,CAAC,CACxC,CACA,YAAY,EAAU,CAElB,AADA,KAAK,SAAW,EACZ,MAAK,OAET,MAAK,MAAQ,SACb,AAAI,EAAS,GACT,KAAK,SAAS,CAAQ,EAGtB,KAAK,QAAQ,CAAQ,EAE7B,CACA,SAAS,EAAU,CACf,KAAK,UAAU,EACf,KAAK,UAAU,QAAQ,CAAQ,CACnC,CACA,QAAQ,EAAiB,CACrB,KAAK,UAAU,EACf,KAAK,UAAU,OAAO,CAAe,CACzC,CACA,WAAY,CACR,KAAK,kBAAkB,CAC3B,CACA,GAAI,QAAQ,CACR,MAAQ,MAAK,QAAU,OAAW,KAAK,QAAU,WAAe,KAAK,QAAU,UACnF,CACA,YAAa,CACT,MAAO,IAAG,SAAS,WAAW,CAClC,CACA,WAAY,CACR,MAAO,IAAG,SAAS,UAAU,CACjC,CACA,WAAY,CACR,GAAI,CAAC,KAAK,OAAO,GAAK,CAAC,KAAK,cAAc,EACtC,MAAO,IAAG,SAAS,UAAU,CAErC,CACA,eAAgB,CACZ,MAAO,GAAE,cAAc,KAAK,GAAG,CACnC,CACA,yBAA0B,CACtB,GAAM,GAAgB,CAClB,OAAQ,KAAK,OACb,IAAK,KAAK,IACV,QAAS,KACT,IAAK,KAAK,IACV,KAAM,KAAK,IAAI,aACf,OAAQ,KAAK,IAAI,OACjB,MAAO,GAAG,SAAS,aAAa,KAAK,GAAG,EACxC,OAAQ,GAAG,SAAS,cAAc,KAAK,GAAG,EAC1C,UAAW,GAAG,SAAS,iBAAiB,KAAK,GAAG,EAChD,YAAa,GAAG,SAAS,mBAAmB,KAAK,GAAG,EACpD,aAAc,GAAG,SAAS,oBAAoB,KAAK,GAAG,EACtD,WAAY,GAAG,SAAS,kBAAkB,KAAK,GAAG,EAClD,QAAS,GAAG,SAAS,eAAe,KAAK,GAAG,EAC5C,YAAa,GAAG,SAAS,mBAAmB,KAAK,GAAG,EACpD,WAAY,GAAG,SAAS,kBAAkB,KAAK,GAAG,EAClD,KAAM,KAAK,IACf,EACI,EAAqB,GAAG,SAAS,cAAc,KAAK,GAAG,EACvD,EAAkB,GAAG,SAAS,gBAAgB,KAAK,GAAG,EAC1D,MAAI,IACK,GAAE,UAAU,KAAK,IAAK,CAAe,GACtC,KAAuB,OAE3B,EAAc,IAAM,GAEpB,GACA,GAAc,OAAS,GAEpB,GAAI,IAAG,SAAS,CAAa,CACxC,CACA,mBAAmB,EAAM,CACrB,MAAO,IAAG,aAAa,aAAa,EAAM,CACtC,MAAO,KAAK,UACZ,QAAS,KACT,OAAQ,KAAK,MACjB,CAAC,CACL,CACA,QAAQ,EAAM,CACV,MAAO,MAAK,mBAAmB,CAAI,EAAE,KAAK,CAC9C,CACA,iBAAiB,EAAM,CACnB,KAAK,mBAAmB,CAAI,EAAE,cAAc,CAChD,CACA,GAAI,cAAc,CACd,MAAO,MAAK,OAAS,IAAM,KAAK,GACpC,CACA,kBAAkB,EAAc,CAC5B,SAAe,EAAE,SAAS,CAAY,EAC/B,EAAE,KAAK,KAAK,cAAe,SAAU,EAAU,CAClD,MAAO,GAAE,KAAK,EAAc,AAAC,GAAmB,EAAe,SAAS,CAAQ,CAAC,CACrF,CAAC,CACL,CACA,gBAAgB,EAAQ,CACpB,MAAO,GAAE,SAAS,EAAQ,KAAK,SAAS,CAC5C,CACA,GAAI,MAAM,CACN,MAAO,IAAI,MAAS,KAAK,OAC7B,CACA,OAAO,EAAM,CACT,MAAO,MAAK,QAAQ,EACxB,CACA,iBAAkB,CACd,OAAS,KAAO,CAAC,SAAU,aAAc,OAAQ,WAAY,UAAW,cAAe,YAAY,EAC/F,KAAK,mBAAmB,CAAG,EAE/B,GAAI,GAAY,EAChB,AAAK,GAAa,KAAK,WAAW,IAAO,GAAY,KAAK,UAAU,IAChE,KAAK,eAAe,EAAY,CAAS,EAE7C,KAAK,eAAe,GAAG,SAAS,UAAU,SAAS,EAAG,GAAG,OAAO,CACpE,CACA,mBAAmB,EAAK,CACpB,KAAK,eAAe,GAAG,SAAS,UAAU,CAAG,EAAG,KAAK,EAAI,CAC7D,CACA,eAAe,EAAM,EAAO,CACxB,AAAI,EAAE,UAAU,CAAK,GAGjB,IAAE,UAAU,CAAK,GAAK,EAAE,QAAQ,CAAK,IACrC,GAAQ,EAAE,kBAAkB,CAAK,GAErC,KAAK,QAAQ,GAAQ,EACzB,CACA,cAAc,EAAiB,CAG3B,GAFI,KAAK,QAAU,OAEf,CAAC,KAAK,QAAU,CAAC,EAAgB,OACjC,OACJ,GAAI,GAAc,GAAG,SAAS,YAAY,KAAK,OAAS,IAAM,EAAgB,MAAM,EACpF,KAAK,OAAS,EAAE,KAAK,CAAW,EAAE,KAAK,IAAI,EAC3C,KAAK,mBAAmB,QAAQ,EAChC,KAAK,WAAa,EAAE,KAAK,CAAC,GAAG,KAAK,UAAW,GAAG,EAAgB,SAAS,CAAC,CAC9E,CACA,MAAO,QAAO,EAAW,CAAE,UAAW,CAAC,EAAG,CACtC,GAAI,GACJ,GAAI,EAAE,WAAW,CAAS,EACtB,EAAS,UAEJ,YAAqB,MAC1B,EAAS,AAAC,GAAY,IAAc,UAE/B,EAAE,SAAS,CAAS,EAAG,CAC5B,GAAI,GAAU,GAAI,IAAG,WAAW,CAAS,EACzC,EAAS,AAAC,GAAY,EAAQ,KAAK,EAAQ,GAAG,CAClD,KAEI,GAAS,AAAC,GAAa,EAE3B,MAAI,GACO,AAAC,GAAY,CAAC,GAAG,MAAM,qBAAqB,EAAS,CAAM,GAAK,EAAO,CAAO,EAG9E,CAEf,CACJ,EAEI,EAAE,gBAAgB,EAAG,UAAW,UAAY,CAAE,MAAO,MAAK,SAAW,CAAC,EAE1E,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,MAAM,CAAM,CACR,aAAc,CACV,KAAK,YAAc,GAAI,KACvB,KAAK,SAAW,CAAC,CACrB,CACA,UAAU,EAAY,CAClB,GAAI,GAAU,KAAK,SAAS,OAAO,AAAC,GAAkB,KAAK,UAAU,EAAe,CAAU,CAAC,EAC/F,MAAO,GAAE,KAAK,CAAO,CACzB,CACA,OAAO,EAAS,CACZ,EAAE,OAAO,KAAK,SAAU,CAAO,CACnC,CACA,IAAI,EAAS,CACT,KAAK,SAAS,KAAK,CAAO,CAC9B,CACA,WAAW,EAAU,CACjB,OAAS,KAAc,GAAS,gBAC5B,KAAK,YAAY,IAAI,CAAU,CAEvC,CACA,UAAU,EAAe,EAAY,CACjC,MAAI,KAAkB,EACX,GACJ,EAAE,MAAM,KAAK,YAAa,AAAC,GAAe,CAC7C,GAAI,GAAc,EAAc,OAAO,CAAU,EAC7C,EAAW,EAAW,OAAO,CAAU,EAC3C,GAAI,IAAe,eAAiB,IAAe,mBAAoB,CACnE,GAAI,CAAC,EACD,MAAO,GACX,GAAI,CAAC,EACD,MAAO,GACX,GAAI,GAAe,GAAG,SAAS,YAAY,CAAW,EAClD,EAAY,GAAG,SAAS,YAAY,CAAQ,EAChD,MAAO,GAAE,YAAY,EAAc,CAAS,CAChD,KAEI,OAAO,KAAgB,CAE/B,CAAC,CACL,CACJ,CACA,GAAG,QAAQ,MAAQ,KAAY,CAC3B,aAAc,CACV,KAAK,MAAM,CACf,CACA,OAAQ,CACJ,KAAK,QAAU,CAAC,EAChB,KAAK,UAAY,CAAC,CACtB,CACA,IAAI,EAAS,CACT,EAAU,KAAK,MAAM,CAAO,EAC5B,GAAI,GAAQ,KAAK,UAAU,CAAO,EAC9B,EAAgB,EAAM,UAAU,CAAO,EAC3C,GAAI,EAAe,CACf,GAAI,KAAK,UAAU,CAAa,EAC5B,MAAO,GAGP,KAAK,QAAQ,EAAS,CAAK,CAEnC,CACJ,CACA,KAAM,KAAI,EAAS,CACf,EAAU,KAAK,MAAM,CAAO,EAC5B,GAAI,GAAQ,KAAK,UAAU,CAAO,EAC9B,CAAE,YAAa,EACnB,AAAI,GACA,EAAM,WAAW,CAAQ,EAC7B,GAAI,GAAa,EAAM,SAAS,OAAO,AAAC,GAAe,EAAM,UAAU,EAAS,CAAU,CAAC,EAC3F,OAAS,KAAK,GACV,KAAK,QAAQ,CAAC,EAElB,EAAQ,WAAa,EACrB,EAAM,IAAI,CAAO,EACjB,KAAK,UAAU,KAAK,CAAO,EAC3B,KAAK,WAAW,CACpB,CACA,KAAM,OAAM,EAAiB,EAAY,EAAU,CAAC,EAAG,CACnD,EAAW,eAAiB,EAC5B,EAAW,MAAQ,WACnB,GAAI,GACJ,AAAI,EAAgB,OAAS,EAAgB,SACzC,EAAQ,EAAgB,SAGxB,EAAQ,KAAM,GAAE,OAAO,CAAe,EAE1C,AAAI,YAAiB,IAAG,SACpB,AAAI,EAAQ,OAAS,EAAgB,WAAW,UAAU,EAAiB,CAAU,EACjF,GAAW,UAAY,GACvB,EAAQ,EAAE,QAAQ,EAAO,CAAE,QAAS,CAAW,CAAC,EAChD,EAAW,YAAY,CAAK,EAC5B,EAAE,SAAS,EAAY,CAAC,UAAW,OAAO,EAAG,IAAM,CAAe,GAGlE,OAAO,GAAW,eAClB,EAAW,MAAQ,MACnB,EAAQ,iBAAiB,CAAU,GAIvC,GAAW,MAAQ,EAAgB,MACnC,EAAW,QAAQ,CAAK,EAEhC,CACA,qBAAqB,EAAiB,EAAY,CAC9C,MAAO,KAAoB,GAAc,IAAoB,EAAW,cAC5E,CACA,MAAM,EAAY,GAAM,EAAe,CACnC,KAAK,WAAW,EAAW,EAAe,AAAC,GAAY,KAAK,QAAQ,CAAO,CAAC,CAChF,CACA,OAAO,EAAY,GAAM,EAAe,CACpC,KAAK,WAAW,EAAW,EAAe,AAAC,GAAY,EAAQ,QAAU,EAAI,CACjF,CACA,QAAQ,EAAS,CACb,KAAK,QAAQ,CAAO,EACpB,MAAO,GAAQ,WACf,KAAK,IAAI,CAAO,CACpB,CACA,QAAQ,EAAS,CACb,EAAE,OAAO,KAAK,UAAW,CAAO,EAChC,EAAQ,YAAY,OAAO,CAAO,CACtC,CACA,UAAU,EAAS,CACf,MAAO,GAAQ,YAAe,MAAK,QAAQ,EAAQ,eAAiB,GAAI,GAC5E,CACA,UAAU,EAAS,CACf,MAAO,GAAQ,IAAM,GAAG,QAAQ,OAAO,aAC3C,CACA,GAAI,cAAc,CACd,MAAO,MAAK,UAAU,MAC1B,CACA,GAAI,YAAY,CACZ,MAAO,IAAG,QAAQ,OAAO,SAC7B,CACA,YAAa,CACT,OAAS,GAAI,EAAG,EAAK,KAAK,YAAc,KAAK,UAAY,IACrD,KAAK,QAAQ,KAAK,UAAU,EAAE,CAEtC,CACA,WAAW,EAAY,GAAM,EAAe,EAAI,CAC5C,GAAI,GAAS,GAAG,QAAQ,OAAO,EAAW,CAAa,EACnD,EAAU,EAAE,OAAO,KAAK,UAAW,CAAM,EAC7C,EAAE,KAAK,EAAS,CAAE,CACtB,CACA,MAAM,EAAkB,CACpB,MAAO,GAAE,UAAU,GAAG,QAAS,CAAgB,CACnD,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,QAAQ,MAAQ,KAAY,CAC3B,aAAc,CACV,KAAK,MAAM,CACf,CACA,OAAQ,CACJ,KAAK,gBAAkB,CAAC,EACxB,KAAK,iBAAmB,CAAC,EACzB,KAAK,aAAe,EACxB,CACA,GAAI,cAAc,CACd,MAAO,MAAK,iBAAiB,OAAO,KAAK,eAAe,CAC5D,CACA,KAAK,EAAS,CACV,EAAQ,mBAAmB,EAC3B,EAAE,OAAO,EAAS,IAAM,KAAK,kBAAkB,CAAO,CAAC,EACvD,KAAK,mBAAmB,CAAO,EAC/B,KAAK,cAAc,CAAO,EAC1B,eAAe,IAAM,KAAK,MAAM,CAAC,CACrC,CACA,oBAAoB,EAAS,CACzB,AAAI,EAAQ,YACR,GAAQ,WAAa,GACrB,KAAK,mBAAmB,CAAO,EAEvC,CACA,mBAAmB,EAAS,CACxB,GAAI,CAAC,EAAQ,QAAQ,EACjB,OACJ,GAAI,GAAgB,KAAK,IAAI,EAAQ,kBAAoB,EAAQ,GAAG,EACpE,EAAE,MAAM,EAAe,IAAM,KAAK,cAAc,CAAC,CACrD,CACA,oBAAqB,CACjB,MAAO,GAAE,WAAW,GAAG,QAAQ,OAAO,WAAW,CACrD,CACA,qBAAsB,CAClB,GAAM,GAAiB,KAAK,mBAAmB,EAC/C,MAAQ,KAAmB,IAAQ,KAAK,iBAAiB,OAAS,CACtE,CACA,QAAS,CACL,MAAO,MAAK,iBAAiB,OAAS,GAAK,KAAK,gBAAgB,OAAS,CAC7E,CACA,cAAc,EAAS,CACnB,KAAK,gBAAgB,KAAK,CAAO,CACrC,CACA,mBAAoB,CAChB,GAAI,GAAU,EAAE,KAAK,KAAK,gBAAiB,AAAC,GAAY,CAAC,EAAQ,UAAU,EAC3E,WAAY,KAAK,gBAAgB,GAC1B,EAAE,OAAO,KAAK,gBAAiB,CAAO,CACjD,CACA,gBAAgB,EAAS,CACrB,AAAI,EAAQ,KAAK,GACb,KAAK,iBAAiB,KAAK,CAAO,CAE1C,CACA,kBAAkB,EAAS,CACvB,EAAE,OAAO,KAAK,iBAAkB,CAAO,GAAK,EAAE,OAAO,KAAK,gBAAiB,CAAO,EAClF,eAAe,IAAM,KAAK,MAAM,CAAC,EACjC,EAAE,KAAK,IAAM,KAAK,iBAAiB,CAAC,CACxC,CACA,OAAQ,CACJ,GAAI,GACJ,GAAI,KAAK,oBAAoB,GAAM,GAAU,KAAK,kBAAkB,GAChE,MAAO,MAAK,gBAAgB,CAAO,CAE3C,CACA,SAAS,EAAM,CACX,GAAI,CAAC,EAAa,GAAM,CAAE,SAAQ,SAAQ,YAAa,EAAE,KAAK,EAAM,MAAO,SAAS,EAChF,EAAS,GAAG,QAAQ,OAAO,EAAY,CAAE,QAAO,CAAC,EACrD,OAAS,KAAQ,CAAC,KAAK,iBAAkB,KAAK,eAAe,EAAG,CAC5D,GAAM,GAAoB,EAAE,OAAO,EAAM,CAAM,EAC/C,OAAS,KAAoB,GACzB,AAAI,GACA,IAAG,KAAK,GAAG,CAAO,EAClB,EAAU,MAEd,EAAiB,MAAM,CAAE,QAAO,CAAC,EACjC,EAAE,OAAO,EAAM,CAAgB,CAEvC,CACJ,CACA,eAAgB,CACZ,AAAI,CAAC,KAAK,cAAgB,KAAK,sBAAsB,GACjD,MAAK,aAAe,GACpB,GAAG,KAAK,kBAAmB,CAAE,IAAK,2BAA4B,CAAC,EAEvE,CACA,kBAAmB,CACf,AAAI,KAAK,cAAgB,CAAC,KAAK,eAAe,QAC1C,MAAK,aAAe,GACpB,GAAG,KAAK,qBAAsB,CAAE,IAAK,2BAA4B,CAAC,EAE1E,CACA,GAAI,iBAAiB,CACjB,MAAO,MAAK,YAAY,OAAO,AAAC,GAAY,EAAQ,QAAQ,CAAC,CACjE,CACA,uBAAwB,CAEpB,GAAM,GAAS,AAAC,GAAY,EAAQ,KAAQ,EAAQ,kBAAoB,EACxE,MAAO,GAAE,KAAK,KAAK,eAAgB,CAAM,CAC7C,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAoB,CAAC,MAAO,MAAM,EACxC,GAAG,QAAQ,aAAe,KAAmB,CACzC,YAAY,EAAS,CACjB,KAAK,SAAW,CACpB,CACA,gBAAiB,CACb,KAAK,OAAS,KAAK,SAAS,OAAO,qBAAqB,EACxD,GAAI,GAAS,KAAK,SAAS,IACvB,CAAE,UAAW,KAAK,SAChB,EAAkB,GAAG,OAAO,QAAQ,CAAM,EAChD,KAAK,OAAO,OAAO,CAAe,EAClC,EAAS,GAAG,OAAO,SAAS,CAAM,EAC7B,EAAE,SAAS,EAAmB,CAAM,GACrC,GAAS,GAAG,SAAS,WAAW,EAAQ,KAAK,MAAM,GAEvD,KAAK,MAAQ,EAAE,MAAM,SAAS,KAAM,yBAA0B,CAAE,SAAQ,QAAO,CAAC,EAChF,GAAI,GAAc,KAAK,SAAS,YAChC,AAAI,GACA,KAAK,MAAM,aAAa,UAAW,CAAW,EAElD,GAAI,GAAW,EACf,AAAK,GAAY,KAAK,SAAS,UAAU,IAAO,GAAY,KAAK,SAAS,UAAU,IAChF,KAAK,OAAO,IAAI,EAAW,CAAS,EAExC,EAAE,KAAK,KAAK,OAAO,QAAQ,EAAG,KAAK,UAAU,KAAK,IAAI,CAAC,EACvD,GAAG,QAAQ,WAAW,KAAK,KAAK,CACpC,CACA,UAAU,EAAO,CACb,EAAE,MAAM,KAAK,MAAO,qBAAsB,CAAK,CACnD,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAA2B,oCAC3B,EAAyB,sBACzB,EAAI,GAAG,KACb,GAAG,QAAQ,YAAe,GAAK,KAAkB,CACzC,YAAY,EAAS,CACjB,KAAK,SAAW,CACpB,CACA,aAAa,EAAU,CACnB,GAAM,GAAM,KAAK,SAAS,IAC1B,KAAK,QAAU,EAAE,KAAK,KAAK,SAAS,MAAM,EACtC,KAAK,SAAS,SACd,GAAI,QAAU,KAAK,SAAS,SAEhC,EAAI,KAAK,KAAK,WAAW,EAAG,KAAK,SAAS,GAAG,EAC7C,GAAI,GAAc,KAAK,gBAAgB,EACvC,AAAI,GACA,EAAI,iBAAiB,eAAgB,CAAW,EAEpD,OAAS,KAAc,MAAK,SAAS,QAAS,CAC1C,GAAI,GAAc,KAAK,SAAS,QAAQ,GACxC,EAAI,iBAAiB,EAAY,CAAW,CAChD,CACA,OAAO,OAAO,EAAK,CAAQ,EAC3B,EAAI,KAAK,KAAK,YAAY,CAAC,CAC/B,CACA,YAAa,CACT,GAAI,GAAS,KAAK,SAAS,OAC3B,MAAI,MAAK,SAAS,YAAc,CAAC,KAAK,SAAS,uBAAuB,GAClE,GAAS,GAAG,SAAS,WAAW,EAAQ,KAAK,OAAO,GAEjD,CACX,CACA,iBAAkB,CACd,YAAK,iBAAiB,EACf,KAAK,YAChB,CACA,aAAc,CACV,YAAK,iBAAiB,EACf,KAAK,QAChB,CACA,kBAAmB,CACf,KAAK,SAAW,KAAK,SAAS,QAC9B,KAAK,aAAe,KAAK,SAAS,YAC9B,CAAC,KAAK,UAAY,KAAK,SAAS,cAAc,GACzC,MAAK,cACN,MAAK,aAAe,KAAK,QAAQ,iBAAiB,EAAI,EAAyB,GAEnF,AAAI,KAAK,eAAiB,EACtB,MAAK,aAAe,KACpB,KAAK,SAAW,KAAK,QAAQ,WAAW,GAGxC,KAAK,SAAW,KAAK,QAAQ,QAAQ,EAAE,QAAQ,OAAQ,GAAG,EAGtE,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,iBAAkB,GAClB,WAAY,EAChB,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAoB,gDAC1B,GAAG,SAAW,aAAuB,IAAG,MAAO,CAC3C,MAAO,CACH,MAAO,CACH,SACA,MACA,OACA,SACA,UACA,MACA,SACA,QACA,YACA,cACA,eACA,aACA,UACA,cACA,aACA,UACA,WACA,MACJ,CACJ,CACA,UAAW,CACP,MAAO,CACH,QAAS,CAAC,EACV,SAAU,GAAI,KAClB,CACJ,CACA,GAAI,KAAK,CACL,MAAO,CAAC,EAAE,WAAW,KAAK,MAAQ,GAAG,QAAQ,OAAO,KAAM,IAAI,CAClE,CACA,GAAI,OAAO,CACP,MAAO,CAAC,KAAK,IACjB,CACA,OAAO,EAAM,CACT,MAAO,MAAK,QAAQ,IAAS,KAAK,KAAK,kBAAkB,CAAI,CACjE,CACA,GAAI,kBAAkB,CAClB,GAAI,GAAkB,KAAK,OAAO,MAAM,EACxC,MAAO,GAAE,gBAAgB,EAAiB,CAAE,UAAW,GAAI,CAAC,CAChE,CACA,GAAI,cAAc,CACd,MAAO,MAAK,OAAO,cAAc,CACrC,CACA,QAAS,CACL,MAAO,GAAkB,KAAK,KAAK,WAAW,CAClD,CACA,GAAI,UAAU,CACV,GAAI,GAAS,KAAK,OAAO,yBAAyB,GAAK,KAAK,OAAO,qCAAqC,EACxG,MAAO,IAAG,SAAS,kBAAkB,CAAM,CAC/C,CACA,GAAI,eAAe,CACf,GAAI,GAAS,KAAK,OAAO,eAAe,EACxC,GAAI,EACA,MAAO,IAAI,MAAK,CAAM,CAE9B,CACA,GAAI,OAAO,CACP,MAAO,MAAK,OAAO,MAAM,CAC7B,CACA,GAAI,OAAO,CACP,MAAO,MAAK,aAAe,KAAK,MAAM,KAAK,IAAI,CACnD,CACA,GAAI,MAAM,CAEN,MAAO,AADG,IAAI,MACD,KAAK,QACtB,CACA,GAAI,UAAU,CACV,MAAO,MAAK,IAAM,GAAG,QAAQ,OAAO,gBAChC,KAAK,QAAQ,OACrB,CACA,GAAI,cAAc,CACd,MAAO,QAAQ,KAAK,sBAAsB,KAAK,QAAQ,aAC3D,CACA,GAAI,WAAW,CACX,MAAQ,MAAK,MAAQ,KAAK,QAAQ,KAAS,KAAK,SAAW,KAAK,QAAQ,MAC5E,CACA,GAAI,kBAAkB,CAClB,GAAI,CAAC,KAAK,SACN,OACJ,GAAI,GAAe,EAAE,QAAQ,KAAK,QAAS,CACvC,OAAQ,KAAK,OACb,IAAK,KAAK,IACV,WAAY,IAChB,CAAC,EACD,UAAG,MAAM,MAAM,KAAK,QAAS,EAAc,CAAE,MAAO,EAAK,CAAC,EACnD,CACX,CACJ,CAGM,EAEC,IAAM,CAEb,GAAI,GACJ,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,YAAe,GAAK,KAAkB,CACjC,YAAY,CAAE,WAAU,WAAU,UAAS,SAAQ,SAAQ,OAAM,UAAS,SAAS,CAW/E,GAVA,AAAI,EACA,KAAK,eAAe,EAAU,EAAQ,CAAI,EAEzC,AAAI,EACL,KAAK,eAAe,EAAU,EAAQ,CAAI,EAG1C,KAAK,cAAc,GAAW,GAAI,EAAQ,EAAQ,CAAI,EAE1D,KAAK,SAAW,GAAW,CAAC,EACxB,EAAQ,CACR,GAAI,GAAiB,GAAG,SAAS,YAAY,CAAM,EACnD,AAAI,GACA,MAAK,oBAAsB,KAAK,OAAO,CAAc,EAE7D,CACA,KAAK,OAAS,CAClB,CACA,eAAe,EAAO,EAAQ,EAAM,CAChC,GAAI,YAAiB,UACjB,KAAK,UAAY,EACjB,KAAK,gBAAkB,WAElB,EAAE,SAAS,CAAK,EAAG,CACxB,KAAK,gBAAkB,EAAE,mBAAmB,CAAK,EACjD,GAAI,GAAa,AAAC,GAAS,CAAC,EAAE,6BAA6B,CAAI,CAAC,EAC5D,EAAQ,GAAG,SAAS,aAAa,EAAO,CAAE,SAAQ,OAAM,YAAW,CAAC,EACxE,AAAI,EAAM,YAAc,UACpB,KAAK,UAAY,EAAM,GAGvB,KAAK,UAAY,KAAK,mBAAmB,CAAK,CAEtD,KAEI,MAAK,UAAY,KAAK,mBAAmB,CAAK,CAEtD,CACA,eAAe,EAAO,EAAQ,EAAM,CAChC,GAAI,GAAU,EAAE,gBAAgB,GAAG,SAAS,aAAa,EAAO,CAAE,SAAQ,MAAK,CAAC,CAAC,EACjF,KAAK,UAAY,KAAK,mBAAmB,CAAO,CACpD,CACA,cAAc,EAAO,EAAQ,EAAQ,EAAM,CACvC,AAAK,GACD,GAAG,KAAK,iDAAiD,EAC7D,GAAI,GAAmB,EAAE,IAAI,GAAG,SAAS,iBAAiB,CAAM,EAAG,UAAU,EAAE,KAAK,EAChF,EAAQ,GAAG,SAAS,aAAa,EAAO,CAAE,SAAQ,MAAK,CAAC,EACxD,EAAkB,EAAE,mBAAmB,EAAkB,CAAE,QAAS,CAAM,CAAC,EAC/E,KAAK,UAAY,KAAK,mBAAmB,CAAe,CAC5D,CACA,mBAAmB,EAAO,CACtB,EAAQ,EAAE,SAAS,CAAK,EACxB,GAAI,GAAe,SAAS,cAAc,aAAa,EACvD,SAAa,OAAO,GAAG,CAAK,EACrB,CACX,CACA,cAAe,CACX,MAAO,IAAG,SAAS,SAAS,KAAK,UAAU,SAAS,EAAE,CAC1D,CACA,GAAI,QAAQ,CACR,MAAO,MAAK,UAAU,KAAK,aAAa,CAC5C,CACA,UAAW,CACP,GAAI,KAAK,gBACL,MAAO,MAAK,UAAU,IAE9B,CACA,UAAU,EAAI,CACV,GAAI,GAAO,KAAK,SAAS,EACzB,MAAO,IAAQ,EAAG,CAAI,CAC1B,CACA,GAAI,WAAW,CACX,MAAO,MAAK,UAAU,GAAG,QAAQ,YAAY,CACjD,CACA,GAAI,SAAS,CACT,MAAO,MAAK,UAAU,AAAC,GAAS,CAC5B,GAAI,GAAS,GAAG,OAAO,WAAW,CAAI,EACtC,MAAO,GAAE,IAAI,EAAQ,AAAC,GAClB,MAAK,sBAAsB,CAAK,EACpB,KAAK,sBAAsB,CAAK,EAE/C,CACL,CAAC,CACL,CACA,GAAI,OAAO,CACP,GAAI,KAAK,gBACL,MAAO,IAAG,QAAQ,QAAQ,KAAK,SAAS,CAEhD,CACA,cAAc,EAAM,CAChB,MAAO,GAAK,cAAc,OAAO,GAAG,WACxC,CACA,OAAO,EAAU,CAOb,MAAO,AANM,IAAI,IAAG,eAAe,CAC/B,SAAU,EACV,OAAQ,KAAK,oBACb,SAAU,KAAK,UACf,MAAO,KAAK,MAChB,CAAC,EACa,KAAK,CACvB,CACA,YAAY,EAAO,CACf,MAAO,GAAM,OAAO,AAAC,GACV,KAAK,eAAe,CAAI,GAAK,KAAK,iBAAiB,CAAI,CACjE,CACL,CACA,YAAY,EAAO,CACf,MAAO,GAAM,OAAO,AAAC,GAAS,KAAK,cAAc,EAAK,UAAU,CAAC,CACrE,CACA,eAAe,EAAM,CACjB,GAAI,EAAK,WACL,MAAO,GAEX,GAAI,GAAa,KAAK,OAAO,EAAK,QAAQ,EAC1C,GAAI,CAAC,EACD,OAEJ,GAAI,CAAE,eAAgB,EACtB,GAAI,KACA,GAAY,YAAc,EAC1B,EAAY,cAAgB,EAAK,sBACjC,GAAG,KAAK,EAAK,WAAY,EAAa,CAAE,SAAU,EAAK,cAAe,CAAC,EACnE,EAAY,mBAIpB,SAAK,WAAa,EACX,EACX,CACA,iBAAiB,EAAM,CACnB,GAAI,CAAC,EAAK,MACN,KAAM,IAAI,IAAG,WAErB,CACA,yBAAyB,EAAS,CAC9B,GAAI,GAAY,GAAG,SAAS,SAAS,EACrC,GAAG,OAAO,eAAe,EAAS,AAAC,GAAW,CAAC,KAAK,iBAAiB,EAAQ,CAAS,CAAC,CAC3F,CACA,iBAAiB,EAAe,EAAW,CACvC,GAAI,GAAW,GAAG,SAAS,OAAO,WAClC,MAAI,KAAa,IAAQ,KAAK,SAAS,aAAa,SAAS,kBAAkB,EACpE,GAAc,IAAc,EAAc,MAG1C,EAAE,WAAW,EAAU,CAAa,CAEnD,CACA,sBAAsB,EAAS,CAC3B,MAAO,GAAE,aAAa,CAAO,CACjC,CACA,sBAAsB,EAAS,CAC3B,GAAI,KAAK,oBAAqB,UAC1B,OAAS,KAAiB,GAAE,QAAQ,EAAS,qEAAqE,EAAG,CACjH,GAAI,GAAQ,KAAK,sBAAsB,CAAa,EACpD,EAAc,YAAY,CAAK,CACnC,CAER,CACA,sBAAsB,EAAS,CAC3B,GAAG,OAAO,qBAAqB,EAAS,KAAK,SAAS,MAAM,CAChE,CACA,cAAc,EAAS,CACnB,GAAI,KAAK,UAAU,SAAS,CAAO,EAC/B,YAAK,sBAAsB,CAAO,EAClC,KAAK,yBAAyB,CAAO,EACrC,EAAQ,OAAO,EACR,EAEf,CACA,gBAAgB,EAAS,CACrB,KAAK,sBAAsB,CAAO,CACtC,CACJ,EAEI,EAAE,cAAc,EAAG,UAAW,CAC1B,SAAU,EACd,CAAC,EAEL,EAGE,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,QACP,EAAI,GAAG,KACb,GAAG,aAAe,KAAmB,CACjC,YAAY,EAAS,EAAU,CAAC,EAAG,CAC/B,KAAK,SAAW,EAChB,KAAK,UAAY,EAAE,IAAI,EAAQ,QAAQ,GAAK,GAAG,SAAS,IAAI,KAAK,QAAQ,EACzE,KAAK,mBAAqB,GAAG,MAAM,IAAI,KAAK,SAAS,EACrD,KAAK,UAAY,EAAQ,gBAAkB,EAAQ,UAAY,UAC/D,GAAM,GAAiB,GAAG,SAAS,OACnC,KAAK,MAAQ,EAAQ,MAAQ,EAAQ,YAAc,EAAe,WAClE,KAAK,SAAW,EAAQ,SAAW,EAAQ,eAAiB,EAAe,cAC3E,KAAK,KAAO,EAAQ,KAAO,EAAQ,WAAa,EAAe,UAC/D,KAAK,KAAO,EAAQ,KAAO,EAAQ,WAAa,EAAe,UAC/D,KAAK,wBAA0B,EAAe,SAAS,mBAAmB,EAC1E,KAAK,2BAA6B,EAAe,SAAS,sBAAsB,CACpF,CACA,OAAQ,CACJ,GAAM,GAAe,KAAK,iBAAiB,KAAK,SAAS,EACnD,EAAc,GAAG,KAAK,YAAY,KAAK,QAAQ,EACrD,GAAI,KAAK,KAAM,CACX,GAAM,GAAY,EAAE,WAAW,KAAK,KAAM,KAAK,QAAQ,EACvD,EAAY,OAAS,KAAK,IAAI,EAAY,OAAQ,CAAS,CAC/D,CACA,EAAY,KAAK,KAAK,QAAQ,EAC9B,KAAK,uBAAuB,CAAY,EACpC,EAAa,OAAS,GACtB,GAAG,KAAK,8BAA8B,EAE1C,GAAM,GAAoB,KAAK,UAAU,UACrC,EAAe,EACnB,AAAI,KAAK,MAAS,EAAY,OAAS,EAAa,OAEhD,GADa,EAAY,IAAM,EAAa,IAG3C,AAAI,EAAY,IAAM,EAAa,IACpC,GAAiB,EAAa,IAAM,EAAY,IAE3C,EAAY,OAAS,EAAa,QACvC,IAAiB,EAAY,OAAS,EAAa,QAInD,EAAE,SAAS,KAAK,KAAK,GAAM,EAAe,KAAK,OAAW,EAAY,IAAO,GAAM,EAAa,QAChG,GAAe,GAEf,IAAiB,GACjB,KAAK,UAAU,SAAS,CAAE,IAAK,EAAc,SAAU,KAAK,SAAU,CAAC,CAE/E,CACA,kBAAmB,CACf,MAAI,IAAG,SAAS,OAAO,KAAK,SAAS,EAC1B,GAAI,IAAG,KAAK,CACf,KAAM,EACN,IAAK,EACL,MAAO,GAAG,SAAS,UAAU,EAC7B,OAAQ,GAAG,SAAS,WAAW,CACnC,CAAC,EAGM,GAAG,KAAK,YAAY,KAAK,SAAS,CAEjD,CACA,yBAAyB,EAAU,CAC/B,GAAI,GAAW,GAAG,SAAS,IAAI,EAAU,CAAE,MAAO,KAAK,kBAAmB,CAAC,EAC3E,SAAW,EAAE,OAAO,EAAU,EAAE,SAAS,EAClC,EAAE,IAAI,EAAU,AAAC,GAChB,EAAE,MAAM,EAAS,UAAU,IAAM,SAC1B,GAAG,KAAK,mBAAmB,CAAO,EAGlC,GAAG,KAAK,YAAY,CAAO,CAEzC,CACL,CACA,uBAAuB,EAAc,CACjC,OAAS,KAAmB,MAAK,yBAAyB,KAAK,uBAAuB,EAAG,CACrF,GAAI,GAAO,EAAgB,OAAS,EAAa,IACjD,AAAI,EAAO,GACP,GAAa,KAAO,EACpB,EAAa,QAAU,EAE/B,CACA,OAAS,KAAmB,MAAK,yBAAyB,KAAK,0BAA0B,EAAG,CACxF,GAAI,GAAO,EAAa,OAAS,EAAgB,IACjD,AAAI,EAAO,GACP,GAAa,QAAU,EAE/B,CACJ,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,SAAW,KAAe,CACzB,YAAY,EAAU,EAAmB,EAAU,CAAC,EAAG,CACnD,KAAK,SAAW,CAAC,EACjB,GAAI,GAA6B,GAAqB,CAAC,SAAS,SAAS,CAAiB,EAC1F,AAAI,CAAC,GAA8B,CAAC,EAAQ,YACxC,KAAK,SAAS,KAAK,GAAG,SAAS,eAAe,EAElD,KAAK,cAAgB,GAA8B,EAAQ,QAAU,OAAS,GAAG,MAAM,QAAU,EACjG,GAAI,GACJ,GAAI,KAAK,cACL,EAAoB,GAAG,MAAM,SAE5B,CAGD,GAFA,EAAQ,QAAU,EAAE,SAAS,EAAmB,EAAE,SAAS,EAC3D,KAAK,QAAU,GAAG,MAAM,OAAO,CAAO,EAClC,CAAC,KAAK,QAAQ,OACd,KAAM,IAAI,IAAG,YAAY,CAAC,oBAAqB,EAAQ,KAAK,CAAC,EACjE,KAAK,SAAS,KAAK,AAAC,GAAU,EAAE,KAAK,KAAK,QAAS,AAAC,GAAU,EAAM,SAAS,CAAK,CAAC,CAAC,EACpF,EAAoB,KAAK,QAAQ,EACrC,CACA,KAAK,WAAa,GAAG,SAAS,cAAc,EAAU,CAAE,GAAG,EAAS,MAAO,CAAkB,CAAC,EAC9F,KAAK,eAAiB,KAAK,WAAW,KAAK,GAAK,YACpD,CACA,QAAQ,EAAS,CACb,MAAO,GAAE,mBAAmB,EAAS,KAAK,cAAc,GAAK,KAAK,cAAc,CAAO,CAC3F,CACA,QAAQ,EAAS,CACb,MAAO,MAAK,WAAW,EAAQ,QAAQ,KAAK,cAAc,CAAC,CAC/D,CACA,YAAY,EAAO,SAAU,CACzB,MAAO,MAAK,YAAY,EAAK,iBAAiB,KAAK,cAAc,CAAC,CACtE,CACA,gBAAgB,EAAM,CAClB,MAAI,MAAK,cACL,KAAS,SACF,KAAK,oBAAoB,AAAC,GAAa,EAAK,iBAAiB,CAAQ,CAAC,GAGtE,EAAE,WAAW,KAAK,QAAS,AAAC,GACxB,KAAK,oBAAoB,AAAC,GAAa,EAAE,QAAQ,EAAM,QAAS,CAAQ,CAAC,CACnF,CAET,CACA,QAAQ,EAAM,CACV,MAAO,MAAK,YAAY,EAAE,QAAQ,EAAM,KAAK,cAAc,CAAC,CAChE,CACA,oBAAoB,EAAI,CACpB,MAAO,GAAE,WAAW,KAAK,WAAY,AAAC,GAC3B,KAAK,YAAY,EAAG,CAAQ,CAAC,EAAE,EACzC,CACL,CACA,cAAc,EAAS,CACnB,MAAO,IAAW,EAAE,MAAM,KAAK,SAAU,AAAC,GAAW,EAAO,CAAO,CAAC,CACxE,CACA,WAAW,EAAS,CAChB,MAAO,GAAE,SAAS,EAAS,KAAK,cAAc,KAAK,IAAI,CAAC,CAC5D,CACA,YAAY,EAAU,CAClB,MAAO,GAAE,OAAO,EAAU,KAAK,cAAc,KAAK,IAAI,CAAC,CAC3D,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,OAAS,KAAa,CACrB,YAAY,EAAS,CACjB,GAAG,QAAQ,sBAAsB,CAAO,EACxC,KAAK,QAAU,EAAQ,OACvB,KAAK,OAAS,EAAQ,MACtB,KAAK,UAAY,EAAQ,SACzB,KAAK,WAAc,KAAK,YAAc,OAAW,KAAK,YAAc,SAAY,aAAe,WAC/F,KAAK,UAAY,GAAG,SAAS,IAAI,KAAK,OAAO,EAC7C,KAAK,OAAS,KAAK,YAAc,EAAE,KAAO,SAAS,KAAO,KAAK,UAC/D,KAAK,cAAgB,CAAC,KAAK,UAAU,SAAS,KAAK,QAAQ,YAAY,CAC3E,CACA,MAAM,EAAS,CACX,KAAK,SAAW,EAChB,KAAK,SAAS,MAAM,SAAW,WAC/B,KAAK,WAAW,EAAG,CAAC,EACpB,KAAK,KAAK,EACV,KAAK,yBAAyB,IAAI,CACtC,CACA,MAAO,CACH,KAAK,yBAAyB,KAAK,CACvC,CACA,yBAAyB,EAAI,CACzB,GAAI,GAAiB,KAAK,cAAc,KAAK,IAAI,EACjD,GAAG,GAAI,OAAQ,SAAU,CAAc,EACnC,KAAK,eACL,GAAG,GAAI,KAAK,UAAW,SAAU,CAAc,CAEvD,CACA,eAAgB,CACZ,oBAAa,KAAK,SAAS,EACpB,KAAK,UAAY,EAAE,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,CACvD,CACA,YAAa,CACT,MAAO,CAAC,KAAK,OAAO,aAAe,CAAC,KAAK,QAAQ,WACrD,CACA,MAAO,CACH,GAAM,GAAa,KAAK,SAAS,sBAAsB,EACjD,EAAgB,CAClB,IAAK,EAAE,YAAY,KAAK,SAAU,YAAY,EAC9C,MAAO,EAAE,YAAY,KAAK,SAAU,cAAc,EAClD,OAAQ,EAAE,YAAY,KAAK,SAAU,eAAe,EACpD,KAAM,EAAE,YAAY,KAAK,SAAU,aAAa,CACpD,EACM,EAAY,KAAK,QAAQ,sBAAsB,EACjD,EACA,EACJ,OAAQ,KAAK,gBACJ,aAAc,CACf,OAAQ,KAAK,eACJ,MACD,EAAM,EAAU,IAAM,EAAc,OAAS,EAAW,OACxD,UACC,SACD,EAAM,EAAU,IAAM,EAAU,OAAS,EAAc,IACvD,MAER,OAAQ,KAAK,YACJ,OACD,EAAO,EAAU,KAAO,EAAc,KACtC,UACC,SACD,EAAO,EAAU,KAAQ,GAAO,GAAU,MAAQ,EAAW,OAC7D,UACC,QACD,EAAQ,EAAU,KAAO,EAAU,MAAS,EAAW,MAAQ,EAAc,MAC7E,MAER,KACJ,KACK,WAAY,CACb,OAAQ,KAAK,YACJ,MACD,EAAM,EAAU,IAAM,EAAc,IACpC,UACC,SACD,EAAM,EAAU,IAAO,GAAO,GAAU,OAAS,EAAW,QAC5D,UACC,SACD,EAAO,EAAU,IAAM,EAAU,OAAU,EAAW,OAAS,EAAc,OAC7E,MAER,OAAQ,KAAK,eACJ,OACD,EAAO,EAAU,KAAO,EAAc,MAAQ,EAAW,MACzD,UACC,QACD,EAAO,EAAU,KAAO,EAAU,MAAQ,EAAc,KACxD,MAER,KACJ,EAEJ,AAAI,EAAE,UAAU,CAAI,GAAK,EAAE,UAAU,CAAG,EACpC,KAAK,QAAQ,EAAM,CAAG,EAGtB,GAAG,KAAK,iCAAkC,KAAK,qBAAqB,CAAC,CAE7E,CACA,sBAAuB,CACnB,MAAO,CAAE,SAAU,KAAK,UAAW,MAAO,KAAK,MAAO,CAC1D,CACA,QAAQ,EAAY,EAAW,CAC3B,GAAM,GAAa,KAAK,SAAS,sBAAsB,EACvD,KAAK,WAAY,EAAa,EAAW,KAAQ,KAAK,WAAa,EAAY,EAAW,IAAO,KAAK,SAAS,CACnH,CACA,WAAW,EAAM,EAAK,CAClB,KAAK,WAAa,EAClB,KAAK,UAAY,EACjB,EAAE,SAAS,KAAK,SAAU,CAAE,OAAM,KAAI,EAAG,IAAI,CACjD,CACJ,CAGM,EAEC,IAAM,CAEb,GAAM,GAAI,GAAG,KACb,GAAG,WAAa,KAAiB,CAC7B,YAAY,EAAa,CACrB,KAAK,QAAU,CAAC,EAChB,GAAM,GAAe,CAAC,EAChB,EAAe,CAAC,EACtB,OAAS,KAAW,GAAE,gBAAgB,CAAW,EAC7C,AAAI,EAAQ,KAAO,IACf,EAAa,KAAK,EAAQ,UAAU,CAAC,CAAC,EAGtC,EAAa,KAAK,CAAO,EAGjC,KAAK,gBAAkB,KAAK,aAAa,EAAc,EAAI,EAC3D,KAAK,gBAAkB,KAAK,aAAa,EAAc,EAAK,CAChE,CACA,aAAa,EAAM,EAAS,CACxB,GAAI,CAAC,EAAK,OACN,OAEJ,EAAO,EAAE,QAAQ,EAAM,EAAE,uBAAuB,EAChD,EAAO,EAAK,IAAI,EAAE,YAAY,EAC9B,GAAI,GAAS,EAAK,KAAK,GAAG,EAC1B,SAAS,EAAO,QAAQ,QAAS,KAAK,EACtC,EAAS,EAAO,QAAQ,0BAA2B,CAAC,EAAO,EAAM,IACzD,IAAS,MACL,IACA,KAAK,QAAQ,KAAK,CAAE,OAAM,KAAM,MAAO,CAAC,EAErC,UAGH,IACA,KAAK,QAAQ,KAAK,CAAE,OAAM,KAAM,MAAO,CAAC,EAErC,YAEd,EACM,GAAI,QAAO,OAAS,EAAS,IAAI,CAC5C,CACA,KAAK,EAAK,EAAc,GAAM,CAC1B,MAAI,IACA,GAAM,EAAE,aAAa,CAAG,GAErB,KAAK,gBAAgB,KAAK,CAAG,GAAK,CAAC,KAAK,YAAY,CAAG,CAClE,CACA,UAAU,EAAK,EAAc,GAAM,CAC/B,AAAI,GACA,GAAM,EAAE,aAAa,CAAG,GAE5B,GAAI,GAAQ,KAAK,gBAAgB,KAAK,CAAG,EACzC,GAAI,GAAS,CAAC,KAAK,YAAY,CAAG,EAAG,CACjC,GAAM,GAAa,CAAC,EACpB,YAAK,QAAQ,QAAQ,CAAC,EAAO,IAAe,CACxC,GAAI,GAAQ,EAAM,EAAa,GAC/B,GAAI,EACA,MAAO,GAAW,EAAM,MAAQ,EAAM,KAAK,CAAK,CAExD,CAAC,EACM,CACX,CACJ,CACA,YAAY,EAAK,CACb,MAAO,MAAK,iBAAiB,KAAK,CAAG,CACzC,CACJ,CAGM,EAEC,IAAM,CAEb,GAAG,UAAa,UAAY,CACxB,GAAI,GAAa,UACjB,YAAqB,CACjB,GAAG,KAAK,qBAAsB,CAAE,IAAK,EAAM,CAAC,CAChD,CACA,WAAc,CAAE,OAAO,UAAa,CAAC,EAAG,CACpC,GAAI,IAAe,cAAe,CAC9B,QAAQ,MAAM,2BAA2B,EACzC,MACJ,CACA,GAAI,GAAQ,EAAa,EACzB,AAAK,EAOD,QAAQ,MAAM,yBAA0B,CAAK,EAN7C,GAAa,UACb,GAAG,KAAK,oBAAqB,CAAE,OAAM,IAAK,EAAM,CAAC,EACjD,EAAa,SACb,GAAG,KAAK,sBAAuB,CAAE,OAAM,IAAK,EAAM,CAAC,EAK3D,CACA,YAA0B,CAOtB,GANI,SAAS,eAAe,OAGxB,SAAS,cAAc,mCAAmC,GAG1D,SAAS,aAAe,WACxB,MAAO,EAEf,CACA,YAAoB,CAChB,GAAG,KAAK,sBAAuB,CAAE,IAAK,EAAM,CAAC,EAC7C,AAAI,EAAe,EACf,QAAQ,MAAM,iDAAiD,EAG/D,SAAS,iBAAiB,mBAAoB,IAAM,EAAK,CAAE,KAAM,MAAO,CAAC,CAAC,EAE9E,EAAa,aACjB,CACA,YAA0B,CACtB,GAAI,IAAe,cACf,KAAM,IAAI,OAAM,iDAAiD,EAErE,EAAa,SACjB,CACA,YAAyB,CACrB,EAAa,aACjB,CACA,YAAuB,CACnB,MAAO,CAAC,EAAa,CACzB,CACA,YAAwB,CACpB,OAAS,KAAW,CAAC,UAAW,YAAa,WAAY,aAAa,EAClE,GAAI,CAAC,OAAO,GACR,MAAO,+BAA+B,QAG9C,GAAI,SAAS,aAAe,aACxB,MAAO,+CAEX,OAAS,KAAY,CAAC,SAAU,SAAS,EACrC,GAAI,CAAC,IAAI,SAAS,YAAY,IAAW,EACrC,MAAO,+BAA+B,YAGlD,CACA,MAAO,CACH,WACA,OACA,iBACA,gBACA,MAAO,EACP,GAAI,UAAU,CAAE,MAAO,KAAe,SAAW,EACjD,GAAI,SAAS,CAAE,MAAO,KAAe,QAAU,EAC/C,GAAI,aAAa,CAAE,MAAO,KAAe,WAAa,IAAe,QAAU,EAC/E,aACJ,CACJ,EAAG,EACH,GAAG,KAAO,GAAG,UAAU,IAGjB,EAEC,IAAM,CAEb,GAAG,MAAS,UAAY,CACpB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,YAAiB,CACb,OAAS,KAAiB,CAAC,OAAQ,SAAU,EAAE,KAAM,SAAS,IAAI,EAC9D,OAAS,KAAY,IAAG,cAAc,cAAc,CAAa,EAC7D,EAAS,OAAO,CAG5B,CACA,cAAe,EAAM,CACjB,MAAO,GAAmB,CAAI,EAAE,KAAK,CACzC,CACA,WAAoB,EAAU,EAAW,GAAU,CAC/C,GAAI,GAAQ,AAAC,GAAU,EAAM,OAAO,SAAS,CAAQ,EACjD,EAAc,GAAG,GAAG,EAAW,CAAE,OAAM,EAAG,EAAQ,EACtD,UAAG,WAAW,EAAU,CAAW,EAC5B,CACX,CACA,cAAgB,EAAM,CAClB,MAAO,GAAmB,CAAI,EAAE,OAAO,CAC3C,CACA,WAA4B,EAAM,EAAS,CACvC,MAAO,IAAG,mBAAmB,aAAa,EAAM,CAAO,CAC3D,CACA,WAAsB,EAAM,CACxB,MAAO,IAAG,aAAa,aAAa,CAAI,CAC5C,CACA,cAAiB,EAAM,CACnB,MAAO,GAAa,CAAI,EAAE,KAAK,CACnC,CACA,cAAkB,EAAM,CACpB,GAAM,GAAQ,EAAE,eAAe,CAAI,EAC7B,GAAO,EAAK,IAAM,EAAM,MAAQ,GAAG,KAAK,oBAAoB,EAC5D,EAAQ,GAAI,OAAM,GAAM,CAAE,QAAS,GAAM,WAAY,EAAK,CAAC,EACjE,cAAO,OAAO,EAAO,EAAE,KAAK,EAAO,CAAC,OAAQ,QAAQ,CAAC,CAAC,EAC/C,CACX,CACA,cAA0B,EAAM,CAC5B,MAAO,GAAa,CAAI,EAAE,cAAc,CAC5C,CACA,WAAkB,EAAU,CACxB,MAAO,GAAG,UAAW,SAAU,EAAO,CAClC,GAAI,EAAM,MAAQ,SACd,MAAO,GAAS,CAAK,CAE7B,CAAC,CACL,CACA,WAAc,EAAO,EAAU,CAAC,EAAG,CAC/B,AAAI,EAAQ,KACR,GAAG,IAAI,UAAU,CAAK,EAC1B,EAAM,yBAAyB,EAC/B,EAAM,eAAe,CACzB,CACA,GAAM,GAAe,CAAC,UAAW,WAAY,UAAW,QAAQ,EAChE,WAAoB,EAAO,CACvB,MAAQ,GAAM,OAAS,GAAM,EAAE,KAAK,EAAc,AAAC,GAAa,EAAM,EAAS,CACnF,CACA,YAA0B,EAAO,CAC7B,MAAO,GAAE,UAAU,EAAM,OAAO,CACpC,CACA,YAAc,EAAe,EAAS,GAAW,CAAC,EAAG,CACjD,GAAM,GAAW,EAAM,EAAS,EAAE,KAAK,EAAe,EAAQ,CAAC,EAC/D,SAAS,cAAgB,EACzB,CAAC,kBAAmB,2BAA4B,gBAAgB,EAAE,QAAQ,SAAU,EAAK,CACrF,GAAM,GAAiB,EAAS,GAChC,MAAO,GAAS,GAAO,UAAY,CAC/B,SAAc,GAAK,EACZ,EAAe,KAAK,CAAQ,CACvC,CACJ,CAAC,EACG,EAAc,kBACd,EAAS,eAAe,EAErB,CACX,CACA,WAAyB,EAAO,EAAS,CACrC,GAAI,EAAW,CAAK,EAChB,OAEJ,GAAM,IAAY,EAAE,KAAK,EAAS,SAAS,EACrC,EAAa,EAAE,SAAS,EAAS,eAAe,EAChD,EAAc,GAAK,EAAO,EAAS,EACzC,OAAO,OAAO,EAAa,CAAU,EACrC,GAAG,KAAK,EAAS,CAAW,CAChC,CACA,EAAG,WAAY,YAAa,CAAe,EAC3C,GAAI,IAAe,CAAC,SAAS,EAC7B,YAA0B,CACtB,MAAO,GAAE,KAAK,EAAY,CAC9B,CACA,WAA4B,EAAa,CACrC,GAAa,KAAK,CAAW,EAC7B,WAAW,IAAM,GAAa,IAAI,CAAC,CACvC,CACA,SAAG,gBAAiB,CAAE,QAAS,EAAK,EAAG,IAAM,EAAmB,KAAK,CAAC,EACtE,EAAG,wBAAyB,CAAE,QAAS,EAAK,EAAG,IAAM,EAAmB,SAAS,CAAC,EAClF,EAAG,qBAAsB,CAAK,EACvB,CACH,KACA,aACA,MACA,QACA,OACA,gBACA,WACA,OACA,aACA,oBACA,QACA,eACA,GAAI,cAAc,CAAE,MAAO,GAAe,CAAG,CACjD,CACJ,EAAG,EACH,GAAG,GAAK,GAAG,MAAM,GACjB,GAAG,IAAM,GAAG,MAAM,IAClB,GAAG,KAAO,GAAG,MAAM,IAGb,EAEC,IAAM,CAEb,GAAG,SAAY,UAAY,CACvB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAY,SAAU,EAAO,CAC/B,GAAM,GAAS,EAAM,QAAQ,cAAe,AAAC,GAAS,IAAM,EAAK,YAAY,CAAC,EAC9E,MAAO,OAAS,CACpB,EACM,EAAgB,SAAU,EAAK,EAAa,EAAU,EAAE,SAAU,CACpE,GAAI,GAAQ,EAAI,kBAAkB,EAAU,CAAW,CAAC,EACxD,GAAI,EACA,MAAO,GAAQ,CAAK,CAE5B,EACA,WAAuB,EAAK,CACxB,MAAO,GAAc,EAAK,QAAQ,CACtC,CACA,WAA+B,EAAO,CAClC,MAAI,KAAU,QACH,GAGA,CAEf,CACA,WAA2B,EAAK,CAC5B,MAAO,GAAc,EAAK,aAAc,CAAqB,CACjE,CACA,WAA4B,EAAK,CAC7B,MAAO,GAAc,EAAK,aAAa,GAAK,GAAG,QAAQ,oBAAoB,CAAG,CAClF,CACA,WAAwB,EAAK,CACzB,MAAO,GAAc,EAAK,UAAW,EAAE,gBAAgB,CAC3D,CACA,WAAuB,EAAK,CACxB,MAAO,GAAc,EAAK,SAAU,EAAE,eAAe,CACzD,CACA,WAAsB,EAAK,CACvB,MAAO,IAAG,QAAQ,eAAe,CAAG,GAAK,EAAc,EAAK,QAAS,EAAE,gBAAgB,CAC3F,CACA,WAA2B,EAAK,CAC5B,MAAO,GAAc,EAAK,SAAU,EAAE,gBAAgB,CAC1D,CACA,WAA0B,EAAK,CAC3B,MAAO,GAAc,EAAK,YAAa,EAAE,gBAAgB,CAC7D,CACA,WAA4B,EAAK,CAC7B,MAAO,GAAc,EAAK,cAAe,EAAE,gBAAgB,CAC/D,CACA,WAA6B,EAAK,CAC9B,MAAO,GAAc,EAAK,eAAgB,EAAE,gBAAgB,CAChE,CACA,GAAM,IAAuB,EAAE,QAAQ,UAAY,CAC/C,MAAO,GAAE,gBAAgB,GAAG,QAAQ,UAAU,YAAY,CAAC,CAC/D,CAAC,EACD,YAAyB,EAAK,CAC1B,GAAI,GAAW,EAAc,EAAK,UAAU,GAAK,EAAI,YACrD,GAAI,EACA,MAAO,GAAE,aAAa,CAAQ,CAEtC,CACA,GAAM,GAAS,GAAI,IAAG,OAAO,IAAO,EAChC,YAAa,UACb,WAAY,CAAE,MAAO,GAAE,YAAY,YAAY,CAAG,EAClD,WAAY,CAAE,MAAO,GAAE,YAAY,YAAY,CAAG,EAClD,UAAW,CAAE,MAAO,GAAE,YAAY,WAAW,CAAG,EAChD,WAAY,eACZ,cAAe,IACnB,EAAE,EACF,aAAsB,CAClB,MAAO,GAAE,WAAW,EAAO,UAAU,CACzC,CACA,YAAqB,CACjB,MAAO,GAAE,WAAW,EAAO,SAAS,CACxC,CACA,YAAqB,CACjB,MAAO,GAAE,WAAW,EAAO,SAAS,CACxC,CACA,YAAoB,CAChB,MAAO,GAAE,WAAW,EAAO,QAAQ,CACvC,CACA,GAAM,GAAgB,mBACtB,YAAoB,EAAS,CACzB,GAAI,GAAU,EAAQ,SAAS,CAAa,EAC5C,MAAO,GAAE,IAAI,EAAS,GAAG,CAC7B,CACA,WAA2B,EAAW,CAClC,GAAI,GAAU,CAAC,EACf,GAAI,EAAW,CACX,GAAI,GAAe,EAAU,MAAM,SAAS,EAC5C,OAAS,KAAe,GAAc,CAClC,GAAI,GAAY,EAAY,MAAM,yBAAyB,IAAI,GAC/D,AAAI,GACA,GAAQ,GAAa,CACjB,YAAa,EACb,OAAQ,GAAW,CAAW,CAClC,EAER,CACJ,CACA,MAAO,GAAQ,QAAU,EAAQ,SAAW,CAAC,CACjD,CACA,WAAoB,EAAQ,EAAQ,CAChC,SAAO,IAAI,EAAO,YAAa,CAAM,EAC9B,MACX,CACA,MAAO,CACH,SACA,mBACA,eACA,gBACA,gBACA,mBACA,qBACA,iBACA,sBACA,oBACA,qBACA,oBACA,cACA,YACA,YACA,WACA,wBACA,YACA,aACA,mBACJ,CACJ,EAAG,CAGG,EAEC,IAAM,CAEb,GAAG,IAAO,UAAY,CAClB,GAAM,GAAI,GAAG,KACP,EAAS,GAAI,IAAG,UACtB,cAA4B,EAAM,CAC9B,AAAI,EAAO,SACP,EAAc,MAAO,GAAG,CAAI,CAEpC,CACA,GAAM,GAAc,IAAI,IAAS,EAAc,OAAQ,GAAG,CAAI,EACxD,EAAe,IAAI,IAAS,EAAc,QAAS,GAAG,CAAI,EAChE,WAAuB,EAAQ,EAAQ,KAAY,GAAM,CACrD,EAAoB,EAAQ,EAAQ,GAAI,EAAS,GAAG,EAAI,CAC5D,CACA,WAA6B,EAAQ,EAAQ,EAAc,MAAY,GAAM,CACzE,AAAI,IACA,CAAI,EAAO,OACP,QAAQ,GAAQ,KAAK,OAAY,KAAW,0HAA4H,EAAc,GAAI,GAAG,EAAI,EAGjM,QAAQ,GAAQ,IAAI,MAAW,EAAE,QAAQ,GAAS,GAAG,EAAI,GAAG,EAGxE,CACA,GAAI,GACJ,WAAwB,EAAO,CAC3B,GAAI,EAAO,SAAW,IAAyB,EAAO,CAClD,EAAuB,EACvB,GAAI,GAAgB,EAAM,eAAiB,EACvC,EAAQ,UACZ,EAAoB,MAAO,EAAc,KAAM,+BAA+B,wBAA4B,IAAS,oBAAqB,EAAc,MAAM,CAChK,CACJ,CACA,YAAuB,CACnB,GAAI,CAAC,EAAO,OACR,OAEJ,GAAM,GAAO;AAAA,mCAC2B,GAAG;AAAA;AAAA;AAAA;AAAA,EAGvC,EAAO,GACX,AAAK,GAAG,QAAQ,QACZ,IAAQ;AAAA;AAAA,GAEZ,AAAI,EAAO,QACP,GAAQ,+DAGR,GAAQ,6DAEZ,GAAM,GAAQ,iBACd,AAAI,EAAO,OACP,QAAQ,IAAI,KAAO,EAAO,KAAO,EAAM,0BAA4B,EAAO,CAAK,EAG/E,QAAQ,IAAI,EAAO,CAAI,CAE/B,CACA,GAAG,GAAG,oBAAqB,CAAW,EACtC,YAAkB,CACd,EAAO,QAAU,EACrB,CACA,YAAmB,CACf,EAAO,QAAU,EACrB,CACA,MAAO,CACH,KAAM,EACN,UAAW,EACX,MAAO,EACP,KAAM,EACN,SACA,SACA,SACJ,CACJ,EAAG,EACH,GAAG,KAAO,GAAG,IAAI,KACjB,GAAG,KAAO,GAAG,IAAI,IAGX,EAEC,IAAM,CAEb,GAAG,OAAU,UAAY,CACrB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,eAAgB,CACZ,uBACA,cACA,YACJ,EACA,iBAAkB,CACd,kBACJ,EACA,oBAAqB,CACjB,WACA,aACA,eACA,eACA,iBACA,kBACA,eACA,iBACA,iBACA,cACA,eACJ,EACA,gBAAiB,CACb,qBACA,iCACA,wBACA,0BACJ,EACA,kBAAmB,CACf,oCACJ,CACJ,EAAE,EACI,EAA0B,CAC5B,YAAa,KACb,iBAAkB,KAClB,cAAe,KACf,aAAc,KACd,aAAc,KACd,aAAc,KACd,eAAgB,KAChB,YAAa,KACb,eAAgB,KAChB,cAAe,KACf,gBAAiB,KACjB,iBAAkB,KAClB,YAAa,UACjB,EACI,EAAsB,CAAC,EACvB,EAAmB,CAAC,EACxB,cAA6B,EAAM,CAC/B,EAAkB,CAAI,CAC1B,CACA,cAA0B,EAAM,CAC5B,EAAkB,EAAM,CAAE,MAAO,EAAK,CAAC,CAC3C,CACA,cAAiC,EAAM,CACnC,GAAI,CAAC,EAAM,EAAS,GAAiB,EAAmB,CAAI,EACxD,EAAW,IAAI,KACf,CAAE,iBAAiB,EASvB,EAAkB,CAAC,EAAU,EARd,AAAC,GAAY,CACxB,GAAI,GAAQ,EAAE,oBAAoB,EAAS,CAAI,EAC/C,GAAI,IAAU,GAEd,MAAI,GAAE,UAAU,EAAY,GAAK,IAAU,IACvC,GAAQ,IACL,EAAc,EAAS,CAAK,CACvC,CAC8C,CAAC,CACnD,CACA,WAAmC,EAAe,CAC9C,EAAgB,EAAE,WAAW,CAAa,EAC1C,OAAS,KAAU,GACf,GAAI,EAAc,QAAQ,CAAM,GAAK,EACjC,MAAO,GAAwB,GAGvC,GAAG,KAAK,4CAA6C,CAAa,CACtE,CACA,WAA2B,EAAM,EAAY,CAAC,EAAG,CAC7C,GAAI,GAAY,EAAe,EAAM,CAAS,EAC9C,AAAI,EAAU,MACN,IAAG,UAAU,SACb,GAAU,WAAa,EAA0B,EAAU,QAAQ,GAEvE,EAAgB,EAAkB,CAAS,GAG3C,EAAgB,EAAqB,CAAS,CAEtD,CACA,GAAM,GAAqB,SAAU,EAAM,CACvC,MAAO,GAAE,KAAK,EAAM,MAAO,UAAW,UAAU,CACpD,EACA,WAAwB,EAAM,EAAW,CACrC,GAAI,CAAC,EAAU,EAAS,GAAY,EAAmB,CAAI,EAC3D,SAAU,EAAE,QAAQ,EAAS,CACzB,WACA,UAAW,GAAG,UAAU,QACxB,SAAU,EACV,MAAO,GACP,MAAO,EACX,CAAC,EACM,OAAO,OAAO,EAAU,EAAS,CAAS,CACrD,CACA,WAAyB,EAAO,EAAa,CACzC,GAAI,GACA,EAAQ,EACZ,KAAQ,GAAmB,EAAM,KAAY,EAAiB,UAAY,EAAY,UAClF,GAAS,EAGb,GADA,EAAM,OAAO,EAAO,EAAG,CAAW,EAC9B,GAAG,UAAU,OACb,GAAI,EAAY,WAAa,EACzB,OAAS,KAAS,IAAG,MAAM,MACvB,EAAQ,EAAM,QAAS,CAAE,QAAO,UAAW,CAAC,CAAW,CAAE,CAAC,MAI9D,IAAG,KAAK,gBAAiB,gGAAiG,EAAY,QAAQ,EAGtJ,MAAO,EACX,CACA,WAAiB,EAAU,EAAS,CAChC,GAAG,KAAK,EAAU,sBAAuB,CAAE,IAAK,EAAM,CAAC,EACvD,GAAI,GAAY,EAAQ,WAAa,EAAiB,OAAO,CAAmB,EAEhF,MAAO,AADM,IAAI,IAAG,aAAa,EAAU,EAAW,CAAO,EACjD,IAAI,CACpB,CACA,YAA4B,EAAS,EAAO,CACxC,GAAI,GAAM,EAAE,cAAc,CAAK,EAC/B,GAAI,EAAC,EAAI,OAET,GAAI,EAAQ,YAER,AADgB,GAAQ,gBAAkB,GAAwB,CAAO,GAChE,MAAM,CAAG,MAEjB,CACD,GAAG,KAAK,kBAAmB,2DAA4D,CAAO,EAC9F,OAAS,KAAM,GACX,GAAG,MAAM,MAAM,EAAI,CAAO,CAClC,CACJ,CACA,YAAiC,EAAS,CACtC,GAAI,GAAW,EAAE,QAAQ,EACzB,SAAS,EAAE,aAAa,EAAS,cAAc,CAAC,EACzC,CACX,CACA,iBAAqB,EAAS,EAAU,CAAC,EAAG,CACxC,SAAU,GAAG,SAAS,IAAI,EAAS,CAAO,EAC1C,GAAG,KAAK,aAAc,wBAAyB,CAAO,EACtD,KAAM,IAAG,SAAS,OAAO,SAAY,CACjC,GAAI,GAAiB,EAAQ,EAAS,CAAO,EAC7C,GAAG,SAAS,aAAa,CAAO,EAChC,KAAM,EACV,CAAC,EACM,CACX,CACA,YAAe,EAAU,EAAU,CAAC,EAAG,CACnC,GAAI,IAAG,eAAe,EAAU,CAAO,EAAE,IAAI,CACjD,CACA,WAAkB,EAAS,CACvB,SAAU,GAAG,SAAS,IAAI,CAAO,EAC1B,EAAQ,SAAW,EAAU,CAAO,CAC/C,CACA,WAAmB,EAAS,CACxB,GAAI,GAAa,EAAE,SAAS,EAAS,SAAS,GAAK,CAAC,EACpD,MAAK,GAAE,UAAU,CAAU,EAGpB,CACH,GAAG,EAAQ,eACX,GAAG,EAAQ,QACX,GAAG,EACH,GAAG,EAAQ,aACf,EAPW,CAQf,CACA,WAAoB,EAAO,SAAS,KAAM,CACtC,MAAO,GAAK,iBAAiB,EAAO,SAAS,gBAAgB,CAAC,CAClE,CACA,WAAwB,EAAW,EAAe,CAC9C,GAAI,GAAY,EAAW,EACvB,EAAU,EAAE,IAAI,EAAW,WAAW,EAAE,KAAK,EAC7C,EAAU,EAAE,IAAI,EAAW,WAAW,EAAE,KAAK,EACjD,AAAI,IAAY,GACZ,GAAG,MAAM,cAAc,oBAAqB,CAAE,YAAW,YAAW,eAAc,CAAC,CAE3F,CACA,YAAiC,EAAM,EAAQ,IAAM,GAAM,CACvD,OAAS,KAAU,GAAY,CAAI,EAC/B,AAAI,EAAM,CAAM,GACZ,GAAO,KAAO,qBAG1B,CACA,WAAqB,EAAM,EAAiB,GAAI,CAC5C,GAAI,GAAW,EAAO,SAAS,iBAAiB,EAAI,EACpD,MAAO,GAAE,QAAQ,EAAM,CAAQ,CACnC,CACA,WAAkB,EAAO,CACrB,MAAO,GAAO,QAAQ,EAAO,iBAAiB,CAClD,CACA,WAA8B,EAAM,EAAgB,CAChD,GAAI,GAAY,GAAG,SAAS,SAAS,EACrC,GAAI,GAAC,GAAgB,QAAU,CAAC,GAEhC,QAAS,KAAU,GAAY,EAAM,SAAS,EAC1C,AAAI,EAAe,SAAS,EAAO,KAAK,GACpC,GAAO,MAAQ,GAGvB,OAAS,KAAa,GAAO,oBAAqB,CAC9C,GAAI,GAAU,EAAE,QAAQ,EAAM,IAAI,cAAsB,EACxD,OAAS,MAAS,GAAS,CACvB,GAAI,GAAiB,GAAM,aAAa,CAAS,EAC7C,EAAW,GAAG,kBAAkB,WAAW,CAAc,EAC7D,AAAI,EAAe,SAAS,EAAS,KAAK,GACtC,GAAS,MAAQ,EACjB,GAAM,aAAa,EAAW,EAAS,SAAS,CAAC,EAEzD,CACJ,EACJ,CACA,YAAiB,CACb,EAAsB,EAAE,OAAO,EAAqB,WAAW,EAC/D,EAAmB,EAAE,OAAO,EAAkB,WAAW,CAC7D,CACA,UAAG,GAAG,qBAAsB,CAAK,EAC1B,CACH,SACA,SAAU,EACV,MAAO,EACP,aAAc,EACd,WAAY,GACZ,QACA,SACA,KAAM,EACN,aACA,iBACA,eAAgB,GAChB,uBACA,UACJ,CACJ,EAAG,EACH,GAAG,SAAW,GAAG,OAAO,SACxB,GAAG,WAAa,GAAG,OAAO,WAC1B,GAAG,MAAQ,GAAG,OAAO,MACrB,GAAG,KAAO,GAAG,OAAO,KACpB,GAAG,MAAQ,GAAG,OAAO,MACrB,GAAG,UAAY,GAAG,OAAO,YAGnB,EAEC,IAAM,CAEb,GAAG,QAAW,UAAY,CACtB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,QAAS,GACT,eAAgB,GAChB,eAAgB,CAAC,MAAM,EACvB,iBAAkB,CACd,OACA,sBACA,sBACA,iBACA,YACA,oCACJ,EACA,mBAAoB,CAChB,mBACA,kBACA,sBACJ,CACJ,EAAE,EACE,EACA,EACA,EACA,EAAe,GAAI,IAAG,UAAU,CAAE,SAAU,IAAK,aAAc,CAAQ,CAAC,EAC5E,YAAiB,CACb,EAAmB,OACnB,EAAuB,OACvB,EAAmB,OACnB,EAAa,MAAM,EACnB,EAAqB,CAAE,OAAQ,KAAM,eAAgB,EAAK,CAAC,EAC3D,GAAU,CACd,CACA,YAA2B,CACvB,MAAO,GAAE,aAAa,SAAS,IAAI,CACvC,CACA,WAA0B,EAAc,EAAI,CACxC,GAAI,CACA,EAAmB,EACnB,EAAG,CACP,QACA,CACI,EAAmB,MACvB,CACJ,CACA,WAA8B,EAAc,CACxC,GAAI,CAAE,SAAQ,iBAAgB,kBAAkB,GAAoB,EACpE,GAAI,GACA,OACJ,GAAI,GAAW,EAAgB,EAO/B,GANA,AAAI,EAAe,EACf,GAAU,CAAQ,EAEb,EAAc,CAAQ,GAC3B,EAAW,EAEX,IAAyB,EAAU,CACnC,EAAmB,EACnB,EAAuB,EACnB,IAAW,UACX,GAAU,EAAQ,CAAQ,IAAM,EAAQ,CAAgB,EAAK,OAAS,OAE1E,GAAI,GAAa,CAAC,GAAkB,EAAc,CAAQ,EACtD,EAAuB,GAAG,MAAM,MAAM,sBAAuB,CAC7D,SACA,WACA,mBACA,iBACA,aACA,IAAK,mBAAmB,GAC5B,CAAC,EACD,GAAG,QAAQ,8BAA8B,CAAoB,EACzD,GACA,IAAG,KAAK,CAAoB,EAC5B,EAAc,CAAoB,EAE1C,CACJ,CACA,WAAuB,EAAU,CAC7B,MAAO,IAAU,MAAM,OAAO,GAAK,CAAC,CACxC,CACA,WAAiB,EAAU,CACvB,MAAO,GAAc,CAAQ,EAAE,EACnC,CACA,WAAoB,EAAK,EAAS,CAC9B,MAAO,GAAE,UAAU,EAAK,SAAS,KAAM,CAAE,KAAM,GAAM,GAAG,CAAQ,CAAC,CACrE,CACA,WAAiB,EAAU,EAAc,CACrC,GAAyB,eAAgB,EAAU,CAAY,CACnE,CACA,YAAc,EAAU,EAAc,CAClC,AAAI,EAAW,CAAQ,GAEvB,GAAyB,YAAa,EAAU,CAAY,CAChE,CACA,YAAkC,EAAQ,EAAU,EAAc,CAC9D,GAAU,CAAQ,EACd,EAAO,SACP,EAAiB,EAAc,UAAY,CACvC,QAAQ,GAAQ,KAAM,CAAE,GAAI,EAAK,EAAG,CAAQ,CAChD,CAAC,CAET,CACA,WAAuB,EAAU,CAC7B,MAAO,CAAC,CAAC,EAAa,IAAI,CAAQ,CACtC,CACA,YAAmB,EAAW,EAAgB,EAAG,CAC7C,EAAW,EAAE,aAAa,CAAQ,EAClC,EAAa,IAAI,EAAU,EAAI,CACnC,CACA,YAA0B,CACtB,MAAO,SAAQ,OAAO,EAC1B,CACA,YAAsB,CAClB,GAAI,CAAE,SAAU,QAChB,AAAI,EAAe,GAEf,GAAE,QAAQ,CAAK,GAAK,EAAE,SAAS,CAAK,IACpC,EAAiB,CAAE,cAAe,EAAK,EAAG,UAAY,CAClD,QAAQ,aAAa,CAAE,GAAG,EAAO,GAAI,EAAK,EAAG,EAAE,CACnD,CAAC,CAET,CACA,WAAyB,EAAU,CAC/B,GAAG,MAAM,wBAAwB,GAAG,OAAO,CACvC,WAAY,GAAG,MAAM,MAAM,sBAAuB,CAAE,WAAU,IAAK,sBAAsB,GAAW,CAAC,EACrG,IAAK,EACL,OAAQ,EAAO,eACf,KAAM,GACN,QAAS,GACT,WACA,KAAM,GACN,MAAO,OACP,MAAO,OACP,WAAY,OACZ,WAAY,GACZ,OAAQ,CAAC,UAAW,MAAM,EAC1B,UAAW,GACX,MAAO,CAAC,UAAW,MAAM,CAC7B,CAAC,CAAC,CACN,CACA,WAAuB,EAAO,CAC1B,GAAI,GAAM,eAGV,IAAI,CAAC,EAAM,WAAY,CACnB,GAAG,KAAK,aAAc,gDAAgD,EACtE,MACJ,CACA,AAAI,EAAM,SAAW,MACjB,IAAG,SAAS,UAAU,CAAE,SAAU,EAAM,gBAAiB,CAAC,EAC1D,GAAG,SAAS,WAAW,CAAE,SAAU,EAAM,gBAAiB,CAAC,EAC3D,EAAgB,EAAM,QAAQ,GAEzB,EAAM,SAAW,QACtB,GAAG,SAAS,WAAW,SAAS,KAAM,CAAE,OAAQ,EAAK,CAAC,EAE9D,CACA,YAAsB,EAAO,SAAS,KAAM,CACxC,MAAO,GAAK,iBAAiB,EAAO,SAAS,kBAAkB,CAAC,CACpE,CACA,WAAwB,EAAa,CACjC,GAAI,GAAc,GAAa,EAC/B,OAAS,KAAc,GACnB,EAAW,OAAO,EAEtB,OAAS,KAAc,GACnB,SAAS,KAAK,OAAO,CAAU,CAEvC,CACA,WAAiB,EAAM,SAAU,CAC7B,GAAI,CAAE,mBAAoB,EAC1B,GAAI,EAAgB,QAAQ,MAAM,EAC9B,MAAO,GAAI,gBAAgB,IAEnC,CACA,WAAoB,EAAS,CACzB,EAAE,gBAAgB,EAAE,KAAM,OAAQ,EAAS,CAAC,CAAC,CAAO,CACxD,CACA,YAA2B,CACvB,GAAM,GAAoB,QAAQ,UAClC,QAAQ,UAAY,YAAa,EAAM,CACnC,EAAkB,MAAM,KAAM,CAAI,EAClC,EAAqB,CAAE,OAAQ,OAAQ,eAAgB,EAAK,CAAC,CACjE,EACA,GAAM,GAAuB,QAAQ,aACrC,QAAQ,aAAe,YAAa,EAAM,CACtC,EAAqB,MAAM,KAAM,CAAI,EACrC,EAAqB,CAAE,OAAQ,UAAW,eAAgB,EAAK,CAAC,CACpE,CACJ,CACA,YAAoC,CAChC,AAAI,GAAG,SAAS,qBAAqB,IAAM,OACvC,GAAW,EACX,GAAU,EAElB,CACA,GAAG,GAAG,oBAAqB,SAAU,CAAE,QAAQ,CAC3C,EAAqB,CAAE,OAAQ,KAAM,eAAgB,EAAK,CAAC,EAC3D,EAAgB,EAChB,EAAyB,EACrB,IAAS,QACT,GAAG,SAAS,WAAW,SAAS,KAAM,CAAE,OAAQ,EAAK,CAAC,CAE9D,CAAC,EACD,GAAG,GAAG,OAAQ,uBAAwB,IAAM,CACxC,EAAqB,CAAE,OAAQ,SAAU,eAAgB,EAAM,CAAC,CACpE,CAAC,EACD,WAA2B,EAAO,EAAM,CAGpC,GAFI,EAAM,kBAEN,GAAG,MAAM,WAAW,CAAK,EACzB,OACJ,GAAI,CAAC,EAAa,IAAe,EAAc,GAAG,MAAM,QAAQ,QAAQ,EACpE,CAAC,EAAU,GAAY,EAAc,EAAE,aAAa,CAAI,CAAC,EACzD,EAAe,EAAK,aAAa,MAAM,EAE3C,GAAI,CADc,KAAgB,GAAa,EAAa,WAAW,GAAG,GAEtE,OACJ,GAAI,GAAW,EAAK,aAAa,oBAAoB,GAAK,OACtD,GAAQ,GAAG,MAAM,IAAI,CAAI,EACzB,GAAW,GAAG,SAAS,aAAa,EAAU,CAAE,SAAO,UAAS,CAAC,EACrE,GAAI,GAAU,CAGV,GAFA,GAAG,MAAM,KAAK,CAAK,EACnB,GAAG,IAAI,UAAU,CAAK,EAClB,IAAa,IAAe,GAAM,iBAAiB,EAAG,CACtD,GAAI,GAAU,EAAc,EAC5B,GAAK,EAAS,CAAE,OAAQ,OAAQ,eAAgB,EAAK,CAAC,CAC1D,CACA,GAAS,CACb,CAGJ,CACA,UAAG,GAAG,WAAY,eAAgB,CAAiB,EACnD,GAAG,MAAM,YAAa,SAAU,EAAM,CAClC,AAAI,GACA,GAAE,gBAAgB,EAAM,CACpB,UAAW,EACX,YAAa,SACjB,CAAC,EACD,EAAK,gBAAgB,SAAS,EAC9B,GAAG,KAAK,eAAe,CAAI,EAEnC,CAAC,EACD,GAAG,GAAG,qBAAsB,CAAK,EAC1B,CACH,SACA,QACA,UACA,GAAI,WAAW,CAAE,MAAO,GAAgB,CAAG,EAC3C,GAAI,mBAAmB,CAAE,MAAO,EAAkB,EAClD,aACA,gBACA,iBACA,UACA,YACJ,CACJ,EAAG,CAGG,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,EAAE,EACtB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,SAAY,UAAY,CACvB,WAAmB,EAAS,CACxB,GAAI,GAAU,EAAE,QAAQ,CAAO,EAC/B,GAAI,EAAQ,WAAW,KAAK,EACxB,MAAO,EAEf,CACA,GAAM,GAAyB,CAC3B,UACA,OACA,OACA,OACA,MACJ,EACM,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,iBAAkB,CAAC,MAAM,EACzB,qBAAsB,EACtB,eAAgB,CACZ,GAAG,EACH,OACA,YACA,EACA,kBACA,0BACA,6BACA,2BACA,YACA,iBACA,UACA,eACA,UACA,UACA,eACA,MACJ,EACA,oBAAqB,GACrB,cAAe,CACX,OAAQ,GACR,KAAM,GACN,WAAY,GACZ,UAAW,GACX,MAAO,OACP,aAAc,OACd,MAAO,SACP,YAAa,GACb,SAAU,EACd,EACA,gBAAiB,CACb,MAAO,OACP,WAAY,OACZ,SAAU,GACV,MAAO,OACP,OAAQ,OACR,QAAS,OACT,KAAM,EACV,EACA,MAAO,SACP,WAAY,GACZ,mBAAoB,CAAC,OAAO,EAC5B,UAAW,CAAC,OAAQ,YAAa,eAAgB,OAAQ,gBAAgB,EACzE,WAAY,CAAC,OAAQ,eAAe,EACpC,eAAgB,AAAC,GAAa,EAAS,QACvC,aAAc,EACd,mBAAoB,AAAC,GAAa,EAAS,OAAO,EAClD,kBAAmB,CACvB,EAAE,EACF,EAAE,SAAS,EAAQ,CAAC,aAAa,EAAG,IAAM,GAAG,MAAM,OAAO,GAAG,EAC7D,WAA6B,CAAE,WAAU,mBAAmB,CACxD,MAAO,CAAC,EAAS,MAAQ,EAAS,OAAS,GAAiB,IAChE,CACA,WAAkB,EAAS,EAAU,CAAC,EAAG,CACrC,SAAU,EAAS,EAAS,CAAO,EAC5B,EAAE,YAAY,EAAS,WAAW,CAC7C,CACA,WAAyB,EAAQ,CAC7B,MAAO,GAAE,aAAa,EAAQ,CAAE,KAAM,EAAM,CAAC,CACjD,CACA,WAAgB,EAAS,CACrB,GAAI,GAAQ,EAAE,YAAY,EAAS,SAAS,EAC5C,GAAI,GAAS,IAAU,QACnB,MAAI,QAAQ,KAAK,CAAK,GAClB,GAAQ,OAAO,CAAK,EAAI,KAErB,GAAI,MAAK,CAAK,CAE7B,CACA,WAAgB,EAAS,CACrB,GAAI,GAAQ,EAAE,YAAY,EAAS,SAAS,EAC5C,GAAI,GAAS,IAAU,QACnB,MAAO,EAEf,CACA,GAAM,GAAS,GAAG,SAAS,IAAI,IAAS,CACpC,GAAI,GAAU,EAAsB,CAAI,EACxC,MAAO,IAAI,IAAG,UAAU,CAAO,EAAE,QAAQ,CAC7C,CAAC,EACK,EAAW,GAAG,SAAS,IAAI,IAAS,CACtC,GAAM,GAAU,EAAsB,CAAI,EAC1C,MAAO,GAAO,CAAE,GAAG,EAAS,SAAU,EAAK,CAAC,CAChD,CAAC,EACD,YAA0B,CAAE,aAAY,WAAY,EAAa,UAAS,iBAAiB,CACvF,GAAM,IAAM,CAAC,sBAAuB,CAAU,EACxC,GAAW,EAAE,aAAa,EAAY,aAAc,CAAE,YAAa,CAAC,cAAe,SAAS,CAAE,CAAC,EACrG,MAAO,IAAG,KAAK,EAAY,mBAAoB,CAAE,OAAK,YAAU,cAAa,UAAS,eAAc,CAAC,CACzG,CACA,YAA0B,CAAE,aAAY,WAAY,EAAa,WAAW,CACxE,MAAO,IAAG,KAAK,EAAY,mBAAoB,CAAE,IAAK,GAAM,cAAa,SAAQ,CAAC,CACtF,CACA,WAAsB,EAAS,CAC3B,GAAI,EAAQ,OAAS,GACjB,OACJ,GAAM,CAAE,aAAY,cAAe,EAC/B,EAAiB,EAAS,CAAU,EACxC,GAAI,CAAC,EACD,OAEJ,GAAI,IACA,GAAkB,GAAG,SAAS,SAAS,CAAU,EAC/C,GAAa,CAAE,MAAO,EAAQ,KAAM,EAU1C,GATA,AAAI,EAAQ,gBACR,GAAU,GAAG,SAAS,IAAI,EAAY,GAAiB,EAAU,EAGjE,GAAU,EAAE,aAAa,EAAY,GAAiB,EAAU,EAEhE,CAAC,IAGD,AADc,EAAS,EAAO,IACd,GAChB,OACJ,GAAI,IAAc,GAAa,EAAY,CAAc,EACrD,EAAkB,GAAa,GAAS,CAAc,EAC1D,GAAI,CAAC,EAAE,QAAQ,GAAa,CAAe,EACvC,OACJ,GAAM,GAAO,CACT,aACA,WAAY,GACZ,QAAS,GAAG,OAAO,KAAK,EAAO,EAC/B,cAAe,CACnB,EACA,GAAI,IAAiB,CAAI,EAAE,iBAE3B,MAAO,EACX,CACA,YAAsB,EAAS,EAAO,EAAS,CAAO,EAAG,CACrD,MAAO,GAAQ,iBAAmB,EAAE,KAAK,EAAkB,EAAS,CAAI,CAAC,CAC7E,CACA,WAAkC,EAAM,CACpC,GAAI,GAAa,WACb,EAAQ,CAAC,UAAW,YAAa,UAAW,QAAS,GAAG,GAAG,OAAO,OAAO,mBAAmB,EAC5F,EAAc,GAAI,QAAO,QAAQ,EAAM,KAAK,GAAG,aAAc,GAAG,EAChE,GAAW,AAAC,IAAU,GAAM,QAAQ,EAAa,EAAE,EACvD,SAAO,EAAK,QAAQ,EAAY,EAAQ,EACxC,EAAO,EAAK,QAAQ,YAAa,EAAE,EAC5B,CACX,CACA,WAA2B,EAAS,EAAM,CACtC,MAAI,KAAS,YACF,EAAO,kBAAkB,EAAQ,SAAS,EAE5C,IAAS,YACP,GAAG,KAAK,CAAO,EAGf,EAEf,CACA,GAAG,MAAM,YAAa,AAAC,GAAY,GAAa,CAAO,CAAC,EACxD,WAAkB,EAAS,CACvB,MAAO,GAAE,oBAAoB,EAAS,SAAS,CACnD,CACA,WAA8B,EAAS,CACnC,GAAI,GAAQ,WAEZ,SAAQ,WAAa,GACd,GAAG,KAAK,EAAS,uBAAwB,CAC5C,IAAK,CAAC,uBAAwB,CAAO,CACzC,CAAC,CACL,CACA,YAA+B,EAAU,EAAS,CAC9C,GAAM,GAAM,EAAQ,KAAO,CAAC,wBAAyB,CAAQ,EACvD,EAAS,EAAQ,QAAU,SACjC,MAAO,IAAG,KAAK,EAAQ,wBAAyB,CAAE,WAAU,SAAQ,KAAI,CAAC,CAC7E,CACA,WAAyB,EAAS,CAC9B,MAAO,CAAC,EAAQ,QAAQ,gBAAgB,CAC5C,CACA,WAAiB,EAAU,CACvB,MAAO,GAAS,aAAe,EAAgB,CAAQ,CAC3D,CACA,cAAqB,EAAM,CACvB,GAAI,CAAC,EAAM,EAAU,GAAW,EAAa,CAAI,EACjD,MAAI,GAAE,cAAc,CAAQ,EACjB,EAAE,IAAI,CAAQ,EAErB,EACO,EAAmB,EAAM,EAAU,CAAO,EAE9C,GAAI,IAAG,eAAe,CACzB,WACA,GAAG,EAAE,KAAK,EAAS,CAAC,QAAS,QAAS,SAAU,YAAY,CAAC,CACjE,CAAC,EAAE,KAAK,CACZ,CACA,cAA+B,EAAM,CACjC,GAAI,CAAC,EAAM,EAAgB,GAAW,EAAa,CAAI,EAEvD,MAAO,AADQ,IAAI,IAAG,SAAS,EAAgB,EAAM,CAAO,EAC5C,gBAAgB,CAAI,CACxC,CACA,WAAsB,EAAM,CACxB,MAAO,GAAE,KAAK,EAAM,MAAO,MAAO,SAAS,CAC/C,CACA,cAAmB,EAAM,CACrB,GAAI,CAAC,EAAM,EAAgB,GAAW,EAAa,CAAI,EACvD,MAAI,GAAE,UAAU,CAAc,EACnB,CAAC,CAAc,EAEtB,EAAE,OAAO,CAAc,EAChB,EAGJ,AADQ,GAAI,IAAG,SAAS,EAAgB,EAAM,CAAO,EAC5C,YAAY,CAAI,CACpC,CACA,WAAoB,EAAS,EAAU,EAAU,CAAC,EAAG,CACjD,MAAO,IAAI,IAAG,SAAS,EAAU,EAAS,CAAO,EAAE,QAAQ,CAAO,CACtE,CACA,WAAkB,EAAM,EAAmB,CACvC,MAAI,GAAE,UAAU,CAAiB,EACtB,EAAE,SAAS,EAAM,CAAiB,GAAK,GAAG,MAAM,IAAI,CAAI,EAAE,SAAS,CAAiB,EAGpF,EAAW,EAAM,CAAiB,EAAE,OAAS,CAE5D,CACA,WAAiB,EAAS,EAAU,EAAS,CACzC,MAAO,IAAI,IAAG,SAAS,EAAU,EAAS,CAAO,EAAE,QAAQ,CAAO,CACtE,CACA,eAAoB,EAAM,CACtB,GAAM,GAAU,EAAsB,CAAI,EACpC,EAAU,EAAS,EAAQ,OAAQ,CAAO,EAChD,MAAI,IACA,GAAI,IAAG,OAAO,gBAAgB,CAAE,GAAG,EAAS,SAAQ,CAAC,EAAE,QAAQ,EAE5D,GAAG,QAAQ,gBAAgB,cAAc,CACpD,CACA,WAA+B,EAAM,CACjC,GAAM,GAAU,EAAE,oBAAoB,EAAM,QAAQ,EACpD,MAAI,GAAE,UAAU,EAAQ,MAAM,GAC1B,GAAQ,SAAW,EAAQ,QAExB,CACX,CACA,WAAkC,EAAS,CACvC,EAAQ,UAAU,IAAI,eAAe,EACrC,EAAQ,aAAa,QAAS,EAAE,CACpC,CACA,cAAmB,EAAM,CACrB,GAAM,GAAU,EAAsB,CAAI,EAC1C,EAAQ,SAAW,QACnB,GAAM,GAAU,EAAS,EAAQ,OAAQ,CAAO,EAChD,SAAQ,MAAQ,EAAS,CAAO,EAChC,EAAQ,QAAU,EAAE,MAAM,EAAQ,QAAS,EAAmB,CAAO,CAAC,EAClE,GAAQ,UAAY,EAAE,YAAY,EAAS,cAAc,IACzD,GAAQ,KAAO,GAAG,KAAK,CAAO,GAElC,GAAG,QAAQ,2BAA2B,CAAO,EACtC,EAAO,CAAO,CACzB,CACA,WAA4B,EAAS,CACjC,GAAI,GAAU,CAAC,EACX,EAAO,EAAO,CAAO,EACzB,AAAI,GACA,GAAQ,qBAAuB,EAAK,YAAY,GAEpD,GAAI,GAAO,EAAO,CAAO,EACzB,MAAI,IACA,GAAQ,iBAAmB,GAExB,CACX,CACA,WAAe,EAAK,EAAS,CACzB,MAAO,GAAS,CAAE,GAAG,EAAS,KAAI,CAAC,CACvC,CACA,GAAM,IAAc,0BACpB,YAAoB,EAAK,CACrB,GAAI,GAAQ,GAAY,KAAK,CAAG,EAChC,GAAI,EAAO,CACP,GAAI,CAAC,EAAG,EAAQ,IAAU,EAC1B,OAAQ,OACC,SACD,MAAO,KAAO,EAAE,eAAe,EAAM,MACpC,OACD,MAAO,GAAE,eAAe,EAAM,EAE1C,CACJ,CACA,WAAiB,EAAK,CAClB,GAAI,GAAQ,GAAY,KAAK,CAAG,EAChC,GAAI,EAAO,CACP,GAAI,CAAC,EAAG,EAAQ,IAAU,EAC1B,OAAQ,OACC,KACD,MAAO,SAAW,EAAE,eAAe,EAAM,MACxC,QACD,MAAO,OAAS,EAAE,eAAe,EAAM,EAEnD,CACJ,CACA,WAAkB,EAAS,EAAS,CAChC,MAAO,GAAE,SAAS,EAAS,EAAE,QAAQ,GAAK,GAAY,EAAS,CAAO,GAAK,GAAa,CAAO,CACnG,CACA,WAAsB,EAAS,EAAS,CACpC,MAAO,CAAC,CAAC,GAAY,EAAS,CAAO,CACzC,CACA,WAA6B,EAAS,CAClC,MAAO,8CAA8C,EAAE,QAAQ,CAAO,gHAC1E,CACA,YAAsB,EAAS,CAC3B,KAAM,IAAI,IAAG,aAAa,EAAoB,CAAO,CAAC,CAC1D,CACA,YAAqB,EAAS,EAAU,CAAC,EAAG,CACxC,GAAI,GAAW,EAAQ,OAAS,EAAO,qBAAuB,EAAO,eACrE,MAAO,GAAE,WAAW,EAAU,SAAU,EAAS,CAC7C,GAAI,IAAS,GAAa,EAAS,CAAO,EAC1C,GAAI,IAAU,GAAa,GAAQ,EAAS,CAAO,EAC/C,MAAO,GAEf,CAAC,CACL,CACA,YAAsB,EAAS,EAAS,CACpC,GAAI,EAAE,WAAW,CAAO,EACpB,MAAO,GAAQ,CAAO,EAErB,GAAI,EAAQ,QAAQ,CAAO,EAC5B,GAAI,CACA,MAAO,IAAwB,EAAS,CAAO,CACnD,OACO,EAAP,CACI,GAAI,YAAa,IAAG,YAChB,MAAO,GAGP,KAAM,EAEd,CAER,CACA,YAAiC,EAAS,EAAS,CAC/C,GAAI,CAAE,cAAa,cAAe,EAAE,cAAc,CAAO,EACzD,GAAI,EAAY,SAAW,EACvB,KAAM,IAAI,IAAG,YAAY,CAAO,EAEpC,GAAI,CAAE,WAAS,MAAI,cAAY,eAAe,EAAY,GACtD,GAAS,GACb,AAAI,KAAY,IACZ,IAAU,EAAE,QAAQ,CAAO,EAEtB,IACL,KAAU,IAEd,OAAS,KAAa,IAClB,IAAU,EAAE,cAAc,CAAS,EAEvC,AAAI,IACA,KAAU,EAAE,WAAW,EAAE,GAE7B,OAAS,KAAiB,IAAY,CAClC,GAAI,GAAiB,GAAW,IAAkB,EAAQ,aAAa,CAAa,EACpF,GAAI,IAAkB,KAClB,IAAU,EAAE,WAAW,CAAc,UAEhC,IAAkB,QACvB,OAAS,KAAa,IAAqB,CAAO,EAC9C,IAAU,EAAE,cAAc,CAAS,MAIvC,KAAU,EAAE,aAAa,EAAe,CAAc,CAE9D,CACA,MAAI,IACA,KAAU,GAEP,EACX,CACA,YAAsB,EAAQ,EAAS,EAAU,CAAC,EAAG,CACjD,GAAI,GAAS,EAAQ,QAAU,EAAO,oBACtC,MAAO,CAAC,EAAQ,CAAO,GAAK,CAAC,GAAU,GAAG,SAAS,IAAI,EAAQ,CAAE,MAAO,EAAS,GAAG,CAAQ,CAAC,IAAM,CACvG,CACA,YAAwB,EAAS,EAAK,CAClC,MAAI,GAAE,SAAS,CAAO,EACX,EAAQ,KAAK,CAAG,EAGhB,IAAY,CAE3B,CACA,YAA8B,EAAS,CACnC,GAAI,GAAS,AAAC,GAAU,CAAC,EAAE,KAAK,EAAO,iBAAkB,AAAC,GAAmB,GAAe,EAAgB,CAAK,CAAC,EAClH,MAAO,GAAE,OAAO,EAAQ,UAAW,CAAM,CAC7C,CACA,GAAM,IAAc,UACd,GAAe,WACf,GAAgB,YACtB,YAA4B,EAAQ,CAChC,MAAO,IAAY,KAAK,CAAM,CAClC,CACA,YAAuB,EAAS,EAAU,CAAC,EAAG,CAC1C,GAAM,CAAE,SAAU,EAClB,AAAI,IAAU,OAAS,CAAE,aAAiB,IAAG,QACzC,GAAG,KAAK,wDAAyD,CAAK,EAE1E,EAAU,EAAE,KAAK,EAAE,SAAS,CAAO,CAAC,EACpC,GAAM,GAAW,CAAC,EAClB,KAAO,EAAQ,QAAQ,CACnB,GAAI,IAAS,EAAQ,MAAM,EAG3B,GAFI,KAAW,IACX,IAAS,SACT,GAAmB,EAAM,EAAG,CAC5B,GAAI,IAAO,GAAY,CAAO,EAC1B,GAAW,GAAG,MAAM,YAAY,EAAI,EAAE,IAAI,AAAC,IAAe,GAAO,QAAQ,GAAa,EAAU,CAAC,EACrG,EAAQ,QAAQ,GAAG,EAAQ,CAC/B,SACS,GAAa,KAAK,EAAM,EAAG,CAChC,GAAI,IAAU,OAAS,EAAM,QAAU,UACnC,SACJ,GAAI,IAAuB,EAAS,EAAM,yBAAyB,EAAG,CAAO,EAC7E,EAAQ,QAAQ,GAAO,QAAQ,GAAc,EAAoB,CAAC,CACtE,KACK,AAAI,GAAE,cAAc,EAAM,EAC3B,EAAS,KAAK,EAAS,GAAQ,CAAO,CAAC,EAElC,EAAE,SAAS,EAAM,GACtB,EAAS,KAAK,GAAc,GAAQ,CAAO,CAAC,CAEpD,CACA,MAAO,GAAE,KAAK,CAAQ,CAC1B,CACA,YAAqB,CAAE,QAAO,QAAQ,CAClC,MAAI,KAAU,MACH,GAAQ,GAAG,KAAK,4DAA4D,EAG5E,EAAM,IAErB,CACA,YAA6B,EAAQ,CAAE,UAAW,CAAC,EAAG,CAClD,MAAO,GAAO,QAAQ,GAAe,SAAU,EAAO,CAClD,GAAI,EACA,MAAO,GAAS,CAAM,EAGtB,GAAG,KAAK,qEAAsE,EAAO,CAAM,CAEnG,CAAC,CACL,CACA,YAAuB,EAAQ,EAAS,CACpC,MAAK,GAAE,SAAS,CAAM,EAEd,IAAG,QAAQ,eAAiB,IAAqB,EAAQ,CAAO,EAD7D,CAEf,CACA,YAAqB,EAAQ,CACzB,MAAO,GAAE,iBAAiB,CAAM,CACpC,CACA,YAA0B,EAAQ,EAAU,CAAC,EAAG,CAC5C,GAAI,GAAmB,EAAQ,kBAAoB,OAC/C,EAAe,EAAQ,cAAgB,GACvC,GAAQ,CAAC,EACT,GAAkB,GAAY,CAAM,EACxC,OAAS,MAAY,IAAiB,CAClC,GAAI,KAAa,QACb,SACJ,GAAI,IAAY,EACZ,GAAQ,EACZ,GAAW,GAAS,QAAQ,gCAAiC,CAAC,EAAQ,IAClE,IAAY,EACL,GACV,EACD,GAAW,GAAS,QAAQ,aAAc,IACtC,IAAQ,GACD,GACV,EACD,GAAM,GAAO,CACT,GAAG,EACH,YACA,aACA,SACA,sBAAuB,CAC3B,EACA,GAAM,KAAK,CAAI,CACnB,CACA,MAAO,GACX,CACA,YAAwB,EAAc,EAAO,CACzC,GAAI,GAAkB,GAAc,EAAO,mBAAoB,CAAE,OAAM,CAAC,EAAE,KAAK,EAC/E,OAAS,KAAe,GACpB,GAAI,EAAE,QAAQ,EAAa,CAAe,EAAE,OACxC,MAAO,GAGf,UAAG,KAAK,cAAe,qHAAqH,EACrI,EACX,CACA,WAAiB,EAAS,EAAU,EAAU,CAAC,EAAG,CAE9C,GADA,EAAU,EAAE,IAAI,CAAO,EACnB,EAAE,UAAU,CAAQ,EAAG,CACvB,GAAI,GAAS,GAAY,CAAQ,EACjC,MAAO,IAAU,EAAQ,QAAQ,CAAM,CAC3C,KAEI,OAAO,IAAI,IAAG,SAAS,EAAU,EAAS,CAAO,EAAE,QAAQ,CAAO,CAE1E,CACA,YAA0B,EAAS,EAAU,EAAU,CAAC,EAAG,CACvD,MAAO,GAAQ,WAAa,EAAE,eAAe,EAAQ,WAAY,EAAO,eAAgB,CAAQ,CACpG,CACA,YAAwB,EAAO,CAC3B,GAAI,GAAY,EAAM,OAAO,AAAC,GAAS,CAAC,EAAK,OAAS,EAAK,YAAY,WAAW,EAElF,MAAO,AADS,GAAE,IAAI,EAAW,UAAU,EAC1B,KAAK,IAAI,GAAK,OACnC,CACA,YAAgC,EAAO,EAAe,CAClD,MAAO,GAAE,KAAK,EAAO,SAAU,EAAW,CACtC,MAAQ,KAAc,GAChB,GAAU,YAAc,QAAY,EAAU,YAAc,YAC9D,EAAU,WAAW,SAAS,EAAc,UAAU,CAC9D,CAAC,CACL,CACA,YAA6B,EAAO,CAChC,GAAI,EAAM,OAAS,EACf,MAAO,GACX,GAAI,GAAa,EAAE,OAAO,EAAO,YAAY,EAC7C,SAAa,EAAE,OAAO,EAAY,AAAC,GAAS,GAAuB,EAAY,CAAI,CAAC,EAC7E,CACX,CACA,eAAkB,EAAM,CACpB,GAAI,GAAU,EAAsB,CAAI,EACpC,EACA,CAAE,SAAQ,YAAU,QAAQ,EAC5B,GACJ,GAAI,EAAQ,OACR,GAAW,EAAO,EAAQ,OAAQ,CAAO,EACzC,EAAS,AAAC,IAAY,GAAQ,kBAAkB,EAAQ,EACxD,IAAW,wCAEV,CACD,GAAI,IAAS,GAAG,MAAM,OAAO,CAAO,EACpC,GAAW,EAAE,IAAI,GAAQ,SAAS,EAClC,EAAS,AAAC,GAAY,EAAQ,gBAAgB,EAAM,EACpD,IAAW,4BAA8B,GAAO,KAAK,IAAI,CAC7D,CACA,GAAI,IAAsB,AAAC,IAAY,GAAQ,WAAa,EAAO,EAAO,EAC1E,GAAG,QAAQ,MAAM,GAAqB,CAAE,GAAG,EAAS,QAAO,CAAC,EAC5D,OAAS,MAAW,IAChB,GAAG,KAAK,GAAS,sBAAuB,CAAE,SAAQ,YAAU,OAAK,IAAK,CAAO,CAAC,CAEtF,CACA,YAAmB,EAAU,EAAU,CACnC,MAAO,IAAG,MAAM,WAAW,EAAU,sBAAuB,CAAQ,CACxE,CACA,YAAgB,EAAU,EAAU,CAChC,MAAO,IAAG,MAAM,WAAW,EAAU,mBAAoB,CAAQ,CACrE,CACA,YAA0B,EAAS,EAAU,CAAE,SAAS,GAAM,CAAC,EAAG,CAC9D,GAAI,EAAE,qBAAqB,EAAS,CAAE,QAAO,CAAC,EAAG,CAC7C,EAAS,EACT,MACJ,CACA,WAAiC,GAAS,CACtC,OAAS,MAAS,IACd,GAAI,GAAM,eAAgB,CACtB,GAAW,EACX,EAAS,EACT,MACJ,CAER,CACA,GAAI,IAAW,GAAI,sBAAqB,EAAyB,CAAE,WAAY,GAAG,KAAW,CAAC,EAC1F,GAAa,IAAM,GAAS,WAAW,EAC3C,GAAS,QAAQ,CAAO,EACxB,GAAG,WAAW,EAAS,EAAU,CACrC,CACA,GAAM,IAAuB,qCAC7B,YAAsB,EAAO,CAAE,SAAQ,cAAa,OAAM,cAAa,EAAE,qBAAwB,CAAC,EAAG,CACjG,GAAI,EAAE,SAAS,CAAK,GAAK,GAAqB,KAAK,CAAK,EAAG,CACvD,GAAI,CAAC,GAAa,IAAc,EAAE,qBAAqB,CAAK,EAAE,GAC9D,EAAO,CAAE,GAAG,EAAM,GAAG,EAAW,EAChC,EAAQ,GAAG,SAAS,IAAI,GAAa,CAAE,MAAO,UAAW,SAAQ,aAAY,CAAC,GAAK,GAAG,KAAK,4BAA6B,CAAK,CACjI,CACA,MAAI,GAAE,SAAS,CAAK,GAChB,GAAQ,GAAW,CAAK,GAExB,GAAW,CAAK,GAChB,GAAQ,GAAc,EAAO,EAAM,CAAE,aAAW,CAAC,GAE9C,EAAE,SAAS,CAAK,CAC3B,CACA,YAAoB,EAAO,CACvB,MAAO,GAAE,UAAU,CAAK,GAAK,EAAM,QAAQ,wBAAwB,GAAK,CAAC,GAAG,OAAO,SAAS,CAAK,CACrG,CACA,YAAuB,EAAoB,EAAO,CAAC,EAAG,CAAE,SAAQ,cAAe,CAAC,EAAG,CAC/E,GAAI,IAAW,EAAS,EAAoB,CAAE,QAAO,CAAC,GAAK,GAAG,KAAK,yBAA0B,CAAkB,EAE3G,GAAQ,AADA,GAAG,KAAK,GAAU,oBAAqB,CAAE,OAAM,MAAO,KAAM,IAAK,CAAC,oBAAqB,CAAkB,CAAE,CAAC,EACtG,OAAS,GAAqB,GAAU,CAAU,EACpE,OAAS,MAAQ,IACb,GAAK,eAAiB,EAE1B,MAAO,GACX,CACA,YAA8B,EAAU,EAAa,EAAE,oBAAqB,CACxE,GAAI,GAAe,EAAS,UAC5B,MAAO,GAAW,CAAY,CAClC,CACA,eAAuB,EAAM,CACzB,GAAI,CAAC,EAAW,EAAW,YAAa,GAAa,EAAE,KAAK,EAAM,MAAO,EAAE,mBAAoB,KAAK,EAChG,GAAY,GAAa,EAAW,CAAE,OAAQ,CAAU,CAAC,EACzD,GAAc,EAAE,eAAe,EAAS,EACxC,GAAc,SAAS,SAAS,EAAW,GAAK,EAAE,iBAAiB,EAAW,EAElF,MADA,GAAU,sBAAsB,EAAU,EAAW,EACjD,GACO,IAAM,CACT,GAAY,GAAG,sBAAsB,GAAY,GAAI,EAAW,CACpE,EAGA,IAAG,MAAM,EAAW,EACb,IAAM,GAAG,QAAQ,EAAW,EAE3C,CACA,eAA0B,EAAM,CAC5B,GAAI,GAAa,EAAE,KAAK,EAAM,MAAO,UAAW,UAAU,EAE1D,MAAO,AADO,IAAI,IAAG,gBAAgB,GAAG,CAAU,EACnC,MAAM,CACzB,CACA,GAAI,IAAc,EACd,GAAqB,EAAE,QAAQ,MAAM,EACzC,YAAgB,EAAU,CACtB,GAAI,CACA,YACO,EAAS,CACpB,QACA,CACI,AAAI,EAAE,KAAgB,GAClB,GAAmB,MAAM,CACjC,CACJ,CACA,YAAqB,EAAU,CAC3B,AAAI,KAAgB,EAChB,EAAS,EAGT,GAAmB,CAAQ,CAEnC,CACA,UAAG,GAAG,oBAAqB,UAAY,CACnC,GAAM,CAAE,mBAAoB,SAG5B,GAFA,GAAG,MAAM,CAAe,EACxB,EAAgB,aAAa,YAAa,EAAgB,SAAS,IAAI,CAAC,EACpE,CAAC,GAAG,QAAQ,aAAa,EACzB,MAAO,IAAG,KAAK,mFAAmF,CAE1G,CAAC,EACM,CACH,SACA,SACA,WACA,SACA,WACA,IAAK,EACL,qBACA,IAAK,EACL,QAAS,EACT,WACA,UACA,OAAQ,EACR,kBACA,QACA,iBAAkB,EAClB,aAAc,EACd,cAAe,GACf,SAAU,GACV,SAAU,GACV,SAAU,EACV,2BACA,cACA,UACA,iBACA,iBACA,WACA,eACA,eACA,UACA,kBACA,KAAM,EACN,KAAM,EACN,oBACA,SACA,aACA,UACA,oBACA,eACA,oBACA,UACA,kBACA,kBACA,uBACA,sBACA,cACA,gBACA,iBACA,iBACA,UACA,cACJ,CACJ,EAAG,EACH,GAAG,OAAS,GAAG,SAAS,OACxB,GAAG,QAAU,GAAG,SAAS,QACzB,GAAG,OAAS,GAAG,SAAS,OACxB,GAAG,SAAW,GAAG,SAAS,SAC1B,GAAG,MAAQ,GAAG,SAAS,MACvB,GAAG,SAAW,CAAE,MAAO,GAAG,SAAS,aAAc,EACjD,EAAE,SAAS,GAAI,CAAC,SAAS,EAAG,IAAM,GAAG,MAAM,OAAO,CAG5C,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,EAAE,EACtB,GAAG,SAAY,UAAY,CACvB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAI,GAAG,SACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,kBAAmB,CAAC,gBAAiB,YAAY,EACjD,kBAAmB,CAAC,iBAAiB,EACrC,qBAAsB,CAAC,oBAAoB,EAC3C,uBAAwB,CAAC,uBAAwB,kBAAmB,qBAAsB,mBAAmB,EAC7G,WAAY,IACZ,cAAe,EACf,UAAW,GACX,WAAY,CAAE,MAAO,IAAM,OAAO,WAAa,EAC/C,iBAAiB,CAAE,UAAS,eAAe,CAAE,MAAO,KAAgB,OAAS,GAAG,KAAK,QAAQ,CAAO,CAAG,CAC3G,EAAE,EACI,EAAc,GAAI,IAAG,YAC3B,GAAG,SAAS,EAAO,WAAW,wBAAwB,EAAG,SAAU,EAAS,CACxE,MAAO,GAAY,0BAA0B,CAAO,CACxD,CAAC,EACD,GAAM,GAAS,GAAG,SAAS,SAAU,EAAS,EAAS,CACnD,SAAU,EAAE,QAAQ,CAAO,EAC3B,EAAU,EAAE,IAAI,EAAS,CAAO,EAC1B,GAAQ,MAAQ,GAAG,MAAM,IAAI,CAAO,IACtC,GAAG,KAAK,kCAAkC,EAE1C,EAAQ,MACR,EAAQ,MAAM,KAAK,EAGvB,AADe,GAAI,IAAG,aAAa,EAAS,CAAO,EAC5C,MAAM,EACN,GAAG,QAAQ,gBAAgB,aAAa,GAAK,EACxD,CAAC,EACD,WAAiB,EAAS,CAAE,gBAAe,QAAO,eAAa,iBAAiB,CAAC,EAAG,CAehF,GAdI,GACI,CAAC,EAAQ,aAAa,UAAU,GAAK,EAAQ,WAAa,IAC1D,EAAQ,aAAa,WAAY,IAAI,EAG7C,KAAgB,GAAG,MAAM,YACzB,KAAiB,OACjB,GAAe,EAAE,eAAe,GAAc,EAAO,iBAAkB,CAAE,UAAS,cAAY,CAAC,EAC/F,EAAQ,MAAM,CACV,cAAe,GACf,eACJ,CAAC,EACD,EAAmB,CAAO,EAC1B,EAAQ,UAAU,IAAI,GAAe,mBAAqB,iBAAiB,EACvE,CAAC,EACD,MAAO,GAAO,CAAO,CAE7B,CACA,WAA4B,EAAS,CACjC,GAAS,UAAU,OAAO,kBAAmB,kBAAkB,CACnE,CACA,GAAG,GAAG,UAAW,SAAU,CAAE,iBAAiB,CAC1C,EAAmB,CAAa,CACpC,CAAC,EACD,WAAkB,EAAS,EAAS,CAChC,SAAQ,EAAS,CAAO,EACjB,IAAY,SAAS,aAChC,CACA,cAAuB,EAAM,CACzB,MAAO,GAAa,GAAG,CAAI,IAAI,CACnC,CACA,WAAsB,EAAM,CAAE,SAAQ,QAAO,UAAQ,YAAW,WAAc,CAAC,EAAG,CAC9E,GAAI,CAAC,EACD,OACJ,GAAI,IAAQ,EAAgB,EAAM,CAAE,QAAO,SAAO,CAAC,EACnD,GAAI,GACA,MAAO,IAAM,CACT,GAAI,IAAW,IAAM,EAAO,GAAO,CAAE,IAAK,GAAM,WAAS,CAAC,EAC1D,MAAI,IACA,EAAE,SAAS,EAAQ,EAChB,GAAS,CACpB,EAEC,GAAI,IAAS,OACd,MAAO,IACI,EAAS,EAAG,CAAE,WAAS,CAAC,CAG3C,CACA,YAAuB,CACnB,MAAO,CAAC,EAAa,EAAG,GAAG,EAAO,iBAAiB,EAAE,KAAK,CAC9D,CACA,YAAiB,EAAQ,EAAU,CAAC,EAAG,CAEnC,MAAO,AADS,GAAE,IAAI,EAAQ,CAAO,EACtB,QAAQ,EAAY,CAAC,CACxC,CACA,YAAoB,EAAS,EAAU,CAAC,EAAG,CACvC,SAAU,EAAE,IAAI,EAAS,CAAO,EACzB,EAAE,QAAQ,EAAS,EAAY,CAAC,CAC3C,CACA,WAAmB,EAAS,EAAU,CAAC,EAAG,CACtC,SAAU,EAAE,IAAI,EAAS,CAAO,EACzB,EAAE,OAAO,EAAS,EAAY,CAAC,CAC1C,CACA,YAAgB,EAAU,CAAC,EAAG,CAC1B,MAAO,GAAE,IAAI,EAAY,EAAG,CAAO,CACvC,CACA,YAAwB,CACpB,MAAO,GAAQ,EAAE,OACrB,CACA,YAAmB,CACf,MAAO,UAAS,gBACpB,CACA,YAAqB,CACjB,MAAO,GAAE,KAAK,WAClB,CACA,YAAsB,CAClB,MAAO,GAAE,KAAK,YAClB,CACA,YAAgB,EAAS,CACrB,MAAO,KAAY,EAAQ,CAC/B,CACA,YAA8B,CAC1B,MAAO,QAAO,WAAa,EAAU,CACzC,CACA,WAAsB,EAAU,CAC5B,MAAO,IAAG,SAAS,YAAY,CAAQ,CAC3C,CACA,WAAuB,EAAO,SAAU,CACpC,GAAM,GAAa,CAAC,YAAY,EAAE,OAAO,EAAO,iBAAiB,EAAE,OAAO,EAAO,oBAAoB,EACrG,MAAO,GAAK,iBAAiB,EAAW,KAAK,CAAC,CAClD,CACA,cAAuB,EAAM,CACzB,GAAM,CAAC,EAAW,GAAW,GAAa,CAAI,EACxC,GAAW,EAAQ,UAAY,EAAQ,MAAM,SACnD,GAAI,GAAU,CACV,GAAM,IAAO,EAAqB,CAAS,EAC3C,EAAQ,MAAM,eAAe,IAAI,GAAU,EAAI,CACnD,CACJ,CACA,WAA8B,EAAW,CACrC,GAAI,GAAO,CAAC,EACZ,OAAS,KAAY,GAAW,CAC5B,GAAI,IAAM,EAAa,CAAQ,EAC/B,AAAI,GACA,EAAK,IAAO,EAAS,UAGrB,GAAG,KAAK,2BAA4B,4DAA6D,CAAQ,CAEjH,CACA,MAAO,EACX,CACA,cAA0B,EAAM,CAC5B,GAAM,CAAC,EAAW,GAAW,GAAa,CAAI,EACxC,CAAE,aAAa,EAAQ,MACvB,GAAqB,EAAQ,MAAM,eAAe,IAAI,EAAQ,EACpE,MAAI,IACA,GAAmB,EAAW,GAAoB,CAAC,EACnD,GAAG,KAAK,8BAA+B,kCAAmC,EAAkB,EACrF,IAGA,EAEf,CACA,WAAmB,EAAU,CAAC,EAAG,CAC7B,GAAM,GAAQ,GAAG,MAAM,IAAI,CAAO,EAC5B,EAAW,EAAQ,UAAY,EAAM,SAC3C,GAAI,EAAU,CACV,GAAM,IAAe,GAAG,aAAa,SAAS,CAAK,EACnD,EAAM,kBAAkB,IAAI,EAAU,EAAY,CACtD,CACJ,CACA,WAAsB,EAAU,CAAC,EAAG,CAChC,GAAM,GAAQ,GAAG,MAAM,IAAI,CAAO,EAC5B,EAAW,EAAQ,UAAY,EAAM,SACrC,GAAkB,EAAQ,MAAM,kBAAkB,IAAI,CAAQ,EACpE,MAAI,KAAmB,GAAgB,QAAQ,CAAK,EAChD,IAAG,KAAK,6BAA8B,yBAA0B,GAAgB,MAAM,EAC/E,IAGA,EAEf,CACA,YAAyB,CACrB,MAAO,IAAI,IAAG,UAAU,CAAE,SAAU,GAAI,aAAc,EAAE,YAAa,CAAC,CAC1E,CACA,YAAsB,EAAM,CACxB,GAAM,CAAC,EAAW,GAAW,EAAE,KAAK,EAAM,MAAO,SAAS,EAC1D,EAAQ,MAAQ,GAAG,MAAM,IAAI,CAAO,EACpC,GAAI,IACJ,MAAI,GACA,GAAY,CAAC,GAAQ,EAAW,CAAO,CAAC,EAEvC,AAAI,EAAQ,OACb,GAAY,EAAU,EAAQ,OAAQ,CAAO,EAG7C,GAAY,GAAO,CAAO,EAEvB,CAAC,GAAW,CAAO,CAC9B,CACA,WAAkB,KAAa,EAAM,CACjC,GAAM,CAAC,EAAW,IAAW,GAAa,CAAI,EAC9C,SAAmB,EAAW,CAAC,EAAG,EAAU,GAAQ,QAAQ,EACrD,EACX,CACA,WAA4B,EAAW,EAAM,EAAY,GAAW,UAAW,CAC3E,OAAS,MAAY,GAAW,CAC5B,GAAM,IAAM,EAAa,EAAQ,EAC3B,GAAM,EAAK,KAAQ,EACzB,GAAS,SAAS,CAAE,OAAK,WAAS,CAAC,CACvC,CACJ,CACA,WAAoB,EAAS,EAAU,CAAC,EAAG,CAEvC,GAAM,IAAe,AADJ,GAAQ,CAAO,EACF,sBAAsB,EAC9C,GAAe,EAAQ,sBAAsB,EAC7C,GAAa,GAAI,IAAG,KAAK,CAC3B,KAAM,GAAa,KAAO,GAAa,KACvC,IAAK,GAAa,IAAM,GAAa,IACrC,MAAO,GAAa,MACpB,OAAQ,GAAa,MACzB,CAAC,EACD,EAAQ,eAAe,EACvB,EAAE,SAAS,EAAS,CAChB,SAAU,EAAQ,MAAM,WAAa,SAAW,SAAW,WAC3D,IAAK,OACL,MAAO,OACP,OAAQ,OACR,KAAM,OACN,MAAO,OACP,OAAQ,MACZ,CAAC,EACD,GAAM,IAAS,EAAE,mBAAmB,WAAW,EAC/C,EAAE,aAAa,EAAS,EAAM,EAC9B,GAAO,YAAY,CAAO,EAC1B,GAAM,IAAa,SAAU,GAAO,GAAO,CACvC,UAAW,MAAQ,GACnB,GAAW,KAAO,GACX,EAAE,SAAS,GAAQ,GAAY,IAAI,CAC9C,EACA,GAAW,EAAG,CAAC,EACf,GAAM,IAAiB,EAAQ,sBAAsB,EACrD,UAAW,GAAa,KAAO,GAAe,KAAM,GAAa,IAAM,GAAe,GAAG,EACzF,EAAE,KAAK,EAAc,CAAO,EAAG,EAAE,eAAe,EACzC,CACH,UACA,aACJ,CACJ,CACA,WAAyB,EAAM,EAAU,CAAC,EAAG,CAEzC,GADA,EAAO,EAAS,CAAI,EAChB,EAAM,CACN,GAAM,GAAW,CACb,EAAE,WAAW,CAAI,EACjB,IAAM,EAAE,aAAa,OAAQ,CAAI,CACrC,EAAE,KAAK,EACP,MAAO,GAAE,IAAI,EAAU,CAAO,CAClC,CACJ,CACA,WAAkB,EAAO,CACrB,MAAO,IAAO,QAAQ,KAAM,EAAE,CAClC,CACA,YAA8B,EAAc,CACxC,GAAM,GAAiB,SAAS,cAChC,GAAI,GAAG,SAAS,SAAS,EAAc,CAAc,EACjD,MAAO,EAEf,CACA,GAAM,IAAe,CAAC,iBAAkB,eAAgB,aAAc,WAAW,EACjF,WAAyB,EAAM,EAAK,CAAC,EAAG,CACpC,OAAS,KAAO,IACZ,GAAI,CACA,EAAG,GAAO,EAAK,EACnB,MACA,CACA,CAEJ,MAAO,EACX,CACA,MAAO,CACH,SACA,aACA,eACA,kBACA,SACA,IAAK,GACL,QAAS,GACT,OAAQ,EACR,GAAI,OAAO,CAAE,MAAO,GAAQ,CAAG,EAC/B,YACA,aACA,UACA,qBACA,aACA,gBACA,WACA,YACA,eACA,aACA,MAAO,EACP,WACA,gBACA,wBACA,kBACA,aACJ,CACJ,EAAG,EACH,GAAG,MAAQ,GAAG,SAAS,MACvB,GAAG,OAAS,GAAG,SAAS,MAGlB,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,IAAM,CAEb,GAAG,OAAU,UAAY,CACrB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAmB,GAAI,IAAG,iBAAiB,QAAQ,EACnD,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,SAAU,IACV,OAAQ,OACR,QAAS,CAAC,WAAW,kCAAkC,EAAE,OAC7D,EAAE,EACE,EAAkB,GAAI,IAAG,SAAS,YAAa,CAAe,EAC9D,EAAmB,GAAI,IAAG,SAAS,aAAc,EAAgB,EACrE,YAAiB,CACb,EAAiB,MAAM,CAC3B,CACA,YAAqB,CACjB,MAAO,GAAO,OAClB,CACA,WAAiB,EAAS,EAAW,EAAS,CAC1C,EAAU,GAAG,SAAS,IAAI,CAAO,EACjC,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAI,GAAc,EAAgB,CAAS,EACrC,EAAU,EAAY,EAAS,EAAW,CAAO,EAEvD,GADA,EAAc,GAAG,MAAM,QAAQ,CAAW,EACtC,EAAS,CACT,GAAM,GAAS,IAAM,EAAY,EAAS,CAAO,EACjD,MAAO,GAAiB,cAAc,EAAS,EAAQ,CAAO,CAClE,KAEI,OAAO,GAAY,EAAS,CAAS,CAE7C,CACA,WAAqB,EAAS,EAAuB,EAAS,CAC1D,SAAY,CAAO,EACZ,EAAU,GAAK,CAAC,EAAO,CAAqB,GAAM,EAAQ,SAAW,GAAM,CAAC,EAAE,YAAY,CAAO,CAC5G,CACA,WAAqB,EAAS,EAAW,CACrC,MAAI,GAAE,UAAU,CAAS,GACrB,EAAE,SAAS,EAAS,CAAS,EAE1B,QAAQ,QAAQ,CAC3B,CACA,WAAoB,EAAS,EAAW,EAAS,CAC7C,MAAI,IAAG,QAAQ,QACX,GAAY,GAAG,QAAQ,iBAAiB,CAAS,GACrD,EAAU,CAAE,GAAG,EAAS,YAAa,EAAiB,WAAY,EAE3D,AADe,GAAI,IAAG,cAAc,EAAS,EAAW,CAAO,EACjD,MAAM,CAC/B,CACA,WAAqB,EAAS,CAC1B,EAAQ,SAAW,EAAO,OAC1B,EAAQ,WAAa,EAAO,QAChC,CACA,WAAgB,EAAS,CACrB,MAAO,GAAiB,OAAO,CAAO,CAC1C,CACA,WAAe,EAAY,EAAY,EAAkB,EAAS,CAC9D,EAAU,EAAE,QAAQ,CAAO,EAC3B,EAAY,CAAO,EACnB,EAAa,GAAG,SAAS,IAAI,CAAU,EACvC,EAAa,GAAG,SAAS,IAAI,CAAU,EACvC,GAAI,GAAe,GAAiB,CAAgB,EAC9C,EAAY,EAAY,EAAY,EAAc,CAAO,EAC/D,EAAe,GAAG,MAAM,QAAQ,CAAY,EAC5C,GAAM,GAAc,EAAE,SAAS,EAAS,aAAa,GAAK,EAAE,KACtD,GAAc,EAAE,SAAS,EAAS,aAAa,GAAK,EAAE,KACtD,EAAe,EAAE,SAAS,EAAS,cAAc,GAAK,EAAE,KACxD,EAAc,EAAE,SAAS,EAAS,aAAa,GAAK,EAAE,KACtD,EAAY,EAAE,SAAS,EAAS,WAAW,GAAK,EAAE,KAExD,GADA,EAAY,EACR,EAAW,CACX,GAAI,EAAiB,SAAS,CAAU,GAAM,EAAQ,cAAgB,GAClE,MAAO,GAAa,EAAY,EAAY,CAAO,EAEvD,GAAG,KAAK,aAAc,kDAAmD,EAAY,EAAY,EAAkB,EAAQ,QAAQ,EACnI,GAAM,GAAW,GAAG,SAAS,IAAI,CAAU,EACrC,EAAwB,EAAS,UACjC,GAAY,GAAG,SAAS,WAAW,EAAY,CACjD,cAAe,CACX,EAAE,aAAa,EAAY,CAAU,EACrC,GAAY,CAChB,CACJ,CAAC,EACK,GAAY,gBAAkB,CAChC,EAAU,EACV,GAAM,GAAuB,EAAS,UACtC,GAAU,WAAW,EAAG,EAAuB,CAAqB,EACpE,KAAM,GAAa,EAAY,EAAY,CAAO,EAClD,EAAa,EACb,GAAU,OAAO,OAAO,EACxB,EAAY,CAChB,EACA,MAAO,GAAiB,cAAc,CAAC,EAAY,CAAU,EAAG,GAAW,CAAO,CACtF,KAEI,UAAa,EACb,GAAqB,EAAY,CAAU,EAC3C,GAAY,EACZ,EAAY,EACZ,EAAU,EACH,QAAQ,QAAQ,CAE/B,CACA,YAA0B,EAAO,CAC7B,GAAI,GAAO,CAAK,EAGX,MAAI,GAAE,WAAW,CAAK,EAChB,EAEF,EAAE,QAAQ,CAAK,EACb,GAAoB,GAAG,CAAK,EAE9B,EAAE,SAAS,CAAK,GAAK,EAAM,SAAS,GAAG,EACrC,GAAoB,GAAG,EAAM,MAAM,GAAG,CAAC,EAGvC,EAAiB,IAAI,CAAK,CAEzC,CACA,YAA6B,EAAc,EAAc,CACrD,GAAI,CAAC,EAAO,CAAY,GAAK,CAAC,EAAO,CAAY,EAAG,CAChD,GAAM,GAAiB,EAAgB,CAAY,GAAK,EAAE,UACpD,EAAiB,EAAgB,CAAY,GAAK,EAAE,UAC1D,MAAO,CAAC,EAAY,EAAY,IAAY,QAAQ,IAAI,CACpD,EAAe,EAAY,CAAO,EAClC,EAAe,EAAY,CAAO,CACtC,CAAC,CACL,CACJ,CACA,WAAyB,EAAO,CAC5B,GAAI,GAAO,CAAK,EAGX,MAAI,GAAE,WAAW,CAAK,EAChB,EAEF,EAAE,UAAU,CAAK,EACf,CAAC,EAAS,IAAY,EAAW,EAAS,EAAO,CAAO,EAGxD,EAAgB,IAAI,CAAK,CAExC,CACA,GAAM,IAAuB,GAAG,SAAS,SAAU,EAAY,EAAY,CACvE,EAAW,YAAY,CAAU,CACrC,CAAC,EACD,WAAuB,EAAS,EAAS,EAAe,CACpD,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAI,GAAS,GAAI,IAAG,cAAc,EAAS,EAAS,CAAa,EACjE,SAAO,gBAAgB,WAAW,EAClC,EAAO,gBAAgB,YAAY,EACnC,EAAO,OAAO,QAAQ,EACtB,EAAO,OAAO,UAAU,EACjB,CACX,CACA,GAAG,GAAG,oBAAqB,UAAY,CACnC,AAAK,EAAU,GACX,GAAG,KAAK,YAAa,yBAAyB,CAEtD,CAAC,EACD,WAAgB,EAAuB,CACnC,MAAO,CAAC,GAAyB,IAA0B,MAC/D,CACA,WAAkC,EAAM,EAAM,EAAI,CAC9C,EAAgB,IAAI,EAAM,SAAU,EAAS,EAAS,CAClD,SAAQ,MAAM,QAAU,EACjB,EAAW,EAAS,CAAE,QAAS,CAAG,EAAG,CAAO,CACvD,CAAC,CACL,CACA,EAAyB,UAAW,EAAG,CAAC,EACxC,EAAyB,WAAY,EAAG,CAAC,EACzC,WAAsB,EAAI,EAAI,CAC1B,MAAO,CAAE,UAAW,aAAa,QAAS,MAAQ,CACtD,CACA,aAA0B,CACtB,MAAO,CAAE,UAAW,EAAG,CAC3B,CACA,WAAyB,EAAS,CAC9B,SAAE,SAAS,EAAS,GAAe,CAAC,EAC7B,EAAQ,sBAAsB,CACzC,CACA,WAAgC,EAAW,EAAgB,CACvD,GAAM,GAAkB,WAAW,IAC7B,EAAoB,aAAa,IACvC,EAAgB,IAAI,EAAiB,SAAU,EAAS,EAAS,CAC7D,GAAM,GAAM,EAAgB,CAAO,EAC7B,GAAY,EAAe,CAAG,EACpC,MAAO,GAAW,EAAS,GAAW,CAAO,CACjD,CAAC,EACD,EAAgB,IAAI,EAAmB,SAAU,EAAS,EAAS,CAC/D,GAAM,GAAM,EAAgB,CAAO,EAC7B,GAAY,EAAe,CAAG,EACpC,SAAE,SAAS,EAAS,EAAS,EACtB,EAAW,EAAS,GAAe,EAAG,CAAO,CACxD,CAAC,CACL,CACA,SAAuB,MAAO,SAAU,EAAK,CACzC,GAAM,GAAiB,EAAI,IAAM,EAAI,OACrC,MAAO,GAAa,EAAG,CAAC,CAAc,CAC1C,CAAC,EACD,EAAuB,SAAU,SAAU,EAAK,CAC5C,GAAM,GAAiB,GAAG,SAAS,WAAW,EAAI,EAAI,IACtD,MAAO,GAAa,EAAG,CAAc,CACzC,CAAC,EACD,EAAuB,OAAQ,SAAU,EAAK,CAC1C,GAAM,GAAiB,EAAI,KAAO,EAAI,MACtC,MAAO,GAAa,CAAC,EAAgB,CAAC,CAC1C,CAAC,EACD,EAAuB,QAAS,SAAU,EAAK,CAC3C,GAAM,GAAiB,GAAG,SAAS,UAAU,EAAI,EAAI,KACrD,MAAO,GAAa,EAAgB,CAAC,CACzC,CAAC,EACD,EAAiB,IAAI,aAAc,CAAC,WAAY,SAAS,CAAC,EAC1D,EAAiB,IAAI,YAAa,CAAC,eAAgB,iBAAiB,CAAC,EACrE,EAAiB,IAAI,aAAc,CAAC,gBAAiB,gBAAgB,CAAC,EACtE,EAAiB,IAAI,UAAW,CAAC,cAAe,kBAAkB,CAAC,EACnE,EAAiB,IAAI,YAAa,CAAC,iBAAkB,eAAe,CAAC,EACrE,GAAG,GAAG,qBAAsB,CAAK,EAC1B,CACH,QACA,UACA,SACA,aAAc,CAAE,MAAO,GAAiB,WAAa,EACrD,WAAY,EAAiB,IAC7B,UAAW,EAAgB,IAC3B,SACA,YACA,SACA,cACA,wBACA,eACJ,CACJ,EAAG,EACH,GAAG,WAAa,GAAG,OAAO,WAC1B,GAAG,UAAY,GAAG,OAAO,UACzB,GAAG,MAAQ,GAAG,OAAO,MACrB,GAAG,QAAU,GAAG,OAAO,OAGjB,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,EAAE,EACtB,GAAM,GAAI,GAAG,KACb,GAAG,QAAW,UAAY,CACtB,GAAM,GAAS,GAAI,IAAG,OAAO,IAAO,EAChC,YAAa,EACb,WAAY,GACZ,UAAW,GACX,eAAgB,KAChB,cAAe,KACf,UAAW,IACX,KAAK,EAAU,CAAE,MAAQ,GAAS,OAAS,KAAO,EAAS,OAAS,MAAQ,EAAS,SAAW,GAAK,EACrG,UAAU,EAAS,CAAE,MAAO,GAAQ,OAAO,CAAG,EAC9C,YAAY,EAAS,CAAE,MAAO,CAAC,EAAQ,OAAO,CAAG,EACjD,WAAY,GACZ,YAAa,GACb,QAAS,GACb,EAAE,EACI,EAAQ,GAAI,IAAG,QAAQ,MACvB,EAAQ,GAAI,IAAG,QAAQ,MACzB,EAAc,KAClB,YAAiB,CACb,EAAc,EACd,EAAM,MAAM,EACZ,EAAM,MAAM,EACZ,GAAa,QAAQ,EACrB,EAAc,IAClB,CACA,cAAwB,EAAM,CAC1B,GAAM,GAAU,EAAoB,CAAI,EAClC,GAAU,GAAI,IAAG,QAAQ,CAAO,EACtC,SAAe,EAAO,EACf,EACX,CACA,WAA6B,EAAM,CAC/B,GAAI,GAAU,EAAE,oBAAoB,EAAM,KAAK,EAC/C,UAAG,QAAQ,uBAAuB,CAAO,EAClC,CACX,CACA,WAAwB,EAAS,CAC7B,EAAM,OAAO,EAAQ,aAAe,EAAE,WAAW,EAAO,YAAa,CAAO,GAAK,EAAK,EACtF,EAAM,MAAM,EAAQ,YAAc,EAAE,WAAW,EAAO,WAAY,CAAO,GAAK,EAAK,EACnF,EAAiB,CAAO,GAAK,EAAa,CAAO,CACrD,CACA,WAA0B,EAAY,CAClC,GAAI,GACJ,GAAI,EAAW,UAAU,GAAM,GAAgB,EAAM,IAAI,CAAU,GAC/D,UAAG,KAAK,eAAgB,kCAAmC,EAAW,WAAW,EAC5E,EAAW,YACZ,EAAM,oBAAoB,CAAa,EAE3C,EAAc,cAAc,CAAU,EACtC,EAAM,MAAM,EAAe,EAAY,CAAE,eAAgB,CAAe,CAAC,EAClE,EAEf,CACA,WAAsB,EAAS,CAC3B,SAAc,CAAO,EACrB,EAAM,KAAK,CAAO,EACX,EACX,CACA,WAAuB,EAAS,CAC5B,AAAI,EAAQ,UAAU,GAClB,GAAM,IAAI,CAAO,EACjB,EAAQ,UAAY,IAAM,EAAM,QAAQ,CAAO,GAEnD,EAAE,OAAO,EAAS,SAAU,EAAiB,CACzC,EAAM,OAAO,EAAgB,aAAe,GAAO,CAAE,OAAQ,CAAQ,CAAC,EACtE,EAAM,MAAM,EAAgB,YAAc,GAAO,CAAE,OAAQ,CAAQ,CAAC,EACpE,GAAI,IAAa,YAA2B,IAAG,SAC3C,EAAiB,CAAC,GAClB,EAAoB,IAAc,EAAgB,GAClD,EAAkB,IAAc,CAAC,EAAgB,GACjD,EAAkB,IAAc,EAAgB,KAChD,EAAkB,IAAc,EAAgB,gBACpD,AAAI,EACA,EAAM,MAAM,EAAQ,GAAG,EAEtB,AAAI,GAAkB,EACvB,EAAM,MAAM,CAAO,EAEd,GACD,GAAM,IAAI,CAAO,GACjB,EAAM,IAAI,CAAO,EAEjB,GAAoB,GAAgB,UAAU,GAAK,EAAM,IAAI,CAAe,IAC5E,EAAM,IAAI,CAAe,EAGrC,CAAC,CACL,CACA,aAAkB,CACd,MAAO,GAAM,OAAO,CACxB,CACA,YAAkB,EAAe,CAC7B,GAAI,IAAG,QAAQ,CAAa,EAAE,SAAS,CAC3C,CACA,cAA0B,EAAM,CAC5B,GAAG,QAAQ,sBAAsB,CAAI,EACrC,EAAM,MAAM,GAAG,CAAI,CACvB,CACA,YAAsB,EAAQ,CAC1B,MAAO,GAAE,SAAS,CAAC,MAAO,UAAW,MAAM,EAAG,EAAE,gBAAgB,CAAM,CAAC,CAC3E,CACA,YAAkB,CACd,AAAI,EAAE,WAAW,EAAO,WAAW,GAC/B,GAAc,GAAI,IAAG,YAE7B,CACA,YAAqB,CACjB,GAAa,SAAS,CAC1B,CACA,UAAG,GAAG,kBAAmB,CAAM,EAC/B,GAAG,GAAG,qBAAsB,CAAS,EACrC,GAAG,GAAG,qBAAsB,CAAK,EAC1B,CACH,QAAS,EACT,QACA,UACA,gBACA,SACA,MAAO,EACP,QACA,WACJ,CACJ,EAAG,EACH,GAAG,QAAU,GAAG,QAAQ,QACxB,GAAG,MAAQ,GAAG,QAAQ,KAGhB,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,EAAE,EACtB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACb,GAAG,MAAS,UAAY,CACpB,GAAM,GAAgB,CAClB,GAAG,MAAM,KACT,GAAG,MAAM,MACT,GAAG,MAAM,MACT,GAAG,MAAM,OACT,GAAG,MAAM,KACb,EACM,EAAS,GAAI,IAAG,OAAO,UAAY,CACrC,GAAM,GAAY,CACd,KAAM,QACN,IAAK,CACD,YAAa,CACT,eACA,OACA,QACJ,CACJ,EACA,KAAM,CACF,YAAa,CAAC,iBAAiB,EAC/B,QAAS,EACb,EACA,QAAS,CACL,YAAa,CAAC,oBAAoB,EAClC,cAAe,UACf,eAAgB,WAChB,aAAc,OACd,iBAAkB,iBAClB,YAAa,GACb,QAAS,OACT,UAAW,EACf,EACA,MAAO,CACH,YAAa,CAAC,kBAAkB,CACpC,EACA,OAAQ,CACJ,YAAa,CAAC,mBAAmB,EACjC,SAAU,GACV,SAAU,OACV,KAAM,SACN,cAAc,EAAO,CACjB,OAAQ,EAAM,cACL,OAAQ,MAAO,qBACf,QAAS,MAAO,kBAE7B,EACA,eAAe,EAAO,CAClB,OAAQ,EAAM,cACL,OAAQ,MAAO,mBACf,QAAS,MAAO,gBAE7B,CACJ,EACA,MAAO,CACH,YAAa,CAAC,kBAAkB,EAChC,SAAU,GACV,KAAM,QACV,EACA,MAAO,CACH,YAAa,CAAC,kBAAkB,EAChC,SAAU,SACV,KAAM,SACN,MAAO,OACP,YAAa,cACb,UAAW,EACf,EACA,wBAAyB,CAAC,QAAQ,CACtC,EACA,OAAS,KAAS,GACd,EAAU,EAAM,MAAM,MAAQ,EAElC,MAAO,EACX,CAAC,EACG,EAAQ,KACR,EAAW,CAAC,EAChB,WAAqB,EAAM,CACvB,MAAO,GAAE,QAAQ,EAAY,CAAI,EAAG,aAAa,CACrD,CACA,WAAqB,EAAM,CACvB,MAAI,KAAS,OACF,CAAC,EAAO,KAAM,EAAO,GAAG,EAGxB,CAAC,EAAO,GAAO,EAAO,QAAS,EAAO,GAAG,CAExD,CACA,WAA8B,EAAS,CACnC,GAAI,IAAQ,gBAAiB,IAAG,OAGhC,GADA,GAAG,QAAQ,qBAAqB,CAAO,EACnC,EAAE,QAAQ,EAAQ,KAAK,EAAG,CAC1B,GAAI,GAAQ,OAAO,EAAQ,KAAK,EAAE,MAAM,8BAA8B,EACtE,GAAI,EAAO,CACP,EAAQ,MAAQ,MAChB,GAAM,GAAa,EAAM,GACnB,EAAgB,EAAM,GAC5B,EAAQ,OAAS,GAAiB,EAAO,KACzC,AAAI,IAAe,OACX,GAAG,MAAM,UAAU,GACnB,GAAQ,UAAY,UAGnB,IAAe,WACpB,GAAQ,UAAY,OAE5B,CACJ,KACK,AAAI,GAAE,cAAc,EAAQ,MAAM,EACnC,EAAQ,MAAQ,EAAM,IAAI,EAAQ,OAAQ,CAAE,sBAAuB,EAAM,CAAC,EAEzE,AAAI,EAAQ,OACb,EAAQ,MAAQ,SAGhB,EAAQ,MAAQ,SAExB,CACA,WAA4B,EAAS,CACjC,AAAI,EAAQ,oBAAqB,IAAG,OAEpC,GAAQ,UAAY,EAAM,IAAI,UAAW,CAAE,GAAG,EAAS,sBAAuB,EAAM,CAAC,EACzF,CACA,WAA0B,EAAS,CAC/B,EAAqB,CAAO,EAC5B,EAAQ,UAAY,CAAC,EACrB,EAAmB,CAAO,CAC9B,CACA,WAAe,EAAS,EAAW,CAC/B,GAAM,CAAE,QAAS,EACX,CAAE,SAAU,EAAO,GACnB,EAAU,EAAE,QAAQ,EAAY,CAAI,CAAC,EACvC,EAAyB,GAAG,QAAQ,kBACxC,MAAI,IACA,EAAQ,QAAQ,CAAsB,EAE1C,EAAQ,gBAAkB,EAAE,SAAS,EAAS,WAAW,EACzD,EAAU,EAAE,aAAa,GAAG,EAAS,CAAE,OAAM,OAAM,EAAG,CAAO,EACzD,GACA,GAAU,EAAU,CAAO,GAExB,GAAI,GAAM,CAAO,CAC5B,CACA,YAA0B,EAAM,EAAM,CAClC,MAAO,GAAE,aAAa,EAAM,EAAM,CAAE,YAAa,CAAC,OAAO,CAAE,CAAC,CAChE,CACA,YAA2B,EAAM,EAAM,CACnC,MAAO,GAAE,aAAa,EAAM,EAAM,CAAE,YAAa,CAAC,QAAS,QAAS,UAAU,CAAE,CAAC,CACrF,CACA,YAAiB,CACb,EAAM,MAAM,EACZ,EAAW,EAAE,OAAO,EAAU,WAAW,CAC7C,CACA,kBAAoB,EAAS,CACzB,SAAU,EAAE,QAAQ,EAAS,CACzB,MAAO,MACP,sBAAuB,GACvB,SAAU,EACd,CAAC,EAEM,AADM,MAAM,IAAG,OAAO,CAAO,GACtB,KAClB,CACA,WAAa,EAAS,CAClB,MAAO,IAAI,SAAQ,SAAU,EAAS,EAAQ,CAC1C,EAAU,CACN,GAAG,EACH,WAAY,AAAC,GAAU,EAAQ,EAAM,KAAK,EAC1C,YAAa,AAAC,GAAU,EAAO,EAAM,KAAK,CAC9C,EACA,GAAK,CAAO,CAChB,CAAC,CACL,CACA,YAAuB,CACnB,MAAO,GAAE,IAAI,EAAe,AAAC,GAAU,EAAM,SAAS,CAAC,EAAE,KAAK,CAClE,CACA,WAAwB,EAAQ,CAC5B,MAAI,GAAE,SAAS,CAAM,EACV,UAAU,KAGV,EAAO,SAAS,CAE/B,CACA,WAAgC,EAAS,CACrC,GAAI,GAAW,EAAO,SAAS,yBAAyB,EACxD,MAAO,CAAC,CAAE,IAAY,EAAQ,QAAQ,CAAQ,EAClD,CACA,GAAG,GAAG,wBAAyB,UAAY,CACvC,EAAM,KAAK,CACf,CAAC,EACD,GAAG,GAAG,sBAAuB,UAAY,CACrC,EAAQ,GAAI,IAAG,UACnB,CAAC,EACD,GAAG,GAAG,qBAAsB,CAAK,EACjC,GAAM,IAAM,CACR,SACA,cACA,QACA,QACA,MACA,mBACA,oBACA,qBACA,cACA,iBACA,GAAI,QAAQ,CAAE,MAAO,GAAM,MAAQ,EACnC,wBACJ,EACA,SAAE,SAAS,GAAK,CACZ,MACA,SACA,OACA,WACA,UACA,QACA,OACA,QACA,iBACJ,EAAG,IAAM,CAAK,EACd,EAAE,SAAS,GAAK,CACZ,SACA,UACA,SACA,YACA,UACA,KACA,MACA,OACA,SACA,UACA,WACA,OACA,UACA,UACA,WACA,OACA,OACJ,EAAG,IAAM,EAAM,OAAO,EACf,EACX,EAAG,CAGG,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,CAAC,EAAyB,EAA0B,IAAwB,CAEnF,EAAoB,EAAE,EACtB,GAAG,KAAQ,UAAY,CACnB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACT,EAAuB,KACvB,EAAsB,KACtB,EAAoB,KAClB,EAAwB,6CACxB,EAA0B,GAAG,4DAC7B,EAA8B,kBAC9B,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,gBAAiB,CAAC,cAAe,QAAQ,IAA0B,EACnE,kBAAmB,CAAC,oBAAqB,cAAe,YAAa,yBAA0B,qBAAsB,kBAAmB,oBAAoB,KAA0B,EAAE,oBAAoB,MAAM,EAAG,EAAE,oBAAoB,SAAS,CAAC,EACrP,iBAAkB,CAAC,cAAc,EACjC,mBAAoB,CAAC,qBAAsB,WAAW,EACtD,iBAAkB,CAAC,cAAc,EACjC,mBAAoB,CAAC,oBAAoB,EACzC,mBAAoB,CAAC,iBAAkB,cAAe,YAAa,cAAe,eAAgB,QAAQ,IAA0B,EACpI,qBAAsB,CAAC,uBAAwB,CAA2B,EAC1E,aAAc,EAClB,EAAE,EACF,WAA2B,EAAM,CAC7B,MAAO,CAAC,GAAG,QAAQ,aAAa,GAAK,CAAC,EAAa,CAAI,GAAK,CAAC,EAAU,CAAI,CAC/E,CACA,WAAmB,EAAM,CACrB,GAAM,GAAU,GAAoB,CAAI,EACxC,GAAI,EAAQ,IACR,MAAI,GAAQ,OAAS,MACjB,GAAQ,MAAQ,QAEpB,EAAQ,MAAQ,GAET,AADS,GAAI,IAAG,QAAQ,CAAO,EACvB,UAAU,CAEjC,CACA,YAAiB,CACb,EAAuB,KACvB,EAAsB,KACtB,EAAoB,IACxB,CACA,GAAM,IAAS,GAAG,SAAS,SAAU,EAAM,EAAS,EAAe,CAC/D,MAAO,IAAG,OAAO,EAAc,EAAM,EAAS,CAAa,CAAC,CAChE,CAAC,EACD,YAA6B,EAAM,EAAS,EAAe,CACvD,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAM,GAAS,GAAI,IAAG,cAAc,EAAM,EAAS,CAAE,GAAG,EAAe,KAAM,EAAM,CAAC,EACpF,SAAQ,IAAM,EAAU,EAAM,CAAO,EACrC,EAAQ,OAAS,EAAa,EAAM,CAAO,EAC3C,EAAO,KAAK,SAAS,EACrB,EAAO,KAAK,QAAQ,EACpB,EAAO,gBAAgB,OAAO,EAC9B,EAAO,gBAAgB,aAAa,EACpC,EAAO,gBAAgB,YAAY,EACnC,EAAO,gBAAgB,YAAY,EACnC,EAAO,gBAAgB,OAAO,EAC9B,EAAO,QAAQ,WAAW,EAC1B,EAAO,QAAQ,YAAY,EAC3B,EAAO,OAAO,aAAa,EAC3B,EAAO,gBAAgB,WAAW,EAClC,EAAO,OAAO,SAAS,EACvB,EAAO,gBAAgB,MAAM,EACtB,CACX,CACA,WAAuB,EAAM,EAAS,EAAe,CACjD,EAAO,GAAG,SAAS,IAAI,CAAI,EAC3B,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAM,GAAS,GAAI,IAAG,cAAc,EAAM,EAAS,CAAE,KAAM,GAAM,GAAG,CAAc,CAAC,EACnF,SAAO,QAAQ,EAAmB,EAClC,EAAQ,SAAW,EACnB,EAAO,QAAQ,WAAY,CAAE,QAAS,EAAK,CAAC,EAC5C,EAAO,OAAO,UAAW,CAAE,KAAM,CAAC,aAAc,cAAc,CAAE,CAAC,EACjE,EAAO,OAAO,QAAQ,EACtB,EAAO,gBAAgB,UAAU,EACjC,EAAO,OAAO,OAAO,EACrB,EAAO,OAAO,UAAU,EACxB,EAAO,OAAO,UAAU,EACxB,EAAO,OAAO,SAAS,EACvB,EAAO,QAAQ,OAAQ,CAAE,KAAM,aAAc,CAAC,EAC9C,EAAO,QAAQ,SAAU,CAAE,KAAM,eAAgB,CAAC,EAClD,EAAO,KAAK,OAAQ,CAAE,KAAM,aAAc,CAAC,EAC3C,EAAO,SAAS,UAAU,EAC1B,EAAO,SAAS,aAAc,CAAE,QAAS,QAAS,CAAC,EACnD,EAAO,SAAS,aAAc,CAAE,QAAS,QAAS,CAAC,EACnD,EAAO,SAAS,YAAa,CAAE,QAAS,OAAQ,CAAC,EACjD,EAAO,SAAS,UAAW,CAAE,QAAS,OAAQ,CAAC,EAC/C,EAAO,QAAQ,MAAM,EACrB,EAAO,OAAO,OAAO,EACrB,EAAO,OAAO,WAAW,EACzB,EAAO,KAAK,SAAS,EACrB,EAAO,OAAO,MAAM,EACpB,EAAO,OAAO,OAAO,EACrB,EAAO,OAAO,UAAU,EACxB,EAAO,OAAO,OAAO,EACrB,EAAO,OAAO,MAAM,EACpB,EAAO,gBAAgB,aAAa,EACpC,EAAO,MAAM,GAAG,MAAM,iBAAkB,UAAU,EAClD,EAAO,MAAM,GAAG,MAAM,kBAAmB,YAAY,EACrD,EAAO,MAAM,GAAG,MAAM,kBAAmB,aAAa,EACtD,EAAO,OAAO,aAAa,EAC3B,EAAO,OAAO,cAAc,EAC5B,EAAO,OAAO,gBAAgB,EAC9B,EAAO,OAAO,iBAAiB,EAC/B,EAAO,gBAAgB,gBAAgB,EACvC,EAAO,OAAO,aAAa,EAC3B,EAAO,OAAO,eAAe,EAC7B,EAAO,QAAQ,GAAG,OAAO,aAAa,EACtC,EAAO,gBAAgB,OAAO,EAC9B,EAAO,gBAAgB,cAAc,EACrC,EAAO,QAAQ,YAAY,EAC3B,EAAO,QAAQ,WAAW,EAC1B,EAAO,gBAAgB,QAAQ,EAC/B,EAAO,QAAQ,WAAW,EAC1B,EAAO,OAAO,WAAW,EACzB,EAAO,OAAO,eAAe,EAC7B,EAAO,OAAO,YAAY,EAC1B,EAAO,OAAO,gBAAgB,EAC9B,EAAO,gBAAgB,SAAS,EAChC,EAAO,gBAAgB,UAAU,EACjC,EAAO,gBAAgB,OAAO,EAC9B,EAAO,QAAQ,UAAU,EACzB,EAAO,gBAAgB,MAAM,EAC7B,EAAO,QAAQ,GAAG,OAAO,aAAa,EACtC,EAAQ,aAAe,GAAG,MAAM,MAAM,iBAAkB,CAAE,IAAK,CAAC,oBAAqB,CAAI,CAAE,CAAC,EACrF,CACX,CACA,YAAiB,EAAM,EAAS,CAC5B,EAAO,GAAG,SAAS,IAAI,CAAI,EAC3B,GAAI,GAAQ,EAAa,CAAI,EAC7B,GAAI,EACA,MAAO,SAAQ,OAAO,GAAI,IAAG,MAAM,CAAK,CAAC,EAE7C,GAAM,GAAa,GAAG,MAAM,MAAM,kBAAmB,CAAE,IAAK,CAAC,qBAAsB,CAAI,CAAE,CAAC,EAC1F,MAAO,IAAO,EAAM,CAChB,MAAO,GACP,UAAW,GACX,WAAY,GACZ,MAAO,GACP,GAAG,EACH,GAAG,GAAG,cAAc,sBACpB,GAAG,GAAG,cAAc,YACpB,aACA,QAAS,EACb,CAAC,CACL,CACA,WAAsB,EAAM,CACxB,GAAI,CAAC,EAAO,CAAI,EACZ,MAAO,iCAEf,CACA,WAAsB,EAAM,EAAU,CAAC,EAAG,CACtC,MAAO,GAAE,gBAAgB,EAAQ,QAAU,EAAK,aAAa,WAAW,GAAK,EAAK,aAAa,aAAa,CAAC,CACjH,CACA,WAAmB,EAAM,EAAU,CAAC,EAAG,CACnC,GAAM,GAAM,EAAQ,KAAO,EAAK,aAAa,SAAS,GAAK,EAAK,aAAa,MAAM,EACnF,GAAI,IAAQ,IACR,MAAO,EAEf,CACA,WAAsB,EAAM,CACxB,SAAO,GAAG,SAAS,IAAI,CAAI,EACpB,EAAO,QAAQ,EAAM,iBAAiB,CACjD,CACA,YAAwB,EAAM,CAC1B,AAAK,EAAa,CAAI,GAClB,EAAK,aAAa,YAAa,EAAE,CAEzC,CACA,WAAuB,EAAS,CAC5B,GAAI,GAAO,EAAQ,QAAQ,gBAAgB,EAAI,OAAS,SACxD,EAAE,gBAAgB,EAAS,CACvB,SAAU,IACV,OACA,eAAgB,EACpB,CAAC,EACD,EAAQ,iBAAiB,UAAW,SAAU,EAAO,CACjD,GAAK,EAAM,MAAQ,SAAa,EAAQ,OAAS,UAAY,EAAM,MAAQ,QACvE,MAAO,GAAmB,CAAK,CAEvC,CAAC,CACL,CACA,GAAG,MAAM,EAAO,WAAW,oBAAoB,EAAG,CAAa,EAC/D,WAA2B,EAAO,EAAM,CACpC,GAAI,EAAM,iBACN,MAAO,GAEX,GAAM,GAAuB,mBAAmB,GAAG,KAAK,cAAc,IAChE,EAAe,EAAM,OAAO,QAAQ,CAAoB,EAC9D,MAAO,CAAC,GAAiB,IAAiB,CAC9C,CACA,WAAmB,EAAkB,CACjC,GAAM,GAAU,EAAiB,QAAQ,EAAO,SAAS,kBAAkB,CAAC,EAC5E,MAAO,IAAW,CAAC,EAAkB,CAAO,CAChD,CACA,WAA2B,EAAM,CAC7B,MAAO,GAAO,QAAQ,EAAM,oBAAoB,GAAK,EAAO,QAAQ,EAAM,mBAAmB,CACjG,CACA,WAAuB,EAAO,CAC1B,EAAM,GAAG,QAAS,SAAU,EAAO,EAAS,CACxC,AAAI,GAAG,MAAM,WAAW,CAAK,GAG7B,CAAI,EAAU,CAAO,GAAK,IAAsB,EAC5C,GAAG,MAAM,KAAK,CAAK,EAEd,IAAG,MAAM,cAAgB,OAAS,GAAG,MAAM,iBAAiB,CAAK,GAAM,EAAM,mBAAmB,CAAK,GAAK,CAAC,EAAgB,CAAK,IACrI,EAAmB,CAAK,EAE5B,EAAsB,KACtB,EAAoB,KACxB,CAAC,EACD,EAAM,GAAG,aAAc,CAAE,QAAS,EAAK,EAAG,SAAU,EAAO,EAAS,CAChE,EAAuB,CAC3B,CAAC,EACD,EAAM,GAAG,YAAa,SAAU,EAAO,EAAS,CAC5C,AAAI,GAAG,MAAM,WAAW,CAAK,GAG7B,GAAsB,EAClB,EAAU,CAAO,GAAK,CAAC,EAAoB,CAAK,GAChD,GAAoB,EACpB,EAAmB,CAAK,GAE5B,EAAuB,KAC3B,CAAC,CACL,CACA,WAA6B,EAAgB,CACzC,GAAI,GAAkB,EAAe,OACrC,MAAQ,KAAyB,GAAoB,EAAgB,QAAQ,QAAQ,CACzF,CACA,WAAyB,EAAY,CACjC,MAAO,IAAwB,IAAwB,EAAW,MACtE,CACA,WAA4B,EAAe,CACvC,GAAI,GAAiB,CAAC,UAAW,UAAW,SAAU,GAAG,GAAG,MAAM,YAAY,EACxE,EAAW,GAAG,MAAM,KAAK,EAAe,WAAY,CAAc,EACxE,GAAG,KAAK,EAAc,OAAQ,EAAU,CAAE,IAAK,EAAM,CAAC,CAC1D,CACA,WAAgB,EAAM,CAClB,GAAM,GAAS,EAAa,CAAI,EAChC,MAAO,IAAG,QAAQ,aAAa,CAAM,CACzC,CACA,YAAyB,EAAW,EAAM,EAAU,CAChD,OAAQ,OACC,SACD,EAAS,EACT,UACC,SAAU,CACX,GAAI,GAAS,EAAE,WAAW,EAAM,qBAAqB,EACrD,GAAG,SAAS,iBAAiB,EAAM,EAAU,CAAE,QAAO,CAAC,EACvD,KACJ,KACK,QACD,GAAI,IAAG,iBAAiB,EAAM,CAAQ,EACtC,UACC,SACD,MAEZ,CACA,WAAsB,EAAM,EAAS,CACjC,GAAI,GAAa,GAAG,MAAM,MAAM,mBAAoB,CAAE,IAAK,CAAC,sBAAuB,CAAI,CAAE,CAAC,EACtF,EAAgB,CAChB,SAAU,GACV,aACA,GAAG,CACP,EAOA,MAAO,IAAO,EAAM,EAAe,CAAE,SANtB,CACX,OAAQ,UACR,MAAO,OACP,WAAY,OACZ,SAAU,EACd,CAC8C,CAAC,CACnD,CACA,UAAG,UAAU,WAAY,CAAE,aAAc,QAAS,EAAG,SAAU,EAAM,EAAW,CAE5E,GAAgB,EAAW,EADd,AAAC,GAAY,GAAG,MAAM,wBAAwB,EAAa,EAAM,CAAO,CAAC,CAC/C,CAC3C,CAAC,EACD,GAAG,GAAG,WAAY,EAAO,WAAW,iBAAiB,EAAG,SAAU,EAAO,EAAM,CAC3E,AAAI,EAAkB,EAAO,CAAI,GAC7B,IAAG,MAAM,KAAK,EAAO,CAAE,IAAK,EAAK,CAAC,EAClC,GAAG,MAAM,EAAM,CAAE,cAAe,EAAK,CAAC,EACtC,GAAG,MAAM,wBAAwB,GAAO,CAAI,CAAC,EAErD,CAAC,EACD,GAAG,UAAU,YAAa,CAAE,aAAc,eAAgB,MAAO,EAAK,EAAG,SAAU,EAAM,EAAmB,CACxG,GAAI,GAAY,EAAE,IAAI,EAAM,CAAiB,EAC7C,AAAI,GACA,GAAE,gBAAgB,EAAM,CACpB,UAAW,EAAE,KAAK,EAAW,MAAM,EACnC,GAAG,EAAE,QAAQ,CAAS,CAC1B,CAAC,EACD,EAAU,eAAiB,EAAK,eAAiB,CAAC,EAAM,CAAS,EACjE,EAAE,WAAW,EAAM,EAAE,UAAU,CAAS,CAAC,EACzC,GAAe,CAAI,EAE3B,CAAC,EACD,GAAG,SAAS,EAAO,WAAW,kBAAkB,EAAG,SAAU,EAAM,CAC/D,GAAI,CAAC,EAAkB,CAAI,EAAG,CAC1B,GAAI,GAAY,AAAC,GAAY,GAAG,MAAM,wBAAwB,GAAQ,EAAM,CAAO,CAAC,EAChF,EAAY,EAAE,oBAAoB,EAAM,YAAY,EACxD,AAAI,KAAc,IAAQ,EAAE,YAAY,CAAS,IAC7C,GAAY,SAChB,GAAgB,EAAW,EAAM,CAAS,CAC9C,CACJ,CAAC,EACD,GAAG,GAAG,qBAAsB,CAAK,EAC1B,CACH,UACA,gBACA,eAAgB,GAChB,WACA,kBACA,SACA,eACA,oBACA,gBACA,SACA,cACJ,CACJ,EAAG,EACH,GAAG,OAAS,GAAG,KAAK,OACpB,GAAG,SAAW,CAAE,KAAM,GAAG,KAAK,YAAa,CAGrC,EAEC,CAAC,EAAyB,EAAqB,IAAwB,CAE9E,aACA,EAAoB,EAAE,CAAmB,CAInC,EAEC,IAAM,CAEb,GAAG,KAAQ,UAAY,CACnB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,eAAgB,CAAC,kBAAmB,WAAY,QAAS,MAAM,EAC/D,eAAgB,CAAC,SAAU,wDAAyD,iDAAkD,UAAU,EAChJ,gBAAiB,CAAC,gEAAgE,EAClF,kBAAmB,CAAC,oBAAqB,WAAY,EAAE,oBAAoB,QAAQ,CAAC,EACpF,sBAAuB,CAAC,qBAAsB,oBAAqB,sBAAuB,oBAAoB,EAC9G,uBAAwB,CAAC,qBAAsB,qBAAqB,EACpE,cAAe,GACf,iBAAkB,CAAC,QAAS,QAAQ,EACpC,gBAAiB,EACjB,kBAAmB,CAAC,QAAQ,EAC5B,gBAAiB,CAAC,QAAS,QAAQ,EACnC,WAAY,AAAC,GAAS,EAAK,SAAS,IAAI,CAC5C,EAAE,EACF,WAAuB,EAAS,GAAI,CAChC,MAAO,GAAO,eAAe,IAAI,AAAC,GAAU,EAAQ,CAAM,EAAE,KAAK,CACrE,CACA,WAAiB,EAAS,CACtB,MAAO,GAAQ,QAAQ,EAAc,CAAC,CAC1C,CACA,WAAoB,EAAM,CACtB,EAAO,EAAE,IAAI,CAAI,EACjB,GAAI,GAAS,EAAE,QAAQ,EAAM,EAAc,CAAC,EAC5C,GAAI,EAAK,QAAQ,UAAU,EAAG,CAC1B,GAAM,GAAuB,EAAc,EAAE,aAAa,OAAQ,EAAK,aAAa,IAAI,CAAC,CAAC,EACpF,EAAgB,GAAG,SAAS,IAAI,EAAsB,CAAE,MAAO,CAAK,CAAC,EAC3E,EAAS,EAAE,KAAK,CAAC,GAAG,EAAQ,GAAG,CAAa,CAAC,CACjD,CACA,MAAO,EACX,CACA,WAA8B,EAAW,CACrC,MAAO,CACH,GAAG,EAAW,CAAS,EACvB,GAAG,EAAkB,CAAS,EAC9B,GAAG,EAAmB,CAAS,CACnC,CACJ,CACA,WAA2B,EAAM,CAC7B,MAAO,GAAE,QAAQ,EAAM,EAAqB,CAAC,CACjD,CACA,WAA4B,EAAM,CAC9B,MAAO,GAAE,QAAQ,EAAM,EAAO,SAAS,wBAAwB,CAAC,CACpE,CACA,WAAwB,EAAS,CAC7B,MAAO,IAAS,QAAQ,EAAqB,CAAC,CAClD,CACA,YAAgC,CAC5B,MAAO,GAAO,SAAS,uBAAuB,CAClD,CACA,GAAM,GAAS,GAAG,SAAS,CAAC,EAAM,IACvB,GAAG,OAAO,EAAc,EAAM,CAAO,CAAC,CAChD,EACD,WAAuB,EAAM,EAAS,EAAe,CACjD,EAAO,GAAG,SAAS,IAAI,CAAI,EAC3B,EAAO,EAAQ,CAAI,EACnB,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAI,GAAS,GAAI,IAAG,cAAc,EAAM,EAAS,CAAa,EAC9D,SAAO,QAAQ,CAAkB,EACjC,EAAO,OAAO,aAAc,CAAE,QAAS,GAAG,SAAS,YAAY,CAAI,CAAE,CAAC,EACtE,EAAQ,aAAe,GAAG,MAAM,MAAM,iBAAkB,CACpD,aAAc,EAAQ,aACtB,IAAK,kBACL,OAAQ,EAAQ,OAChB,MACJ,CAAC,EACD,EAAQ,SAAW,GAAG,SAAS,qBAAqB,CAAI,GAAK,EAAQ,cAAgB,EACrF,EAAQ,eAAiB,EAAE,KAAK,CAAC,EAAQ,OAAQ,EAAQ,aAAc,CAAI,EAAE,OAAO,EAAE,SAAS,CAAC,EAChG,EAAO,QAAQ,GAAG,KAAK,aAAa,EACpC,OAAO,OAAO,EAAS,EAAsB,EAAQ,YAAY,CAAC,EAC3D,CACX,CACA,WAAsB,EAAO,EAAS,EAAgB,CAAC,EAAG,CACtD,EAAU,EAAE,QAAQ,CAAO,EAC3B,EAAc,UAAY,GAC1B,EAAc,aAAe,YAC7B,GAAI,GAAS,GAAI,IAAG,cAAc,EAAO,EAAS,CAAa,EAC/D,EAAO,QAAQ,GAAG,OAAO,cAAe,CAAa,EACrD,EAAO,OAAO,OAAO,EACrB,EAAO,OAAO,OAAO,EACrB,GAAI,IAAS,GAAG,KAAK,OACrB,MAAI,GAAQ,QAAU,QAClB,GAAQ,MAAQ,EAAE,WAAW,GAAO,iBAAkB,CAAK,EAC3D,EAAQ,QAAU,GAAO,iBAEpB,EAAQ,QAAU,UACvB,GAAQ,MAAQ,EAAE,WAAW,GAAO,kBAAmB,CAAK,GAEhE,EAAQ,SAAW,EACZ,CACX,CACA,WAAyB,EAAO,EAAS,EAAgB,CAAC,EAAG,CACzD,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAI,GAAS,GAAI,IAAG,cAAc,EAAO,EAAS,CAAE,GAAG,EAAe,QAAS,GAAM,WAAY,cAAe,CAAC,EACjH,SAAO,OAAO,KAAK,EACnB,EAAO,OAAO,SAAU,CAAE,UAAW,EAAE,eAAgB,CAAC,EACxD,EAAO,QAAQ,QAAS,CAAE,QAAS,EAAO,aAAc,CAAC,EACzD,EAAO,KAAK,QAAQ,EACpB,EAAO,KAAK,SAAS,EACrB,EAAO,QAAQ,EAAc,CAAE,SAAU,CAAE,MAAO,QAAS,CAAE,CAAC,EACvD,CACX,CACA,YAA8B,EAAW,CACrC,GAAI,GAAW,EAAqB,CAAS,EAC7C,MAAO,GAAE,SAAS,EAAE,IAAI,EAAU,EAAkB,CAAC,CACzD,CACA,YAA4B,EAAS,CACjC,GAAI,EAAQ,SACR,OACJ,GAAI,GACJ,MAAI,UAAS,gBAAkB,EAC3B,GAAgB,EAAU,CAAO,EACjC,EAAQ,SAAW,GACnB,GAAG,MAAM,EAAe,CAAE,MAAO,GAAM,cAAe,EAAK,CAAC,GAG5D,EAAQ,SAAW,GAEhB,IAAM,CAAE,EAAQ,SAAW,EAAO,CAC7C,CACA,WAA8B,EAAS,EAAQ,CAC3C,GAAI,GAAc,IAAM,EAAU,CAAM,EACxC,MAAI,KAAY,GACL,CAAC,EAAY,CAAC,EAEhB,EAAE,UAAU,CAAO,EACjB,CAAC,CAAO,EAEV,EAAE,SAAS,CAAO,EAChB,GAAG,SAAS,QAAQ,EAAY,EAAG,EAAS,CAAE,QAAO,CAAC,EAExD,EAAE,QAAQ,CAAO,EACf,EAAE,QAAQ,EAAS,AAAC,GAAM,EAAqB,EAAG,CAAM,CAAC,EAGzD,CAAC,CAEhB,CACA,YAA6B,EAAS,EAAQ,CAC1C,MAAO,UAAU,EAAS,CACtB,GAAI,GAAa,EAAqB,EAAS,CAAM,EACrD,OAAS,MAAa,GAClB,EAAQ,QAAQ,EAAS,CAEjC,CACJ,CACA,WAA8B,EAAW,EAAU,CAC/C,OAAS,KAAW,GAAqB,CAAS,EAC9C,EAAQ,SAAW,CAE3B,CACA,WAA4B,EAAM,EAAS,EAAe,CACtD,EAAU,EAAE,QAAQ,CAAO,EAC3B,EAAO,EAAQ,CAAI,EACnB,GAAM,GAAS,GAAI,IAAG,cAAc,EAAM,EAAS,CAAa,EAChE,EAAO,OAAO,cAAe,CAAE,KAAM,SAAU,CAAC,EAChD,EAAO,KAAK,SAAS,EACrB,GAAM,IAAa,CACf,GAAG,OAAO,SAAS,CAAI,EACvB,EAAE,SAAS,EAAM,WAAW,CAChC,EACM,GAAc,CAChB,EAAE,SAAS,EAAM,YAAY,CACjC,EACM,GAAgB,EAAQ,eAAiB,EAAkB,CAAI,EAAE,GACvE,MAAI,KACA,IAAW,KAAK,GAAG,OAAO,WAAW,EAAY,EAAG,EAAE,SAAS,GAAc,WAAW,CAAC,EACzF,GAAY,KAAK,EAAE,SAAS,GAAc,YAAY,CAAC,EACvD,EAAQ,SAAW,GAAa,aAAa,YAAY,EACzD,EAAQ,MAAQ,GAAa,aAAa,YAAY,GAE1D,EAAQ,OAAS,GAAG,OAAO,MAAM,GAAG,GAAY,EAAQ,MAAM,EAC9D,EAAQ,QAAU,EAAE,MAAM,GAAG,GAAa,EAAQ,OAAO,EACzD,EAAO,OAAO,MAAO,CAAE,KAAM,SAAU,QAAS,GAAG,SAAS,OAAO,CAAI,CAAE,CAAC,EAC1E,EAAO,OAAO,SAAU,CACpB,KAAM,CAAC,YAAa,cAAe,QAAQ,EAC3C,QAAS,MACT,UAAW,EAAE,eACjB,CAAC,EACG,EAAQ,SAAW,OACnB,GAAQ,IAAM,GAAG,OAAO,SAAS,EAAQ,GAAG,GAEzC,CACX,CACA,WAA+B,EAAc,CACzC,GAAI,CAAC,EACD,MAAO,CAAC,EACZ,GAAI,GAAgB,GAAG,KAAK,cAAc,EAAc,CAAC,EAAG,CAAE,SAAU,EAAM,CAAC,EAC/E,MAAO,GAAE,KAAK,EAAe,CAAC,SAAU,MAAO,aAAc,SAAU,SAAU,SAAS,CAAC,CAC/F,CACA,cAAkB,EAAM,CACpB,GAAI,CAAC,EAAM,EAAS,GAAY,EAAE,KAAK,EAAM,MAAO,UAAW,UAAU,EACzE,SAAO,GAAG,QAAQ,IAAI,CAAI,EAC1B,IAAa,GAAyB,CAAI,GAAK,GAAG,KAAK,kCAAkC,EAElF,AADS,GAAI,IAAG,aAAa,EAAM,EAAS,CAAQ,EAC5C,MAAM,CACzB,CACA,YAAkC,EAAS,CACvC,GAAI,GAAc,EAAQ,aAAa,UAAU,EACjD,GAAI,EACA,MAAO,IAAG,kBAAkB,WAAW,CAAW,EAAE,WAAW,QAAS,OAAQ,SAAS,EAAE,KAAK,CAAO,CAE/G,CACA,WAAoB,EAAQ,EAAU,CAAC,EAAG,CACtC,GAAM,GAAW,CAAC,EAAO,KAAkB,EAAO,EAAQ,EAAa,EACvE,MAAO,GAAM,EAAQ,CAAE,UAAW,kBAAmB,GAAG,EAAS,MAAO,EAAK,EAAG,CAAQ,CAC5F,CACA,YAA6B,CACzB,MAAO,IAAG,QAAQ,6BAA6B,GAAK,EAAO,cAC/D,CACA,WAAmB,EAAO,CACtB,MAAO,GAAkB,CAAK,EAAE,OACpC,CACA,WAA2B,EAAO,CAC9B,MAAO,GAAE,WAAW,EAAkB,EAAG,SAAU,EAAe,CAC9D,GAAI,GAAQ,EAAM,QAAQ,CAAa,EACvC,GAAI,EAAO,CACP,GAAI,GAA2B,GAAG,SAAS,YAAY,EAAO,CAAE,OAAQ,EAAK,CAAC,EAC1E,GAAyB,GAAG,SAAS,YAAY,CAAK,EACtD,GAAsB,IAA2B,IAAU,GAAU,GAAG,SAAqB,MAC7F,GAAS,GAA4B,GACzC,GAAI,GACA,MAAO,CACH,UACA,QAAS,EACT,OAAQ,CACZ,CAER,CACJ,CAAC,CACL,CACA,cAAqB,EAAM,CACvB,GAAI,GAAU,EAAkB,GAAG,CAAI,EACnC,EAAO,EAAQ,EAAQ,MAAM,EAEjC,MAAO,AADS,GAAiB,CAAI,EACpB,SAAS,CAAO,CACrC,CACA,WAA2B,KAAmB,EAAM,CAChD,GAAM,GAAU,EAAE,eAAe,CAAI,EACrC,MAAI,GAAQ,OACR,EAAQ,SAAW,GAAG,SAAS,SAAS,CAAc,EAGtD,EAAQ,SAAW,GAAG,SAAS,IAAI,CAAc,EAE9C,CACX,CACA,WAAiB,EAAS,CACtB,MAAO,GAAe,CAAO,GAAK,EAAe,CAAO,GAAK,GAAkB,CAAO,CAC1F,CACA,WAAwB,EAAS,CAC7B,GAAI,YAAmB,iBACnB,MAAO,EACf,CACA,WAAwB,EAAS,CAC7B,MAAO,GAAQ,QAAQ,MAAM,CACjC,CACA,YAA2B,EAAS,CAChC,GAAI,GAAS,EAAQ,aAAa,MAAM,EACxC,GAAI,EAAQ,CACR,GAAI,GAAW,OAAS,EAAE,WAAW,CAAM,EAC3C,MAAO,IAAG,SAAS,IAAI,EAAU,CAAE,MAAO,CAAQ,CAAC,CACvD,CACJ,CACA,WAA0B,EAAM,CAC5B,MAAO,GAAK,kBAAoB,EAAmB,CAAI,CAC3D,CACA,WAA4B,EAAM,CAC9B,GAAM,GAAY,GAAI,IAAG,cAAc,CAAI,EACrC,EAAO,EAAU,MAAM,EAC7B,UAAG,WAAW,EAAM,CAAI,EACjB,CACX,CACA,WAAmB,EAAQ,CACvB,MAAO,GAAgB,CAAM,GAAK,GAAG,MAAM,QAAQ,OACvD,CACA,WAAyB,EAAQ,CAC7B,GAAI,EACA,MAAO,GAAQ,CAAM,GAAK,GAAG,MAAM,IAAI,CAAM,GAAG,OAExD,CACA,GAAM,GAAc,GAAG,SAAS,YAAa,EAAM,CAC/C,GAAI,CAAC,EAAM,CAAE,SAAS,GAAY,EAAE,KAAK,EAAM,MAAO,UAAW,UAAU,EACvE,GAAS,SAAU,GAAQ,CAC3B,GAAI,IAAS,EAAU,CAAI,EAC3B,MAAO,GAAE,OAAO,GAAQ,SAAU,GAAO,CACrC,MAAQ,KAAS,IAAU,EAAK,SAAS,EAAK,IACtC,EAAU,EAAK,IAAM,IACrB,EAAC,GAAS,EAAM,EAAK,EACjC,CAAC,CACL,EACA,MAAO,IAAG,SAAS,cAAc,EAAc,EAAG,CAAE,SAAO,EAAG,CAAQ,CAC1E,CAAC,EACD,aAAwB,CACpB,MAAO,GAAE,SAAS,SAAS,cAAe,CAAO,CACrD,CACA,YAAuB,EAAM,CACzB,SAAO,GAAG,SAAS,IAAI,CAAI,EACpB,EAAO,QAAQ,EAAM,iBAAiB,CACjD,CACA,UAAG,GAAG,SAAU,EAAO,WAAW,iBAAiB,EAAG,SAAU,EAAO,EAAM,CACzE,GAAM,GAAe,EAAE,SAAS,EAAM,UAAW,CAAc,EAC/D,AAAI,GAAc,aAAa,WAAW,IAAM,SAE5C,GAAM,kBAEV,IAAG,MAAM,KAAK,EAAO,CAAE,IAAK,EAAK,CAAC,EAClC,GAAG,MAAM,wBAAwB,EAAO,EAAM,CAAE,cAAa,CAAC,CAAC,GACnE,CAAC,EACD,GAAG,SAAS,gBAAiB,CAAE,MAAO,EAAK,EAAG,SAAU,EAAS,CAC7D,GAAI,GAAO,EAAQ,CAAO,EAC1B,AAAI,GACA,EAAiB,CAAI,CAC7B,CAAC,EACD,GAAG,SAAS,cAAe,AAAC,GACjB,GAAI,IAAG,SAAS,CAAQ,EAAE,MAAM,CAC1C,EACD,GAAG,UAAU,WAAY,AAAC,GAAgB,EAAM,CAAW,CAAC,EAC5D,GAAG,UAAU,gBAAiB,AAAC,GAAgB,EAAW,EAAa,CAAE,UAAW,iBAAkB,CAAC,CAAC,EACjG,CACH,SACA,SACA,gBACA,qBACA,wBACA,eACA,kBACA,iBACA,QACA,WACA,aACA,gBACA,OAAQ,EACR,cACA,UACA,cAAe,EACf,gBACA,YAAa,GACb,YAAa,EACb,uBACA,MAAO,EACP,cAAe,EACf,eAAgB,EAChB,IAAK,EACL,WACJ,CACJ,EAAG,EACH,GAAG,OAAS,GAAG,KAAK,OACpB,GAAG,MAAQ,GAAG,KAAK,MACnB,GAAG,WAAa,GAAG,KAAK,WACxB,GAAG,SAAW,GAAG,KAAK,QAGhB,EAEC,IAAM,CAEb,GAAG,OAAU,UAAY,CACrB,GAAM,GAAI,GAAG,KACP,EAAI,GAAG,QACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,eAAgB,CAAC,YAAY,EAC7B,cAAe,CAAC,WAAW,EAC3B,eAAgB,CAAC,YAAY,EAC7B,aAAc,CAAC,WAAY,KAAK,EAChC,eAAgB,CAAC,gBAAgB,CACrC,EAAE,EACE,EAAkB,GAAI,IAAG,SAAS,SAAS,EACzC,EAAgB,eACtB,WAAyB,EAAM,CAC3B,MAAO,GAAK,gBAAkB,GAAI,IAAG,gBAAgB,CAAI,CAC7D,CACA,WAAyB,EAAK,CAC1B,GAAI,GAAW,EAAE,KAAK,EAAK,UAAU,GAAK,SACtC,EAAS,GAAG,MAAM,OAAO,EAAU,CAAE,OAAQ,CAAI,CAAC,EACtD,MAAO,GAAE,QAAQ,EAAO,IAAI,CAAyB,CAAC,CAC1D,CACA,WAAmB,EAAK,EAAO,CAAE,WAAU,sBAAsB,CAC7D,GAAI,IAAoB,CAAC,GAAsB,EAAI,gBAAmB,EAAgB,CAAG,EACzF,GAAI,GAAY,CAAC,EAAE,QAAQ,EAAI,eAAgB,EAAgB,EAAG,CAC9D,OAAS,KAAQ,GAAO,CACpB,GAAM,GAAY,EAAgB,CAAI,EAAE,aAAa,EAAgB,EACrE,OAAS,KAAgB,GAAO,eAC5B,EAAK,UAAU,OAAO,EAAc,CAAS,EAEjD,EAAE,gBAAgB,EAAM,eAAgB,OAAQ,CAAS,CAC7D,CACA,EAAI,eAAiB,EACzB,CACJ,CACA,WAA0B,EAAM,EAAM,CAClC,GAAM,GAAc,EAAO,SAAS,cAAc,EAC5C,EAAW,EAAE,OAAO,EAAM,CAAW,EAC3C,OAAS,MAAW,GAAU,CAC1B,GAAI,GAAQ,EAAE,QAAQ,GAAS,CAAa,EAC5C,EAAU,GAAS,EAAO,CAAI,CAClC,CACJ,CACA,WAAmC,EAAO,CACtC,MAAO,GAAE,aAAa,EAAM,QAAQ,CACxC,CACA,WAA8B,EAAS,CACnC,MAAO,GAAQ,gBAAkB,CAAC,CAAO,CAC7C,CACA,WAAqB,EAAS,EAAe,CACzC,GAAI,CAAE,aAAc,EAChB,EAAe,GAAG,aAAa,SAAS,CAAS,EACjD,GAAgB,IAAM,EAAc,EAAS,CAAa,EAC1D,EAAiB,EAAU,UAAU,EAAa,EACtD,UAAc,SAAS,EAChB,IAAM,CACT,EAAU,UAAU,CAAc,EAClC,GAAc,QAAQ,EAAW,CAAE,cAAe,EAAK,CAAC,CAC5D,CACJ,CACA,WAAuB,EAAS,EAAe,CAC3C,GAAI,CAAE,WAAU,YAAW,WAAW,EAClC,EAAU,EAAE,QAAQ,EACpB,EAAqB,AAAC,GAAa,GAAI,IAAG,QAAQ,CAAE,WAAU,UAAS,gBAAe,SAAQ,CAAC,EAC/F,EAAgB,EAAmB,CAAQ,EAC/C,EAAc,IAAI,EAAkB,EAAc,OAAO,CAAC,EAC1D,EAAc,IAAI,EAAwB,EAAc,WAAW,CAAC,EACpE,EAAc,IAAI,EAA4B,EAAc,SAAU,CAAS,CAAC,EAChF,EAAc,IAAI,GAAG,KAAK,oBAAoB,EAAc,QAAS,EAAM,CAAC,EAC5E,OAAS,KAAY,GAAW,CAC5B,GAAI,GAAc,EAAmB,CAAQ,EAC7C,EAAY,IAAI,EAAE,iBAAiB,EAAc,WAAY,CAAQ,CAAC,EACtE,EAAY,IAAI,EAAE,iBAAiB,EAAc,eAAgB,CAAQ,EAAE,QAAQ,CAAuB,CAAC,CAC/G,CACA,MAAO,GAAQ,KACnB,CACA,WAAiC,EAAa,CAC1C,GAAI,EAAC,EAEL,MAAO,UAAU,EAAS,CACtB,EAAQ,gBAAgB,CAAW,CACvC,CACJ,CACA,WAA2B,EAAO,CAC9B,MAAI,GAAE,WAAW,CAAK,EACX,CAAC,CAAK,EAER,EAAE,SAAS,CAAK,EACd,GAAqB,CAAK,EAE5B,EAAE,QAAQ,CAAK,EACb,EAAM,QAAQ,CAAiB,EAG/B,CAAC,CAEhB,CACA,YAA8B,EAAK,CAC/B,MAAO,GAAE,IAAI,EAAE,qBAAqB,CAAG,EAAG,CAAC,CAAC,EAAM,KAAmB,CACjE,GAAI,GAAY,EAAgB,IAAI,CAAI,EACxC,MAAO,UAAU,GAAS,EAAY,CAClC,UAAG,KAAK,eAAgB,qBAAsB,CAAI,EAC3C,EAAU,GAAS,GAAiB,CAAU,CACzD,CACJ,CAAC,CACL,CACA,YAA2B,CAAE,SAAQ,kBAAkB,CACnD,WAAmB,EAAE,SAAS,CAAM,EAC7B,EAAE,QAAQ,EAAgB,CAAoB,CACzD,CACA,WAAqC,EAAgB,EAAW,CAC5D,GAAI,EAAC,EAEL,MAAO,UAAU,EAAS,CACtB,EAAQ,cAAc,GAAkB,EAAQ,aAAa,EAAG,EAAO,aAAa,EACpF,EAAQ,cAAc,EAAW,EAAO,cAAc,CAC1D,CACJ,CACA,YAAuB,EAAS,EAAS,EAAe,CACpD,EAAU,EAAE,QAAQ,CAAO,EAC3B,GAAM,GAAS,GAAI,IAAG,cAAc,EAAS,EAAS,CAAa,EACnE,SAAO,gBAAgB,SAAS,EAChC,EAAO,QAAQ,UAAU,EACzB,EAAO,OAAO,SAAS,EACvB,EAAO,gBAAgB,mBAAmB,EAC1C,EAAO,OAAO,aAAa,EACpB,CACX,CACA,UAAG,GAAG,sBAAuB,CAAC,EAAQ,IAAgB,CAClD,EAAiB,EAAa,CAAE,SAAU,GAAM,mBAAoB,EAAM,CAAC,CAC/E,CAAC,EACD,GAAG,GAAG,iFAAkF,IAAM,CAC1F,EAAiB,SAAS,KAAM,CAAE,SAAU,GAAO,mBAAoB,EAAK,CAAC,CACjF,CAAC,EACM,CACH,SACA,QAAS,EAAgB,IACzB,oBACA,cACA,gBACJ,CACJ,EAAG,EACH,GAAG,QAAU,GAAG,OAAO,OAGjB,EAEC,IAAM,CAEb,GAAG,MAAS,UAAY,CACpB,GAAM,GAAI,GAAG,QACP,EAAS,GAAI,IAAG,OAAO,IAAO,EAChC,gBAAiB,CAAC,aAAa,EAC/B,kBAAmB,CAAC,mBAAmB,EACvC,aAAc,GAClB,EAAE,EACF,WAAqB,EAAe,CAChC,GAAI,CAAE,SAAQ,SAAQ,MAAO,EAAa,QAAS,EAC/C,EAAQ,CAAE,QAAS,CAAC,EAAG,MAAO,CAAC,CAAE,EACrC,GAAI,CAAC,EACD,MAAO,GACX,GAAI,GAAiB,EAAO,SAAS,iBAAiB,EAChD,EAAkB,CAAC,EAAa,GAAG,EAAY,UAAW,GAAG,EAAY,WAAW,EAC1F,OAAS,KAAgB,GAAiB,CACtC,GAAI,IAAW,GAAG,SAAS,IAAI,EAAa,QAAS,EAAgB,CAAE,MAAO,CAAa,CAAC,EAC5F,OAAS,MAAW,IAAU,CAC1B,GAAI,GAAW,GAAG,SAAS,YAAY,GAAS,CAAE,QAAO,CAAC,EAC1D,GAAI,CAAC,EAAU,CACX,GAAG,KAAK,cAAe,oCAAqC,EAAO,EACnE,QACJ,CACA,GAAI,IAAU,EAAE,KAAK,GAAS,aAAa,EACvC,EAAmB,GAAU,GAAG,MAAM,OAAO,GAAS,CAAE,UAAW,CAAa,CAAC,EAAI,CAAC,CAAY,EAClG,EAAgB,GAAG,OAAO,cAAc,EAAO,EAC/C,EAAc,GAAG,MAAM,MAAM,qBAAsB,CAAE,IAAK,EAAM,CAAC,EACjE,EAAiB,EAAE,aAAa,GAAS,eAAgB,CAAE,YAAa,CAAC,cAAe,eAAe,CAAE,CAAC,EAC1G,GAAO,CACP,WACA,WAAY,GACZ,MAAO,EACP,SACA,GAAG,EACH,UAAW,OACX,KAAM,GACN,MAAO,GACP,OACA,cACA,iBACA,sBAAuB,CAC3B,EACA,AAAI,EAAiB,SAAS,CAAW,GAErC,AADW,KAAgB,EAAe,EAAM,QAAU,EAAM,OAC3D,KAAK,EAAI,CAEtB,CACJ,CACA,SAAM,MAAQ,GAAG,SAAS,oBAAoB,EAAM,KAAK,EAClD,CACX,CACA,WAAsB,EAAU,EAAU,CAAC,EAAG,CAC1C,GAAG,gBAAgB,YAAY,CAAQ,EAAE,WAAW,CAAO,CAC/D,CACA,WAAqB,EAAS,CAC1B,GAAG,gBAAgB,YAAY,CAAO,EAAE,UAAU,CACtD,CACA,WAAqB,EAAU,EAAU,CAAC,EAAG,CACzC,GAAM,GAAW,CAAE,WAAY,EAAK,EAC9B,EAAS,GAAI,IAAG,cAAc,EAAU,EAAS,CAAE,UAAS,CAAC,EACnE,SAAO,OAAO,WAAY,CAAE,QAAS,EAAO,YAAa,CAAC,EAC1D,EAAO,OAAO,UAAW,CAAE,QAAS,OAAQ,CAAC,EAC7C,EAAO,QAAQ,GAAG,KAAK,cAAc,EACrC,EAAO,QAAQ,GAAG,OAAO,aAAa,EAC/B,CACX,CACA,UAAG,UAAU,UAAW,SAAU,EAAU,CACxC,GAAG,gBAAgB,YAAY,CAAQ,EAAE,wBAAwB,CACrE,CAAC,EACD,GAAG,MAAM,eAAgB,SAAU,EAAU,CACzC,EAAE,gBAAgB,EAAU,CACxB,YAAa,GACb,cAAe,UACf,UAAW,GACX,KAAQ,OACZ,CAAC,EACD,EAAS,iBAAiB,mBAAoB,SAAU,EAAO,CAC3D,AAAK,EAAE,QAAQ,EAAM,WAAW,GAC5B,EAAM,eAAe,CAC7B,CAAC,CACL,CAAC,EACM,CACH,SACA,cACA,eACA,cACA,aACJ,CACJ,EAAG,CAGG,EAEC,IAAM,CAEb,AAAC,WAAY,CACT,GAAM,GAAI,GAAG,QACb,YAAmB,CACf,MAAO,QAAO,OACV,OAAO,QAAQ,KACvB,CACA,OAAS,KAAW,CAAC,SAAU,SAAS,EAAG,CACvC,GAAM,GAAc,MAAM,IACpB,EAAgB,QAAQ,IAC9B,GAAG,MAAM,KAAK,KAAkB,SAAU,EAAM,CAC5C,AAAI,EAAQ,GAAK,GAAG,KAAK,aAAa,CAAI,GACtC,GAAE,eAAe,EAAM,EAAa,EAAK,aAAa,CAAa,CAAC,EACpE,EAAK,gBAAgB,CAAa,EAE1C,CAAC,CACL,CACJ,GAAG,CAGG,CACI,EAGI,EAA2B,CAAC,EAGhC,WAA6B,EAAU,CAEtC,GAAI,GAAe,EAAyB,GAC5C,GAAI,IAAiB,OACpB,MAAO,GAAa,QAGrB,GAAI,GAAS,EAAyB,GAAY,CAGjD,QAAS,CAAC,CACX,EAGA,SAAoB,GAAU,EAAQ,EAAO,QAAS,CAAmB,EAGlE,EAAO,OACf,CAIA,AAEC,EAAoB,EAAI,AAAC,GAAY,CACpC,AAAG,MAAO,QAAW,KAAe,OAAO,aAC1C,OAAO,eAAe,EAAS,OAAO,YAAa,CAAE,MAAO,QAAS,CAAC,EAEvE,OAAO,eAAe,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,CAC7D,EAIX,GAAI,GAAsB,CAAC,EAE3B,AACA,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,CAAC,EACrB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,EAAE,EACtB,EAAoB,GAAG,EACvB,EAAoB,GAAG,EACvB,EAAoB,GAAG,EACvB,EAAoB,GAAG,EACvB,GAAG,UAAU,SAAS,CAIb,GAAG,ECvoXZ,GAAO,IAAQ,GAAI,MAAkB,CAEnC,UAAW,CACT,MAAO,UAAS,KAAK,aAAa,kBAAkB,CACtD,CAEA,GAAI,SAAS,CACX,MAAO,MAAK,SAAS,IAAM,MAC7B,CAEA,GAAI,gBAAgB,CAClB,MAAO,MAAK,SAAS,IAAM,aAC7B,CAEF,ECZA,GAAG,MAAM,OAAO,MAAM,YAAc,CAAC,MAAO,QAAQ,EAGpD,GAAG,KAAK,OAAO,kBAAkB,KAAK,oBAAoB,EAE1D,GAAG,OAAO,OAAO,eAAe,KAAK,QAAQ,EAE7C,GAAG,KAAK,OAAO,gBAAgB,KAAK,MAAM,EAE1C,GAAG,SAAS,OAAO,WAAa,GAEhC,GAAG,QAAQ,OAAO,eAAiB,GAEnC,GAAG,OAAO,OAAO,QAAU,CAAC,GAAY,OCfxC,GAAG,KAAK,OAAO,gBAAgB,KAAK,SAAS,EAC7C,GAAG,KAAK,OAAO,iBAAiB,KAAK,SAAS,EAC9C,GAAG,KAAK,OAAO,mBAAmB,KAAK,qBAAqB,ECE5D,GAAG,KAAK,OAAO,iBAAiB,KAAK,SAAS,EAC9C,GAAG,OAAO,OAAO,aAAe,GAAG,OAAO,OAAO,aAAa,OAAO,GAAY,IAAa,KAAK,ECJ3F,OAAyB,SAAmC,GAAyB,SAAyC,GAAyB,SAAsC,GAAyB,SCD9N,GAAM,IAAN,KAAkB,CAEhB,aAAc,CACZ,KAAK,eAAiB,CAAC,CACzB,CAEA,UAAU,EAAW,EAAM,CACzB,GAAM,GAAS,GAAI,IAAc,CAAI,EACrC,YAAK,eAAe,GAAa,EAC1B,CACT,CAEA,iBAAiB,EAAW,CAC1B,MAAO,MAAK,eAAe,EAC7B,CAEF,EAEM,GAAN,KAAoB,CAElB,YAAY,EAAM,CAChB,OAAW,CAAC,EAAK,IAAU,QAAO,QAAQ,CAAI,EAC5C,OAAO,eAAe,KAAM,EAAK,CAC/B,IAAK,IAAM,EACX,aAAc,EAChB,CAAC,CAEL,CAEF,EAEO,GAAQ,GAAI,IC/BnB,GAAqB,IAArB,KAA6B,CAC3B,YAAY,EAAU,EAAe,EAAG,CACtC,KAAK,SAAW,EAChB,KAAK,QAAU,KACf,KAAK,UAAY,KACjB,KAAK,oBAAsB,EAC3B,KAAK,iBAAmB,EACxB,KAAK,OAAS,GACd,KAAK,OAAO,CACd,CAEA,GAAI,UAAU,CACZ,GAAM,GAAU,KAAK,MAAM,IAAM,KAAK,QAAU,KAAK,mBAAmB,EACxE,MAAO,MAAK,IAAI,EAAG,KAAK,IAAI,IAAK,CAAO,CAAC,CAC3C,CAEA,GAAI,mBAAmB,CACrB,MAAO,KAAM,KAAK,OACpB,CAEA,GAAI,UAAU,CACZ,MAAO,MAAK,oBAAsB,KAAK,SACzC,CAEA,GAAI,YAAY,CACd,MAAO,MAAK,IAAI,EAAG,KAAK,iBAAmB,KAAK,iCAAiC,CAAC,CACpF,CAEA,OAAQ,CACN,KAAK,MAAM,EACX,KAAK,kBAAoB,KAAK,iCAAiC,EAC/D,KAAK,OAAS,EAChB,CAEA,QAAS,CACP,KAAK,MAAM,EACX,KAAK,UAAY,GAAI,MACrB,KAAK,QAAU,OAAO,WAAW,KAAK,SAAU,KAAK,gBAAgB,EACrE,KAAK,OAAS,EAChB,CAEA,OAAQ,CACN,OAAO,aAAa,KAAK,OAAO,CAClC,CAEA,kCAAmC,CACjC,MAAO,MAAK,OAAS,EAAI,GAAI,MAAS,KAAK,SAC7C,CACF,EC5CA,GAAM,IAAS,GAAY,UAAU,kBAAmB,CACtD,aAAc,IACd,gBAAiB,GACnB,CAAC,EAED,GAAG,SAAS,kBAAmB,AAAC,GAAY,CAC1C,GAAM,GAAY,EAAQ,cAAc,kCAAkC,EACpE,EAAc,EAAQ,cAAc,wBAAwB,EAElE,YAA2B,CACzB,GAAM,GAAU,EAAc,EAAY,QAAU,EAEpD,AAAK,GAAY,QACf,GAAG,QAAQ,SAAS,EAAW,CAC7B,WAAY,SAAS,GAAO,2BAC5B,MAAO,GAAG,IACZ,CAAC,CAEL,CAEA,YAA+B,CAC7B,AAAI,GAAY,QAKd,GAAgB,EAChB,EAAO,EAEX,CAEA,YAAkB,CAChB,OAAO,cAAc,CAAuB,EAC5C,EAAY,MAAM,EAClB,GAAG,QAAQ,EAAS,aAAa,EAAE,KAAK,IAAM,CAAE,EAAQ,OAAO,CAAE,CAAC,CACpE,CAEA,GAAM,GAAc,GAAI,IAAQ,EAAqB,GAAO,YAAY,EAClE,EAA0B,OAAO,YAAY,EAAiB,GAAO,eAAe,EAE1F,SAAgB,EAChB,EAAQ,iBAAiB,aAAc,IAAM,CAAE,EAAY,MAAM,CAAE,CAAC,EACpE,EAAQ,iBAAiB,aAAc,IAAM,CAAE,EAAY,OAAO,CAAE,CAAC,EACrE,EAAY,iBAAiB,QAAS,CAAM,EAErC,CACT,CAAC,EHjDiU,OAAyB,SID3V,OAAO,SACP,GAAO,SAEP,YAAsB,EAAQ,CAC5B,GAAM,GAAW,EAAO,aAAa,UAAU,EAE/C,AAAI,GACF,GAAO,IAAM,EACb,EAAO,UAAU,IAAI,YAAY,EAErC,CAEA,YAA0B,EAAQ,CAChC,GAAM,GAAqB,EAAO,aAAa,SAAS,EACxD,AAAI,GACF,GAAO,MAAM,gBAAkB,QAAQ,MACvC,EAAO,UAAU,IAAI,gBAAgB,EAEzC,CAEA,SAAS,iBAAiB,mBAAoB,AAAC,GAAU,CACvD,GAAM,GAAS,EAAM,OACrB,GAAa,CAAM,EACnB,GAAiB,CAAM,CACzB,CAAC,ECxBc,YAAgC,EAAmB,EAAU,CAAE,QAAQ,KAAQ,CAAC,EAAG,CAChG,GAAI,GAEJ,YAA6B,CAC3B,aAAa,CAAe,EAC5B,EAAkB,WAAW,EAAU,CAAK,CAC9C,CAEA,GAAM,GAAiB,GAAI,gBAAe,CAAiB,EAC3D,UAAG,KAAK,SAAS,CAAiB,EAAE,QAAQ,AAAC,GAAY,CACvD,EAAe,QAAQ,CAAO,CAChC,CAAC,EAEM,UAAsB,CAC3B,EAAe,WAAW,CAC5B,CACF,CCdA,GAAG,SAAS,YAAa,AAAC,GAAY,CACpC,YAAkB,CAChB,EAAQ,MAAM,YAAY,eAAgB,GAAG,EAAQ,gBAAgB,EAGrE,AADkB,EAAQ,cAAc,kBAAkB,GAC/C,eAAe,CAAE,SAAU,OAAQ,MAAO,UAAW,OAAQ,QAAS,CAAC,CACpF,CAEA,SAAO,EAEA,CACL,GAAuB,CAAC,CAAO,EAAG,CAAM,CAC1C,CACF,CAAC,ECdkF,OAAyB,SAAuC,GAAyB,SCC5K,GAAG,SAAS,UAAW,AAAC,GAAY,CAClC,YAAkB,CAChB,AAAI,GAAG,MAAM,UAAY,GAAG,MAAM,MAChC,EAAQ,MAAM,YAAY,oBAAqB,GAAG,OAAO,WAAa,SAAS,KAAK,eAAe,CAEvG,CAEA,SAAO,EAEA,CACL,GAAuB,CAAC,CAAO,EAAG,CAAM,CAC1C,CACF,CAAC,ECDM,YAAuB,EAAW,EAAS,EAAY,CAC5D,GAAM,GAAK,SAAS,cAAc,GAAW,KAAK,EAClD,MAAI,IACF,GAAG,UAAY,GAEb,GACF,EAAW,YAAY,CAAE,EAGpB,CACT,CA+DO,YAA2B,EAAG,EAAG,EAAO,CAC7C,GAAI,GAAY,eACZ,EAAI,MAAS,IAAK,GAAK,QAG3B,MAAI,KAAU,QACZ,IAAa,YACT,EAAQ,IAAM,EACd,OAGC,CACT,CAwCO,YAAwB,EAAI,EAAG,EAAG,CACvC,EAAG,MAAM,MAAS,MAAO,IAAM,SAAa,EAAI,KAAQ,EACxD,EAAG,MAAM,OAAU,MAAO,IAAM,SAAa,EAAI,KAAQ,CAC3D,CA8BO,GAAM,IAAa,CACxB,KAAM,OACN,QAAS,UACT,OAAQ,SACR,MAAO,OACT,EASO,YAAwB,EAAG,CAChC,GAAI,EAAE,QAAU,GAAK,EAAE,SAAW,EAAE,SAAW,EAAE,QAAU,EAAE,SAC3D,MAAO,EAEX,CAUO,YAA+B,EAAQ,EAAgB,EAAS,SAAU,CAE/E,GAAI,GAAW,CAAA,EAEf,GAAI,YAAkB,SACpB,EAAW,CAAC,CAAM,UACT,YAAkB,WAAY,MAAM,QAAQ,CAAM,EAC3D,EAAW,MAAM,KAAK,CAAM,MACvB,CACL,GAAM,GAAW,MAAO,IAAW,SAAW,EAAS,EACvD,AAAI,GACF,GAAW,MAAM,KAAK,EAAO,iBAAiB,CAAQ,CAAC,EAE7D,CAEE,MAAO,EACT,CAOO,YAAqB,EAAI,CAC9B,MAAO,OAAO,IAAO,YAChB,EAAG,WACH,EAAG,UAAU,IACpB,CCvBA,GAAM,IAAN,KAAsB,CAKpB,YAAY,EAAM,EAAS,CACzB,KAAK,KAAO,EACR,GACF,OAAO,OAAO,KAAM,CAAO,CAEjC,CAEE,gBAAiB,CACf,KAAK,iBAAmB,EAC5B,CACA,EAMM,GAAN,KAAgB,CACd,aAAc,CAIZ,KAAK,WAAa,CAAA,EAKlB,KAAK,SAAW,CAAA,EAGhB,KAAK,KAAO,OAGZ,KAAK,QAAU,MACnB,CAQE,UAAU,EAAM,EAAI,EAAW,IAAK,CAClC,AAAK,KAAK,SAAS,IACjB,MAAK,SAAS,GAAQ,CAAA,GAGxB,KAAK,SAAS,GAAM,KAAK,CAAE,KAAI,UAAQ,CAAE,EACzC,KAAK,SAAS,GAAM,KAAK,CAAC,EAAI,IAAO,EAAG,SAAW,EAAG,QAAQ,EAE1D,KAAK,MACP,KAAK,KAAK,UAAU,EAAM,EAAI,CAAQ,CAE5C,CAOE,aAAa,EAAM,EAAI,CACrB,AAAI,KAAK,SAAS,IAEhB,MAAK,SAAS,GAAQ,KAAK,SAAS,GAAM,OAAO,GAAW,EAAO,KAAO,CAAG,GAG3E,KAAK,MACP,KAAK,KAAK,aAAa,EAAM,CAAE,CAErC,CAQE,aAAa,KAAS,EAAM,CAC1B,MAAI,MAAK,SAAS,IAChB,KAAK,SAAS,GAAM,QAAQ,AAAC,GAAW,CAEtC,EAAK,GAAK,EAAO,GAAG,MAAM,KAAM,CAAI,CAC5C,CAAO,EAEI,EAAK,EAChB,CAOE,GAAG,EAAM,EAAI,CACX,AAAK,KAAK,WAAW,IACnB,MAAK,WAAW,GAAQ,CAAA,GAE1B,KAAK,WAAW,GAAM,KAAK,CAAE,EAKzB,KAAK,MACP,KAAK,KAAK,GAAG,EAAM,CAAE,CAE3B,CAOE,IAAI,EAAM,EAAI,CACZ,AAAI,KAAK,WAAW,IAElB,MAAK,WAAW,GAAQ,KAAK,WAAW,GAAM,OAAO,GAAa,IAAO,CAAS,GAGhF,KAAK,MACP,KAAK,KAAK,IAAI,EAAM,CAAE,CAE5B,CAQE,SAAS,EAAM,EAAS,CACtB,GAAI,KAAK,KACP,MAAO,MAAK,KAAK,SAAS,EAAM,CAAO,EAGzC,GAAM,GAA0C,GAAI,IAAgB,EAAM,CAAO,EAEjF,MAAK,MAAK,YAIN,KAAK,WAAW,IAClB,KAAK,WAAW,GAAM,QAAQ,AAAC,GAAa,CAC1C,EAAS,KAAK,KAAM,CAAK,CACjC,CAAO,EAGI,CACX,CACA,EChWM,GAAN,KAAkB,CAKhB,YAAY,EAAU,EAAW,CAG/B,KAAK,QAAU,GACb,mCACA,EAAW,MAAQ,GACnB,CACN,EAEQ,GAED,MAAK,QAAS,SAAW,QAEzB,KAAK,QAAS,IAAM,GAEpB,KAAK,QAAS,IAAM,EACrB,KAAK,QAAQ,aAAa,OAAQ,cAAc,GAGlD,KAAK,QAAQ,aAAa,aAAc,MAAM,CAClD,CAME,iBAAiB,EAAO,EAAQ,CAC9B,AAAI,CAAC,KAAK,SAIV,CAAI,KAAK,QAAQ,UAAY,MAI3B,IAAe,KAAK,QAAS,IAAK,MAAM,EACxC,KAAK,QAAQ,MAAM,gBAAkB,MACrC,KAAK,QAAQ,MAAM,UAAY,GAAkB,EAAG,EAAG,EAAQ,GAAG,GAElE,GAAe,KAAK,QAAS,EAAO,CAAM,EAEhD,CAEE,SAAU,CACR,AAAI,KAAK,QAAQ,YACf,KAAK,QAAQ,OAAM,EAErB,KAAK,QAAU,IACnB,CACA,EChDM,GAAN,KAAc,CAMZ,YAAY,EAAU,EAAU,EAAO,CACrC,KAAK,SAAW,EAChB,KAAK,KAAO,EACZ,KAAK,MAAQ,EAGb,KAAK,QAAU,OAEf,KAAK,MAAQ,OAAO,KAAK,KAAK,CAAC,GAAK,OAAO,KAAK,KAAK,KAAK,GAAK,EAC/D,KAAK,OAAS,OAAO,KAAK,KAAK,CAAC,GAAK,OAAO,KAAK,KAAK,MAAM,GAAK,EAEjE,KAAK,WAAa,GAClB,KAAK,SAAW,GAEhB,KAAK,MAAQ,GAAW,KAExB,AAAI,KAAK,KAAK,KACZ,KAAK,KAAO,KAAK,KAAK,KACjB,AAAI,KAAK,KAAK,IACnB,KAAK,KAAO,QAEZ,KAAK,KAAO,OAGd,KAAK,SAAS,SAAS,cAAe,CAAE,QAAS,IAAI,CAAE,CAC3D,CAEE,mBAAoB,CAClB,AAAI,KAAK,aAAe,CAAC,KAAK,gBAAe,GAE3C,WAAW,IAAM,CACf,AAAI,KAAK,aACP,MAAK,YAAY,QAAO,EACxB,KAAK,YAAc,KAE7B,EAAS,GAAG,CAEZ,CAQE,KAAK,EAAQ,EAAQ,CACnB,GAAI,CAAC,KAAK,aAAe,KAAK,OAAS,KAAK,eAAc,EAAI,CAG5D,GAAM,GAAiB,KAAK,SAAS,aACnC,iBACC,KAAK,KAAK,MAAQ,KAAK,MAAM,aAAgB,KAAK,KAAK,KAAO,GAC/D,IACR,EACM,KAAK,YAAc,GAAI,IACrB,EACA,KAAK,MAAM,SACnB,CACA,CAEI,AAAI,KAAK,SAAW,CAAC,GAIjB,KAAK,SAAS,SAAS,cAAe,CAAE,QAAS,KAAM,QAAM,CAAE,EAAE,kBAIrE,CAAI,KAAK,eAAc,EACrB,KAAK,UAAU,CAAM,EAErB,MAAK,QAAU,GAAc,eAAe,EAC5C,KAAK,QAAQ,UAAY,KAAK,KAAK,MAAQ,IAGzC,GAAU,KAAK,OACjB,KAAK,MAAM,kBAAkB,EAAI,EAEvC,CAOE,UAAU,EAAQ,CAChB,GAAM,GAAe,GAAc,YAAa,KAAK,EAGrD,AAFA,KAAK,QAAU,EAEX,MAAK,SAAS,SAAS,mBAAoB,CAAE,QAAS,KAAM,QAAM,CAAE,EAAE,kBAItE,MAAK,KAAK,QACZ,GAAa,OAAS,KAAK,KAAK,QAGlC,EAAa,IAAM,KAAK,KAAK,IAE7B,EAAa,IAAM,KAAK,KAAK,KAAO,GAEpC,KAAK,MAAQ,GAAW,QAExB,AAAI,EAAa,SACf,KAAK,SAAQ,EAEb,GAAa,OAAS,IAAM,CAC1B,KAAK,SAAQ,CACrB,EAEM,EAAa,QAAU,IAAM,CAC3B,KAAK,QAAO,CACpB,GAEA,CAOE,SAAS,EAAO,CACd,KAAK,MAAQ,EACb,KAAK,SAAW,GAChB,KAAK,SAAW,EAAM,IAG1B,CAKE,UAAW,CACT,KAAK,MAAQ,GAAW,OAEpB,KAAK,OACP,MAAK,SAAS,SAAS,eAAgB,CAAE,MAAO,KAAK,MAAO,QAAS,IAAI,CAAE,EAGvE,KAAK,MAAM,UACR,KAAK,MAAM,eACX,CAAC,KAAK,QAAQ,YACnB,MAAK,MAAM,UAAU,UAAY,GACjC,KAAK,OAAM,EACX,KAAK,MAAM,kBAAkB,EAAI,GAGzC,CAKE,SAAU,CACR,KAAK,MAAQ,GAAW,MAEpB,KAAK,OACP,MAAK,aAAY,EACjB,KAAK,SAAS,SAAS,eAAgB,CAAE,MAAO,KAAK,MAAO,QAAS,GAAM,QAAS,IAAI,CAAE,EAC1F,KAAK,SAAS,SAAS,YAAa,CAAE,MAAO,KAAK,MAAO,QAAS,IAAI,CAAE,EAE9E,CAKE,WAAY,CACV,MAAO,MAAK,SAAS,aACnB,mBACA,KAAK,QAAU,GAAW,QAC1B,IACN,CACA,CAEE,SAAU,CACR,MAAO,MAAK,QAAU,GAAW,KACrC,CAKE,gBAAiB,CACf,MAAO,MAAK,OAAS,OACzB,CAQE,iBAAiB,EAAO,EAAQ,CAC9B,GAAI,EAAC,KAAK,SAIN,MAAK,aACP,KAAK,YAAY,iBAAiB,EAAO,CAAM,EAI7C,MAAK,SAAS,SAAS,gBAAiB,CAAE,QAAS,KAAM,QAAO,QAAM,CAAE,EAAE,kBAI9E,IAAe,KAAK,QAAS,EAAO,CAAM,EAEtC,KAAK,eAAc,GAAM,CAAC,KAAK,QAAO,IAAI,CAC5C,GAAM,GAAuC,KAAK,QAOlD,AAAI,EAAM,QAEF,EAAC,EAAM,QAAQ,iBAAmB,EAAQ,SAAS,EAAM,QAAQ,gBAAiB,EAAE,IAC1F,GAAM,MAAQ,EAAQ,KACtB,EAAM,QAAQ,gBAAkB,OAAO,CAAK,GAG1C,KAAK,OAEP,KAAK,SAAS,SAAS,kBAAmB,CAAE,MAAO,KAAK,MAAO,QAAO,SAAQ,QAAS,IAAI,CAAE,CAErG,CACA,CAKE,YAAa,CACX,MAAO,MAAK,SAAS,aACnB,oBACA,KAAK,eAAc,GAAO,KAAK,QAAU,GAAW,MACpD,IACN,CACA,CAKE,gBAAiB,CACf,MAAO,MAAK,SAAS,aACnB,wBACA,KAAK,eAAc,EACnB,IACN,CACA,CAKE,UAAW,CACT,AAAI,KAAK,SAAS,SAAS,kBAAmB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAIjE,KAAK,KAAK,EAAI,CAClB,CAKE,iBAAkB,CAChB,MAAO,MAAK,SAAS,aACnB,uBACA,KAAK,UAAS,EACd,IACN,CACA,CAKE,SAAU,CAIR,AAHA,KAAK,SAAW,GAChB,KAAK,MAAQ,KAET,MAAK,SAAS,SAAS,iBAAkB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAIhE,MAAK,OAAM,EAEP,KAAK,eAAc,GAAM,KAAK,SAChC,MAAK,QAAQ,OAAS,KACtB,KAAK,QAAQ,QAAU,KACvB,KAAK,QAAU,MAErB,CAKE,cAAe,CACb,GAAI,KAAK,MAAO,CAEd,GAAI,GAAa,GAAc,iBAAiB,EAChD,EAAW,UAAY,KAAK,SAAS,QAAQ,SAC7C,EAAa,KAAK,SAAS,aACzB,sBACA,EACA,IACR,EACM,KAAK,QAAU,GAAc,yCAAyC,EACtE,KAAK,QAAQ,YAAY,CAAU,EACnC,KAAK,MAAM,UAAU,UAAY,GACjC,KAAK,MAAM,UAAU,YAAY,KAAK,OAAO,EAC7C,KAAK,MAAM,kBAAkB,EAAI,EACjC,KAAK,kBAAiB,CAC5B,CACA,CAKE,QAAS,CAGP,GAFA,KAAK,WAAa,GAEd,KAAK,QAAU,GAAW,MAAO,CACnC,KAAK,aAAY,EACjB,MACN,CAEI,AAAI,KAAK,SAAS,SAAS,gBAAiB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAI/D,CAAI,KAAK,eAAc,EAYrB,AAAI,KAAK,OACF,CAAC,KAAK,MAAM,UACX,UAAY,MAAK,QACvB,MAAK,WAAa,GAElB,sBAAsB,IAAM,CAE1B,AAAI,KAAK,SAAW,KAAK,QAAQ,UAAY,OAE1C,KAAK,QAAS,OAAM,EAAG,KAAK,IAAM,CACjC,KAAK,WAAa,GAClB,sBAAsB,IAAM,CAC1B,KAAK,YAAW,CAChC,CAAe,CACf,CAAa,EAAE,MAAM,IAAM,CACb,KAAK,WAAa,EAChC,CAAa,CAEb,CAAS,GAEG,MAAK,aAEH,MAAK,QAAU,GAAW,QAAoC,KAAK,QAAW,GAAW,QAE7F,KAAK,kBAAiB,EAExB,KAAK,YAAW,GAET,KAAK,SAAW,CAAC,KAAK,QAAQ,YACvC,KAAK,MAAM,UAAU,YAAY,KAAK,OAAO,EAEnD,CAOE,UAAW,CACT,AAAI,KAAK,SAAS,SAAS,kBAAmB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAI7D,KAAK,OACP,CAAI,KAAK,eAAc,GAAM,KAAK,WAGhC,KAAK,YAAW,EACP,KAAK,QAAO,GACrB,KAAK,KAAK,GAAO,EAAI,EAG7B,CAKE,YAAa,CACX,KAAK,SAAS,SAAS,oBAAqB,CAAE,QAAS,IAAI,CAAE,CACjE,CAME,QAAS,CAGP,AAFA,KAAK,WAAa,GAEd,MAAK,SAAS,SAAS,gBAAiB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAI3D,KAAK,SAAW,KAAK,QAAQ,YAC/B,KAAK,QAAQ,OAAM,CAEzB,CAKE,aAAc,CACZ,AAAI,CAAC,KAAK,YAIN,KAAK,SAAS,SAAS,qBAAsB,CAAE,QAAS,IAAI,CAAE,EAAE,kBAKhE,KAAK,OAAS,KAAK,SAAW,CAAC,KAAK,QAAQ,YAC9C,MAAK,MAAM,UAAU,YAAY,KAAK,OAAO,EAEzC,KAAK,aACH,MAAK,QAAU,GAAW,QAAU,KAAK,QAAU,GAAW,QAClE,KAAK,kBAAiB,EAG9B,CACA,ECxbM,GAAN,aAA6B,GAAU,CAMrC,aAAc,CACZ,GAAI,GACE,CAAE,cAAe,KAAK,QAC5B,AAAK,EAEE,AAAI,UAAY,GAErB,EAAW,EAAW,OACb,WAAa,IAEjB,GAAW,OACd,GAAW,MAAQ,KAAK,uBAAuB,EAAW,OAAO,GAG/D,EAAW,OACb,GAAW,EAAW,MAAM,SAX9B,EAAW,EAgBb,GAAM,GAAQ,KAAK,SAAS,WAAY,CACtC,aACA,UACN,CAAK,EACD,MAAO,MAAK,aAAa,WAAY,EAAM,SAAU,CAAU,CACnE,CAME,sBAAsB,EAAW,EAAO,CAEtC,MAAO,IAAI,IAAQ,EAAW,KAAM,CAAK,CAC7C,CAWE,YAAY,EAAO,CACjB,GAAM,CAAE,cAAe,KAAK,QACxB,EACJ,AAAI,MAAM,QAAQ,CAAU,EAE1B,EAAiB,EAAW,GACnB,GAAc,EAAW,SAM7B,GAAW,OACd,GAAW,MAAQ,KAAK,uBAAuB,EAAW,OAAO,GAGnE,EAAiB,EAAW,MAAM,IAGpC,GAAI,GAAW,EAEf,AAAI,YAAoB,UACtB,GAAW,KAAK,sBAAsB,CAAQ,GAKhD,GAAM,GAAQ,KAAK,SAAS,WAAY,CACtC,SAAU,GAAY,CAAA,EACtB,OACN,CAAK,EAED,MAAO,MAAK,aAAa,WAAY,EAAM,SAAU,CAAK,CAC9D,CAQE,uBAAuB,EAAgB,CACrC,MAAI,MAAK,QAAQ,UAAY,KAAK,QAAQ,cACjC,GACL,KAAK,QAAQ,SACb,KAAK,QAAQ,cACb,CACR,GAAW,CAAA,EAGA,CAAC,CAAc,CAC1B,CAQE,sBAAsB,EAAS,CAE7B,GAAM,GAAW,CACf,SACN,EAGU,EAA2C,EAAQ,UAAY,IAAM,EAAU,EAAQ,cAAc,GAAG,EAE9G,GAAI,EAAQ,CAGV,EAAS,IAAM,EAAO,QAAQ,SAAW,EAAO,KAE5C,EAAO,QAAQ,YACjB,GAAS,OAAS,EAAO,QAAQ,YAGnC,EAAS,MAAQ,SAAS,EAAO,QAAQ,UAAW,EAAE,EACtD,EAAS,OAAS,SAAS,EAAO,QAAQ,WAAY,EAAE,EAGxD,EAAS,EAAI,EAAS,MACtB,EAAS,EAAI,EAAS,OAElB,EAAO,QAAQ,UACjB,GAAS,KAAO,EAAO,QAAQ,UAGjC,GAAM,GAAc,EAAQ,cAAc,KAAK,EAE/C,AAAI,GAGF,GAAS,KAAO,EAAY,YAAc,EAAY,IACtD,EAAS,IAAM,EAAY,aAAa,KAAK,GAG3C,GAAO,QAAQ,aAAe,EAAO,QAAQ,UAC/C,GAAS,aAAe,GAEhC,CAEI,MAAO,MAAK,aAAa,cAAe,EAAU,EAAS,CAAM,CACrE,CACA,ECjKO,YAAyB,EAAS,EAAM,CAC7C,GAAI,EAAQ,kBAAmB,CAC7B,GAAM,GAAkB,EAAQ,kBAAkB,EAAS,CAAI,EAC/D,GAAI,EACF,MAAO,EAEb,CAEE,MAAO,CACL,EAAG,SAAS,gBAAgB,YAM5B,EAAG,OAAO,WACd,CACA,CAqCO,YAA4B,EAAM,EAAS,EAAc,EAAU,EAAO,CAE/E,GAAI,GAEJ,GAAI,EAAQ,UACV,EAAe,EAAQ,UAAU,EAAc,EAAU,CAAK,EAAE,WACvD,EAAQ,QACjB,EAAe,EAAQ,QAAQ,OAC1B,CACL,GAAM,GAAiB,UAAY,EAAK,GAAG,YAAW,EAAK,EAAK,MAAM,CAAC,EAEvE,AAAI,EAAQ,IAEV,GAAe,EAAQ,GAE7B,CAEE,MAAO,IAAgB,CACzB,CAQO,YAAwB,EAAS,EAAc,EAAU,EAAO,CACrE,MAAO,CACL,EAAG,EAAa,EACZ,GAAmB,OAAQ,EAAS,EAAc,EAAU,CAAK,EACjE,GAAmB,QAAS,EAAS,EAAc,EAAU,CAAK,EACtE,EAAG,EAAa,EACZ,GAAmB,MAAO,EAAS,EAAc,EAAU,CAAK,EAChE,GAAmB,SAAU,EAAS,EAAc,EAAU,CAAK,CAC3E,CACA,CCjGA,GAAM,IAAkB,IAYlB,GAAN,KAAgB,CAOd,YAAY,EAAS,EAAU,EAAO,EAAM,CAC1C,KAAK,KAAO,EACZ,KAAK,QAAU,EACf,KAAK,SAAW,EAChB,KAAK,MAAQ,CACjB,CAWE,OAAO,EAAU,EAAW,EAAa,CACvC,KAAK,YAAc,CACjB,EAAG,EACH,EAAG,CACT,EAEI,KAAK,YAAc,EAEnB,GAAM,GAAS,KAAK,YAAY,EAAI,KAAK,YAAY,EAC/C,EAAS,KAAK,YAAY,EAAI,KAAK,YAAY,EAErD,KAAK,IAAM,KAAK,IAAI,EAAG,EAAS,EAAS,EAAS,CAAM,EACxD,KAAK,KAAO,KAAK,IAAI,EAAG,EAAS,EAAS,EAAS,CAAM,EAIzD,KAAK,MAAQ,KAAK,IAAI,EAAG,CAAM,EAE/B,KAAK,QAAU,KAAK,YAAW,EAC/B,KAAK,UAAY,KAAK,cAAa,EACnC,KAAK,IAAM,KAAK,IACd,KAAK,QACL,KAAK,UACL,KAAK,QAAO,CAClB,EAEI,KAAK,IAAM,KAAK,IACd,KAAK,IACL,KAAK,QACL,KAAK,SACX,EAEQ,KAAK,MACP,KAAK,KAAK,SAAS,mBAAoB,CAAE,WAAY,KAAM,UAAW,KAAK,QAAQ,CAAE,CAE3F,CAQE,sBAAsB,EAAc,CAElC,GAAM,GAAwF,EAAe,YACvG,EAAc,KAAK,QAAQ,GAEjC,GAAI,EAAC,EAIL,MAAI,OAAO,IAAgB,WAClB,EAAY,IAAI,EAGrB,IAAgB,OACX,KAAK,KAGV,IAAgB,MACX,KAAK,IAGP,OAAO,CAAW,CAC7B,CAWE,eAAgB,CACd,GAAI,GAAgB,KAAK,sBAAsB,WAAW,EAE1D,MAAI,IAKJ,GAAgB,KAAK,IAAI,EAAG,KAAK,IAAM,CAAC,EAEpC,EAAgB,KAAK,YAAY,EAAI,IACvC,GAAgB,GAAkB,KAAK,YAAY,GAG9C,EACX,CAQE,aAAc,CACZ,MAAO,MAAK,sBAAsB,SAAS,GAAK,KAAK,GACzD,CAUE,SAAU,CACR,GAAM,GAAgB,KAAK,sBAAsB,KAAK,EAEtD,MAAI,IAMG,KAAK,IAAI,EAAG,KAAK,IAAM,CAAC,CACnC,CACA,ECxIO,YAAsB,EAAU,EAAU,EAAO,CAEtD,GAAM,GAAU,EAAS,sBAAsB,EAAU,CAAK,EAE9D,GAAI,CAAC,GAAW,CAAC,EAAQ,SACvB,OAGF,GAAM,CAAE,WAAY,EAKd,EAAe,EAAS,cAAgB,GAAgB,EAAS,CAAQ,EACzE,EAAc,GAAe,EAAS,EAAc,EAAU,CAAK,EAEnE,EAAY,GAAI,IAAU,EAAS,EAAU,EAAE,EACrD,SAAU,OAAO,EAAQ,MAAO,EAAQ,OAAQ,CAAW,EAE3D,EAAQ,SAAQ,EAChB,EAAQ,iBACN,KAAK,KAAK,EAAQ,MAAQ,EAAU,OAAO,EAC3C,KAAK,KAAK,EAAQ,OAAS,EAAU,OAAO,CAChD,EAES,CACT,CAaO,YAAuB,EAAO,EAAU,CAC7C,GAAM,GAAW,EAAS,YAAY,CAAK,EAE3C,GAAI,GAAS,SAAS,gBAAiB,CAAE,QAAO,UAAQ,CAAE,EAAE,iBAI5D,MAAO,IAAa,EAAU,EAAU,CAAK,CAC/C,CC3BA,GAAM,IAAN,aAAiC,GAAe,CAI9C,YAAY,EAAS,CACnB,MAAK,EAEL,KAAK,QAAU,GAAW,CAAA,EAC1B,KAAK,KAAO,CAChB,CAME,MAAO,CACL,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EAGzD,GAAsB,KAAK,QAAQ,QAAS,KAAK,QAAQ,eAAe,EACrE,QAAQ,AAAC,GAAmB,CAC3B,EAAe,iBAAiB,QAAS,KAAK,kBAAmB,EAAK,CAC9E,CAAO,CACP,CAKE,kBAAkB,EAAG,CAEnB,GAAI,GAAe,CAAC,GACb,OAAO,MACP,OAAO,UAAU,SAAW,GACjC,OAUF,GAAI,GAAe,CAAE,EAAG,EAAE,QAAS,EAAG,EAAE,OAAO,EAE/C,AAAI,CAAC,EAAa,GAAK,CAAC,EAAa,GACnC,GAAe,MAGjB,GAAI,GAAe,KAAK,gBAAgB,CAAC,EACzC,EAAe,KAAK,aAAa,eAAgB,EAAc,EAAG,IAAI,EACtE,GAAM,GAAa,CACjB,QAAqC,EAAE,aAC7C,EAEI,AAAI,GAAgB,GAClB,GAAE,eAAc,EAChB,KAAK,YAAY,EAAc,EAAY,CAAY,EAE7D,CAOE,gBAAgB,EAAG,CAEjB,GAAI,KAAK,QAAQ,kBACf,MAAO,MAAK,QAAQ,kBAAkB,KAAK,KAAM,CAAC,EAGpD,GAAM,GAA4C,EAAE,OAM9C,EAAoB,AALJ,GACpB,KAAK,QAAQ,SACb,KAAK,QAAQ,cACe,EAAE,aACpC,EAC4C,UACtC,GAAS,IAAU,GAAiB,EAAM,SAAS,CAAa,CACtE,EAEI,MAAI,KAAsB,GACjB,EACE,KAAK,QAAQ,UAAY,KAAK,QAAQ,cAExC,GAIF,CACX,CASE,YAAY,EAAO,EAAY,EAAc,CAE3C,MAAI,QAAO,KACF,GAIT,MAAK,QAAQ,MAAQ,EAGrB,KAAK,QAAQ,kBAAoB,EAEjC,KAAK,WAAa,GAClB,KAAK,QAAQ,EAAO,CAAU,EACvB,GACX,CAQE,QAAQ,EAAO,EAAY,CACzB,GAAM,CAAE,WAAY,KAEpB,AAAI,GACF,GAAQ,WAAa,GAKvB,GAAM,GAAe,CAAA,EAEf,EAAiB,MAAO,GAAQ,WACtC,GAAI,GAAY,EAAQ,UAAU,EAChC,EAAa,KAAK,QAAQ,QAAyC,EAAQ,UAAU,CAAE,MAClF,IAAI,IAAmB,SAC5B,KAAM,IAAI,OAAM,6CAA6C,EACxD,GAAI,IAAmB,WAC5B,EAAa,KAAqD,EAAQ,WAAU,CAAG,MAEvF,MAAM,IAAI,OAAM,yBAAyB,EAI3C,AAAI,MAAO,GAAQ,aAAgB,YAEjC,EAAa,KAAK,EAAQ,YAAW,CAAE,EAGrC,EAAQ,oBAAsB,IAAS,GAAS,GAClD,MAAK,kBAAoB,GAAc,EAAO,IAAI,GAIpD,GAAM,GAAM,EAAE,KAAK,KACnB,QAAQ,IAAI,CAAY,EAAE,KAAK,AAAC,GAAoB,CAClD,GAAI,KAAK,WAAY,CACnB,GAAM,GAAa,EAAgB,GACnC,KAAK,gBAAgB,EAAY,CAAG,CAC5C,CACA,CAAK,CACL,CAOE,gBAAgB,EAAQ,EAAK,CAa3B,GAPI,IAAQ,KAAK,MAAQ,KAAK,YAI9B,MAAK,WAAa,GAGd,OAAO,MACT,OAQF,GAAM,GAAO,MAAO,IAAW,SACzB,GAAI,GAAO,QAAQ,KAAK,OAAO,EAC/B,GAAI,GAAO,KAAK,OAAO,EAE7B,KAAK,KAAO,EACZ,OAAO,KAAO,EAIb,OAAO,KAAK,KAAK,UAAU,EAAG,QAAQ,AAAC,GAAS,CAC/C,KAAK,WAAW,GAAM,QAAQ,AAAC,GAAO,CACpC,EAAK,GAAG,EAAgD,CAAE,CAClE,CAAO,CACP,CAAK,EAIA,OAAO,KAAK,KAAK,QAAQ,EAAG,QAAQ,AAAC,GAAS,CAC7C,KAAK,SAAS,GAAM,QAAQ,AAAC,GAAW,CACtC,EAAK,UAAU,EAAM,EAAO,GAAI,EAAO,QAAQ,CACvD,CAAO,CACP,CAAK,EAEG,KAAK,mBACP,GAAK,cAAc,WAAW,KAAK,iBAAiB,EACpD,KAAK,kBAAoB,MAG3B,EAAK,GAAG,UAAW,IAAM,CAEvB,KAAK,KAAO,KACZ,OAAO,KAAO,IACpB,CAAK,EAED,EAAK,KAAI,CACb,CAKE,SAAU,CACR,AAAI,KAAK,MACP,KAAK,KAAK,QAAO,EAGnB,KAAK,WAAa,GAClB,KAAK,WAAa,KAElB,GAAsB,KAAK,QAAQ,QAAS,KAAK,QAAQ,eAAe,EACrE,QAAQ,AAAC,GAAmB,CAC3B,EAAe,oBAAoB,QAAS,KAAK,kBAAmB,EAAK,CACjF,CAAO,CACP,CACA,EC3RA,GAAG,SAAS,qBAAsB,KAAO,IAAY,CAEnD,GAAM,GAAW,GAAI,IAAmB,CACtC,QAAS,EACT,SAAU,mBACV,sBAAuB,OACvB,WAAa,MAAM,wCAAsB,OAC3C,CAAC,EAED,EAAS,GAAG,WAAY,AAAC,GAAU,CACjC,GAAM,GAAgB,EAAM,SAAS,QACrC,EAAM,SAAW,EAAc,YAAY,CAC7C,CAAC,EAGD,EAAS,GAAG,aAAc,IAAM,CAC9B,EAAS,KAAK,GAAG,gBAAgB,CAC/B,KAAM,iBACN,MAAO,EACP,SAAU,GACV,SAAU,OACV,KAAM,GACN,OAAQ,CAAC,EAAgB,IAAU,CACjC,EAAS,KAAK,GAAG,SAAU,IAAM,CAC/B,GAAM,CAAE,gBAAe,kBAAiB,aAAc,EAAS,KAAK,UAAU,KAE9E,EAAe,UAAY,GAEvB,GAAW,GAAG,QAAQ,MAAM,EAAgB,SAAU,CAAE,KAAM,CAAU,CAAC,EACzE,GAAiB,GAAG,QAAQ,MAAM,EAAgB,MAAO,CAAE,KAAM,CAAgB,CAAC,EAClF,GAAe,GAAG,QAAQ,MAAM,EAAgB,oBAAqB,CAAE,KAAM,0BAA0B,GAAgB,CAAC,CAC9H,CAAC,CACH,CACF,CAAC,CACH,CAAC,EAED,EAAS,KAAK,CAEhB,CAAC,EXxCsV,OAAyB,SAA0C,GAAyB,SAAuC,GAAyB",
  "names": []
}
