{ "version": 3, "sources": ["../../../../../../../../private/var/folders/q8/4dnqkv7n6xl37t7pmtv4lt9w0000gn/T/tmp.v0CSfc6wN6.js"], "sourcesContent": ["\uFEFFvar cacheVersion = 1;\nvar savedTimes = {};\n\nfunction loadInto(el, url, callback) {\n var xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = function (e) {\n if (xhr.readyState === 4 && xhr.status === 200) {\n el.innerHTML = xhr.responseText;\n if (callback) callback();\n }\n };\n\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader('Content-type', 'text/html');\n xhr.send();\n}\n\nfunction selfHost() {\n return window.location.protocol + \"//\" + window.location.host;\n}\n\nvar briefTimer;\nfunction addBrief(msg, data, large, confetti) {\n if (data && data.messages && data.messages.length > 0) return;\n clearTimeout(briefTimer);\n briefTimer = setTimeout(function () {\n let brief = document.querySelector(\"body > .brief\");\n brief.parentNode.removeChild(brief);\n }, 4500);\n let body = document.querySelector(\"body\");\n let brief = document.querySelector(\"body > .brief\");\n\n if (confetti) throwConfetti();\n if (!brief) {\n body.insertAdjacentHTML(\"beforeend\", '
');\n brief = document.querySelector(\"body > .brief\");\n\n brief.addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n }\n large ? addClass(brief, \"large\") : removeClass(brief, \"large\");\n let content = brief.querySelector(\".content\");\n let text = brief.textContent;\n if (text.indexOf(msg) < 0) {\n if (msg.indexOf(\"<\") >= 0 && msg.indexOf(\">\") >= 0) {\n content.insertAdjacentHTML(\"afterbegin\", msg);\n }\n else {\n content.insertAdjacentHTML(\"afterbegin\", '

' + msg + '

');\n }\n }\n}\n\nfunction addOverlayMessage(msg, extra, confetti) {\n let body = document.querySelector(\"body\");\n let overlay = document.querySelector(\"body > .overlay\");\n if (confetti) throwConfetti();\n if (!overlay) {\n addClass(body, \"noscroll\");\n body.insertAdjacentHTML(\"beforeend\", '
OK
');\n overlay = document.querySelector(\"body > .overlay\");\n\n overlay.addEventListener(\"click\", function (e) {\n hideMessageOverlay();\n stopAll(e);\n });\n\n overlay.querySelector(\".close\").addEventListener(\"click\", function (e) {\n hideMessageOverlay();\n stopAll(e);\n });\n\n overlay.firstChild.addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n }\n let content = overlay.querySelector(\".content\");\n let text = content.textContent;\n if (text.indexOf(msg) < 0) {\n if (msg.indexOf(\"<\") >= 0 && msg.indexOf(\">\") >= 0) {\n content.insertAdjacentHTML(\"afterbegin\", msg + (extra ? '' + extra + \"
\" + new Error().stack.replace(/(?:\\r\\n|\\r|\\n)/g, '
') + '
' : \"\"));\n }\n else {\n content.insertAdjacentHTML(\"afterbegin\", '

' + msg + '

' + (extra ? '' + extra + \"
\" + new Error().stack.replace(/(?:\\r\\n|\\r|\\n)/g, '
') + '
' : \"\"));\n }\n }\n}\n\nfunction hideMessageOverlay() {\n let body = document.querySelector(\"body\");\n let overlay = document.querySelector(\"body > .overlay\");\n body.removeChild(overlay);\n removeClass(\"body\", \"noscroll\");\n}\n\nfunction handleResponse(url, result, callback, postdata, source, eventExtra, isFetch) {\n let u = url.split('?');\n if (u.length > 1) u = u[1];\n\n let goal = url.split('/').pop().split('?').pop();\n\n let postdataLength = 0;\n if (typeof postdata === \"string\") {\n postdataLength = postdata.length;\n }\n\n if (goal && goal.length > 0 && (goal.indexOf('=') > 0 || url.indexOf(\"umbraco\") > 0) && (postdata instanceof FormData || postdataLength > 3)) {\n goal = goal.split('=').pop();\n goal += source && source.getAttribute(\"eventextra\") ? source.getAttribute(\"eventextra\") : \"\";\n if (eventExtra) goal += eventExtra;\n plausible(goal);\n }\n\n parseTimeStampCookie(u);\n\n let data = result;\n if (result && result.length > 5 && result.substring(0, 5) === \"error\") {\n if (result.length > 14 && result.substring(0, 14) === \"error.internal\") {\n showApiError(result, true, url);\n }\n else {\n showApiError(result, false);\n }\n return true;\n }\n if (result && result.length > 5 && result.indexOf(\"= 0) {\n if (result.substring(0, 5) !== \"\") + 7);\n let body = document.querySelector(\"body\");\n let div = document.createElement(\"div\");\n addClass(div, \"hidden\");\n div.innerHTML = result;\n body.appendChild(div);\n body.lastChild.firstChild.submit();\n return true;\n }\n if (result && result.length > 1 && result.substring(0, 1) !== \"<\") {\n try {\n data = JSON.parse(result);\n if (data.messages && data.messages.length) {\n showApiMessages(data.messages);\n }\n }\n catch (ex) {\n data = result;\n }\n }\n if (result && result.length > 4 && (result.substr(0, 4) === \"url:\" || result.indexOf(\"url:\") > 0)) {\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\n setTimeout(function () { document.location.href = result.substr(result.indexOf(\"url:\") + 4); }, 100);\n }\n else {\n document.location.href = result.substr(result.indexOf(\"url:\") + 4);\n }\n return true;\n }\n if (callback) {\n callback(data, source);\n }\n else if (source) {\n let result = source.querySelector(\".result[data-status='\" + data + \"']\");\n if (result) {\n let url = result.getAttribute(\"data-url\");\n if (url) {\n if (navigator.userAgent.indexOf(\"Firefox\") != -1) {\n setTimeout(function () { document.location = url; }, 100);\n }\n else {\n document.location = url;\n }\n }\n else {\n forEach(source.querySelectorAll(\".result\"), function (el) {\n removeClass(el, \"active\");\n });\n addClass(result, \"active\");\n scrollToElement(result);\n }\n }\n }\n\n if (source) {\n let submit = source.querySelector(\"input[type=submit]\");\n if (submit) submit.removeAttribute(\"disabled\");\n }\n}\n\nurlParam = function (name) {\n var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);\n if (results === null) {\n return null;\n }\n else {\n return decodeURIComponent(results[1]) || 0;\n }\n};\n\nfunction handleError(msg, url, data, error, callback = undefined) {\n customLog(2, msg, url, data, error);\n showApiError(genericError, false);\n if (callback) callback(-1);\n}\n\nasync function httpr(url, callback, postdata, source, eventExtra) {\n if (isDebug) {\n let u = url.split('?');\n if (u.length > 1) u = u[1];\n savedTimes[u] = new Date().getTime();\n }\n\n let fetchAvailable = (typeof fetch !== 'undefined');\n\n if (source) {\n let submit = source.querySelector(\"input[type=submit]\");\n if (submit) submit.setAttribute(\"disabled\", \"disabled\");\n }\n\n let aft = afToken()?.value;\n if (postdata && typeof postdata !== \"string\") {\n postdata.append(\"__RequestVerificationToken\", aft);\n }\n\n let method = postdata !== undefined ? 'POST' : 'GET';\n if (fetchAvailable) {\n let responseUrl = url;\n let headers = {};\n if (method == \"POST\") headers[\"X-CSRF-TOKEN\"] = aft;\n fetch(url, {\n method: method,\n headers: headers,\n body: postdata ? postdata : null\n }).then(response => {\n if (!response.ok) {\n handleError(\"Network response was not ok\", response.url, undefined, undefined, callback)\n }\n responseUrl = response.url;\n return response.text();\n }).then(data => {\n handleResponse(responseUrl, data, callback, postdata, source, eventExtra, true);\n }).catch(error => {\n handleError(\"apierror\", url, undefined, error, callback)\n });\n } else {\n let request = new XMLHttpRequest();\n request.open(method, url, true);\n if (method == 'POST') request.setRequestHeader('X-CSRF-TOKEN', aft);\n request.onload = function () {\n if (request.status >= 200 && request.status < 400) {\n handleResponse(request.responseURL, request.responseText, callback, postdata, source, eventExtra, false);\n } else {\n handleError(\"apierror\", url, undefined, error, callback)\n }\n };\n\n request.onerror = function (data) {\n handleError(\"onerror\", url, data, undefined, callback)\n };\n\n if (postdata !== undefined) {\n try {\n request.send(postdata);\n }\n catch (ex) {\n handleError(\"onerror\", url, undefined, ex, callback)\n }\n }\n else {\n request.send();\n }\n }\n}\n\nfunction afToken() {\n return document.querySelector('input[name=__RequestVerificationToken');\n}\n\nfunction maxFromProperties(o, a) {\n let max = 0;\n if (!a || a.length === 0) return max;\n for (let i = 0; i < a.length; i++) {\n let k = a[i];\n if (o[k] && o[k] > max) max = o[k];\n }\n return max;\n}\n\nfunction scrollToElement(el) {\n let p = el.getBoundingClientRect().top + window.pageYOffset - 100;\n if (window.navigator.userAgent.indexOf(\"Edge\") > 0) {\n document.body.scrollTop = p;\n }\n else {\n window.scrollTo({\n top: p,\n behavior: \"smooth\"\n });\n }\n}\n\nfunction isInt(value) {\n return !isNaN(value) &&\n parseInt(Number(value)) == value &&\n !isNaN(parseInt(value, 10));\n}\n\nfunction isNullOrWhiteSpace(value) {\n return typeof value !== \"string\" || !value || !value.trim();\n}\n\nfunction cssVar(v) {\n return window.getComputedStyle(document.documentElement).getPropertyValue('--' + v);\n}\n\nfunction _log(s, alwaysShow, text) {\n if (enableLog && console && (alwaysShow === true || enableLogDebug)) {\n if (text) console.log(text);\n console.log(s);\n }\n}\n\nvar forEach = function (arr, callback) {\n if (typeof arr === \"string\") arr = document.querySelectorAll(arr);\n Array.prototype.forEach.call(arr, callback);\n};\n\nvar hasClass, addClass, removeClass;\nhasClass = function (el, className) { if (el) return el.classList.contains(className); };\naddClass = function (el, className) {\n if (typeof el === \"string\") {\n forEach(document.querySelectorAll(el), function (iel) { addClass(iel, className); });\n }\n else {\n if (el) el.classList.add(className);\n }\n};\nremoveClass = function (el, className) {\n if (typeof el === \"string\") {\n forEach(document.querySelectorAll(el), function (iel) { removeClass(iel, className); });\n }\n else {\n if (el) el.classList.remove(className);\n }\n};\n\nfunction addEvent(path, event, func) {\n let el = document.querySelector(path);\n if (el) {\n el.addEventListener(event, func);\n }\n}\n\nfunction addEvents(path, event, func) {\n forEach(path, function (el) {\n el.addEventListener(event, func);\n });\n}\n\nfunction toggleClass(el, className) {\n if (typeof el === \"string\") el = document.querySelector(el);\n\n if (hasClass(el, className)) {\n removeClass(el, className);\n }\n else {\n addClass(el, className);\n }\n}\n\nfunction addClasses(els, className) {\n if (!els || els.length === 0) return;\n els.forEach(function (el) {\n addClass(el, className);\n });\n}\n\nfunction removeClasses(els, className) {\n if (!els || els.length === 0) return;\n els.forEach(function (el) {\n removeClass(el, className);\n });\n}\n\nfunction translate(key) {\n var v = Local[key];\n if (v !== undefined) return v;\n return key;\n}\n\naddDomReadyEventListener(() => {\n document.body.addEventListener('keyup', function (e) {\n if (e.key === 'Tab') {\n let el = document.documentElement;\n el.classList.remove('nfo');\n el.classList.add('tab');\n }\n });\n\n addEvents(\".jslink\", \"click\", function (e) {\n let a = e.target.closest(\".jslink\");\n let href = a ? a.getAttribute(\"href\") : undefined;\n if (href) {\n stopAll(e);\n document.location = href;\n }\n });\n\n forEach(\"form.cf.toggle\", function (el) {\n forEach(el.payment, function (iel) {\n iel.addEventListener('change', function (e) {\n let form = iel.closest(\"form\");\n let target = form.getAttribute(\"data-toggle\").split(\":\");\n let toggle = form.querySelector(\".toggle\");\n let element = form.querySelector(\"input[name=\" + target[0] + \"]:checked\");\n if (element && element.value === target[1]) {\n removeClass(toggle, \"hidden\");\n forEach(toggle.querySelectorAll(\"input\"), function (inp) {\n if (inp.getAttribute(\"data-toggle\") === \"required\") inp.required = true;\n });\n }\n else {\n addClass(toggle, \"hidden\");\n forEach(toggle.querySelectorAll(\"input\"), function (inp) {\n if (inp.getAttribute(\"data-toggle\") === \"required\") inp.required = false;\n });\n }\n });\n });\n });\n});\n\nfunction stopAll(e) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n}\n\nfunction hasAny(arr, value, key) {\n return first(arr, value, key) !== null;\n}\n\nfunction isVisible(elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n}\n\nfunction isValidEmail(email) {\n if (email && email.length === 41 && email.substr(-5) === '.GUID') return true;\n return /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(String(email).toLowerCase());\n}\n\nfunction unique(a) {\n return a.sort().filter(function (value, index, array) {\n return (index === 0) || (value !== array[index - 1]);\n });\n}\n\nfunction first(arr, value, key, ci) {\n if (!arr || !value) return null;\n for (let i = 0; i < arr.length; i++) {\n if (key) {\n if (ci) {\n if (arr[i][key].toLowerCase() === value.toLowerCase()) {\n return arr[i];\n }\n }\n else {\n if (arr[i][key] === value) {\n return arr[i];\n }\n }\n }\n else {\n if (arr[i] === value) {\n return arr[i];\n }\n }\n }\n return null;\n}\n\nfunction removeElement(el) {\n el.parentNode.removeChild(el);\n}\n\nfunction getWidth(el) {\n return parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\n}\nfunction getHeight(el) {\n return parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\n}\nfunction getOffset(el) {\n let rect = el.getBoundingClientRect();\n return {\n top: rect.top + document.body.scrollTop,\n left: rect.left + document.body.scrollLeft\n };\n}\n\nfunction getRndInteger(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nfunction prettyDate(d) {\n return new Date(Date.parse(d)).toLocaleString('da-DK', { day: 'numeric', month: 'long', year: 'numeric' });\n}\n\nfunction throwConfetti() {\n}\n\nfunction parseTimeStampCookie(u) {\n let timeStamps = useTimestamps ? getCookie(\"TimeStamps\") : undefined;\n if (timeStamps && timeStamps.startsWith(\"[\")) {\n try {\n let parsed = JSON.parse(timeStamps);\n let lc = [];\n forEach(parsed, function (ts) {\n lc.push({ \"note\": ts.Note, \"milliseconds\": ts.Milliseconds });\n });\n try {\n showTimestamps({ \"timeStamps\": lc }, u);\n }\n catch (exi) {\n customLog(2, \"showtimestamps failed\", exi);\n }\n }\n catch (ex) {\n customLog(2, \"timestamp parse failed\", ex);\n }\n }\n}\n\nfunction getCookie(name) {\n var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');\n return v ? v[2] : null;\n}\n\uFEFF(function () {\n var location = window.location;\n var document = window.document;\n\n var scriptEl = document.currentScript;\n var endpoint = scriptEl.getAttribute(\"data-api\") || defaultEndpoint(scriptEl);\n var hasDomainLanguage = scriptEl.getAttribute(\"data-domainLanguage\") == \"1\";\n\n function onIgnoredEvent(reason, options) {\n if (reason) console.warn(\"Ignoring Event: \" + reason);\n options && options.callback && options.callback();\n }\n\n function defaultEndpoint(el) {\n return new URL(el.src).origin + \"/api/event\";\n }\n\n function trigger(eventName, options) {\n if (\n location.protocol === \"file:\"\n ) {\n return onIgnoredEvent(\"localhost\", options);\n }\n if (\n window._phantom ||\n window.__nightmare ||\n window.navigator.webdriver ||\n window.Cypress\n ) {\n return onIgnoredEvent(null, options);\n }\n try {\n if (window.localStorage.plausible_ignore === \"true\") {\n return onIgnoredEvent(\"localStorage flag\", options);\n }\n } catch (e) { }\n\n var payload = {};\n let href = location.href.toLowerCase().replace(\"/?\", \"?\");\n let referrer = document.referrer || null;\n if (referrer) {\n referrer = referrer.toLowerCase().replace(\"/?\", \"?\");\n referrer = referrer.endsWith(\"/\") ? referrer.substring(0, referrer.length - 1) : referrer;\n }\n payload.n = eventName;\n payload.u = href.endsWith(\"/\") ? href.substring(0, href.length - 1) : href;\n payload.d = scriptEl.getAttribute(\"data-domain\");\n payload.r = referrer;\n if (options && options.meta) {\n payload.m = JSON.stringify(options.meta);\n }\n if (options && options.props) {\n payload.p = options.props;\n }\n if (hasDomainLanguage) {\n let language = location.host.split('.')[0].split('-')[0];\n if (language && language.length == 2) {\n if (!payload.p) payload.p = {};\n payload.p.browserLanguage = navigator.language || navigator.userLanguage;\n payload.p.language = language;\n }\n }\n\n var propAttributes = scriptEl.getAttributeNames().filter(function (name) {\n return name.substring(0, 6) === \"event-\";\n });\n\n var props = payload.p || {};\n\n propAttributes.forEach(function (attribute) {\n var propKey = attribute.replace(\"event-\", \"\");\n var propValue = scriptEl.getAttribute(attribute);\n props[propKey] = props[propKey] || propValue;\n });\n\n payload.p = props;\n\n // TODO: better send\n\n var url = endpoint;\n var data = JSON.stringify(payload);\n var callback = function () {\n options && options.callback && options.callback();\n }; // Replace with your actual callback function\n\n try {\n // Use Fetch API with keepalive\n fetch(url, {\n method: 'POST',\n keepalive: true,\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: data\n }).then(() => {\n // Ignore the response\n if (typeof callback === 'function') {\n callback();\n }\n }).catch((error) => {\n console.error('Error:', error);\n // Use XMLHttpRequest as a fallback\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.setRequestHeader('Content-Type', 'text/plain');\n xhr.send(data);\n xhr.onload = function () {\n if (xhr.readyState === 4 && xhr.status === 200) {\n if (typeof callback === 'function') {\n callback();\n }\n }\n };\n });\n } catch (error) {\n console.error('Error:', error);\n }\n\n // var request = new XMLHttpRequest();\n // request.open(\"POST\", endpoint, true);\n // request.setRequestHeader(\"Content-Type\", \"text/plain\");\n\n // request.send(JSON.stringify(payload));\n\n // request.onreadystatechange = function () {\n // if (request.readyState === 4) {\n // options && options.callback && options.callback();\n // }\n // };\n }\n\n var queue = (window.plausible && window.plausible.q) || [];\n window.plausible = trigger;\n for (var i = 0; i < queue.length; i++) {\n trigger.apply(this, queue[i]);\n }\n\n var lastPage;\n\n function page() {\n if (lastPage === location.pathname) return;\n lastPage = location.pathname;\n trigger(\"pageview\");\n }\n\n var his = window.history;\n if (his.pushState) {\n var originalPushState = his[\"pushState\"];\n his.pushState = function () {\n originalPushState.apply(this, arguments);\n page();\n };\n window.addEventListener(\"popstate\", page);\n }\n\n function handleVisibilityChange() {\n if (!lastPage && document.visibilityState === \"visible\") {\n page();\n }\n }\n\n if (document.visibilityState === \"prerender\") {\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n } else {\n page();\n }\n function getLinkEl(link) {\n while (link && (typeof link.tagName === 'undefined' || !isLink(link) || !link.href)) {\n link = link.parentNode\n }\n return link\n }\n\n function isLink(element) {\n return element && element.tagName && element.tagName.toLowerCase() === 'a'\n }\n\n function shouldFollowLink(event, link) {\n // If default has been prevented by an external script, Plausible should not intercept navigation.\n if (event.defaultPrevented) { return false }\n\n var targetsCurrentWindow = !link.target || link.target.match(/^_(self|parent|top)$/i)\n var isRegularClick = !(event.ctrlKey || event.metaKey || event.shiftKey) && event.type === 'click'\n return targetsCurrentWindow && isRegularClick\n }\n\n var MIDDLE_MOUSE_BUTTON = 1\n\n function handleLinkClickEvent(event) {\n if (event.type === 'auxclick' && event.button !== MIDDLE_MOUSE_BUTTON) { return }\n\n var link = getLinkEl(event.target)\n var hrefWithoutQuery = link && link.href && link.href.split('?')[0]\n\n if (isElementOrParentTagged(link, 0)) {\n // Return to prevent sending multiple events with the same action.\n // Clicks on tagged links are handled by another function.\n return\n }\n if (isOutboundLink(link)) {\n return sendLinkClickEvent(event, link, { name: 'Outbound Link: Click', props: { url: link.href } })\n }\n if (isDownloadToTrack(hrefWithoutQuery)) {\n return sendLinkClickEvent(event, link, { name: 'File Download', props: { url: hrefWithoutQuery } })\n }\n }\n\n function sendLinkClickEvent(event, link, eventAttrs) {\n var followedLink = false\n\n function followLink() {\n if (!followedLink) {\n followedLink = true\n window.location = link.href\n }\n }\n\n if (shouldFollowLink(event, link)) {\n plausible(eventAttrs.name, { props: eventAttrs.props, callback: followLink })\n setTimeout(followLink, 5000)\n event.preventDefault()\n } else {\n plausible(eventAttrs.name, { props: eventAttrs.props })\n }\n }\n\n document.addEventListener('click', handleLinkClickEvent)\n document.addEventListener('auxclick', handleLinkClickEvent)\n\n function isOutboundLink(link) {\n return link && link.href && link.host && link.host !== location.host\n }\n var defaultFileTypes = ['pdf', 'xlsx', 'docx', 'txt', 'rtf', 'csv', 'exe', 'key', 'pps', 'ppt', 'pptx', '7z', 'pkg', 'rar', 'gz', 'zip', 'avi', 'mov', 'mp4', 'mpeg', 'wmv', 'midi', 'mp3', 'wav', 'wma']\n var fileTypesAttr = scriptEl.getAttribute('file-types')\n var addFileTypesAttr = scriptEl.getAttribute('add-file-types')\n var fileTypesToTrack = (fileTypesAttr && fileTypesAttr.split(\",\")) || (addFileTypesAttr && addFileTypesAttr.split(\",\").concat(defaultFileTypes)) || defaultFileTypes;\n\n function isDownloadToTrack(url) {\n if (!url) { return false }\n\n var fileType = url.split('.').pop();\n return fileTypesToTrack.some(function (fileTypeToTrack) {\n return fileTypeToTrack === fileType\n })\n }\n // Finds event attributes by iterating over the given element's (or its\n // parent's) classList. Returns an object with `name` and `props` keys.\n function getTaggedEventAttributes(htmlElement) {\n var taggedElement = isTagged(htmlElement) ? htmlElement : htmlElement && htmlElement.parentNode\n var eventAttrs = { name: null, props: {} }\n\n var classList = taggedElement && taggedElement.classList\n if (!classList) { return eventAttrs }\n\n for (var i = 0; i < classList.length; i++) {\n var className = classList.item(i)\n\n var matchList = className.match(/plausible-event-(.+)(=|--)(.+)/)\n if (!matchList) { continue }\n\n var key = matchList[1]\n var value = matchList[3].replace(/\\+/g, ' ')\n\n if (key.toLowerCase() === 'name') {\n eventAttrs.name = value\n } else {\n eventAttrs.props[key] = value\n }\n }\n\n return eventAttrs\n }\n\n function handleTaggedFormSubmitEvent(event) {\n var form = event.target\n var eventAttrs = getTaggedEventAttributes(form)\n if (!eventAttrs.name) { return }\n\n event.preventDefault()\n var formSubmitted = false\n\n function submitForm() {\n if (!formSubmitted) {\n formSubmitted = true\n form.submit()\n }\n }\n\n setTimeout(submitForm, 5000)\n plausible(eventAttrs.name, { props: eventAttrs.props, callback: submitForm })\n }\n\n function isForm(element) {\n return element && element.tagName && element.tagName.toLowerCase() === 'form'\n }\n\n var PARENTS_TO_SEARCH_LIMIT = 3\n\n function handleTaggedElementClickEvent(event) {\n if (event.type === 'auxclick' && event.button !== MIDDLE_MOUSE_BUTTON) { return }\n\n var clicked = event.target\n\n var clickedLink\n var taggedElement\n // Iterate over parents to find the tagged element. Also search for\n // a link element to call for different tracking behavior if found.\n for (var i = 0; i <= PARENTS_TO_SEARCH_LIMIT; i++) {\n if (!clicked) { break }\n\n // Clicks inside forms are not tracked. Only form submits are.\n if (isForm(clicked)) { return }\n if (isLink(clicked)) { clickedLink = clicked }\n if (isTagged(clicked)) { taggedElement = clicked }\n clicked = clicked.parentNode\n }\n\n if (taggedElement) {\n var eventAttrs = getTaggedEventAttributes(taggedElement)\n\n if (clickedLink) {\n eventAttrs.props.url = clickedLink.href\n sendLinkClickEvent(event, clickedLink, eventAttrs)\n } else {\n plausible(eventAttrs.name, { props: eventAttrs.props })\n }\n }\n }\n\n function isTagged(element) {\n var classList = element && element.classList\n if (classList) {\n for (var i = 0; i < classList.length; i++) {\n if (classList.item(i).match(/plausible-event-name(=|--)(.+)/)) { return true }\n }\n }\n return false\n }\n\n function isElementOrParentTagged(element, parentsChecked) {\n if (!element || parentsChecked > PARENTS_TO_SEARCH_LIMIT) { return false }\n if (isTagged(element)) { return true }\n return isElementOrParentTagged(element.parentNode, parentsChecked + 1)\n }\n\n document.addEventListener('submit', handleTaggedFormSubmitEvent)\n document.addEventListener('click', handleTaggedElementClickEvent)\n document.addEventListener('auxclick', handleTaggedElementClickEvent)\n})();\n\n\uFEFF\nvar allSVGs = {};\nallSVGs[\"ice\"] = '';\nallSVGs[\"tree\"] = '';\nallSVGs[\"mbike\"] = '';\nallSVGs[\"wroad\"] = '';\nallSVGs[\"sroad\"] = '';\nallSVGs[\"troph1\"] = '';\nallSVGs[\"troph2\"] = '';\nallSVGs[\"troph3\"] = '';\nallSVGs[\"troph4\"] = '';\nallSVGs[\"troph5\"] = '';\nallSVGs[\"troph6\"] = '';\nallSVGs[\"troph7\"] = '';\nallSVGs[\"troph8\"] = '';\nallSVGs[\"label\"] = '{{text}}';\nallSVGs[\"star\"] = '';\n// summer\n//allSVGs[\"captain2020\"] = '';\n// Winter 2021\n//allSVGs[\"captain2020\"] = '';\nallSVGs[\"people\"] = '';\nallSVGs[\"bank\"] = '';\nallSVGs[\"heart\"] = '';\nallSVGs[\"vs\"] = '';\nallSVGs[\"vsalt\"] = '';\n\n\uFEFFaddDomReadyEventListener(() => {\n let campaignDropdowns = document.querySelectorAll(\"select[name='campaigns']\");\n\n if (campaignDropdowns && campaignDropdowns.length > 0) {\n toAPI(\"adminCampaigns\", function (data) {\n let options = '';\n let count = 0;\n forEach(data, function (c) {\n options += '';\n count++;\n });\n if (count > 1) options += '';\n forEach(campaignDropdowns, function (el) {\n el.innerHTML = options;\n });\n }, \"{}\");\n }\n\n addEvent(\"#adminusers .cf\", \"submit\", function (e) {\n let text = e.target.querySelector(\"input[name='text']\");\n let post = { \"Users\": true, \"Text\": text.value };\n toAPI(\"adminSearch\", function (data) {\n if (data.participants) {\n let table = \"\";\n forEach(data.participants, function (el) {\n table += '';\n });\n if (data.participants.length === 0) table += \"\";\n table += \"
' + el.name + '' + el.email + '' + el.phone + '
Ingen resultater
\";\n e.target.closest(\"div\").querySelector(\".table\").innerHTML = table;\n }\n\n }, JSON.stringify(post));\n stopAll(e);\n });\n\n\n addEvent(\"#adminteams .cf\", \"submit\", function (e) {\n let text = e.target.querySelector(\"input[name='text']\");\n let campaign = e.target.querySelector(\"select[name='campaigns']\");\n let campaignId = campaign.value ? parseInt(campaign.value) : 0;\n let post = { \"Groups\": true, \"Text\": text.value, \"CampaignId\": campaignId };\n toAPI(\"adminSearch\", function (data) {\n if (data.participants) {\n let table = \"\";\n forEach(data.groups, function (el) {\n // \n table += '' + (campaignId ? '' : '') + '';\n });\n if (data.groups.length === 0) table += \"\";\n table += \"
' + el.ci + '
' + el.cn + '
' + el.l + '. ' + el.n + '' + el.sNa + ' (' + el.z + ')' + el.pe + '
Ingen resultater
\";\n e.target.closest(\"div\").querySelector(\".table\").innerHTML = table;\n }\n\n }, JSON.stringify(post));\n stopAll(e);\n });\n\n\n addEvent(\"#admincampaigns .cf\", \"submit\", function (e) {\n let campaign = e.target.querySelector(\"select[name='campaigns']\").value;\n let type = e.target.querySelector(\"select[name='type']\").value;\n let url = '/umbraco/surface/adminabcsurface/' + (type === 'Klasser' ? 'groups' : 'participants') + '?campaignId=' + campaign;\n window.open(url);\n stopAll(e);\n });\n\n addEvent(\"#adminwinners .cf\", \"submit\", function (e) {\n let campaign = e.target.querySelector(\"select[name='campaigns']\").value;\n let url = ABCAPIUrl + 'groups/' + campaign + '/false';\n httpr(url, function (data) {\n drawData = data;\n drawDataCampaignId = campaign;\n let drawForm = document.querySelector(\"#admindraw\");\n removeClass(drawForm, \"hidden\");\n let regions = {};\n let municipalities = {};\n let schools = {};\n let potentialCount = 0;\n let sumSeatDays = 0;\n\n forEach(data, function (el) {\n if (el.V0 && el.V0 > 0 && (el.V1 && el.V1 > 0 || el.V2 && el.V2 > 0)) {\n regions[el.R] = true;\n municipalities[el.M] = true;\n schools[el.SNa] = true;\n potentialCount++;\n if (el.V1 && el.V1 > 0) sumSeatDays += (el.V1 / el.V0);\n if (el.V2 && el.V2 > 0) sumSeatDays += (el.V2 / el.V0);\n // Hardcode for cykeltjek, must be V5\n if (el.V5 && el.V5 > 0) sumSeatDays += (el.V5 / el.V0);\n }\n });\n\n _log(potentialCount);\n _log(sumSeatDays);\n\n addOverlayMessage(\"Kampagnen har \" + potentialCount + \" klasser med mindst en cykeldag, cykeltjek eller hjelmdag\");\n\n drawForm.querySelector(\"select[name='region']\").innerHTML = '' + createOptions(Object.entries(regions));\n drawForm.querySelector(\"select[name='municipality']\").innerHTML = '' + createOptions(Object.entries(municipalities));\n drawForm.querySelector(\"select[name='school']\").innerHTML = '' + createOptions(Object.entries(schools));\n drawForm.querySelector(\"select[name='type']\").innerHTML = '';\n });\n stopAll(e);\n });\n\n function download(data, filename, type) {\n var file = new Blob([data], { type: type });\n if (window.navigator.msSaveOrOpenBlob) // IE10+\n window.navigator.msSaveOrOpenBlob(file, filename);\n else {\n var a = document.createElement(\"a\"),\n url = URL.createObjectURL(file);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(function () {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n }\n }\n\n addEvent(\"#admindraw .cf\", \"submit\", function (e) {\n let region = e.target.querySelector(\"select[name='region']\").value;\n let municipality = e.target.querySelector(\"select[name='municipality']\").value;\n let school = e.target.querySelector(\"select[name='school']\").value;\n let type = e.target.querySelector(\"select[name='type']\").value;\n\n let potentials = [];\n let sumSeatDays = 0;\n let sumV4 = 0;\n\n if (type == 'Udskoling') {\n forEach(drawData, function (el) {\n if (el.V4 && el.V4 > 0 && el.V0 && el.V0 > 0 && (region === \"Alle\" || region === el.R) && (municipality === \"Alle\" || municipality === el.M) && (school === \"Alle\" || school === el.SNa)) {\n potentials.push(el);\n // Hardcode for cykeltjek, must be V5\n if (el.V5 && el.V5 > 0) sumSeatDays += (el.V5 / el.V0);\n // Hardcode for KM on V4\n sumV4 += (el.V4 / el.V0);\n el.sumV4 = sumV4;\n }\n });\n\n let r = rnd();\n let winningSD = r * sumV4;\n\n var winner;\n\n for (var i = 0; i < potentials.length; i++) {\n if (potentials[i].sumV4 >= winningSD) {\n winner = potentials[i];\n break;\n }\n }\n\n if (winner) {\n let post = { \"Groups\": true, \"Text\": (winner.I + \"\"), \"CampaignId\": parseInt(drawDataCampaignId) };\n toAPI(\"adminSearch\", function (data) {\n if (data.groups) {\n let wg = data.groups[0];\n let date = new Date().toISOString().replace(/:/gi, \"-\");\n let message = \"Vinderen er: \" + winner.L + \". \" + winner.N + \"
Klasse id: \" + winner.I + \"
Region: \" + winner.R + \"
Kommune: \" + winner.M + \"
Skole: \" + winner.SNa + \"
Lærer email: \" + wg.pe +\n \"

Filter matcher \" + potentials.length + \" hold, summen af V4 (km totalt) / Deltagere er \" + sumV4 +\n \"

Dagens vindernummer er \" + winningSD + \" baseret på det tilfældige tal \" + r + \" ganget med summen af V4 for alle matchede hold \" + sumV4 +\n \"

Udtræk vinder, filtrer Region: '\" + region + \"' Kommune: '\" + municipality + \"' Skole: '\" + school + \"'\" +\n \"

\" + date;\n addOverlayMessage(message);\n download(\"\" + message + \"\", \"draw-\" + date + \".html\", \"html\");\n }\n }, JSON.stringify(post));\n }\n else {\n addOverlayMessage(\"Der kunne ikke findes en vinder, der er sandsynligvis sket en fejl.\");\n }\n }\n else {\n forEach(drawData, function (el) {\n if ((el.V0 && el.V0 > 0 && (el.V1 && el.V1 > 0 || el.V2 && el.V2 > 0)) && (region === \"Alle\" || region === el.R) && (municipality === \"Alle\" || municipality === el.M) && (school === \"Alle\" || school === el.SNa)) {\n potentials.push(el);\n if (el.V1 && el.V1 > 0) sumSeatDays += (el.V1 / el.V0);\n if (el.V2 && el.V2 > 0) sumSeatDays += (el.V2 / el.V0);\n // Hardcode for cykeltjek, must be V5\n if (el.V5 && el.V5 > 0) sumSeatDays += (el.V5 / el.V0);\n el.ssd = sumSeatDays;\n }\n });\n\n let r = rnd();\n let winningSD = r * sumSeatDays;\n\n var winner;\n\n for (var i = 0; i < potentials.length; i++) {\n if (potentials[i].ssd >= winningSD) {\n winner = potentials[i];\n break;\n }\n }\n\n if (winner) {\n let post = { \"Groups\": true, \"Text\": (winner.I + \"\"), \"CampaignId\": parseInt(drawDataCampaignId) };\n toAPI(\"adminSearch\", function (data) {\n if (data.groups) {\n let wg = data.groups[0];\n let date = new Date().toISOString().replace(/:/gi, \"-\");\n let message = \"Vinderen er: \" + winner.L + \". \" + winner.N + \"
Klasse id: \" + winner.I + \"
Region: \" + winner.R + \"
Kommune: \" + winner.M + \"
Skole: \" + winner.SNa + \"
Lærer email: \" + wg.pe +\n \"

Filter matcher \" + potentials.length + \" hold, summen af SeatDays (Cykeldage, cykeltjek og Hjelmdage) / Deltagere er \" + sumSeatDays +\n \"

Dagens vindernummer er \" + winningSD + \" baseret på det tilfældige tal \" + r + \" ganget med SeatDays summen \" + sumSeatDays +\n \"

Udtræk vinder, filtrer Region: '\" + region + \"' Kommune: '\" + municipality + \"' Skole: '\" + school + \"'\" +\n \"

\" + date;\n addOverlayMessage(message);\n download(\"\" + message + \"\", \"draw-\" + date + \".html\", \"html\");\n }\n }, JSON.stringify(post));\n }\n else {\n addOverlayMessage(\"Der kunne ikke findes en vinder, der er sandsynligvis sket en fejl.\");\n }\n }\n stopAll(e);\n });\n\n});\n\nfunction createOptions(a) {\n let s = '';\n forEach(a, function (el) {\n s += '';\n });\n return s;\n}\n\nvar drawData = [];\nvar drawDataCampaignId = 0;\n\nfunction rnd() {\n return crypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32;\n}\n\uFEFFvar apiData = {};\nvar unsavedChanges = 0;\nvar validInteger = /^\\d+$/;\nvar validNumber = /^\\d*([,\\.]\\d+)?$/;\nvar genericError = \"Der er sket en fejl der ikke burde ske, vi beklager ulejligheden, prøv evt. igen om et par minutter.\";\n\nwindow.onbeforeunload = function (e) {\n if (unsavedChanges > 0) {\n let text = \"Du har ændringer du ikke har gemt, er du sikker på du vil forlade denne side?\";\n e = e || window.event;\n\n if (e) {\n e.returnValue = text;\n }\n return text;\n }\n};\n\naddDomReadyEventListener(() => {\n forEach(\"div[data-memberaction]\", function (el) {\n let action = el.dataset.memberaction;\n if (action) {\n switch (action) {\n case \"profile\":\n showProfile(action);\n break;\n default:\n }\n }\n });\n});\n\nfunction showApiError(error, internal, extra) {\n if (internal) {\n if (error) {\n addOverlayMessage(error, extra);\n }\n addOverlayMessage(genericError, extra);\n }\n else {\n addOverlayMessage(error);\n }\n}\n\nfunction showApiMessages(messages) {\n if (messages && messages.length) {\n forEach(messages, function (msg) {\n addOverlayMessage(msg);\n });\n }\n}\n\nfunction showProfile(action) {\n let postData = {};\n\n toAPI(action, function (data) {\n apiData[action] = data;\n let participantName = document.getElementById(\"participantName\");\n if (participantName) {\n participantName.innerHTML = data.name;\n removeClass(participantName.closest(\".r\"), \"hidden\");\n }\n let campaign = apiData.profile.campaign;\n if (campaign) {\n let s = '';\n forEach(apiData.profile.schools, function (school) {\n s += '';\n });\n s += '';\n document.querySelector(\"body\").insertAdjacentHTML(\"beforeend\", s);\n\n drawGroups();\n\n let invite = document.getElementById(\"invite\");\n if (invite) {\n removeClass(invite.closest(\".r\"), \"hidden\");\n invite.addEventListener(\"submit\", function (e) {\n stopAll(e);\n\n let form = e.target.closest(\"form\");\n let emailText = form.querySelector(\"textarea[name='email']\").value.replace(/(\\r\\n|\\n|\\r)/gm, ',').replace(/\\s/g, '').replace(/,,/g, ',');\n\n if (!emailText) {\n showApiMessages([\"Udfyld feltet med email på den eller dem du gerne vil invitere.\"]);\n return;\n }\n\n let sourceEmails = emailText.split(',');\n _log(sourceEmails);\n let emails = [];\n let validationMessages = [];\n forEach(sourceEmails, function (email) {\n if (isValidEmail(email)) {\n emails.push(email);\n }\n else {\n validationMessages.push(email + \" er ikke en gyldig email\");\n }\n });\n\n if (validationMessages.length) {\n showApiMessages(validationMessages);\n return;\n }\n\n form.querySelector(\"input[type='submit']\").disabled = true;\n toAPI(\"invite\", function (data) {\n if (data.messages.length > 0) {\n form.querySelector(\"textarea[name='email']\").value = \"\";\n showApiMessages(data.messages);\n }\n else {\n addBrief(\"Der er sket en fejl...\", data);\n }\n form.querySelector(\"input[type='submit']\").disabled = false;\n }, emails);\n });\n }\n }\n else {\n let noCampaign = document.getElementById(\"ProfileNoActiveCampaigns\");\n if (noCampaign) {\n removeClass(noCampaign, \"hidden\");\n }\n }\n }, JSON.stringify(postData));\n}\n\nfunction updateInputVisibility(el) {\n let form = el.closest(\"form\");\n if (form) {\n var vcs = apiData.profile.campaign.campaignConfiguration.valueConfigurations;\n let inputs = form.querySelectorAll(\"input.val\");\n let level = el.value;\n forEach(inputs, function (field) {\n let vcName = field.getAttribute(\"name\");\n let vc = first(vcs, vcName, 'value');\n if (vc.forGrades && vc.forGrades.indexOf(\",\" + level + \",\")) {\n addClass(field.previousElementSibling, \"hidden\");\n addClass(field, \"hidden\");\n }\n else {\n removeClass(field.previousElementSibling, \"hidden\");\n removeClass(field, \"hidden\");\n }\n });\n }\n}\n\nfunction drawLevelDropdown(selectedLevel) {\n let s = '';\n return s;\n}\n\nfunction drawGroups() {\n let profile = document.getElementById(\"profile\");\n let campaign = apiData.profile.campaign;\n profile.innerHTML = \"\";\n let singleSchool = true;\n let lastId = 0;\n forEach(apiData.profile.groups, function (group) {\n if (lastId !== 0 && group.schoolId !== lastId) singleSchool = false;\n lastId = group.schoolId;\n });\n\n if (apiData.profile.groups && apiData.profile.groups.length > 0) {\n profile.insertAdjacentHTML('beforeend', '

Dine tilmeldte klasser

');\n\n forEach(apiData.profile.groups, function (group) {\n drawGroup(group, profile, campaign, singleSchool);\n });\n\n profile.insertAdjacentHTML('beforeend', '
');\n }\n\n let newGroup = { name: '', schoolId: 0, id: 0, campaignId: campaign.id, level: -1 };\n drawGroup(newGroup, profile, campaign);\n\n removeClass(profile.closest(\".r\"), \"hidden\");\n\n // add datalist, draw create, init forms, activate toggles\n addEvents(\"#profile select\", \"change\", function (e) {\n updateInputVisibility(e.target);\n let form = e.target.closest(\"form\");\n addClass(form, \"changed\");\n form.querySelector(\"input[type='submit']\").disabled = false;\n });\n\n addEvents(\"#profile .toggler\", \"click\", function (e) {\n toggle(e);\n });\n\n addEvents(\"#profile input\", \"input\", function (e) {\n let form = e.target.closest(\"form\");\n addClass(form, \"changed\");\n form.querySelector(\"input[type='submit']\").disabled = false;\n });\n\n addEvents(\"#profile .delete\", \"click\", function (e) {\n if (confirm(\"Er du sikker, du kan ikke fortryde bagefter? (men du kan altid oprette klassen igen)\")) {\n let form = e.target.closest(\"form\");\n let groupId = parseInt(form.getAttribute(\"data-id\"));\n let profile = {\n \"groups\": [{ id: groupId, campaignId: apiData.profile.campaign.id, delete: true }]\n };\n toAPI(\"profile\", function (data) {\n apiData[\"profile\"] = data;\n addBrief(\"Klassen er slettet.\", data);\n drawGroups();\n }, profile);\n }\n stopAll(e);\n });\n\n addEvents(\"#profile form\", \"submit\", function (e) {\n stopAll(e);\n\n let form = e.target.closest(\"form\");\n saveForm(form);\n });\n}\n\nfunction saveForm(form) {\n form.querySelector(\"input[type='submit']\").disabled = true;\n\n let validationResult = validateGroup(form);\n if (validationResult.messages.length) {\n showApiMessages(validationResult.messages);\n return;\n }\n\n let profile = { groups: [validationResult.group] };\n\n toAPI(\"profile\", function (data) {\n apiData[\"profile\"] = data;\n if (data.messages.length > 0) {\n showApiMessages(data.messages);\n }\n else {\n addBrief(\"Klassen er gemt.\", data);\n }\n drawGroups();\n }, profile);\n}\n\nfunction drawGroup(group, parentEl, campaign, singleSchool) {\n if (group.id === 0 && group.schoolId === 0 && apiData.profile.groups.length > 0) {\n group.schoolId = apiData.profile.groups[apiData.profile.groups.length - 1].schoolId;\n }\n let school = first(apiData.profile.schools, group.schoolId, \"id\");\n let schoolName = (school ? school.name : \"\");\n let toggleTag = 'p';\n let buttonText = 'Gem klasse';\n let values = \"\";\n let headingText = \"Tilmeld ny klasse\";\n\n if (group.id !== 0) {\n headingText = group.level + '. ' + group.name + (!singleSchool && schoolName ? ' - ' + schoolName : '');\n forEach(campaign.campaignConfiguration.valueConfigurations, function (vc) {\n let val = group.values[vc.value];\n let cls = 'val';\n let type = \"text\";\n let maxLength = 500;\n if (vc.type === 0 || vc.type === 1) {\n cls += ' number';\n maxLength = 8;\n }\n let pattern = \"\";\n if (vc.value === \"V0\") {\n maxLength = 2;\n pattern = ' pattern=\"^(?:[1-9]|(?:[1-2][0-9])|(?:30))$\"';\n }\n if (vc.forGrades && vc.forGrades.indexOf(\",\" + group.level + \",\") < 0) {\n cls += ' hidden';\n }\n if (vc.value == \"V1\" || vc.value == \"V2\") {\n maxLength = 3;\n maxValue = \"*V0\";\n type = \"number\";\n }\n cls = ' class=\"' + cls + '\"';\n if (vc.type === 3) {\n let parts = vc.label.split('|');\n let lbl = parts[0];\n let options = '';\n parts.forEach(function (o, i) {\n if (i) {\n if (o == val) {\n options += '';\n }\n else {\n options += '';\n }\n }\n });\n values += '' + lbl + (vc.helpText ? '' + vc.helpText + '' : '') + '';\n }\n else {\n values += '' + vc.label + (vc.helpText ? '' + vc.helpText + '' : '') + '';\n }\n });\n }\n else {\n toggleTag = 'h4';\n buttonText = 'Tilmeld ny klasse';\n\n let vc = campaign.campaignConfiguration.valueConfigurations[0];\n let cls = 'val';\n let maxLength = 500;\n if (vc.type === 0 || vc.type === 1) {\n cls += ' number';\n maxLength = 8;\n }\n let pattern = \"\";\n if (vc.type === 0) {\n maxLength = 2;\n pattern = ' pattern=\"^(?:[1-9]|(?:[1-2][0-9])|(?:30))$\"';\n }\n cls = ' class=\"' + cls + '\"';\n values += '' + vc.label + (vc.helpText ? '' + vc.helpText + '' : '') + '';\n }\n\n let s = '
' +\n '<' + toggleTag + ' class=\"toggler off\">' + headingText + '
' +\n '
' +\n (group.id !== 0 ? '

Ret klassedetaljer

' : '') +\n drawLevelDropdown(group.level) +\n '' +\n '' +\n (group.id !== 0 ? '
' : '') +\n values +\n '
';\n parentEl.insertAdjacentHTML(\"beforeend\", s);\n}\n\nfunction validateGroup(form) {\n var messages = [];\n var group = {};\n\n group.id = parseInt(form.getAttribute(\"data-id\"));\n let level = form.querySelector(\"select[name='level']\").value;\n if (level === \"\") {\n messages.push(\"Vælg et klassetrin\");\n group.level = -1;\n }\n else {\n group.level = parseInt(level);\n }\n group.name = form.querySelector(\"input[name='name']\").value;\n if (!group.name) messages.push(\"Klassenavn skal udfyldes\");\n if (group.name.indexOf(group.level) == 0) messages.push(\"Klassens navn skal ikke indeholde klassetrin\");\n\n let school = form.querySelector(\"input[name='school']\").value;\n let schoolElement = first(apiData.profile.schools, school, \"name\", true);\n if (school) {\n if (!schoolElement) {\n messages.push(\"Den indtastede skole matcher ikke nogen på listen, kontakt os hvis din skole mangler.\");\n group.schoolId = 0;\n }\n else {\n group.schoolId = schoolElement.id;\n }\n }\n else {\n messages.push(\"Skole feltet skal udfyldes\");\n }\n if (group.id === 0 && messages.length === 0) {\n forEach(apiData.profile.groups, function (g) {\n if (g.name.toLowerCase() === group.name.toLowerCase() && g.level === group.level && g.schoolId === group.schoolId) {\n messages.push(\"Klassen findes allerede\");\n }\n });\n }\n\n group.values = {};\n let inputs = form.querySelectorAll(\"input.val,select.val\");\n let vcs = apiData.profile.campaign.campaignConfiguration.valueConfigurations;\n let students = 0;\n forEach(inputs, function (input) {\n let val = input.value;\n let key = input.getAttribute(\"name\");\n if (key == \"V0\") students = val;\n if (val) {\n let vc = first(vcs, key, \"value\");\n if (vc.forGrades && vc.forGrades.indexOf(\",\" + group.level + \",\") < 0) return;\n if (vc.type === 0 && !validInteger.test(val)) {\n messages.push(vc.errorText ? vc.errorText : vc.label + \" skal være et heltal\");\n }\n if (vc.type === 1 && !validNumber.test(val)) {\n messages.push(vc.errorText ? vc.errorText : vc.label + \" skal være et tal, maks 1 komma\");\n }\n }\n if (key === \"V1\" || key === \"V2\") {\n if (validInteger.test(val) && validInteger.test(students)) {\n if (val > (14 * students)) {\n let vc = first(vcs, key, \"value\");\n messages.push(vc.label + \" kan max være 14 * antallet af elever i klassen (\" + (14 * students) + \")\");\n }\n }\n }\n if (key === \"V5\" && validInteger.test(students) && validInteger.test(val) && parseInt(val) > parseInt(students)) {\n let vc = first(vcs, key, \"value\");\n messages.push(vc.label + \" kan max være antallet af elever i klassen (\" + (students) + \")\");\n }\n group.values[key] = val;\n });\n\n if (messages.length === 0) {\n group.campaignId = apiData.profile.campaign.id;\n group.changed = true;\n }\n\n return { messages: messages, group: group };\n}\n\nfunction toComma(n, pretty) {\n if (pretty) {\n return n.toLocaleString('da-DK', {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n });\n }\n else {\n return n.toString().replace('.', ',');\n }\n}\n\nfunction toPoint(n) {\n if (!validNumber.test(n)) return n;\n return Math.round((parseFloat(n.toString().replace(',', '.')) + 0.00001) * 100) / 100;\n}\n\n\nfunction toAPI(action, callback, postData, noAuth) {\n let url = noAuth ? ABCAPIUrl + action : abcSurface + \"ToAPI?action=\" + action;\n httpr(url, function (data) {\n if (data === -1) {\n _log(data);\n _log(action);\n _log(url);\n addOverlayMessage(genericError, url);\n }\n else if (data === \"0\") {\n window.location = \"/login\";\n }\n else {\n callback(data);\n }\n }, typeof postData === \"string\" ? postData : JSON.stringify(postData));\n}\n\nfunction getApiData(action, callback, refresh) {\n if (refresh || !apiData[action]) {\n toAPI(action, function (data) {\n apiData[action] = data;\n callback(data);\n }, \"{}\");\n }\n else {\n callback(apiData[action]);\n }\n}\n\nfunction campaignById(id) {\n return first(apiData.profile.campaigns, parseInt(id), \"id\");\n}\n\nfunction customLog(level, ...args) {\n if (level < 0) {\n console.log(...args);\n return;\n }\n if (level > 0) {\n try {\n let err = {};\n args.forEach((a, i) => {\n err[\"p\" + i] = a;\n });\n plausible(level > 1 ? \"error\" : \"warn\", { \"props\": err });\n }\n catch (error) {\n console.error(\"plausible\", error);\n if (visibleLogging) {\n printError(2, ...args)\n }\n }\n }\n if (visibleLogging) {\n printError(level, ...args)\n }\n switch (level) {\n case 0:\n console.log(...args);\n break;\n case 1:\n console.warn(...args);\n break;\n case 2:\n console.error(...args);\n break;\n default:\n console.log(...args);\n }\n}\n\nfunction printError(level, ...args) {\n let errors = document.querySelector(\"#errors\");\n if (errors) {\n let html = ` 0 ? `level${level}` : '')}\">`;\n args.forEach((a, i) => {\n html += `${typeof a == \"string\" ? a : (isElement(a) ? escapeHTML(a.outerHTML) : JSON.stringify(a, null, 2))}${i < (args.length - 1) ? \" | \" : \"\"}`;\n });\n errors.insertAdjacentHTML(\"afterbegin\", html + \"\\n\");\n }\n}\n\n\nfunction isElement(o) {\n try {\n return o instanceof HTMLElement;\n } catch (e) {\n return (typeof o === \"object\") &&\n (o.nodeType === 1) &&\n (typeof o.style === \"object\") &&\n (typeof o.ownerDocument === \"object\");\n }\n}\n\n\uFEFFaddDomReadyEventListener(() => {\n var elements = document.querySelectorAll('input,select,textarea');\n var invalidListener = function () {\n let form = this.closest(\"form\");\n let firstInvalid = form.querySelector(\":invalid\");\n if (firstInvalid === this) {\n this.scrollIntoView(false);\n scrollToElement(this);\n }\n };\n\n for (var i = elements.length; i--;) {\n elements[i].addEventListener('invalid', invalidListener);\n }\n\n let prefillEmail = urlParam(\"email\");\n if (prefillEmail) {\n forEach(document.querySelectorAll(\"form.prefill\"), function (el) {\n let field = el.querySelector(\"input[type='email']\");\n if (field) field.value = prefillEmail;\n });\n }\n\n initForms();\n\n forEach(\".products .product\", function (el) {\n el.addEventListener(\"input\", function (e) {\n let el = e.target;\n if (el) {\n let v = el.value;\n let p = el.nextElementSibling;\n let pr = el.dataset.price;\n if (v && isInt(v) && p && pr) {\n p.innerHTML = \"I alt \" + toComma(v * toPoint(pr), true) + \" kr.\";\n removeClass(p, \"hidden\");\n }\n else {\n p.innerHTML = \"\";\n addClass(p, \"hidden\");\n }\n }\n });\n });\n});\n\nfunction initForms() {\n let forms = document.querySelectorAll(\"form.simple:not(.initdone)\");\n addEvents(forms, \"submit\", function (e) {\n let form = e.target;\n if (hasClass(form, \"pw\")) {\n let pw = form.querySelector(\"input[name=password]\");\n let newpw = form.querySelector(\"input[name=newpassword]\");\n let pwe = form.querySelector(\"span[for=password]\");\n let blankOk = hasClass(form, \"update\");\n\n if (blankOk && pw.value.length === 0) {\n addClass(pwe, \"hidden\");\n }\n else {\n if (pw.value.length < 6 || pw.value !== newpw.value) {\n removeClass(pwe, \"hidden\");\n return stopAll(e);\n }\n else {\n addClass(pwe, \"hidden\");\n }\n }\n }\n if (hasClass(form, \"hasProducts\")) {\n let sum = 0;\n forEach(form.querySelectorAll(\".product\"), function (el) {\n let val = el.value;\n if (val && isInt(val) && val > 0) sum += parseInt(val);\n });\n if (sum === 0) {\n scrollToElement(form.querySelector(\".products\"));\n return stopAll(e);\n }\n }\n\n httpr(abcSurface + form.getAttribute(\"data-method\"), undefined, new FormData(form), form);\n return stopAll(e);\n });\n addClasses(forms, \"initdone\");\n\n\n forms = document.querySelectorAll(\"form.simpleToAPI:not(.initdone)\");\n addEvents(forms, \"submit\", function (e) {\n let form = e.target.closest(\"form\");\n removeClasses(form.querySelectorAll(\".result\"), \"active\");\n\n let dto = {};\n forEach(form.querySelectorAll(\"select, input:not([type=submit]):not([type=button])\"), function (formEl) {\n dto[formEl.getAttribute(\"name\")] = (formEl.getAttribute(\"data-type\") === \"int\" ? parseInt(formEl.value) : formEl.value);\n });\n\n toAPI(form.getAttribute(\"data-method\"), function (data) {\n if (data) {\n let activeResult = form.querySelector(\".result[data-status='\" + data.result + \"']\");\n if (activeResult) addClass(activeResult, \"active\");\n }\n else {\n let activeResult = form.querySelector(\".result[data-status='0']\");\n if (activeResult) addClass(activeResult, \"active\");\n }\n }, dto, false);\n\n return stopAll(e);\n });\n addClasses(forms, \"initdone\");\n}\n\uFEFFfunction webPsupport(callback) {\n var webP = new Image();\n webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';\n webP.onload = webP.onerror = function () {\n callback(webP.height === 2);\n };\n}\n\naddDomReadyEventListener(() => {\n webPsupport(function (hasWebP) {\n let skipSteppingSize = [370, 570, 1170];\n forEach(\"img[data-src]\", function (img) {\n if (hasClass(img, \"lazy\")) return;\n if (!isVisible(img)) {\n addClass(img, \"lazy\");\n return;\n }\n let mode = img.closest(\".images\") ? \"max\" : \"crop\";\n let src = img.getAttribute(\"data-src\")?.toLowerCase();\n let isPNG = src.indexOf(\".png\") > 0;\n let height = img.clientHeight;\n let width = img.clientWidth;\n let uw = img.getAttribute(\"data-uw\");\n if (uw && width > uw) width = uw;\n let allowSizeSteps = true;\n if (hasClass(img, \"defaultAspect\")) {\n if (uw) {\n img.style.maxWidth = uw + \"px\";\n if (uw < width) {\n width = uw;\n allowSizeSteps = false;\n }\n }\n if (img.getAttribute(\"data-aspect\")) {\n height = width * img.getAttribute(\"data-aspect\");\n }\n else {\n height = \"\";\n }\n }\n if (hasClass(img, \"sizebyheight\")) {\n height = img.parentNode.clientHeight;\n width = \"\";\n }\n let pe = img.parentElement;\n if (width <= 1) {\n while (pe) {\n width = pe.offsetWidth;\n if (width > 1) {\n break;\n }\n else {\n pe = pe.parentElement;\n }\n }\n }\n\n if (allowSizeSteps && width && skipSteppingSize.indexOf(width) < 0) {\n let stepSize = 10;\n if (width > 1200) {\n stepSize = 200;\n }\n else if (width > 600) {\n stepSize = 100;\n }\n else if (width > 300) {\n stepSize = 50;\n }\n let steppedWidth = Math.ceil(width / stepSize) * stepSize;\n let steppedHeight = height ? Math.round(height / width * steppedWidth) : height;\n width = steppedWidth;\n height = steppedHeight;\n }\n\n if ((pe === img.parentElement) && pe.tagName !== 'DIV' && pe.closest('article')) height = 0;\n\n if (src.indexOf(\".svg\") < 0) {\n src = src.split('?')[0] + \"?quality=80&rmode=\" + mode + \"&width=\" + (width <= 0 ? \"\" : width) + \"&height=\" + (height <= 1 ? \"\" : height) + (img.getAttribute(\"data-center\") ? \"&rxy=\" + img.getAttribute(\"data-center\") : \"\") + (hasWebP && !isPNG ? \"&format=webp\" : \"\") + (hasClass(img, \"preflow\") ? \"&autorotate=true\" : \"\");\n }\n img.addEventListener(\"load\", function (e) {\n var parent = e.target.parentNode;\n if (parent) {\n setTimeout(function () { addClass(parent, \"hlc\"); }, 300);\n if (parent.classList.contains(\"img\")) addClass(parent, \"lazyloaded\");\n }\n img.removeAttribute(\"data-src\");\n addClass(img, \"lazyloaded\");\n });\n img.setAttribute(\"loading\", \"lazy\");\n img.setAttribute(\"src\", src);\n if (hasClass(img.parentNode, \"contain\")) {\n img.parentNode.setAttribute(\"data-bg\", \"url(\" + img.getAttribute(\"data-src\") + \")\");\n }\n });\n });\n});\n\nfunction injectSVG(el) {\n let src = el.src;\n let parent = el.parentNode;\n removeElement(el);\n loadInto(parent, src, function () { }, \"image/svg+xml\");\n}\n\uFEFFvar enableLog = true;\nvar enableLogDebug = true;\n\nvar cseUrl = 'https://www.googleapis.com/customsearch/v1/siterestrict?key=AIzaSyBmepL_ZguYZcP0ksZ7wT6GwOeLrUqPKTU&cx=002024686760376196567:vftrx4tbstk&q=';\nvar abcSurface = \"/umbraco/surface/abcsurface/\";\n\n//var videoAccept = '
Du skal acceptere marketing cookies for at se video.
';\n//$(function () {\n// if (window.videoAccept !== undefined) $(\"iframe[data-cookieconsent]\").closest(\".embed-container\").before(videoAccept);\n// $(\"iframe[data-cookieconsent]\").each(function () {\n// $(this).attr(\"src\", $(this).attr(\"data-src\"));\n// });\n//});\n\nwindow.addEventListener('resize', function () {\n setDataScale();\n});\n\nfunction setDataScale() {\n forEach(document.querySelectorAll(\".rscaled\"), function (el) {\n let max = el.getAttribute(\"data-max\");\n if (!max) max = 1170;\n\n let vw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n if (vw > 30) vw = vw - 30;\n let scale = vw < max ? vw / max : 1;\n el.setAttribute(\"style\", '--rscale: ' + scale + '; --scalemax: ' + max + 'px');\n if (vw < max) {\n addClass(el, \"scaled\");\n }\n else {\n removeClass(el, \"scaled\");\n }\n });\n}\n\naddDomReadyEventListener(() => {\n setDataScale();\n\n let map = document.querySelector(\"#map\");\n if (map) {\n var refs = document.getElementsByTagName('script');\n var script = document.createElement('script');\n script.src = 'https://maps.googleapis.com/maps/api/js?key=AIzaSyBwUmOPOhiVRK3mg2VIwEvldOjF_lSR5Kg&callback=initMap&v=quarterly';\n refs[refs.length - 1].parentNode.insertBefore(script, refs[refs.length - 1]);\n }\n\n forEach(\".pu\", function (el) {\n addClass(el.parentNode, \"haspu\");\n });\n\n forEach(\".filter\", function (el) {\n pageListFilter(el);\n });\n\n var someshare = document.querySelector(\"li.share\");\n if (someshare) {\n var url = window.location.href.split('?')[0].split('#')[0];\n var canonical = document.querySelector(\"link[rel='canonical']\");\n if (canonical) url = canonical.getAttribute(\"href\");\n\n let sh = someshare.querySelector(\".tw\");\n if (sh) sh.setAttribute(\"href\", \"http://twitter.com/share?text=&hashtags=abc&url=\" + encodeURIComponent(url));\n sh = someshare.querySelector(\".fb\");\n if (sh) sh.setAttribute(\"href\", \"https://www.facebook.com/sharer/sharer.php?u=\" + encodeURIComponent(url));\n }\n\n forEach(\".banner .bike\", function (el) {\n var url = cssVar(\"logocykel\" + el.getAttribute(\"data-bike\"));\n var svg = decodeURIComponent(url.substring(url.indexOf(\",\") + 1, url.indexOf(\")\") - 1));\n el.innerHTML = svg;\n });\n\n let mega = document.querySelector(\"nav.mega > ul\");\n forEach(\".stick a\", function (el) {\n if (!hasClass(el, \"search\") && el !== el.parentNode.children[0]) {\n let li = document.createElement(\"li\");\n addClass(li, \"added\");\n li.innerHTML = el.outerHTML;\n removeClass(li.querySelector(\"a\"), \"button\");\n mega?.prepend(li);\n }\n });\n\n addEvents(\".toggler\", \"click\", function (e) {\n toggle(e);\n });\n\n addEvent(\"nav.mega\", \"click\", function (e) {\n e.stopPropagation();\n });\n\n addEvent(\".burger\", \"click\", function (e) {\n toggleClass(\"nav.mega\", \"showMobile\");\n document.getElementById(\"burger-check\").checked = !document.getElementById(\"burger-check\").checked;\n return stopAll(e);\n });\n\n addEvent(\"a.search\", \"click\", function (e) {\n toggleClass(e.target, \"out\");\n return stopAll(e);\n });\n\n addEvents(\".main a, .sub a:not(.search)\", \"click\", function (e) {\n if (hasClass(e.target, \"show\")) {\n hideMenu();\n }\n else {\n let mega = document.querySelector(\"nav.mega\");\n removeClass(mega, \"showMobile\");\n document.getElementById(\"burger-check\").checked = false;\n\n return showMenu(e.target, e);\n }\n return stopAll(e);\n });\n\n addEvent(\".sub form\", \"click\", function (e) {\n e.stopPropagation();\n });\n\n addEvent(\"body\", \"click\", function (e) {\n let s = document.querySelector(\"a.search\");\n if (s) removeClass(s, \"out\");\n hideMenu();\n });\n\n forEach(\"p.limit\", function (el) {\n if (el.offsetHeight > 150) {\n addClass(el, \"limited\");\n }\n else {\n removeClass(el, \"limit\");\n }\n });\n\n addEvent(\"p.limit\", \"click\", function (e) {\n removeClass(e.target, \"limited\");\n stopAll(e);\n });\n\n\n var pop = document.querySelector(\"div.pop\");\n if (pop) {\n let popId = pop.dataset.id;\n let popKey = \"pop\" + popId;\n let today = new Date().toISOString().split('T')[0];\n let lastShown = localStorage.getItem(popKey);\n if (!lastShown || lastShown != today) {\n localStorage.setItem(popKey, today);\n const dialog = document.getElementById('imageDialog');\n document.body.classList.add(\"noscroll\");\n dialog.addEventListener(\"close\", (e) => {\n document.body.classList.remove(\"noscroll\");\n });\n dialog.querySelector(\"form\").insertAdjacentHTML(\"beforeend\", pop.outerHTML);\n\n let delay = pop.dataset.delay;\n if (delay) {\n setTimeout(function () { dialog.showModal(); }, delay * 1000);\n }\n else {\n dialog.showModal();\n }\n }\n }\n\n\n if (window.gtmId !== undefined && window.gtmId !== '') {\n window.dataLayer = window.dataLayer || [];\n\n gtag(\"consent\", \"default\", {\n ad_storage: \"denied\",\n analytics_storage: \"denied\",\n wait_for_update: 500\n });\n gtag(\"set\", \"ads_data_redaction\", true);\n\n (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l !== 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = '//www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', gtmId);\n }\n});\n\nfunction pageListFilter(filter) {\n let pages = filter.closest(\".r\").querySelectorAll(\".base\");\n let types = [];\n let topics = [];\n forEach(pages, function (page) {\n let dataTypes = page.getAttribute(\"data-types\");\n let dataTopics = page.getAttribute(\"data-topics\");\n let s = \"\";\n let allNumbers = true;\n if (dataTypes) {\n forEach(dataTypes.split(','), function (t) {\n if (types.indexOf(t) < 0) types.push(t);\n if (validInteger.test(t)) {\n s += t + \". \";\n }\n else {\n allNumbers = false;\n s += (s ? \", \" + t : t);\n }\n });\n }\n if (s) s = (allNumbers ? \"Klassetrin: \" : \"\") + s + \"
\";\n let s2 = \"\";\n if (dataTopics) {\n forEach(dataTopics.split(','), function (t) {\n if (topics.indexOf(t) < 0) topics.push(t);\n s2 += (s2 ? \", \" + t : t);\n });\n }\n if ((s + s2)) {\n let div = page.querySelector(\".content > div\");\n if (div) div.insertAdjacentHTML(\"beforeend\", '

' + s + s2 + '

');\n }\n });\n let allNumbers = true;\n forEach(types, function (type) {\n if (!validInteger.test(type)) {\n allNumbers = false;\n }\n });\n if (allNumbers) {\n for (var i = 0; i < types.length; i++) {\n types[i] = parseInt(types[i]);\n }\n types.sort(function (a, b) {\n return a - b;\n });\n }\n else {\n types.sort();\n }\n topics.sort();\n let typeDropdown = filter.querySelector(\"select[name=type]\");\n let topicDropdown = filter.querySelector(\"select[name=topic]\");\n let s = typeDropdown.innerHTML;\n forEach(types, function (type) {\n s += ''\n });\n typeDropdown.innerHTML = s;\n\n s = topicDropdown.innerHTML;\n forEach(topics, function (topic) {\n s += ''\n });\n topicDropdown.innerHTML = s;\n addEvents(filter.querySelectorAll(\"select\"), \"change\", function (e) {\n updatePageFilter(filter);\n });\n}\n\nfunction updatePageFilter(filter) {\n let typeDropdown = filter.querySelector(\"select[name=type]\");\n let topicDropdown = filter.querySelector(\"select[name=topic]\");\n let type = typeDropdown.value;\n let topic = topicDropdown.value;\n let container = filter.closest(\".r\");\n if (container.querySelector(\".base\")) container = container.querySelector(\".base\").closest(\".co\");\n let pages = container.querySelectorAll(\".base\");\n let empty = true;\n forEach(pages, function (page) {\n let pageType = page.getAttribute(\"data-types\");\n let pageTopic = page.getAttribute(\"data-topics\");\n let hide = false;\n if (type && (!pageType || (\",\" + pageType + \",\").indexOf(\",\" + type + \",\") < 0)) {\n hide = true;\n }\n if (topic && (!pageTopic || (\",\" + pageTopic + \",\").indexOf(\",\" + topic + \",\") < 0)) {\n hide = true;\n }\n if (hide) {\n addClass(page, \"hidden\");\n }\n else {\n empty = false;\n removeClass(page, \"hidden\");\n }\n });\n if (empty) {\n addClass(container, \"empty\");\n }\n else {\n removeClass(container, \"empty\");\n }\n}\n\nfunction gtag() {\n dataLayer.push(arguments);\n}\n\nfunction toggle(e) {\n stopAll(e);\n let toggle = e.target;\n if (hasClass(toggle, \"off\")) {\n removeClass(toggle, \"off\");\n }\n else {\n addClass(toggle, \"off\");\n }\n}\n\nfunction hideMenu() {\n let mega = document.querySelector(\"nav.mega\");\n if (mega) {\n addClass(mega, \"hidden\");\n removeClass(mega, \"showMobile\");\n document.getElementById(\"burger-check\").checked = false;\n\n forEach(\".main a, .sub a:not(.search)\", function (el) {\n removeClass(el, \"show\");\n });\n }\n}\n\nfunction showMenu(el, e) {\n forEach(\".main a, .sub a:not(.search)\", function (el) {\n removeClass(el, \"show\");\n });\n addClass(el, \"show\");\n\n var href = el.getAttribute(\"href\");\n var solo = false;\n forEach(\".mega > ul > li > a\", function (elx) {\n if (elx.getAttribute(\"href\") === href) {\n if (!solo) solo = hasClass(elx, \"solo\");\n removeClass(elx.parentNode, \"hidden\");\n }\n else {\n addClass(elx.parentNode, \"hidden\");\n }\n });\n if (solo) return;\n\n removeClass(document.querySelector(\"nav.mega\"), \"hidden\");\n\n if (e) return stopAll(e);\n}\n\uFEFFvar mapData;\nvar valueHeadings;\nvar map;\nvar lastMarkerId;\nvar extraR = 250;\nvar extraL = 70;\nvar extraT = 300;\nvar lastBounds;\n\nvar smallWidth = 800;\nvar centerMapX = 56.3;\nvar centerMapY = 11.4;\nvar searchZoom = 12;\nvar searchZoomSmall = 10;\nvar defaultZoom = 7;\nvar defaultZoomSmall = 6;\n\nfunction CustomMarker(latlng, map, args) {\n this.latlng = latlng;\n this.args = args;\n this.setMap(map);\n}\n\nwindow.initMap = function initMap() {\n CustomMarker.prototype = new google.maps.OverlayView();\n\n CustomMarker.prototype.draw = function () {\n\n var self = this;\n\n var div = this.div;\n\n if (!div) {\n\n div = this.div = document.createElement('div');\n\n div.className = 'marker';\n\n div.dataset.markerid = self.args.markerid;\n if (self.args.i) div.dataset.i = self.args.i;\n if (self.args.n) div.dataset.n = self.args.n;\n if (self.args.ls) div.dataset.ls = self.args.ls;\n if (self.args.size) div.dataset.size = self.args.size;\n if (self.args.ll) div.dataset.ll = self.args.ll;\n\n google.maps.event.addDomListener(div, \"click\", function (e) {\n let el = e.target;\n addClass(el, \"active\");\n let $map = document.querySelector(\"#map\");\n let $mapinfo = document.querySelector(\"#mapinfo\");\n let to = getOffset(el);\n let mo = getOffset($map);\n\n mo.right = getWidth($map) + mo.left;\n mo.bottom = getHeight($map) + mo.top;\n var panX = 0;\n var panY = 0;\n if (to.left < mo.left + extraL) panX = (mo.left + extraL) - to.left;\n if (to.left > mo.right - extraR) panX = (mo.right - extraR) - to.left;\n if (to.top < mo.top + extraT) panY = (mo.top + extraT) - to.top;\n\n map.panBy(-panX, -panY);\n\n if (lastMarkerId) {\n let $lm = $map.querySelector(\"div[data-markerid='\" + lastMarkerId + \"']\");\n removeClass($lm, \"active\");\n $lm.innerHTML = \"\";\n }\n lastMarkerId = el.getAttribute(\"data-markerid\");\n\n var item = mapData[lastMarkerId];\n let text = '';\n for (let i = 0; i < valueHeadings.length; i++) {\n text += '';\n }\n text += '
' + valueHeadings[i] + '' + toComma(item.v[i]) + '
';\n el.innerHTML = '

' + item.n + '

' + text + '

Vis deltagende klasser

';\n\n let $stats = el.querySelector(\".stats\");\n $stats.addEventListener(\"click\", function (e) {\n window.open(e.target.href);\n stopAll(e);\n });\n\n //el.innerHTML = '';\n\n //let $mi = el.querySelector(\".mapinfo\");\n //$mi.addEventListener(\"click\", function (e) {\n // scrollToElement(document.querySelector(\"#mapinfo\"));\n // stopAll(e);\n //});\n\n\n //let s = \"\";\n //let lastGroup = \"\";\n //let lastCompany = \"\";\n //forEach(item.wp, function (wp) {\n // if (wp.g !== lastGroup) {\n // lastGroup = wp.g;\n // lastCompany = wp.c;\n // s += '

' + lastGroup + '

';\n // if (lastCompany !== lastGroup) {\n // s += '

' + lastCompany + '

';\n // }\n // }\n // else if (wp.c !== lastCompany) {\n // lastCompany = wp.c;\n // s += '

' + lastCompany + '

';\n // }\n // forEach(wp.t, function (t) {\n // s += \"

\" + t.n + \" (\" + t.s + \" deltagere, \" + t.d + \" cykeldage, \" + toComma(t.k, true) + \" KM)

\";\n // });\n //});\n //$mapinfo.innerHTML = s;\n //removeClass($mapinfo.closest(\".r\"), \"hidden\");\n\n el.querySelector(\"div\").addEventListener(\"click\", function (e) {\n stopAll(e);\n });\n el.querySelector(\".close\").addEventListener(\"click\", function (e) {\n e.target.closest(\".marker\").innerHTML = \"\";\n stopAll(e);\n return false;\n });\n });\n\n var panes = this.getPanes();\n panes.overlayImage.appendChild(div);\n }\n\n var point = this.getProjection().fromLatLngToDivPixel(this.latlng);\n\n if (point) {\n div.style.left = point.x - 10 + 'px';\n div.style.top = point.y - 10 + 'px';\n }\n };\n\n CustomMarker.prototype.remove = function () {\n if (this.div) {\n this.div.parentNode.removeChild(this.div);\n this.div = null;\n }\n };\n\n CustomMarker.prototype.getPosition = function () {\n return this.latlng;\n };\n\n var request = new XMLHttpRequest();\n request.open('GET', ABCAPIUrl + 'mapStats/' + mapCampaignId, true);\n\n request.onload = function () {\n if (request.status >= 200 && request.status < 400) {\n var data = JSON.parse(request.responseText);\n var mapOptions = {\n zoom: window.innerWidth > smallWidth ? defaultZoom : defaultZoomSmall,\n center: new google.maps.LatLng(centerMapX, centerMapY),\n disableDefaultUI: true,\n styles: mapStyles\n };\n\n map = new google.maps.Map(document.getElementById('map'), mapOptions);\n\n //map.addListener('bounds_changed', function () {\n // log(\"bounds changed\");\n //});\n\n mapData = data.items;\n valueHeadings = data.vh;\n\n for (let i = 0; i < data.items.length; i++) {\n let item = data.items[i];\n let size = 1;\n\n overlay = new CustomMarker(\n new google.maps.LatLng(item.x, item.y),\n map,\n {\n markerid: i,\n i: item.i,\n n: item.n,\n ls: item.ls,\n ll: item.x + \",\" + item.y\n }\n );\n }\n } else {\n console.log(\"error loading map data\");\n }\n };\n\n request.onerror = function () {\n console.log(\"request error loading map data\");\n };\n\n request.send();\n}\n\nvar mapStyles = [\n {\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#ebe3cd\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#523735\"\n }\n ]\n },\n {\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#f5f1e6\"\n }\n ]\n },\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"administrative\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#c9b2a6\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#dcd2be\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.land_parcel\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#ae9e90\"\n }\n ]\n },\n {\n \"featureType\": \"administrative.neighborhood\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"landscape.natural\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"poi\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#93817c\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#a5b076\"\n }\n ]\n },\n {\n \"featureType\": \"poi.park\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#447530\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#f5f1e6\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road\",\n \"elementType\": \"labels.icon\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"stylers\": [\n {\n //\"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.arterial\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#fdfcf8\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#f8c967\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#e9bc62\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway\",\n \"elementType\": \"labels\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway.controlled_access\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#e98d58\"\n }\n ]\n },\n {\n \"featureType\": \"road.highway.controlled_access\",\n \"elementType\": \"geometry.stroke\",\n \"stylers\": [\n {\n \"color\": \"#db8555\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"stylers\": [\n {\n //\"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"road.local\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#806b63\"\n }\n ]\n },\n {\n \"featureType\": \"transit\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#8f7d77\"\n }\n ]\n },\n {\n \"featureType\": \"transit.line\",\n \"elementType\": \"labels.text.stroke\",\n \"stylers\": [\n {\n \"color\": \"#ebe3cd\"\n }\n ]\n },\n {\n \"featureType\": \"transit.station\",\n \"elementType\": \"geometry\",\n \"stylers\": [\n {\n \"color\": \"#dfd2ae\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"geometry.fill\",\n \"stylers\": [\n {\n \"color\": \"#b9d3c2\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"labels.text\",\n \"stylers\": [\n {\n \"visibility\": \"off\"\n }\n ]\n },\n {\n \"featureType\": \"water\",\n \"elementType\": \"labels.text.fill\",\n \"stylers\": [\n {\n \"color\": \"#92998d\"\n }\n ]\n }\n];\n\uFEFFvar cseUrl = 'https://www.googleapis.com/customsearch/v1/siterestrict?key=AIzaSyDR8Wdq-g47Pf5-bYEdwBKqFL6e_qPyLio&cx=002541532685811098227:95zewwkwhw0&fields=items(title,link,snippet,htmlSnippet,pagemap/cse_image),searchInformation(totalResults),queries(request/searchTerms,nextPage/startIndex)&q=';\n\naddDomReadyEventListener(() => {\n var q = urlParam(\"q\");\n if (q && q !== '') {\n var searchResult = document.getElementById(\"searchResult\");\n if (searchResult) {\n addEvent(\".moreResults a.button\", \"click\", function () {\n showSearchResults(searchResult.getAttribute(\"data-q\"), searchResult, searchResult.getAttribute(\"data-next\"));\n });\n\n forEach(\".searchForm input[type=text]\", function (el) {\n el.value = q;\n });\n\n addEvent(\".searchForm\", \"submit\", function (e) {\n let q = e.target.querySelector(\"input[type=text]\");\n if (q && q.value !== \"\") {\n showSearchResults(q.value, searchResult);\n }\n return false;\n });\n\n showSearchResults(q, searchResult);\n }\n }\n});\n\nfunction showSearchResults(q, searchResult, start) {\n if (!start) start = 1;\n if (q) {\n httpr(cseUrl + encodeURIComponent(q) + \"&start=\" + start, function (data) {\n if (start === 1) searchResult.innerHTML = \"\";\n showItems(data, searchResult);\n });\n }\n}\n\nfunction showItems(data, searchResult) {\n searchResult.setAttribute(\"data-q\", data.queries.request[0].searchTerms);\n var moreResults = document.querySelector(\".moreResults\");\n if (data.queries.nextPage) {\n removeClass(moreResults, \"hidden\");\n searchResult.setAttribute(\"data-next\", data.queries.nextPage[0].startIndex);\n }\n else {\n addClass(moreResults, \"hidden\");\n }\n var html = \"\";\n if (data.items) {\n for (var i = 0; i < data.items.length; i++) {\n var item = data.items[i];\n\n html += '' +\n '' + item.title + '' +\n '

' + item.htmlSnippet.replace(/
/gi, \"\").replace(/ /gi, \"\") + '

' +\n '
';\n }\n }\n else {\n html = \"

Ingen resultater

\";\n }\n searchResult.insertAdjacentHTML(\"beforeend\", html);\n}\n\uFEFFvar tableData = {\n min: [],\n max: [],\n vh: [],\n sort: 3,\n order: 0,\n valueLength: 0,\n rows: [],\n schools: {}\n};\n\nvar tableSort = 3;\nvar statsKey = \"stats\";\n\naddDomReadyEventListener(() => {\n initStats();\n});\n\nfunction initStats() {\n let sf = document.querySelector(\"#statfilter\");\n if (!sf) return;\n\n let id = urlParam(\"id\");\n if (id) statsCampaignId = id;\n httpr(ABCAPIUrl + statsKey + '/' + statsCampaignId, function (data) {\n apiData[statsKey] = data;\n\n if (!data.v) {\n addOverlayMessage(genericError);\n return;\n }\n\n tableData.valueLength = data.v.length;\n tableData.vh[0] = \"\";\n tableData.vh[1] = \"Navn\";\n for (let i = 0; i < tableData.valueLength; i++) {\n tableData.vh[i + 2] = data.vh[i];\n }\n let dict = apiData[statsKey][\"schools\"];\n Object.keys(dict).forEach(function (key) {\n let ids = dict[key].gis;\n forEach(ids, function (id) {\n tableData.schools[id] = key;\n });\n });\n\n let show = urlParam(\"show\");\n let by = urlParam(\"by\");\n let filter = urlParam(\"filter\");\n let sort = urlParam(\"sort\");\n if (!show) {\n show = \"schools\";\n }\n if (!sort) {\n sort = data.v[1] > 0 ? \"3,1\" : \"2,1\";\n }\n\n let showEl = document.querySelector(\"select[name='show']\");\n let byEl = document.querySelector(\"select[name='by']\");\n let sortEl = document.querySelector(\"select[name='sort']\");\n\n sortEl.addEventListener(\"change\", function (e) {\n showStatsTable();\n });\n\n showEl.addEventListener(\"change\", function (e) {\n let v = e.target.value;\n if (v === \"groups\") {\n removeClass(document.getElementById(\"bySelect\"), \"hidden\");\n }\n else {\n if (v !== \"totals\") {\n byEl.value = v;\n setFilterData(v);\n }\n addClass(document.getElementById(\"bySelect\"), \"hidden\");\n }\n showStatsTable();\n });\n\n byEl.addEventListener(\"change\", function (e) {\n let by = document.querySelector(\"select[name='by']\").value;\n setFilterData(by);\n });\n\n if (show) showEl.value = show;\n\n if (filter) document.querySelector(\"input[name='filter']\").value = filter;\n if (sort) sortEl.value = sort;\n\n if (by) {\n byEl.value = by;\n sendEvent(byEl, \"change\");\n }\n else {\n setFilterData(document.querySelector(\"select[name='by']\").value);\n }\n\n sendEvent(showEl, \"change\");\n showStatsTable();\n\n addClass(document.getElementById(\"statloading\"), \"hidden\");\n removeClass(document.getElementById(\"statfilter\"), \"hidden\");\n });\n\n sf.querySelector(\"form\").addEventListener(\"submit\", function (e) {\n showStatsTable();\n stopAll(e);\n });\n}\n\nfunction extraE(s, n) {\n return s + (n === 1 ? '' : 'e');\n}\n\nfunction sendEvent(el, e) {\n var event;\n if (typeof (Event) === 'function') {\n event = new Event(e);\n } else {\n event = document.createEvent('Event');\n event.initEvent(e, true, true);\n }\n\n el.dispatchEvent(event);\n}\n\nfunction onlyUnique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\nfunction setFilterData(by) {\n let show = document.querySelector(\"select[name='show']\").value;\n let dl = document.getElementById(\"filterdata\");\n let s = \"\";\n if (by && show !== \"totals\") {\n let dict = apiData[statsKey][by];\n Object.keys(dict).forEach(function (key) {\n s += '';\n });\n }\n dl.innerHTML = s;\n}\n\nfunction sortByColumn(a, index, order) {\n a.sort(sortFunction);\n\n function sortFunction(a, b) {\n let c = a[index];\n let d = b[index];\n if (c < d) {\n return order === 0 ? -1 : 1;\n }\n if (c > d) {\n return order === 0 ? 1 : -1;\n }\n return 0;\n }\n\n return a;\n}\n\nfunction dynamicSort(property) {\n var sortOrder = 1;\n if (property[0] === \"-\") {\n sortOrder = -1;\n property = property.substr(1);\n }\n return function (a, b) {\n var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\n return result * sortOrder;\n };\n}\n\nfunction dynamicSortMultiple() {\n var props = arguments;\n return function (obj1, obj2) {\n var i = 0, result = 0, numberOfProperties = props.length;\n while (result === 0 && i < numberOfProperties) {\n result = dynamicSort(props[i])(obj1, obj2);\n i++;\n }\n return result;\n }\n}\n\nfunction showStatsTable(all) {\n let rs = [];\n let show = document.querySelector(\"select[name='show']\").value;\n let by = document.querySelector(\"select[name='by']\").value;\n let filter = document.querySelector(\"input[name='filter']\").value;\n if (filter) filter = filter.toLowerCase();\n\n if (all) {\n rs = tableData.rows;\n }\n else {\n let sort = document.querySelector(\"select[name='sort']\").value;\n\n let loc = document.location;\n window.history.replaceState({}, document.title, loc.protocol + \"//\" + loc.host + loc.pathname + \"?id=\" + statsCampaignId + \"&show=\" + encodeURIComponent(show) + \"&filter=\" + encodeURIComponent(filter) + \"&by=\" + encodeURIComponent(by) + \"&sort=\" + sort);\n\n tableData.sort = parseInt(sort.split(\",\")[0]);\n tableData.order = parseInt(sort.split(\",\")[1]);\n for (var i = 0; i < tableData.valueLength; i++) {\n tableData.min[i] = 0;\n tableData.max[i] = 0;\n }\n\n if (show === \"groups\") {\n let hash = {};\n let useHash = false;\n if (by && by !== \"groups\") {\n useHash = true;\n let ids = [];\n let dict = apiData[statsKey][by];\n Object.keys(dict).forEach(function (key) {\n let v = dict[key];\n if (!filter || key.toLowerCase().indexOf(filter) >= 0) {\n ids = ids.concat(v.gis);\n }\n });\n forEach(ids, function (id) {\n hash[id] = 0;\n });\n }\n forEach(apiData[statsKey][show], function (g) {\n if ((useHash && hash.hasOwnProperty(g.i)) || (!useHash && (!filter || g.n.toLowerCase().indexOf(filter) >= 0))) {\n let r = [g.i, g.l + \". \" + g.n];\n for (let i = 0; i < tableData.valueLength; i++) {\n let v = g.v[i];\n r.push(v);\n if (tableData.min[i] < v) tableData.min[i] = v;\n if (tableData.max[i] < v) tableData.max[i] = v;\n }\n rs.push(r);\n }\n });\n }\n else if (show === \"totals\") {\n let r = [\"totals\", \"Total\"];\n for (var i = 0; i < tableData.valueLength; i++) {\n let v = apiData[statsKey].v[i];\n r.push(v);\n tableData.min[i] = v;\n tableData.max[i] = v;\n }\n rs.push(r);\n }\n else {\n let dict = apiData[statsKey][show];\n Object.keys(dict).forEach(function (key) {\n let items = dict[key].v;\n if (!filter || key.toLowerCase().indexOf(filter) >= 0 || (show === \"municipalities\" && filter === dict[key].r) || (show === \"schools\" && (filter === dict[key].r || filter === dict[key].m || filter == dict[key].z))) {\n let r = [key, key];\n for (let i = 0; i < tableData.valueLength; i++) {\n let v = items[i];\n r.push(v);\n if (tableData.min[i] < v) tableData.min[i] = v;\n if (tableData.max[i] < v) tableData.max[i] = v;\n }\n rs.push(r);\n\n }\n });\n }\n rs = sortByColumn(rs, tableData.sort, tableData.order);\n\n tableData.rows = rs;\n }\n let max = all ? rs.length : rs.length > 100 ? 100 : rs.length;\n let table = document.querySelector(\"#stattable table\");\n let s = '';\n for (let i = 1; i < tableData.valueLength + 2; i++) {\n s += '' + tableData.vh[i] + '';\n }\n s += '';\n let linkName = show === \"groups\" || show === \"totals\" ? false : true;\n\n for (let i = 0; i < max; i++) {\n let r = rs[i];\n\n let itag = '';\n let name = linkName ? '' + r[1] + '' : r[1];\n if (show === \"groups\") itag = '
' + tableData.schools[r[0]] + '';\n s += '' + name + itag + '';\n for (let j = 2; j < tableData.valueLength + 2; j++) {\n s += '' + toComma(r[j]) + '';\n }\n '';\n }\n\n table.setAttribute(\"data-show\", show);\n table.innerHTML = s;\n\n let statinfo = document.querySelector(\"#statinfo\");\n s = \"\";\n if (max < rs.length) {\n s += '

Viser de første 100 resultater
Vis alle ' + rs.length + ' resultater

';\n }\n else {\n s += '

' + rs.length + \" resultat\" + (rs.length !== 1 ? \"er\" : \"\") + '

';\n }\n s += '

Hent statistik for hele kampagnen som CSV fil til Excel

';\n\n statinfo.innerHTML = s;\n\n let ths = table.querySelectorAll(\"th\");\n forEach(ths, function (el, i) {\n let a = el.querySelector(\"a\");\n if (a) {\n a.setAttribute(\"data-sort\", i + 1);\n a.addEventListener(\"click\", function (e) {\n let sort = document.querySelector(\"select[name='sort']\");\n let s = parseInt(e.target.getAttribute(\"data-sort\"));\n let o = s !== tableData.sort ? (s === 1 ? 0 : 1) : (tableData.order === 0 ? 1 : 0);\n sort.value = s + \",\" + o;\n sendEvent(sort, \"change\");\n stopAll(e);\n });\n }\n if (i === tableData.sort - 1) {\n addClass(el, \"sort\");\n if (tableData.order === 0) {\n removeClass(el, \"down\");\n }\n else {\n addClass(el, \"down\");\n }\n }\n else {\n removeClass(el, \"sort\");\n }\n });\n\n addEvents(\"#stattable a.name\", \"click\", function (e) {\n stopAll(e);\n let ds = document.querySelector(\"#stattable table\").getAttribute(\"data-show\");\n document.querySelector(\"select[name='by']\").value = ds;\n let v = e.target.innerHTML;\n if (v.indexOf(\"<\") > 0) v = v.substr(0, v.indexOf(\"<\"));\n document.querySelector(\"input[name='filter']\").value = v;\n let sw = document.querySelector(\"select[name='show']\");\n sw.value = (ds === \"schools\" ? \"groups\" : \"schools\");\n sendEvent(sw, \"change\");\n });\n\n let showAll = document.querySelector(\"a.showall\");\n if (showAll) {\n showAll.addEventListener(\"click\", function (e) {\n if (tableData.rows.length > 1000) {\n addBrief(\"Det kan tage nogle sekunder at tegne tabellen når der er mange resultater.\");\n setTimeout(function () { showStatsTable(true); }, 200);\n }\n else {\n showStatsTable(true);\n }\n stopAll(e);\n });\n }\n}\n\nfunction drawBar(v, max, notext, extra, graphic, height) {\n if (!height) height = 30;\n height -= 10;\n let scale = v > 0 ? v / max : 0;\n return (graphic ? '' + graphic + '' : '') + '' + (notext ? \"\" : '' + toComma(v, true)) + (extra ? extra : '') + '';\n}\n\ndocument.addEventListener(\"readystatechange\", (e) => {\n let count = window.domReadyEventListeners.length;\n if (document.readyState !== \"loading\") {\n window.domReadyEventListeners.forEach((l) => l());\n window.domReadyEventListeners = [];\n }\n console.log(\"rsc\", document.readyState, count);\n});\n\nconsole.log(\"zl\");\ndocument.querySelector(\"html\").classList.remove(\"jsshow\");\n"], "mappings": "AACA,IAAIA,GAAa,CAAC,EAqBlB,IAAIC,GACJ,SAASC,GAASC,EAAKC,EAAMC,EAAOC,EAAU,CAC1C,GAAIF,GAAQA,EAAK,UAAYA,EAAK,SAAS,OAAS,EAAG,OACvD,aAAaH,EAAU,EACvBA,GAAa,WAAW,UAAY,CAChC,IAAIM,EAAQ,SAAS,cAAc,eAAe,EAClDA,EAAM,WAAW,YAAYA,CAAK,CACtC,EAAG,IAAI,EACP,IAAIC,EAAO,SAAS,cAAc,MAAM,EACpCD,EAAQ,SAAS,cAAc,eAAe,EAE9CD,GAAU,OACTC,IACDC,EAAK,mBAAmB,YAAa,sDAAsD,EAC3FD,EAAQ,SAAS,cAAc,eAAe,EAE9CA,EAAM,iBAAiB,QAAS,SAAUE,EAAG,CACzCC,EAAQD,CAAC,CACb,CAAC,GAELJ,EAAQM,EAASJ,EAAO,OAAO,EAAIK,EAAYL,EAAO,OAAO,EAC7D,IAAIM,EAAUN,EAAM,cAAc,UAAU,EACjCA,EAAM,YACR,QAAQJ,CAAG,EAAI,IAChBA,EAAI,QAAQ,GAAG,GAAK,GAAKA,EAAI,QAAQ,GAAG,GAAK,EAC7CU,EAAQ,mBAAmB,aAAcV,CAAG,EAG5CU,EAAQ,mBAAmB,aAAc,MAAQV,EAAM,MAAM,EAGzE,CAEA,SAASW,EAAkBX,EAAKY,EAAOT,EAAU,CAC7C,IAAIE,EAAO,SAAS,cAAc,MAAM,EACpCQ,EAAU,SAAS,cAAc,iBAAiB,EAClDV,GAAU,OACTU,IACDL,EAASH,EAAM,UAAU,EACzBA,EAAK,mBAAmB,YAAa,iGAAiG,EACtIQ,EAAU,SAAS,cAAc,iBAAiB,EAElDA,EAAQ,iBAAiB,QAAS,SAAUP,EAAG,CAC3CQ,GAAmB,EACnBP,EAAQD,CAAC,CACb,CAAC,EAEDO,EAAQ,cAAc,QAAQ,EAAE,iBAAiB,QAAS,SAAUP,EAAG,CACnEQ,GAAmB,EACnBP,EAAQD,CAAC,CACb,CAAC,EAEDO,EAAQ,WAAW,iBAAiB,QAAS,SAAUP,EAAG,CACtDC,EAAQD,CAAC,CACb,CAAC,GAEL,IAAII,EAAUG,EAAQ,cAAc,UAAU,EACnCH,EAAQ,YACV,QAAQV,CAAG,EAAI,IAChBA,EAAI,QAAQ,GAAG,GAAK,GAAKA,EAAI,QAAQ,GAAG,GAAK,EAC7CU,EAAQ,mBAAmB,aAAcV,GAAOY,EAAQ,uBAAyBA,EAAQ,OAAS,IAAI,MAAM,EAAE,MAAM,QAAQ,kBAAmB,MAAM,EAAI,UAAY,GAAG,EAGxKF,EAAQ,mBAAmB,aAAc,MAAQV,EAAM,QAAUY,EAAQ,uBAAyBA,EAAQ,OAAS,IAAI,MAAM,EAAE,MAAM,QAAQ,kBAAmB,MAAM,EAAI,UAAY,GAAG,EAGrM,CAEA,SAASE,IAAqB,CAC1B,IAAIT,EAAO,SAAS,cAAc,MAAM,EACpCQ,EAAU,SAAS,cAAc,iBAAiB,EACtDR,EAAK,YAAYQ,CAAO,EACxBJ,EAAY,OAAQ,UAAU,CAClC,CAEA,SAASM,GAAeC,EAAKC,EAAQC,EAAUC,EAAUC,EAAQC,EAAYC,EAAS,CAClF,IAAIC,EAAIP,EAAI,MAAM,GAAG,EACjBO,EAAE,OAAS,IAAGA,EAAIA,EAAE,CAAC,GAEzB,IAAIC,EAAOR,EAAI,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI,EAE3CS,EAAiB,EACjB,OAAON,GAAa,WACpBM,EAAiBN,EAAS,QAG1BK,GAAQA,EAAK,OAAS,IAAMA,EAAK,QAAQ,GAAG,EAAI,GAAKR,EAAI,QAAQ,SAAS,EAAI,KAAOG,aAAoB,UAAYM,EAAiB,KACtID,EAAOA,EAAK,MAAM,GAAG,EAAE,IAAI,EAC3BA,GAAQJ,GAAUA,EAAO,aAAa,YAAY,EAAIA,EAAO,aAAa,YAAY,EAAI,GACtFC,IAAYG,GAAQH,GACxB,UAAUG,CAAI,GAGlBE,GAAqBH,CAAC,EAEtB,IAAItB,EAAOgB,EACX,GAAIA,GAAUA,EAAO,OAAS,GAAKA,EAAO,UAAU,EAAG,CAAC,IAAM,QAC1D,OAAIA,EAAO,OAAS,IAAMA,EAAO,UAAU,EAAG,EAAE,IAAM,iBAClDU,GAAaV,EAAQ,GAAMD,CAAG,EAG9BW,GAAaV,EAAQ,EAAK,EAEvB,GAEX,GAAIA,GAAUA,EAAO,OAAS,GAAKA,EAAO,QAAQ,OAAO,GAAK,EAAG,CACzDA,EAAO,UAAU,EAAG,CAAC,IAAM,UAASA,EAASA,EAAO,UAAUA,EAAO,QAAQ,OAAO,EAAGA,EAAO,QAAQ,SAAS,EAAI,CAAC,GACxH,IAAIZ,EAAO,SAAS,cAAc,MAAM,EACpCuB,EAAM,SAAS,cAAc,KAAK,EACtC,OAAApB,EAASoB,EAAK,QAAQ,EACtBA,EAAI,UAAYX,EAChBZ,EAAK,YAAYuB,CAAG,EACpBvB,EAAK,UAAU,WAAW,OAAO,EAC1B,EACX,CACA,GAAIY,GAAUA,EAAO,OAAS,GAAKA,EAAO,UAAU,EAAG,CAAC,IAAM,IAC1D,GAAI,CACAhB,EAAO,KAAK,MAAMgB,CAAM,EACpBhB,EAAK,UAAYA,EAAK,SAAS,QAC/B4B,EAAgB5B,EAAK,QAAQ,CAErC,MACW,CACPA,EAAOgB,CACX,CAEJ,GAAIA,GAAUA,EAAO,OAAS,IAAMA,EAAO,OAAO,EAAG,CAAC,IAAM,QAAUA,EAAO,QAAQ,MAAM,EAAI,GAC3F,OAAI,UAAU,UAAU,QAAQ,SAAS,GAAK,GAC1C,WAAW,UAAY,CAAE,SAAS,SAAS,KAAOA,EAAO,OAAOA,EAAO,QAAQ,MAAM,EAAI,CAAC,CAAG,EAAG,GAAG,EAGnG,SAAS,SAAS,KAAOA,EAAO,OAAOA,EAAO,QAAQ,MAAM,EAAI,CAAC,EAE9D,GAEX,GAAIC,EACAA,EAASjB,EAAMmB,CAAM,UAEhBA,EAAQ,CACb,IAAIH,EAASG,EAAO,cAAc,wBAA0BnB,EAAO,IAAI,EACvE,GAAIgB,EAAQ,CACR,IAAID,EAAMC,EAAO,aAAa,UAAU,EACpCD,EACI,UAAU,UAAU,QAAQ,SAAS,GAAK,GAC1C,WAAW,UAAY,CAAE,SAAS,SAAWA,CAAK,EAAG,GAAG,EAGxD,SAAS,SAAWA,GAIxBc,EAAQV,EAAO,iBAAiB,SAAS,EAAG,SAAUW,EAAI,CACtDtB,EAAYsB,EAAI,QAAQ,CAC5B,CAAC,EACDvB,EAASS,EAAQ,QAAQ,EACzBe,GAAgBf,CAAM,EAE9B,CACJ,CAEA,GAAIG,EAAQ,CACR,IAAIa,EAASb,EAAO,cAAc,oBAAoB,EAClDa,GAAQA,EAAO,gBAAgB,UAAU,CACjD,CACJ,CAEA,SAAW,SAAUC,EAAM,CACvB,IAAIC,EAAU,IAAI,OAAO,OAAUD,EAAO,WAAW,EAAE,KAAK,OAAO,SAAS,IAAI,EAChF,OAAIC,IAAY,KACL,KAGA,mBAAmBA,EAAQ,CAAC,CAAC,GAAK,CAEjD,EAEA,SAASC,EAAYpC,EAAKgB,EAAKf,EAAMoC,EAAOnB,EAAW,OAAW,CAC9DoB,GAAU,EAAGtC,EAAKgB,EAAKf,EAAMoC,CAAK,EAClCV,GAAaY,GAAc,EAAK,EAC5BrB,GAAUA,EAAS,EAAE,CAC7B,CAEA,eAAesB,EAAMxB,EAAKE,EAAUC,EAAUC,EAAQC,EAAY,CA5MlE,IAAAoB,EA6MI,GAAI,QAAS,CACT,IAAIlB,EAAIP,EAAI,MAAM,GAAG,EACjBO,EAAE,OAAS,IAAGA,EAAIA,EAAE,CAAC,GACzBmB,GAAWnB,CAAC,EAAI,IAAI,KAAK,EAAE,QAAQ,CACvC,CAEA,IAAIoB,EAAkB,OAAO,MAAU,IAEvC,GAAIvB,EAAQ,CACR,IAAIa,EAASb,EAAO,cAAc,oBAAoB,EAClDa,GAAQA,EAAO,aAAa,WAAY,UAAU,CAC1D,CAEA,IAAIW,GAAMH,EAAAI,GAAQ,IAAR,YAAAJ,EAAW,MACjBtB,GAAY,OAAOA,GAAa,UAChCA,EAAS,OAAO,6BAA8ByB,CAAG,EAGrD,IAAIE,EAAS3B,IAAa,OAAY,OAAS,MAC/C,GAAIwB,EAAgB,CAChB,IAAII,EAAc/B,EACdgC,EAAU,CAAC,EACXF,GAAU,SAAQE,EAAQ,cAAc,EAAIJ,GAChD,MAAM5B,EAAK,CACP,OAAQ8B,EACR,QAASE,EACT,KAAM7B,GAAsB,IAChC,CAAC,EAAE,KAAK8B,IACCA,EAAS,IACVb,EAAY,8BAA+Ba,EAAS,IAAK,OAAW,OAAW/B,CAAQ,EAE3F6B,EAAcE,EAAS,IAChBA,EAAS,KAAK,EACxB,EAAE,KAAKhD,GAAQ,CACZc,GAAegC,EAAa9C,EAAMiB,EAAUC,EAAUC,EAAQC,EAAY,EAAI,CAClF,CAAC,EAAE,MAAMgB,GAAS,CACdD,EAAY,WAAYpB,EAAK,OAAWqB,EAAOnB,CAAQ,CAC3D,CAAC,CACL,KAAO,CACH,IAAIgC,EAAU,IAAI,eAelB,GAdAA,EAAQ,KAAKJ,EAAQ9B,EAAK,EAAI,EAC1B8B,GAAU,QAAQI,EAAQ,iBAAiB,eAAgBN,CAAG,EAClEM,EAAQ,OAAS,UAAY,CACrBA,EAAQ,QAAU,KAAOA,EAAQ,OAAS,IAC1CnC,GAAemC,EAAQ,YAAaA,EAAQ,aAAchC,EAAUC,EAAUC,EAAQC,EAAY,EAAK,EAEvGe,EAAY,WAAYpB,EAAK,OAAW,MAAOE,CAAQ,CAE/D,EAEAgC,EAAQ,QAAU,SAAUjD,EAAM,CAC9BmC,EAAY,UAAWpB,EAAKf,EAAM,OAAWiB,CAAQ,CACzD,EAEIC,IAAa,OACb,GAAI,CACA+B,EAAQ,KAAK/B,CAAQ,CACzB,OACOgC,EAAI,CACPf,EAAY,UAAWpB,EAAK,OAAWmC,EAAIjC,CAAQ,CACvD,MAGAgC,EAAQ,KAAK,CAErB,CACJ,CAEA,SAASL,IAAU,CACf,OAAO,SAAS,cAAc,uCAAuC,CACzE,CAYA,SAASO,GAAgBC,EAAI,CACzB,IAAIC,EAAID,EAAG,sBAAsB,EAAE,IAAM,OAAO,YAAc,IAC1D,OAAO,UAAU,UAAU,QAAQ,MAAM,EAAI,EAC7C,SAAS,KAAK,UAAYC,EAG1B,OAAO,SAAS,CACZ,IAAKA,EACL,SAAU,QACd,CAAC,CAET,CAEA,SAASC,GAAMC,EAAO,CAClB,MAAO,CAAC,MAAMA,CAAK,GACf,SAAS,OAAOA,CAAK,CAAC,GAAKA,GAC3B,CAAC,MAAM,SAASA,EAAO,EAAE,CAAC,CAClC,CAMA,SAASC,GAAOC,EAAG,CACf,OAAO,OAAO,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,KAAOA,CAAC,CACtF,CAEA,SAASC,EAAKC,EAAGC,EAAYC,EAAM,CAC3BC,IAAa,UAAYF,IAAe,IAAQG,MAC5CF,GAAM,QAAQ,IAAIA,CAAI,EAC1B,QAAQ,IAAIF,CAAC,EAErB,CAEA,IAAIK,EAAU,SAAUC,EAAKC,EAAU,CAC/B,OAAOD,GAAQ,WAAUA,EAAM,SAAS,iBAAiBA,CAAG,GAChE,MAAM,UAAU,QAAQ,KAAKA,EAAKC,CAAQ,CAC9C,EAEIC,EAAUC,EAAUC,EACxBF,EAAW,SAAUG,EAAIC,EAAW,CAAE,GAAID,EAAI,OAAOA,EAAG,UAAU,SAASC,CAAS,CAAG,EACvFH,EAAW,SAAUE,EAAIC,EAAW,CAC5B,OAAOD,GAAO,SACdN,EAAQ,SAAS,iBAAiBM,CAAE,EAAG,SAAUE,EAAK,CAAEJ,EAASI,EAAKD,CAAS,CAAG,CAAC,EAG/ED,GAAIA,EAAG,UAAU,IAAIC,CAAS,CAE1C,EACAF,EAAc,SAAUC,EAAIC,EAAW,CAC/B,OAAOD,GAAO,SACdN,EAAQ,SAAS,iBAAiBM,CAAE,EAAG,SAAUE,EAAK,CAAEH,EAAYG,EAAKD,CAAS,CAAG,CAAC,EAGlFD,GAAIA,EAAG,UAAU,OAAOC,CAAS,CAE7C,EAEA,SAASE,EAASC,EAAMC,EAAOC,EAAM,CACjC,IAAIN,EAAK,SAAS,cAAcI,CAAI,EAChCJ,GACAA,EAAG,iBAAiBK,EAAOC,CAAI,CAEvC,CAEA,SAASC,EAAUH,EAAMC,EAAOC,EAAM,CAClCZ,EAAQU,EAAM,SAAUJ,EAAI,CACxBA,EAAG,iBAAiBK,EAAOC,CAAI,CACnC,CAAC,CACL,CAEA,SAASE,GAAYR,EAAIC,EAAW,CAC5B,OAAOD,GAAO,WAAUA,EAAK,SAAS,cAAcA,CAAE,GAEtDH,EAASG,EAAIC,CAAS,EACtBF,EAAYC,EAAIC,CAAS,EAGzBH,EAASE,EAAIC,CAAS,CAE9B,CAEA,SAASQ,GAAWC,EAAKT,EAAW,CAC5B,CAACS,GAAOA,EAAI,SAAW,GAC3BA,EAAI,QAAQ,SAAUV,EAAI,CACtBF,EAASE,EAAIC,CAAS,CAC1B,CAAC,CACL,CAEA,SAASU,GAAcD,EAAKT,EAAW,CAC/B,CAACS,GAAOA,EAAI,SAAW,GAC3BA,EAAI,QAAQ,SAAUV,EAAI,CACtBD,EAAYC,EAAIC,CAAS,CAC7B,CAAC,CACL,CAQA,yBAAyB,IAAM,CAC3B,SAAS,KAAK,iBAAiB,QAAS,SAAU,EAAG,CACjD,GAAI,EAAE,MAAQ,MAAO,CACjB,IAAIW,EAAK,SAAS,gBAClBA,EAAG,UAAU,OAAO,KAAK,EACzBA,EAAG,UAAU,IAAI,KAAK,CAC1B,CACJ,CAAC,EAEDC,EAAU,UAAW,QAAS,SAAU,EAAG,CACvC,IAAIC,EAAI,EAAE,OAAO,QAAQ,SAAS,EAC9BC,EAAOD,EAAIA,EAAE,aAAa,MAAM,EAAI,OACpCC,IACAC,EAAQ,CAAC,EACT,SAAS,SAAWD,EAE5B,CAAC,EAEDE,EAAQ,iBAAkB,SAAUL,EAAI,CACpCK,EAAQL,EAAG,QAAS,SAAUM,EAAK,CAC/BA,EAAI,iBAAiB,SAAU,SAAUC,EAAG,CACxC,IAAIC,EAAOF,EAAI,QAAQ,MAAM,EACzBG,EAASD,EAAK,aAAa,aAAa,EAAE,MAAM,GAAG,EACnDE,EAASF,EAAK,cAAc,SAAS,EACrCG,EAAUH,EAAK,cAAc,cAAgBC,EAAO,CAAC,EAAI,WAAW,EACpEE,GAAWA,EAAQ,QAAUF,EAAO,CAAC,GACrCG,EAAYF,EAAQ,QAAQ,EAC5BL,EAAQK,EAAO,iBAAiB,OAAO,EAAG,SAAUG,EAAK,CACjDA,EAAI,aAAa,aAAa,IAAM,aAAYA,EAAI,SAAW,GACvE,CAAC,IAGDC,EAASJ,EAAQ,QAAQ,EACzBL,EAAQK,EAAO,iBAAiB,OAAO,EAAG,SAAUG,EAAK,CACjDA,EAAI,aAAa,aAAa,IAAM,aAAYA,EAAI,SAAW,GACvE,CAAC,EAET,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAED,SAAST,EAAQ,EAAG,CAChB,SAAE,eAAe,EACjB,EAAE,gBAAgB,EACX,EACX,CAMA,SAASW,GAAUC,EAAM,CACrB,MAAO,CAAC,EAAEA,EAAK,aAAeA,EAAK,cAAgBA,EAAK,eAAe,EAAE,OAC7E,CAEA,SAASC,GAAaC,EAAO,CACzB,OAAIA,GAASA,EAAM,SAAW,IAAMA,EAAM,OAAO,EAAE,IAAM,QAAgB,GAClE,0JAA0J,KAAK,OAAOA,CAAK,EAAE,YAAY,CAAC,CACrM,CAQA,SAASC,EAAMC,EAAKC,EAAOC,EAAKC,EAAI,CAChC,GAAI,CAACH,GAAO,CAACC,EAAO,OAAO,KAC3B,QAASG,EAAI,EAAGA,EAAIJ,EAAI,OAAQI,IAC5B,GAAIF,GACA,GAAIC,GACA,GAAIH,EAAII,CAAC,EAAEF,CAAG,EAAE,YAAY,IAAMD,EAAM,YAAY,EAChD,OAAOD,EAAII,CAAC,UAIZJ,EAAII,CAAC,EAAEF,CAAG,IAAMD,EAChB,OAAOD,EAAII,CAAC,UAKhBJ,EAAII,CAAC,IAAMH,EACX,OAAOD,EAAII,CAAC,EAIxB,OAAO,IACX,CAMA,SAASC,GAASC,EAAI,CAClB,OAAO,WAAW,iBAAiBA,EAAI,IAAI,EAAE,MAAM,QAAQ,KAAM,EAAE,CAAC,CACxE,CACA,SAASC,GAAUD,EAAI,CACnB,OAAO,WAAW,iBAAiBA,EAAI,IAAI,EAAE,OAAO,QAAQ,KAAM,EAAE,CAAC,CACzE,CACA,SAASE,GAAUF,EAAI,CACnB,IAAIG,EAAOH,EAAG,sBAAsB,EACpC,MAAO,CACH,IAAKG,EAAK,IAAM,SAAS,KAAK,UAC9B,KAAMA,EAAK,KAAO,SAAS,KAAK,UACpC,CACJ,CAaA,SAASC,GAAqBC,EAAG,CAC7B,IAAIC,EAAa,cAAgBC,GAAU,YAAY,EAAI,OAC3D,GAAID,GAAcA,EAAW,WAAW,GAAG,EACvC,GAAI,CACA,IAAIE,EAAS,KAAK,MAAMF,CAAU,EAC9BG,EAAK,CAAC,EACVC,EAAQF,EAAQ,SAAUG,EAAI,CAC1BF,EAAG,KAAK,CAAE,KAAQE,EAAG,KAAM,aAAgBA,EAAG,YAAa,CAAC,CAChE,CAAC,EACD,GAAI,CACA,eAAe,CAAE,WAAcF,CAAG,EAAGJ,CAAC,CAC1C,OACOO,EAAK,CACRC,GAAU,EAAG,wBAAyBD,CAAG,CAC7C,CACJ,OACOE,EAAI,CACPD,GAAU,EAAG,yBAA0BC,CAAE,CAC7C,CAER,CAEA,SAASP,GAAUQ,EAAM,CACrB,IAAIC,EAAI,SAAS,OAAO,MAAM,UAAYD,EAAO,eAAe,EAChE,OAAOC,EAAIA,EAAE,CAAC,EAAI,IACtB,EACE,UAAY,CACV,IAAIC,EAAW,OAAO,SAClBC,EAAW,OAAO,SAElBC,EAAWD,EAAS,cACpBE,EAAWD,EAAS,aAAa,UAAU,GAAKE,EAAgBF,CAAQ,EACxEG,EAAoBH,EAAS,aAAa,qBAAqB,GAAK,IAExE,SAASI,EAAeC,EAAQC,EAAS,CACjCD,GAAQ,QAAQ,KAAK,mBAAqBA,CAAM,EACpDC,GAAWA,EAAQ,UAAYA,EAAQ,SAAS,CACpD,CAEA,SAASJ,EAAgBK,EAAI,CACzB,OAAO,IAAI,IAAIA,EAAG,GAAG,EAAE,OAAS,YACpC,CAEA,SAASC,EAAQC,EAAWH,EAAS,CACjC,GACIR,EAAS,WAAa,QAEtB,OAAOM,EAAe,YAAaE,CAAO,EAE9C,GACI,OAAO,UACP,OAAO,aACP,OAAO,UAAU,WACjB,OAAO,QAEP,OAAOF,EAAe,KAAME,CAAO,EAEvC,GAAI,CACA,GAAI,OAAO,aAAa,mBAAqB,OACzC,OAAOF,EAAe,oBAAqBE,CAAO,CAE1D,MAAY,CAAE,CAEd,IAAII,EAAU,CAAC,EACf,IAAIC,EAAOb,EAAS,KAAK,YAAY,EAAE,QAAQ,KAAM,GAAG,EACpDc,EAAWb,EAAS,UAAY,KAepC,GAdIa,IACAA,EAAWA,EAAS,YAAY,EAAE,QAAQ,KAAM,GAAG,EACnDA,EAAWA,EAAS,SAAS,GAAG,EAAIA,EAAS,UAAU,EAAGA,EAAS,OAAS,CAAC,EAAIA,GAErFF,EAAQ,EAAID,EACZC,EAAQ,EAAIC,EAAK,SAAS,GAAG,EAAIA,EAAK,UAAU,EAAGA,EAAK,OAAS,CAAC,EAAIA,EACtED,EAAQ,EAAIV,EAAS,aAAa,aAAa,EAC/CU,EAAQ,EAAIE,EACRN,GAAWA,EAAQ,OACnBI,EAAQ,EAAI,KAAK,UAAUJ,EAAQ,IAAI,GAEvCA,GAAWA,EAAQ,QACnBI,EAAQ,EAAIJ,EAAQ,OAEpBH,EAAmB,CACnB,IAAIU,EAAWf,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EACnDe,GAAYA,EAAS,QAAU,IAC1BH,EAAQ,IAAGA,EAAQ,EAAI,CAAC,GAC7BA,EAAQ,EAAE,gBAAkB,UAAU,UAAY,UAAU,aAC5DA,EAAQ,EAAE,SAAWG,EAE7B,CAEA,IAAIC,EAAiBd,EAAS,kBAAkB,EAAE,OAAO,SAAUJ,EAAM,CACrE,OAAOA,EAAK,UAAU,EAAG,CAAC,IAAM,QACpC,CAAC,EAEGmB,EAAQL,EAAQ,GAAK,CAAC,EAE1BI,EAAe,QAAQ,SAAUE,EAAW,CACxC,IAAIC,EAAUD,EAAU,QAAQ,SAAU,EAAE,EACxCE,GAAYlB,EAAS,aAAagB,CAAS,EAC/CD,EAAME,CAAO,EAAIF,EAAME,CAAO,GAAKC,EACvC,CAAC,EAEDR,EAAQ,EAAIK,EAIZ,IAAII,EAAMlB,EACNmB,EAAO,KAAK,UAAUV,CAAO,EAC7BW,EAAW,UAAY,CACvBf,GAAWA,EAAQ,UAAYA,EAAQ,SAAS,CACpD,EAEA,GAAI,CAEA,MAAMa,EAAK,CACP,OAAQ,OACR,UAAW,GACX,QAAS,CACL,eAAgB,YACpB,EACA,KAAMC,CACV,CAAC,EAAE,KAAK,IAAM,CAEN,OAAOC,GAAa,YACpBA,EAAS,CAEjB,CAAC,EAAE,MAAOC,GAAU,CAChB,QAAQ,MAAM,SAAUA,CAAK,EAE7B,IAAIC,EAAM,IAAI,eACdA,EAAI,KAAK,OAAQJ,EAAK,EAAI,EAC1BI,EAAI,iBAAiB,eAAgB,YAAY,EACjDA,EAAI,KAAKH,CAAI,EACbG,EAAI,OAAS,UAAY,CACjBA,EAAI,aAAe,GAAKA,EAAI,SAAW,KACnC,OAAOF,GAAa,YACpBA,EAAS,CAGrB,CACJ,CAAC,CACL,OAASC,EAAO,CACZ,QAAQ,MAAM,SAAUA,CAAK,CACjC,CAaJ,CAEA,IAAIE,EAAS,OAAO,WAAa,OAAO,UAAU,GAAM,CAAC,EACzD,OAAO,UAAYhB,EACnB,QAASiB,EAAI,EAAGA,EAAID,EAAM,OAAQC,IAC9BjB,EAAQ,MAAM,KAAMgB,EAAMC,CAAC,CAAC,EAGhC,IAAIC,EAEJ,SAASC,GAAO,CACRD,IAAa5B,EAAS,WAC1B4B,EAAW5B,EAAS,SACpBU,EAAQ,UAAU,EACtB,CAEA,IAAIoB,EAAM,OAAO,QACjB,GAAIA,EAAI,UAAW,CACf,IAAIC,EAAoBD,EAAI,UAC5BA,EAAI,UAAY,UAAY,CACxBC,EAAkB,MAAM,KAAM,SAAS,EACvCF,EAAK,CACT,EACA,OAAO,iBAAiB,WAAYA,CAAI,CAC5C,CAEA,SAASG,GAAyB,CAC1B,CAACJ,GAAY3B,EAAS,kBAAoB,WAC1C4B,EAAK,CAEb,CAEI5B,EAAS,kBAAoB,YAC7BA,EAAS,iBAAiB,mBAAoB+B,CAAsB,EAEpEH,EAAK,EAET,SAASI,EAAUC,EAAM,CACrB,KAAOA,IAAS,OAAOA,EAAK,QAAY,KAAe,CAACC,EAAOD,CAAI,GAAK,CAACA,EAAK,OAC1EA,EAAOA,EAAK,WAEhB,OAAOA,CACX,CAEA,SAASC,EAAOC,EAAS,CACrB,OAAOA,GAAWA,EAAQ,SAAWA,EAAQ,QAAQ,YAAY,IAAM,GAC3E,CAEA,SAASC,EAAiBC,EAAOJ,EAAM,CAEnC,GAAII,EAAM,iBAAoB,MAAO,GAErC,IAAIC,EAAuB,CAACL,EAAK,QAAUA,EAAK,OAAO,MAAM,uBAAuB,EAChFM,EAAiB,EAAEF,EAAM,SAAWA,EAAM,SAAWA,EAAM,WAAaA,EAAM,OAAS,QAC3F,OAAOC,GAAwBC,CACnC,CAEA,IAAIC,EAAsB,EAE1B,SAASC,EAAqBJ,EAAO,CACjC,GAAI,EAAAA,EAAM,OAAS,YAAcA,EAAM,SAAWG,GAElD,KAAIP,EAAOD,EAAUK,EAAM,MAAM,EAC7BK,EAAmBT,GAAQA,EAAK,MAAQA,EAAK,KAAK,MAAM,GAAG,EAAE,CAAC,EAElE,GAAI,CAAAU,GAAwBV,EAAM,CAAC,EAKnC,IAAIW,GAAeX,CAAI,EACnB,OAAOY,EAAmBR,EAAOJ,EAAM,CAAE,KAAM,uBAAwB,MAAO,CAAE,IAAKA,EAAK,IAAK,CAAE,CAAC,EAEtG,GAAIa,GAAkBJ,CAAgB,EAClC,OAAOG,EAAmBR,EAAOJ,EAAM,CAAE,KAAM,gBAAiB,MAAO,CAAE,IAAKS,CAAiB,CAAE,CAAC,GAE1G,CAEA,SAASG,EAAmBR,EAAOJ,EAAMc,EAAY,CACjD,IAAIC,EAAe,GAEnB,SAASC,GAAa,CACbD,IACDA,EAAe,GACf,OAAO,SAAWf,EAAK,KAE/B,CAEIG,EAAiBC,EAAOJ,CAAI,GAC5B,UAAUc,EAAW,KAAM,CAAE,MAAOA,EAAW,MAAO,SAAUE,CAAW,CAAC,EAC5E,WAAWA,EAAY,GAAI,EAC3BZ,EAAM,eAAe,GAErB,UAAUU,EAAW,KAAM,CAAE,MAAOA,EAAW,KAAM,CAAC,CAE9D,CAEA/C,EAAS,iBAAiB,QAASyC,CAAoB,EACvDzC,EAAS,iBAAiB,WAAYyC,CAAoB,EAE1D,SAASG,GAAeX,EAAM,CAC1B,OAAOA,GAAQA,EAAK,MAAQA,EAAK,MAAQA,EAAK,OAASlC,EAAS,IACpE,CACA,IAAImD,GAAmB,CAAC,MAAO,OAAQ,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAAQ,KAAM,MAAO,MAAO,KAAM,MAAO,MAAO,MAAO,MAAO,OAAQ,MAAO,OAAQ,MAAO,MAAO,KAAK,EACpMC,GAAgBlD,EAAS,aAAa,YAAY,EAClDmD,GAAmBnD,EAAS,aAAa,gBAAgB,EACzDoD,GAAoBF,IAAiBA,GAAc,MAAM,GAAG,GAAOC,IAAoBA,GAAiB,MAAM,GAAG,EAAE,OAAOF,EAAgB,GAAMA,GAEpJ,SAASJ,GAAkB1B,EAAK,CAC5B,GAAI,CAACA,EAAO,MAAO,GAEnB,IAAIkC,EAAWlC,EAAI,MAAM,GAAG,EAAE,IAAI,EAClC,OAAOiC,GAAiB,KAAK,SAAUE,EAAiB,CACpD,OAAOA,IAAoBD,CAC/B,CAAC,CACL,CAGA,SAASE,GAAyBC,EAAa,CAC3C,IAAIC,EAAgBC,GAASF,CAAW,EAAIA,EAAcA,GAAeA,EAAY,WACjFV,EAAa,CAAE,KAAM,KAAM,MAAO,CAAC,CAAE,EAErCa,EAAYF,GAAiBA,EAAc,UAC/C,GAAI,CAACE,EAAa,OAAOb,EAEzB,QAASrB,EAAI,EAAGA,EAAIkC,EAAU,OAAQlC,IAAK,CACvC,IAAImC,EAAYD,EAAU,KAAKlC,CAAC,EAE5BoC,EAAYD,EAAU,MAAM,gCAAgC,EAChE,GAAKC,EAEL,KAAIC,EAAMD,EAAU,CAAC,EACjBE,EAAQF,EAAU,CAAC,EAAE,QAAQ,MAAO,GAAG,EAEvCC,EAAI,YAAY,IAAM,OACtBhB,EAAW,KAAOiB,EAElBjB,EAAW,MAAMgB,CAAG,EAAIC,EAEhC,CAEA,OAAOjB,CACX,CAEA,SAASkB,GAA4B5B,EAAO,CACxC,IAAI6B,EAAO7B,EAAM,OACbU,EAAaS,GAAyBU,CAAI,EAC9C,GAAI,CAACnB,EAAW,KAAQ,OAExBV,EAAM,eAAe,EACrB,IAAI8B,EAAgB,GAEpB,SAASC,GAAa,CACbD,IACDA,EAAgB,GAChBD,EAAK,OAAO,EAEpB,CAEA,WAAWE,EAAY,GAAI,EAC3B,UAAUrB,EAAW,KAAM,CAAE,MAAOA,EAAW,MAAO,SAAUqB,CAAW,CAAC,CAChF,CAEA,SAASC,GAAOlC,EAAS,CACrB,OAAOA,GAAWA,EAAQ,SAAWA,EAAQ,QAAQ,YAAY,IAAM,MAC3E,CAEA,IAAImC,GAA0B,EAE9B,SAASC,GAA8BlC,EAAO,CAC1C,GAAI,EAAAA,EAAM,OAAS,YAAcA,EAAM,SAAWG,GAQlD,SANIgC,EAAUnC,EAAM,OAEhBoC,EACAf,EAGKhC,EAAI,EAAGA,GAAK4C,IACZE,EADqC9C,IAAK,CAI/C,GAAI2C,GAAOG,CAAO,EAAK,OACnBtC,EAAOsC,CAAO,IAAKC,EAAcD,GACjCb,GAASa,CAAO,IAAKd,EAAgBc,GACzCA,EAAUA,EAAQ,UACtB,CAEA,GAAId,EAAe,CACf,IAAIX,EAAaS,GAAyBE,CAAa,EAEnDe,GACA1B,EAAW,MAAM,IAAM0B,EAAY,KACnC5B,EAAmBR,EAAOoC,EAAa1B,CAAU,GAEjD,UAAUA,EAAW,KAAM,CAAE,MAAOA,EAAW,KAAM,CAAC,CAE9D,EACJ,CAEA,SAASY,GAASxB,EAAS,CACvB,IAAIyB,EAAYzB,GAAWA,EAAQ,UACnC,GAAIyB,GACA,QAASlC,EAAI,EAAGA,EAAIkC,EAAU,OAAQlC,IAClC,GAAIkC,EAAU,KAAKlC,CAAC,EAAE,MAAM,gCAAgC,EAAK,MAAO,GAGhF,MAAO,EACX,CAEA,SAASiB,GAAwBR,EAASuC,EAAgB,CACtD,MAAI,CAACvC,GAAWuC,EAAiBJ,GAAkC,GAC/DX,GAASxB,CAAO,EAAY,GACzBQ,GAAwBR,EAAQ,WAAYuC,EAAiB,CAAC,CACzE,CAEA1E,EAAS,iBAAiB,SAAUiE,EAA2B,EAC/DjE,EAAS,iBAAiB,QAASuE,EAA6B,EAChEvE,EAAS,iBAAiB,WAAYuE,EAA6B,CACvE,GAAG,EAGH,IAAII,EAAU,CAAC,EACfA,EAAQ,IAAS,ovCACjBA,EAAQ,KAAU,oqDAClBA,EAAQ,MAAW,60CACnBA,EAAQ,MAAW,ufACnBA,EAAQ,MAAW,mSACnBA,EAAQ,OAAY,spLACpBA,EAAQ,OAAY,o0JACpBA,EAAQ,OAAY,67EACpBA,EAAQ,OAAY,i4CACpBA,EAAQ,OAAY,o2DACpBA,EAAQ,OAAY,6xFACpBA,EAAQ,OAAY,gtLACpBA,EAAQ,OAAY,2tLACpBA,EAAQ,MAAW,uNACnBA,EAAQ,KAAU,ieAKlBA,EAAQ,OAAY,26RACpBA,EAAQ,KAAU,0zEAClBA,EAAQ,MAAW,kvBACnBA,EAAQ,GAAQ,0hDAChBA,EAAQ,MAAW,0zCAElB,yBAAyB,IAAM,CAC5B,IAAIC,EAAoB,SAAS,iBAAiB,0BAA0B,EAExEA,GAAqBA,EAAkB,OAAS,GAChDC,EAAM,iBAAkB,SAAUxD,EAAM,CACpC,IAAId,EAAU,GACVuE,EAAQ,EACZtF,EAAQ6B,EAAM,SAAU0D,EAAG,CACvBxE,GAAW,kBAAoBwE,EAAE,GAAK,KAAOA,EAAE,KAAO,KAAOA,EAAE,eAAe,OAAO,EAAGA,EAAE,eAAe,QAAQ,GAAG,CAAC,EAAI,aACzHD,GACJ,CAAC,EACGA,EAAQ,IAAGvE,GAAW,2CAC1Bf,EAAQoF,EAAmB,SAAUpE,EAAI,CACrCA,EAAG,UAAYD,CACnB,CAAC,CACL,EAAG,IAAI,EAGXyE,EAAS,kBAAmB,SAAU,SAAUC,EAAG,CAE/C,IAAIC,EAAO,CAAE,MAAS,GAAM,KADjBD,EAAE,OAAO,cAAc,oBAAoB,EACb,KAAM,EAC/CJ,EAAM,cAAe,SAAUxD,EAAM,CACjC,GAAIA,EAAK,aAAc,CACnB,IAAI8D,EAAQ,UACZ3F,EAAQ6B,EAAK,aAAc,SAAUb,EAAI,CACrC2E,GAAS,WAAa3E,EAAG,KAAO,wEAA0EA,EAAG,MAAQ,qBAAuBA,EAAG,MAAQ,gBAAkBA,EAAG,MAAQ,YACxL,CAAC,EACGa,EAAK,aAAa,SAAW,IAAG8D,GAAS,sCAC7CA,GAAS,WACTF,EAAE,OAAO,QAAQ,KAAK,EAAE,cAAc,QAAQ,EAAE,UAAYE,CAChE,CAEJ,EAAG,KAAK,UAAUD,CAAI,CAAC,EACvBE,EAAQH,CAAC,CACb,CAAC,EAGDD,EAAS,kBAAmB,SAAU,SAAUC,EAAG,CAC/C,IAAII,EAAOJ,EAAE,OAAO,cAAc,oBAAoB,EAClDK,EAAWL,EAAE,OAAO,cAAc,0BAA0B,EAC5DM,EAAaD,EAAS,MAAQ,SAASA,EAAS,KAAK,EAAI,EACzDJ,EAAO,CAAE,OAAU,GAAM,KAAQG,EAAK,MAAO,WAAcE,CAAW,EAC1EV,EAAM,cAAe,SAAUxD,EAAM,CACjC,GAAIA,EAAK,aAAc,CACnB,IAAI8D,EAAQ,UACZ3F,EAAQ6B,EAAK,OAAQ,SAAUb,EAAI,CAE/B2E,GAAS,QAAUI,EAAa,GAAK,OAAS/E,EAAG,GAAK,SAAWA,EAAG,GAAK,SAAW,OAASA,EAAG,EAAI,KAAOA,EAAG,EAAI,YAAcA,EAAG,IAAM,KAAOA,EAAG,EAAI,yEAA2EA,EAAG,GAAK,qBAAuBA,EAAG,GAAK,gBAC7Q,CAAC,EACGa,EAAK,OAAO,SAAW,IAAG8D,GAAS,sCACvCA,GAAS,WACTF,EAAE,OAAO,QAAQ,KAAK,EAAE,cAAc,QAAQ,EAAE,UAAYE,CAChE,CAEJ,EAAG,KAAK,UAAUD,CAAI,CAAC,EACvBE,EAAQH,CAAC,CACb,CAAC,EAGDD,EAAS,sBAAuB,SAAU,SAAUC,EAAG,CACnD,IAAIK,EAAWL,EAAE,OAAO,cAAc,0BAA0B,EAAE,MAE9D7D,EAAM,qCADC6D,EAAE,OAAO,cAAc,qBAAqB,EAAE,QACC,UAAY,SAAW,gBAAkB,eAAiBK,EACpH,OAAO,KAAKlE,CAAG,EACfgE,EAAQH,CAAC,CACb,CAAC,EAEDD,EAAS,oBAAqB,SAAU,SAAUC,EAAG,CACjD,IAAIK,EAAWL,EAAE,OAAO,cAAc,0BAA0B,EAAE,MAC9D7D,EAAM,UAAY,UAAYkE,EAAW,SAC7CE,EAAMpE,EAAK,SAAUC,EAAM,CACvBoE,GAAWpE,EACXqE,GAAqBJ,EACrB,IAAIK,EAAW,SAAS,cAAc,YAAY,EAClDC,EAAYD,EAAU,QAAQ,EAC9B,IAAIE,EAAU,CAAC,EACXC,EAAiB,CAAC,EAClBC,EAAU,CAAC,EACXC,EAAiB,EACjBC,EAAc,EAElBzG,EAAQ6B,EAAM,SAAUb,EAAI,CACpBA,EAAG,IAAMA,EAAG,GAAK,IAAMA,EAAG,IAAMA,EAAG,GAAK,GAAKA,EAAG,IAAMA,EAAG,GAAK,KAC9DqF,EAAQrF,EAAG,CAAC,EAAI,GAChBsF,EAAetF,EAAG,CAAC,EAAI,GACvBuF,EAAQvF,EAAG,GAAG,EAAI,GAClBwF,IACIxF,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAC/CA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAE/CA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAE3D,CAAC,EAED0F,EAAKF,CAAc,EACnBE,EAAKD,CAAW,EAEhBE,EAAkB,iBAAmBH,EAAiB,2DAA2D,EAEjHL,EAAS,cAAc,uBAAuB,EAAE,UAAY,wBAA0BS,GAAc,OAAO,QAAQP,CAAO,CAAC,EAC3HF,EAAS,cAAc,6BAA6B,EAAE,UAAY,wBAA0BS,GAAc,OAAO,QAAQN,CAAc,CAAC,EACxIH,EAAS,cAAc,uBAAuB,EAAE,UAAY,wBAA0BS,GAAc,OAAO,QAAQL,CAAO,CAAC,EAC3HJ,EAAS,cAAc,qBAAqB,EAAE,UAAY,qDAC9D,CAAC,EACDP,EAAQH,CAAC,CACb,CAAC,EAED,SAASoB,EAAShF,EAAMiF,EAAUC,EAAM,CACpC,IAAIC,EAAO,IAAI,KAAK,CAACnF,CAAI,EAAG,CAAE,KAAMkF,CAAK,CAAC,EAC1C,GAAI,OAAO,UAAU,iBACjB,OAAO,UAAU,iBAAiBC,EAAMF,CAAQ,MAC/C,CACD,IAAIG,EAAI,SAAS,cAAc,GAAG,EAC9BrF,EAAM,IAAI,gBAAgBoF,CAAI,EAClCC,EAAE,KAAOrF,EACTqF,EAAE,SAAWH,EACb,SAAS,KAAK,YAAYG,CAAC,EAC3BA,EAAE,MAAM,EACR,WAAW,UAAY,CACnB,SAAS,KAAK,YAAYA,CAAC,EAC3B,OAAO,IAAI,gBAAgBrF,CAAG,CAClC,EAAG,CAAC,CACR,CACJ,CAEA4D,EAAS,iBAAkB,SAAU,SAAUC,EAAG,CAC9C,IAAIyB,EAASzB,EAAE,OAAO,cAAc,uBAAuB,EAAE,MACzD0B,EAAe1B,EAAE,OAAO,cAAc,6BAA6B,EAAE,MACrE2B,EAAS3B,EAAE,OAAO,cAAc,uBAAuB,EAAE,MACzDsB,EAAOtB,EAAE,OAAO,cAAc,qBAAqB,EAAE,MAErD4B,EAAa,CAAC,EACdZ,EAAc,EACda,EAAQ,EAEZ,GAAIP,GAAQ,YAAa,CACrB/G,EAAQiG,GAAU,SAAUjF,EAAI,CACxBA,EAAG,IAAMA,EAAG,GAAK,GAAKA,EAAG,IAAMA,EAAG,GAAK,IAAMkG,IAAW,QAAUA,IAAWlG,EAAG,KAAOmG,IAAiB,QAAUA,IAAiBnG,EAAG,KAAOoG,IAAW,QAAUA,IAAWpG,EAAG,OAChLqG,EAAW,KAAKrG,CAAE,EAEdA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAEnDsG,GAAUtG,EAAG,GAAKA,EAAG,GACrBA,EAAG,MAAQsG,EAEnB,CAAC,EAED,IAAIC,EAAIC,GAAI,EACRC,EAAYF,EAAID,EAIpB,QAFII,EAEKxF,EAAI,EAAGA,EAAImF,EAAW,OAAQnF,IACnC,GAAImF,EAAWnF,CAAC,EAAE,OAASuF,EAAW,CAClCC,EAASL,EAAWnF,CAAC,EACrB,KACJ,CAGJ,GAAIwF,EAAQ,CACR,IAAIhC,EAAO,CAAE,OAAU,GAAM,KAASgC,EAAO,EAAI,GAAK,WAAc,SAASxB,EAAkB,CAAE,EACjGb,EAAM,cAAe,SAAUxD,EAAM,CACjC,GAAIA,EAAK,OAAQ,CACb,IAAI8F,EAAK9F,EAAK,OAAO,CAAC,EAClB+F,EAAO,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,MAAO,GAAG,EAClDC,EAAU,gBAAkBH,EAAO,EAAI,KAAOA,EAAO,EAAI,oBAAsBA,EAAO,EAAI,iBAAmBA,EAAO,EAAI,kBAAoBA,EAAO,EAAI,gBAAkBA,EAAO,IAAM,sBAAwBC,EAAG,GACjN,8BAAgCN,EAAW,OAAS,kDAAoDC,EACxG,sCAAwCG,EAAY,kCAAoCF,EAAI,mDAAqDD,EACjJ,+CAAiDJ,EAAS,eAAiBC,EAAe,aAAeC,EAAS,gBACjGQ,EACrBjB,EAAkBkB,CAAO,EACzBhB,EAAS,4BAA8BgB,EAAU,iBAAkB,QAAUD,EAAO,QAAS,MAAM,CACvG,CACJ,EAAG,KAAK,UAAUlC,CAAI,CAAC,CAC3B,MAEIiB,EAAkB,qEAAqE,CAE/F,KACK,CACD3G,EAAQiG,GAAU,SAAUjF,EAAI,CACvBA,EAAG,IAAMA,EAAG,GAAK,IAAMA,EAAG,IAAMA,EAAG,GAAK,GAAKA,EAAG,IAAMA,EAAG,GAAK,KAAQkG,IAAW,QAAUA,IAAWlG,EAAG,KAAOmG,IAAiB,QAAUA,IAAiBnG,EAAG,KAAOoG,IAAW,QAAUA,IAAWpG,EAAG,OAC1MqG,EAAW,KAAKrG,CAAE,EACdA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAC/CA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IAE/CA,EAAG,IAAMA,EAAG,GAAK,IAAGyF,GAAgBzF,EAAG,GAAKA,EAAG,IACnDA,EAAG,IAAMyF,EAEjB,CAAC,EAED,IAAIc,EAAIC,GAAI,EACRC,EAAYF,EAAId,EAIpB,QAFIiB,EAEKxF,EAAI,EAAGA,EAAImF,EAAW,OAAQnF,IACnC,GAAImF,EAAWnF,CAAC,EAAE,KAAOuF,EAAW,CAChCC,EAASL,EAAWnF,CAAC,EACrB,KACJ,CAGJ,GAAIwF,EAAQ,CACR,IAAIhC,EAAO,CAAE,OAAU,GAAM,KAASgC,EAAO,EAAI,GAAK,WAAc,SAASxB,EAAkB,CAAE,EACjGb,EAAM,cAAe,SAAUxD,EAAM,CACjC,GAAIA,EAAK,OAAQ,CACb,IAAI8F,EAAK9F,EAAK,OAAO,CAAC,EAClB+F,EAAO,IAAI,KAAK,EAAE,YAAY,EAAE,QAAQ,MAAO,GAAG,EAClDC,EAAU,gBAAkBH,EAAO,EAAI,KAAOA,EAAO,EAAI,oBAAsBA,EAAO,EAAI,iBAAmBA,EAAO,EAAI,kBAAoBA,EAAO,EAAI,gBAAkBA,EAAO,IAAM,sBAAwBC,EAAG,GACjN,8BAAgCN,EAAW,OAAS,gFAAkFZ,EACtI,sCAAwCgB,EAAY,kCAAoCF,EAAI,+BAAiCd,EAC7H,+CAAiDS,EAAS,eAAiBC,EAAe,aAAeC,EAAS,gBACjGQ,EACrBjB,EAAkBkB,CAAO,EACzBhB,EAAS,4BAA8BgB,EAAU,iBAAkB,QAAUD,EAAO,QAAS,MAAM,CACvG,CACJ,EAAG,KAAK,UAAUlC,CAAI,CAAC,CAC3B,MAEIiB,EAAkB,qEAAqE,CAE/F,CACAf,EAAQH,CAAC,CACb,CAAC,CAEL,CAAC,EAED,SAASmB,GAAcK,EAAG,CACtB,IAAIa,EAAI,GACR,OAAA9H,EAAQiH,EAAG,SAAUjG,EAAI,CACrB8G,GAAK,WAAa9G,EAAG,CAAC,EAAI,WAC9B,CAAC,EACM8G,CACX,CAEA,IAAI7B,GAAW,CAAC,EACZC,GAAqB,EAEzB,SAASsB,IAAM,CACX,OAAO,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,EAAI,GAAK,EAChE,CACC,IAAIO,EAAU,CAAC,EACZC,GAAiB,EACjBC,EAAe,QACfC,GAAc,mBACdC,GAAe,uGAEnB,OAAO,eAAiB,SAAU,EAAG,CACjC,GAAIH,GAAiB,EAAG,CACpB,IAAInC,EAAO,gFACX,SAAI,GAAK,OAAO,MAEZ,IACA,EAAE,YAAcA,GAEbA,CACX,CACJ,EAEA,yBAAyB,IAAM,CAC3B7F,EAAQ,yBAA0B,SAAUgB,EAAI,CAC5C,IAAIoH,EAASpH,EAAG,QAAQ,aACxB,GAAIoH,EACA,OAAQA,EAAQ,CACZ,IAAK,UACDC,GAAYD,CAAM,EAClB,MACJ,QACJ,CAER,CAAC,CACL,CAAC,EAED,SAASE,GAAavG,EAAOwG,EAAUC,EAAO,CACtCD,GACIxG,GACA4E,EAAkB5E,EAAOyG,CAAK,EAElC7B,EAAkBwB,GAAcK,CAAK,GAGrC7B,EAAkB5E,CAAK,CAE/B,CAEA,SAAS0G,EAAgBC,EAAU,CAC3BA,GAAYA,EAAS,QACrB1I,EAAQ0I,EAAU,SAAUC,EAAK,CAC7BhC,EAAkBgC,CAAG,CACzB,CAAC,CAET,CAEA,SAASN,GAAYD,EAAQ,CAGzB/C,EAAM+C,EAAQ,SAAUvG,EAAM,CAC1BkG,EAAQK,CAAM,EAAIvG,EAClB,IAAI+G,EAAkB,SAAS,eAAe,iBAAiB,EAM/D,GALIA,IACAA,EAAgB,UAAY/G,EAAK,KACjCuE,EAAYwC,EAAgB,QAAQ,IAAI,EAAG,QAAQ,GAExCb,EAAQ,QAAQ,SACjB,CACV,IAAI,EAAI,0BACR/H,EAAQ+H,EAAQ,QAAQ,QAAS,SAAUX,EAAQ,CAC/C,GAAK,WAAaA,EAAO,KAAO,WACpC,CAAC,EACD,GAAK,cACL,SAAS,cAAc,MAAM,EAAE,mBAAmB,YAAa,CAAC,EAEhEyB,GAAW,EAEX,IAAIC,EAAS,SAAS,eAAe,QAAQ,EACzCA,IACA1C,EAAY0C,EAAO,QAAQ,IAAI,EAAG,QAAQ,EAC1CA,EAAO,iBAAiB,SAAU,SAAUrD,EAAG,CAC3CG,EAAQH,CAAC,EAET,IAAIf,EAAOe,EAAE,OAAO,QAAQ,MAAM,EAC9BsD,EAAYrE,EAAK,cAAc,wBAAwB,EAAE,MAAM,QAAQ,iBAAkB,GAAG,EAAE,QAAQ,MAAO,EAAE,EAAE,QAAQ,MAAO,GAAG,EAEvI,GAAI,CAACqE,EAAW,CACZN,EAAgB,CAAC,iEAAiE,CAAC,EACnF,MACJ,CAEA,IAAIO,EAAeD,EAAU,MAAM,GAAG,EACtCrC,EAAKsC,CAAY,EACjB,IAAIC,EAAS,CAAC,EACVC,EAAqB,CAAC,EAU1B,GATAlJ,EAAQgJ,EAAc,SAAUG,EAAO,CAC/BC,GAAaD,CAAK,EAClBF,EAAO,KAAKE,CAAK,EAGjBD,EAAmB,KAAKC,EAAQ,0BAA0B,CAElE,CAAC,EAEGD,EAAmB,OAAQ,CAC3BT,EAAgBS,CAAkB,EAClC,MACJ,CAEAxE,EAAK,cAAc,sBAAsB,EAAE,SAAW,GACtDW,EAAM,SAAU,SAAUxD,EAAM,CACxBA,EAAK,SAAS,OAAS,GACvB6C,EAAK,cAAc,wBAAwB,EAAE,MAAQ,GACrD+D,EAAgB5G,EAAK,QAAQ,GAG7BwH,GAAS,yBAA0BxH,CAAI,EAE3C6C,EAAK,cAAc,sBAAsB,EAAE,SAAW,EAC1D,EAAGuE,CAAM,CACb,CAAC,EAET,KACK,CACD,IAAIK,EAAa,SAAS,eAAe,0BAA0B,EAC/DA,GACAlD,EAAYkD,EAAY,QAAQ,CAExC,CACJ,EAAG,KAAK,UAxEO,CAAC,CAwEU,CAAC,CAC/B,CAEA,SAASC,GAAsBvI,EAAI,CAC/B,IAAI0D,EAAO1D,EAAG,QAAQ,MAAM,EAC5B,GAAI0D,EAAM,CACN,IAAI8E,EAAMzB,EAAQ,QAAQ,SAAS,sBAAsB,oBACzD,IAAI0B,EAAS/E,EAAK,iBAAiB,WAAW,EAC1CgF,EAAQ1I,EAAG,MACfhB,EAAQyJ,EAAQ,SAAUE,EAAO,CAC7B,IAAIC,EAASD,EAAM,aAAa,MAAM,EAClCE,EAAKC,EAAMN,EAAKI,EAAQ,OAAO,EAC/BC,EAAG,WAAaA,EAAG,UAAU,QAAQ,IAAMH,EAAQ,GAAG,GACtDK,EAASJ,EAAM,uBAAwB,QAAQ,EAC/CI,EAASJ,EAAO,QAAQ,IAGxBvD,EAAYuD,EAAM,uBAAwB,QAAQ,EAClDvD,EAAYuD,EAAO,QAAQ,EAEnC,CAAC,CACL,CACJ,CAEA,SAASK,GAAkBC,EAAe,CACtC,IAAInC,EAAI,yEACJmC,EAAgB,IAChBnC,GAAK,qCAET,QAAS5F,EAAI,EAAGA,EAAI,GAAIA,IACpB4F,GAAK,WAAa5F,IAAM+H,EAAgB,YAAc,IAAM,IAAM/H,EAAI,YAE1E,OAAA4F,GAAK,YACEA,CACX,CAEA,SAASe,IAAa,CAClB,IAAIqB,EAAU,SAAS,eAAe,SAAS,EAC3CpE,EAAWiC,EAAQ,QAAQ,SAC/BmC,EAAQ,UAAY,GACpB,IAAIC,EAAe,GACfC,EAAS,EACbpK,EAAQ+H,EAAQ,QAAQ,OAAQ,SAAUsC,EAAO,CACzCD,IAAW,GAAKC,EAAM,WAAaD,IAAQD,EAAe,IAC9DC,EAASC,EAAM,QACnB,CAAC,EAEGtC,EAAQ,QAAQ,QAAUA,EAAQ,QAAQ,OAAO,OAAS,IAC1DmC,EAAQ,mBAAmB,YAAa,uCAAuC,EAE/ElK,EAAQ+H,EAAQ,QAAQ,OAAQ,SAAUsC,EAAO,CAC7CC,GAAUD,EAAOH,EAASpE,EAAUqE,CAAY,CACpD,CAAC,EAEDD,EAAQ,mBAAmB,YAAa,QAAQ,GAGpD,IAAIK,EAAW,CAAE,KAAM,GAAI,SAAU,EAAG,GAAI,EAAG,WAAYzE,EAAS,GAAI,MAAO,EAAG,EAClFwE,GAAUC,EAAUL,EAASpE,CAAQ,EAErCM,EAAY8D,EAAQ,QAAQ,IAAI,EAAG,QAAQ,EAG3CM,EAAU,kBAAmB,SAAU,SAAU/E,EAAG,CAChD8D,GAAsB9D,EAAE,MAAM,EAC9B,IAAIf,EAAOe,EAAE,OAAO,QAAQ,MAAM,EAClCsE,EAASrF,EAAM,SAAS,EACxBA,EAAK,cAAc,sBAAsB,EAAE,SAAW,EAC1D,CAAC,EAED8F,EAAU,oBAAqB,QAAS,SAAU/E,EAAG,CACjDgF,GAAOhF,CAAC,CACZ,CAAC,EAED+E,EAAU,iBAAkB,QAAS,SAAU/E,EAAG,CAC9C,IAAIf,EAAOe,EAAE,OAAO,QAAQ,MAAM,EAClCsE,EAASrF,EAAM,SAAS,EACxBA,EAAK,cAAc,sBAAsB,EAAE,SAAW,EAC1D,CAAC,EAED8F,EAAU,mBAAoB,QAAS,SAAU/E,EAAG,CAChD,GAAI,QAAQ,sFAAsF,EAAG,CACjG,IAAIf,EAAOe,EAAE,OAAO,QAAQ,MAAM,EAE9ByE,EAAU,CACV,OAAU,CAAC,CAAE,GAFH,SAASxF,EAAK,aAAa,SAAS,CAAC,EAErB,WAAYqD,EAAQ,QAAQ,SAAS,GAAI,OAAQ,EAAK,CAAC,CACrF,EACA1C,EAAM,UAAW,SAAUxD,EAAM,CAC7BkG,EAAQ,QAAalG,EACrBwH,GAAS,sBAAuBxH,CAAI,EACpCgH,GAAW,CACf,EAAGqB,CAAO,CACd,CACAtE,EAAQH,CAAC,CACb,CAAC,EAED+E,EAAU,gBAAiB,SAAU,SAAU/E,EAAG,CAC9CG,EAAQH,CAAC,EAET,IAAIf,EAAOe,EAAE,OAAO,QAAQ,MAAM,EAClCiF,GAAShG,CAAI,CACjB,CAAC,CACL,CAEA,SAASgG,GAAShG,EAAM,CACpBA,EAAK,cAAc,sBAAsB,EAAE,SAAW,GAEtD,IAAIiG,EAAmBC,GAAclG,CAAI,EACzC,GAAIiG,EAAiB,SAAS,OAAQ,CAClClC,EAAgBkC,EAAiB,QAAQ,EACzC,MACJ,CAEA,IAAIT,EAAU,CAAE,OAAQ,CAACS,EAAiB,KAAK,CAAE,EAEjDtF,EAAM,UAAW,SAAUxD,EAAM,CAC7BkG,EAAQ,QAAalG,EACjBA,EAAK,SAAS,OAAS,EACvB4G,EAAgB5G,EAAK,QAAQ,EAG7BwH,GAAS,mBAAoBxH,CAAI,EAErCgH,GAAW,CACf,EAAGqB,CAAO,CACd,CAEA,SAASI,GAAUD,EAAOQ,EAAU/E,EAAUqE,EAAc,CACpDE,EAAM,KAAO,GAAKA,EAAM,WAAa,GAAKtC,EAAQ,QAAQ,OAAO,OAAS,IAC1EsC,EAAM,SAAWtC,EAAQ,QAAQ,OAAOA,EAAQ,QAAQ,OAAO,OAAS,CAAC,EAAE,UAE/E,IAAIX,EAAS0C,EAAM/B,EAAQ,QAAQ,QAASsC,EAAM,SAAU,IAAI,EAC5DS,EAAc1D,EAASA,EAAO,KAAO,GACrC2D,EAAY,IACZC,EAAa,aACbC,EAAS,GACTC,EAAc,oBAElB,GAAIb,EAAM,KAAO,EACba,EAAcb,EAAM,MAAQ,KAAOA,EAAM,MAAQ,CAACF,GAAgBW,EAAa,MAAQA,EAAa,IACpG9K,EAAQ8F,EAAS,sBAAsB,oBAAqB,SAAU+D,EAAI,CACtE,IAAIsB,EAAMd,EAAM,OAAOR,EAAG,KAAK,EAC3BuB,EAAM,MACNrE,EAAO,OACPsE,EAAY,KACZxB,EAAG,OAAS,GAAKA,EAAG,OAAS,KAC7BuB,GAAO,UACPC,EAAY,GAEhB,IAAIC,EAAU,GAcd,GAbIzB,EAAG,QAAU,OACbwB,EAAY,EACZC,EAAU,gDAEVzB,EAAG,WAAaA,EAAG,UAAU,QAAQ,IAAMQ,EAAM,MAAQ,GAAG,EAAI,IAChEe,GAAO,YAEPvB,EAAG,OAAS,MAAQA,EAAG,OAAS,QAChCwB,EAAY,EACZ,SAAW,MACXtE,EAAO,UAEXqE,EAAM,WAAaA,EAAM,IACrBvB,EAAG,OAAS,EAAG,CACf,IAAI0B,EAAQ1B,EAAG,MAAM,MAAM,GAAG,EAC1B2B,EAAMD,EAAM,CAAC,EACbxK,EAAU,oCACdwK,EAAM,QAAQ,SAAUE,EAAGvJ,GAAG,CACtBA,KACIuJ,GAAKN,EACLpK,GAAW,oBAAsB0K,EAAI,YAGrC1K,GAAW,WAAa0K,EAAI,YAGxC,CAAC,EACDR,GAAU,SAAWG,EAAM,IAAMI,GAAO3B,EAAG,SAAW,SAAWA,EAAG,SAAW,UAAY,IAAM,yBAA2BA,EAAG,MAAQ,IAAMuB,EAAK,IAAMrK,EAAU,WACtK,MAEIkK,GAAU,SAAWG,EAAM,IAAMvB,EAAG,OAASA,EAAG,SAAW,SAAWA,EAAG,SAAW,UAAY,IAAM,wBAA0BA,EAAG,MAAQ,WAAa9C,EAAO,gBAAkBsE,EAAY,aACxLF,EAAOtB,EAAG,OAAS,EAAI6B,GAAQP,CAAG,EAAIA,EAAO,IAAM,KAAOC,EAAME,EACjE,KAEZ,CAAC,MAEA,CACDP,EAAY,KACZC,EAAa,oBAEb,IAAInB,EAAK/D,EAAS,sBAAsB,oBAAoB,CAAC,EACzDsF,EAAM,MACNC,EAAY,KACZxB,EAAG,OAAS,GAAKA,EAAG,OAAS,KAC7BuB,GAAO,UACPC,EAAY,GAEhB,IAAIC,EAAU,GACVzB,EAAG,OAAS,IACZwB,EAAY,EACZC,EAAU,gDAEdF,EAAM,WAAaA,EAAM,IACzBH,GAAU,SAAWG,EAAM,IAAMvB,EAAG,OAASA,EAAG,SAAW,SAAWA,EAAG,SAAW,UAAY,IAAM,wBAA0BA,EAAG,MAAQ,4BAA8BwB,EAAY,cAAgBD,EAAME,EAAU,yBACzN,CAEA,IAAIxD,EAAI,sBACEiD,EAAY,wBAA0BG,EAAc,KAAOH,EAAY,2DACtBV,EAAM,GAAK,sBAAwBA,EAAM,WAAa,MAC5GA,EAAM,KAAO,EAAI,iMAAmM,IACrNL,GAAkBK,EAAM,KAAK,EAC7B,qHAAuHA,EAAM,KAAO,+LACgDS,EAAa,iBAChMT,EAAM,KAAO,EAAI,SAAW,IAC7BY,EACA,+BAAiCD,EAAa,iCAClDH,EAAS,mBAAmB,YAAa/C,CAAC,CAC9C,CAEA,SAAS8C,GAAclG,EAAM,CACzB,IAAIgE,EAAW,CAAC,EACZ2B,EAAQ,CAAC,EAEbA,EAAM,GAAK,SAAS3F,EAAK,aAAa,SAAS,CAAC,EAChD,IAAIgF,EAAQhF,EAAK,cAAc,sBAAsB,EAAE,MACnDgF,IAAU,IACVhB,EAAS,KAAK,oBAAoB,EAClC2B,EAAM,MAAQ,IAGdA,EAAM,MAAQ,SAASX,CAAK,EAEhCW,EAAM,KAAO3F,EAAK,cAAc,oBAAoB,EAAE,MACjD2F,EAAM,MAAM3B,EAAS,KAAK,0BAA0B,EACrD2B,EAAM,KAAK,QAAQA,EAAM,KAAK,GAAK,GAAG3B,EAAS,KAAK,8CAA8C,EAEtG,IAAItB,EAAS1C,EAAK,cAAc,sBAAsB,EAAE,MACpDiH,EAAgB7B,EAAM/B,EAAQ,QAAQ,QAASX,EAAQ,OAAQ,EAAI,EACnEA,EACKuE,EAKDtB,EAAM,SAAWsB,EAAc,IAJ/BjD,EAAS,KAAK,uFAAuF,EACrG2B,EAAM,SAAW,GAOrB3B,EAAS,KAAK,4BAA4B,EAE1C2B,EAAM,KAAO,GAAK3B,EAAS,SAAW,GACtC1I,EAAQ+H,EAAQ,QAAQ,OAAQ,SAAU6D,EAAG,CACrCA,EAAE,KAAK,YAAY,IAAMvB,EAAM,KAAK,YAAY,GAAKuB,EAAE,QAAUvB,EAAM,OAASuB,EAAE,WAAavB,EAAM,UACrG3B,EAAS,KAAK,yBAAyB,CAE/C,CAAC,EAGL2B,EAAM,OAAS,CAAC,EAChB,IAAIZ,EAAS/E,EAAK,iBAAiB,sBAAsB,EACrD8E,EAAMzB,EAAQ,QAAQ,SAAS,sBAAsB,oBACrD8D,EAAW,EACf,OAAA7L,EAAQyJ,EAAQ,SAAUqC,EAAO,CAC7B,IAAIX,EAAMW,EAAM,MACZvH,EAAMuH,EAAM,aAAa,MAAM,EAEnC,GADIvH,GAAO,OAAMsH,EAAWV,GACxBA,EAAK,CACL,IAAItB,EAAKC,EAAMN,EAAKjF,EAAK,OAAO,EAChC,GAAIsF,EAAG,WAAaA,EAAG,UAAU,QAAQ,IAAMQ,EAAM,MAAQ,GAAG,EAAI,EAAG,OACnER,EAAG,OAAS,GAAK,CAAC5B,EAAa,KAAKkD,CAAG,GACvCzC,EAAS,KAAKmB,EAAG,UAAYA,EAAG,UAAYA,EAAG,MAAQ,sBAAsB,EAE7EA,EAAG,OAAS,GAAK,CAAC3B,GAAY,KAAKiD,CAAG,GACtCzC,EAAS,KAAKmB,EAAG,UAAYA,EAAG,UAAYA,EAAG,MAAQ,iCAAiC,CAEhG,CACA,IAAItF,IAAQ,MAAQA,IAAQ,OACpB0D,EAAa,KAAKkD,CAAG,GAAKlD,EAAa,KAAK4D,CAAQ,GAChDV,EAAO,GAAKU,EAAW,CACvB,IAAIhC,EAAKC,EAAMN,EAAKjF,EAAK,OAAO,EAChCmE,EAAS,KAAKmB,EAAG,MAAQ,oDAAuD,GAAKgC,EAAY,GAAG,CACxG,CAGR,GAAItH,IAAQ,MAAQ0D,EAAa,KAAK4D,CAAQ,GAAK5D,EAAa,KAAKkD,CAAG,GAAK,SAASA,CAAG,EAAI,SAASU,CAAQ,EAAG,CAC7G,IAAIhC,EAAKC,EAAMN,EAAKjF,EAAK,OAAO,EAChCmE,EAAS,KAAKmB,EAAG,MAAQ,+CAAkDgC,EAAY,GAAG,CAC9F,CACAxB,EAAM,OAAO9F,CAAG,EAAI4G,CACxB,CAAC,EAEGzC,EAAS,SAAW,IACpB2B,EAAM,WAAatC,EAAQ,QAAQ,SAAS,GAC5CsC,EAAM,QAAU,IAGb,CAAE,SAAU3B,EAAU,MAAO2B,CAAM,CAC9C,CAEA,SAASqB,GAAQK,EAAGC,EAAQ,CACxB,OAAIA,EACOD,EAAE,eAAe,QAAS,CAC7B,sBAAuB,EACvB,sBAAuB,CAC3B,CAAC,EAGMA,EAAE,SAAS,EAAE,QAAQ,IAAK,GAAG,CAE5C,CAEA,SAASE,GAAQF,EAAG,CAChB,OAAK7D,GAAY,KAAK6D,CAAC,EAChB,KAAK,OAAO,WAAWA,EAAE,SAAS,EAAE,QAAQ,IAAK,GAAG,CAAC,EAAI,MAAW,GAAG,EAAI,IADjDA,CAErC,CAGA,SAAS1G,EAAM+C,EAAQtG,EAAUoK,EAAUC,EAAQ,CAC/C,IAAIvK,EAAMuK,EAAS,UAAY/D,EAASgE,GAAa,gBAAkBhE,EACvEpC,EAAMpE,EAAK,SAAUC,EAAM,CACnBA,IAAS,IACT6E,EAAK7E,CAAI,EACT6E,EAAK0B,CAAM,EACX1B,EAAK9E,CAAG,EACR+E,EAAkBwB,GAAcvG,CAAG,GAE9BC,IAAS,IACd,OAAO,SAAW,SAGlBC,EAASD,CAAI,CAErB,EAAG,OAAOqK,GAAa,SAAWA,EAAW,KAAK,UAAUA,CAAQ,CAAC,CACzE,CAkBA,SAASG,GAAUC,KAAUC,EAAM,CAC/B,GAAID,EAAQ,EAAG,CACX,QAAQ,IAAI,GAAGC,CAAI,EACnB,MACJ,CACA,GAAID,EAAQ,EACR,GAAI,CACA,IAAIE,EAAM,CAAC,EACXD,EAAK,QAAQ,CAACE,EAAGC,IAAM,CACnBF,EAAI,IAAME,CAAC,EAAID,CACnB,CAAC,EACD,UAAUH,EAAQ,EAAI,QAAU,OAAQ,CAAE,MAASE,CAAI,CAAC,CAC5D,OACOG,EAAO,CACV,QAAQ,MAAM,YAAaA,CAAK,EAC5B,gBACAC,GAAW,EAAG,GAAGL,CAAI,CAE7B,CAKJ,OAHI,gBACAK,GAAWN,EAAO,GAAGC,CAAI,EAErBD,EAAO,CACX,IAAK,GACD,QAAQ,IAAI,GAAGC,CAAI,EACnB,MACJ,IAAK,GACD,QAAQ,KAAK,GAAGA,CAAI,EACpB,MACJ,IAAK,GACD,QAAQ,MAAM,GAAGA,CAAI,EACrB,MACJ,QACI,QAAQ,IAAI,GAAGA,CAAI,CAC3B,CACJ,CAEA,SAASK,GAAWN,KAAUC,EAAM,CAChC,IAAIM,EAAS,SAAS,cAAc,SAAS,EAC7C,GAAIA,EAAQ,CACR,IAAIC,EAAO,gBAAiBR,EAAQ,EAAI,QAAQA,CAAK,GAAK,EAAG,KAC7DC,EAAK,QAAQ,CAACE,EAAGC,IAAM,CACnBI,GAAQ,GAAG,OAAOL,GAAK,SAAWA,EAAKM,GAAUN,CAAC,EAAI,WAAWA,EAAE,SAAS,EAAI,KAAK,UAAUA,EAAG,KAAM,CAAC,CAAE,GAAGC,EAAKH,EAAK,OAAS,EAAK,MAAQ,EAAE,EACpJ,CAAC,EACDM,EAAO,mBAAmB,aAAcC,EAAO;AAAA,CAAW,CAC9D,CACJ,CAGA,SAASC,GAAUC,EAAG,CAClB,GAAI,CACA,OAAOA,aAAa,WACxB,MAAY,CACR,OAAQ,OAAOA,GAAM,UAChBA,EAAE,WAAa,GACf,OAAOA,EAAE,OAAU,UACnB,OAAOA,EAAE,eAAkB,QACpC,CACJ,CAEC,yBAAyB,IAAM,CAW5B,QAVIC,EAAW,SAAS,iBAAiB,uBAAuB,EAC5DC,EAAkB,UAAY,CACnB,KAAK,QAAQ,MAAM,EACN,cAAc,UAAU,IAC3B,OACjB,KAAK,eAAe,EAAK,EACzBC,GAAgB,IAAI,EAE5B,EAEST,EAAIO,EAAS,OAAQP,KAC1BO,EAASP,CAAC,EAAE,iBAAiB,UAAWQ,CAAe,EAG3D,IAAIE,EAAe,SAAS,OAAO,EAC/BA,GACAC,EAAQ,SAAS,iBAAiB,cAAc,EAAG,SAAUC,EAAI,CAC7D,IAAIC,EAAQD,EAAG,cAAc,qBAAqB,EAC9CC,IAAOA,EAAM,MAAQH,EAC7B,CAAC,EAGLI,GAAU,EAEVH,EAAQ,qBAAsB,SAAUC,EAAI,CACxCA,EAAG,iBAAiB,QAAS,SAAUG,EAAG,CACtC,IAAIH,EAAKG,EAAE,OACX,GAAIH,EAAI,CACJ,IAAII,EAAIJ,EAAG,MACPK,EAAIL,EAAG,mBACPM,EAAKN,EAAG,QAAQ,MAChBI,GAAKG,GAAMH,CAAC,GAAKC,GAAKC,GACtBD,EAAE,UAAY,SAAWG,GAAQJ,EAAIK,GAAQH,CAAE,EAAG,EAAI,EAAI,OAC1DI,EAAYL,EAAG,QAAQ,IAGvBA,EAAE,UAAY,GACdM,EAASN,EAAG,QAAQ,EAE5B,CACJ,CAAC,CACL,CAAC,CACL,CAAC,EAED,SAASH,IAAY,CACjB,IAAIU,EAAQ,SAAS,iBAAiB,4BAA4B,EAClEC,EAAUD,EAAO,SAAU,SAAUT,EAAG,CACpC,IAAIW,EAAOX,EAAE,OACb,GAAIY,EAASD,EAAM,IAAI,EAAG,CACtB,IAAIE,EAAKF,EAAK,cAAc,sBAAsB,EAC9CG,EAAQH,EAAK,cAAc,yBAAyB,EACpDI,EAAMJ,EAAK,cAAc,oBAAoB,EAGjD,GAFcC,EAASD,EAAM,QAAQ,GAEtBE,EAAG,MAAM,SAAW,EAC/BL,EAASO,EAAK,QAAQ,MAErB,CACD,GAAIF,EAAG,MAAM,OAAS,GAAKA,EAAG,QAAUC,EAAM,MAC1C,OAAAP,EAAYQ,EAAK,QAAQ,EAClBC,EAAQhB,CAAC,EAGhBQ,EAASO,EAAK,QAAQ,CAE9B,CACJ,CACA,GAAIH,EAASD,EAAM,aAAa,EAAG,CAC/B,IAAIM,EAAM,EAKV,GAJArB,EAAQe,EAAK,iBAAiB,UAAU,EAAG,SAAUd,EAAI,CACrD,IAAIqB,EAAMrB,EAAG,MACTqB,GAAOd,GAAMc,CAAG,GAAKA,EAAM,IAAGD,GAAO,SAASC,CAAG,EACzD,CAAC,EACGD,IAAQ,EACR,OAAAvB,GAAgBiB,EAAK,cAAc,WAAW,CAAC,EACxCK,EAAQhB,CAAC,CAExB,CAEA,OAAAmB,EAAMC,GAAaT,EAAK,aAAa,aAAa,EAAG,OAAW,IAAI,SAASA,CAAI,EAAGA,CAAI,EACjFK,EAAQhB,CAAC,CACpB,CAAC,EACDqB,GAAWZ,EAAO,UAAU,EAG5BA,EAAQ,SAAS,iBAAiB,iCAAiC,EACnEC,EAAUD,EAAO,SAAU,SAAUT,EAAG,CACpC,IAAIW,EAAOX,EAAE,OAAO,QAAQ,MAAM,EAClCsB,GAAcX,EAAK,iBAAiB,SAAS,EAAG,QAAQ,EAExD,IAAIY,EAAM,CAAC,EACX,OAAA3B,EAAQe,EAAK,iBAAiB,qDAAqD,EAAG,SAAUa,EAAQ,CACpGD,EAAIC,EAAO,aAAa,MAAM,CAAC,EAAKA,EAAO,aAAa,WAAW,IAAM,MAAQ,SAASA,EAAO,KAAK,EAAIA,EAAO,KACrH,CAAC,EAEDC,EAAMd,EAAK,aAAa,aAAa,EAAG,SAAUe,EAAM,CACpD,GAAIA,EAAM,CACN,IAAIC,EAAehB,EAAK,cAAc,wBAA0Be,EAAK,OAAS,IAAI,EAC9EC,GAAcnB,EAASmB,EAAc,QAAQ,CACrD,KACK,CACD,IAAIA,EAAehB,EAAK,cAAc,0BAA0B,EAC5DgB,GAAcnB,EAASmB,EAAc,QAAQ,CACrD,CACJ,EAAGJ,EAAK,EAAK,EAENP,EAAQhB,CAAC,CACpB,CAAC,EACDqB,GAAWZ,EAAO,UAAU,CAChC,CACC,SAASmB,GAAYC,EAAU,CAC5B,IAAIC,EAAO,IAAI,MACfA,EAAK,IAAM,kHACXA,EAAK,OAASA,EAAK,QAAU,UAAY,CACrCD,EAASC,EAAK,SAAW,CAAC,CAC9B,CACJ,CAEA,yBAAyB,IAAM,CAC3BF,GAAY,SAAUG,EAAS,CAC3B,IAAIC,EAAmB,CAAC,IAAK,IAAK,IAAI,EACtCpC,EAAQ,gBAAiB,SAAUqC,EAAK,CArxDhD,IAAAC,EAsxDY,GAAItB,EAASqB,EAAK,MAAM,EAAG,OAC3B,GAAI,CAACE,GAAUF,CAAG,EAAG,CACjBzB,EAASyB,EAAK,MAAM,EACpB,MACJ,CACA,IAAIG,EAAOH,EAAI,QAAQ,SAAS,EAAI,MAAQ,OACxCI,GAAMH,EAAAD,EAAI,aAAa,UAAU,IAA3B,YAAAC,EAA8B,cACpCI,EAAQD,EAAI,QAAQ,MAAM,EAAI,EAC9BE,EAASN,EAAI,aACbO,EAAQP,EAAI,YACZQ,EAAKR,EAAI,aAAa,SAAS,EAC/BQ,GAAMD,EAAQC,IAAID,EAAQC,GAC9B,IAAIC,EAAiB,GACjB9B,EAASqB,EAAK,eAAe,IACzBQ,IACAR,EAAI,MAAM,SAAWQ,EAAK,KACtBA,EAAKD,IACLA,EAAQC,EACRC,EAAiB,KAGrBT,EAAI,aAAa,aAAa,EAC9BM,EAASC,EAAQP,EAAI,aAAa,aAAa,EAG/CM,EAAS,IAGb3B,EAASqB,EAAK,cAAc,IAC5BM,EAASN,EAAI,WAAW,aACxBO,EAAQ,IAEZ,IAAIG,EAAKV,EAAI,cACb,GAAIO,GAAS,EACT,KAAOG,IACHH,EAAQG,EAAG,YACP,EAAAH,EAAQ,KAIRG,EAAKA,EAAG,cAKpB,GAAID,GAAkBF,GAASR,EAAiB,QAAQQ,CAAK,EAAI,EAAG,CAChE,IAAII,EAAW,GACXJ,EAAQ,KACRI,EAAW,IAENJ,EAAQ,IACbI,EAAW,IAENJ,EAAQ,MACbI,EAAW,IAEf,IAAIC,EAAe,KAAK,KAAKL,EAAQI,CAAQ,EAAIA,EAC7CE,EAAgBP,GAAS,KAAK,MAAMA,EAASC,EAAQK,CAAY,EACrEL,EAAQK,EACRN,EAASO,CACb,CAEKH,IAAOV,EAAI,eAAkBU,EAAG,UAAY,OAASA,EAAG,QAAQ,SAAS,IAAGJ,EAAS,GAEtFF,EAAI,QAAQ,MAAM,EAAI,IACtBA,EAAMA,EAAI,MAAM,GAAG,EAAE,CAAC,EAAI,qBAAuBD,EAAO,WAAaI,GAAS,EAAI,GAAKA,GAAS,YAAcD,GAAU,EAAI,GAAKA,IAAWN,EAAI,aAAa,aAAa,EAAI,QAAUA,EAAI,aAAa,aAAa,EAAI,KAAOF,GAAW,CAACO,EAAQ,eAAiB,KAAO1B,EAASqB,EAAK,SAAS,EAAI,mBAAqB,KAEjUA,EAAI,iBAAiB,OAAQ,SAAUjC,EAAG,CACtC,IAAI+C,EAAS/C,EAAE,OAAO,WAClB+C,IACA,WAAW,UAAY,CAAEvC,EAASuC,EAAQ,KAAK,CAAG,EAAG,GAAG,EACpDA,EAAO,UAAU,SAAS,KAAK,GAAGvC,EAASuC,EAAQ,YAAY,GAEvEd,EAAI,gBAAgB,UAAU,EAC9BzB,EAASyB,EAAK,YAAY,CAC9B,CAAC,EACDA,EAAI,aAAa,UAAW,MAAM,EAClCA,EAAI,aAAa,MAAOI,CAAG,EACvBzB,EAASqB,EAAI,WAAY,SAAS,GAClCA,EAAI,WAAW,aAAa,UAAW,OAASA,EAAI,aAAa,UAAU,EAAI,GAAG,CAE1F,CAAC,CACL,CAAC,CACL,CAAC,EAQA,IAAIe,GAAY,GACbC,GAAiB,GAEjBC,GAAS,8IACTC,GAAa,+BAUjB,OAAO,iBAAiB,SAAU,UAAY,CAC1CC,GAAa,CACjB,CAAC,EAED,SAASA,IAAe,CACpBC,EAAQ,SAAS,iBAAiB,UAAU,EAAG,SAAUC,EAAI,CACzD,IAAIC,EAAMD,EAAG,aAAa,UAAU,EAC/BC,IAAKA,EAAM,MAEhB,IAAIC,EAAK,KAAK,IAAI,SAAS,gBAAgB,YAAa,OAAO,YAAc,CAAC,EAC1EA,EAAK,KAAIA,EAAKA,EAAK,IACvB,IAAIC,EAAQD,EAAKD,EAAMC,EAAKD,EAAM,EAClCD,EAAG,aAAa,QAAS,aAAeG,EAAQ,iBAAmBF,EAAM,IAAI,EACzEC,EAAKD,EACLG,EAASJ,EAAI,QAAQ,EAGrBK,EAAYL,EAAI,QAAQ,CAEhC,CAAC,CACL,CAEA,yBAAyB,IAAM,CAI3B,GAHAF,GAAa,EAEH,SAAS,cAAc,MAAM,EAC9B,CACL,IAAIQ,EAAO,SAAS,qBAAqB,QAAQ,EAC7CC,EAAS,SAAS,cAAc,QAAQ,EAC5CA,EAAO,IAAM,mHACbD,EAAKA,EAAK,OAAS,CAAC,EAAE,WAAW,aAAaC,EAAQD,EAAKA,EAAK,OAAS,CAAC,CAAC,CAC/E,CAEAP,EAAQ,MAAO,SAAUC,EAAI,CACzBI,EAASJ,EAAG,WAAY,OAAO,CACnC,CAAC,EAEDD,EAAQ,UAAW,SAAUC,EAAI,CAC7BQ,GAAeR,CAAE,CACrB,CAAC,EAED,IAAIS,EAAY,SAAS,cAAc,UAAU,EACjD,GAAIA,EAAW,CACX,IAAIC,EAAM,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EACrDC,EAAY,SAAS,cAAc,uBAAuB,EAC1DA,IAAWD,EAAMC,EAAU,aAAa,MAAM,GAElD,IAAIC,EAAKH,EAAU,cAAc,KAAK,EAClCG,GAAIA,EAAG,aAAa,OAAQ,mDAAqD,mBAAmBF,CAAG,CAAC,EAC5GE,EAAKH,EAAU,cAAc,KAAK,EAC9BG,GAAIA,EAAG,aAAa,OAAQ,gDAAkD,mBAAmBF,CAAG,CAAC,CAC7G,CAEAX,EAAQ,gBAAiB,SAAUC,EAAI,CACnC,IAAIU,EAAMG,GAAO,YAAcb,EAAG,aAAa,WAAW,CAAC,EACvDc,EAAM,mBAAmBJ,EAAI,UAAUA,EAAI,QAAQ,GAAG,EAAI,EAAGA,EAAI,QAAQ,GAAG,EAAI,CAAC,CAAC,EACtFV,EAAG,UAAYc,CACnB,CAAC,EAED,IAAIC,EAAO,SAAS,cAAc,eAAe,EACjDhB,EAAQ,WAAY,SAAUC,EAAI,CAC9B,GAAI,CAACgB,EAAShB,EAAI,QAAQ,GAAKA,IAAOA,EAAG,WAAW,SAAS,CAAC,EAAG,CAC7D,IAAIiB,EAAK,SAAS,cAAc,IAAI,EACpCb,EAASa,EAAI,OAAO,EACpBA,EAAG,UAAYjB,EAAG,UAClBK,EAAYY,EAAG,cAAc,GAAG,EAAG,QAAQ,EAC3CF,GAAA,MAAAA,EAAM,QAAQE,EAClB,CACJ,CAAC,EAEDC,EAAU,WAAY,QAAS,SAAUC,EAAG,CACxCC,GAAOD,CAAC,CACZ,CAAC,EAEDE,EAAS,WAAY,QAAS,SAAUF,EAAG,CACvCA,EAAE,gBAAgB,CACtB,CAAC,EAEDE,EAAS,UAAW,QAAS,SAAUF,EAAG,CACtC,OAAAG,GAAY,WAAY,YAAY,EACpC,SAAS,eAAe,cAAc,EAAE,QAAU,CAAC,SAAS,eAAe,cAAc,EAAE,QACpFC,EAAQJ,CAAC,CACpB,CAAC,EAEDE,EAAS,WAAY,QAAS,SAAUF,EAAG,CACvC,OAAAG,GAAYH,EAAE,OAAQ,KAAK,EACpBI,EAAQJ,CAAC,CACpB,CAAC,EAEDD,EAAU,+BAAgC,QAAS,SAAUC,EAAG,CAC5D,GAAIH,EAASG,EAAE,OAAQ,MAAM,EACzBK,GAAS,MAER,CACD,IAAIT,EAAO,SAAS,cAAc,UAAU,EAC5C,OAAAV,EAAYU,EAAM,YAAY,EAC9B,SAAS,eAAe,cAAc,EAAE,QAAU,GAE3CU,GAASN,EAAE,OAAQA,CAAC,CAC/B,CACA,OAAOI,EAAQJ,CAAC,CACpB,CAAC,EAEDE,EAAS,YAAa,QAAS,SAAUF,EAAG,CACxCA,EAAE,gBAAgB,CACtB,CAAC,EAEDE,EAAS,OAAQ,QAAS,SAAUF,EAAG,CACnC,IAAIO,EAAI,SAAS,cAAc,UAAU,EACrCA,GAAGrB,EAAYqB,EAAG,KAAK,EAC3BF,GAAS,CACb,CAAC,EAEDzB,EAAQ,UAAW,SAAUC,EAAI,CACzBA,EAAG,aAAe,IAClBI,EAASJ,EAAI,SAAS,EAGtBK,EAAYL,EAAI,OAAO,CAE/B,CAAC,EAEDqB,EAAS,UAAW,QAAS,SAAUF,EAAG,CACtCd,EAAYc,EAAE,OAAQ,SAAS,EAC/BI,EAAQJ,CAAC,CACb,CAAC,EAGD,IAAIQ,EAAM,SAAS,cAAc,SAAS,EAC1C,GAAIA,EAAK,CAEL,IAAIC,EAAS,MADDD,EAAI,QAAQ,GAEpBE,EAAQ,IAAI,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,EAC7CC,EAAY,aAAa,QAAQF,CAAM,EAC3C,GAAI,CAACE,GAAaA,GAAaD,EAAO,CAClC,aAAa,QAAQD,EAAQC,CAAK,EAClC,MAAME,EAAS,SAAS,eAAe,aAAa,EACpD,SAAS,KAAK,UAAU,IAAI,UAAU,EACtCA,EAAO,iBAAiB,QAAUZ,GAAM,CACpC,SAAS,KAAK,UAAU,OAAO,UAAU,CAC7C,CAAC,EACDY,EAAO,cAAc,MAAM,EAAE,mBAAmB,YAAaJ,EAAI,SAAS,EAE1E,IAAIK,EAAQL,EAAI,QAAQ,MACpBK,EACA,WAAW,UAAY,CAAED,EAAO,UAAU,CAAG,EAAGC,EAAQ,GAAI,EAG5DD,EAAO,UAAU,CAEzB,CACJ,CAGI,OAAO,QAAU,QAAa,OAAO,QAAU,KAC/C,OAAO,UAAY,OAAO,WAAa,CAAC,EAExCE,GAAK,UAAW,UAAW,CACvB,WAAY,SACZ,kBAAmB,SACnB,gBAAiB,GACrB,CAAC,EACDA,GAAK,MAAO,qBAAsB,EAAI,EAErC,SAAUC,EAAGC,EAAGT,EAAGU,EAAGC,EAAG,CAAEH,EAAEE,CAAC,EAAIF,EAAEE,CAAC,GAAK,CAAC,EAAGF,EAAEE,CAAC,EAAE,KAAK,CAAE,YAAa,IAAI,KAAK,EAAE,QAAQ,EAAG,MAAO,QAAS,CAAC,EAAG,IAAIE,EAAIH,EAAE,qBAAqBT,CAAC,EAAE,CAAC,EAAGa,EAAIJ,EAAE,cAAcT,CAAC,EAAGc,EAAKJ,IAAM,YAAc,MAAQA,EAAI,GAAIG,EAAE,MAAQ,GAAMA,EAAE,IAAM,wCAA0CF,EAAIG,EAAIF,EAAE,WAAW,aAAaC,EAAGD,CAAC,CAAG,EAAG,OAAQ,SAAU,SAAU,YAAa,KAAK,EAE7X,CAAC,EAED,SAAS9B,GAAeiC,EAAQ,CAC5B,IAAIC,EAAQD,EAAO,QAAQ,IAAI,EAAE,iBAAiB,OAAO,EACrDE,EAAQ,CAAC,EACTC,EAAS,CAAC,EACd7C,EAAQ2C,EAAO,SAAUG,EAAM,CAC3B,IAAIC,EAAYD,EAAK,aAAa,YAAY,EAC1CE,EAAaF,EAAK,aAAa,aAAa,EAC5CnB,EAAI,GACJsB,EAAa,GACbF,GACA/C,EAAQ+C,EAAU,MAAM,GAAG,EAAG,SAAUG,EAAG,CACnCN,EAAM,QAAQM,CAAC,EAAI,GAAGN,EAAM,KAAKM,CAAC,EAClCC,EAAa,KAAKD,CAAC,EACnBvB,GAAKuB,EAAI,MAGTD,EAAa,GACbtB,GAAMA,EAAI,KAAOuB,EAAIA,EAE7B,CAAC,EAEDvB,IAAGA,GAAKsB,EAAa,eAAiB,IAAMtB,EAAK,SACrD,IAAIyB,EAAK,GAOT,GANIJ,GACAhD,EAAQgD,EAAW,MAAM,GAAG,EAAG,SAAUE,EAAG,CACpCL,EAAO,QAAQK,CAAC,EAAI,GAAGL,EAAO,KAAKK,CAAC,EACxCE,GAAOA,EAAK,KAAOF,EAAIA,CAC3B,CAAC,EAEAvB,EAAIyB,EAAK,CACV,IAAIC,EAAMP,EAAK,cAAc,gBAAgB,EACzCO,GAAKA,EAAI,mBAAmB,YAAa,oBAAsB1B,EAAIyB,EAAK,MAAM,CACtF,CACJ,CAAC,EACD,IAAIH,EAAa,GAMjB,GALAjD,EAAQ4C,EAAO,SAAUU,EAAM,CACtBH,EAAa,KAAKG,CAAI,IACvBL,EAAa,GAErB,CAAC,EACGA,EAAY,CACZ,QAASX,EAAI,EAAGA,EAAIM,EAAM,OAAQN,IAC9BM,EAAMN,CAAC,EAAI,SAASM,EAAMN,CAAC,CAAC,EAEhCM,EAAM,KAAK,SAAUW,EAAGC,EAAG,CACvB,OAAOD,EAAIC,CACf,CAAC,CACL,MAEIZ,EAAM,KAAK,EAEfC,EAAO,KAAK,EACZ,IAAIY,EAAef,EAAO,cAAc,mBAAmB,EACvDgB,EAAgBhB,EAAO,cAAc,oBAAoB,EACzDf,EAAI8B,EAAa,UACrBzD,EAAQ4C,EAAO,SAAUU,EAAM,CAC3B3B,GAAK,kBAAoB2B,EAAO,MAAQL,EAAaK,EAAO,WAAaA,GAAO,WACpF,CAAC,EACDG,EAAa,UAAY9B,EAEzBA,EAAI+B,EAAc,UAClB1D,EAAQ6C,EAAQ,SAAUc,EAAO,CAC7BhC,GAAK,kBAAoBgC,EAAQ,KAAOA,EAAQ,WACpD,CAAC,EACDD,EAAc,UAAY/B,EAC1BR,EAAUuB,EAAO,iBAAiB,QAAQ,EAAG,SAAU,SAAUtB,EAAG,CAChEwC,GAAiBlB,CAAM,CAC3B,CAAC,CACL,CAEA,SAASkB,GAAiBlB,EAAQ,CAC9B,IAAIe,EAAef,EAAO,cAAc,mBAAmB,EACvDgB,EAAgBhB,EAAO,cAAc,oBAAoB,EACzDY,EAAOG,EAAa,MACpBE,EAAQD,EAAc,MACtBG,EAAYnB,EAAO,QAAQ,IAAI,EAC/BmB,EAAU,cAAc,OAAO,IAAGA,EAAYA,EAAU,cAAc,OAAO,EAAE,QAAQ,KAAK,GAChG,IAAIlB,EAAQkB,EAAU,iBAAiB,OAAO,EAC1CC,EAAQ,GACZ9D,EAAQ2C,EAAO,SAAUG,EAAM,CAC3B,IAAIiB,EAAWjB,EAAK,aAAa,YAAY,EACzCkB,EAAYlB,EAAK,aAAa,aAAa,EAC3CmB,EAAO,GACPX,IAAS,CAACS,IAAa,IAAMA,EAAW,KAAK,QAAQ,IAAMT,EAAO,GAAG,EAAI,KACzEW,EAAO,IAEPN,IAAU,CAACK,IAAc,IAAMA,EAAY,KAAK,QAAQ,IAAML,EAAQ,GAAG,EAAI,KAC7EM,EAAO,IAEPA,EACA5D,EAASyC,EAAM,QAAQ,GAGvBgB,EAAQ,GACRxD,EAAYwC,EAAM,QAAQ,EAElC,CAAC,EACGgB,EACAzD,EAASwD,EAAW,OAAO,EAG3BvD,EAAYuD,EAAW,OAAO,CAEtC,CAEA,SAAS3B,IAAO,CACZ,UAAU,KAAK,SAAS,CAC5B,CAEA,SAASb,GAAO,EAAG,CACfG,EAAQ,CAAC,EACT,IAAIH,EAAS,EAAE,OACXJ,EAASI,EAAQ,KAAK,EACtBf,EAAYe,EAAQ,KAAK,EAGzBhB,EAASgB,EAAQ,KAAK,CAE9B,CAEA,SAASI,IAAW,CAChB,IAAIT,EAAO,SAAS,cAAc,UAAU,EACxCA,IACAX,EAASW,EAAM,QAAQ,EACvBV,EAAYU,EAAM,YAAY,EAC9B,SAAS,eAAe,cAAc,EAAE,QAAU,GAElDhB,EAAQ,+BAAgC,SAAUC,EAAI,CAClDK,EAAYL,EAAI,MAAM,CAC1B,CAAC,EAET,CAEA,SAASyB,GAASzB,EAAImB,EAAG,CACrBpB,EAAQ,+BAAgC,SAAUC,EAAI,CAClDK,EAAYL,EAAI,MAAM,CAC1B,CAAC,EACDI,EAASJ,EAAI,MAAM,EAEnB,IAAIiE,EAAOjE,EAAG,aAAa,MAAM,EAC7BkE,EAAO,GAUX,GATAnE,EAAQ,sBAAuB,SAAUoE,EAAK,CACtCA,EAAI,aAAa,MAAM,IAAMF,GACxBC,IAAMA,EAAOlD,EAASmD,EAAK,MAAM,GACtC9D,EAAY8D,EAAI,WAAY,QAAQ,GAGpC/D,EAAS+D,EAAI,WAAY,QAAQ,CAEzC,CAAC,EACG,CAAAD,IAEJ7D,EAAY,SAAS,cAAc,UAAU,EAAG,QAAQ,EAEpDc,GAAG,OAAOI,EAAQJ,CAAC,CAC3B,CACC,IAAIiD,GACDC,GACAC,GACAC,GACAC,GAAS,IACTC,GAAS,GACTC,GAAS,IAGb,IAAIC,GAAa,IACbC,GAAa,KACbC,GAAa,KAGjB,IAAIC,GAAc,EACdC,GAAmB,EAEvB,SAASC,EAAaC,EAAQC,EAAKC,EAAM,CACrC,KAAK,OAASF,EACd,KAAK,KAAOE,EACZ,KAAK,OAAOD,CAAG,CACnB,CAEA,OAAO,QAAU,UAAmB,CAChCF,EAAa,UAAY,IAAI,OAAO,KAAK,YAEzCA,EAAa,UAAU,KAAO,UAAY,CAEtC,IAAII,EAAO,KAEPC,EAAM,KAAK,IAEf,GAAI,CAACA,EAAK,CAENA,EAAM,KAAK,IAAM,SAAS,cAAc,KAAK,EAE7CA,EAAI,UAAY,SAEhBA,EAAI,QAAQ,SAAWD,EAAK,KAAK,SAC7BA,EAAK,KAAK,IAAGC,EAAI,QAAQ,EAAID,EAAK,KAAK,GACvCA,EAAK,KAAK,IAAGC,EAAI,QAAQ,EAAID,EAAK,KAAK,GACvCA,EAAK,KAAK,KAAIC,EAAI,QAAQ,GAAKD,EAAK,KAAK,IACzCA,EAAK,KAAK,OAAMC,EAAI,QAAQ,KAAOD,EAAK,KAAK,MAC7CA,EAAK,KAAK,KAAIC,EAAI,QAAQ,GAAKD,EAAK,KAAK,IAE7C,OAAO,KAAK,MAAM,eAAeC,EAAK,QAAS,SAAUC,EAAG,CACxD,IAAIC,EAAKD,EAAE,OACXE,EAASD,EAAI,QAAQ,EACrB,IAAIE,EAAO,SAAS,cAAc,MAAM,EACpCC,EAAW,SAAS,cAAc,UAAU,EAC5CC,EAAKC,GAAUL,CAAE,EACjBM,EAAKD,GAAUH,CAAI,EAEvBI,EAAG,MAAQC,GAASL,CAAI,EAAII,EAAG,KAC/BA,EAAG,OAASE,GAAUN,CAAI,EAAII,EAAG,IACjC,IAAIG,EAAO,EACPC,EAAO,EAOX,GANIN,EAAG,KAAOE,EAAG,KAAOK,KAAQF,EAAQH,EAAG,KAAOK,GAAUP,EAAG,MAC3DA,EAAG,KAAOE,EAAG,MAAQM,KAAQH,EAAQH,EAAG,MAAQM,GAAUR,EAAG,MAC7DA,EAAG,IAAME,EAAG,IAAMO,KAAQH,EAAQJ,EAAG,IAAMO,GAAUT,EAAG,KAE5DT,GAAI,MAAM,CAACc,EAAM,CAACC,CAAI,EAElBI,GAAc,CACd,IAAIC,EAAMb,EAAK,cAAc,sBAAwBY,GAAe,IAAI,EACxEE,EAAYD,EAAK,QAAQ,EACzBA,EAAI,UAAY,EACpB,CACAD,GAAed,EAAG,aAAa,eAAe,EAE9C,IAAIiB,EAAOC,GAAQJ,EAAY,EAC/B,IAAIK,EAAO,wBACX,QAASC,EAAI,EAAGA,EAAIC,GAAc,OAAQD,IACtCD,GAAQ,WAAaE,GAAcD,CAAC,EAAI,YAAcE,GAAQL,EAAK,EAAEG,CAAC,CAAC,EAAI,aAE/ED,GAAQ,WACRnB,EAAG,UAAY,iCAAmCiB,EAAK,EAAI,QAAUE,EAAO,4CAA8C,cAAgB,uBAAyBF,EAAK,EAAI,6DAE/JjB,EAAG,cAAc,QAAQ,EAC/B,iBAAiB,QAAS,SAAUD,EAAG,CAC1C,OAAO,KAAKA,EAAE,OAAO,IAAI,EACzBwB,EAAQxB,CAAC,CACb,CAAC,EAkCDC,EAAG,cAAc,KAAK,EAAE,iBAAiB,QAAS,SAAUD,EAAG,CAC3DwB,EAAQxB,CAAC,CACb,CAAC,EACDC,EAAG,cAAc,QAAQ,EAAE,iBAAiB,QAAS,SAAUD,EAAG,CAC9D,OAAAA,EAAE,OAAO,QAAQ,SAAS,EAAE,UAAY,GACxCwB,EAAQxB,CAAC,EACF,EACX,CAAC,CACL,CAAC,EAED,IAAIyB,EAAQ,KAAK,SAAS,EAC1BA,EAAM,aAAa,YAAY1B,CAAG,CACtC,CAEA,IAAI2B,EAAQ,KAAK,cAAc,EAAE,qBAAqB,KAAK,MAAM,EAE7DA,IACA3B,EAAI,MAAM,KAAO2B,EAAM,EAAI,GAAK,KAChC3B,EAAI,MAAM,IAAM2B,EAAM,EAAI,GAAK,KAEvC,EAEAhC,EAAa,UAAU,OAAS,UAAY,CACpC,KAAK,MACL,KAAK,IAAI,WAAW,YAAY,KAAK,GAAG,EACxC,KAAK,IAAM,KAEnB,EAEAA,EAAa,UAAU,YAAc,UAAY,CAC7C,OAAO,KAAK,MAChB,EAEA,IAAIiC,EAAU,IAAI,eAClBA,EAAQ,KAAK,MAAO,UAAY,YAAc,cAAe,EAAI,EAEjEA,EAAQ,OAAS,UAAY,CACzB,GAAIA,EAAQ,QAAU,KAAOA,EAAQ,OAAS,IAAK,CAC/C,IAAIC,EAAO,KAAK,MAAMD,EAAQ,YAAY,EACtCE,EAAa,CACb,KAAM,OAAO,WAAaC,GAAatC,GAAcC,GACrD,OAAQ,IAAI,OAAO,KAAK,OAAOsC,GAAYC,EAAU,EACrD,iBAAkB,GAClB,OAAQC,EACZ,EAEArC,GAAM,IAAI,OAAO,KAAK,IAAI,SAAS,eAAe,KAAK,EAAGiC,CAAU,EAMpEV,GAAUS,EAAK,MACfN,GAAgBM,EAAK,GAErB,QAASP,EAAI,EAAGA,EAAIO,EAAK,MAAM,OAAQP,IAAK,CACxC,IAAIH,EAAOU,EAAK,MAAMP,CAAC,EACnBa,EAAO,EAEX,QAAU,IAAIxC,EACV,IAAI,OAAO,KAAK,OAAOwB,EAAK,EAAGA,EAAK,CAAC,EACrCtB,GACA,CACI,SAAUyB,EACV,EAAGH,EAAK,EACR,EAAGA,EAAK,EACR,GAAIA,EAAK,GACT,GAAIA,EAAK,EAAI,IAAMA,EAAK,CAC5B,CACJ,CACJ,CACJ,MACI,QAAQ,IAAI,wBAAwB,CAE5C,EAEAS,EAAQ,QAAU,UAAY,CAC1B,QAAQ,IAAI,gCAAgC,CAChD,EAEAA,EAAQ,KAAK,CACjB,EAEA,IAAIM,GAAY,CACZ,CACI,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,qBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,iBACf,YAAe,WACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,iBACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,6BACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,6BACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,6BACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,8BACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,oBACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,MACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,MACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,MACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,WACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,WACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,OACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,gBACf,QAAW,CACP,CAEA,CACJ,CACJ,EACA,CACI,YAAe,gBACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,iCACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,iCACf,YAAe,kBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,aACf,QAAW,CACP,CAEA,CACJ,CACJ,EACA,CACI,YAAe,aACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,UACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,eACf,YAAe,qBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,kBACf,YAAe,WACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,QACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,EACA,CACI,YAAe,QACf,YAAe,cACf,QAAW,CACP,CACI,WAAc,KAClB,CACJ,CACJ,EACA,CACI,YAAe,QACf,YAAe,mBACf,QAAW,CACP,CACI,MAAS,SACb,CACJ,CACJ,CACJ,EACKE,GAAS,8RAEd,yBAAyB,IAAM,CAC3B,IAAIC,EAAI,SAAS,GAAG,EACpB,GAAIA,GAAKA,IAAM,GAAI,CACf,IAAIC,EAAe,SAAS,eAAe,cAAc,EACrDA,IACAC,EAAS,wBAAyB,QAAS,UAAY,CACnDC,GAAkB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", "names": ["savedTimes", "briefTimer", "addBrief", "msg", "data", "large", "confetti", "brief", "body", "e", "stopAll", "addClass", "removeClass", "content", "addOverlayMessage", "extra", "overlay", "hideMessageOverlay", "handleResponse", "url", "result", "callback", "postdata", "source", "eventExtra", "isFetch", "u", "goal", "postdataLength", "parseTimeStampCookie", "showApiError", "div", "showApiMessages", "forEach", "el", "scrollToElement", "submit", "name", "results", "handleError", "error", "customLog", "genericError", "httpr", "_a", "savedTimes", "fetchAvailable", "aft", "afToken", "method", "responseUrl", "headers", "response", "request", "ex", "scrollToElement", "el", "p", "isInt", "value", "cssVar", "v", "_log", "s", "alwaysShow", "text", "enableLog", "enableLogDebug", "forEach", "arr", "callback", "hasClass", "addClass", "removeClass", "el", "className", "iel", "addEvent", "path", "event", "func", "addEvents", "toggleClass", "addClasses", "els", "removeClasses", "el", "addEvents", "a", "href", "stopAll", "forEach", "iel", "e", "form", "target", "toggle", "element", "removeClass", "inp", "addClass", "isVisible", "elem", "isValidEmail", "email", "first", "arr", "value", "key", "ci", "i", "getWidth", "el", "getHeight", "getOffset", "rect", "parseTimeStampCookie", "u", "timeStamps", "getCookie", "parsed", "lc", "forEach", "ts", "exi", "customLog", "ex", "name", "v", "location", "document", "scriptEl", "endpoint", "defaultEndpoint", "hasDomainLanguage", "onIgnoredEvent", "reason", "options", "el", "trigger", "eventName", "payload", "href", "referrer", "language", "propAttributes", "props", "attribute", "propKey", "propValue", "url", "data", "callback", "error", "xhr", "queue", "i", "lastPage", "page", "his", "originalPushState", "handleVisibilityChange", "getLinkEl", "link", "isLink", "element", "shouldFollowLink", "event", "targetsCurrentWindow", "isRegularClick", "MIDDLE_MOUSE_BUTTON", "handleLinkClickEvent", "hrefWithoutQuery", "isElementOrParentTagged", "isOutboundLink", "sendLinkClickEvent", "isDownloadToTrack", "eventAttrs", "followedLink", "followLink", "defaultFileTypes", "fileTypesAttr", "addFileTypesAttr", "fileTypesToTrack", "fileType", "fileTypeToTrack", "getTaggedEventAttributes", "htmlElement", "taggedElement", "isTagged", "classList", "className", "matchList", "key", "value", "handleTaggedFormSubmitEvent", "form", "formSubmitted", "submitForm", "isForm", "PARENTS_TO_SEARCH_LIMIT", "handleTaggedElementClickEvent", "clicked", "clickedLink", "parentsChecked", "allSVGs", "campaignDropdowns", "toAPI", "count", "c", "addEvent", "e", "post", "table", "stopAll", "text", "campaign", "campaignId", "httpr", "drawData", "drawDataCampaignId", "drawForm", "removeClass", "regions", "municipalities", "schools", "potentialCount", "sumSeatDays", "_log", "addOverlayMessage", "createOptions", "download", "filename", "type", "file", "a", "region", "municipality", "school", "potentials", "sumV4", "r", "rnd", "winningSD", "winner", "wg", "date", "message", "s", "apiData", "unsavedChanges", "validInteger", "validNumber", "genericError", "action", "showProfile", "showApiError", "internal", "extra", "showApiMessages", "messages", "msg", "participantName", "drawGroups", "invite", "emailText", "sourceEmails", "emails", "validationMessages", "email", "isValidEmail", "addBrief", "noCampaign", "updateInputVisibility", "vcs", "inputs", "level", "field", "vcName", "vc", "first", "addClass", "drawLevelDropdown", "selectedLevel", "profile", "singleSchool", "lastId", "group", "drawGroup", "newGroup", "addEvents", "toggle", "saveForm", "validationResult", "validateGroup", "parentEl", "schoolName", "toggleTag", "buttonText", "values", "headingText", "val", "cls", "maxLength", "pattern", "parts", "lbl", "o", "toComma", "schoolElement", "g", "students", "input", "n", "pretty", "toPoint", "postData", "noAuth", "abcSurface", "customLog", "level", "args", "err", "a", "i", "error", "printError", "errors", "html", "isElement", "o", "elements", "invalidListener", "scrollToElement", "prefillEmail", "forEach", "el", "field", "initForms", "e", "v", "p", "pr", "isInt", "toComma", "toPoint", "removeClass", "addClass", "forms", "addEvents", "form", "hasClass", "pw", "newpw", "pwe", "stopAll", "sum", "val", "httpr", "abcSurface", "addClasses", "removeClasses", "dto", "formEl", "toAPI", "data", "activeResult", "webPsupport", "callback", "webP", "hasWebP", "skipSteppingSize", "img", "_a", "isVisible", "mode", "src", "isPNG", "height", "width", "uw", "allowSizeSteps", "pe", "stepSize", "steppedWidth", "steppedHeight", "parent", "enableLog", "enableLogDebug", "cseUrl", "abcSurface", "setDataScale", "forEach", "el", "max", "vw", "scale", "addClass", "removeClass", "refs", "script", "pageListFilter", "someshare", "url", "canonical", "sh", "cssVar", "svg", "mega", "hasClass", "li", "addEvents", "e", "toggle", "addEvent", "toggleClass", "stopAll", "hideMenu", "showMenu", "s", "pop", "popKey", "today", "lastShown", "dialog", "delay", "gtag", "w", "d", "l", "i", "f", "j", "dl", "filter", "pages", "types", "topics", "page", "dataTypes", "dataTopics", "allNumbers", "t", "validInteger", "s2", "div", "type", "a", "b", "typeDropdown", "topicDropdown", "topic", "updatePageFilter", "container", "empty", "pageType", "pageTopic", "hide", "href", "solo", "elx", "mapData", "valueHeadings", "map", "lastMarkerId", "extraR", "extraL", "extraT", "smallWidth", "centerMapX", "centerMapY", "defaultZoom", "defaultZoomSmall", "CustomMarker", "latlng", "map", "args", "self", "div", "e", "el", "addClass", "$map", "$mapinfo", "to", "getOffset", "mo", "getWidth", "getHeight", "panX", "panY", "extraL", "extraR", "extraT", "lastMarkerId", "$lm", "removeClass", "item", "mapData", "text", "i", "valueHeadings", "toComma", "stopAll", "panes", "point", "request", "data", "mapOptions", "smallWidth", "centerMapX", "centerMapY", "mapStyles", "size", "cseUrl", "q", "searchResult", "addEvent", "showSearchResults", "forEach", "start", "httpr", "showItems", "moreResults", "html", "tableData", "statsKey", "initStats", "sf", "id", "httpr", "data", "apiData", "addOverlayMessage", "genericError", "tableData", "i", "dict", "key", "ids", "forEach", "show", "by", "filter", "sort", "showEl", "byEl", "sortEl", "e", "showStatsTable", "v", "removeClass", "setFilterData", "addClass", "sendEvent", "stopAll", "sendEvent", "el", "e", "event", "setFilterData", "by", "show", "dl", "s", "dict", "apiData", "statsKey", "key", "sortByColumn", "a", "index", "order", "sortFunction", "b", "c", "d", "showStatsTable", "all", "rs", "show", "by", "filter", "tableData", "sort", "loc", "i", "hash", "useHash", "ids", "dict", "apiData", "statsKey", "key", "v", "forEach", "id", "g", "r", "items", "sortByColumn", "max", "table", "s", "linkName", "itag", "name", "j", "toComma", "statinfo", "ths", "el", "a", "e", "o", "sendEvent", "stopAll", "addClass", "removeClass", "addEvents", "ds", "sw", "showAll", "addBrief", "count", "l"] }