{"version":3,"file":"main-DOKkx9dW.js","sources":["../../node_modules/picturefill/dist/picturefill.js","../../node_modules/object-fit-images/dist/ofi.common-js.js","../../src/_js/app/config.js","../../src/_js/app/masthead.js","../../src/_js/app/megamenu.js","../../src/_js/app/cookie.js","../../src/_js/app/accordeon.js","../../src/_js/app/maps.js","../../src/_js/app/alert.js","../../src/_js/app/forms.js","../../node_modules/ev-emitter/ev-emitter.js","../../node_modules/get-size/get-size.js","../../node_modules/fizzy-ui-utils/utils.js","../../node_modules/desandro-matches-selector/matches-selector.js","../../node_modules/flickity/js/flickity.js","../../node_modules/flickity/js/cell.js","../../node_modules/flickity/js/slide.js","../../node_modules/flickity/js/animate.js","../../node_modules/unipointer/unipointer.js","../../node_modules/flickity/js/drag.js","../../node_modules/unidragger/unidragger.js","../../node_modules/flickity/js/add-remove-cell.js","../../node_modules/flickity/js/lazyload.js","../../node_modules/flickity/js/index.js","../../node_modules/flickity/js/prev-next-button.js","../../node_modules/flickity/js/page-dots.js","../../node_modules/flickity/js/player.js","../../src/_js/app/carousel.js","../../src/_js/lib/debounce.js","../../node_modules/waypoints/lib/noframework.waypoints.js","../../src/_js/app/scroll.js","../../src/_js/app/video.js","../../src/_js/app/nav.filter.js","../../src/_js/app/shadow.overlay.js","../../src/_js/app/foldout.js","../../src/_js/utilties/index.js","../../src/_js/app/autocomplete.js","../../src/_js/main.js"],"sourcesContent":["/*! picturefill - v3.0.2 - 2016-02-12\n * https://scottjehl.github.io/picturefill/\n * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT\n */\n/*! Gecko-Picture - v1.0\n * https://github.com/scottjehl/picturefill/tree/3.0/src/plugins/gecko-picture\n * Firefox's early picture implementation (prior to FF41) is static and does\n * not react to viewport changes. This tiny module fixes this.\n */\n(function(window) {\n\t/*jshint eqnull:true */\n\tvar ua = navigator.userAgent;\n\n\tif ( window.HTMLPictureElement && ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 < 45) ) {\n\t\taddEventListener(\"resize\", (function() {\n\t\t\tvar timer;\n\n\t\t\tvar dummySrc = document.createElement(\"source\");\n\n\t\t\tvar fixRespimg = function(img) {\n\t\t\t\tvar source, sizes;\n\t\t\t\tvar picture = img.parentNode;\n\n\t\t\t\tif (picture.nodeName.toUpperCase() === \"PICTURE\") {\n\t\t\t\t\tsource = dummySrc.cloneNode();\n\n\t\t\t\t\tpicture.insertBefore(source, picture.firstElementChild);\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpicture.removeChild(source);\n\t\t\t\t\t});\n\t\t\t\t} else if (!img._pfLastSize || img.offsetWidth > img._pfLastSize) {\n\t\t\t\t\timg._pfLastSize = img.offsetWidth;\n\t\t\t\t\tsizes = img.sizes;\n\t\t\t\t\timg.sizes += \",100vw\";\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\timg.sizes = sizes;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar findPictureImgs = function() {\n\t\t\t\tvar i;\n\t\t\t\tvar imgs = document.querySelectorAll(\"picture > img, img[srcset][sizes]\");\n\t\t\t\tfor (i = 0; i < imgs.length; i++) {\n\t\t\t\t\tfixRespimg(imgs[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onResize = function() {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(findPictureImgs, 99);\n\t\t\t};\n\t\t\tvar mq = window.matchMedia && matchMedia(\"(orientation: landscape)\");\n\t\t\tvar init = function() {\n\t\t\t\tonResize();\n\n\t\t\t\tif (mq && mq.addListener) {\n\t\t\t\t\tmq.addListener(onResize);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdummySrc.srcset = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n\t\t\tif (/^[c|i]|d$/.test(document.readyState || \"\")) {\n\t\t\t\tinit();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t\t\t}\n\n\t\t\treturn onResize;\n\t\t})());\n\t}\n})(window);\n\n/*! Picturefill - v3.0.2\n * http://scottjehl.github.io/picturefill\n * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt;\n * License: MIT\n */\n\n(function( window, document, undefined ) {\n\t// Enable strict mode\n\t\"use strict\";\n\n\t// HTML shim|v it for old IE (IE9 will still need the HTML video tag workaround)\n\tdocument.createElement( \"picture\" );\n\n\tvar warn, eminpx, alwaysCheckWDescriptor, evalId;\n\t// local object for method references and testing exposure\n\tvar pf = {};\n\tvar isSupportTestReady = false;\n\tvar noop = function() {};\n\tvar image = document.createElement( \"img\" );\n\tvar getImgAttr = image.getAttribute;\n\tvar setImgAttr = image.setAttribute;\n\tvar removeImgAttr = image.removeAttribute;\n\tvar docElem = document.documentElement;\n\tvar types = {};\n\tvar cfg = {\n\t\t//resource selection:\n\t\talgorithm: \"\"\n\t};\n\tvar srcAttr = \"data-pfsrc\";\n\tvar srcsetAttr = srcAttr + \"set\";\n\t// ua sniffing is done for undetectable img loading features,\n\t// to do some non crucial perf optimizations\n\tvar ua = navigator.userAgent;\n\tvar supportAbort = (/rident/).test(ua) || ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 > 35 );\n\tvar curSrcProp = \"currentSrc\";\n\tvar regWDesc = /\\s+\\+?\\d+(e\\d+)?w/;\n\tvar regSize = /(\\([^)]+\\))?\\s*(.+)/;\n\tvar setOptions = window.picturefillCFG;\n\t/**\n\t * Shortcut property for https://w3c.github.io/webappsec/specs/mixedcontent/#restricts-mixed-content ( for easy overriding in tests )\n\t */\n\t// baseStyle also used by getEmValue (i.e.: width: 1em is important)\n\tvar baseStyle = \"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)\";\n\tvar fsCss = \"font-size:100%!important;\";\n\tvar isVwDirty = true;\n\n\tvar cssCache = {};\n\tvar sizeLengthCache = {};\n\tvar DPR = window.devicePixelRatio;\n\tvar units = {\n\t\tpx: 1,\n\t\t\"in\": 96\n\t};\n\tvar anchor = document.createElement( \"a\" );\n\t/**\n\t * alreadyRun flag used for setOptions. is it true setOptions will reevaluate\n\t * @type {boolean}\n\t */\n\tvar alreadyRun = false;\n\n\t// Reusable, non-\"g\" Regexes\n\n\t// (Don't use \\s, to avoid matching non-breaking space.)\n\tvar regexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t regexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t regexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t regexTrailingCommas = /[,]+$/,\n\t regexNonNegativeInteger = /^\\d+$/,\n\n\t // ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t // Must include at least one digit.\n\t // According to spec tests any decimal point must be followed by a digit.\n\t // No leading plus sign is allowed.)\n\t // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;\n\n\tvar on = function(obj, evt, fn, capture) {\n\t\tif ( obj.addEventListener ) {\n\t\t\tobj.addEventListener(evt, fn, capture || false);\n\t\t} else if ( obj.attachEvent ) {\n\t\t\tobj.attachEvent( \"on\" + evt, fn);\n\t\t}\n\t};\n\n\t/**\n\t * simple memoize function:\n\t */\n\n\tvar memoize = function(fn) {\n\t\tvar cache = {};\n\t\treturn function(input) {\n\t\t\tif ( !(input in cache) ) {\n\t\t\t\tcache[ input ] = fn(input);\n\t\t\t}\n\t\t\treturn cache[ input ];\n\t\t};\n\t};\n\n\t// UTILITY FUNCTIONS\n\n\t// Manual is faster than RegEx\n\t// http://jsperf.com/whitespace-character/5\n\tfunction isSpace(c) {\n\t\treturn (c === \"\\u0020\" || // space\n\t\t c === \"\\u0009\" || // horizontal tab\n\t\t c === \"\\u000A\" || // new line\n\t\t c === \"\\u000C\" || // form feed\n\t\t c === \"\\u000D\"); // carriage return\n\t}\n\n\t/**\n\t * gets a mediaquery and returns a boolean or gets a css length and returns a number\n\t * @param css mediaqueries or css length\n\t * @returns {boolean|number}\n\t *\n\t * based on: https://gist.github.com/jonathantneal/db4f77009b155f083738\n\t */\n\tvar evalCSS = (function() {\n\n\t\tvar regLength = /^([\\d\\.]+)(em|vw|px)$/;\n\t\tvar replace = function() {\n\t\t\tvar args = arguments, index = 0, string = args[0];\n\t\t\twhile (++index in args) {\n\t\t\t\tstring = string.replace(args[index], args[++index]);\n\t\t\t}\n\t\t\treturn string;\n\t\t};\n\n\t\tvar buildStr = memoize(function(css) {\n\n\t\t\treturn \"return \" + replace((css || \"\").toLowerCase(),\n\t\t\t\t// interpret `and`\n\t\t\t\t/\\band\\b/g, \"&&\",\n\n\t\t\t\t// interpret `,`\n\t\t\t\t/,/g, \"||\",\n\n\t\t\t\t// interpret `min-` as >=\n\t\t\t\t/min-([a-z-\\s]+):/g, \"e.$1>=\",\n\n\t\t\t\t// interpret `max-` as <=\n\t\t\t\t/max-([a-z-\\s]+):/g, \"e.$1<=\",\n\n\t\t\t\t//calc value\n\t\t\t\t/calc([^)]+)/g, \"($1)\",\n\n\t\t\t\t// interpret css values\n\t\t\t\t/(\\d+[\\.]*[\\d]*)([a-z]+)/g, \"($1 * e.$2)\",\n\t\t\t\t//make eval less evil\n\t\t\t\t/^(?!(e.[a-z]|[0-9\\.&=|><\\+\\-\\*\\(\\)\\/])).*/ig, \"\"\n\t\t\t) + \";\";\n\t\t});\n\n\t\treturn function(css, length) {\n\t\t\tvar parsedLength;\n\t\t\tif (!(css in cssCache)) {\n\t\t\t\tcssCache[css] = false;\n\t\t\t\tif (length && (parsedLength = css.match( regLength ))) {\n\t\t\t\t\tcssCache[css] = parsedLength[ 1 ] * units[parsedLength[ 2 ]];\n\t\t\t\t} else {\n\t\t\t\t\t/*jshint evil:true */\n\t\t\t\t\ttry{\n\t\t\t\t\t\tcssCache[css] = new Function(\"e\", buildStr(css))(units);\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t/*jshint evil:false */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cssCache[css];\n\t\t};\n\t})();\n\n\tvar setResolution = function( candidate, sizesattr ) {\n\t\tif ( candidate.w ) { // h = means height: || descriptor.type === 'h' do not handle yet...\n\t\t\tcandidate.cWidth = pf.calcListLength( sizesattr || \"100vw\" );\n\t\t\tcandidate.res = candidate.w / candidate.cWidth ;\n\t\t} else {\n\t\t\tcandidate.res = candidate.d;\n\t\t}\n\t\treturn candidate;\n\t};\n\n\t/**\n\t *\n\t * @param opt\n\t */\n\tvar picturefill = function( opt ) {\n\n\t\tif (!isSupportTestReady) {return;}\n\n\t\tvar elements, i, plen;\n\n\t\tvar options = opt || {};\n\n\t\tif ( options.elements && options.elements.nodeType === 1 ) {\n\t\t\tif ( options.elements.nodeName.toUpperCase() === \"IMG\" ) {\n\t\t\t\toptions.elements = [ options.elements ];\n\t\t\t} else {\n\t\t\t\toptions.context = options.elements;\n\t\t\t\toptions.elements = null;\n\t\t\t}\n\t\t}\n\n\t\telements = options.elements || pf.qsa( (options.context || document), ( options.reevaluate || options.reselect ) ? pf.sel : pf.selShort );\n\n\t\tif ( (plen = elements.length) ) {\n\n\t\t\tpf.setupRun( options );\n\t\t\talreadyRun = true;\n\n\t\t\t// Loop through all elements\n\t\t\tfor ( i = 0; i < plen; i++ ) {\n\t\t\t\tpf.fillImg(elements[ i ], options);\n\t\t\t}\n\n\t\t\tpf.teardownRun( options );\n\t\t}\n\t};\n\n\t/**\n\t * outputs a warning for the developer\n\t * @param {message}\n\t * @type {Function}\n\t */\n\twarn = ( window.console && console.warn ) ?\n\t\tfunction( message ) {\n\t\t\tconsole.warn( message );\n\t\t} :\n\t\tnoop\n\t;\n\n\tif ( !(curSrcProp in image) ) {\n\t\tcurSrcProp = \"src\";\n\t}\n\n\t// Add support for standard mime types.\n\ttypes[ \"image/jpeg\" ] = true;\n\ttypes[ \"image/gif\" ] = true;\n\ttypes[ \"image/png\" ] = true;\n\n\tfunction detectTypeSupport( type, typeUri ) {\n\t\t// based on Modernizr's lossless img-webp test\n\t\t// note: asynchronous\n\t\tvar image = new window.Image();\n\t\timage.onerror = function() {\n\t\t\ttypes[ type ] = false;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.onload = function() {\n\t\t\ttypes[ type ] = image.width === 1;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.src = typeUri;\n\t\treturn \"pending\";\n\t}\n\n\t// test svg support\n\ttypes[ \"image/svg+xml\" ] = document.implementation.hasFeature( \"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\" );\n\n\t/**\n\t * updates the internal vW property with the current viewport width in px\n\t */\n\tfunction updateMetrics() {\n\n\t\tisVwDirty = false;\n\t\tDPR = window.devicePixelRatio;\n\t\tcssCache = {};\n\t\tsizeLengthCache = {};\n\n\t\tpf.DPR = DPR || 1;\n\n\t\tunits.width = Math.max(window.innerWidth || 0, docElem.clientWidth);\n\t\tunits.height = Math.max(window.innerHeight || 0, docElem.clientHeight);\n\n\t\tunits.vw = units.width / 100;\n\t\tunits.vh = units.height / 100;\n\n\t\tevalId = [ units.height, units.width, DPR ].join(\"-\");\n\n\t\tunits.em = pf.getEmValue();\n\t\tunits.rem = units.em;\n\t}\n\n\tfunction chooseLowRes( lowerValue, higherValue, dprValue, isCached ) {\n\t\tvar bonusFactor, tooMuch, bonus, meanDensity;\n\n\t\t//experimental\n\t\tif (cfg.algorithm === \"saveData\" ){\n\t\t\tif ( lowerValue > 2.7 ) {\n\t\t\t\tmeanDensity = dprValue + 1;\n\t\t\t} else {\n\t\t\t\ttooMuch = higherValue - dprValue;\n\t\t\t\tbonusFactor = Math.pow(lowerValue - 0.6, 1.5);\n\n\t\t\t\tbonus = tooMuch * bonusFactor;\n\n\t\t\t\tif (isCached) {\n\t\t\t\t\tbonus += 0.1 * bonusFactor;\n\t\t\t\t}\n\n\t\t\t\tmeanDensity = lowerValue + bonus;\n\t\t\t}\n\t\t} else {\n\t\t\tmeanDensity = (dprValue > 1) ?\n\t\t\t\tMath.sqrt(lowerValue * higherValue) :\n\t\t\t\tlowerValue;\n\t\t}\n\n\t\treturn meanDensity > dprValue;\n\t}\n\n\tfunction applyBestCandidate( img ) {\n\t\tvar srcSetCandidates;\n\t\tvar matchingSet = pf.getSet( img );\n\t\tvar evaluated = false;\n\t\tif ( matchingSet !== \"pending\" ) {\n\t\t\tevaluated = evalId;\n\t\t\tif ( matchingSet ) {\n\t\t\t\tsrcSetCandidates = pf.setRes( matchingSet );\n\t\t\t\tpf.applySetCandidate( srcSetCandidates, img );\n\t\t\t}\n\t\t}\n\t\timg[ pf.ns ].evaled = evaluated;\n\t}\n\n\tfunction ascendingSort( a, b ) {\n\t\treturn a.res - b.res;\n\t}\n\n\tfunction setSrcToCur( img, src, set ) {\n\t\tvar candidate;\n\t\tif ( !set && src ) {\n\t\t\tset = img[ pf.ns ].sets;\n\t\t\tset = set && set[set.length - 1];\n\t\t}\n\n\t\tcandidate = getCandidateForSrc(src, set);\n\n\t\tif ( candidate ) {\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\timg[ pf.ns ].curSrc = src;\n\t\t\timg[ pf.ns ].curCan = candidate;\n\n\t\t\tif ( !candidate.res ) {\n\t\t\t\tsetResolution( candidate, candidate.set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getCandidateForSrc( src, set ) {\n\t\tvar i, candidate, candidates;\n\t\tif ( src && set ) {\n\t\t\tcandidates = pf.parseSet( set );\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t\tif ( src === pf.makeUrl(candidates[ i ].url) ) {\n\t\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getAllSourceElements( picture, candidates ) {\n\t\tvar i, len, source, srcset;\n\n\t\t// SPEC mismatch intended for size and perf:\n\t\t// actually only source elements preceding the img should be used\n\t\t// also note: don't use qsa here, because IE8 sometimes doesn't like source as the key part in a selector\n\t\tvar sources = picture.getElementsByTagName( \"source\" );\n\n\t\tfor ( i = 0, len = sources.length; i < len; i++ ) {\n\t\t\tsource = sources[ i ];\n\t\t\tsource[ pf.ns ] = true;\n\t\t\tsrcset = source.getAttribute( \"srcset\" );\n\n\t\t\t// if source does not have a srcset attribute, skip\n\t\t\tif ( srcset ) {\n\t\t\t\tcandidates.push( {\n\t\t\t\t\tsrcset: srcset,\n\t\t\t\t\tmedia: source.getAttribute( \"media\" ),\n\t\t\t\t\ttype: source.getAttribute( \"type\" ),\n\t\t\t\t\tsizes: source.getAttribute( \"sizes\" )\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Srcset Parser\n\t * By Alex Bell | MIT License\n\t *\n\t * @returns Array [{url: _, d: _, w: _, h:_, set:_(????)}, ...]\n\t *\n\t * Based super duper closely on the reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n\t */\n\n\t// 1. Let input be the value passed to this algorithm.\n\t// (TO-DO : Explain what \"set\" argument is here. Maybe choose a more\n\t// descriptive & more searchable name. Since passing the \"set\" in really has\n\t// nothing to do with parsing proper, I would prefer this assignment eventually\n\t// go in an external fn.)\n\tfunction parseSrcset(input, set) {\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t match = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\t\t url,\n\t\t descriptors,\n\t\t currentDescriptor,\n\t\t state,\n\t\t c,\n\n\t\t // 2. Let position be a pointer into input, initially pointing at the start\n\t\t // of the string.\n\t\t pos = 0,\n\n\t\t // 3. Let candidates be an initially empty source set.\n\t\t candidates = [];\n\n\t\t/**\n\t\t* Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t* @return undefined\n\t\t*/\n\t\t// (Declared outside of the while loop so that it's only created once.\n\t\t// (This fn is defined before it is used, in order to pass JSHINT.\n\t\t// Unfortunately this breaks the sequencing of the spec comments. :/ )\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t// 10. Let width be absent.\n\t\t\t// 11. Let density be absent.\n\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t w, d, h, i,\n\t\t\t candidate = {},\n\t\t\t desc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tif (!h && !d && !w) {candidate.d = 1;}\n\t\t\t\tif (candidate.d === 1) {set.has1x = true;}\n\t\t\t\tcandidate.set = set;\n\n\t\t\t\tcandidates.push(candidate);\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t\t/**\n\t\t* Tokenizes descriptor properties prior to parsing\n\t\t* Returns undefined.\n\t\t* (Again, this fn is defined before it is used, in order to pass JSHINT.\n\t\t* Unfortunately this breaks the logical sequencing of the spec comments. :/ )\n\t\t*/\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t// Do the following depending on the value of state.\n\t\t\t\t// For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t// that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t // Space character\n\t\t\t\t // If current descriptor is not empty, append current descriptor to\n\t\t\t\t // descriptors and let current descriptor be the empty string.\n\t\t\t\t // Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t// characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t// were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t// and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t// more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\t}\n\n\t/*\n\t * Sizes Parser\n\t *\n\t * By Alex Bell | MIT License\n\t *\n\t * Non-strict but accurate and lightweight JS Parser for the string value \n\t *\n\t * Reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-sizes-attribute\n\t *\n\t * Most comments are copied in directly from the spec\n\t * (except for comments in parens).\n\t *\n\t * Grammar is:\n\t * = # [ , ]? | \n\t * = \n\t * = \n\t * http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-sizes\n\t *\n\t * E.g. \"(max-width: 30em) 100vw, (max-width: 50em) 70vw, 100vw\"\n\t * or \"(min-width: 30em), calc(30vw - 15px)\" or just \"30vw\"\n\t *\n\t * Returns the first valid with a media condition that evaluates to true,\n\t * or \"100vw\" if all valid media conditions evaluate to false.\n\t *\n\t */\n\n\tfunction parseSizes(strValue) {\n\n\t\t// (Percentage CSS lengths are not allowed in this case, to avoid confusion:\n\t\t// https://html.spec.whatwg.org/multipage/embedded-content.html#valid-source-size-list\n\t\t// CSS allows a single optional plus or minus sign:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#numbers\n\t\t// CSS is ASCII case-insensitive:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#characters )\n\t\t// Spec allows exponential notation for type:\n\t\t// http://dev.w3.org/csswg/css-values/#numbers\n\t\tvar regexCssLengthWithUnits = /^(?:[+-]?[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i;\n\n\t\t// (This is a quick and lenient test. Because of optional unlimited-depth internal\n\t\t// grouping parens and strict spacing rules, this could get very complicated.)\n\t\tvar regexCssCalc = /^calc\\((?:[0-9a-z \\.\\+\\-\\*\\/\\(\\)]+)\\)$/i;\n\n\t\tvar i;\n\t\tvar unparsedSizesList;\n\t\tvar unparsedSizesListLength;\n\t\tvar unparsedSize;\n\t\tvar lastComponentValue;\n\t\tvar size;\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t// (Toy CSS parser. The goals here are:\n\t\t// 1) expansive test coverage without the weight of a full CSS parser.\n\t\t// 2) Avoiding regex wherever convenient.\n\t\t// Quick tests: http://jsfiddle.net/gtntL4gr/3/\n\t\t// Returns an array of arrays.)\n\t\tfunction parseComponentValues(str) {\n\t\t\tvar chrctr;\n\t\t\tvar component = \"\";\n\t\t\tvar componentArray = [];\n\t\t\tvar listArray = [];\n\t\t\tvar parenDepth = 0;\n\t\t\tvar pos = 0;\n\t\t\tvar inComment = false;\n\n\t\t\tfunction pushComponent() {\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponentArray.push(component);\n\t\t\t\t\tcomponent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushComponentArray() {\n\t\t\t\tif (componentArray[0]) {\n\t\t\t\t\tlistArray.push(componentArray);\n\t\t\t\t\tcomponentArray = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// (Loop forwards from the beginning of the string.)\n\t\t\twhile (true) {\n\t\t\t\tchrctr = str.charAt(pos);\n\n\t\t\t\tif (chrctr === \"\") { // ( End of string reached.)\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\treturn listArray;\n\t\t\t\t} else if (inComment) {\n\t\t\t\t\tif ((chrctr === \"*\") && (str[pos + 1] === \"/\")) { // (At end of a comment.)\n\t\t\t\t\t\tinComment = false;\n\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpos += 1; // (Skip all characters inside comments.)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (isSpace(chrctr)) {\n\t\t\t\t\t// (If previous character in loop was also a space, or if\n\t\t\t\t\t// at the beginning of the string, do not add space char to\n\t\t\t\t\t// component.)\n\t\t\t\t\tif ( (str.charAt(pos - 1) && isSpace( str.charAt(pos - 1) ) ) || !component ) {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (parenDepth === 0) {\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tpos +=1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// (Replace any space character with a plain space for legibility.)\n\t\t\t\t\t\tchrctr = \" \";\n\t\t\t\t\t}\n\t\t\t\t} else if (chrctr === \"(\") {\n\t\t\t\t\tparenDepth += 1;\n\t\t\t\t} else if (chrctr === \")\") {\n\t\t\t\t\tparenDepth -= 1;\n\t\t\t\t} else if (chrctr === \",\") {\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( (chrctr === \"/\") && (str.charAt(pos + 1) === \"*\") ) {\n\t\t\t\t\tinComment = true;\n\t\t\t\t\tpos += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcomponent = component + chrctr;\n\t\t\t\tpos += 1;\n\t\t\t}\n\t\t}\n\n\t\tfunction isValidNonNegativeSourceSizeValue(s) {\n\t\t\tif (regexCssLengthWithUnits.test(s) && (parseFloat(s) >= 0)) {return true;}\n\t\t\tif (regexCssCalc.test(s)) {return true;}\n\t\t\t// ( http://www.w3.org/TR/CSS2/syndata.html#numbers says:\n\t\t\t// \"-0 is equivalent to 0 and is not a negative number.\" which means that\n\t\t\t// unitless zero and unitless negative zero must be accepted as special cases.)\n\t\t\tif ((s === \"0\") || (s === \"-0\") || (s === \"+0\")) {return true;}\n\t\t\treturn false;\n\t\t}\n\n\t\t// When asked to parse a sizes attribute from an element, parse a\n\t\t// comma-separated list of component values from the value of the element's\n\t\t// sizes attribute (or the empty string, if the attribute is absent), and let\n\t\t// unparsed sizes list be the result.\n\t\t// http://dev.w3.org/csswg/css-syntax/#parse-comma-separated-list-of-component-values\n\n\t\tunparsedSizesList = parseComponentValues(strValue);\n\t\tunparsedSizesListLength = unparsedSizesList.length;\n\n\t\t// For each unparsed size in unparsed sizes list:\n\t\tfor (i = 0; i < unparsedSizesListLength; i++) {\n\t\t\tunparsedSize = unparsedSizesList[i];\n\n\t\t\t// 1. Remove all consecutive s from the end of unparsed size.\n\t\t\t// ( parseComponentValues() already omits spaces outside of parens. )\n\n\t\t\t// If unparsed size is now empty, that is a parse error; continue to the next\n\t\t\t// iteration of this algorithm.\n\t\t\t// ( parseComponentValues() won't push an empty array. )\n\n\t\t\t// 2. If the last component value in unparsed size is a valid non-negative\n\t\t\t// , let size be its value and remove the component value\n\t\t\t// from unparsed size. Any CSS function other than the calc() function is\n\t\t\t// invalid. Otherwise, there is a parse error; continue to the next iteration\n\t\t\t// of this algorithm.\n\t\t\t// http://dev.w3.org/csswg/css-syntax/#parse-component-value\n\t\t\tlastComponentValue = unparsedSize[unparsedSize.length - 1];\n\n\t\t\tif (isValidNonNegativeSourceSizeValue(lastComponentValue)) {\n\t\t\t\tsize = lastComponentValue;\n\t\t\t\tunparsedSize.pop();\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 3. Remove all consecutive s from the end of unparsed\n\t\t\t// size. If unparsed size is now empty, return size and exit this algorithm.\n\t\t\t// If this was not the last item in unparsed sizes list, that is a parse error.\n\t\t\tif (unparsedSize.length === 0) {\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t// 4. Parse the remaining component values in unparsed size as a\n\t\t\t// . If it does not parse correctly, or it does parse\n\t\t\t// correctly but the evaluates to false, continue to the\n\t\t\t// next iteration of this algorithm.\n\t\t\t// (Parsing all possible compound media conditions in JS is heavy, complicated,\n\t\t\t// and the payoff is unclear. Is there ever an situation where the\n\t\t\t// media condition parses incorrectly but still somehow evaluates to true?\n\t\t\t// Can we just rely on the browser/polyfill to do it?)\n\t\t\tunparsedSize = unparsedSize.join(\" \");\n\t\t\tif (!(pf.matchesMedia( unparsedSize ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 5. Return size and exit this algorithm.\n\t\t\treturn size;\n\t\t}\n\n\t\t// If the above algorithm exhausts unparsed sizes list without returning a\n\t\t// size value, return 100vw.\n\t\treturn \"100vw\";\n\t}\n\n\t// namespace\n\tpf.ns = (\"pf\" + new Date().getTime()).substr(0, 9);\n\n\t// srcset support test\n\tpf.supSrcset = \"srcset\" in image;\n\tpf.supSizes = \"sizes\" in image;\n\tpf.supPicture = !!window.HTMLPictureElement;\n\n\t// UC browser does claim to support srcset and picture, but not sizes,\n\t// this extended test reveals the browser does support nothing\n\tif (pf.supSrcset && pf.supPicture && !pf.supSizes) {\n\t\t(function(image2) {\n\t\t\timage.srcset = \"data:,a\";\n\t\t\timage2.src = \"data:,a\";\n\t\t\tpf.supSrcset = image.complete === image2.complete;\n\t\t\tpf.supPicture = pf.supSrcset && pf.supPicture;\n\t\t})(document.createElement(\"img\"));\n\t}\n\n\t// Safari9 has basic support for sizes, but does't expose the `sizes` idl attribute\n\tif (pf.supSrcset && !pf.supSizes) {\n\n\t\t(function() {\n\t\t\tvar width2 = \"data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==\";\n\t\t\tvar width1 = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\tvar test = function() {\n\t\t\t\tvar width = img.width;\n\n\t\t\t\tif (width === 2) {\n\t\t\t\t\tpf.supSizes = true;\n\t\t\t\t}\n\n\t\t\t\talwaysCheckWDescriptor = pf.supSrcset && !pf.supSizes;\n\n\t\t\t\tisSupportTestReady = true;\n\t\t\t\t// force async\n\t\t\t\tsetTimeout(picturefill);\n\t\t\t};\n\n\t\t\timg.onload = test;\n\t\t\timg.onerror = test;\n\t\t\timg.setAttribute(\"sizes\", \"9px\");\n\n\t\t\timg.srcset = width1 + \" 1w,\" + width2 + \" 9w\";\n\t\t\timg.src = width1;\n\t\t})();\n\n\t} else {\n\t\tisSupportTestReady = true;\n\t}\n\n\t// using pf.qsa instead of dom traversing does scale much better,\n\t// especially on sites mixing responsive and non-responsive images\n\tpf.selShort = \"picture>img,img[srcset]\";\n\tpf.sel = pf.selShort;\n\tpf.cfg = cfg;\n\n\t/**\n\t * Shortcut property for `devicePixelRatio` ( for easy overriding in tests )\n\t */\n\tpf.DPR = (DPR || 1 );\n\tpf.u = units;\n\n\t// container of supported mime types that one might need to qualify before using\n\tpf.types = types;\n\n\tpf.setSize = noop;\n\n\t/**\n\t * Gets a string and returns the absolute URL\n\t * @param src\n\t * @returns {String} absolute URL\n\t */\n\n\tpf.makeUrl = memoize(function(src) {\n\t\tanchor.href = src;\n\t\treturn anchor.href;\n\t});\n\n\t/**\n\t * Gets a DOM element or document and a selctor and returns the found matches\n\t * Can be extended with jQuery/Sizzle for IE7 support\n\t * @param context\n\t * @param sel\n\t * @returns {NodeList|Array}\n\t */\n\tpf.qsa = function(context, sel) {\n\t\treturn ( \"querySelector\" in context ) ? context.querySelectorAll(sel) : [];\n\t};\n\n\t/**\n\t * Shortcut method for matchMedia ( for easy overriding in tests )\n\t * wether native or pf.mMQ is used will be decided lazy on first call\n\t * @returns {boolean}\n\t */\n\tpf.matchesMedia = function() {\n\t\tif ( window.matchMedia && (matchMedia( \"(min-width: 0.1em)\" ) || {}).matches ) {\n\t\t\tpf.matchesMedia = function( media ) {\n\t\t\t\treturn !media || ( matchMedia( media ).matches );\n\t\t\t};\n\t\t} else {\n\t\t\tpf.matchesMedia = pf.mMQ;\n\t\t}\n\n\t\treturn pf.matchesMedia.apply( this, arguments );\n\t};\n\n\t/**\n\t * A simplified matchMedia implementation for IE8 and IE9\n\t * handles only min-width/max-width with px or em values\n\t * @param media\n\t * @returns {boolean}\n\t */\n\tpf.mMQ = function( media ) {\n\t\treturn media ? evalCSS(media) : true;\n\t};\n\n\t/**\n\t * Returns the calculated length in css pixel from the given sourceSizeValue\n\t * http://dev.w3.org/csswg/css-values-3/#length-value\n\t * intended Spec mismatches:\n\t * * Does not check for invalid use of CSS functions\n\t * * Does handle a computed length of 0 the same as a negative and therefore invalid value\n\t * @param sourceSizeValue\n\t * @returns {Number}\n\t */\n\tpf.calcLength = function( sourceSizeValue ) {\n\n\t\tvar value = evalCSS(sourceSizeValue, true) || false;\n\t\tif (value < 0) {\n\t\t\tvalue = false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t/**\n\t * Takes a type string and checks if its supported\n\t */\n\n\tpf.supportsType = function( type ) {\n\t\treturn ( type ) ? types[ type ] : true;\n\t};\n\n\t/**\n\t * Parses a sourceSize into mediaCondition (media) and sourceSizeValue (length)\n\t * @param sourceSizeStr\n\t * @returns {*}\n\t */\n\tpf.parseSize = memoize(function( sourceSizeStr ) {\n\t\tvar match = ( sourceSizeStr || \"\" ).match(regSize);\n\t\treturn {\n\t\t\tmedia: match && match[1],\n\t\t\tlength: match && match[2]\n\t\t};\n\t});\n\n\tpf.parseSet = function( set ) {\n\t\tif ( !set.cands ) {\n\t\t\tset.cands = parseSrcset(set.srcset, set);\n\t\t}\n\t\treturn set.cands;\n\t};\n\n\t/**\n\t * returns 1em in css px for html/body default size\n\t * function taken from respondjs\n\t * @returns {*|number}\n\t */\n\tpf.getEmValue = function() {\n\t\tvar body;\n\t\tif ( !eminpx && (body = document.body) ) {\n\t\t\tvar div = document.createElement( \"div\" ),\n\t\t\t\toriginalHTMLCSS = docElem.style.cssText,\n\t\t\t\toriginalBodyCSS = body.style.cssText;\n\n\t\t\tdiv.style.cssText = baseStyle;\n\n\t\t\t// 1em in a media query is the value of the default font size of the browser\n\t\t\t// reset docElem and body to ensure the correct value is returned\n\t\t\tdocElem.style.cssText = fsCss;\n\t\t\tbody.style.cssText = fsCss;\n\n\t\t\tbody.appendChild( div );\n\t\t\teminpx = div.offsetWidth;\n\t\t\tbody.removeChild( div );\n\n\t\t\t//also update eminpx before returning\n\t\t\teminpx = parseFloat( eminpx, 10 );\n\n\t\t\t// restore the original values\n\t\t\tdocElem.style.cssText = originalHTMLCSS;\n\t\t\tbody.style.cssText = originalBodyCSS;\n\n\t\t}\n\t\treturn eminpx || 16;\n\t};\n\n\t/**\n\t * Takes a string of sizes and returns the width in pixels as a number\n\t */\n\tpf.calcListLength = function( sourceSizeListStr ) {\n\t\t// Split up source size list, ie ( max-width: 30em ) 100%, ( max-width: 50em ) 50%, 33%\n\t\t//\n\t\t// or (min-width:30em) calc(30% - 15px)\n\t\tif ( !(sourceSizeListStr in sizeLengthCache) || cfg.uT ) {\n\t\t\tvar winningLength = pf.calcLength( parseSizes( sourceSizeListStr ) );\n\n\t\t\tsizeLengthCache[ sourceSizeListStr ] = !winningLength ? units.width : winningLength;\n\t\t}\n\n\t\treturn sizeLengthCache[ sourceSizeListStr ];\n\t};\n\n\t/**\n\t * Takes a candidate object with a srcset property in the form of url/\n\t * ex. \"images/pic-medium.png 1x, images/pic-medium-2x.png 2x\" or\n\t * \"images/pic-medium.png 400w, images/pic-medium-2x.png 800w\" or\n\t * \"images/pic-small.png\"\n\t * Get an array of image candidates in the form of\n\t * {url: \"/foo/bar.png\", resolution: 1}\n\t * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value\n\t * If sizes is specified, res is calculated\n\t */\n\tpf.setRes = function( set ) {\n\t\tvar candidates;\n\t\tif ( set ) {\n\n\t\t\tcandidates = pf.parseSet( set );\n\n\t\t\tfor ( var i = 0, len = candidates.length; i < len; i++ ) {\n\t\t\t\tsetResolution( candidates[ i ], set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidates;\n\t};\n\n\tpf.setRes.res = setResolution;\n\n\tpf.applySetCandidate = function( candidates, img ) {\n\t\tif ( !candidates.length ) {return;}\n\t\tvar candidate,\n\t\t\ti,\n\t\t\tj,\n\t\t\tlength,\n\t\t\tbestCandidate,\n\t\t\tcurSrc,\n\t\t\tcurCan,\n\t\t\tcandidateSrc,\n\t\t\tabortCurSrc;\n\n\t\tvar imageData = img[ pf.ns ];\n\t\tvar dpr = pf.DPR;\n\n\t\tcurSrc = imageData.curSrc || img[curSrcProp];\n\n\t\tcurCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set);\n\n\t\t// if we have a current source, we might either become lazy or give this source some advantage\n\t\tif ( curCan && curCan.set === candidates[ 0 ].set ) {\n\n\t\t\t// if browser can abort image request and the image has a higher pixel density than needed\n\t\t\t// and this image isn't downloaded yet, we skip next part and try to save bandwidth\n\t\t\tabortCurSrc = (supportAbort && !img.complete && curCan.res - 0.1 > dpr);\n\n\t\t\tif ( !abortCurSrc ) {\n\t\t\t\tcurCan.cached = true;\n\n\t\t\t\t// if current candidate is \"best\", \"better\" or \"okay\",\n\t\t\t\t// set it to bestCandidate\n\t\t\t\tif ( curCan.res >= dpr ) {\n\t\t\t\t\tbestCandidate = curCan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !bestCandidate ) {\n\n\t\t\tcandidates.sort( ascendingSort );\n\n\t\t\tlength = candidates.length;\n\t\t\tbestCandidate = candidates[ length - 1 ];\n\n\t\t\tfor ( i = 0; i < length; i++ ) {\n\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\tif ( candidate.res >= dpr ) {\n\t\t\t\t\tj = i - 1;\n\n\t\t\t\t\t// we have found the perfect candidate,\n\t\t\t\t\t// but let's improve this a little bit with some assumptions ;-)\n\t\t\t\t\tif (candidates[ j ] &&\n\t\t\t\t\t\t(abortCurSrc || curSrc !== pf.makeUrl( candidate.url )) &&\n\t\t\t\t\t\tchooseLowRes(candidates[ j ].res, candidate.res, dpr, candidates[ j ].cached)) {\n\n\t\t\t\t\t\tbestCandidate = candidates[ j ];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbestCandidate = candidate;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( bestCandidate ) {\n\n\t\t\tcandidateSrc = pf.makeUrl( bestCandidate.url );\n\n\t\t\timageData.curSrc = candidateSrc;\n\t\t\timageData.curCan = bestCandidate;\n\n\t\t\tif ( candidateSrc !== curSrc ) {\n\t\t\t\tpf.setSrc( img, bestCandidate );\n\t\t\t}\n\t\t\tpf.setSize( img );\n\t\t}\n\t};\n\n\tpf.setSrc = function( img, bestCandidate ) {\n\t\tvar origWidth;\n\t\timg.src = bestCandidate.url;\n\n\t\t// although this is a specific Safari issue, we don't want to take too much different code paths\n\t\tif ( bestCandidate.set.type === \"image/svg+xml\" ) {\n\t\t\torigWidth = img.style.width;\n\t\t\timg.style.width = (img.offsetWidth + 1) + \"px\";\n\n\t\t\t// next line only should trigger a repaint\n\t\t\t// if... is only done to trick dead code removal\n\t\t\tif ( img.offsetWidth + 1 ) {\n\t\t\t\timg.style.width = origWidth;\n\t\t\t}\n\t\t}\n\t};\n\n\tpf.getSet = function( img ) {\n\t\tvar i, set, supportsType;\n\t\tvar match = false;\n\t\tvar sets = img [ pf.ns ].sets;\n\n\t\tfor ( i = 0; i < sets.length && !match; i++ ) {\n\t\t\tset = sets[i];\n\n\t\t\tif ( !set.srcset || !pf.matchesMedia( set.media ) || !(supportsType = pf.supportsType( set.type )) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( supportsType === \"pending\" ) {\n\t\t\t\tset = supportsType;\n\t\t\t}\n\n\t\t\tmatch = set;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tpf.parseSets = function( element, parent, options ) {\n\t\tvar srcsetAttribute, imageSet, isWDescripor, srcsetParsed;\n\n\t\tvar hasPicture = parent && parent.nodeName.toUpperCase() === \"PICTURE\";\n\t\tvar imageData = element[ pf.ns ];\n\n\t\tif ( imageData.src === undefined || options.src ) {\n\t\t\timageData.src = getImgAttr.call( element, \"src\" );\n\t\t\tif ( imageData.src ) {\n\t\t\t\tsetImgAttr.call( element, srcAttr, imageData.src );\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcAttr );\n\t\t\t}\n\t\t}\n\n\t\tif ( imageData.srcset === undefined || options.srcset || !pf.supSrcset || element.srcset ) {\n\t\t\tsrcsetAttribute = getImgAttr.call( element, \"srcset\" );\n\t\t\timageData.srcset = srcsetAttribute;\n\t\t\tsrcsetParsed = true;\n\t\t}\n\n\t\timageData.sets = [];\n\n\t\tif ( hasPicture ) {\n\t\t\timageData.pic = true;\n\t\t\tgetAllSourceElements( parent, imageData.sets );\n\t\t}\n\n\t\tif ( imageData.srcset ) {\n\t\t\timageSet = {\n\t\t\t\tsrcset: imageData.srcset,\n\t\t\t\tsizes: getImgAttr.call( element, \"sizes\" )\n\t\t\t};\n\n\t\t\timageData.sets.push( imageSet );\n\n\t\t\tisWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || \"\");\n\n\t\t\t// add normal src as candidate, if source has no w descriptor\n\t\t\tif ( !isWDescripor && imageData.src && !getCandidateForSrc(imageData.src, imageSet) && !imageSet.has1x ) {\n\t\t\t\timageSet.srcset += \", \" + imageData.src;\n\t\t\t\timageSet.cands.push({\n\t\t\t\t\turl: imageData.src,\n\t\t\t\t\td: 1,\n\t\t\t\t\tset: imageSet\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if ( imageData.src ) {\n\t\t\timageData.sets.push( {\n\t\t\t\tsrcset: imageData.src,\n\t\t\t\tsizes: null\n\t\t\t} );\n\t\t}\n\n\t\timageData.curCan = null;\n\t\timageData.curSrc = undefined;\n\n\t\t// if img has picture or the srcset was removed or has a srcset and does not support srcset at all\n\t\t// or has a w descriptor (and does not support sizes) set support to false to evaluate\n\t\timageData.supported = !( hasPicture || ( imageSet && !pf.supSrcset ) || (isWDescripor && !pf.supSizes) );\n\n\t\tif ( srcsetParsed && pf.supSrcset && !imageData.supported ) {\n\t\t\tif ( srcsetAttribute ) {\n\t\t\t\tsetImgAttr.call( element, srcsetAttr, srcsetAttribute );\n\t\t\t\telement.srcset = \"\";\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcsetAttr );\n\t\t\t}\n\t\t}\n\n\t\tif (imageData.supported && !imageData.srcset && ((!imageData.src && element.src) || element.src !== pf.makeUrl(imageData.src))) {\n\t\t\tif (imageData.src === null) {\n\t\t\t\telement.removeAttribute(\"src\");\n\t\t\t} else {\n\t\t\t\telement.src = imageData.src;\n\t\t\t}\n\t\t}\n\n\t\timageData.parsed = true;\n\t};\n\n\tpf.fillImg = function(element, options) {\n\t\tvar imageData;\n\t\tvar extreme = options.reselect || options.reevaluate;\n\n\t\t// expando for caching data on the img\n\t\tif ( !element[ pf.ns ] ) {\n\t\t\telement[ pf.ns ] = {};\n\t\t}\n\n\t\timageData = element[ pf.ns ];\n\n\t\t// if the element has already been evaluated, skip it\n\t\t// unless `options.reevaluate` is set to true ( this, for example,\n\t\t// is set to true when running `picturefill` on `resize` ).\n\t\tif ( !extreme && imageData.evaled === evalId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !imageData.parsed || options.reevaluate ) {\n\t\t\tpf.parseSets( element, element.parentNode, options );\n\t\t}\n\n\t\tif ( !imageData.supported ) {\n\t\t\tapplyBestCandidate( element );\n\t\t} else {\n\t\t\timageData.evaled = evalId;\n\t\t}\n\t};\n\n\tpf.setupRun = function() {\n\t\tif ( !alreadyRun || isVwDirty || (DPR !== window.devicePixelRatio) ) {\n\t\t\tupdateMetrics();\n\t\t}\n\t};\n\n\t// If picture is supported, well, that's awesome.\n\tif ( pf.supPicture ) {\n\t\tpicturefill = noop;\n\t\tpf.fillImg = noop;\n\t} else {\n\n\t\t // Set up picture polyfill by polling the document\n\t\t(function() {\n\t\t\tvar isDomReady;\n\t\t\tvar regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/;\n\n\t\t\tvar run = function() {\n\t\t\t\tvar readyState = document.readyState || \"\";\n\n\t\t\t\ttimerId = setTimeout(run, readyState === \"loading\" ? 200 : 999);\n\t\t\t\tif ( document.body ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t\tisDomReady = isDomReady || regReady.test(readyState);\n\t\t\t\t\tif ( isDomReady ) {\n\t\t\t\t\t\tclearTimeout( timerId );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar timerId = setTimeout(run, document.body ? 9 : 99);\n\n\t\t\t// Also attach picturefill on resize and readystatechange\n\t\t\t// http://modernjavascript.blogspot.com/2013/08/building-better-debounce.html\n\t\t\tvar debounce = function(func, wait) {\n\t\t\t\tvar timeout, timestamp;\n\t\t\t\tvar later = function() {\n\t\t\t\t\tvar last = (new Date()) - timestamp;\n\n\t\t\t\t\tif (last < wait) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tfunc();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn function() {\n\t\t\t\t\ttimestamp = new Date();\n\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tvar lastClientWidth = docElem.clientHeight;\n\t\t\tvar onResize = function() {\n\t\t\t\tisVwDirty = Math.max(window.innerWidth || 0, docElem.clientWidth) !== units.width || docElem.clientHeight !== lastClientWidth;\n\t\t\t\tlastClientWidth = docElem.clientHeight;\n\t\t\t\tif ( isVwDirty ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ton( window, \"resize\", debounce(onResize, 99 ) );\n\t\t\ton( document, \"readystatechange\", run );\n\t\t})();\n\t}\n\n\tpf.picturefill = picturefill;\n\t//use this internally for easy monkey patching/performance testing\n\tpf.fillImgs = picturefill;\n\tpf.teardownRun = noop;\n\n\t/* expose methods for testing */\n\tpicturefill._ = pf;\n\n\twindow.picturefillCFG = {\n\t\tpf: pf,\n\t\tpush: function(args) {\n\t\t\tvar name = args.shift();\n\t\t\tif (typeof pf[name] === \"function\") {\n\t\t\t\tpf[name].apply(pf, args);\n\t\t\t} else {\n\t\t\t\tcfg[name] = args[0];\n\t\t\t\tif (alreadyRun) {\n\t\t\t\t\tpf.fillImgs( { reselect: true } );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (setOptions && setOptions.length) {\n\t\twindow.picturefillCFG.push(setOptions.shift());\n\t}\n\n\t/* expose picturefill */\n\twindow.picturefill = picturefill;\n\n\t/* expose picturefill */\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// CommonJS, just export\n\t\tmodule.exports = picturefill;\n\t} else if ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD support\n\t\tdefine( \"picturefill\", function() { return picturefill; } );\n\t}\n\n\t// IE8 evals this sync, so it must be the last thing we do\n\tif ( !pf.supPicture ) {\n\t\ttypes[ \"image/webp\" ] = detectTypeSupport(\"image/webp\", \"data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==\" );\n\t}\n\n} )( window, document );\n","/*! npm.im/object-fit-images 3.2.4 */\n'use strict';\n\nvar OFI = 'bfred-it:object-fit-images';\nvar propRegex = /(object-fit|object-position)\\s*:\\s*([-.\\w\\s%]+)/g;\nvar testImg = typeof Image === 'undefined' ? {style: {'object-position': 1}} : new Image();\nvar supportsObjectFit = 'object-fit' in testImg.style;\nvar supportsObjectPosition = 'object-position' in testImg.style;\nvar supportsOFI = 'background-size' in testImg.style;\nvar supportsCurrentSrc = typeof testImg.currentSrc === 'string';\nvar nativeGetAttribute = testImg.getAttribute;\nvar nativeSetAttribute = testImg.setAttribute;\nvar autoModeEnabled = false;\n\nfunction createPlaceholder(w, h) {\n\treturn (\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='\" + w + \"' height='\" + h + \"'%3E%3C/svg%3E\");\n}\n\nfunction polyfillCurrentSrc(el) {\n\tif (el.srcset && !supportsCurrentSrc && window.picturefill) {\n\t\tvar pf = window.picturefill._;\n\t\t// parse srcset with picturefill where currentSrc isn't available\n\t\tif (!el[pf.ns] || !el[pf.ns].evaled) {\n\t\t\t// force synchronous srcset parsing\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\tif (!el[pf.ns].curSrc) {\n\t\t\t// force picturefill to parse srcset\n\t\t\tel[pf.ns].supported = false;\n\t\t\tpf.fillImg(el, {reselect: true});\n\t\t}\n\n\t\t// retrieve parsed currentSrc, if any\n\t\tel.currentSrc = el[pf.ns].curSrc || el.src;\n\t}\n}\n\nfunction getStyle(el) {\n\tvar style = getComputedStyle(el).fontFamily;\n\tvar parsed;\n\tvar props = {};\n\twhile ((parsed = propRegex.exec(style)) !== null) {\n\t\tprops[parsed[1]] = parsed[2];\n\t}\n\treturn props;\n}\n\nfunction setPlaceholder(img, width, height) {\n\t// Default: fill width, no height\n\tvar placeholder = createPlaceholder(width || 1, height || 0);\n\n\t// Only set placeholder if it's different\n\tif (nativeGetAttribute.call(img, 'src') !== placeholder) {\n\t\tnativeSetAttribute.call(img, 'src', placeholder);\n\t}\n}\n\nfunction onImageReady(img, callback) {\n\t// naturalWidth is only available when the image headers are loaded,\n\t// this loop will poll it every 100ms.\n\tif (img.naturalWidth) {\n\t\tcallback(img);\n\t} else {\n\t\tsetTimeout(onImageReady, 100, img, callback);\n\t}\n}\n\nfunction fixOne(el) {\n\tvar style = getStyle(el);\n\tvar ofi = el[OFI];\n\tstyle['object-fit'] = style['object-fit'] || 'fill'; // default value\n\n\t// Avoid running where unnecessary, unless OFI had already done its deed\n\tif (!ofi.img) {\n\t\t// fill is the default behavior so no action is necessary\n\t\tif (style['object-fit'] === 'fill') {\n\t\t\treturn;\n\t\t}\n\n\t\t// Where object-fit is supported and object-position isn't (Safari < 10)\n\t\tif (\n\t\t\t!ofi.skipTest && // unless user wants to apply regardless of browser support\n\t\t\tsupportsObjectFit && // if browser already supports object-fit\n\t\t\t!style['object-position'] // unless object-position is used\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// keep a clone in memory while resetting the original to a blank\n\tif (!ofi.img) {\n\t\tofi.img = new Image(el.width, el.height);\n\t\tofi.img.srcset = nativeGetAttribute.call(el, \"data-ofi-srcset\") || el.srcset;\n\t\tofi.img.src = nativeGetAttribute.call(el, \"data-ofi-src\") || el.src;\n\n\t\t// preserve for any future cloneNode calls\n\t\t// https://github.com/bfred-it/object-fit-images/issues/53\n\t\tnativeSetAttribute.call(el, \"data-ofi-src\", el.src);\n\t\tif (el.srcset) {\n\t\t\tnativeSetAttribute.call(el, \"data-ofi-srcset\", el.srcset);\n\t\t}\n\n\t\tsetPlaceholder(el, el.naturalWidth || el.width, el.naturalHeight || el.height);\n\n\t\t// remove srcset because it overrides src\n\t\tif (el.srcset) {\n\t\t\tel.srcset = '';\n\t\t}\n\t\ttry {\n\t\t\tkeepSrcUsable(el);\n\t\t} catch (err) {\n\t\t\tif (window.console) {\n\t\t\t\tconsole.warn('https://bit.ly/ofi-old-browser');\n\t\t\t}\n\t\t}\n\t}\n\n\tpolyfillCurrentSrc(ofi.img);\n\n\tel.style.backgroundImage = \"url(\\\"\" + ((ofi.img.currentSrc || ofi.img.src).replace(/\"/g, '\\\\\"')) + \"\\\")\";\n\tel.style.backgroundPosition = style['object-position'] || 'center';\n\tel.style.backgroundRepeat = 'no-repeat';\n\tel.style.backgroundOrigin = 'content-box';\n\n\tif (/scale-down/.test(style['object-fit'])) {\n\t\tonImageReady(ofi.img, function () {\n\t\t\tif (ofi.img.naturalWidth > el.width || ofi.img.naturalHeight > el.height) {\n\t\t\t\tel.style.backgroundSize = 'contain';\n\t\t\t} else {\n\t\t\t\tel.style.backgroundSize = 'auto';\n\t\t\t}\n\t\t});\n\t} else {\n\t\tel.style.backgroundSize = style['object-fit'].replace('none', 'auto').replace('fill', '100% 100%');\n\t}\n\n\tonImageReady(ofi.img, function (img) {\n\t\tsetPlaceholder(el, img.naturalWidth, img.naturalHeight);\n\t});\n}\n\nfunction keepSrcUsable(el) {\n\tvar descriptors = {\n\t\tget: function get(prop) {\n\t\t\treturn el[OFI].img[prop ? prop : 'src'];\n\t\t},\n\t\tset: function set(value, prop) {\n\t\t\tel[OFI].img[prop ? prop : 'src'] = value;\n\t\t\tnativeSetAttribute.call(el, (\"data-ofi-\" + prop), value); // preserve for any future cloneNode\n\t\t\tfixOne(el);\n\t\t\treturn value;\n\t\t}\n\t};\n\tObject.defineProperty(el, 'src', descriptors);\n\tObject.defineProperty(el, 'currentSrc', {\n\t\tget: function () { return descriptors.get('currentSrc'); }\n\t});\n\tObject.defineProperty(el, 'srcset', {\n\t\tget: function () { return descriptors.get('srcset'); },\n\t\tset: function (ss) { return descriptors.set(ss, 'srcset'); }\n\t});\n}\n\nfunction hijackAttributes() {\n\tfunction getOfiImageMaybe(el, name) {\n\t\treturn el[OFI] && el[OFI].img && (name === 'src' || name === 'srcset') ? el[OFI].img : el;\n\t}\n\tif (!supportsObjectPosition) {\n\t\tHTMLImageElement.prototype.getAttribute = function (name) {\n\t\t\treturn nativeGetAttribute.call(getOfiImageMaybe(this, name), name);\n\t\t};\n\n\t\tHTMLImageElement.prototype.setAttribute = function (name, value) {\n\t\t\treturn nativeSetAttribute.call(getOfiImageMaybe(this, name), name, String(value));\n\t\t};\n\t}\n}\n\nfunction fix(imgs, opts) {\n\tvar startAutoMode = !autoModeEnabled && !imgs;\n\topts = opts || {};\n\timgs = imgs || 'img';\n\n\tif ((supportsObjectPosition && !opts.skipTest) || !supportsOFI) {\n\t\treturn false;\n\t}\n\n\t// use imgs as a selector or just select all images\n\tif (imgs === 'img') {\n\t\timgs = document.getElementsByTagName('img');\n\t} else if (typeof imgs === 'string') {\n\t\timgs = document.querySelectorAll(imgs);\n\t} else if (!('length' in imgs)) {\n\t\timgs = [imgs];\n\t}\n\n\t// apply fix to all\n\tfor (var i = 0; i < imgs.length; i++) {\n\t\timgs[i][OFI] = imgs[i][OFI] || {\n\t\t\tskipTest: opts.skipTest\n\t\t};\n\t\tfixOne(imgs[i]);\n\t}\n\n\tif (startAutoMode) {\n\t\tdocument.body.addEventListener('load', function (e) {\n\t\t\tif (e.target.tagName === 'IMG') {\n\t\t\t\tfix(e.target, {\n\t\t\t\t\tskipTest: opts.skipTest\n\t\t\t\t});\n\t\t\t}\n\t\t}, true);\n\t\tautoModeEnabled = true;\n\t\timgs = 'img'; // reset to a generic selector for watchMQ\n\t}\n\n\t// if requested, watch media queries for object-fit change\n\tif (opts.watchMQ) {\n\t\twindow.addEventListener('resize', fix.bind(null, imgs, {\n\t\t\tskipTest: opts.skipTest\n\t\t}));\n\t}\n}\n\nfix.supportsObjectFit = supportsObjectFit;\nfix.supportsObjectPosition = supportsObjectPosition;\n\nhijackAttributes();\n\nmodule.exports = fix;\n","/*----------------------------------------------------------------------------*\\\r\n Config\r\n All global settings for JS.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd = {};\r\n\r\nwindow.ggd.config = {\r\n mq: {\r\n 'palm': '(min-width: 0)',\r\n 'palm-large': '(min-width: 639px)',\r\n 'lap': '(min-width: 640px)',\r\n 'desk': '(min-width: 1024px)'\r\n }\r\n};\r\n","/*----------------------------------------------------------------------------*\\\r\n Masthead\r\n Functions for masthead.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.masthead = {\r\n init: function(){\r\n var self = this;\r\n var $mastheads = document.querySelectorAll('.js--masthead');\r\n self.$content = document.querySelector('.js--masthead__content');\r\n self.$footer = document.querySelector('.js--masthead__footer');\r\n\r\n for (var i = 0; i < $mastheads.length; ++i) {\r\n var $masthead = $mastheads[i];\r\n self.initMasthead($masthead);\r\n }\r\n },\r\n\r\n initMasthead: function ($masthead) {\r\n var self = this;\r\n\r\n var $triggers = $masthead.querySelector('.js--masthead__trigger');\r\n $triggers.setAttribute('aria-expanded', 'false');\r\n\r\n $triggers.addEventListener('click', function () {\r\n var $trigger = this;\r\n var $fold = self.getFold($masthead);\r\n self.toggleFold($masthead, $trigger, $fold);\r\n });\r\n },\r\n\r\n getFold: function ($masthead) {\r\n var $fold = $masthead.querySelector('.js--masthead__fold');\r\n return $fold;\r\n },\r\n\r\n toggleFold: function ($masthead, $trigger, $fold) {\r\n var self = this;\r\n var $menuLabel = $trigger.querySelector('.js--hamburger__flag');\r\n var menuLabelOpen = $menuLabel.getAttribute('data-hamburger-open');\r\n var menuLabelClose = $menuLabel.getAttribute('data-hamburger-close');\r\n\r\n if ($trigger.classList.contains('is-open')) {\r\n self.$content.inert = false;\r\n self.$footer.inert = false;\r\n $fold.classList.remove('is-animated-in');\r\n $trigger.classList.remove('is-open');\r\n $trigger.setAttribute('aria-expanded', 'false');\r\n $menuLabel.innerHTML = menuLabelOpen;\r\n\r\n document.removeEventListener('keydown', self.closeFoldOnEscape);\r\n document.removeEventListener('focusin', self.closeFoldOnTab);\r\n document.removeEventListener('click', self.closeFoldOnTab);\r\n\r\n setTimeout(function () {\r\n $fold.classList.remove('is-open');\r\n }, 1000);\r\n } else {\r\n self.$content.inert = true;\r\n self.$footer.inert = true;\r\n $fold.classList.add('is-open');\r\n\r\n setTimeout(function () {\r\n $fold.classList.add('is-animated-in');\r\n }, 1);\r\n\r\n $trigger.classList.add('is-open');\r\n $trigger.setAttribute('aria-expanded', 'true');\r\n $menuLabel.innerHTML = menuLabelClose;\r\n\r\n // add eventlistener to close the fold when pressing escape or tabbing outside the fold, remove listeners when fold is closed\r\n document.addEventListener('keydown', self.closeFoldOnEscape);\r\n document.addEventListener('focusin', self.closeFoldOnTab);\r\n document.addEventListener('click', self.closeFoldOnTab);\r\n }\r\n },\r\n\r\n closeFoldOnEscape: function (event) {\r\n if (event.key === 'Escape') {\r\n var $masthead = document.querySelector('.js--masthead');\r\n var $trigger = $masthead.querySelector('.js--masthead__trigger');\r\n var $fold = $masthead.querySelector('.js--masthead__fold');\r\n \r\n window.ggd.masthead.toggleFold($masthead, $trigger, $fold);\r\n }\r\n },\r\n closeFoldOnTab: function (event) {\r\n var $masthead = document.querySelector('.js--masthead');\r\n var $trigger = $masthead.querySelector('.js--masthead__trigger');\r\n var $fold = $masthead.querySelector('.js--masthead__fold');\r\n\r\n if (!$fold.contains(event.target) && !$trigger.contains(event.target)) {\r\n window.ggd.masthead.toggleFold($masthead, $trigger, $fold);\r\n }\r\n },\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.masthead.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Navigation\r\n Functions for nav elements.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.megamenu = {\r\n activeMenuItem: null,\r\n\r\n init: function(){\r\n this.initMegaMenu();\r\n },\r\n\r\n initMegaMenu: function () {\r\n var self = this;\r\n var $navTriggers = document.querySelectorAll('.js--nav-primary__trigger');\r\n\r\n for (var i = 0; i < $navTriggers.length; ++i) {\r\n var $navTrigger = $navTriggers[i];\r\n self.setupMegaMenu($navTrigger);\r\n }\r\n },\r\n\r\n setupMegaMenu: function ($navTrigger) {\r\n var self = this;\r\n\r\n $navTrigger.addEventListener('click', function(e) {\r\n // If screen larger then desk make link not clickable\r\n if (window.matchMedia(window.ggd.config.mq.desk).matches) {\r\n e.preventDefault();\r\n }\r\n\r\n var $navMegaMenuWrap = this.nextElementSibling;\r\n\r\n if ($navTrigger === self.activeMenuItem) {\r\n self.closeMegaMenu(self.activeMenuItem);\r\n window.ggd.shadow.closeShadow();\r\n } else {\r\n if (self.activeMenuItem) {\r\n self.closeMegaMenu(self.activeMenuItem);\r\n }\r\n\r\n self.openMegaMenu(this, $navMegaMenuWrap);\r\n }\r\n\r\n });\r\n },\r\n\r\n openMegaMenu: function ($navTrigger, $navMegaMenuWrap) {\r\n var self = this;\r\n\r\n // store active menu item\r\n self.activeMenuItem = $navTrigger;\r\n // Set active class on navtrigger.\r\n $navTrigger.classList.add('is-open');\r\n\r\n // Set active class on navtrigger.\r\n $navMegaMenuWrap.classList.add('is-open');\r\n $navMegaMenuWrap.classList.add('to-open');\r\n\r\n setTimeout(() => {\r\n $navMegaMenuWrap.classList.remove('to-open');\r\n }, 600);\r\n\r\n // Open shadow overlay\r\n window.ggd.shadow.openShadow();\r\n\r\n // Close searchbar if opened.\r\n if (window.ggd.search) {\r\n window.ggd.search.close();\r\n }\r\n\r\n // Set correct Aria rules.\r\n $navTrigger.setAttribute('aria-expanded', 'true');\r\n //add eventlististener to close menu on tab\r\n\r\n document.addEventListener('keydown', window.ggd.megamenu.handleTabOutsideMegaMenu, false);\r\n },\r\n\r\n handleTabOutsideMegaMenu: function (e) {\r\n const trigger = document.querySelector('.js--nav-primary__trigger.is-open');\r\n if (!e.target.closest('.js--nav-primary__trigger') && !e.target.closest('.js--nav-primary')) {\r\n window.ggd.megamenu.closeMegaMenu(trigger);\r\n window.ggd.shadow.closeShadow();\r\n document.removeEventListener('keydown', window.ggd.megamenu.handleTabOutsideMegaMenu, false);\r\n }\r\n },\r\n\r\n // Close Megamenu and close current active item.\r\n closeMegaMenu: function ($navTrigger) {\r\n var self = this;\r\n self.activeMenuItem = null;\r\n $navTrigger.classList.remove('is-open');\r\n $navTrigger.setAttribute('aria-expanded', 'false');\r\n // window.ggd.shadow.closeShadow();\r\n\r\n // Remove active class frome megamenu container.\r\n $navTrigger.nextElementSibling.classList.add('from-open');\r\n setTimeout(() => {\r\n $navTrigger.nextElementSibling.classList.remove('is-open');\r\n $navTrigger.nextElementSibling.classList.remove('from-open');\r\n }, 600);\r\n\r\n // window.ggd.shadow.removeActiveTrigger();\r\n },\r\n\r\n // Function to close all active menu items. Mainly used for calling from other functions.\r\n closeAllMenus: function () {\r\n var $navTriggers = [].slice.call(document.querySelectorAll('.js--nav-primary__trigger')) || [];\r\n\r\n $navTriggers.forEach(function($navTrigger) {\r\n if ($navTrigger.classList.contains('is-open')) {\r\n // Remove active class frome megamenu container.\r\n $navTrigger.nextElementSibling.classList.add('from-open');\r\n setTimeout(() => {\r\n $navTrigger.nextElementSibling.classList.remove('is-open');\r\n $navTrigger.nextElementSibling.classList.remove('from-open');\r\n }, 600);\r\n }\r\n\r\n // Remove is-open from all navTriggers.\r\n $navTrigger.classList.remove('is-open');\r\n\r\n // Set correct Aria rules.\r\n $navTrigger.setAttribute('aria-expanded', 'false');\r\n });\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.megamenu.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Load more\r\n Loads new articles through a AJAX call.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.cookie = {\r\n createCookie: function (name, value, days) {\r\n // Create cookie\r\n var expires;\r\n\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime()+(days*24*60*60*1000));\r\n expires = '; expires='+date.toGMTString();\r\n }\r\n else {\r\n expires = '';\r\n }\r\n\r\n document.cookie = name+'='+value+expires+'; path=/';\r\n },\r\n\r\n readCookie: function (name) {\r\n var nameEQ = name + '=';\r\n var ca = document.cookie.split(';');\r\n\r\n for(var i=0;i < ca.length;i++) {\r\n var c = ca[i];\r\n\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1,c.length);\r\n }\r\n\r\n if (c.indexOf(nameEQ) === 0) {\r\n return c.substring(nameEQ.length,c.length);\r\n }\r\n }\r\n return null;\r\n }\r\n};\r\n","/*----------------------------------------------------------------------------*\\\r\n Accordeon\r\n Simple, accessible accordeon\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.accordeon = {\r\n init: function(){\r\n this.initAccordeons();\r\n },\r\n\r\n initAccordeons: function () {\r\n var self = this;\r\n var $elements = document.querySelectorAll('.js--accordeon:not(.is-initialised)');\r\n\r\n for (var i = 0; i < $elements.length; ++i) {\r\n var $element = $elements[i];\r\n self.setupAccordeon($element);\r\n }\r\n },\r\n\r\n setupAccordeon: function ($accordeon) {\r\n var self = this;\r\n if(!$accordeon.classList.contains('is-initialised')) {\r\n self.setupToggles($accordeon);\r\n $accordeon.classList.add('is-initialised');\r\n }\r\n },\r\n\r\n setupToggles: function ($accordeon) {\r\n var self = this;\r\n var $toggles = $accordeon.querySelectorAll('.js--accordeon__toggle');\r\n\r\n for (var i = 0; i < $toggles.length; ++i) {\r\n var $toggle = $toggles[i];\r\n self.initToggle($accordeon, $toggle);\r\n }\r\n },\r\n\r\n initToggle: function ($accordeon, $toggle) {\r\n var $item = $toggle.closest('.js--accordeon__item');\r\n\r\n if ($item.classList.contains('is-open')) {\r\n $toggle.setAttribute('aria-expanded', 'true');\r\n } else {\r\n $toggle.setAttribute('aria-expanded', 'false');\r\n }\r\n\r\n\r\n\r\n $toggle.addEventListener('click', function () {\r\n if ($item.classList.contains('is-open')) {\r\n $item.classList.remove('is-open');\r\n $toggle.setAttribute('aria-expanded', 'false');\r\n } else {\r\n $item.classList.add('is-open');\r\n $toggle.setAttribute('aria-expanded', 'true');\r\n }\r\n });\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.accordeon.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Maps\r\n Google Maps functions\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.maps = {\r\n init: function(){\r\n var self = this;\r\n var $mapContainers = document.querySelectorAll('.js--map');\r\n\r\n for (var i = 0; i < $mapContainers.length; ++i) {\r\n var $mapContainer = $mapContainers[i];\r\n self.initMaps($mapContainer);\r\n }\r\n },\r\n\r\n initMaps: function ($mapContainer) {\r\n var self = this,\r\n $map,\r\n $infoWindow = new window.google.maps.InfoWindow(),\r\n mapZoom = parseFloat($mapContainer.getAttribute('data-map-zoom')),\r\n mapLat = parseFloat($mapContainer.getAttribute('data-map-lat')),\r\n mapLong = parseFloat($mapContainer.getAttribute('data-map-long')),\r\n scrollToZoom = $mapContainer.getAttribute('data-map-scroll-to-zoom');\r\n\r\n if(typeof scrollToZoom === 'undefined' || scrollToZoom === null || scrollToZoom === '' ){\r\n scrollToZoom = 'true';\r\n }\r\n\r\n // Create Google Maps instance.\r\n $map = new window.google.maps.Map($mapContainer, {\r\n center: {\r\n lat: mapLat,\r\n lng: mapLong\r\n },\r\n zoom: mapZoom,\r\n scrollwheel: 'true' === scrollToZoom\r\n });\r\n\r\n // Get JSON file with Maps info.\r\n self.getJson($map, $infoWindow, $mapContainer);\r\n },\r\n\r\n // Add markers to Google maps.\r\n addMarkers: function ($map, $infoWindow, dataValues) {\r\n var self = this;\r\n var marker;\r\n\r\n var icon = {\r\n url: '/static/public/images/locationpin.png'\r\n };\r\n\r\n // Set longitude and latitude from JSON array.\r\n var longitude = parseFloat(dataValues.Longitude);\r\n var latitude = parseFloat(dataValues.Latitude);\r\n\r\n var location = {\r\n lat: latitude,\r\n lng: longitude\r\n };\r\n\r\n marker = new window.google.maps.Marker({\r\n position: location,\r\n map: $map,\r\n icon: icon\r\n });\r\n\r\n self.createInfoWindow($map, $infoWindow, marker, dataValues);\r\n\r\n // CURRENTLY NOT USING THIS FUNCTION, MAYBE IN A LATER STADIUM TO CLUSTER MARKERS.\r\n //self.setZoom($map, longitude, latitude, $boundBox);\r\n },\r\n\r\n // CURRENTLY NOT USING THIS FUNCTION, MAYBE IN A LATER STADIUM TO CLUSTER MARKERS.\r\n // Set the zoom to fit comfortably all the markers in the map\r\n /*setZoom: function (map, longitude, latitude, $boundBox) {\r\n $boundBox.extend(new google.maps.LatLng(latitude, longitude));\r\n\r\n // Don't zoom in too far on only one marker\r\n if ($boundBox.getNorthEast().equals($boundBox.getSouthWest())) {\r\n var extendPoint1 = new google.maps.LatLng($boundBox.getNorthEast().lat() + 0.01, $boundBox.getNorthEast().lng() + 0.01);\r\n var extendPoint2 = new google.maps.LatLng($boundBox.getNorthEast().lat() - 0.01, $boundBox.getNorthEast().lng() - 0.01);\r\n $boundBox.extend(extendPoint1);\r\n $boundBox.extend(extendPoint2);\r\n }\r\n\r\n map.setCenter($boundBox.getCenter());\r\n map.fitBounds($boundBox);\r\n },*/\r\n\r\n\r\n // Create info window when clicking on marker.\r\n createInfoWindow: function ($map, $infoWindow, marker, dataValues) {\r\n var contentString = '';\r\n\r\n marker.addListener('click', function() {\r\n $infoWindow.setContent(contentString);\r\n $infoWindow.open($map, marker);\r\n });\r\n },\r\n\r\n // Get JSON with Maps info\r\n getJson: function ($map, $infoWindow, $mapContainer) {\r\n var self = this;\r\n var request = new XMLHttpRequest();\r\n var dataURL = $mapContainer.getAttribute('data-map-url');\r\n var singleJson = $mapContainer.getAttribute('data-single-clinic');\r\n\r\n if(typeof dataURL !== 'undefined' && dataURL !== null && dataURL !== '') {\r\n request.open('GET', dataURL, true);\r\n\r\n request.onload = function() {\r\n if (request.status >= 200 && request.status < 400) {\r\n // XML load succesfull\r\n var data = JSON.parse(request.responseText);\r\n\r\n // Loop trough all JSON data\r\n if (typeof data !== 'undefined' && data !== null) {\r\n for (var i = 0; i < data.length; i++) {\r\n var dataValues = data[i];\r\n\r\n self.addMarkers($map, $infoWindow, dataValues);\r\n }\r\n }\r\n }\r\n };\r\n\r\n request.onerror = function() {\r\n // There was a connection error of some sort\r\n };\r\n\r\n request.send();\r\n\r\n } else if(typeof singleJson !== 'undefined' && singleJson !== null && singleJson !== '') {\r\n var jsonValues = JSON.parse(singleJson);\r\n if(typeof jsonValues !== 'undefined' && jsonValues !== null){\r\n var dataValues = jsonValues[0];\r\n // check to make sure the map has a center\r\n if(isNaN($map.center.lat()) && isNaN($map.center.lng())){\r\n $map.setCenter({lat: parseFloat(dataValues.Latitude), lng: parseFloat(dataValues.Longitude)});\r\n }\r\n self.addMarkers($map, $infoWindow, dataValues);\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.maps.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n ALERT\r\n JS for alert messages\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.alert = {\r\n init: function(){\r\n var self = this;\r\n var $elements = document.querySelectorAll('.js--alert');\r\n\r\n for (var i = 0; i < $elements.length; ++i) {\r\n var $element = $elements[i];\r\n self.initAlert($element);\r\n }\r\n },\r\n\r\n initAlert: function ($element) {\r\n var self = this;\r\n var $alertType = $element.getAttribute('data-alert');\r\n\r\n var cookielaw = window.ggd.cookie.readCookie($alertType);\r\n\r\n // Check if alert is already closed is in a cookie\r\n if (cookielaw !== $alertType) {\r\n $element.classList.add('is-visible');\r\n\r\n self.calcHeight($element, $alertType);\r\n document.querySelector('footer').style.marginBottom = $element.offsetHeight;\r\n }\r\n },\r\n\r\n calcHeight: function ($element, $alertType) {\r\n var self = this;\r\n\r\n $element.style.height = 'auto';\r\n var $alertHeight = $element.offsetHeight;\r\n\r\n $element.style.height = $alertHeight + 'px';\r\n\r\n self.closeAlert($element, $alertType);\r\n },\r\n\r\n closeAlert: function ($element, $alertType) {\r\n var $closeTriggers = $element.querySelectorAll('.js--alert-close');\r\n\r\n for (var i = 0; i < $closeTriggers.length; ++i) {\r\n var $closeTrigger = $closeTriggers[i];\r\n\r\n // Click on close button, close alert.\r\n $closeTrigger.addEventListener('click', function() {\r\n $element.hidden = true;\r\n // Check if alert is cookiebar, then set cookie for 1 year. If alert is not cookiebar then create session cookie.\r\n if (!this.classList.contains('js--alert-cookielaw')) {\r\n // Set 1 year cookie\r\n window.ggd.cookie.createCookie($alertType, $alertType, '');\r\n } else {\r\n // Set Session cookie\r\n window.ggd.cookie.createCookie($alertType, $alertType, 365);\r\n }\r\n });\r\n }\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.alert.init();\r\n}, false);\r\n\r\nwindow.addEventListener('resize', function () {\r\n window.ggd.alert.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Forms\r\n All JS form form elements\r\n\\*----------------------------------------------------------------------------*/\r\n\r\n// import Pikaday from 'pikaday';\r\n\r\nwindow.ggd.forms = {\r\n init: function(){\r\n this.inputFile();\r\n },\r\n\r\n inputFile: function () {\r\n var $elements = document.querySelector('.js--input-file');\r\n\r\n if (!$elements) {\r\n return;\r\n }\r\n\r\n // Get input-file name\r\n $elements.querySelector('.js--input-file-mask').onchange = function () {\r\n $elements.querySelector('.js--input-file-text').value = this.files[0].name;\r\n };\r\n },\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.forms.init();\r\n}, false);\r\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","/*----------------------------------------------------------------------------*\\\r\n Carousel\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nimport Flickity from 'flickity';\r\nimport debounce from '../lib/debounce';\r\n\r\n/* Enhance Flickity with custom slideStart function as it's not in Flickity's API. */\r\nvar startAnimation = Flickity.prototype.startAnimation;\r\nFlickity.prototype.startAnimation = function() {\r\n if ( this.isAnimating ) {\r\n return;\r\n }\r\n // do previous logic\r\n startAnimation.apply( this, arguments );\r\n // trigger event\r\n this.dispatchEvent('slideStart');\r\n};\r\n\r\nwindow.ggd.carousel = {\r\n init: function(){\r\n var self = this;\r\n var $carousel = [].slice.call(document.querySelectorAll('.js--carousel')) || [];\r\n\r\n if (!$carousel) {\r\n return false;\r\n }\r\n\r\n // Loop through all carousel instances.\r\n $carousel.forEach(function($carousel) {\r\n self.initCarousel($carousel);\r\n });\r\n },\r\n\r\n initCarousel: function ($carousel) {\r\n var self = this;\r\n var carouselOptions = JSON.parse($carousel.getAttribute('data-carousel-option'));\r\n\r\n // Init Flickity and get carousel-options from data-attribute\r\n var flkty = new Flickity($carousel,\r\n carouselOptions\r\n );\r\n\r\n // Init Flickity and get carousel-options from data-attribute\r\n self.customNav($carousel, flkty);\r\n },\r\n\r\n customNav: function ($carousel, flkty) {\r\n var self = this;\r\n var $nav = document.querySelector('.js--carousel__nav');\r\n\r\n // Check if there is a nav, otherwise return false.\r\n if (!$nav) {\r\n return false;\r\n }\r\n\r\n var $navCells = [].slice.call($nav.querySelectorAll('.js--carousel__nav-cell')) || [];\r\n\r\n // Set first nav item to active on pageload.\r\n self.setActiveNav(flkty, 0, $navCells);\r\n\r\n // When flickity starts scrolling set active nav item.\r\n flkty.on('slideStart', function() {\r\n var selectedCell = flkty.selectedIndex;\r\n self.setActiveNav(flkty, selectedCell, $navCells);\r\n });\r\n\r\n // Loop through all navigation triggers and get the slide numbers through data-attribute.\r\n $navCells.forEach(function($navCell) {\r\n $navCell.addEventListener('click', function() {\r\n\r\n var navCellNumber = $navCell.getAttribute('data-carousel-cell');\r\n\r\n if (navCellNumber) {\r\n self.goToSlide(flkty, navCellNumber, $navCells);\r\n }\r\n });\r\n });\r\n },\r\n\r\n // Set active carousel nav item\r\n setActiveNav: function(flkty, navCellNumber, $navCells) {\r\n var self = this;\r\n var $selectedCell = document.querySelector('.js--carousel__nav-cell[data-carousel-cell=\"' + navCellNumber + '\"]');\r\n var $navContent = $selectedCell.querySelector('.js--carousel__nav-content');\r\n var $innerCell = $selectedCell.querySelector('.js--carousel__nav-content__inner');\r\n var $innerHeight = self.getNavItemHeight($innerCell);\r\n\r\n $navCells.forEach(function($navCellAll) {\r\n // Remove is-active class from non-active carousel navs\r\n $navCellAll.classList.remove('is-active');\r\n\r\n // Reset height for all non-active carousel navs.\r\n var $navContentAll = $navCellAll.querySelector('.js--carousel__nav-content');\r\n\r\n if (window.innerWidth > 767) {\r\n $navContentAll.style.height = 0 +'px';\r\n } else {\r\n $navContentAll.style.height = 'auto';\r\n }\r\n });\r\n\r\n $navContent.style.height = $innerHeight+'px';\r\n $selectedCell.classList.add('is-active');\r\n },\r\n\r\n // Go to slide when clicking carousel nav item\r\n goToSlide: function(flkty, navCellNumber, $navCells) {\r\n var self = this;\r\n flkty.select(navCellNumber);\r\n flkty.stopPlayer();\r\n\r\n self.setActiveNav(flkty, navCellNumber, $navCells);\r\n },\r\n\r\n // Get innerHeight of navigation trigger.\r\n getNavItemHeight: function($inner){\r\n var height = 0;\r\n height = height + $inner.offsetHeight;\r\n\r\n return height;\r\n }\r\n};\r\n\r\n\r\nvar debounceCarousel = debounce(function() {\r\n window.ggd.carousel.init();\r\n}, 250);\r\n\r\nwindow.addEventListener('resize', debounceCarousel);\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.carousel.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Debounce function\r\n https://davidwalsh.name/javascript-debounce-function\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nexport default function (func, wait, immediate) {\r\n var timeout;\r\n return function() {\r\n var context = this;\r\n var args = arguments;\r\n\r\n var later = function() {\r\n timeout = null;\r\n\r\n if (!immediate) {\r\n func.apply(context, args);\r\n }\r\n };\r\n\r\n var callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n func.apply(context, args);\r\n }\r\n };\r\n}\r\n","/*!\nWaypoints - 4.0.1\nCopyright © 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n 'use strict'\n\n var keyCounter = 0\n var allWaypoints = {}\n\n /* http://imakewebthings.com/waypoints/api/waypoint */\n function Waypoint(options) {\n if (!options) {\n throw new Error('No options passed to Waypoint constructor')\n }\n if (!options.element) {\n throw new Error('No element option passed to Waypoint constructor')\n }\n if (!options.handler) {\n throw new Error('No handler option passed to Waypoint constructor')\n }\n\n this.key = 'waypoint-' + keyCounter\n this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n this.element = this.options.element\n this.adapter = new Waypoint.Adapter(this.element)\n this.callback = options.handler\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n this.enabled = this.options.enabled\n this.triggerPoint = null\n this.group = Waypoint.Group.findOrCreate({\n name: this.options.group,\n axis: this.axis\n })\n this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n if (Waypoint.offsetAliases[this.options.offset]) {\n this.options.offset = Waypoint.offsetAliases[this.options.offset]\n }\n this.group.add(this)\n this.context.add(this)\n allWaypoints[this.key] = this\n keyCounter += 1\n }\n\n /* Private */\n Waypoint.prototype.queueTrigger = function(direction) {\n this.group.queueTrigger(this, direction)\n }\n\n /* Private */\n Waypoint.prototype.trigger = function(args) {\n if (!this.enabled) {\n return\n }\n if (this.callback) {\n this.callback.apply(this, args)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy */\n Waypoint.prototype.destroy = function() {\n this.context.remove(this)\n this.group.remove(this)\n delete allWaypoints[this.key]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable */\n Waypoint.prototype.disable = function() {\n this.enabled = false\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable */\n Waypoint.prototype.enable = function() {\n this.context.refresh()\n this.enabled = true\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/next */\n Waypoint.prototype.next = function() {\n return this.group.next(this)\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/previous */\n Waypoint.prototype.previous = function() {\n return this.group.previous(this)\n }\n\n /* Private */\n Waypoint.invokeAll = function(method) {\n var allWaypointsArray = []\n for (var waypointKey in allWaypoints) {\n allWaypointsArray.push(allWaypoints[waypointKey])\n }\n for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n allWaypointsArray[i][method]()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy-all */\n Waypoint.destroyAll = function() {\n Waypoint.invokeAll('destroy')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable-all */\n Waypoint.disableAll = function() {\n Waypoint.invokeAll('disable')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable-all */\n Waypoint.enableAll = function() {\n Waypoint.Context.refreshAll()\n for (var waypointKey in allWaypoints) {\n allWaypoints[waypointKey].enabled = true\n }\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/refresh-all */\n Waypoint.refreshAll = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-height */\n Waypoint.viewportHeight = function() {\n return window.innerHeight || document.documentElement.clientHeight\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-width */\n Waypoint.viewportWidth = function() {\n return document.documentElement.clientWidth\n }\n\n Waypoint.adapters = []\n\n Waypoint.defaults = {\n context: window,\n continuous: true,\n enabled: true,\n group: 'default',\n horizontal: false,\n offset: 0\n }\n\n Waypoint.offsetAliases = {\n 'bottom-in-view': function() {\n return this.context.innerHeight() - this.adapter.outerHeight()\n },\n 'right-in-view': function() {\n return this.context.innerWidth() - this.adapter.outerWidth()\n }\n }\n\n window.Waypoint = Waypoint\n}())\n;(function() {\n 'use strict'\n\n function requestAnimationFrameShim(callback) {\n window.setTimeout(callback, 1000 / 60)\n }\n\n var keyCounter = 0\n var contexts = {}\n var Waypoint = window.Waypoint\n var oldWindowLoad = window.onload\n\n /* http://imakewebthings.com/waypoints/api/context */\n function Context(element) {\n this.element = element\n this.Adapter = Waypoint.Adapter\n this.adapter = new this.Adapter(element)\n this.key = 'waypoint-context-' + keyCounter\n this.didScroll = false\n this.didResize = false\n this.oldScroll = {\n x: this.adapter.scrollLeft(),\n y: this.adapter.scrollTop()\n }\n this.waypoints = {\n vertical: {},\n horizontal: {}\n }\n\n element.waypointContextKey = this.key\n contexts[element.waypointContextKey] = this\n keyCounter += 1\n if (!Waypoint.windowContext) {\n Waypoint.windowContext = true\n Waypoint.windowContext = new Context(window)\n }\n\n this.createThrottledScrollHandler()\n this.createThrottledResizeHandler()\n }\n\n /* Private */\n Context.prototype.add = function(waypoint) {\n var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n this.waypoints[axis][waypoint.key] = waypoint\n this.refresh()\n }\n\n /* Private */\n Context.prototype.checkEmpty = function() {\n var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n var isWindow = this.element == this.element.window\n if (horizontalEmpty && verticalEmpty && !isWindow) {\n this.adapter.off('.waypoints')\n delete contexts[this.key]\n }\n }\n\n /* Private */\n Context.prototype.createThrottledResizeHandler = function() {\n var self = this\n\n function resizeHandler() {\n self.handleResize()\n self.didResize = false\n }\n\n this.adapter.on('resize.waypoints', function() {\n if (!self.didResize) {\n self.didResize = true\n Waypoint.requestAnimationFrame(resizeHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.createThrottledScrollHandler = function() {\n var self = this\n function scrollHandler() {\n self.handleScroll()\n self.didScroll = false\n }\n\n this.adapter.on('scroll.waypoints', function() {\n if (!self.didScroll || Waypoint.isTouch) {\n self.didScroll = true\n Waypoint.requestAnimationFrame(scrollHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.handleResize = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Private */\n Context.prototype.handleScroll = function() {\n var triggeredGroups = {}\n var axes = {\n horizontal: {\n newScroll: this.adapter.scrollLeft(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left'\n },\n vertical: {\n newScroll: this.adapter.scrollTop(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n var isForward = axis.newScroll > axis.oldScroll\n var direction = isForward ? axis.forward : axis.backward\n\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n if (waypoint.triggerPoint === null) {\n continue\n }\n var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n if (crossedForward || crossedBackward) {\n waypoint.queueTrigger(direction)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n\n this.oldScroll = {\n x: axes.horizontal.newScroll,\n y: axes.vertical.newScroll\n }\n }\n\n /* Private */\n Context.prototype.innerHeight = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportHeight()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerHeight()\n }\n\n /* Private */\n Context.prototype.remove = function(waypoint) {\n delete this.waypoints[waypoint.axis][waypoint.key]\n this.checkEmpty()\n }\n\n /* Private */\n Context.prototype.innerWidth = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportWidth()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerWidth()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-destroy */\n Context.prototype.destroy = function() {\n var allWaypoints = []\n for (var axis in this.waypoints) {\n for (var waypointKey in this.waypoints[axis]) {\n allWaypoints.push(this.waypoints[axis][waypointKey])\n }\n }\n for (var i = 0, end = allWaypoints.length; i < end; i++) {\n allWaypoints[i].destroy()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-refresh */\n Context.prototype.refresh = function() {\n /*eslint-disable eqeqeq */\n var isWindow = this.element == this.element.window\n /*eslint-enable eqeqeq */\n var contextOffset = isWindow ? undefined : this.adapter.offset()\n var triggeredGroups = {}\n var axes\n\n this.handleScroll()\n axes = {\n horizontal: {\n contextOffset: isWindow ? 0 : contextOffset.left,\n contextScroll: isWindow ? 0 : this.oldScroll.x,\n contextDimension: this.innerWidth(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left',\n offsetProp: 'left'\n },\n vertical: {\n contextOffset: isWindow ? 0 : contextOffset.top,\n contextScroll: isWindow ? 0 : this.oldScroll.y,\n contextDimension: this.innerHeight(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up',\n offsetProp: 'top'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n var adjustment = waypoint.options.offset\n var oldTriggerPoint = waypoint.triggerPoint\n var elementOffset = 0\n var freshWaypoint = oldTriggerPoint == null\n var contextModifier, wasBeforeScroll, nowAfterScroll\n var triggeredBackward, triggeredForward\n\n if (waypoint.element !== waypoint.element.window) {\n elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n }\n\n if (typeof adjustment === 'function') {\n adjustment = adjustment.apply(waypoint)\n }\n else if (typeof adjustment === 'string') {\n adjustment = parseFloat(adjustment)\n if (waypoint.options.offset.indexOf('%') > - 1) {\n adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n }\n }\n\n contextModifier = axis.contextScroll - axis.contextOffset\n waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n triggeredBackward = wasBeforeScroll && nowAfterScroll\n triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n if (!freshWaypoint && triggeredBackward) {\n waypoint.queueTrigger(axis.backward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (!freshWaypoint && triggeredForward) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n Waypoint.requestAnimationFrame(function() {\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n })\n\n return this\n }\n\n /* Private */\n Context.findOrCreateByElement = function(element) {\n return Context.findByElement(element) || new Context(element)\n }\n\n /* Private */\n Context.refreshAll = function() {\n for (var contextId in contexts) {\n contexts[contextId].refresh()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n Context.findByElement = function(element) {\n return contexts[element.waypointContextKey]\n }\n\n window.onload = function() {\n if (oldWindowLoad) {\n oldWindowLoad()\n }\n Context.refreshAll()\n }\n\n\n Waypoint.requestAnimationFrame = function(callback) {\n var requestFn = window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n requestAnimationFrameShim\n requestFn.call(window, callback)\n }\n Waypoint.Context = Context\n}())\n;(function() {\n 'use strict'\n\n function byTriggerPoint(a, b) {\n return a.triggerPoint - b.triggerPoint\n }\n\n function byReverseTriggerPoint(a, b) {\n return b.triggerPoint - a.triggerPoint\n }\n\n var groups = {\n vertical: {},\n horizontal: {}\n }\n var Waypoint = window.Waypoint\n\n /* http://imakewebthings.com/waypoints/api/group */\n function Group(options) {\n this.name = options.name\n this.axis = options.axis\n this.id = this.name + '-' + this.axis\n this.waypoints = []\n this.clearTriggerQueues()\n groups[this.axis][this.name] = this\n }\n\n /* Private */\n Group.prototype.add = function(waypoint) {\n this.waypoints.push(waypoint)\n }\n\n /* Private */\n Group.prototype.clearTriggerQueues = function() {\n this.triggerQueues = {\n up: [],\n down: [],\n left: [],\n right: []\n }\n }\n\n /* Private */\n Group.prototype.flushTriggers = function() {\n for (var direction in this.triggerQueues) {\n var waypoints = this.triggerQueues[direction]\n var reverse = direction === 'up' || direction === 'left'\n waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n for (var i = 0, end = waypoints.length; i < end; i += 1) {\n var waypoint = waypoints[i]\n if (waypoint.options.continuous || i === waypoints.length - 1) {\n waypoint.trigger([direction])\n }\n }\n }\n this.clearTriggerQueues()\n }\n\n /* Private */\n Group.prototype.next = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n var isLast = index === this.waypoints.length - 1\n return isLast ? null : this.waypoints[index + 1]\n }\n\n /* Private */\n Group.prototype.previous = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n return index ? this.waypoints[index - 1] : null\n }\n\n /* Private */\n Group.prototype.queueTrigger = function(waypoint, direction) {\n this.triggerQueues[direction].push(waypoint)\n }\n\n /* Private */\n Group.prototype.remove = function(waypoint) {\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n if (index > -1) {\n this.waypoints.splice(index, 1)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/first */\n Group.prototype.first = function() {\n return this.waypoints[0]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/last */\n Group.prototype.last = function() {\n return this.waypoints[this.waypoints.length - 1]\n }\n\n /* Private */\n Group.findOrCreate = function(options) {\n return groups[options.axis][options.name] || new Group(options)\n }\n\n Waypoint.Group = Group\n}())\n;(function() {\n 'use strict'\n\n var Waypoint = window.Waypoint\n\n function isWindow(element) {\n return element === element.window\n }\n\n function getWindow(element) {\n if (isWindow(element)) {\n return element\n }\n return element.defaultView\n }\n\n function NoFrameworkAdapter(element) {\n this.element = element\n this.handlers = {}\n }\n\n NoFrameworkAdapter.prototype.innerHeight = function() {\n var isWin = isWindow(this.element)\n return isWin ? this.element.innerHeight : this.element.clientHeight\n }\n\n NoFrameworkAdapter.prototype.innerWidth = function() {\n var isWin = isWindow(this.element)\n return isWin ? this.element.innerWidth : this.element.clientWidth\n }\n\n NoFrameworkAdapter.prototype.off = function(event, handler) {\n function removeListeners(element, listeners, handler) {\n for (var i = 0, end = listeners.length - 1; i < end; i++) {\n var listener = listeners[i]\n if (!handler || handler === listener) {\n element.removeEventListener(listener)\n }\n }\n }\n\n var eventParts = event.split('.')\n var eventType = eventParts[0]\n var namespace = eventParts[1]\n var element = this.element\n\n if (namespace && this.handlers[namespace] && eventType) {\n removeListeners(element, this.handlers[namespace][eventType], handler)\n this.handlers[namespace][eventType] = []\n }\n else if (eventType) {\n for (var ns in this.handlers) {\n removeListeners(element, this.handlers[ns][eventType] || [], handler)\n this.handlers[ns][eventType] = []\n }\n }\n else if (namespace && this.handlers[namespace]) {\n for (var type in this.handlers[namespace]) {\n removeListeners(element, this.handlers[namespace][type], handler)\n }\n this.handlers[namespace] = {}\n }\n }\n\n /* Adapted from jQuery 1.x offset() */\n NoFrameworkAdapter.prototype.offset = function() {\n if (!this.element.ownerDocument) {\n return null\n }\n\n var documentElement = this.element.ownerDocument.documentElement\n var win = getWindow(this.element.ownerDocument)\n var rect = {\n top: 0,\n left: 0\n }\n\n if (this.element.getBoundingClientRect) {\n rect = this.element.getBoundingClientRect()\n }\n\n return {\n top: rect.top + win.pageYOffset - documentElement.clientTop,\n left: rect.left + win.pageXOffset - documentElement.clientLeft\n }\n }\n\n NoFrameworkAdapter.prototype.on = function(event, handler) {\n var eventParts = event.split('.')\n var eventType = eventParts[0]\n var namespace = eventParts[1] || '__default'\n var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {}\n var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || []\n\n nsTypeList.push(handler)\n this.element.addEventListener(eventType, handler)\n }\n\n NoFrameworkAdapter.prototype.outerHeight = function(includeMargin) {\n var height = this.innerHeight()\n var computedStyle\n\n if (includeMargin && !isWindow(this.element)) {\n computedStyle = window.getComputedStyle(this.element)\n height += parseInt(computedStyle.marginTop, 10)\n height += parseInt(computedStyle.marginBottom, 10)\n }\n\n return height\n }\n\n NoFrameworkAdapter.prototype.outerWidth = function(includeMargin) {\n var width = this.innerWidth()\n var computedStyle\n\n if (includeMargin && !isWindow(this.element)) {\n computedStyle = window.getComputedStyle(this.element)\n width += parseInt(computedStyle.marginLeft, 10)\n width += parseInt(computedStyle.marginRight, 10)\n }\n\n return width\n }\n\n NoFrameworkAdapter.prototype.scrollLeft = function() {\n var win = getWindow(this.element)\n return win ? win.pageXOffset : this.element.scrollLeft\n }\n\n NoFrameworkAdapter.prototype.scrollTop = function() {\n var win = getWindow(this.element)\n return win ? win.pageYOffset : this.element.scrollTop\n }\n\n NoFrameworkAdapter.extend = function() {\n var args = Array.prototype.slice.call(arguments)\n\n function merge(target, obj) {\n if (typeof target === 'object' && typeof obj === 'object') {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n target[key] = obj[key]\n }\n }\n }\n\n return target\n }\n\n for (var i = 1, end = args.length; i < end; i++) {\n merge(args[0], args[i])\n }\n return args[0]\n }\n\n NoFrameworkAdapter.inArray = function(element, array, i) {\n return array == null ? -1 : array.indexOf(element, i)\n }\n\n NoFrameworkAdapter.isEmptyObject = function(obj) {\n /* eslint no-unused-vars: 0 */\n for (var name in obj) {\n return false\n }\n return true\n }\n\n Waypoint.adapters.push({\n name: 'noframework',\n Adapter: NoFrameworkAdapter\n })\n Waypoint.Adapter = NoFrameworkAdapter\n}())\n;","/*----------------------------------------------------------------------------*\\\r\n Scroll\r\n Functions that trigger on scroll events.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nimport 'waypoints/lib/noframework.waypoints';\r\n\r\nwindow.ggd.scroll = {\r\n init: function(){\r\n var self = this;\r\n\r\n self.initSmoothScroll();\r\n self.initSections();\r\n self.stickyScroll();\r\n },\r\n\r\n initSmoothScroll: function() {\r\n this.selectBoxScroll();\r\n },\r\n\r\n // Scroll function for selectbox element.\r\n selectBoxScroll: function() {\r\n var $selectBox = document.querySelector('.js--smooth-scroll-select');\r\n\r\n if ($selectBox === null) {\r\n return false;\r\n }\r\n\r\n $selectBox.addEventListener('change', function(){\r\n var selectValue = this.options[$selectBox.selectedIndex].value;\r\n var anchor = document.querySelector(selectValue);\r\n\r\n anchor.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n });\r\n },\r\n\r\n initSections: function() {\r\n var self = this;\r\n\r\n // Get all sections with a ID.\r\n var $anchorNav = document.querySelector('.js--anchor-nav');\r\n var $sections = document.querySelectorAll('section[id]');\r\n\r\n if ($anchorNav === null) {\r\n return;\r\n }\r\n\r\n // Loop through all sections on a page.\r\n for (var i = 0; i < $sections.length; ++i) {\r\n var $section = $sections[i].id;\r\n\r\n // Create waypoints for all sections\r\n var element = document.getElementById($section);\r\n element.setAttribute('number', i);\r\n new window.Waypoint({\r\n element: element,\r\n handler: function handler(direction) {\r\n var $item = this.element.id;\r\n var number = this.element.getAttribute('number');\r\n if (direction === 'up') {\r\n if (number > 0) {\r\n self.activeNavItem($sections[number - 1].id);\r\n }\r\n } else {\r\n self.activeNavItem($item);\r\n }\r\n },\r\n offset: '65'\r\n });\r\n }\r\n },\r\n\r\n // Set active class in anchor nav for active section\r\n activeNavItem: function($item) {\r\n var $navItems = document.querySelectorAll('.js--anchor-nav__item');\r\n\r\n for (var i = 0; i < $navItems.length; ++i) {\r\n var $navItem = $navItems[i];\r\n var navItemHref = $navItem.getAttribute('href');\r\n var navItemId = navItemHref.split('#');\r\n navItemId = navItemId[1];\r\n\r\n $navItem.classList.remove('is-active');\r\n\r\n if (navItemId === $item) {\r\n $navItem.classList.add('is-active');\r\n }\r\n }\r\n },\r\n\r\n // Sticky nav.\r\n stickyScroll: function() {\r\n var $el = document.querySelector('.js--sticky-scroll');\r\n\r\n if ($el === null) {\r\n return false;\r\n }\r\n\r\n var $elHeight = $el.offsetHeight;\r\n\r\n window.addEventListener('scroll', function() {\r\n var stickyOffset = $el.getBoundingClientRect().top;\r\n\r\n if(stickyOffset <= 0) {\r\n $el.classList.add('is-sticky');\r\n $el.style.paddingTop = $elHeight + 'px';\r\n } else {\r\n $el.classList.remove('is-sticky');\r\n $el.style.paddingTop = '0px';\r\n }\r\n });\r\n },\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.scroll.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Video\r\n Function for YT video's.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.video = {\r\n init: function () {\r\n var self = this;\r\n //self.heroVideo();\r\n self.getVideos();\r\n\r\n var tag = document.createElement('script');\r\n tag.src = 'https://www.youtube.com/iframe_api';\r\n var firstScriptTag = document.getElementsByTagName('script')[0];\r\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n },\r\n\r\n initVideo: function (videoId, hasAutoplay, hasControls, $videoPlaceholder) {\r\n if ($videoPlaceholder !== null) {\r\n var playerWrap = document.createElement('div');\r\n $videoPlaceholder.appendChild(playerWrap);\r\n }\r\n\r\n if (videoId) {\r\n new window.YT.Player(playerWrap, {\r\n width: '100%',\r\n height: 570,\r\n videoId: videoId,\r\n playerVars: {\r\n 'disablekb': 1,\r\n 'autoplay': hasAutoplay,\r\n 'controls': hasControls,\r\n 'loop': 1,\r\n 'modestbranding': 1,\r\n 'rel': 0,\r\n 'showinfo': 0,\r\n 'playlist': videoId\r\n }\r\n });\r\n }\r\n },\r\n\r\n /* Init Homepage hero video */\r\n /*heroVideo: function () {\r\n var self = this;\r\n var $videoPlaceholder = document.querySelector('.js--hero__video-insert');\r\n var $videoHero = document.querySelector('.js--hero-video');*/\r\n\r\n /* Check if video is in hero and if screenwidth is bigger then desk. */\r\n /*if ($videoHero && Modernizr.mq(enex.config.mq.desk)) {\r\n var videoId = $videoPlaceholder.getAttribute('data-video-id');\r\n var hasAutoplay = $videoPlaceholder.getAttribute('data-video-autoplay');\r\n var hasControls = $videoPlaceholder.getAttribute('data-video-controls');\r\n\r\n self.initVideo(videoId, hasAutoplay, hasControls, $videoPlaceholder);\r\n }\r\n },*/\r\n\r\n /*muteVideo: function(player) {\r\n // Check if video is in hero, then mute it.\r\n if (player.a.parentNode.className === 'js--hero__video-insert'){\r\n player.mute();\r\n }\r\n },*/\r\n\r\n getVideos: function() {\r\n var self = this;\r\n var $videoElements = document.querySelectorAll('.js--video');\r\n\r\n for (var i = 0; i < $videoElements.length; ++i) {\r\n var $videoElement = $videoElements[i];\r\n self.loadVideoTrigger($videoElement);\r\n }\r\n },\r\n\r\n /* Open video lightbox from button click */\r\n loadVideoTrigger: function($videoElement) {\r\n var self = this;\r\n var $videoTrigger = $videoElement.querySelector('.js--video__trigger');\r\n\r\n var videoId = $videoTrigger.getAttribute('data-video-id');\r\n var hasAutoplay = $videoTrigger.getAttribute('data-video-autoplay');\r\n var hasControls = $videoTrigger.getAttribute('data-video-controls');\r\n\r\n $videoTrigger.addEventListener('click', function(){\r\n $videoElement.classList.add('is-active');\r\n self.appendVideoBlock(videoId, hasAutoplay, hasControls, this, $videoElement);\r\n });\r\n },\r\n\r\n /* Append video to inline video block */\r\n appendVideoBlock: function (videoId, hasAutoplay, hasControls, $videoTrigger, $videoElement) {\r\n var self = this;\r\n\r\n var $videoBlock = $videoTrigger.parentNode;\r\n $videoBlock.classList.add('is-active');\r\n\r\n // Get video wrap of current Video Block.\r\n var $videoWraps = $videoElement.querySelector('.js--video__wrap');\r\n\r\n // Embed flexembed div and js video insert div.\r\n $videoWraps.innerHTML = '';\r\n var $videoContainer = $videoWraps.querySelector('.js--video-insert--block');\r\n\r\n // Load video in current video block.\r\n self.initVideo(videoId, hasAutoplay, hasControls, $videoContainer);\r\n self.closeVideo($videoElement, $videoWraps, $videoBlock);\r\n },\r\n\r\n closeVideo: function ($videoElement, $videoWraps, $videoBlock) {\r\n var $closeVideoTrigger = $videoElement.querySelector('.video-block__close');\r\n\r\n if (!$closeVideoTrigger) {\r\n return false;\r\n }\r\n\r\n $closeVideoTrigger.addEventListener('click', function(){\r\n $videoElement.classList.remove('is-active');\r\n $videoBlock.classList.remove('is-active');\r\n\r\n // Clear video\r\n $videoWraps.innerHTML = '';\r\n });\r\n }\r\n};\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.video.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Nav filter\r\n Filter nav functions, for opening and closing nav.\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.filter = {\r\n init: function() {\r\n var self = this;\r\n var $filter = document.querySelector('.js--nav-filter');\r\n\r\n if (!$filter) {\r\n return;\r\n }\r\n\r\n var $modal = $filter.querySelector('.js--nav-filter__modal'),\r\n $open = document.querySelector('.js--nav-filter__open'),\r\n $close = $filter.querySelector('.js--nav-filter__close');\r\n\r\n self.openFilter($filter, $modal, $open, $close);\r\n },\r\n\r\n openFilter: function ($filter, $modal, $open, $close) {\r\n $open.addEventListener('click', function(event){\r\n event.preventDefault();\r\n $modal.classList.add('is-open');\r\n });\r\n\r\n $close.addEventListener('click', function(event){\r\n event.preventDefault();\r\n $modal.classList.remove('is-open');\r\n });\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.filter.init();\r\n}, false);\r\n","/*----------------------------------------------------------------------------*\\\r\n Shadow.overlay\r\n\\*----------------------------------------------------------------------------*/\r\n\r\nwindow.ggd.shadow = {\r\n init: function(){\r\n var self = this;\r\n var $shadowOverlay = document.querySelector('.js--shadow-overlay');\r\n var $shadowOverlayTriggers = document.querySelectorAll('.js--shadow-overlay__trigger');\r\n var $shadowOverlayFocuses = document.querySelectorAll('.js--shadow-overlay__focus');\r\n\r\n // Check if shadowOverlay is available.\r\n if (!$shadowOverlay) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < $shadowOverlayTriggers.length; ++i) {\r\n var $shadowOverlayTrigger = $shadowOverlayTriggers[i];\r\n self.triggerShadow($shadowOverlay, $shadowOverlayTrigger);\r\n self.clickShadow($shadowOverlay);\r\n }\r\n\r\n for (var j = 0; j < $shadowOverlayFocuses.length; ++j) {\r\n var $shadowOverlayFocus = $shadowOverlayFocuses[j];\r\n self.focusShadow($shadowOverlay, $shadowOverlayFocus);\r\n }\r\n },\r\n\r\n openShadow: function () {\r\n var $shadowOverlay = document.querySelector('.js--shadow-overlay');\r\n\r\n $shadowOverlay.classList.add('is-active');\r\n $shadowOverlay.classList.add('is-animating-in');\r\n\r\n setTimeout(function() {\r\n $shadowOverlay.classList.remove('is-animating-in');\r\n }, 500);\r\n },\r\n\r\n closeShadow: function () {\r\n var $shadowOverlay = document.querySelector('.js--shadow-overlay');\r\n\r\n $shadowOverlay.classList.add('is-animating-out');\r\n\r\n setTimeout(function(){\r\n $shadowOverlay.classList.remove('is-animating-out');\r\n $shadowOverlay.classList.remove('is-active');\r\n }, 500);\r\n },\r\n\r\n // Opens shadow with trigger button click.\r\n triggerShadow: function ($shadowOverlay, $shadowOverlayTrigger) {\r\n var self = this;\r\n\r\n $shadowOverlayTrigger.addEventListener('click', function() {\r\n // Set class is-triggered when clicking trigger.\r\n $shadowOverlayTrigger.classList.toggle('is-triggered');\r\n\r\n if ($shadowOverlayTrigger.classList.contains('is-triggered')) {\r\n self.openShadow();\r\n } else {\r\n self.closeShadow();\r\n }\r\n });\r\n },\r\n\r\n removeActiveTrigger: function () {\r\n var $shadowOverlayTriggers = [].slice.call(document.querySelectorAll('.js--shadow-overlay__trigger')) || [];\r\n\r\n $shadowOverlayTriggers.forEach(function($shadowOverlayTrigger) {\r\n $shadowOverlayTrigger.classList.remove('is-triggered');\r\n });\r\n },\r\n\r\n // Opens shadow with focus in inputfield.\r\n focusShadow: function ($shadowOverlay, $shadowOverlayFocus) {\r\n var self = this;\r\n\r\n $shadowOverlayFocus.addEventListener('focus', function() {\r\n self.openShadow();\r\n });\r\n\r\n $shadowOverlayFocus.addEventListener('blur', function() {\r\n self.closeShadow();\r\n });\r\n },\r\n\r\n // Close shadow when clicking on shadow-overlay. Also close depending menus and triggers.\r\n clickShadow: function ($shadowOverlay) {\r\n var self = this;\r\n\r\n $shadowOverlay.addEventListener('click', function(e) {\r\n e.preventDefault();\r\n\r\n self.closeShadow();\r\n\r\n // Close all megamenus.\r\n window.ggd.megamenu.closeAllMenus();\r\n\r\n // Close search bar.\r\n if (window.ggd.search) {\r\n window.ggd.search.close();\r\n }\r\n });\r\n }\r\n};\r\n\r\n\r\nwindow.addEventListener('load', function () {\r\n window.ggd.shadow.init();\r\n}, false);\r\n","class Foldout {\r\n constructor($el) {\r\n this.$toggle = $el.querySelector('.js--foldout__toggle');\r\n this.$content = $el.querySelector(`#${this.$toggle.getAttribute('aria-controls')}`);\r\n this.$focusEl = $el.querySelector('.js--foldout__focus');\r\n this.init();\r\n\r\n if ($el.classList.contains('js--foldout--search')) {\r\n window.ggd.search = this;\r\n }\r\n }\r\n\r\n init() {\r\n this.$toggle.addEventListener('click', () => {\r\n if (this.$toggle.getAttribute('aria-expanded') === 'false') {\r\n this.open();\r\n } else {\r\n this.close();\r\n }\r\n });\r\n }\r\n\r\n open() {\r\n this.$toggle.setAttribute('aria-expanded', 'true');\r\n this.$content.classList.add('is-active');\r\n\r\n if (this.$focusEl) {\r\n this.$focusEl.focus();\r\n }\r\n }\r\n\r\n close() {\r\n this.$toggle.setAttribute('aria-expanded', 'false');\r\n this.$content.classList.remove('is-active');\r\n // this.$content.hidden = true;\r\n }\r\n}\r\n\r\n[...document.querySelectorAll('.js--foldout')].forEach(($el) => {\r\n new Foldout($el);\r\n});\r\n","// const toTwoDigit = (number) =>\r\n// number.toLocaleString(undefined, {\r\n// minimumIntegerDigits: 2,\r\n// });\r\n//\r\n// exports.toTwoDigit = toTwoDigit;\r\n//\r\nexport const getKeyCode = (e) => {\r\n let code = '';\r\n\r\n if (e.key !== undefined) {\r\n code = e.key;\r\n } else if (e.keyIdentifier !== undefined) {\r\n code = e.keyIdentifier;\r\n } else if (e.keyCode !== undefined) {\r\n code = e.keyCode;\r\n }\r\n\r\n return code.toLowerCase();\r\n};\r\n\r\nexport const simplifyString = (string) => string.replace(/[^a-zA-Z]/g, '').toLowerCase();\r\n\r\n/**\r\n * @param {string} string\r\n * @param {array} array\r\n */\r\nexport const fuzzyMatchStringInArray = (string, array) => {\r\n const simpleString = simplifyString(string);\r\n return array.filter(({value}) => simplifyString(value).search(simpleString) > -1);\r\n};\r\n\r\n// export const fuzzyMatchStringInArray = fuzzyMatchStringInArray;\r\n\r\nexport const $ = ($scope, selector) => {\r\n return $scope.querySelector(selector);\r\n};\r\nexport const $$ = ($scope, selector) => {\r\n return $scope.querySelectorAll(selector);\r\n};\r\n","import { getKeyCode, fuzzyMatchStringInArray } from '../utilties/index';\r\n\r\nclass Autocomplete {\r\n constructor($el) {\r\n this.$el = $el;\r\n\r\n this.state = {\r\n activeOption: null,\r\n };\r\n\r\n this.apiUrl = $el.dataset.suggestionUrl;\r\n this.queryMinLength = $el.dataset.queryMinLength;\r\n\r\n if (!this.apiUrl) {\r\n this.$wrapSelect = $el.querySelector('[data-module-bind=autocomplete-wrap-select]');\r\n this.$select = this.$wrapSelect.querySelector('[data-module-bind*=autocomplete-select]');\r\n }\r\n\r\n this.$input = $el.querySelector('[data-module-bind=autocomplete-input]');\r\n this.$list = $el.querySelector('[data-module-bind=autocomplete-list]');\r\n this.$amount = $el.querySelector('[data-module-bind=autocomplete-amount]');\r\n // I need this later in the click handler\r\n this.listItemSelector = '[data-module-bind=autocomplete-list-option]';\r\n this.$optionTemplate = $el.querySelector(this.listItemSelector);\r\n }\r\n\r\n init() {\r\n this.handleInputEvents();\r\n this.handleListEvents();\r\n this.hideFoldoutOnBlur();\r\n\r\n if (this.$input.value.length < this.queryMinLength) {\r\n return;\r\n }\r\n\r\n this.getMatches('').then((options) => {\r\n this.buildMenu(options);\r\n });\r\n }\r\n\r\n handleListEvents() {\r\n // event delegation for list item click\r\n this.$list.addEventListener('click', (e) => {\r\n if (e.target && e.target.matches(this.listItemSelector)) {\r\n this.selectOption(e.target.dataset.optionValue);\r\n }\r\n });\r\n\r\n // keyboard navigation in the list\r\n this.$list.addEventListener('keydown', (e) => {\r\n const keyCode = getKeyCode(e);\r\n switch (keyCode) {\r\n case 'enter':\r\n this.selectOption(e.target.dataset.optionValue);\r\n break;\r\n case 'tab':\r\n this.hideMenu();\r\n break;\r\n case 'arrowup':\r\n case 'up':\r\n e.preventDefault();\r\n if (this.state.activeOption !== 0) {\r\n this.highlightOption(this.state.activeOption - 1);\r\n } else {\r\n this.$input.focus();\r\n }\r\n break;\r\n case 'arrowdown':\r\n case 'down':\r\n e.preventDefault();\r\n this.highlightOption(this.state.activeOption + 1);\r\n break;\r\n case 'escape':\r\n case 'esc':\r\n this.hideMenu();\r\n break;\r\n // space, tab ?\r\n default:\r\n // focus ?\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @param {number} index\r\n */\r\n highlightOption(index) {\r\n const $options = this.$list.querySelectorAll(this.listItemSelector);\r\n\r\n if (index >= $options.length) {\r\n return;\r\n }\r\n\r\n if (this.state.activeOption) {\r\n $options[this.state.activeOption].setAttribute('aria-selected', 'false');\r\n }\r\n\r\n this.state.activeOption = index;\r\n $options[this.state.activeOption].focus();\r\n $options[this.state.activeOption].setAttribute('aria-selected', 'true');\r\n }\r\n\r\n hideFoldoutOnBlur() {\r\n // hide foldout when clicking outside the component\r\n document.documentElement.addEventListener('click', (e) => {\r\n if (!this.$el.contains(e.target)) {\r\n this.hideMenu();\r\n }\r\n });\r\n }\r\n\r\n handleInputEvents() {\r\n // if tab out, hide the menu\r\n this.$input.addEventListener('keydown', (e) => {\r\n const keyCode = getKeyCode(e);\r\n if (keyCode === 'tab') {\r\n this.hideMenu();\r\n }\r\n });\r\n\r\n this.$input.addEventListener('keyup', (e) => {\r\n const keyCode = getKeyCode(e);\r\n switch (keyCode) {\r\n // ignore these keys, old & new spec names\r\n case 'esc':\r\n case 'escape':\r\n case 'up':\r\n case 'arrowup':\r\n case 'left':\r\n case 'arrowleft':\r\n case 'right':\r\n case 'arrowright':\r\n case 'space':\r\n case ' ':\r\n case 'enter':\r\n case 'shift':\r\n case 'tab':\r\n break;\r\n // on arrow down, jump to the list\r\n case 'arrowdown':\r\n case 'down':\r\n this.handleInputKeyPressDown();\r\n break;\r\n // otherwise, handle typing\r\n default:\r\n this.handleTyping();\r\n }\r\n });\r\n\r\n this.$input.addEventListener('focus', () => {\r\n let query = '';\r\n\r\n if (this.apiUrl) {\r\n query = this.$input.value;\r\n }\r\n\r\n if (query.length < this.queryMinLength) {\r\n return;\r\n }\r\n\r\n this.getMatches(query).then((options) => {\r\n this.buildMenu(options);\r\n this.showMenu();\r\n });\r\n });\r\n }\r\n\r\n handleTyping() {\r\n if (this.$input.value.length < this.queryMinLength) {\r\n return;\r\n }\r\n\r\n this.getMatches(this.$input.value).then((options) => this.handleResult(options));\r\n }\r\n\r\n /**\r\n * @param {array} options\r\n */\r\n handleResult(options) {\r\n if (!options.length) {\r\n this.hideMenu();\r\n this.setSelectValue('');\r\n } else {\r\n this.buildMenu(options);\r\n this.showMenu();\r\n }\r\n }\r\n\r\n /**\r\n * @param {string} message\r\n * @param {number} amount\r\n */\r\n showMessage(message, amount) {\r\n this.$list.innerHTML = '';\r\n const $loaderOption = this.$optionTemplate.cloneNode(true);\r\n // make it unselectable\r\n $loaderOption.removeAttribute('data-module-bind');\r\n $loaderOption.innerHTML = message;\r\n $loaderOption.hidden = false;\r\n this.$list.appendChild($loaderOption);\r\n this.showMenu();\r\n // set live region text (screen reader announcement)\r\n this.$amount.innerHTML = amount;\r\n }\r\n\r\n /**\r\n * @param {string} query\r\n */\r\n getMatches(query) {\r\n if (this.apiUrl) {\r\n return this.getRemoteMatches(query);\r\n }\r\n\r\n return this.getSelectMatches(query);\r\n }\r\n\r\n /**\r\n * @param {string} query\r\n */\r\n getSelectMatches(query) {\r\n if (query === '') {\r\n const options = [...this.$select.options];\r\n options.shift();\r\n return options;\r\n }\r\n\r\n return fuzzyMatchStringInArray(query, [...this.$select.options]);\r\n }\r\n\r\n /**\r\n * @param {string} query\r\n */\r\n async getRemoteMatches(query) {\r\n const controller = new AbortController();\r\n const { signal } = controller;\r\n\r\n let result;\r\n try {\r\n const request = await fetch(`${this.apiUrl}&suggestion=${query}`, { signal });\r\n result = await request.json();\r\n } catch (error) {\r\n result = {\r\n HasError: true,\r\n };\r\n }\r\n\r\n return result;\r\n }\r\n\r\n handleInputKeyPressDown() {\r\n const $options = this.$list.querySelectorAll(this.listItemSelector);\r\n\r\n if (!$options.length) {\r\n return;\r\n }\r\n\r\n // show menu, focus first item\r\n this.showMenu();\r\n this.highlightOption(0);\r\n }\r\n\r\n /**\r\n * @param {array} options\r\n */\r\n buildMenu(options) {\r\n this.$list.innerHTML = '';\r\n options.forEach((option) => {\r\n // build autocomplete list item\r\n const $option = this.$optionTemplate.cloneNode(true);\r\n $option.hidden = false;\r\n if (this.apiUrl) {\r\n // depending on data structure from api\r\n $option.dataset.optionValue = option.value;\r\n $option.innerHTML = option.value;\r\n } else {\r\n // value and innerText from ``\r\n $option.dataset.optionValue = option.value;\r\n $option.innerHTML = option.innerText;\r\n }\r\n\r\n this.$list.appendChild($option);\r\n });\r\n\r\n // set live region text (screen reader announcement)\r\n this.$amount.innerHTML = options.length;\r\n }\r\n\r\n /**\r\n * @param {string} value\r\n */\r\n selectOption(value) {\r\n this.setSelectValue(value);\r\n this.$input.value = value;\r\n this.hideMenu();\r\n this.$el.closest('form').submit();\r\n }\r\n\r\n /**\r\n * @param {string} value\r\n */\r\n setSelectValue(value) {\r\n if (!this.apiUrl) {\r\n this.$select.value = value;\r\n const event = new Event('externalChange');\r\n this.$select.dispatchEvent(event);\r\n }\r\n\r\n if (value === '') {\r\n this.$input.setAttribute('aria-invalid', 'true');\r\n this.$input.setAttribute('aria-describedby', `error--${this.$input.id}`);\r\n } else {\r\n this.$input.removeAttribute('aria-invalid');\r\n this.$input.removeAttribute('aria-describedby');\r\n }\r\n }\r\n\r\n showMenu() {\r\n this.$input.setAttribute('aria-expanded', 'true');\r\n this.$list.hidden = false;\r\n }\r\n\r\n hideMenu() {\r\n this.$input.setAttribute('aria-expanded', 'false');\r\n this.$list.hidden = true;\r\n this.state.activeOption = null;\r\n }\r\n}\r\n\r\n[...document.querySelectorAll('.js--autocomplete')].forEach(($el) => {\r\n const inst = new Autocomplete($el);\r\n inst.init();\r\n});\r\n","// libs\r\nimport 'picturefill';\r\nimport objectFitImages from 'object-fit-images';\r\n\r\n// app javascript\r\nimport './app/config';\r\nimport './app/masthead';\r\nimport './app/megamenu';\r\nimport './app/cookie';\r\nimport './app/accordeon';\r\nimport './app/maps';\r\nimport './app/alert';\r\nimport './app/forms';\r\nimport './app/carousel';\r\nimport './app/scroll';\r\nimport './app/video';\r\nimport './app/nav.filter';\r\nimport './app/shadow.overlay';\r\nimport './app/foldout';\r\nimport './app/autocomplete';\r\n\r\nobjectFitImages();\r\n"],"names":["window","timer","dummySrc","fixRespimg","findPictureImgs","onResize","mq","init","ua","navigator","userAgent","HTMLPictureElement","test","match","RegExp","$1","addEventListener","document","createElement","img","source","sizes","picture","parentNode","nodeName","toUpperCase","cloneNode","insertBefore","firstElementChild","setTimeout","removeChild","_pfLastSize","offsetWidth","i","imgs","querySelectorAll","length","clearTimeout","matchMedia","addListener","srcset","readyState","undefined","eminpx","alwaysCheckWDescriptor","evalId","pf","isSupportTestReady","noop","image","getImgAttr","getAttribute","setImgAttr","setAttribute","removeImgAttr","removeAttribute","docElem","documentElement","types","cfg","algorithm","srcAttr","srcsetAttr","supportAbort","curSrcProp","regWDesc","regSize","setOptions","picturefillCFG","fsCss","isVwDirty","cssCache","sizeLengthCache","DPR","devicePixelRatio","units","px","in","anchor","alreadyRun","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","on","obj","evt","fn","capture","attachEvent","memoize","cache","input","isSpace","c","regLength","buildStr","image2","width1","isDomReady","func","wait","timeout","timestamp","later","regReady","run","timerId","lastClientWidth","evalCSS","css","args","arguments","index","string","replace","toLowerCase","parsedLength","Function","e","setResolution","candidate","sizesattr","w","cWidth","calcListLength","res","d","picturefill","opt","elements","plen","options","nodeType","context","qsa","reevaluate","reselect","sel","selShort","setupRun","fillImg","teardownRun","ascendingSort","a","b","getCandidateForSrc","src","set","candidates","parseSet","makeUrl","url","implementation","hasFeature","ns","Date","getTime","substr","supSrcset","supSizes","supPicture","complete","width","onload","onerror","u","setSize","href","matchesMedia","matches","media","mMQ","apply","this","calcLength","sourceSizeValue","value","supportsType","type","parseSize","sourceSizeStr","cands","collectCharacters","regEx","chars","exec","substring","pos","descriptors","currentDescriptor","state","inputLength","parseDescriptors","h","desc","lastChar","intVal","floatVal","pError","parseInt","parseFloat","has1x","push","tokenize","charAt","slice","parseSrcset","getEmValue","body","div","originalHTMLCSS","style","cssText","originalBodyCSS","appendChild","sourceSizeListStr","uT","winningLength","strValue","unparsedSizesList","unparsedSizesListLength","unparsedSize","lastComponentValue","size","s","regexCssLengthWithUnits","regexCssCalc","str","chrctr","component","componentArray","listArray","parenDepth","inComment","pushComponent","pushComponentArray","parseComponentValues","pop","join","parseSizes","setRes","len","applySetCandidate","j","bestCandidate","curSrc","curCan","candidateSrc","abortCurSrc","lowerValue","higherValue","dprValue","isCached","bonusFactor","bonus","meanDensity","imageData","dpr","sets","setSrcToCur","cached","sort","Math","pow","sqrt","setSrc","origWidth","getSet","parseSets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","call","pic","sources","getElementsByTagName","getAllSourceElements","supported","parsed","extreme","evaled","srcSetCandidates","matchingSet","evaluated","applyBestCandidate","max","innerWidth","clientWidth","height","innerHeight","clientHeight","vw","vh","em","rem","fillImgs","last","_","name","shift","module","exports","typeUri","Image","detectTypeSupport","OFI","propRegex","testImg","supportsObjectFit","supportsObjectPosition","supportsOFI","supportsCurrentSrc","currentSrc","nativeGetAttribute","nativeSetAttribute","autoModeEnabled","setPlaceholder","placeholder","onImageReady","callback","naturalWidth","fixOne","el","getComputedStyle","fontFamily","props","getStyle","ofi","skipTest","naturalHeight","get","prop","Object","defineProperty","ss","keepSrcUsable","err","console","warn","polyfillCurrentSrc","backgroundImage","backgroundPosition","backgroundRepeat","backgroundOrigin","backgroundSize","fix","opts","startAutoMode","target","tagName","watchMQ","bind","getOfiImageMaybe","HTMLImageElement","prototype","String","hijackAttributes","ggd","config","palm","lap","desk","masthead","self","$mastheads","$content","querySelector","$footer","$masthead","initMasthead","$triggers","$fold","getFold","toggleFold","$trigger","$menuLabel","menuLabelOpen","menuLabelClose","classList","contains","inert","remove","innerHTML","removeEventListener","closeFoldOnEscape","closeFoldOnTab","add","event","key","megamenu","activeMenuItem","initMegaMenu","$navTriggers","$navTrigger","setupMegaMenu","preventDefault","$navMegaMenuWrap","nextElementSibling","closeMegaMenu","shadow","closeShadow","openMegaMenu","openShadow","search","close","handleTabOutsideMegaMenu","trigger","closest","closeAllMenus","forEach","cookie","createCookie","days","expires","date","setTime","toGMTString","readCookie","nameEQ","ca","split","indexOf","accordeon","initAccordeons","$elements","$element","setupAccordeon","$accordeon","setupToggles","$toggles","$toggle","initToggle","$item","maps","$mapContainers","$mapContainer","initMaps","$map","$infoWindow","google","InfoWindow","mapZoom","mapLat","mapLong","scrollToZoom","Map","center","lat","lng","zoom","scrollwheel","getJson","addMarkers","dataValues","marker","longitude","Longitude","location","Latitude","Marker","position","map","icon","createInfoWindow","contentString","City","Street","Housenumber","Zipcode","Phonenumber","Link","Route","setContent","open","request","XMLHttpRequest","dataURL","singleJson","status","data","JSON","parse","responseText","send","jsonValues","isNaN","setCenter","alert","initAlert","$alertType","calcHeight","marginBottom","offsetHeight","$alertHeight","closeAlert","$closeTriggers","hidden","forms","inputFile","onchange","files","global","factory","EvEmitter","proto","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","off","splice","emitEvent","onceListeners","allOff","getSize","getStyleSize","num","logError","message","error","measurements","measurementsLength","elem","isBoxSizeOuter","isSetup","padding","borderStyle","borderWidth","boxSizing","round","display","outerWidth","outerHeight","getZeroSize","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesSelector","matchesMethod","ElemProto","Element","prefixes","method","selector","fizzyUIUtils","utils","arraySlice","Array","makeArray","isArray","removeFrom","ary","getParent","getQueryElement","handleEvent","filterFindElements","elems","ffElems","HTMLElement","childElems","debounceMethod","_class","methodName","threshold","timeoutName","_this","docReady","toDashed","$2","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","attr","className","instance","require$$0","require$$1","require$$2","Flickity","Cell","create","x","originSide","destroy","unselect","side","transform","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","cellAlign","sideOffset","adjustedX","percentPosition","getPositionValue","select","wrapShift","slideableWidth","Slide","isOriginLeft","cells","addCell","cell","beginMargin","firstMargin","endMargin","lastCell","getLastCell","lastMargin","slideWidth","getCellElements","animatePrototype","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","modulo","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","slider","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","cellShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","_Flickity","moveElements","toElem","GUID","instances","queryElement","flickityGUID","option","extend","constructor","defaults","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","createMethods","id","guid","viewport","_createSlider","watchCSS","activate","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","updateSelectedSlide","groupCells","number","percentMatch","percent","_init","reposition","positionSliderAtSelected","setCellAlign","cellAlignShorthands","left","right","shorthand","adaptiveHeight","_unshiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","selectedCell","selectedElement","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","cellElems","slideIndex","uiChange","childUIPointerDown","focus","onresize","isDragging","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","leftMethod","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","removeData","bridget","setJQuery","jq","Unipointer","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","file","isCursorNode","isClickType","isOkay","focused","blur","moveVector","_dragPointerMove","_dragMove","hasDragStarted","_dragStart","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","dragEnd","onclick","isIgnoringMouseUp","staticClick","draggable","dragThreshold","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","_pointerDownDefault","focusNodes","isTouchStart","isTouchPointer","pointerType","isFocusNode","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","floor","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","insert","fragment","createDocumentFragment","getCellsFragment","isAppend","insertCellElement","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","lazySelector","getCellLazyImages","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","require$$5","require$$6","carousel","$carousel","initCarousel","carouselOptions","flkty","customNav","$nav","$navCells","setActiveNav","$navCell","navCellNumber","goToSlide","$selectedCell","$navContent","$innerCell","$innerHeight","getNavItemHeight","$navCellAll","$navContentAll","$inner","debounceCarousel","keyCounter","allWaypoints","Waypoint","Error","Adapter","adapter","axis","horizontal","enabled","triggerPoint","group","Group","findOrCreate","Context","findOrCreateByElement","offsetAliases","offset","queueTrigger","refresh","invokeAll","allWaypointsArray","waypointKey","end","destroyAll","disableAll","enableAll","refreshAll","viewportHeight","viewportWidth","adapters","continuous","requestAnimationFrameShim","contexts","oldWindowLoad","didScroll","didResize","oldScroll","scrollLeft","scrollTop","waypoints","vertical","waypointContextKey","windowContext","createThrottledScrollHandler","createThrottledResizeHandler","waypoint","checkEmpty","horizontalEmpty","isEmptyObject","verticalEmpty","isWindow","resizeHandler","handleResize","scrollHandler","handleScroll","isTouch","triggeredGroups","axes","newScroll","forward","backward","axisKey","wasBeforeTriggerPoint","nowAfterTriggerPoint","groupKey","flushTriggers","contextOffset","contextScroll","contextDimension","offsetProp","top","contextModifier","wasBeforeScroll","nowAfterScroll","triggeredForward","adjustment","oldTriggerPoint","elementOffset","freshWaypoint","ceil","findByElement","contextId","mozRequestAnimationFrame","webkitRequestAnimationFrame","byTriggerPoint","byReverseTriggerPoint","groups","clearTriggerQueues","triggerQueues","up","down","reverse","inArray","first","getWindow","defaultView","NoFrameworkAdapter","handlers","removeListeners","eventParts","eventType","ownerDocument","win","rect","getBoundingClientRect","clientTop","clientLeft","nsHandlers","includeMargin","computedStyle","merge","hasOwnProperty","array","initSmoothScroll","initSections","stickyScroll","selectBoxScroll","$selectBox","selectValue","scrollIntoView","behavior","$anchorNav","$sections","$section","getElementById","activeNavItem","$navItems","$navItem","navItemId","$el","$elHeight","video","getVideos","tag","firstScriptTag","initVideo","videoId","hasAutoplay","hasControls","$videoPlaceholder","playerWrap","YT","playerVars","disablekb","autoplay","controls","loop","modestbranding","rel","showinfo","playlist","$videoElements","$videoElement","loadVideoTrigger","$videoTrigger","appendVideoBlock","$videoBlock","$videoWraps","$videoContainer","closeVideo","$closeVideoTrigger","filter","$filter","$modal","$open","$close","openFilter","$shadowOverlay","$shadowOverlayTriggers","$shadowOverlayFocuses","$shadowOverlayTrigger","triggerShadow","clickShadow","$shadowOverlayFocus","focusShadow","toggle","removeActiveTrigger","Foldout","$focusEl","getKeyCode","code","keyIdentifier","simplifyString","Autocomplete","activeOption","apiUrl","dataset","suggestionUrl","queryMinLength","$wrapSelect","$select","$input","$list","$amount","listItemSelector","$optionTemplate","handleInputEvents","handleListEvents","hideFoldoutOnBlur","getMatches","then","buildMenu","selectOption","optionValue","hideMenu","highlightOption","$options","handleInputKeyPressDown","handleTyping","query","showMenu","handleResult","setSelectValue","showMessage","amount","$loaderOption","getRemoteMatches","getSelectMatches","simpleString","fuzzyMatchStringInArray","controller","AbortController","signal","result","fetch","json","HasError","$option","innerText","objectFitImages"],"mappings":"4SASUA,EAMHC,EAEAC,EAEAC,EAqBAC,EAOAC,EAIAC,EACAC,EAzCFC;;;;;;;;;;AAFKR,EA8DPA,OA5DEQ,EAAKC,UAAUC,UAEdV,EAAOW,oBAAwB,OAAQC,KAAKJ,IAAOA,EAAGK,MAAM,cAAgBC,OAAOC,GAAK,IAC5FC,iBAAiB,UAGZd,EAAWe,SAASC,cAAc,UAElCf,EAAa,SAASgB,GACzB,IAAIC,EAAQC,EACRC,EAAUH,EAAII,WAEqB,YAAnCD,EAAQE,SAASC,eACpBL,EAASlB,EAASwB,YAEVJ,EAAAK,aAAaP,EAAQE,EAAQM,mBACrCC,YAAW,WACVP,EAAQQ,YAAYV,EAC1B,OACgBD,EAAIY,aAAeZ,EAAIa,YAAcb,EAAIY,eACpDZ,EAAIY,YAAcZ,EAAIa,YACtBX,EAAQF,EAAIE,MACZF,EAAIE,OAAS,SACbQ,YAAW,WACVV,EAAIE,MAAQA,CAClB,IAEA,EAEOjB,EAAkB,WACjB,IAAA6B,EACAC,EAAOjB,SAASkB,iBAAiB,qCACrC,IAAKF,EAAI,EAAGA,EAAIC,EAAKE,OAAQH,IACjB9B,EAAA+B,EAAKD,GAErB,EACO5B,EAAW,WACdgC,aAAapC,GACLA,EAAA4B,WAAWzB,EAAiB,GACxC,EACOE,EAAKN,EAAOsC,YAAcA,WAAW,4BACrC/B,EAAO,eAGND,GAAMA,EAAGiC,aACZjC,EAAGiC,YAAYlC,EAEpB,EAEGH,EAASsC,OAAS,6EAEd,YAAY5B,KAAKK,SAASwB,YAAc,QAGlCxB,SAAAD,iBAAiB,mBAAoBT,GAGxCF;;;;;;AAWT,SAAUL,EAAQiB,EAAUyB,GAO5B,IAAUC,EAAQC,EAAwBC,EAF1C5B,EAASC,cAAe,WAIxB,IAAI4B,EAAK,CAAA,EACLC,GAAqB,EACrBC,EAAO,aACPC,EAAQhC,EAASC,cAAe,OAChCgC,EAAaD,EAAME,aACnBC,EAAaH,EAAMI,aACnBC,EAAgBL,EAAMM,gBACtBC,EAAUvC,EAASwC,gBACnBC,EAAQ,CAAA,EACRC,EAAM,CAETC,UAAW,IAERC,EAAU,aACVC,EAAaD,EAAU,MAGvBrD,EAAKC,UAAUC,UACfqD,EAAgB,SAAUnD,KAAKJ,IAAS,OAAQI,KAAKJ,IAAOA,EAAGK,MAAM,cAAgBC,OAAOC,GAAK,GACjGiD,EAAa,aACbC,EAAW,oBACXC,EAAU,sBACVC,EAAanE,EAAOoE,eAMpBC,EAAQ,4BACRC,GAAY,EAEZC,EAAW,CAAA,EACXC,EAAkB,CAAA,EAClBC,EAAMzE,EAAO0E,iBACbC,EAAQ,CACXC,GAAI,EACJC,GAAM,IAEHC,EAAS7D,EAASC,cAAe,KAKjC6D,GAAa,EAKbC,EAAqB,oBACrBC,EAA6B,qBAC7BC,EAAwB,qBACxBC,EAAsB,QACtBC,EAA0B,QAO1BC,EAAqB,oDAErBC,EAAK,SAASC,EAAKC,EAAKC,EAAIC,GAC1BH,EAAIvE,iBACJuE,EAAAvE,iBAAiBwE,EAAKC,GAAe,GAC9BF,EAAII,aACXJ,EAAAI,YAAa,KAAOH,EAAKC,EAEhC,EAMKG,EAAU,SAASH,GACtB,IAAII,EAAQ,CAAA,EACZ,OAAO,SAASC,GAIf,OAHOA,KAASD,IACRA,EAAAC,GAAUL,EAAGK,IAEdD,EAAOC,EACjB,CACA,EAMC,SAASC,EAAQC,GAChB,MAAc,MAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,GACM,OAANA,CACR,CASD,IAEKC,EASAC,EAiwBMC,EAaLC,EACAjF,EACAP,EA0cAyF,EAqBoBC,EAAMC,EACzBC,EAASC,EACTC,EAtBDC,GAEAC,GAcAC,GAyBAC,GA/wCFC,IAECd,EAAY,wBASZC,EAAWN,GAAQ,SAASoB,GAE/B,MAAO,UAVM,WAEN,IADP,IAAIC,EAAOC,UAAWC,EAAQ,EAAGC,EAASH,EAAK,KACtCE,KAASF,GACRG,EAAAA,EAAOC,QAAQJ,EAAKE,GAAQF,IAAOE,IAEtC,OAAAC,CACV,CAIsBC,EAASL,GAAO,IAAIM,cAEtC,WAAY,KAGZ,KAAM,KAGN,oBAAqB,SAGrB,oBAAqB,SAGrB,eAAgB,OAGhB,2BAA4B,cAE5B,8CAA+C,IAC5C,GACP,IAES,SAASN,EAAK5E,GAChB,IAAAmF,EACA,KAAEP,KAAOzC,GAEZ,GADAA,EAASyC,IAAO,EACZ5E,IAAWmF,EAAeP,EAAInG,MAAOoF,IAC/B1B,EAAAyC,GAAOO,EAAc,GAAM5C,EAAM4C,EAAc,SAGrD,IACOhD,EAAAyC,GAAO,IAAIQ,SAAS,IAAKtB,EAASc,GAA3B,CAAiCrC,EACvD,OAAa8C,GAAK,CAIf,OAAOlD,EAASyC,EACnB,GAGKU,GAAgB,SAAUC,EAAWC,GAOjC,OANFD,EAAUE,GACdF,EAAUG,OAAShF,EAAGiF,eAAgBH,GAAa,SACzCD,EAAAK,IAAML,EAAUE,EAAIF,EAAUG,QAExCH,EAAUK,IAAML,EAAUM,EAEpBN,CACT,EAMKO,GAAc,SAAUC,GAE3B,GAAKpF,EAAL,CAEA,IAAIqF,EAAUnG,EAAGoG,EAEbC,EAAUH,GAAO,GAaf,GAXDG,EAAQF,UAA0C,IAA9BE,EAAQF,SAASG,WACQ,QAA5CD,EAAQF,SAAS5G,SAASC,cACtB6G,EAAAF,SAAY,CAAEE,EAAQF,WAE9BE,EAAQE,QAAUF,EAAQF,SAC1BE,EAAQF,SAAY,OAMhBC,GAFND,EAAWE,EAAQF,UAAYtF,EAAG2F,IAAMH,EAAQE,SAAWvH,EAAaqH,EAAQI,YAAcJ,EAAQK,SAAa7F,EAAG8F,IAAM9F,EAAG+F,WAEzGzG,OAAU,CAM/B,IAJAU,EAAGgG,SAAUR,GACAvD,GAAA,EAGP9C,EAAI,EAAGA,EAAIoG,EAAMpG,IACtBa,EAAGiG,QAAQX,EAAUnG,GAAKqG,GAG3BxF,EAAGkG,YAAaV,EAChB,CA5BgC,CA6BnC,EA4GU,SAAAW,GAAeC,EAAGC,GACnB,OAAAD,EAAElB,IAAMmB,EAAEnB,GACjB,CAuBQ,SAAAoB,GAAoBC,EAAKC,GACjC,IAAIrH,EAAG0F,EAAW4B,EAClB,GAAKF,GAAOC,EAGX,IAFaC,EAAAzG,EAAG0G,SAAUF,GACpBD,EAAAvG,EAAG2G,QAAQJ,GACXpH,EAAI,EAAGA,EAAIsH,EAAWnH,OAAQH,IACnC,GAAKoH,IAAQvG,EAAG2G,QAAQF,EAAYtH,GAAIyH,KAAO,CAC9C/B,EAAY4B,EAAYtH,GACxB,KACA,CAGI,OAAA0F,CACP,CApIM3D,KAAcf,IACPe,EAAA,OAIdN,EAAO,eAAiB,EACxBA,EAAO,cAAgB,EACvBA,EAAO,cAAgB,EAmBvBA,EAAO,iBAAoBzC,EAAS0I,eAAeC,WAAY,2CAA4C,OAunBxG9G,EAAA+G,IAAM,UAAWC,MAAOC,WAAWC,OAAO,EAAG,GAGhDlH,EAAGmH,UAAY,WAAYhH,EAC3BH,EAAGoH,SAAW,UAAWjH,EACtBH,EAAAqH,aAAenK,EAAOW,mBAIrBmC,EAAGmH,WAAanH,EAAGqH,aAAerH,EAAGoH,WAC9B/D,EAKPlF,EAASC,cAAc,OAJzB+B,EAAMT,OAAS,UACf2D,EAAOkD,IAAM,UACVvG,EAAAmH,UAAYhH,EAAMmH,WAAajE,EAAOiE,SACtCtH,EAAAqH,WAAarH,EAAGmH,WAAanH,EAAGqH,YAKjCrH,EAAGmH,YAAcnH,EAAGoH,UAIlB9D,EAAS,6EACTjF,EAAMF,EAASC,cAAc,OAC7BN,EAAO,WAGI,IAFFO,EAAIkJ,QAGfvH,EAAGoH,UAAW,GAGUtH,EAAAE,EAAGmH,YAAcnH,EAAGoH,SAExBnH,GAAA,EAErBlB,WAAWqG,GACf,EAEG/G,EAAImJ,OAAS1J,EACbO,EAAIoJ,QAAU3J,EACVO,EAAAkC,aAAa,QAAS,OAEtBlC,EAAAqB,OAAS4D,8FACbjF,EAAIkI,IAAMjD,GAIUrD,GAAA,EAKtBD,EAAG+F,SAAW,0BACd/F,EAAG8F,IAAM9F,EAAG+F,SACZ/F,EAAGa,IAAMA,EAKTb,EAAG2B,IAAOA,GAAQ,EAClB3B,EAAG0H,EAAI7F,EAGP7B,EAAGY,MAASA,EAEZZ,EAAG2H,QAAUzH,EAQVF,EAAA2G,QAAU7D,GAAQ,SAASyD,GAE7B,OADAvE,EAAO4F,KAAOrB,EACPvE,EAAO4F,IAChB,IASI5H,EAAA2F,IAAM,SAASD,EAASI,GAC1B,MAAS,kBAAmBJ,EAAYA,EAAQrG,iBAAiByG,GAAO,EAC1E,EAOC9F,EAAG6H,aAAe,WASjB,OARK3K,EAAOsC,aAAeA,WAAY,uBAA0B,CAAE,GAAEsI,QACjE9H,EAAA6H,aAAe,SAAUE,GAC3B,OAAQA,GAAWvI,WAAYuI,GAAQD,OAC3C,EAEG9H,EAAG6H,aAAe7H,EAAGgI,IAGfhI,EAAG6H,aAAaI,MAAOC,KAAM9D,UACtC,EAQIpE,EAAAgI,IAAM,SAAUD,GACX,OAAAA,GAAQ9D,GAAQ8D,EACzB,EAWI/H,EAAAmI,WAAa,SAAUC,GAEzB,IAAIC,EAAQpE,GAAQmE,GAAiB,KAAS,EAKvC,OAJHC,EAAQ,IACHA,GAAA,GAGFA,CACT,EAMIrI,EAAAsI,aAAe,SAAUC,GAClB,OAAAA,GAAS3H,EAAO2H,EAC3B,EAOIvI,EAAAwI,UAAY1F,GAAQ,SAAU2F,GAChC,IAAI1K,GAAU0K,GAAiB,IAAK1K,MAAMqD,GACnC,MAAA,CACN2G,MAAOhK,GAASA,EAAM,GACtBuB,OAAQvB,GAASA,EAAM,GAE1B,IAEIiC,EAAA0G,SAAW,SAAUF,GAIvB,OAHMA,EAAIkC,QACTlC,EAAIkC,MAloBG,SAAY1F,EAAOwD,GAE3B,SAASmC,EAAkBC,GAC1B,IAAIC,EACA9K,EAAQ6K,EAAME,KAAK9F,EAAM+F,UAAUC,IACvC,GAAIjL,EAGI,OAFP8K,EAAQ9K,EAAO,GACfiL,GAAOH,EAAMvJ,OACNuJ,CAER,CAEG,IACAjC,EACAqC,EACAC,EACAC,EACAjG,EALAkG,EAAcpG,EAAM1D,OASpB0J,EAAM,EAGNvC,EAAa,GASjB,SAAS4C,IAGR,IAKItE,EAAGI,EAAGmE,EAAGnK,EAEToK,EAAMC,EAAUnB,EAAOoB,EAAQC,EAP/BC,GAAS,EAMT9E,EAAY,CAAE,EAKlB,IAAK1F,EAAI,EAAIA,EAAI8J,EAAY3J,OAAQH,IAGzBqK,GAFXD,EAAON,EAAa9J,IAEHoK,EAAKjK,OAAS,GAC/B+I,EAAQkB,EAAKR,UAAU,EAAGQ,EAAKjK,OAAS,GAC/BmK,EAAAG,SAASvB,EAAO,IACzBqB,EAAWG,WAAWxB,GAIlB/F,EAAwBxE,KAAKuK,IAAwB,MAAbmB,IAGvCzE,GAAKI,KAAawE,GAAA,GAKP,IAAXF,EAAwBE,GAAA,EAAiB5E,EAAA0E,GAInClH,EAAmBzE,KAAKuK,IAAwB,MAAbmB,IAIzCzE,GAAKI,GAAKmE,KAAaK,GAAA,GAKvBD,EAAW,EAAaC,GAAA,EAAiBxE,EAAAuE,GAInCpH,EAAwBxE,KAAKuK,IAAwB,MAAbmB,IAG9CF,GAAKnE,KAAawE,GAAA,GAKP,IAAXF,EAAwBE,GAAA,EAAiBL,EAAAG,GAG7BE,GAAA,EAMbA,IACJ9E,EAAU+B,IAAMA,EAEZ7B,IAAKF,EAAUE,EAAIA,GACnBI,IAAKN,EAAUM,EAAIA,GACnBmE,IAAKzE,EAAUyE,EAAIA,GAClBA,GAAMnE,GAAMJ,IAAIF,EAAUM,EAAI,GACf,IAAhBN,EAAUM,IAAUqB,EAAIsD,OAAQ,GACpCjF,EAAU2B,IAAMA,EAEhBC,EAAWsD,KAAKlF,GAEjB,CAQD,SAASmF,IAWR,IARArB,EAAkBzG,GAGEgH,EAAA,GAGZC,EAAA,kBAEK,CAUZ,GAPIjG,EAAAF,EAAMiH,OAAOjB,GAOH,kBAAVG,EAOC,GAAAlG,EAAQC,GACPgG,IACHD,EAAYc,KAAKb,GACGA,EAAA,GACZC,EAAA,wBAOf,IAAsB,MAANjG,EAMV,OALO8F,GAAA,EACHE,GACHD,EAAYc,KAAKb,YAOxB,GAAsB,MAANhG,EACVgG,GAAwChG,EAChCiG,EAAA,gBAKd,IAAsB,KAANjG,EAKV,OAJIgG,GACHD,EAAYc,KAAKb,YAQlBA,GAAwChG,CACxC,OAIN,GAAyB,cAAViG,EAIV,GAAU,MAANjG,EACHgG,GAAwChG,EAChCiG,EAAA,oBAKd,IAAsB,KAANjG,EAGV,OAFA+F,EAAYc,KAAKb,YAOjBA,GAAwChG,CACxC,MAGN,GAAyB,qBAAViG,EAIN,GAAAlG,EAAQC,QAAI,IAGC,KAANA,EAEV,gBAKQiG,EAAA,gBACDH,GAAA,CAEP,CAIKA,GAAA,CAGP,CACD,CAKD,OAAa,CAIZ,GAHAL,EAAkBxG,GAGd6G,GAAOI,EACH,OAAA3C,EAKRG,EAAM+B,EAAkBvG,GAGxB6G,EAAc,GAKQ,MAAlBrC,EAAIsD,OAAQ,IACTtD,EAAAA,EAAIrC,QAAQlC,EAAqB,YAUxC,CACD,CAiXa8H,CAAY3D,EAAI9G,OAAQ8G,IAE9BA,EAAIkC,KACb,EAOC1I,EAAGoK,WAAa,WACX,IAAAC,EACJ,IAAMxK,IAAWwK,EAAOlM,EAASkM,MAAQ,CACpC,IAAAC,EAAMnM,EAASC,cAAe,OACjCmM,EAAkB7J,EAAQ8J,MAAMC,QAChCC,EAAkBL,EAAKG,MAAMC,QAE9BH,EAAIE,MAAMC,QA7/BI,uJAigCd/J,EAAQ8J,MAAMC,QAAUlJ,EACxB8I,EAAKG,MAAMC,QAAUlJ,EAErB8I,EAAKM,YAAaL,GAClBzK,EAASyK,EAAIpL,YACbmL,EAAKrL,YAAasL,GAGTzK,EAAAgK,WAAYhK,EAAQ,IAG7Ba,EAAQ8J,MAAMC,QAAUF,EACxBF,EAAKG,MAAMC,QAAUC,CAErB,CACD,OAAO7K,GAAU,EACnB,EAKIG,EAAAiF,eAAiB,SAAU2F,GAI7B,KAAOA,KAAqBlJ,IAAoBb,EAAIgK,GAAK,CACxD,IAAIC,EAAgB9K,EAAGmI,WAnYzB,SAAoB4C,GAUnB,IAMI5L,EACA6L,EACAC,EACAC,EACAC,EACAC,EAqFuCC,EAhGvCC,EAA0B,0GAI1BC,EAAe,0CAgHnB,IAHAN,GADAD,EA5FA,SAA8BQ,GACzB,IAAAC,EACAC,EAAY,GACZC,EAAiB,GACjBC,EAAY,GACZC,EAAa,EACb7C,EAAM,EACN8C,GAAY,EAEhB,SAASC,IACJL,IACHC,EAAe5B,KAAK2B,GACRA,EAAA,GAEb,CAED,SAASM,IACJL,EAAe,KAClBC,EAAU7B,KAAK4B,GACfA,EAAiB,GAElB,CAGD,OAAa,CAGZ,GAAe,MAFNF,EAAAD,EAAIvB,OAAOjB,IAKZ,eAAA4C,KACGE,GACV,GAAgB,MAAXL,GAAqC,MAAjBD,EAAIxC,EAAM,GAAa,CACnC8C,GAAA,EACL9C,GAAA,MAEP,QACN,CACaA,GAAA,CA+BR,MA5BL,GAAe/F,EAAQwI,GAAS,CAI3B,GAAMD,EAAIvB,OAAOjB,EAAM,IAAM/F,EAASuI,EAAIvB,OAAOjB,EAAM,MAAW0C,EAAY,CACtE1C,GAAA,EACP,QACN,CAAA,GAA+B,IAAf6C,EAAkB,KAEtB7C,GAAA,EACN,QACN,CAEeyC,EAAA,GAEf,MAAA,GAA0B,MAAXA,EACII,GAAA,OACnB,GAA0B,MAAXJ,EACII,GAAA,MACnB,IAA0B,MAAXJ,EAAgB,SAGnBzC,GAAA,EACP,QACL,CAAA,GAA4B,MAAXyC,GAA4C,MAAxBD,EAAIvB,OAAOjB,EAAM,GAAc,CACnD8C,GAAA,EACL9C,GAAA,EACP,QACA,EAED0C,GAAwBD,EACjBzC,GAAA,CAHN,CAID,CACD,CAkBmBiD,CAAqBlB,IACGzL,OAGvCH,EAAI,EAAGA,EAAI8L,EAAyB9L,IAkBpC,GAFiBgM,GAfrBD,EAAeF,EAAkB7L,IAeC+L,EAAa5L,OAAS,GApCd+L,EAsCJF,EArClCG,EAAwBxN,KAAKuN,IAAOxB,WAAWwB,IAAM,GACrDE,EAAazN,KAAKuN,IAIX,MAANA,GAAqB,OAANA,GAAsB,OAANA,EAgChC,CAUA,GATID,EAAAD,EACPD,EAAagB,MAQc,IAAxBhB,EAAa5L,OACT,OAAA8L,EAYR,GADeF,EAAAA,EAAaiB,KAAK,KAC3BnM,EAAG6H,aAAcqD,GAKhB,OAAAE,CAvBN,CA4BK,MAAA,OACP,CAiNoCgB,CAAYxB,IAE/ClJ,EAAiBkJ,GAAuBE,GAAgBjJ,EAAM0F,KAC9D,CAED,OAAO7F,EAAiBkJ,EAC1B,EAYI5K,EAAAqM,OAAS,SAAU7F,GACjB,IAAAC,EACJ,GAAKD,EAIJ,IAAA,IAAUrH,EAAI,EAAGmN,GAFJ7F,EAAAzG,EAAG0G,SAAUF,IAEQlH,OAAQH,EAAImN,EAAKnN,IAClDyF,GAAe6B,EAAYtH,GAAKqH,EAAIjI,OAG/B,OAAAkI,CACT,EAECzG,EAAGqM,OAAOnH,IAAMN,GAEb5E,EAAAuM,kBAAoB,SAAU9F,EAAYpI,GACvC,GAACoI,EAAWnH,OAAZ,CACL,IAAIuF,EACH1F,EACAqN,EACAlN,EACAmN,EACAC,EACAC,EACAC,EACAC,EAt1BqBC,EAAYC,EAAaC,EAAUC,EACrDC,EAAsBC,EAAOC,EAu1B7BC,EAAYhP,EAAK2B,EAAG+G,IACpBuG,EAAMtN,EAAG2B,IAwBb,GAtBS+K,EAAAW,EAAUX,QAAUrO,EAAI6C,GAExByL,EAAAU,EAAUV,QA/yBX,SAAatO,EAAKkI,EAAKC,GAC3B,IAAA3B,EAiBG,OAhBD2B,GAAOD,IAEZC,GADMA,EAAAnI,EAAK2B,EAAG+G,IAAKwG,OACN/G,EAAIA,EAAIlH,OAAS,KAGnBuF,EAAAyB,GAAmBC,EAAKC,MAG7BD,EAAAvG,EAAG2G,QAAQJ,GACZlI,EAAA2B,EAAG+G,IAAK2F,OAASnG,EACjBlI,EAAA2B,EAAG+G,IAAK4F,OAAS9H,EAEhBA,EAAUK,KACAN,GAAAC,EAAWA,EAAU2B,IAAIjI,QAGnCsG,CACP,CA4xB6B2I,CAAYnP,EAAKqO,EAAQjG,EAAW,GAAGD,KAG/DmG,GAAUA,EAAOnG,MAAQC,EAAY,GAAID,OAI7CqG,EAAe5L,IAAiB5C,EAAIiJ,UAAYqF,EAAOzH,IAAM,GAAMoI,KAGlEX,EAAOc,QAAS,EAIXd,EAAOzH,KAAOoI,IACFb,EAAAE,MAKbF,EAOL,IALAhG,EAAWiH,KAAMvH,IAGDsG,EAAAhG,GADhBnH,EAASmH,EAAWnH,QACiB,GAE/BH,EAAI,EAAGA,EAAIG,EAAQH,IAEnB,IADL0F,EAAY4B,EAAYtH,IACT+F,KAAOoI,EAAM,CAS1Bb,EAJGhG,EAJJ+F,EAAIrN,EAAI,KAKN0N,GAAeH,IAAW1M,EAAG2G,QAAS9B,EAAU+B,QAh4B/BkG,EAi4BLrG,EAAY+F,GAAItH,IAj4BC6H,EAi4BIlI,EAAUK,IAj4BD8H,EAi4BMM,EAj4BIL,EAi4BCxG,EAAY+F,GAAIiB,OAh4BtEP,SAAsBC,SAAOC,SAGX,aAAlBvM,EAAIC,UACFgM,EAAa,IACjBM,EAAcJ,EAAW,GAKzBG,GAHUJ,EAAcC,IACxBE,EAAcS,KAAKC,IAAId,EAAa,GAAK,MAIrCG,IACHE,GAAS,GAAMD,GAGhBE,EAAcN,EAAaK,GAG5BC,EAAeJ,EAAW,EACzBW,KAAKE,KAAKf,EAAaC,GACvBD,EAGKM,EAAcJ,GA02BDvG,EAAY+F,GAGZ3H,EAEjB,KACA,CAIE4H,IAEWG,EAAA5M,EAAG2G,QAAS8F,EAAc7F,KAEzCyG,EAAUX,OAASE,EACnBS,EAAUV,OAASF,EAEdG,IAAiBF,GAClB1M,EAAA8N,OAAQzP,EAAKoO,GAEjBzM,EAAG2H,QAAStJ,GA1EqB,CA4EpC,EAEI2B,EAAA8N,OAAS,SAAUzP,EAAKoO,GACtB,IAAAsB,EACJ1P,EAAIkI,IAAMkG,EAAc7F,IAGQ,kBAA3B6F,EAAcjG,IAAI+B,OACtBwF,EAAY1P,EAAImM,MAAMjD,MACtBlJ,EAAImM,MAAMjD,MAASlJ,EAAIa,YAAc,EAAK,KAIrCb,EAAIa,YAAc,IACtBb,EAAImM,MAAMjD,MAAQwG,GAGtB,EAEI/N,EAAAgO,OAAS,SAAU3P,GACrB,IAAIc,EAAGqH,EAAK8B,EACRvK,GAAQ,EACRwP,EAAOlP,EAAM2B,EAAG+G,IAAKwG,KAEzB,IAAMpO,EAAI,EAAGA,EAAIoO,EAAKjO,SAAWvB,EAAOoB,IAGvC,IAFAqH,EAAM+G,EAAKpO,IAEDO,QAAWM,EAAG6H,aAAcrB,EAAIuB,SAAaO,EAAetI,EAAGsI,aAAc9B,EAAI+B,OAA3F,CAIsB,YAAjBD,IACE9B,EAAA8B,GAGCvK,EAAAyI,EACR,KAPC,CAUK,OAAAzI,CACT,EAECiC,EAAGiO,UAAY,SAAUC,EAASC,EAAQ3I,GACrC,IAAA4I,EAAiBC,EAAUC,EAAcC,EAEzCC,EAAaL,GAA4C,YAAlCA,EAAOzP,SAASC,cACvC0O,EAAYa,EAASlO,EAAG+G,KAEvBsG,EAAU9G,MAAQ3G,GAAa4F,EAAQe,OAC3C8G,EAAU9G,IAAMnG,EAAWqO,KAAMP,EAAS,OACrCb,EAAU9G,IACdjG,EAAWmO,KAAMP,EAASnN,EAASsM,EAAU9G,KAE/B/F,EAAAiO,KAAMP,EAASnN,KAI1BsM,EAAU3N,SAAWE,GAAa4F,EAAQ9F,SAAWM,EAAGmH,WAAa+G,EAAQxO,UAC/D0O,EAAAhO,EAAWqO,KAAMP,EAAS,UAC5Cb,EAAU3N,OAAS0O,EACJG,GAAA,GAGhBlB,EAAUE,KAAO,GAEZiB,IACJnB,EAAUqB,KAAM,EAz4BT,SAAsBlQ,EAASiI,GACnC,IAAAtH,EAAGmN,EAAKhO,EAAQoB,EAKhBiP,EAAUnQ,EAAQoQ,qBAAsB,UAE5C,IAAMzP,EAAI,EAAGmN,EAAMqC,EAAQrP,OAAQH,EAAImN,EAAKnN,KAC3Cb,EAASqQ,EAASxP,IACVa,EAAG+G,KAAO,GACTrH,EAAApB,EAAO+B,aAAc,YAI7BoG,EAAWsD,KAAM,CAChBrK,SACAqI,MAAOzJ,EAAO+B,aAAc,SAC5BkI,KAAMjK,EAAO+B,aAAc,QAC3B9B,MAAOD,EAAO+B,aAAc,UAI/B,CAm3BuBwO,CAAAV,EAAQd,EAAUE,OAGpCF,EAAU3N,QACH2O,EAAA,CACV3O,OAAQ2N,EAAU3N,OAClBnB,MAAO6B,EAAWqO,KAAMP,EAAS,UAGxBb,EAAAE,KAAKxD,KAAMsE,IAErBC,GAAgBxO,GAA0BuN,EAAU9G,MAAQpF,EAASrD,KAAKuP,EAAU3N,QAAU,OAGxE2N,EAAU9G,KAAQD,GAAmB+G,EAAU9G,IAAK8H,IAAcA,EAASvE,QACvFuE,EAAA3O,QAAU,KAAO2N,EAAU9G,IACpC8H,EAAS3F,MAAMqB,KAAK,CACnBnD,IAAKyG,EAAU9G,IACfpB,EAAG,EACHqB,IAAK6H,MAIIhB,EAAU9G,KACrB8G,EAAUE,KAAKxD,KAAM,CACpBrK,OAAQ2N,EAAU9G,IAClBhI,MAAO,OAIT8O,EAAUV,OAAS,KACnBU,EAAUX,OAAS9M,EAITyN,EAAAyB,YAAeN,GAAgBH,IAAarO,EAAGmH,WAAgBmH,IAAiBtO,EAAGoH,UAExFmH,GAAgBvO,EAAGmH,YAAckG,EAAUyB,YAC1CV,GACO9N,EAAAmO,KAAMP,EAASlN,EAAYoN,GACtCF,EAAQxO,OAAS,IAEHc,EAAAiO,KAAMP,EAASlN,IAI3BqM,EAAUyB,YAAczB,EAAU3N,UAAa2N,EAAU9G,KAAO2H,EAAQ3H,KAAS2H,EAAQ3H,MAAQvG,EAAG2G,QAAQ0G,EAAU9G,QACnG,OAAlB8G,EAAU9G,IACb2H,EAAQzN,gBAAgB,OAExByN,EAAQ3H,IAAM8G,EAAU9G,KAI1B8G,EAAU0B,QAAS,CACrB,EAEI/O,EAAAiG,QAAU,SAASiI,EAAS1I,GAC1B,IAAA6H,EACA2B,EAAUxJ,EAAQK,UAAYL,EAAQI,WAGpCsI,EAASlO,EAAG+G,MACRmH,EAAAlO,EAAG+G,IAAO,IAGRsG,EAAAa,EAASlO,EAAG+G,KAKlBiI,GAAW3B,EAAU4B,SAAWlP,KAIhCsN,EAAU0B,SAAUvJ,EAAQI,YACjC5F,EAAGiO,UAAWC,EAASA,EAAQzP,WAAY+G,GAGtC6H,EAAUyB,UAGfzB,EAAU4B,OAASlP,EAlhCrB,SAA6B1B,GACxB,IAAA6Q,EACAC,EAAcnP,EAAGgO,OAAQ3P,GACzB+Q,GAAY,EACK,YAAhBD,IACQC,EAAArP,EACPoP,IACeD,EAAAlP,EAAGqM,OAAQ8C,GAC3BnP,EAAAuM,kBAAmB2C,EAAkB7Q,KAGrCA,EAAA2B,EAAG+G,IAAKkI,OAASG,CACtB,CAogCCC,CAAoBnB,GAIvB,EAEClO,EAAGgG,SAAW,WACP/D,IAAcT,GAAcG,IAAQzE,EAAO0E,mBAtkCrCJ,GAAA,EACZG,EAAMzE,EAAO0E,iBACbH,EAAW,CAAA,EACXC,EAAkB,CAAA,EAElB1B,EAAG2B,IAAMA,GAAO,EAEhBE,EAAM0F,MAAQoG,KAAK2B,IAAIpS,EAAOqS,YAAc,EAAG7O,EAAQ8O,aACvD3N,EAAM4N,OAAS9B,KAAK2B,IAAIpS,EAAOwS,aAAe,EAAGhP,EAAQiP,cAEnD9N,EAAA+N,GAAK/N,EAAM0F,MAAQ,IACnB1F,EAAAgO,GAAKhO,EAAM4N,OAAS,IAEjB1P,EAAA,CAAE8B,EAAM4N,OAAQ5N,EAAM0F,MAAO5F,GAAMwK,KAAK,KAE3CtK,EAAAiO,GAAK9P,EAAGoK,aACdvI,EAAMkO,IAAMlO,EAAMiO,GAyjCpB,EAGM9P,EAAGqH,YACPjC,GAAclF,EACdF,EAAGiG,QAAU/F,IAMR2D,GAAW3G,EAAO2F,YAAc,QAAU,WAE1CiB,GAAM,WACL,IAAAnE,EAAaxB,EAASwB,YAAc,GAExCoE,GAAUhF,WAAW+E,GAAoB,YAAfnE,EAA2B,IAAO,KACvDxB,EAASkM,OACbrK,EAAGgQ,YACUzM,EAAAA,GAAcM,GAAS/F,KAAK6B,KAExCJ,aAAcwE,IAIpB,EAEOA,GAAUhF,WAAW+E,GAAK3F,EAASkM,KAAO,EAAI,IAyB9CrG,GAAkBtD,EAAQiP,aAS9BnN,EAAItF,EAAQ,UA9BYsG,EAsBT,WACFhC,EAAAmM,KAAK2B,IAAIpS,EAAOqS,YAAc,EAAG7O,EAAQ8O,eAAiB3N,EAAM0F,OAAS7G,EAAQiP,eAAiB3L,GAC9GA,GAAkBtD,EAAQiP,aACrBnO,GACJxB,EAAGgQ,UAER,EA5BiCvM,EA8BW,GA5BpCG,EAAQ,WACP,IAAAqM,EAAY,IAAAjJ,KAAUrD,EAEtBsM,EAAOxM,EACAC,EAAA3E,WAAW6E,EAAOH,EAAOwM,IAEzBvM,EAAA,SAGhB,EAEW,WACNC,MAAgBqD,KAEXtD,IACMA,EAAA3E,WAAW6E,EAAOH,GAElC,IAYOtF,EAAAA,EAAU,mBAAoB2F,KAIpC9D,EAAGoF,YAAcA,GAEjBpF,EAAGgQ,SAAW5K,GACdpF,EAAGkG,YAAchG,EAGjBkF,GAAY8K,EAAIlQ,EAEhB9C,EAAOoE,eAAiB,CACvBtB,KACA+J,KAAM,SAAS5F,GACV,IAAAgM,EAAOhM,EAAKiM,QACQ,mBAAbpQ,EAAGmQ,GACbnQ,EAAGmQ,GAAMlI,MAAMjI,EAAImE,IAEftD,EAAAsP,GAAQhM,EAAK,GACblC,GACHjC,EAAGgQ,SAAU,CAAEnK,UAAU,IAG3B,GAGK,KAAAxE,GAAcA,EAAW/B,QAC/BpC,EAAOoE,eAAeyI,KAAK1I,EAAW+O,SAIvClT,EAAOkI,YAAcA,GAKpBiL,EAAAC,QAAiBlL,GAOZpF,EAAGqH,aACRzG,EAAO,cA5sCC,SAAmB2H,EAAMgI,GAG7BpQ,IAAAA,EAAQ,IAAIjD,EAAOsT,MAUhB,OATPrQ,EAAMsH,QAAU,WACf7G,EAAO2H,IAAS,EAChBnD,IACH,EACEjF,EAAMqH,OAAS,WACP5G,EAAA2H,GAAyB,IAAhBpI,EAAMoH,MACtBnC,IACH,EACEjF,EAAMoG,IAAMgK,EACL,SACP,CA8rCwBE,CAAkB,aAAc,2IAG1D,CAx7CC,CAw7CIvT,OAAQiB;;ACpgDb,IAAIuS,EAAM,6BACNC,EAAY,mDACZC,EAA2B,oBAAVJ,MAAwB,CAAChG,MAAO,CAAC,kBAAmB,IAAM,IAAIgG,MAC/EK,EAAoB,eAAgBD,EAAQpG,MAC5CsG,EAAyB,oBAAqBF,EAAQpG,MACtDuG,EAAc,oBAAqBH,EAAQpG,MAC3CwG,EAAmD,iBAAvBJ,EAAQK,WACpCC,EAAqBN,EAAQvQ,aAC7B8Q,EAAqBP,EAAQrQ,aAC7B6Q,GAAkB,EAoCtB,SAASC,EAAehT,EAAKkJ,EAAOkI,GAEnC,IAAI6B,EAnCI,wEAmC4B/J,GAAS,GAnCwC,cAmCrCkI,GAAU,GAnC8C,iBAsCpGyB,EAAmBzC,KAAKpQ,EAAK,SAAWiT,GACxBH,EAAA1C,KAAKpQ,EAAK,MAAOiT,EAEtC,CAEA,SAASC,EAAalT,EAAKmT,GAGtBnT,EAAIoT,aACPD,EAASnT,GAEEU,WAAAwS,EAAc,IAAKlT,EAAKmT,EAErC,CAEA,SAASE,EAAOC,GACX,IAAAnH,EA/BL,SAAkBmH,GAIjB,IAHI,IACA5C,EADAvE,EAAQoH,iBAAiBD,GAAIE,WAE7BC,EAAQ,CAAA,EACgC,QAApC/C,EAAS4B,EAAU7H,KAAK0B,KAC/BsH,EAAM/C,EAAO,IAAMA,EAAO,GAEpB,OAAA+C,CACR,CAuBaC,CAASJ,GACjBK,EAAML,EAAGjB,GAIT,GAHJlG,EAAM,cAAgBA,EAAM,eAAiB,QAGxCwH,EAAI3T,IAAK,CAET,GAAwB,SAAxBmM,EAAM,cACT,OAID,IACEwH,EAAIC,UACLpB,IACCrG,EAAM,mBAEP,MAED,CAGG,IAACwH,EAAI3T,IAAK,CACb2T,EAAI3T,IAAM,IAAImS,MAAMmB,EAAGpK,MAAOoK,EAAGlC,QACjCuC,EAAI3T,IAAIqB,OAASwR,EAAmBzC,KAAKkD,EAAI,oBAAsBA,EAAGjS,OACtEsS,EAAI3T,IAAIkI,IAAM2K,EAAmBzC,KAAKkD,EAAI,iBAAmBA,EAAGpL,IAIhE4K,EAAmB1C,KAAKkD,EAAI,eAAgBA,EAAGpL,KAC3CoL,EAAGjS,QACNyR,EAAmB1C,KAAKkD,EAAI,kBAAmBA,EAAGjS,QAGpC2R,EAAAM,EAAIA,EAAGF,cAAgBE,EAAGpK,MAAOoK,EAAGO,eAAiBP,EAAGlC,QAGnEkC,EAAGjS,SACNiS,EAAGjS,OAAS,IAET,KAiCN,SAAuBiS,GACtB,IAAI1I,EAAc,CACjBkJ,IAAK,SAAaC,GACjB,OAAOT,EAAGjB,GAAKrS,IAAI+T,GAAc,MACjC,EACD5L,IAAK,SAAa6B,EAAO+J,GAIjB,OAHPT,EAAGjB,GAAKrS,IAAI+T,GAAc,OAAS/J,EACnC8I,EAAmB1C,KAAKkD,EAAK,YAAcS,EAAO/J,GAClDqJ,EAAOC,GACAtJ,CACP,GAEKgK,OAAAC,eAAeX,EAAI,MAAO1I,GAC1BoJ,OAAAC,eAAeX,EAAI,aAAc,CACvCQ,IAAK,WAAqB,OAAAlJ,EAAYkJ,IAAI,aAAgB,IAEpDE,OAAAC,eAAeX,EAAI,SAAU,CACnCQ,IAAK,WAAqB,OAAAlJ,EAAYkJ,IAAI,SAAY,EACtD3L,IAAK,SAAU+L,GAAa,OAAAtJ,EAAYzC,IAAI+L,EAAI,SAAY,GAE9D,CApDGC,CAAcb,EACd,OAAQc,GACJvV,OAAOwV,SACVA,QAAQC,KAAK,iCAEd,CACD,EAlGF,SAA4BhB,GAC3B,GAAIA,EAAGjS,SAAWsR,GAAsB9T,OAAOkI,YAAa,CACvD,IAAApF,EAAK9C,OAAOkI,YAAY8K,EAEvByB,EAAG3R,EAAG+G,KAAQ4K,EAAG3R,EAAG+G,IAAIkI,QAE5BjP,EAAGiG,QAAQ0L,EAAI,CAAC9L,UAAU,IAGtB8L,EAAG3R,EAAG+G,IAAI2F,SAEXiF,EAAA3R,EAAG+G,IAAI+H,WAAY,EACtB9O,EAAGiG,QAAQ0L,EAAI,CAAC9L,UAAU,KAI3B8L,EAAGV,WAAaU,EAAG3R,EAAG+G,IAAI2F,QAAUiF,EAAGpL,GACvC,CACF,CAkFCqM,CAAmBZ,EAAI3T,KAEvBsT,EAAGnH,MAAMqI,gBAAkB,SAAab,EAAI3T,IAAI4S,YAAce,EAAI3T,IAAIkI,KAAKhC,QAAQ,KAAM,OAAU,KACnGoN,EAAGnH,MAAMsI,mBAAqBtI,EAAM,oBAAsB,SAC1DmH,EAAGnH,MAAMuI,iBAAmB,YAC5BpB,EAAGnH,MAAMwI,iBAAmB,cAExB,aAAalV,KAAK0M,EAAM,eACd+G,EAAAS,EAAI3T,KAAK,WACjB2T,EAAI3T,IAAIoT,aAAeE,EAAGpK,OAASyK,EAAI3T,IAAI6T,cAAgBP,EAAGlC,OACjEkC,EAAGnH,MAAMyI,eAAiB,UAE1BtB,EAAGnH,MAAMyI,eAAiB,MAE9B,IAEKtB,EAAAnH,MAAMyI,eAAiBzI,EAAM,cAAcjG,QAAQ,OAAQ,QAAQA,QAAQ,OAAQ,aAG1EgN,EAAAS,EAAI3T,KAAK,SAAUA,GAC/BgT,EAAeM,EAAItT,EAAIoT,aAAcpT,EAAI6T,cAC3C,GACA,CAuCA,SAASgB,EAAI9T,EAAM+T,GACd,IAAAC,GAAiBhC,IAAoBhS,EAIzC,GAHA+T,EAAOA,GAAQ,GACf/T,EAAOA,GAAQ,MAEV0R,IAA2BqC,EAAKlB,WAAclB,EAC3C,OAAA,EAIK,QAAT3R,EACIA,EAAAjB,SAASyQ,qBAAqB,OACX,iBAATxP,EACVA,EAAAjB,SAASkB,iBAAiBD,GACrB,WAAYA,IACxBA,EAAO,CAACA,IAIT,IAAA,IAASD,EAAI,EAAGA,EAAIC,EAAKE,OAAQH,IAC3BC,EAAAD,GAAGuR,GAAOtR,EAAKD,GAAGuR,IAAQ,CAC9BuB,SAAUkB,EAAKlB,UAETP,EAAAtS,EAAKD,IAGTiU,IACHjV,SAASkM,KAAKnM,iBAAiB,QAAQ,SAAUyG,GACvB,QAArBA,EAAE0O,OAAOC,SACZJ,EAAIvO,EAAE0O,OAAQ,CACbpB,SAAUkB,EAAKlB,UAGjB,IAAE,GACeb,GAAA,EACXhS,EAAA,OAIJ+T,EAAKI,SACRrW,OAAOgB,iBAAiB,SAAUgV,EAAIM,KAAK,KAAMpU,EAAM,CACtD6S,SAAUkB,EAAKlB,WAGlB,CAEAiB,EAAIrC,kBAAoBA,EACxBqC,EAAIpC,uBAAyBA,EA9D7B,WACU,SAAA2C,EAAiB9B,EAAIxB,GAC7B,OAAOwB,EAAGjB,IAAQiB,EAAGjB,GAAKrS,MAAiB,QAAT8R,GAA2B,WAATA,GAAqBwB,EAAGjB,GAAKrS,IAAMsT,CACvF,CACIb,IACa4C,iBAAAC,UAAUtT,aAAe,SAAU8P,GACnD,OAAOe,EAAmBzC,KAAKgF,EAAiBvL,KAAMiI,GAAOA,EAChE,EAEEuD,iBAAiBC,UAAUpT,aAAe,SAAU4P,EAAM9H,GAClD,OAAA8I,EAAmB1C,KAAKgF,EAAiBvL,KAAMiI,GAAOA,EAAMyD,OAAOvL,GAC7E,EAEA,CAmDAwL,aAEiBX,GCjOjBhW,OAAO4W,IAAM,CAAA,EAEb5W,OAAO4W,IAAIC,OAAS,CAChBvW,GAAI,CACAwW,KAAQ,iBACR,aAAc,qBACdC,IAAO,qBACPC,KAAQ,wBCPhBhX,OAAO4W,IAAIK,SAAW,CAClB1W,KAAM,WACF,IAAI2W,EAAOlM,KACPmM,EAAalW,SAASkB,iBAAiB,iBAC3C+U,EAAKE,SAAWnW,SAASoW,cAAc,0BACvCH,EAAKI,QAAUrW,SAASoW,cAAc,yBAEtC,IAAA,IAASpV,EAAI,EAAGA,EAAIkV,EAAW/U,SAAUH,EAAG,CACpC,IAAAsV,EAAYJ,EAAWlV,GAC3BiV,EAAKM,aAAaD,EACrB,CACJ,EAEDC,aAAc,SAAUD,GACpB,IAAIL,EAAOlM,KAEPyM,EAAYF,EAAUF,cAAc,0BAC9BI,EAAApU,aAAa,gBAAiB,SAE9BoU,EAAAzW,iBAAiB,SAAS,WAChC,IACI0W,EAAQR,EAAKS,QAAQJ,GACzBL,EAAKU,WAAWL,EAFDvM,KAEsB0M,EACjD,GACK,EAEDC,QAAS,SAAUJ,GAER,OADKA,EAAUF,cAAc,sBAEvC,EAEDO,WAAY,SAAUL,EAAWM,EAAUH,GACvC,IAAIR,EAAOlM,KACP8M,EAAaD,EAASR,cAAc,wBACpCU,EAAgBD,EAAW3U,aAAa,uBACxC6U,EAAiBF,EAAW3U,aAAa,wBAEzC0U,EAASI,UAAUC,SAAS,YAC5BhB,EAAKE,SAASe,OAAQ,EACtBjB,EAAKI,QAAQa,OAAQ,EACfT,EAAAO,UAAUG,OAAO,kBACdP,EAAAI,UAAUG,OAAO,WACjBP,EAAAxU,aAAa,gBAAiB,SACvCyU,EAAWO,UAAYN,EAEd9W,SAAAqX,oBAAoB,UAAWpB,EAAKqB,mBACpCtX,SAAAqX,oBAAoB,UAAWpB,EAAKsB,gBACpCvX,SAAAqX,oBAAoB,QAASpB,EAAKsB,gBAE3C3W,YAAW,WACD6V,EAAAO,UAAUG,OAAO,UAC1B,GAAE,OAEHlB,EAAKE,SAASe,OAAQ,EACtBjB,EAAKI,QAAQa,OAAQ,EACfT,EAAAO,UAAUQ,IAAI,WAEpB5W,YAAW,WACD6V,EAAAO,UAAUQ,IAAI,iBACvB,GAAE,GAEMZ,EAAAI,UAAUQ,IAAI,WACdZ,EAAAxU,aAAa,gBAAiB,QACvCyU,EAAWO,UAAYL,EAGd/W,SAAAD,iBAAiB,UAAWkW,EAAKqB,mBACjCtX,SAAAD,iBAAiB,UAAWkW,EAAKsB,gBACjCvX,SAAAD,iBAAiB,QAASkW,EAAKsB,gBAE/C,EAEDD,kBAAmB,SAAUG,GACrB,GAAc,WAAdA,EAAMC,IAAkB,CACpB,IAAApB,EAAYtW,SAASoW,cAAc,iBACnCQ,EAAWN,EAAUF,cAAc,0BACnCK,EAAQH,EAAUF,cAAc,uBAEpCrX,OAAO4W,IAAIK,SAASW,WAAWL,EAAWM,EAAUH,EACvD,CACJ,EACDc,eAAgB,SAAUE,GAClB,IAAAnB,EAAYtW,SAASoW,cAAc,iBACnCQ,EAAWN,EAAUF,cAAc,0BACnCK,EAAQH,EAAUF,cAAc,uBAE/BK,EAAMQ,SAASQ,EAAMvC,SAAY0B,EAASK,SAASQ,EAAMvC,SAC1DnW,OAAO4W,IAAIK,SAASW,WAAWL,EAAWM,EAAUH,EAE3D,GAIL1X,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIK,SAAS1W,MACxB,IAAG,GC/FHP,OAAO4W,IAAIgC,SAAW,CAClBC,eAAgB,KAEhBtY,KAAM,WACFyK,KAAK8N,cACR,EAEDA,aAAc,WAIV,IAHA,IACIC,EAAe9X,SAASkB,iBAAiB,6BAEpCF,EAAI,EAAGA,EAAI8W,EAAa3W,SAAUH,EAAG,CACtC,IAAA+W,EAAcD,EAAa9W,GAJxB+I,KAKFiO,cAAcD,EACtB,CACJ,EAEDC,cAAe,SAAUD,GACrB,IAAI9B,EAAOlM,KAECgO,EAAAhY,iBAAiB,SAAS,SAASyG,GAEvCzH,OAAOsC,WAAWtC,OAAO4W,IAAIC,OAAOvW,GAAG0W,MAAMpM,SAC7CnD,EAAEyR,iBAGN,IAAIC,EAAmBnO,KAAKoO,mBAExBJ,IAAgB9B,EAAK2B,gBACrB3B,EAAKmC,cAAcnC,EAAK2B,gBACjB7Y,OAAA4W,IAAI0C,OAAOC,gBAEdrC,EAAK2B,gBACL3B,EAAKmC,cAAcnC,EAAK2B,gBAG5B3B,EAAKsC,aAAaxO,KAAMmO,GAGxC,GACK,EAEDK,aAAc,SAAUR,EAAaG,GACtBnO,KAGN6N,eAAiBG,EAEVA,EAAAf,UAAUQ,IAAI,WAGTU,EAAAlB,UAAUQ,IAAI,WACdU,EAAAlB,UAAUQ,IAAI,WAE/B5W,YAAW,KACUsX,EAAAlB,UAAUG,OAAO,UAAS,GAC5C,KAGIpY,OAAA4W,IAAI0C,OAAOG,aAGdzZ,OAAO4W,IAAI8C,QACJ1Z,OAAA4W,IAAI8C,OAAOC,QAIVX,EAAA3V,aAAa,gBAAiB,QAG1CpC,SAASD,iBAAiB,UAAWhB,OAAO4W,IAAIgC,SAASgB,0BAA0B,EACtF,EAEDA,yBAA0B,SAAUnS,GAC1B,MAAAoS,EAAU5Y,SAASoW,cAAc,qCAClC5P,EAAE0O,OAAO2D,QAAQ,8BAAiCrS,EAAE0O,OAAO2D,QAAQ,sBAC7D9Z,OAAA4W,IAAIgC,SAASS,cAAcQ,GAC3B7Z,OAAA4W,IAAI0C,OAAOC,cAClBtY,SAASqX,oBAAoB,UAAWtY,OAAO4W,IAAIgC,SAASgB,0BAA0B,GAE7F,EAGDP,cAAe,SAAUL,GACVhO,KACN6N,eAAiB,KACVG,EAAAf,UAAUG,OAAO,WACjBY,EAAA3V,aAAa,gBAAiB,SAI9B2V,EAAAI,mBAAmBnB,UAAUQ,IAAI,aAC7C5W,YAAW,KACKmX,EAAAI,mBAAmBnB,UAAUG,OAAO,WACpCY,EAAAI,mBAAmBnB,UAAUG,OAAO,YAAW,GAC5D,IAGN,EAGD2B,cAAe,YACQ,GAAG/M,MAAMuE,KAAKtQ,SAASkB,iBAAiB,+BAAiC,IAE/E6X,SAAQ,SAAShB,GACtBA,EAAYf,UAAUC,SAAS,aAEnBc,EAAAI,mBAAmBnB,UAAUQ,IAAI,aAC7C5W,YAAW,KACKmX,EAAAI,mBAAmBnB,UAAUG,OAAO,WACpCY,EAAAI,mBAAmBnB,UAAUG,OAAO,YAAW,GAC5D,MAIKY,EAAAf,UAAUG,OAAO,WAGjBY,EAAA3V,aAAa,gBAAiB,QACtD,GACK,GAILrD,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIgC,SAASrY,MACxB,IAAG,GC9HHP,OAAO4W,IAAIqD,OAAS,CAChBC,aAAc,SAAUjH,EAAM9H,EAAOgP,GAE7B,IAAAC,EAEJ,GAAID,EAAM,CACF,IAAAE,MAAWvQ,KACVuQ,EAAAC,QAAQD,EAAKtQ,UAAgB,GAALoQ,EAAQ,GAAG,GAAG,KACjCC,EAAA,aAAaC,EAAKE,aAC/B,MAEaH,EAAA,GAGdnZ,SAASgZ,OAAShH,EAAK,IAAI9H,EAAMiP,EAAQ,UAC5C,EAEDI,WAAY,SAAUvH,GAIlB,IAHA,IAAIwH,EAASxH,EAAO,IAChByH,EAAKzZ,SAASgZ,OAAOU,MAAM,KAEvB1Y,EAAE,EAAEA,EAAIyY,EAAGtY,OAAOH,IAAK,CAG3B,IAFI,IAAA+D,EAAI0U,EAAGzY,GAEY,MAAhB+D,EAAE+G,OAAO,IACZ/G,EAAIA,EAAE6F,UAAU,EAAE7F,EAAE5D,QAGxB,GAA0B,IAAtB4D,EAAE4U,QAAQH,GACV,OAAOzU,EAAE6F,UAAU4O,EAAOrY,OAAO4D,EAAE5D,OAE1C,CACM,OAAA,IACV,GCjCLpC,OAAO4W,IAAIiE,UAAY,CACnBta,KAAM,WACFyK,KAAK8P,gBACR,EAEDA,eAAgB,WAIZ,IAHA,IACIC,EAAY9Z,SAASkB,iBAAiB,uCAEjCF,EAAI,EAAGA,EAAI8Y,EAAU3Y,SAAUH,EAAG,CACnC,IAAA+Y,EAAWD,EAAU9Y,GAJlB+I,KAKFiQ,eAAeD,EACvB,CACJ,EAEDC,eAAgB,SAAUC,GAElBA,EAAWjD,UAAUC,SAAS,oBADvBlN,KAEFmQ,aAAaD,GACPA,EAAAjD,UAAUQ,IAAI,kBAEhC,EAED0C,aAAc,SAAUD,GAIpB,IAHA,IACIE,EAAWF,EAAW/Y,iBAAiB,0BAElCF,EAAI,EAAGA,EAAImZ,EAAShZ,SAAUH,EAAG,CAClC,IAAAoZ,EAAUD,EAASnZ,GAJhB+I,KAKFsQ,WAAWJ,EAAYG,EAC/B,CACJ,EAEDC,WAAY,SAAUJ,EAAYG,GAC1B,IAAAE,EAAQF,EAAQvB,QAAQ,wBAExByB,EAAMtD,UAAUC,SAAS,WACjBmD,EAAAhY,aAAa,gBAAiB,QAE9BgY,EAAAhY,aAAa,gBAAiB,SAKlCgY,EAAAra,iBAAiB,SAAS,WAC1Bua,EAAMtD,UAAUC,SAAS,YACnBqD,EAAAtD,UAAUG,OAAO,WACfiD,EAAAhY,aAAa,gBAAiB,WAEhCkY,EAAAtD,UAAUQ,IAAI,WACZ4C,EAAAhY,aAAa,gBAAiB,QAEtD,GACK,GAILrD,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIiE,UAAUta,MACzB,IAAG,GC3DHP,OAAO4W,IAAI4E,KAAO,CACdjb,KAAM,WAIF,IAHA,IACIkb,EAAiBxa,SAASkB,iBAAiB,YAEtCF,EAAI,EAAGA,EAAIwZ,EAAerZ,SAAUH,EAAG,CACxC,IAAAyZ,EAAgBD,EAAexZ,GAJ5B+I,KAKF2Q,SAASD,EACjB,CACJ,EAEDC,SAAU,SAAUD,GAChB,IACIE,EACAC,EAAc,IAAI7b,OAAO8b,OAAON,KAAKO,WACrCC,EAAUrP,WAAW+O,EAAcvY,aAAa,kBAChD8Y,EAAStP,WAAW+O,EAAcvY,aAAa,iBAC/C+Y,EAAUvP,WAAW+O,EAAcvY,aAAa,kBAChDgZ,EAAeT,EAAcvY,aAAa,2BAE3C,MAAOgZ,GAA0E,KAAjBA,IAChDA,EAAA,QAInBP,EAAO,IAAI5b,OAAO8b,OAAON,KAAKY,IAAIV,EAAe,CAC7CW,OAAQ,CACJC,IAAKL,EACLM,IAAKL,GAETM,KAAMR,EACNS,YAAa,SAAWN,IAnBjBnR,KAuBN0R,QAAQd,EAAMC,EAAaH,EACnC,EAGDiB,WAAY,SAAUf,EAAMC,EAAae,GACrC,IACIC,EAOAC,EAAYnQ,WAAWiQ,EAAWG,WAGlCC,EAAW,CACXV,IAHW3P,WAAWiQ,EAAWK,UAIjCV,IAAKO,GAGTD,EAAS,IAAI7c,OAAO8b,OAAON,KAAK0B,OAAO,CACnCC,SAAUH,EACVI,IAAKxB,EACLyB,KAhBO,CACP3T,IAAK,2CAJEsB,KAsBNsS,iBAAiB1B,EAAMC,EAAagB,EAAQD,EAIpD,EAqBDU,iBAAkB,SAAU1B,EAAMC,EAAagB,EAAQD,GAC/C,IAAAW,EAAgB,yDACGX,EAAWY,KAAM,mCAE5BZ,EAAWa,OAASb,EAAWc,YAAa,YAC5Cd,EAAWe,QAAS,yBACNf,EAAWgB,YAAc,KAAOhB,EAAWgB,YAAc,yBAC7DhB,EAAWiB,KAAO,iDAERjB,EAAWkB,MAAO,wPAY3CjB,EAAAta,YAAY,SAAS,WACxBsZ,EAAYkC,WAAWR,GACX1B,EAAAmC,KAAKpC,EAAMiB,EACnC,GACK,EAGDH,QAAS,SAAUd,EAAMC,EAAaH,GAClC,IAAIxE,EAAOlM,KACPiT,EAAU,IAAIC,eACdC,EAAUzC,EAAcvY,aAAa,gBACrCib,EAAa1C,EAAcvY,aAAa,sBAE5C,GAAG,MAAOgb,GAA2D,KAAZA,EAC7CF,EAAAD,KAAK,MAAOG,GAAS,GAE7BF,EAAQ3T,OAAS,WACb,GAAI2T,EAAQI,QAAU,KAAOJ,EAAQI,OAAS,IAAK,CAE/C,IAAIC,EAAOC,KAAKC,MAAMP,EAAQQ,cAG9B,GAAI,MAAOH,EACP,IAAA,IAASrc,EAAI,EAAGA,EAAIqc,EAAKlc,OAAQH,IAAK,CAC9B2a,IAAAA,EAAa0B,EAAKrc,GAEtBiV,EAAKyF,WAAWf,EAAMC,EAAae,EACtC,CAER,CACjB,EAEYqB,EAAQ1T,QAAU,WAE9B,EAEY0T,EAAQS,eAEF,MAAON,GAAoE,KAAfA,EAAmB,CACjF,IAAAO,EAAaJ,KAAKC,MAAMJ,GAC5B,GAAG,MAAOO,EAAkD,CACpD,IAAA/B,EAAa+B,EAAW,GAEzBC,MAAMhD,EAAKS,OAAOC,QAAUsC,MAAMhD,EAAKS,OAAOE,QAC7CX,EAAKiD,UAAU,CAACvC,IAAK3P,WAAWiQ,EAAWK,UAAWV,IAAK5P,WAAWiQ,EAAWG,aAErF7F,EAAKyF,WAAWf,EAAMC,EAAae,EACtC,CACJ,CACJ,GAIL5c,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAI4E,KAAKjb,MACpB,IAAG,GCnKHP,OAAO4W,IAAIkI,MAAQ,CACfve,KAAM,WAIF,IAHA,IACIwa,EAAY9Z,SAASkB,iBAAiB,cAEjCF,EAAI,EAAGA,EAAI8Y,EAAU3Y,SAAUH,EAAG,CACnC,IAAA+Y,EAAWD,EAAU9Y,GAJlB+I,KAKF+T,UAAU/D,EAClB,CACJ,EAED+D,UAAW,SAAU/D,GACjB,IACIgE,EAAahE,EAAS7X,aAAa,cAEvBnD,OAAO4W,IAAIqD,OAAOO,WAAWwE,KAG3BA,IACLhE,EAAA/C,UAAUQ,IAAI,cAPhBzN,KASFiU,WAAWjE,EAAUgE,GAC1B/d,SAASoW,cAAc,UAAU/J,MAAM4R,aAAelE,EAASmE,aAEtE,EAEDF,WAAY,SAAUjE,EAAUgE,GAG5BhE,EAAS1N,MAAMiF,OAAS,OACxB,IAAI6M,EAAepE,EAASmE,aAEnBnE,EAAA1N,MAAMiF,OAAS6M,EAAe,KAL5BpU,KAONqU,WAAWrE,EAAUgE,EAC7B,EAEDK,WAAY,SAAUrE,EAAUgE,GAG5B,IAFI,IAAAM,EAAiBtE,EAAS7Y,iBAAiB,oBAEtCF,EAAI,EAAGA,EAAIqd,EAAeld,SAAUH,EAAG,CACxBqd,EAAerd,GAGrBjB,iBAAiB,SAAS,WACpCga,EAASuE,QAAS,EAEbvU,KAAKiN,UAAUC,SAAS,uBAKzBlY,OAAO4W,IAAIqD,OAAOC,aAAa8E,EAAYA,EAAY,KAHvDhf,OAAO4W,IAAIqD,OAAOC,aAAa8E,EAAYA,EAAY,GAK3E,GACS,CACJ,GAILhf,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIkI,MAAMve,MACrB,IAAG,GAEHP,OAAOgB,iBAAiB,UAAU,WACvBhB,OAAA4W,IAAIkI,MAAMve,MACrB,IAAG,GChEHP,OAAO4W,IAAI4I,MAAQ,CACfjf,KAAM,WACFyK,KAAKyU,WACR,EAEDA,UAAW,WACH,IAAA1E,EAAY9Z,SAASoW,cAAc,mBAElC0D,IAKLA,EAAU1D,cAAc,wBAAwBqI,SAAW,WACvD3E,EAAU1D,cAAc,wBAAwBlM,MAAQH,KAAK2U,MAAM,GAAG1M,IAClF,EACK,GAILjT,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAI4I,MAAMjf,MACrB,IAAG,8FCrBD,IAAUqf,EAAQC,EAARD,EAcQ,oBAAV5f,OAAwBA,OAASgL,EAdvB6U,EAc6B,WAIjD,SAASC,IAAc,CAEvB,IAAIC,EAAQD,EAAUrJ,UAiFf,OA/EDsJ,EAAAza,GAAK,SAAU0a,EAAWC,GACzB,GAACD,GAAcC,EAAf,CAIL,IAAIC,EAASlV,KAAKmV,QAAUnV,KAAKmV,SAAW,CAAA,EAExCC,EAAYF,EAAQF,GAAcE,EAAQF,IAAe,GAMtD,OAJoC,GAAtCI,EAAUxF,QAASqF,IACtBG,EAAUvT,KAAMoT,GAGXjV,IAVN,CAWH,EAEM+U,EAAAM,KAAO,SAAUL,EAAWC,GAC3B,GAACD,GAAcC,EAAf,CAIAjV,KAAA1F,GAAI0a,EAAWC,GAGpB,IAAIK,EAAatV,KAAKuV,YAAcvV,KAAKuV,aAAe,CAAA,EAMjD,OAJaD,EAAYN,GAAcM,EAAYN,IAAe,IAE1DC,IAAa,EAErBjV,IAXN,CAYH,EAEM+U,EAAAS,IAAM,SAAUR,EAAWC,GAC/B,IAAIG,EAAYpV,KAAKmV,SAAWnV,KAAKmV,QAASH,GAC9C,GAAMI,GAAcA,EAAUhe,OAA9B,CAGI,IAAA+E,EAAQiZ,EAAUxF,QAASqF,GAKxB,OAJY,GAAd9Y,GACOiZ,EAAAK,OAAQtZ,EAAO,GAGpB6D,IANN,CAOH,EAEM+U,EAAAW,UAAY,SAAUV,EAAW/Y,GACrC,IAAImZ,EAAYpV,KAAKmV,SAAWnV,KAAKmV,QAASH,GAC9C,GAAMI,GAAcA,EAAUhe,OAA9B,CAIYge,EAAAA,EAAUpT,MAAM,GAC5B/F,EAAOA,GAAQ,GAIf,IAFA,IAAI0Z,EAAgB3V,KAAKuV,aAAevV,KAAKuV,YAAaP,GAEhD/d,EAAE,EAAGA,EAAIme,EAAUhe,OAAQH,IAAM,CACrC,IAAAge,EAAWG,EAAUne,GACZ0e,GAAiBA,EAAeV,KAItCjV,KAAAwV,IAAKR,EAAWC,UAEdU,EAAeV,IAGfA,EAAAlV,MAAOC,KAAM/D,EACvB,CAEM,OAAA+D,IArBN,CAsBH,EAEA+U,EAAMa,OAAS,kBACN5V,KAAKmV,eACLnV,KAAKuV,WACd,EAEOT,CAEP,EAjG2C3M,EAAOC,QAE9CD,EAAAC,QAAiByM,IAGjBD,EAAOE,UAAYD;;;;;4CCVrB,SAAU7f,EAAQ6f,GAKuB1M,EAAOC,QAE9CD,EAAAC,QAAiByM,IAGjB7f,EAAO6gB,QAAUhB,GAGrB,CAbE,CAaE7f,QAAQ,WAMZ,SAAS8gB,EAAc3V,GACjB,IAAA4V,EAAMpU,WAAYxB,GAGtB,OAD0C,GAA5BA,EAAMyP,QAAQ,OAAegE,MAAOmC,IAChCA,CACnB,CAID,IAAIC,EAA6B,oBAAXxL,QAFtB,WAAkB,EAGhB,SAAUyL,GACRzL,QAAQ0L,MAAOD,EACnB,EAIIE,EAAe,CACjB,cACA,eACA,aACA,gBACA,aACA,cACA,YACA,eACA,kBACA,mBACA,iBACA,qBAGEC,EAAqBD,EAAa/e,OAwBtC,SAASyS,EAAUwM,GACb,IAAA/T,EAAQoH,iBAAkB2M,GAMvB,OALD/T,GACM0T,EAAA,kBAAoB1T,EAC5B,6FAGGA,CACR,CAID,IAEIgU,EAFAC,GAAU,EAyCd,SAASV,EAASQ,GAShB,GAzCF,WAEE,IAAKE,EAAL,CAGUA,GAAA,EAQN,IAAAnU,EAAMnM,SAASC,cAAc,OACjCkM,EAAIE,MAAMjD,MAAQ,QAClB+C,EAAIE,MAAMkU,QAAU,kBACpBpU,EAAIE,MAAMmU,YAAc,QACxBrU,EAAIE,MAAMoU,YAAc,kBACxBtU,EAAIE,MAAMqU,UAAY,aAElB,IAAAxU,EAAOlM,SAASkM,MAAQlM,SAASwC,gBACrC0J,EAAKM,YAAaL,GACd,IAAAE,EAAQuH,EAAUzH,GAEtBkU,EAA8D,KAA7C7Q,KAAKmR,MAAOd,EAAcxT,EAAMjD,QACjDwW,EAAQS,eAAiBA,EAEzBnU,EAAKrL,YAAasL,EAvBjB,CAwBF,IAQqB,iBAARiU,IACHA,EAAApgB,SAASoW,cAAegK,IAI3BA,GAAuB,iBAARA,GAAqBA,EAAK9Y,SAA/C,CAII,IAAA+E,EAAQuH,EAAUwM,GAGjB,GAAiB,QAAjB/T,EAAMuU,QACT,OA5FJ,WASE,IARA,IAAI3T,EAAO,CACT7D,MAAO,EACPkI,OAAQ,EACRF,WAAY,EACZG,YAAa,EACbsP,WAAY,EACZC,YAAa,GAEL9f,EAAE,EAAGA,EAAImf,EAAoBnf,IAErCiM,EADkBiT,EAAalf,IACT,EAEjB,OAAAiM,CACR,CA8EU8T,GAGT,IAAI9T,EAAO,CAAA,EACXA,EAAK7D,MAAQgX,EAAKrf,YAClBkM,EAAKqE,OAAS8O,EAAKlC,aAKnB,IAHA,IAAI8C,EAAc/T,EAAK+T,YAAiC,cAAnB3U,EAAMqU,UAGjC1f,EAAE,EAAGA,EAAImf,EAAoBnf,IAAM,CACvC,IAAAigB,EAAcf,EAAalf,GAC3BkJ,EAAQmC,EAAO4U,GACfnB,EAAMpU,WAAYxB,GAEtB+C,EAAMgU,GAAiBtD,MAAOmC,GAAc,EAANA,CACvC,CAEG,IAAAoB,EAAejU,EAAKkU,YAAclU,EAAKmU,aACvCC,EAAgBpU,EAAKqU,WAAarU,EAAKsU,cACvCC,EAAcvU,EAAKwU,WAAaxU,EAAKyU,YACrCC,EAAe1U,EAAK2U,UAAY3U,EAAKgR,aACrCwC,EAAcxT,EAAK4U,gBAAkB5U,EAAK6U,iBAC1CC,EAAe9U,EAAK+U,eAAiB/U,EAAKgV,kBAE1CC,EAAuBlB,GAAeX,EAGtC8B,EAAatC,EAAcxT,EAAMjD,QACjB,IAAf+Y,IACHlV,EAAK7D,MAAQ+Y,GAETD,EAAuB,EAAIhB,EAAeT,IAG5C,IAAA2B,EAAcvC,EAAcxT,EAAMiF,QAa/B,OAZc,IAAhB8Q,IACHnV,EAAKqE,OAAS8Q,GAEVF,EAAuB,EAAIb,EAAgBU,IAG5C9U,EAAAmE,WAAanE,EAAK7D,OAAU8X,EAAeT,GAC3CxT,EAAAsE,YAActE,EAAKqE,QAAW+P,EAAgBU,GAE9C9U,EAAA4T,WAAa5T,EAAK7D,MAAQoY,EAC1BvU,EAAA6T,YAAc7T,EAAKqE,OAASqQ,EAE1B1U,CAtDN,CAuDF,CAEM2S,OAAAA,CAEP,kGCvME,SAAU7gB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACf7f,wBCbJ,SAAUA,EAAQ6f,GAOuB1M,EAAOC,QAE9CD,EAAAC,QAAiByM,IAGjB7f,EAAOsjB,gBAAkBzD,GAG7B,CAfE,CAeC7f,QAAQ,WAGT,IAAIujB,EAAkB,WAChB,IAAAC,EAAYxjB,OAAOyjB,QAAQhN,UAE/B,GAAK+M,EAAU5Y,QACN,MAAA,UAGT,GAAK4Y,EAAUF,gBACN,MAAA,kBAKT,IAFA,IAAII,EAAW,CAAE,SAAU,MAAO,KAAM,KAE9BzhB,EAAE,EAAGA,EAAIyhB,EAASthB,OAAQH,IAAM,CACpC,IACA0hB,EADSD,EAASzhB,GACA,kBACjB,GAAAuhB,EAAWG,GACP,OAAAA,CAEV,CACL,CApBwB,GAsBf,OAAA,SAA0BtC,EAAMuC,GAC9B,OAAAvC,EAAMkC,GAAiBK,EAClC,CAEA,qBD1BI5jB,EAAO6jB,aAAehE,EACpB7f,EACAA,EAAOsjB,gBAIV,CAzBD,CAyBCtjB,QAAQ,SAAkBA,EAAQsjB,GAIrC,IAAIQ,EAAQ,CAKZA,OAAe,SAAU5a,EAAGC,GAC1B,IAAA,IAAU+L,KAAQ/L,EACbD,EAAAgM,GAAS/L,EAAG+L,GAEV,OAAAhM,CACT,EAIA4a,OAAe,SAAU/C,EAAK3T,GACjB,OAAA2T,EAAM3T,EAAQA,GAAQA,CACnC,GAII2W,EAAaC,MAAMvN,UAAUzJ,MAGjC8W,EAAMG,UAAY,SAAU1e,GACrB,OAAAye,MAAME,QAAS3e,GAEXA,EAGJA,QACI,GAGuB,iBAAPA,GAAwC,iBAAdA,EAAInD,OAG9C2hB,EAAWxS,KAAMhM,GAInB,CAAEA,EACX,EAIAue,EAAMK,WAAa,SAAUC,EAAK7e,GAC5B,IAAA4B,EAAQid,EAAIxJ,QAASrV,IACN,GAAd4B,GACCid,EAAA3D,OAAQtZ,EAAO,EAEvB,EAIA2c,EAAMO,UAAY,SAAUhD,EAAMuC,GAChC,KAAQvC,EAAK9f,YAAc8f,GAAQpgB,SAASkM,MAErCmW,GADLjC,EAAOA,EAAK9f,WACP+hB,EAAiBjC,EAAMuC,GACnB,OAAAvC,CAGb,EAKAyC,EAAMQ,gBAAkB,SAAUjD,GAC3B,MAAe,iBAARA,EACHpgB,SAASoW,cAAegK,GAE1BA,CACT,EAKAyC,EAAMS,YAAc,SAAU7L,GACxB,IAAAiL,EAAS,KAAOjL,EAAMrN,KACrBL,KAAM2Y,IACH3Y,KAAA2Y,GAAUjL,EAEpB,EAIAoL,EAAMU,mBAAqB,SAAUC,EAAOb,GAElCE,EAAAA,EAAMG,UAAWQ,GACzB,IAAIC,EAAU,GAyBP,OAvBDD,EAAAzK,SAAS,SAAUqH,GAElB,GAAGA,aAAgBsD,YAIxB,GAAMf,EAAN,CAMKN,EAAiBjC,EAAMuC,IAC1Bc,EAAQ7X,KAAMwU,GAKhB,IAFI,IAAAuD,EAAavD,EAAKlf,iBAAkByhB,GAE9B3hB,EAAE,EAAGA,EAAI2iB,EAAWxiB,OAAQH,IAC5ByiB,EAAA7X,KAAM+X,EAAW3iB,GAV1B,MAFCyiB,EAAQ7X,KAAMwU,EAcpB,IAESqD,CACT,EAIAZ,EAAMe,eAAiB,SAAUC,EAAQC,EAAYC,GACnDA,EAAYA,GAAa,IAErB,IAAArB,EAASmB,EAAOrO,UAAWsO,GAC3BE,EAAcF,EAAa,UAExBD,EAAArO,UAAWsO,GAAe,WAC3B,IAAAve,EAAUwE,KAAMia,GACpB5iB,aAAcmE,GAEd,IAAIS,EAAOC,UACPge,EAAQla,KACNA,KAAAia,GAAgBpjB,YAAY,WACzB8hB,EAAA5Y,MAAOma,EAAOje,UACdie,EAAOD,EACf,GAAED,EACP,CACA,EAIAlB,EAAMqB,SAAW,SAAU7Q,GACzB,IAAI7R,EAAaxB,SAASwB,WACP,YAAdA,GAA0C,eAAdA,EAE/BZ,WAAYyS,GAEHrT,SAAAD,iBAAkB,mBAAoBsT,EAEnD,EAKAwP,EAAMsB,SAAW,SAAU9W,GACzB,OAAOA,EAAIjH,QAAS,eAAe,SAAUxG,EAAOE,EAAIskB,GACtD,OAAOtkB,EAAK,IAAMskB,CACtB,IAAK/d,aACL,EAEA,IAAIkO,EAAUxV,EAAOwV,QA4CdsO,OAtCPA,EAAMwB,SAAW,SAAUC,EAAaC,GACtC1B,EAAMqB,UAAU,WACV,IAAAM,EAAkB3B,EAAMsB,SAAUI,GAClCE,EAAW,QAAUD,EACrBE,EAAgB1kB,SAASkB,iBAAkB,IAAMujB,EAAW,KAC5DE,EAAc3kB,SAASkB,iBAAkB,OAASsjB,GAClDhB,EAAQX,EAAMG,UAAW0B,GAC1BE,OAAQ/B,EAAMG,UAAW2B,IACxBE,EAAkBJ,EAAW,WAC7BK,EAAS/lB,EAAO+lB,OAEdtB,EAAAzK,SAAS,SAAUqH,GACvB,IAEI/Y,EAFA0d,EAAO3E,EAAKle,aAAcuiB,IAC5BrE,EAAKle,aAAc2iB,GAEjB,IACQxd,EAAA0d,GAAQzH,KAAKC,MAAOwH,EAC/B,OAAS9E,GAMR,YAJK1L,GACHA,EAAQ0L,MAAO,iBAAmBwE,EAAW,OAASrE,EAAK4E,UAC3D,KAAO/E,GAGV,CAED,IAAIgF,EAAW,IAAIX,EAAalE,EAAM/Y,GAEjCyd,GACIA,EAAAzH,KAAM+C,EAAMmE,EAAWU,EAEtC,GAEA,GACA,EAIOpC,CAEP,6HE9OE,SAAU9jB,EAAQ6f,GAcX,GAAkC1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,IACAC,IACAC,0BCrBN,SAAUrmB,EAAQ6f,GASuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,MAIJnmB,EAAOsmB,SAAWtmB,EAAOsmB,UAAY,CAAA,EACrCtmB,EAAOsmB,SAASC,KAAO1G,EACnB7f,EACAA,EAAO6gB,SAIZ,CAxBD,CAwBC7gB,QAAQ,SAAkBA,EAAQ6gB,GAI5B,SAAA0F,EAAMlF,EAAMpQ,GACnBjG,KAAKgG,QAAUqQ,EACfrW,KAAKiG,OAASA,EAEdjG,KAAKwb,QACN,CAED,IAAIzG,EAAQwG,EAAK9P,UAuEV,OArEPsJ,EAAMyG,OAAS,WACRxb,KAAAgG,QAAQ1D,MAAM6P,SAAW,WACzBnS,KAAAgG,QAAQ3N,aAAc,cAAe,QAC1C2H,KAAKyb,EAAI,EACTzb,KAAKkI,MAAQ,EACblI,KAAKgG,QAAQ1D,MAAOtC,KAAKiG,OAAOyV,YAAe,CACjD,EAEA3G,EAAM4G,QAAU,WAEd3b,KAAK4b,WACA5b,KAAAgG,QAAQ1D,MAAM6P,SAAW,GAC1B,IAAA0J,EAAO7b,KAAKiG,OAAOyV,WAClB1b,KAAAgG,QAAQ1D,MAAOuZ,GAAS,GACxB7b,KAAAgG,QAAQ1D,MAAMwZ,UAAY,GAC1B9b,KAAAgG,QAAQzN,gBAAgB,cAC/B,EAEAwc,EAAMc,QAAU,WACT7V,KAAAkD,KAAO2S,EAAS7V,KAAKgG,QAC5B,EAEM+O,EAAAgH,YAAc,SAAUN,GAC5Bzb,KAAKyb,EAAIA,EACTzb,KAAKgc,eACLhc,KAAKic,eAAgBR,EACvB,EAGM1G,EAAAiH,aAAejH,EAAMmH,iBAAmB,WAC5C,IAAIC,EAA2C,QAA1Bnc,KAAKiG,OAAOyV,WAAuB,aAAe,cAClE1b,KAAAmL,OAASnL,KAAKyb,EAAIzb,KAAKkD,KAAMiZ,GAChCnc,KAAKkD,KAAK7D,MAAQW,KAAKiG,OAAOmW,SAClC,EAEMrH,EAAAkH,eAAiB,SAAUR,GAE/B,IAAIY,EAAwC,SAA3Brc,KAAKiG,OAAOyV,WAAwB,GAAI,EAErDY,EAAYtc,KAAKiG,OAAO3I,QAAQif,gBAClCd,EAAIY,GAAerc,KAAKiG,OAAO/C,KAAKmE,WAAarH,KAAKkD,KAAK7D,OAC3Doc,EAAIY,EAEDrc,KAAAgG,QAAQ1D,MAAMwZ,UAAY,cAC7B9b,KAAKiG,OAAOuW,iBAAkBF,GAAc,GAChD,EAEAvH,EAAM0H,OAAS,WACRzc,KAAAgG,QAAQiH,UAAUQ,IAAI,eACtBzN,KAAAgG,QAAQzN,gBAAgB,cAC/B,EAEAwc,EAAM6G,SAAW,WACV5b,KAAAgG,QAAQiH,UAAUG,OAAO,eACzBpN,KAAAgG,QAAQ3N,aAAc,cAAe,OAC5C,EAKM0c,EAAA2H,UAAY,SAAUxU,GAC1BlI,KAAKkI,MAAQA,EACblI,KAAKic,eAAgBjc,KAAKyb,EAAIzb,KAAKiG,OAAO0W,eAAiBzU,EAC7D,EAEA6M,EAAM3H,OAAS,WACbpN,KAAKgG,QAAQzP,WAAWO,YAAakJ,KAAKgG,QAC5C,EAEOuV,CAEP,0CC5GE,SAAUvmB,EAAQ6f,GAKuB1M,EAAOC,QAE9CD,EAAAC,QAAiByM,KAGjB7f,EAAOsmB,SAAWtmB,EAAOsmB,UAAY,CAAA,EACrCtmB,EAAOsmB,SAASsB,MAAQ/H,IAG5B,CAdE,CAcC7f,QAAQ,WAGX,SAAS4nB,EAAO3W,GACdjG,KAAKiG,OAASA,EACTjG,KAAA6c,aAAoC,QAArB5W,EAAOyV,WAC3B1b,KAAK8c,MAAQ,GACb9c,KAAK8W,WAAa,EAClB9W,KAAKuH,OAAS,CACf,CAED,IAAIwN,EAAQ6H,EAAMnR,UA4CX,OA1CDsJ,EAAAgI,QAAU,SAAUC,GAKnB,GAJAhd,KAAA8c,MAAMjb,KAAMmb,GACZhd,KAAA8W,YAAckG,EAAK9Z,KAAK4T,WAC7B9W,KAAKuH,OAAS9B,KAAK2B,IAAK4V,EAAK9Z,KAAK6T,YAAa/W,KAAKuH,QAE1B,GAArBvH,KAAK8c,MAAM1lB,OAAc,CAC5B4I,KAAKyb,EAAIuB,EAAKvB,EACV,IAAAwB,EAAcjd,KAAK6c,aAAe,aAAe,cAChD7c,KAAAkd,YAAcF,EAAK9Z,KAAM+Z,EAC/B,CACH,EAEAlI,EAAMiH,aAAe,WACf,IAAAmB,EAAYnd,KAAK6c,aAAe,cAAgB,aAChDO,EAAWpd,KAAKqd,cAChBC,EAAaF,EAAWA,EAASla,KAAMia,GAAc,EACrDI,EAAavd,KAAK8W,YAAe9W,KAAKkd,YAAcI,GACxDtd,KAAKmL,OAASnL,KAAKyb,EAAIzb,KAAKkd,YAAcK,EAAavd,KAAKiG,OAAOmW,SACrE,EAEArH,EAAMsI,YAAc,WAClB,OAAOrd,KAAK8c,MAAO9c,KAAK8c,MAAM1lB,OAAS,EACzC,EAEA2d,EAAM0H,OAAS,WACRzc,KAAA8c,MAAM9N,SAAS,SAAUgO,GAC5BA,EAAKP,QACT,GACA,EAEA1H,EAAM6G,SAAW,WACV5b,KAAA8c,MAAM9N,SAAS,SAAUgO,GAC5BA,EAAKpB,UACT,GACA,EAEA7G,EAAMyI,gBAAkB,WACtB,OAAOxd,KAAK8c,MAAM1K,KAAK,SAAU4K,GAC/B,OAAOA,EAAKhX,OAChB,GACA,EAEO4W,CAEP,0CCvEE,SAAU5nB,EAAQ6f,GASuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,MAIJnmB,EAAOsmB,SAAWtmB,EAAOsmB,UAAY,CAAA,EACrCtmB,EAAOsmB,SAASmC,iBAAmB5I,EAC/B7f,EACAA,EAAO6jB,cAIZ,CAxBD,CAwBC7jB,QAAQ,SAAkBA,EAAQ8jB,GA8K9B,MAxKK,CAEZ/D,eAAuB,WAChB/U,KAAK0d,cAIV1d,KAAK0d,aAAc,EACnB1d,KAAK2d,cAAgB,EACrB3d,KAAK4d,UACP,EAEA7I,QAAgB,WACd/U,KAAK6d,iBACL7d,KAAK8d,0BAEL,IAAIC,EAAY/d,KAAKyb,EAMrB,GAJAzb,KAAKge,mBACLhe,KAAKie,iBACLje,KAAKke,OAAQH,GAER/d,KAAK0d,YAAc,CACtB,IAAIxD,EAAQla,KACZme,uBAAuB,WACrBjE,EAAM0D,SACZ,GACG,CACH,EAEA7I,eAAuB,WACrB,IAAI0G,EAAIzb,KAAKyb,EAERzb,KAAK1C,QAAQ8gB,YAAcpe,KAAK8c,MAAM1lB,OAAS,IAClDqkB,EAAI3C,EAAMuF,OAAQ5C,EAAGzb,KAAK2c,gBAC1BlB,GAAKzb,KAAK2c,eACV3c,KAAKse,eAAgB7C,IAGlBzb,KAAAue,cAAe9C,EAAGzb,KAAK0d,aAC5B1d,KAAKwe,qBACP,EAEMzJ,cAAgB,SAAU0G,EAAGgD,GACjChD,GAAKzb,KAAK0e,eAEVjD,EAAIzb,KAAK1C,QAAQqhB,aAAelD,EAAIA,EAChC,IAAAmD,EAAa5e,KAAKwc,iBAAkBf,GAGnCzb,KAAA6e,OAAOvc,MAAMwZ,UAAY2C,EAC5B,eAAiBG,EAAa,QAAU,cAAgBA,EAAa,GACzE,EAEA7J,oBAA4B,WACtB,IAAA+J,EAAa9e,KAAK+e,OAAO,GAC7B,GAAMD,EAAN,CAGA,IAAIE,GAAahf,KAAKyb,EAAIqD,EAAW3T,OACjC8T,EAAWD,EAAYhf,KAAKkf,YAChClf,KAAKmf,cAAe,SAAU,KAAM,CAAEF,EAAUD,GAH/C,CAIH,EAEAjK,yBAAiC,WACzB/U,KAAK8c,MAAM1lB,SAGZ4I,KAAAyb,GAAKzb,KAAKof,cAAcjU,OAC7BnL,KAAKqf,SAAW,EAChBrf,KAAKie,iBACP,EAEMlJ,iBAAmB,SAAU5C,GAC5B,OAAAnS,KAAK1C,QAAQif,gBAEqD,IAA5D9W,KAAKmR,MAASzE,EAAWnS,KAAKkD,KAAKmE,WAAe,KAAmB,IAGvE5B,KAAKmR,MAAOzE,GAAa,IAEpC,EAEM4C,OAAS,SAAUgJ,IAEN/d,KAAKsf,eAClB7Z,KAAKmR,MAAgB,IAAT5W,KAAKyb,IAAahW,KAAKmR,MAAmB,IAAZmH,IAEvC/d,KAAA2d,gBAGF3d,KAAK2d,cAAgB,IACxB3d,KAAK0d,aAAc,SACZ1d,KAAKuf,gBAEZvf,KAAKie,iBACLje,KAAKmf,cAAe,SAAU,KAAM,CAAEnf,KAAKwf,gBAE/C,EAEMzK,eAAiB,SAAU0G,GAE3B,IAAAgE,EAAYzf,KAAK0e,eAAiBjD,EACtCzb,KAAK0f,YAAa1f,KAAK2f,iBAAkBF,MAEzC,IAAIG,EAAW5f,KAAKkD,KAAKmE,YAAeoU,EAAIzb,KAAK2c,eAAiB3c,KAAK0e,gBACvE1e,KAAK0f,YAAa1f,KAAK6f,gBAAiBD,EAAU,EACpD,EAEA7K,YAAoB,SAAU+H,EAAOgD,EAAK5X,GACxC,IAAA,IAAUjR,EAAI,EAAGA,EAAI6lB,EAAM1lB,OAAQH,IAAM,CACnC+lB,IAAAA,EAAOF,EAAM7lB,GACb8oB,EAAYD,EAAM,EAAI5X,EAAQ,EAClC8U,EAAKN,UAAWqD,GAChBD,GAAO9C,EAAK9Z,KAAK4T,UAClB,CACH,EAEM/B,cAAgB,SAAU+H,GAC9B,GAAMA,GAAUA,EAAM1lB,OAGtB,IAAA,IAAUH,EAAI,EAAGA,EAAI6lB,EAAM1lB,OAAQH,IAC3B6lB,EAAA7lB,GAAGylB,UAAW,EAExB,EAIA3H,iBAAyB,WACvB/U,KAAKyb,GAAKzb,KAAKqf,SACVrf,KAAAqf,UAAYrf,KAAKggB,mBACxB,EAEMjL,WAAa,SAAUkL,GAC3BjgB,KAAKqf,UAAYY,CACnB,EAEAlL,kBAA0B,WACxB,OAAO,EAAI/U,KAAK1C,QAAS0C,KAAKuf,gBAAkB,qBAAuB,WACzE,EAEAxK,mBAA2B,WAEzB,OAAO/U,KAAKyb,EAAIzb,KAAKqf,UAAa,EAAIrf,KAAKggB,oBAC7C,EAEAjL,eAAuB,WACrB,GAAM/U,KAAKkgB,aAAgBlgB,KAAKsf,cAAhC,CAII,IACAa,EADengB,KAAKogB,MAAQpgB,KAAKyb,EACNzb,KAAKqf,SACpCrf,KAAKqgB,WAAYF,EAJhB,CAKH,EAEApL,wBAAgC,WAG9B,KADe/U,KAAKkgB,cAAelgB,KAAKsf,iBACvBtf,KAAKuf,iBAAoBvf,KAAK+e,OAAO3nB,OAAtD,CAGA,IACI6oB,MADWjgB,KAAKof,cAAcjU,OAAcnL,KAAKyb,GAC9Bzb,KAAK1C,QAAQgjB,mBACpCtgB,KAAKqgB,WAAYJ,EAHhB,CAIH,EAIA,yBH9KS,CAEL,IAAIM,EAAYvrB,EAAOsmB,SAEvBtmB,EAAOsmB,SAAWzG,EACd7f,EACAA,EAAO8f,UACP9f,EAAO6gB,QACP7gB,EAAO6jB,aACP0H,EAAUhF,KACVgF,EAAU3D,MACV2D,EAAU9C,iBAEf,CAEF,CAxCC,CAwCCzoB,QAAQ,SAAkBA,EAAQ8f,EAAWe,EAC5CiD,EAAOyC,EAAMqB,EAAOa,GAMxB,IAAI1C,EAAS/lB,EAAO+lB,OAChBrR,EAAmB1U,EAAO0U,iBAC1Bc,EAAUxV,EAAOwV,QAEZ,SAAAgW,EAAc/G,EAAOgH,GAE5B,IADQ3H,EAAAA,EAAMG,UAAWQ,GACjBA,EAAMriB,QACLqpB,EAAAhe,YAAagX,EAAMvR,QAE7B,CAKD,IAAIwY,EAAO,EAEPC,EAAY,CAAA,EAEPrF,SAAAA,EAAUtV,EAAS1I,GACtB,IAAAsjB,EAAe9H,EAAMQ,gBAAiBtT,GAC1C,GAAM4a,EAAN,CAQK,GAFL5gB,KAAKgG,QAAU4a,EAEV5gB,KAAKgG,QAAQ6a,aAAe,CAC/B,IAAI3F,EAAWyF,EAAW3gB,KAAKgG,QAAQ6a,cAEhC,OADF3F,GAAoBA,EAAA4F,OAAQxjB,GAC1B4d,CACR,CAGIH,IACE/a,KAAAgQ,SAAW+K,EAAQ/a,KAAKgG,UAG/BhG,KAAK1C,QAAUwb,EAAMiI,OAAQ,CAAE,EAAE/gB,KAAKghB,YAAYC,UAClDjhB,KAAK8gB,OAAQxjB,GAGb0C,KAAKkhB,SAlBJ,MAJM1W,GACHA,EAAQ0L,MAAO,8BAAiC0K,GAAgB5a,GAsBrE,CAEDsV,EAAS2F,SAAW,CAClBE,eAAe,EAEf/E,UAAW,SAGXgF,mBAAoB,KACpBC,SAAU,IACVC,uBAAuB,EAEvB/E,iBAAiB,EACjBgF,QAAQ,EACRjB,mBAAoB,KACpBkB,gBAAgB,GAMlBlG,EAASmG,cAAgB,GAEzB,IAAI1M,EAAQuG,EAAS7P,UAErBqN,EAAMiI,OAAQhM,EAAOD,EAAUrJ,WAE/BsJ,EAAMmM,QAAU,WAEV,IAAAQ,EAAK1hB,KAAK2hB,OAASjB,EAqBb,IAAA,IAAA1L,KApBVhV,KAAKgG,QAAQ6a,aAAea,EAC5Bf,EAAWe,GAAO1hB,KAElBA,KAAKwf,cAAgB,EAErBxf,KAAK2d,cAAgB,EAErB3d,KAAKyb,EAAI,EACTzb,KAAKqf,SAAW,EAChBrf,KAAK0b,WAAa1b,KAAK1C,QAAQqhB,YAAc,QAAU,OAElD3e,KAAA4hB,SAAW3rB,SAASC,cAAc,OACvC8J,KAAK4hB,SAAS3G,UAAY,oBAC1Bjb,KAAK6hB,iBAEA7hB,KAAK1C,QAAQikB,QAAUvhB,KAAK1C,QAAQwkB,WACvC9sB,EAAOgB,iBAAkB,SAAUgK,MAIdA,KAAK1C,QAAQhD,GAAK,CACvC,IAAI2a,EAAWjV,KAAK1C,QAAQhD,GAAI0a,GAC3BhV,KAAA1F,GAAI0a,EAAWC,EACrB,CAEDqG,EAASmG,cAAczS,SAAS,SAAU2J,GACxC3Y,KAAM2Y,IACP,GAAE3Y,MAEEA,KAAK1C,QAAQwkB,SAChB9hB,KAAK8hB,WAEL9hB,KAAK+hB,UAGT,EAMMhN,EAAA+L,OAAS,SAAU7V,GACvB6N,EAAMiI,OAAQ/gB,KAAK1C,QAAS2N,EAC9B,EAEA8J,EAAMgN,SAAW,WACV/hB,KAAKgiB,WAGVhiB,KAAKgiB,UAAW,EACXhiB,KAAAgG,QAAQiH,UAAUQ,IAAI,oBACtBzN,KAAK1C,QAAQqhB,aACX3e,KAAAgG,QAAQiH,UAAUQ,IAAI,gBAG7BzN,KAAK6V,UAGS2K,EADExgB,KAAKiiB,wBAAyBjiB,KAAKgG,QAAQkc,UAClCliB,KAAK6e,QACzB7e,KAAA4hB,SAASnf,YAAazC,KAAK6e,QAC3B7e,KAAAgG,QAAQvD,YAAazC,KAAK4hB,UAE/B5hB,KAAKmiB,cAEAniB,KAAK1C,QAAQ6jB,gBAEhBnhB,KAAKgG,QAAQoc,SAAW,EAEnBpiB,KAAAgG,QAAQhQ,iBAAkB,UAAWgK,OAG5CA,KAAK0V,UAAU,YACf1V,KAAKqiB,qBAELriB,KAAKsiB,iBAAkB,EAEvBtiB,KAAKmf,cAAc,SACrB,EAGApK,EAAM8M,cAAgB,WAEhB,IAAAhD,EAAS5oB,SAASC,cAAc,OACpC2oB,EAAO5D,UAAY,kBACZ4D,EAAAvc,MAAOtC,KAAK0b,YAAe,EAClC1b,KAAK6e,OAASA,CAChB,EAEM9J,EAAAkN,wBAA0B,SAAUxI,GACxC,OAAOX,EAAMU,mBAAoBC,EAAOzZ,KAAK1C,QAAQilB,aACvD,EAGAxN,EAAMoN,YAAc,WAElBniB,KAAK8c,MAAQ9c,KAAKwiB,WAAYxiB,KAAK6e,OAAOqD,UAC1CliB,KAAKyiB,gBACLziB,KAAK0iB,qBACL1iB,KAAKwhB,gBACP,EAOMzM,EAAAyN,WAAa,SAAU/I,GAQpB,OAPSzZ,KAAKiiB,wBAAyBxI,GAGxBrH,KAAK,SAAUuQ,GAC5B,OAAA,IAAIpH,EAAMoH,EAAU3iB,KAC5B,GAAEA,KAGL,EAEA+U,EAAMsI,YAAc,WAClB,OAAOrd,KAAK8c,MAAO9c,KAAK8c,MAAM1lB,OAAS,EACzC,EAEA2d,EAAM6N,aAAe,WACnB,OAAO5iB,KAAK+e,OAAQ/e,KAAK+e,OAAO3nB,OAAS,EAC3C,EAGA2d,EAAM0N,cAAgB,WAEfziB,KAAA6iB,WAAY7iB,KAAK8c,OAEtB9c,KAAK8iB,eAAgB,EACvB,EAMM/N,EAAA+N,eAAiB,SAAU3mB,GAC/BA,EAAQA,GAAS,EAGjB6D,KAAK+iB,cAAgB5mB,GAAQ6D,KAAK+iB,eAAqB,EACvD,IAAIC,EAAQ,EAEZ,GAAK7mB,EAAQ,EAAI,CACf,IAAI8mB,EAAYjjB,KAAK8c,MAAO3gB,EAAQ,GAC5B6mB,EAAAC,EAAUxH,EAAIwH,EAAU/f,KAAK4T,UACtC,CAED,IADI,IAAA1S,EAAMpE,KAAK8c,MAAM1lB,OACXH,EAAIkF,EAAOlF,EAAImN,EAAKnN,IAAM,CAC9B+lB,IAAAA,EAAOhd,KAAK8c,MAAM7lB,GACtB+lB,EAAKjB,YAAaiH,GAClBA,GAAShG,EAAK9Z,KAAK4T,WACnB9W,KAAK+iB,cAAgBtd,KAAK2B,IAAK4V,EAAK9Z,KAAK6T,YAAa/W,KAAK+iB,cAC5D,CAED/iB,KAAK2c,eAAiBqG,EAEtBhjB,KAAKkjB,eAELljB,KAAKmjB,iBAEAnjB,KAAAkf,YAAc9a,EAAMpE,KAAK4iB,eAAezX,OAASnL,KAAK+e,OAAO,GAAG5T,OAAS,CAChF,EAMM4J,EAAA8N,WAAa,SAAU/F,GACrBA,EAAA9N,SAAS,SAAUgO,GACvBA,EAAKnH,SACT,GACA,EAIAd,EAAMmO,aAAe,WAEd,GADLljB,KAAK+e,OAAS,GACR/e,KAAK8c,MAAM1lB,OAAZ,CAIDgsB,IAAAA,EAAQ,IAAIxG,EAAO5c,MAClBA,KAAA+e,OAAOld,KAAMuhB,GACd,IACAC,EADkC,QAAnBrjB,KAAK0b,WACQ,cAAgB,aAE5C4H,EAAatjB,KAAKujB,iBAEtBvjB,KAAK8c,MAAM9N,SAAS,SAAUgO,EAAM/lB,GAE7B,GAACmsB,EAAMtG,MAAM1lB,OAAb,CAKD,IAAAmmB,EAAe6F,EAAMtM,WAAasM,EAAMlG,aACxCF,EAAK9Z,KAAK4T,WAAakG,EAAK9Z,KAAMmgB,IAEjCC,EAAW/c,KAAMvG,KAAM/I,EAAGsmB,KAI7B6F,EAAMpH,eAENoH,EAAQ,IAAIxG,EAAO5c,MACdA,KAAA+e,OAAOld,KAAMuhB,IANlBA,EAAMrG,QAASC,EANhB,MAFCoG,EAAMrG,QAASC,EAiBlB,GAAEhd,MAEHojB,EAAMpH,eAENhc,KAAKwjB,qBAjCJ,CAkCH,EAEAzO,EAAMwO,eAAiB,WACjB,IAAAE,EAAazjB,KAAK1C,QAAQmmB,WAC9B,IAAMA,EACJ,OAAO,WACE,OAAA,CACb,EACA,GAAmC,iBAAdA,EAAyB,CAEtC,IAAAC,EAAShiB,SAAU+hB,EAAY,IACnC,OAAO,SAAUxsB,GACf,OAASA,EAAIysB,GAAa,CAChC,CACG,CAGD,IAAIC,EAAoC,iBAAdF,GACxBA,EAAW5tB,MAAO,YAChB+tB,EAAUD,EAAejiB,SAAUiiB,EAAa,GAAI,IAAO,IAAM,EAC9D,OAAA,SAAU1sB,EAAGsmB,GAElB,OAAOA,IAAgBvd,KAAKkD,KAAKmE,WAAa,GAAMuc,CACxD,CACA,EAGM7O,EAAA8O,MACN9O,EAAM+O,WAAa,WACjB9jB,KAAKyiB,gBACLziB,KAAK+jB,0BACP,EAEAhP,EAAMc,QAAU,WACT7V,KAAAkD,KAAO2S,EAAS7V,KAAKgG,SAC1BhG,KAAKgkB,eACLhkB,KAAK0e,eAAiB1e,KAAKkD,KAAKmE,WAAarH,KAAKoc,SACpD,EAEA,IAAI6H,EAAsB,CAExB5S,OAAQ,CACN6S,KAAM,GACNC,MAAO,IAETD,KAAM,CACJA,KAAM,EACNC,MAAO,GAETA,MAAO,CACLA,MAAO,EACPD,KAAM,IAgiBH5I,OA5hBPvG,EAAMiP,aAAe,WACnB,IAAII,EAAYH,EAAqBjkB,KAAK1C,QAAQ8e,WAClDpc,KAAKoc,UAAYgI,EAAYA,EAAWpkB,KAAK0b,YAAe1b,KAAK1C,QAAQ8e,SAC3E,EAEArH,EAAMyM,eAAiB,WAChB,GAAAxhB,KAAK1C,QAAQkkB,eAAiB,CAC7B,IAAAja,EAASvH,KAAK1C,QAAQ+mB,gBAAkBrkB,KAAKof,cAC/Cpf,KAAKof,cAAc7X,OAASvH,KAAK+iB,cAC9B/iB,KAAA4hB,SAAStf,MAAMiF,OAASA,EAAS,IACvC,CACH,EAEAwN,EAAM2N,mBAAqB,WAEpB,GAAC1iB,KAAK1C,QAAQ8gB,WAAd,CAIApe,KAAAskB,cAAetkB,KAAK2f,kBACpB3f,KAAAskB,cAAetkB,KAAK6f,iBAGzB,IAAI0E,EAAOvkB,KAAK0e,eACZ8F,EAAYxkB,KAAK8c,MAAM1lB,OAAS,EACpC4I,KAAK2f,iBAAmB3f,KAAKykB,aAAcF,EAAMC,MAG1CD,EAAAvkB,KAAKkD,KAAKmE,WAAarH,KAAK0e,eAEnC1e,KAAK6f,gBAAkB7f,KAAKykB,aAAcF,EAAM,EAAG,EAblD,CAcH,EAEAxP,EAAM0P,aAAe,SAAUF,EAAMC,EAAWE,GAG9C,IADA,IAAI5H,EAAQ,GACJyH,EAAO,GAAI,CACbvH,IAAAA,EAAOhd,KAAK8c,MAAO0H,GACvB,IAAMxH,EACJ,MAEFF,EAAMjb,KAAMmb,GACCwH,GAAAE,EACbH,GAAQvH,EAAK9Z,KAAK4T,UACnB,CACM,OAAAgG,CACT,EAKA/H,EAAMoO,eAAiB,WAChB,GAACnjB,KAAK1C,QAAQqnB,UAAW3kB,KAAK1C,QAAQ8gB,YAAepe,KAAK8c,MAAM1lB,OAAhE,CAGD,IAAAwtB,EAAgB5kB,KAAK1C,QAAQqhB,YAC7B1B,EAAc2H,EAAgB,cAAgB,aAC9CzH,EAAYyH,EAAgB,aAAe,cAC3CC,EAAe7kB,KAAK2c,eAAiB3c,KAAKqd,cAAcna,KAAMia,GAE9D2H,EAAmBD,EAAe7kB,KAAKkD,KAAKmE,WAE5C0d,EAAa/kB,KAAK0e,eAAiB1e,KAAK8c,MAAM,GAAG5Z,KAAM+Z,GACvD+H,EAAWH,EAAe7kB,KAAKkD,KAAKmE,YAAe,EAAIrH,KAAKoc,WAE3Dpc,KAAA+e,OAAO/P,SAAS,SAAUoU,GACxB0B,EAEH1B,EAAMjY,OAAS0Z,EAAe7kB,KAAKoc,WAGnCgH,EAAMjY,OAAS1F,KAAK2B,IAAKgc,EAAMjY,OAAQ4Z,GACvC3B,EAAMjY,OAAS1F,KAAKwf,IAAK7B,EAAMjY,OAAQ6Z,GAE1C,GAAEhlB,KApBF,CAqBH,EAUA+U,EAAMoK,cAAgB,SAAU9e,EAAMqN,EAAOzR,GAC3C,IAAIipB,EAAWxX,EAAQ,CAAEA,GAAQmN,OAAQ5e,GAASA,EAG7C,GAFA+D,KAAA0V,UAAWrV,EAAM6kB,GAEjBnK,GAAU/a,KAAKgQ,SAAW,CAG7B,IAAImV,EADI9kB,GAAAL,KAAK1C,QAAQgkB,sBAAwB,YAAc,GAE3D,GAAK5T,EAAQ,CAEX,IAAI0X,EAAU,IAAIrK,EAAOsK,MAAO3X,GAChC0X,EAAQ/kB,KAAOA,EACN8kB,EAAAC,CACV,CACIplB,KAAAgQ,SAASnB,QAASsW,EAAQlpB,EAChC,CACH,EASA8Y,EAAM0H,OAAS,SAAUtgB,EAAOmpB,EAAQC,GACjC,GAACvlB,KAAKgiB,WAGH7lB,EAAAuF,SAAUvF,EAAO,IACzB6D,KAAKwlB,YAAarpB,IAEb6D,KAAK1C,QAAQ8gB,YAAckH,KAC9BnpB,EAAQ2c,EAAMuF,OAAQliB,EAAO6D,KAAK+e,OAAO3nB,SAGrC4I,KAAK+e,OAAQ5iB,IAAnB,CAGA,IAAIspB,EAAYzlB,KAAKwf,cACrBxf,KAAKwf,cAAgBrjB,EACrB6D,KAAKwjB,sBACA+B,EACHvlB,KAAK+jB,2BAEL/jB,KAAK0lB,iBAEF1lB,KAAK1C,QAAQ+mB,gBAChBrkB,KAAKwhB,iBAGPxhB,KAAKmf,cAAe,SAAU,KAAM,CAAEhjB,IAEjCA,GAASspB,GACZzlB,KAAKmf,cAAe,SAAU,KAAM,CAAEhjB,IAGxC6D,KAAKmf,cAAc,aAnBlB,CAoBH,EAGMpK,EAAAyQ,YAAc,SAAUrpB,GACxB,IAAAiI,EAAMpE,KAAK+e,OAAO3nB,OAEtB,KADiB4I,KAAK1C,QAAQ8gB,YAAcha,EAAM,GAEzC,OAAAjI,EAET,IAAIwpB,EAAY7M,EAAMuF,OAAQliB,EAAOiI,GAEjCwhB,EAAQngB,KAAKogB,IAAKF,EAAY3lB,KAAKwf,eACnCsG,EAAgBrgB,KAAKogB,IAAOF,EAAYvhB,EAAQpE,KAAKwf,eACrDuG,EAAoBtgB,KAAKogB,IAAOF,EAAYvhB,EAAQpE,KAAKwf,gBACvDxf,KAAKgmB,cAAgBF,EAAgBF,EAChCzpB,GAAAiI,GACEpE,KAAKgmB,cAAgBD,EAAoBH,IAC3CzpB,GAAAiI,GAGNjI,EAAQ,EACX6D,KAAKyb,GAAKzb,KAAK2c,eACLxgB,GAASiI,IACnBpE,KAAKyb,GAAKzb,KAAK2c,eAEnB,EAEM5H,EAAAkR,SAAW,SAAUX,EAAQC,GACjCvlB,KAAKyc,OAAQzc,KAAKwf,cAAgB,EAAG8F,EAAQC,EAC/C,EAEMxQ,EAAAmR,KAAO,SAAUZ,EAAQC,GAC7BvlB,KAAKyc,OAAQzc,KAAKwf,cAAgB,EAAG8F,EAAQC,EAC/C,EAEAxQ,EAAMyO,oBAAsB,WAC1B,IAAIJ,EAAQpjB,KAAK+e,OAAQ/e,KAAKwf,eAExB4D,IAINpjB,KAAKmmB,wBAELnmB,KAAKof,cAAgBgE,EACrBA,EAAM3G,SACNzc,KAAKomB,cAAgBhD,EAAMtG,MACtB9c,KAAAqmB,iBAAmBjD,EAAM5F,kBAGzBxd,KAAAsmB,aAAelD,EAAMtG,MAAM,GAC3B9c,KAAAumB,gBAAkBvmB,KAAKqmB,iBAAiB,GAC/C,EAEAtR,EAAMoR,sBAAwB,WACvBnmB,KAAKof,eACRpf,KAAKof,cAAcxD,UAEvB,EAEA7G,EAAMsN,mBAAqB,WACrB,IAAAmE,EAAexmB,KAAK1C,QAAQkpB,aAEhC,GAAKxmB,KAAKsiB,gBACRtiB,KAAKyc,OAAQzc,KAAKwf,eAAe,GAAO,OAD1C,CAKK,GAAAgH,GAAuC,iBAAhBA,EAE1B,GADWxmB,KAAKymB,UAAWD,GAGzB,YADKxmB,KAAA0mB,WAAYF,GAAc,GAAO,GAK1C,IAAIrqB,EAAQ,EAEPqqB,GAAgBxmB,KAAK+e,OAAQyH,KACxBrqB,EAAAqqB,GAGLxmB,KAAAyc,OAAQtgB,GAAO,GAAO,EAhB1B,CAiBH,EAQA4Y,EAAM2R,WAAa,SAAUvmB,EAAOmlB,EAAQC,GAEtCvI,IAAAA,EAAOhd,KAAKymB,UAAWtmB,GAC3B,GAAM6c,EAAN,CAII,IAAA7gB,EAAQ6D,KAAK2mB,kBAAmB3J,GAC/Bhd,KAAAyc,OAAQtgB,EAAOmpB,EAAQC,EAH3B,CAIH,EAEMxQ,EAAA4R,kBAAoB,SAAU3J,GAElC,IAAA,IAAU/lB,EAAI,EAAGA,EAAI+I,KAAK+e,OAAO3nB,OAAQH,IAAM,CAG7C,IAAmB,GAFP+I,KAAK+e,OAAO9nB,GACN6lB,MAAMlN,QAASoN,GAExB,OAAA/lB,CAEV,CACH,EASM8d,EAAA6R,QAAU,SAAUvQ,GAExB,IAAA,IAAUpf,EAAI,EAAGA,EAAI+I,KAAK8c,MAAM1lB,OAAQH,IAAM,CACxC+lB,IAAAA,EAAOhd,KAAK8c,MAAM7lB,GACjB+lB,GAAAA,EAAKhX,SAAWqQ,EACZ2G,OAAAA,CAEV,CACH,EAOMjI,EAAA8R,SAAW,SAAUpN,GACjBX,EAAAA,EAAMG,UAAWQ,GACzB,IAAIqD,EAAQ,GAOL,OANDrD,EAAAzK,SAAS,SAAUqH,GACnB2G,IAAAA,EAAOhd,KAAK4mB,QAASvQ,GACpB2G,GACHF,EAAMjb,KAAMmb,EAEf,GAAEhd,MACI8c,CACT,EAMA/H,EAAMyI,gBAAkB,WACtB,OAAOxd,KAAK8c,MAAM1K,KAAK,SAAU4K,GAC/B,OAAOA,EAAKhX,OAChB,GACA,EAOM+O,EAAA+R,cAAgB,SAAUzQ,GAE1B2G,IAAAA,EAAOhd,KAAK4mB,QAASvQ,GACzB,OAAK2G,IAIElE,EAAAA,EAAMO,UAAWhD,EAAM,wBACvBrW,KAAK4mB,QAASvQ,GACvB,EAQMtB,EAAAgS,wBAA0B,SAAUC,EAAU7qB,GAClD,IAAM6qB,EACG,OAAAhnB,KAAKof,cAAc5B,kBAEpBrhB,OAAU,IAAVA,EAAsB6D,KAAKwf,cAAgBrjB,EAE/C,IAAAiI,EAAMpE,KAAK+e,OAAO3nB,OACjB,GAAA,EAAiB,EAAX4vB,GAAkB5iB,EAC3B,OAAOpE,KAAKwd,kBAId,IADA,IAAIyJ,EAAY,GACNhwB,EAAIkF,EAAQ6qB,EAAU/vB,GAAKkF,EAAQ6qB,EAAU/vB,IAAM,CACvD,IAAAiwB,EAAalnB,KAAK1C,QAAQ8gB,WAAatF,EAAMuF,OAAQpnB,EAAGmN,GAAQnN,EAChEmsB,EAAQpjB,KAAK+e,OAAQmI,GACpB9D,IACH6D,EAAYA,EAAUpM,OAAQuI,EAAM5F,mBAEvC,CACM,OAAAyJ,CACT,EAOMlS,EAAA0R,UAAY,SAAU7N,GACrB,GAAmB,iBAAZA,EAEH,OAAA5Y,KAAK8c,MAAOlE,GAEhB,GAAmB,iBAAZA,EAAuB,CAE5B,GAAAA,EAAS/iB,MAAO,eACnB,OAGS+iB,EAAA5Y,KAAKgG,QAAQqG,cAAeuM,EACxC,CAEM,OAAA5Y,KAAK4mB,QAAShO,EACvB,EAIA7D,EAAMoS,SAAW,WACfnnB,KAAK0V,UAAU,WACjB,EAGMX,EAAAqS,mBAAqB,SAAU1Z,GAEhB,cAAdA,EAAMrN,MACTqN,EAAMQ,iBAERlO,KAAKqnB,OACP,EAIAtS,EAAMuS,SAAW,WACftnB,KAAK8hB,WACL9hB,KAAKuhB,QACP,EAEAzI,EAAMe,eAAgByB,EAAU,WAAY,KAE5CvG,EAAMwM,OAAS,WAEb,GAAMvhB,KAAKgiB,WAAYhiB,KAAK0d,cAAe1d,KAAKunB,WAAhD,CAGAvnB,KAAK6V,UAEA7V,KAAK1C,QAAQ8gB,aAChBpe,KAAKyb,EAAI3C,EAAMuF,OAAQre,KAAKyb,EAAGzb,KAAK2c,iBAEtC3c,KAAKyiB,gBACLziB,KAAK0iB,qBACL1iB,KAAKwhB,iBACLxhB,KAAK0V,UAAU,UAGf,IAAI6Q,EAAkBvmB,KAAKqmB,kBAAoBrmB,KAAKqmB,iBAAiB,GAChErmB,KAAA0mB,WAAYH,GAAiB,GAAO,EAbxC,CAcH,EAGAxR,EAAM+M,SAAW,WACG9hB,KAAK1C,QAAQwkB,YAOe,GAF3BpY,EAAkB1J,KAAKgG,QAAS,UAAWwhB,QAE5C5X,QAAQ,YACxB5P,KAAK+hB,WAEL/hB,KAAKynB,aAET,EAKM1S,EAAA2S,UAAY,SAAUha,GAE1B,IAAIia,EAAe1xB,SAAS2xB,eAAiB3xB,SAAS2xB,eAAiB5nB,KAAKgG,QAC5E,GAAMhG,KAAK1C,QAAQ6jB,gBAAiBwG,EAApC,CAIA,IAAIE,EAAUvM,EAASwM,iBAAkBpa,EAAMqa,SAC1CF,GACHA,EAAQthB,KAAMvG,KAJf,CAMH,EAEAsb,EAASwM,iBAAmB,CAE1B,GAAI,WACF,IAAIE,EAAahoB,KAAK1C,QAAQqhB,YAAc,OAAS,WACrD3e,KAAKmnB,WACLnnB,KAAMgoB,IACP,EAED,GAAI,WACF,IAAIC,EAAcjoB,KAAK1C,QAAQqhB,YAAc,WAAa,OAC1D3e,KAAKmnB,WACLnnB,KAAMioB,IACP,GAKHlT,EAAMsS,MAAQ,WAIZ,IAAIa,EAAclzB,EAAOmzB,YACzBnoB,KAAKgG,QAAQqhB,MAAM,CAAEe,eAAe,IAE/BpzB,EAAOmzB,aAAeD,GACzBlzB,EAAOqzB,SAAUrzB,EAAOszB,YAAaJ,EAEzC,EAKAnT,EAAM0S,WAAa,WACXznB,KAAKgiB,WAGNhiB,KAAAgG,QAAQiH,UAAUG,OAAO,oBACzBpN,KAAAgG,QAAQiH,UAAUG,OAAO,gBAC9BpN,KAAKmmB,wBAEAnmB,KAAA8c,MAAM9N,SAAS,SAAUgO,GAC5BA,EAAKrB,SACT,IACO3b,KAAAgG,QAAQlP,YAAakJ,KAAK4hB,UAE/BpB,EAAcxgB,KAAK6e,OAAOqD,SAAUliB,KAAKgG,SACpChG,KAAK1C,QAAQ6jB,gBACXnhB,KAAAgG,QAAQzN,gBAAgB,YACxByH,KAAAgG,QAAQsH,oBAAqB,UAAWtN,OAG/CA,KAAKgiB,UAAW,EAChBhiB,KAAK0V,UAAU,cACjB,EAEAX,EAAM4G,QAAU,WACd3b,KAAKynB,aACLzyB,EAAOsY,oBAAqB,SAAUtN,MACtCA,KAAK4V,SACL5V,KAAK0V,UAAU,WACVqF,GAAU/a,KAAKgQ,UACX+K,EAAAwN,WAAYvoB,KAAKgG,QAAS,mBAE5BhG,KAAKgG,QAAQ6a,oBACbF,EAAW3gB,KAAK2hB,KACzB,EAIA7I,EAAMiI,OAAQhM,EAAO0I,GASrBnC,EAAShI,KAAO,SAAU+C,GAEpB,IAAAqL,GADG5I,EAAAA,EAAMQ,gBAAiBjD,KACbA,EAAKwK,aACf,OAAAa,GAAMf,EAAWe,EAC1B,EAEA5I,EAAMwB,SAAUgB,EAAU,YAErBP,GAAUA,EAAOyN,SACbzN,EAAAyN,QAAS,WAAYlN,GAI9BA,EAASmN,UAAY,SAAUC,GACpB3N,EAAA2N,CACX,EAEApN,EAASC,KAAOA,EAChBD,EAASsB,MAAQA,EAEVtB,CAEP,qHI/5BE,SAAUtmB,EAAQ6f,GAUuB1M,EAAOC,QAE9CD,UAAiB0M,EACf7f,EACAmmB,KAIFnmB,EAAO2zB,WAAa9T,EAClB7f,EACAA,EAAO8f,UAIV,CAxBD,CAwBC9f,QAAQ,SAAkBA,EAAQ8f,GAMrC,SAAS6T,IAAe,CAGxB,IAAI5T,EAAQ4T,EAAWld,UAAYtB,OAAOqR,OAAQ1G,EAAUrJ,WAEtDsJ,EAAA6T,eAAiB,SAAUvS,GAC1BrW,KAAA6oB,gBAAiBxS,GAAM,EAC9B,EAEMtB,EAAA+T,iBAAmB,SAAUzS,GAC5BrW,KAAA6oB,gBAAiBxS,GAAM,EAC9B,EAMMtB,EAAA8T,gBAAkB,SAAUxS,EAAM0S,GAGlC,IAAAC,GADID,OAAU,IAAVA,GAA6BA,GACZ,mBAAqB,sBAG1CE,EAAa,YACZ,iBAAkBj0B,EAGRi0B,EAAA,aACHj0B,EAAOk0B,eAEJD,EAAA,eAET5S,EAAA2S,GAAcC,EAAYjpB,KAClC,EAGM+U,EAAAwE,YAAc,SAAU7L,GACxB,IAAAiL,EAAS,KAAOjL,EAAMrN,KACrBL,KAAM2Y,IACH3Y,KAAA2Y,GAAUjL,EAEpB,EAGMqH,EAAAoU,SAAW,SAAUC,GACzB,IAAA,IAAUnyB,EAAE,EAAGA,EAAImyB,EAAQhyB,OAAQH,IAAM,CACnC,IAAAoyB,EAAQD,EAAQnyB,GACf,GAAAoyB,EAAMC,YAActpB,KAAKupB,kBACrB,OAAAF,CAEV,CACH,EAIMtU,EAAAyU,YAAc,SAAU9b,GAE5B,IAAI+b,EAAS/b,EAAM+b,OACdA,GAAuB,IAAXA,GAA2B,IAAXA,GAG5BzpB,KAAA0pB,aAAchc,EAAOA,EAC5B,EAEMqH,EAAA4U,aAAe,SAAUjc,GAC7B1N,KAAK0pB,aAAchc,EAAOA,EAAMkc,eAAe,GACjD,EAEM7U,EAAA8U,cAAgB,SAAUnc,GACzB1N,KAAA0pB,aAAchc,EAAOA,EAC5B,EAOMqH,EAAA2U,aAAe,SAAUhc,EAAOoc,GAG/Bpc,EAAM+b,QAAUzpB,KAAKsf,gBAI1Btf,KAAKsf,eAAgB,EAEhBtf,KAAAupB,uBAA0C,IAAtBO,EAAQC,UAE/BD,EAAQ,UAAYA,EAAQR,WAEzBtpB,KAAAgqB,YAAatc,EAAOoc,GAC3B,EAEM/U,EAAAiV,YAAc,SAAUtc,EAAOoc,GACnC9pB,KAAKiqB,qBAAsBvc,GAC3B1N,KAAK0V,UAAW,cAAe,CAAEhI,EAAOoc,GAC1C,EAGA,IAAII,EAAkB,CACpBC,UAAW,CAAE,YAAa,WAC1BC,WAAY,CAAE,YAAa,WAAY,eACvCC,YAAa,CAAE,cAAe,YAAa,kBA+JtC,OA5JDtV,EAAAkV,qBAAuB,SAAUvc,GACrC,GAAMA,EAAN,CAII,IAAAwH,EAASgV,EAAiBxc,EAAMrN,MAE7B6U,EAAAlG,SAAS,SAAUgG,GACxBhgB,EAAOgB,iBAAkBgf,EAAWhV,KACrC,GAAEA,MAEHA,KAAKsqB,oBAAsBpV,CAR1B,CASH,EAEAH,EAAMwV,uBAAyB,WAEvBvqB,KAAKsqB,sBAGNtqB,KAAAsqB,oBAAoBtb,SAAS,SAAUgG,GAC1ChgB,EAAOsY,oBAAqB0H,EAAWhV,KACxC,GAAEA,aAEIA,KAAKsqB,oBACd,EAIMvV,EAAAyV,YAAc,SAAU9c,GACvB1N,KAAAyqB,aAAc/c,EAAOA,EAC5B,EAEMqH,EAAA2V,cAAgB,SAAUhd,GACzBA,EAAMqc,WAAa/pB,KAAKupB,mBACtBvpB,KAAAyqB,aAAc/c,EAAOA,EAE9B,EAEMqH,EAAA4V,YAAc,SAAUjd,GAC5B,IAAI2b,EAAQrpB,KAAKmpB,SAAUzb,EAAMkc,gBAC5BP,GACErpB,KAAAyqB,aAAc/c,EAAO2b,EAE9B,EAQMtU,EAAA0V,aAAe,SAAU/c,EAAOoc,GAC/B9pB,KAAA4qB,YAAald,EAAOoc,EAC3B,EAGM/U,EAAA6V,YAAc,SAAUld,EAAOoc,GACnC9pB,KAAK0V,UAAW,cAAe,CAAEhI,EAAOoc,GAC1C,EAKM/U,EAAA8V,UAAY,SAAUnd,GACrB1N,KAAA8qB,WAAYpd,EAAOA,EAC1B,EAEMqH,EAAAgW,YAAc,SAAUrd,GACvBA,EAAMqc,WAAa/pB,KAAKupB,mBACtBvpB,KAAA8qB,WAAYpd,EAAOA,EAE5B,EAEMqH,EAAAiW,WAAa,SAAUtd,GAC3B,IAAI2b,EAAQrpB,KAAKmpB,SAAUzb,EAAMkc,gBAC5BP,GACErpB,KAAA8qB,WAAYpd,EAAO2b,EAE5B,EAQMtU,EAAA+V,WAAa,SAAUpd,EAAOoc,GAClC9pB,KAAKirB,eACAjrB,KAAAkrB,UAAWxd,EAAOoc,EACzB,EAGM/U,EAAAmW,UAAY,SAAUxd,EAAOoc,GACjC9pB,KAAK0V,UAAW,YAAa,CAAEhI,EAAOoc,GACxC,EAKA/U,EAAMkW,aAAe,WACnBjrB,KAAKmrB,gBACLnrB,KAAKuqB,yBACLvqB,KAAKorB,aACP,EAEArW,EAAMoW,cAAgB,WAEpBnrB,KAAKsf,eAAgB,SACdtf,KAAKupB,iBACd,EAEAxU,EAAMqW,YA1NN,WAAkB,EA8NZrW,EAAAsW,gBAAkB,SAAU3d,GAC3BA,EAAMqc,WAAa/pB,KAAKupB,mBACtBvpB,KAAAsrB,eAAgB5d,EAAOA,EAEhC,EAEMqH,EAAAwW,cAAgB,SAAU7d,GAC9B,IAAI2b,EAAQrpB,KAAKmpB,SAAUzb,EAAMkc,gBAC5BP,GACErpB,KAAAsrB,eAAgB5d,EAAO2b,EAEhC,EAQMtU,EAAAuW,eAAiB,SAAU5d,EAAOoc,GACtC9pB,KAAKirB,eACAjrB,KAAAwrB,cAAe9d,EAAOoc,EAC7B,EAGM/U,EAAAyW,cAAgB,SAAU9d,EAAOoc,GACrC9pB,KAAK0V,UAAW,gBAAiB,CAAEhI,EAAOoc,GAC5C,EAKWnB,EAAA8C,gBAAkB,SAAU3B,GAC9B,MAAA,CACLrO,EAAGqO,EAAQ4B,MACXC,EAAG7B,EAAQ8B,MAEf,EAIOjD,CAEP;;;;;6CC5SE,SAAU3zB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,0BCRN,SAAUnmB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACf7f,EACAmmB,MAIFnmB,EAAO62B,WAAahX,EAClB7f,EACAA,EAAO2zB,WAIV,CAzBD,CAyBC3zB,QAAQ,SAAkBA,EAAQ2zB,GAMrC,SAASkD,IAAe,CAGxB,IAAI9W,EAAQ8W,EAAWpgB,UAAYtB,OAAOqR,OAAQmN,EAAWld,WAI7DsJ,EAAM+W,YAAc,WAClB9rB,KAAK+rB,cAAc,EACrB,EAEAhX,EAAMiX,cAAgB,WACpBhsB,KAAK+rB,cAAc,EACrB,EAMMhX,EAAAgX,aAAe,SAAUhD,GAM7B,IAFI,IAAAC,GAFID,OAAU,IAAVA,GAA6BA,GAEZ,mBAAqB,sBAC1CkD,EAAclD,EAAQ/oB,KAAKksB,kBAAoB,GACzCj1B,EAAE,EAAGA,EAAI+I,KAAKmsB,QAAQ/0B,OAAQH,IAAM,CACxC,IAAAm1B,EAASpsB,KAAKmsB,QAAQl1B,GACrB+I,KAAA6oB,gBAAiBuD,EAAQrD,GACtBqD,EAAApD,GAAc,QAAShpB,MAE1BhL,EAAOk0B,eACVkD,EAAO9pB,MAAM2pB,YAAcA,EAE9B,CACH,EAGAlX,EAAMmX,kBAAoB,OASpBnX,EAAAiV,YAAc,SAAUtc,EAAOoc,GACtB9pB,KAAKqsB,gBAAiB3e,KAMnC1N,KAAKssB,mBAAqB,CACxBZ,MAAO5B,EAAQ4B,MACfE,MAAO9B,EAAQ8B,OAGjBle,EAAMQ,iBACNlO,KAAKusB,kBAELvsB,KAAKiqB,qBAAsBvc,GAC3B1N,KAAK0V,UAAW,cAAe,CAAEhI,EAAOoc,IAC1C,EAGA,IAAI0C,EAAc,CAChBC,UAAU,EACVC,OAAO,EACPC,QAAQ,EACRC,QAAQ,GAINC,EAAa,CACfC,OAAO,EACPC,UAAU,EACVtD,QAAQ,EACRuD,QAAQ,EACR/0B,OAAO,EACPg1B,MAAM,GAiKD,OA7JDlY,EAAAsX,gBAAkB,SAAU3e,GAChC,IAAIwf,EAAeV,EAAa9e,EAAMvC,OAAO3U,UACzC22B,EAAcN,EAAYnf,EAAMvC,OAAO9K,MACvC+sB,GAAUF,GAAgBC,EAIvB,OAHDC,GACJptB,KAAKmrB,gBAEAiC,CACT,EAGArY,EAAMwX,gBAAkB,WACtB,IAAIc,EAAUp3B,SAAS2xB,cAETyF,GAAWA,EAAQC,MAAQD,GAAWp3B,SAASkM,MAE3DkrB,EAAQC,MAEZ,EASMvY,EAAA6V,YAAc,SAAUld,EAAOoc,GACnC,IAAIyD,EAAavtB,KAAKwtB,iBAAkB9f,EAAOoc,GAC/C9pB,KAAK0V,UAAW,cAAe,CAAEhI,EAAOoc,EAASyD,IAC5CvtB,KAAAytB,UAAW/f,EAAOoc,EAASyD,EAClC,EAGMxY,EAAAyY,iBAAmB,SAAU9f,EAAOoc,GACxC,IAAIyD,EAAa,CACf9R,EAAGqO,EAAQ4B,MAAQ1rB,KAAKssB,mBAAmBZ,MAC3CC,EAAG7B,EAAQ8B,MAAQ5rB,KAAKssB,mBAAmBV,OAMtC,OAHD5rB,KAAKunB,YAAcvnB,KAAK0tB,eAAgBH,IACvCvtB,KAAA2tB,WAAYjgB,EAAOoc,GAEnByD,CACT,EAGMxY,EAAA2Y,eAAiB,SAAUH,GACxB,OAAA9nB,KAAKogB,IAAK0H,EAAW9R,GAAM,GAAKhW,KAAKogB,IAAK0H,EAAW5B,GAAM,CACpE,EASM5W,EAAAmW,UAAY,SAAUxd,EAAOoc,GACjC9pB,KAAK0V,UAAW,YAAa,CAAEhI,EAAOoc,IACjC9pB,KAAA4tB,eAAgBlgB,EAAOoc,EAC9B,EAEM/U,EAAA6Y,eAAiB,SAAUlgB,EAAOoc,GACjC9pB,KAAKunB,WACHvnB,KAAA6tB,SAAUngB,EAAOoc,GAGjB9pB,KAAA8tB,aAAcpgB,EAAOoc,EAE9B,EAKM/U,EAAA4Y,WAAa,SAAUjgB,EAAOoc,GAClC9pB,KAAKunB,YAAa,EAElBvnB,KAAK+tB,oBAAqB,EACrB/tB,KAAAguB,UAAWtgB,EAAOoc,EACzB,EAEM/U,EAAAiZ,UAAY,SAAUtgB,EAAOoc,GACjC9pB,KAAK0V,UAAW,YAAa,CAAEhI,EAAOoc,GACxC,EAGA/U,EAAM0Y,UAAY,SAAU/f,EAAOoc,EAASyD,GAEpCvtB,KAAKunB,YAINvnB,KAAAiuB,SAAUvgB,EAAOoc,EAASyD,EACjC,EAEAxY,EAAMkZ,SAAW,SAAUvgB,EAAOoc,EAASyD,GACzC7f,EAAMQ,iBACNlO,KAAK0V,UAAW,WAAY,CAAEhI,EAAOoc,EAASyD,GAChD,EAGMxY,EAAA8Y,SAAW,SAAUngB,EAAOoc,GAEhC9pB,KAAKunB,YAAa,EAElB1wB,WAAA,kBACSmJ,KAAK+tB,kBAChB,EAAIziB,KAAMtL,OAEHA,KAAAkuB,QAASxgB,EAAOoc,EACvB,EAEM/U,EAAAmZ,QAAU,SAAUxgB,EAAOoc,GAC/B9pB,KAAK0V,UAAW,UAAW,CAAEhI,EAAOoc,GACtC,EAKM/U,EAAAoZ,QAAU,SAAUzgB,GACnB1N,KAAK+tB,oBACRrgB,EAAMQ,gBAEV,EAKM6G,EAAA+Y,aAAe,SAAUpgB,EAAOoc,GAE/B9pB,KAAKouB,mBAAmC,WAAd1gB,EAAMrN,OAIhCL,KAAAquB,YAAa3gB,EAAOoc,GAGN,WAAdpc,EAAMrN,OACTL,KAAKouB,mBAAoB,EAEzBv3B,WAAA,kBACSmJ,KAAKouB,iBACZ,EAAA9iB,KAAMtL,MAAQ,MAEpB,EAEM+U,EAAAsZ,YAAc,SAAU3gB,EAAOoc,GACnC9pB,KAAK0V,UAAW,cAAe,CAAEhI,EAAOoc,GAC1C,EAIA+B,EAAWJ,gBAAkB9C,EAAW8C,gBAIjCI,CAEP,oBDxQQxQ,KAIJrmB,EAAOsmB,SAAWzG,EACd7f,EACAA,EAAOsmB,SACPtmB,EAAO62B,WACP72B,EAAO6jB,cAzBb,CA6BC7jB,QAAQ,SAAkBA,EAAQsmB,EAAUuQ,EAAY/S,GAM3DA,EAAMiI,OAAQzF,EAAS2F,SAAU,CAC/BqN,UAAW,KACXC,cAAe,IAKjBjT,EAASmG,cAAc5f,KAAK,eAI5B,IAAIkT,EAAQuG,EAAS7P,UACrBqN,EAAMiI,OAAQhM,EAAO8W,EAAWpgB,WAChCsJ,EAAMmX,kBAAoB,QAI1BnX,EAAMyZ,YAAc,WACbxuB,KAAA1F,GAAI,WAAY0F,KAAKyuB,gBACrBzuB,KAAA1F,GAAI,WAAY0F,KAAK0uB,eACrB1uB,KAAA1F,GAAI,aAAc0F,KAAK2uB,kBACvB3uB,KAAA1F,GAAI,aAAc0F,KAAK4uB,gBAE9B,EAEA7Z,EAAM0Z,eAAiB,WAChBzuB,KAAAmsB,QAAU,CAAEnsB,KAAK4hB,UACtB5hB,KAAK8rB,cACL9rB,KAAK4uB,iBACP,EAEA7Z,EAAM4Z,iBAAmB,WACvB3uB,KAAKgsB,gBACAhsB,KAAAgG,QAAQiH,UAAUG,OAAO,eAChC,EAEA2H,EAAM6Z,gBAAkB,WAES,MAA1B5uB,KAAK1C,QAAQgxB,UACXtuB,KAAAkgB,YAAclgB,KAAK+e,OAAO3nB,OAAS,EAEnC4I,KAAAkgB,YAAclgB,KAAK1C,QAAQgxB,UAE7BtuB,KAAKkgB,YACHlgB,KAAAgG,QAAQiH,UAAUQ,IAAI,gBAEtBzN,KAAAgG,QAAQiH,UAAUG,OAAO,eAElC,EAGA2H,EAAM8Z,SAAW,WACf7uB,KAAK1C,QAAQgxB,WAAY,EACzBtuB,KAAK4uB,iBACP,EAEA7Z,EAAM+Z,WAAa,WACjB9uB,KAAK1C,QAAQgxB,WAAY,EACzBtuB,KAAK4uB,iBACP,EAEA7Z,EAAM2Z,cAAgB,kBACb1uB,KAAKuf,eACd,EAIMxK,EAAAiV,YAAc,SAAUtc,EAAOoc,GAC7B9pB,KAAKkgB,YAIElgB,KAAKqsB,gBAAiB3e,KAKnC1N,KAAK+uB,2BAA4BrhB,GACjC1N,KAAKgvB,iBAAkBthB,GAElBzX,SAAS2xB,eAAiB5nB,KAAKgG,SAElChG,KAAKusB,kBAIPvsB,KAAKogB,MAAQpgB,KAAKyb,EACbzb,KAAA4hB,SAAS3U,UAAUQ,IAAI,mBAE5BzN,KAAKivB,kBAAoBC,IACzBl6B,EAAOgB,iBAAkB,SAAUgK,MAE9BA,KAAAmvB,oBAAqBzhB,EAAOoc,IAvB1B9pB,KAAAmvB,oBAAqBzhB,EAAOoc,EAwBrC,EAGM/U,EAAAoa,oBAAsB,SAAUzhB,EAAOoc,GAG3C9pB,KAAKssB,mBAAqB,CACxBZ,MAAO5B,EAAQ4B,MACfE,MAAO9B,EAAQ8B,OAGjB5rB,KAAKiqB,qBAAsBvc,GAC3B1N,KAAKmf,cAAe,cAAezR,EAAO,CAAEoc,GAC9C,EAEA,IAAIsF,EAAa,CACf1C,OAAO,EACPD,UAAU,EACVE,QAAQ,GAqOV,SAASuC,IACA,MAAA,CACLzT,EAAGzmB,EAAOszB,YACVqD,EAAG32B,EAAOmzB,YAEb,CAIM7M,OA3ODvG,EAAAia,iBAAmB,SAAUthB,GACf0hB,EAAY1hB,EAAMvC,OAAO3U,WAEzCwJ,KAAKqnB,OAET,EAEMtS,EAAAga,2BAA6B,SAAUrhB,GACvC,IAAA2hB,EAA6B,cAAd3hB,EAAMrN,KACrBivB,EAAsC,SAArB5hB,EAAM6hB,YACvBC,EAAcJ,EAAY1hB,EAAMvC,OAAO3U,UACrC64B,GAAiBC,GAAmBE,GACxC9hB,EAAMQ,gBAEV,EAIM6G,EAAA2Y,eAAiB,SAAUH,GAC/B,OAAO9nB,KAAKogB,IAAK0H,EAAW9R,GAAMzb,KAAK1C,QAAQixB,aACjD,EAIMxZ,EAAAmW,UAAY,SAAUxd,EAAOoc,UAC1B9pB,KAAKyvB,iBACPzvB,KAAA4hB,SAAS3U,UAAUG,OAAO,mBAC/BpN,KAAKmf,cAAe,YAAazR,EAAO,CAAEoc,IACrC9pB,KAAA4tB,eAAgBlgB,EAAOoc,EAC9B,EAEA/U,EAAMqW,YAAc,WAClBp2B,EAAOsY,oBAAqB,SAAUtN,aAC/BA,KAAKivB,iBACd,EAIMla,EAAAiZ,UAAY,SAAUtgB,EAAOoc,GAC3B9pB,KAAKkgB,cAGXlgB,KAAK0vB,kBAAoB1vB,KAAKyb,EAC9Bzb,KAAK0lB,iBACL1wB,EAAOsY,oBAAqB,SAAUtN,MACtCA,KAAKmf,cAAe,YAAazR,EAAO,CAAEoc,IAC5C,EAEM/U,EAAA6V,YAAc,SAAUld,EAAOoc,GACnC,IAAIyD,EAAavtB,KAAKwtB,iBAAkB9f,EAAOoc,GAC/C9pB,KAAKmf,cAAe,cAAezR,EAAO,CAAEoc,EAASyD,IAChDvtB,KAAAytB,UAAW/f,EAAOoc,EAASyD,EAClC,EAEAxY,EAAMkZ,SAAW,SAAUvgB,EAAOoc,EAASyD,GACpC,GAACvtB,KAAKkgB,YAAN,CAGLxS,EAAMQ,iBAENlO,KAAK2vB,cAAgB3vB,KAAKogB,MAE1B,IAAIwP,EAAY5vB,KAAK1C,QAAQqhB,aAAmB,EAAA,EAC3C3e,KAAK1C,QAAQ8gB,aAEhBmP,EAAW9R,GAAKzb,KAAK2c,gBAEvB,IAAIyD,EAAQpgB,KAAK0vB,kBAAoBnC,EAAW9R,EAAImU,EAEpD,IAAM5vB,KAAK1C,QAAQ8gB,YAAcpe,KAAK+e,OAAO3nB,OAAS,CAEhD,IAAAy4B,EAAcpqB,KAAK2B,KAAMpH,KAAK+e,OAAO,GAAG5T,OAAQnL,KAAK0vB,mBACzDtP,EAAQA,EAAQyP,EAAwC,IAAxBzP,EAAQyP,GAAsBzP,EAC1D,IAAA4E,EAAWvf,KAAKwf,KAAMjlB,KAAK4iB,eAAezX,OAAQnL,KAAK0vB,mBAC3DtP,EAAQA,EAAQ4E,EAAkC,IAArB5E,EAAQ4E,GAAmB5E,CACzD,CAEDpgB,KAAKogB,MAAQA,EAERpgB,KAAA8vB,iBAAmBhxB,KACxBkB,KAAKmf,cAAe,WAAYzR,EAAO,CAAEoc,EAASyD,GAvBjD,CAwBH,EAEMxY,EAAAmZ,QAAU,SAAUxgB,EAAOoc,GAC1B,GAAC9pB,KAAKkgB,YAAN,CAGAlgB,KAAK1C,QAAQyyB,aAChB/vB,KAAKuf,iBAAkB,GAGrB,IAAApjB,EAAQ6D,KAAKgwB,uBAEjB,GAAKhwB,KAAK1C,QAAQyyB,aAAe/vB,KAAK1C,QAAQ8gB,WAAa,CAIrD,IAAA6R,EAAWjwB,KAAKkwB,qBACpBlwB,KAAKuf,iBAAmB0Q,EAAWjwB,KAAK+e,OAAO,GAAG5T,SAC/C8kB,EAAWjwB,KAAK4iB,eAAezX,MACtC,MAAenL,KAAK1C,QAAQyyB,YAAc5zB,GAAS6D,KAAKwf,gBAEpDrjB,GAAS6D,KAAKmwB,6BAETnwB,KAAK2vB,cAIP3vB,KAAAgmB,aAAehmB,KAAK1C,QAAQ8gB,WACjCpe,KAAKyc,OAAQtgB,UACN6D,KAAKgmB,aACZhmB,KAAKmf,cAAe,UAAWzR,EAAO,CAAEoc,GAzBvC,CA0BH,EAEA/U,EAAMib,qBAAuB,WACvB,IAAAC,EAAWjwB,KAAKkwB,qBAEhBE,EAAW3qB,KAAKogB,IAAK7lB,KAAKqwB,kBAAmBJ,EAAUjwB,KAAKwf,gBAE5D8Q,EAAkBtwB,KAAKuwB,mBAAoBN,EAAUG,EAAU,GAC/DI,EAAkBxwB,KAAKuwB,mBAAoBN,EAAUG,MAIlD,OAFKE,EAAgBF,SAAWI,EAAgBJ,SACrDE,EAAgBn0B,MAAQq0B,EAAgBr0B,KAE5C,EAUA4Y,EAAMwb,mBAAqB,SAAUN,EAAUG,EAAU1L,GAU/C,IATR,IAAIvoB,EAAQ6D,KAAKwf,cACbiR,EAAcC,IACdC,EAAY3wB,KAAK1C,QAAQqnB,UAAY3kB,KAAK1C,QAAQ8gB,WAAA,SAE1CwS,EAAMC,GACd,OAAOD,GAAQC,CACb,EAAA,SAAUD,EAAMC,GAClB,OAAOD,EAAOC,CACpB,EACUF,EAAWP,EAAUK,KAElBt0B,GAAAuoB,EACK+L,EAAAL,EAEI,QADlBA,EAAWpwB,KAAKqwB,kBAAmBJ,EAAU9zB,MAIlCi0B,EAAA3qB,KAAKogB,IAAKuK,GAEhB,MAAA,CACLA,SAAUK,EAEVt0B,MAAOA,EAAQuoB,EAEnB,EAQM3P,EAAAsb,iBAAmB,SAAU5U,EAAGtf,GAChC,IAAAiI,EAAMpE,KAAK+e,OAAO3nB,OAElB05B,EAAe9wB,KAAK1C,QAAQ8gB,YAAcha,EAAM,EAChD8iB,EAAa4J,EAAehY,EAAMuF,OAAQliB,EAAOiI,GAAQjI,EACzDinB,EAAQpjB,KAAK+e,OAAQmI,GACzB,IAAM9D,EACG,OAAA,KAGL,IAAA2N,EAAOD,EAAe9wB,KAAK2c,eAAiBlX,KAAKurB,MAAO70B,EAAMiI,GAAQ,EACnE,OAAAqX,GAAM2H,EAAMjY,OAAS4lB,EAC9B,EAEAhc,EAAMob,mBAAqB,WAEzB,QAA4B,IAAvBnwB,KAAK2vB,gBAAgC3vB,KAAK8vB,cAEzC,IAAAhxB,KAASkB,KAAK8vB,aAAe,IAC1B,OAAA,EAGT,IAAIM,EAAWpwB,KAAKqwB,kBAAmBrwB,KAAKogB,MAAOpgB,KAAKwf,eACpDoG,EAAQ5lB,KAAK2vB,cAAgB3vB,KAAKogB,MACjC,OAAAgQ,EAAW,GAAKxK,EAAQ,EAEpB,EACGwK,EAAW,GAAKxK,EAAQ,GAE3B,EAEF,CACT,EAIM7Q,EAAAsZ,YAAc,SAAU3gB,EAAOoc,GAEnC,IAAImH,EAAcjxB,KAAK8mB,cAAepZ,EAAMvC,QACxCwX,EAAWsO,GAAeA,EAAYjrB,QACtCwe,EAAYyM,GAAejxB,KAAK8c,MAAMlN,QAASqhB,GACnDjxB,KAAKmf,cAAe,cAAezR,EAAO,CAAEoc,EAASnH,EAAU6B,GACjE,EAIAzP,EAAMmc,SAAW,WACf,IAAIC,EAASjC,IACTkC,EAAcpxB,KAAKivB,kBAAkBxT,EAAI0V,EAAO1V,EAChD4V,EAAcrxB,KAAKivB,kBAAkBtD,EAAIwF,EAAOxF,GAE/ClmB,KAAKogB,IAAKuL,GAAgB,GAAK3rB,KAAKogB,IAAKwL,GAAgB,IAC5DrxB,KAAKirB,cAET,EAaO3P,CAEP,2JElYE,SAAUtmB,EAAQ6f,GAUuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,IACAC,KAIJvG,EACI7f,EACAA,EAAOsmB,SACPtmB,EAAO6jB,cAtBb,CA0BC7jB,QAAQ,SAAkBA,EAAQsmB,EAAUxC,GAe/C,IAAI/D,EAAQuG,EAAS7P,UAoHd6P,OA7GDvG,EAAAuc,OAAS,SAAU7X,EAAOtd,GAC1B,IAAA2gB,EAAQ9c,KAAKwiB,WAAY/I,GAC7B,GAAMqD,GAAUA,EAAM1lB,OAAtB,CAGI,IAAAgN,EAAMpE,KAAK8c,MAAM1lB,OAEb+E,OAAU,IAAVA,EAAsBiI,EAAMjI,EAEhC,IAAAo1B,EA1BN,SAA2BzU,GACrB,IAAAyU,EAAWt7B,SAASu7B,yBAIjB,OAHD1U,EAAA9N,SAAS,SAAUgO,GACduU,EAAA9uB,YAAaua,EAAKhX,QAC/B,IACSurB,CACR,CAoBgBE,CAAkB3U,GAE7B4U,EAAWv1B,GAASiI,EACxB,GAAKstB,EACE1xB,KAAA6e,OAAOpc,YAAa8uB,OACpB,CACL,IAAII,EAAoB3xB,KAAK8c,MAAO3gB,GAAQ6J,QACvChG,KAAA6e,OAAOloB,aAAc46B,EAAUI,EACrC,CAED,GAAe,IAAVx1B,EAEH6D,KAAK8c,MAAQA,EAAMjC,OAAQ7a,KAAK8c,eACtB4U,EAEV1xB,KAAK8c,MAAQ9c,KAAK8c,MAAMjC,OAAQiC,OAC3B,CAEL,IAAI8U,EAAW5xB,KAAK8c,MAAMrH,OAAQtZ,EAAOiI,EAAMjI,GAC/C6D,KAAK8c,MAAQ9c,KAAK8c,MAAMjC,OAAQiC,GAAQjC,OAAQ+W,EACjD,CAED5xB,KAAK6iB,WAAY/F,GACZ9c,KAAA6xB,WAAY11B,GAAO,EA5BvB,CA6BH,EAEM4Y,EAAA+c,OAAS,SAAUrY,GACvBzZ,KAAKsxB,OAAQ7X,EAAOzZ,KAAK8c,MAAM1lB,OACjC,EAEM2d,EAAAgd,QAAU,SAAUtY,GACnBzZ,KAAAsxB,OAAQ7X,EAAO,EACtB,EAMM1E,EAAA3H,OAAS,SAAUqM,GACnB,IAAAqD,EAAQ9c,KAAK6mB,SAAUpN,GAC3B,GAAMqD,GAAUA,EAAM1lB,OAAtB,CAII,IAAA46B,EAAehyB,KAAK8c,MAAM1lB,OAAS,EAEjC0lB,EAAA9N,SAAS,SAAUgO,GACvBA,EAAK5P,SACL,IAAIjR,EAAQ6D,KAAK8c,MAAMlN,QAASoN,GACjBgV,EAAAvsB,KAAKwf,IAAK9oB,EAAO61B,GAChClZ,EAAMK,WAAYnZ,KAAK8c,MAAOE,EAC/B,GAAEhd,MAEEA,KAAA6xB,WAAYG,GAAc,EAX9B,CAYH,EAMMjd,EAAAkd,eAAiB,SAAU5b,GAC3B2G,IAAAA,EAAOhd,KAAK4mB,QAASvQ,GACzB,GAAM2G,EAAN,CAGAA,EAAKnH,UAEL,IAAI1Z,EAAQ6D,KAAK8c,MAAMlN,QAASoN,GAChChd,KAAK6xB,WAAY11B,EAJhB,CAKH,EAOM4Y,EAAA8c,WAAa,SAAUK,EAAkBC,GAC7C,IAAIC,EAAmBpyB,KAAKumB,gBAC5BvmB,KAAK8iB,eAAgBoP,GACrBlyB,KAAK0iB,qBACL1iB,KAAKwhB,iBAGDxE,IAAAA,EAAOhd,KAAK4mB,QAASwL,GACpBpV,IACEhd,KAAAwf,cAAgBxf,KAAK2mB,kBAAmB3J,IAE1Chd,KAAAwf,cAAgB/Z,KAAKwf,IAAKjlB,KAAK+e,OAAO3nB,OAAS,EAAG4I,KAAKwf,eAE5Dxf,KAAK0V,UAAW,aAAc,CAAEwc,IAE3BlyB,KAAAyc,OAAQzc,KAAKwf,eAEb2S,GACHnyB,KAAK+jB,0BAET,EAIOzI,CAEP,wFC/JE,SAAUtmB,EAAQ6f,GAUuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,IACAC,KAIJvG,EACI7f,EACAA,EAAOsmB,SACPtmB,EAAO6jB,cAtBb,CA0BC7jB,QAAQ,SAAkBA,EAAQsmB,EAAUxC,GAG/CwC,EAASmG,cAAc5f,KAAK,mBAC5B,IAAIkT,EAAQuG,EAAS7P,UAkDZ,SAAA4mB,EAAYl8B,EAAKm8B,GACxBtyB,KAAK7J,IAAMA,EACX6J,KAAKsyB,SAAWA,EAChBtyB,KAAKuyB,MACN,CA+CMjX,OAnGPvG,EAAMyd,gBAAkB,WACjBxyB,KAAA1F,GAAI,SAAU0F,KAAKyyB,SAC1B,EAEA1d,EAAM0d,SAAW,WACX,IAAAA,EAAWzyB,KAAK1C,QAAQm1B,SAC5B,GAAMA,EAAN,CAIA,IAAIzL,EAA8B,iBAAZyL,EAAuBA,EAAW,EACpDxL,EAAYjnB,KAAK+mB,wBAAyBC,GAE1C0L,EAAa,GACPzL,EAAAjY,SAAS,SAAU2T,GACvB,IAAAgQ,EASR,SAA4BhQ,GAErB,GAAqB,OAArBA,EAASnsB,SAAoB,CAC5B,IAAAo8B,EAAejQ,EAASxqB,aAAa,0BACrCU,EAAU8pB,EAASxqB,aAAa,8BAChCW,EAAa6pB,EAASxqB,aAAa,iCAClC,GAAAy6B,GAAgB/5B,GAAWC,EAC9B,MAAO,CAAE6pB,EAEZ,CAED,IAAIkQ,EAAe,mGAEf37B,EAAOyrB,EAASxrB,iBAAkB07B,GAC/B/Z,OAAAA,EAAMG,UAAW/hB,EACzB,CAxBwB47B,CAAmBnQ,GAC3B+P,EAAAA,EAAW7X,OAAQ8X,EACpC,IAEaD,EAAA1jB,SAAS,SAAU7Y,GACxB,IAAAk8B,EAAYl8B,EAAK6J,KACtB,GAAEA,KAbF,CAcH,EAgCWqyB,EAAA5mB,UAAU8N,YAAcT,EAAMS,YAE9B8Y,EAAA5mB,UAAU8mB,KAAO,WACrBvyB,KAAA7J,IAAIH,iBAAkB,OAAQgK,MAC9BA,KAAA7J,IAAIH,iBAAkB,QAASgK,MAEhC,IAAA3B,EAAM2B,KAAK7J,IAAIgC,aAAa,2BAC9B6H,KAAK7J,IAAIgC,aAAa,8BACpBX,EAASwI,KAAK7J,IAAIgC,aAAa,iCAEnC6H,KAAK7J,IAAIkI,IAAMA,EACV7G,GACEwI,KAAA7J,IAAIkC,aAAc,SAAUb,GAG9BwI,KAAA7J,IAAIoC,gBAAgB,0BACpByH,KAAA7J,IAAIoC,gBAAgB,8BACpByH,KAAA7J,IAAIoC,gBAAgB,gCAC3B,EAEW85B,EAAA5mB,UAAUnM,OAAS,SAAUoO,GACjC1N,KAAAZ,SAAUsO,EAAO,sBACxB,EAEW2kB,EAAA5mB,UAAUlM,QAAU,SAAUmO,GAClC1N,KAAAZ,SAAUsO,EAAO,qBACxB,EAEA2kB,EAAW5mB,UAAUrM,SAAW,SAAUsO,EAAOuN,GAE1Cjb,KAAA7J,IAAImX,oBAAqB,OAAQtN,MACjCA,KAAA7J,IAAImX,oBAAqB,QAAStN,MAEvC,IAAIgd,EAAOhd,KAAKsyB,SAASxL,cAAe9mB,KAAK7J,KACzCwsB,EAAW3F,GAAQA,EAAKhX,QACvBhG,KAAAsyB,SAASL,eAAgBtP,GAEzB3iB,KAAA7J,IAAI8W,UAAUQ,IAAKwN,GACxBjb,KAAKsyB,SAASnT,cAAe,WAAYzR,EAAOiV,EAClD,EAIArH,EAAS+W,WAAaA,EAEf/W,CAEP;;;;;;;;;;gBC3HE,IA0B6BA,EAA1BtmB,OAbsCmT,EAAOC,UAE9CD,WAW2BmT,EAVvBH,IACAC,4BC3BN,SAAUpmB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,IACAC,KACAC,KAIJxG,EACI7f,EACAA,EAAOsmB,SACPtmB,EAAO2zB,WACP3zB,EAAO6jB,cAzBb,CA6BC7jB,QAAQ,SAAkBA,EAAQsmB,EAAUqN,EAAY7P,GAG3D,IAAIia,EAAS,6BAIJ,SAAAC,EAAgBpD,EAAW3pB,GAClCjG,KAAK4vB,UAAYA,EACjB5vB,KAAKiG,OAASA,EACdjG,KAAKkhB,SACN,CAED8R,EAAevnB,UAAYtB,OAAOqR,OAAQmN,EAAWld,WAEtCunB,EAAAvnB,UAAUyV,QAAU,WAEjClhB,KAAKizB,WAAY,EACZjzB,KAAAkzB,YAA+B,GAAlBlzB,KAAK4vB,UACvB,IAAIuD,EAAgBnzB,KAAKiG,OAAO3I,QAAQqhB,YAAc,GAAI,EACrD3e,KAAAozB,OAASpzB,KAAK4vB,WAAauD,EAEhC,IAAIntB,EAAUhG,KAAKgG,QAAU/P,SAASC,cAAc,UACpD8P,EAAQiV,UAAY,4CACZjV,EAAAiV,WAAajb,KAAKkzB,WAAa,YAAc,QAE7CltB,EAAA3N,aAAc,OAAQ,UAE9B2H,KAAKqzB,UAELrtB,EAAQ3N,aAAc,aAAc2H,KAAKkzB,WAAa,WAAa,QAG/D,IAAAI,EAAMtzB,KAAKuzB,YACfvtB,EAAQvD,YAAa6wB,GAErBtzB,KAAKiG,OAAO3L,GAAI,SAAU0F,KAAKwzB,OAAOloB,KAAMtL,OACvCA,KAAA1F,GAAI,cAAe0F,KAAKiG,OAAOmhB,mBAAmB9b,KAAMtL,KAAKiG,QACpE,EAEe+sB,EAAAvnB,UAAUsW,SAAW,WAC7B/hB,KAAA4oB,eAAgB5oB,KAAKgG,SACrBhG,KAAAgG,QAAQhQ,iBAAkB,QAASgK,MAExCA,KAAKiG,OAAOD,QAAQvD,YAAazC,KAAKgG,QACxC,EAEegtB,EAAAvnB,UAAUgc,WAAa,WAEpCznB,KAAKiG,OAAOD,QAAQlP,YAAakJ,KAAKgG,SAEjChG,KAAA8oB,iBAAkB9oB,KAAKgG,SACvBhG,KAAAgG,QAAQsH,oBAAqB,QAAStN,KAC7C,EAEegzB,EAAAvnB,UAAU8nB,UAAY,WACnC,IAAID,EAAMr9B,SAASw9B,gBAAiBV,EAAQ,OACxCO,EAAAj7B,aAAc,QAAS,wBACvBi7B,EAAAj7B,aAAc,UAAW,eAC7B,IAa0Bq7B,EAbtBC,EAAO19B,SAASw9B,gBAAiBV,EAAQ,QACzCa,EAciB,iBAFKF,EAZa1zB,KAAKiG,OAAO3I,QAAQu2B,YAelDH,EAGF,KAAOA,EAAMI,GAAK,SACfJ,EAAMK,GAAK,KAAQL,EAAMM,GAAK,IACtC,MAAQN,EAAMO,GAAK,KAAQP,EAAMQ,GAAK,IACtC,MAAQR,EAAMS,GAAK,UACXT,EAAMO,GAAK,KAAQ,GAAKP,EAAMQ,IACtC,MAAQR,EAAMK,GAAK,KAAQ,GAAKL,EAAMM,IACtC,KAhBK,OAPFL,EAAAt7B,aAAc,IAAKu7B,GACnBD,EAAAt7B,aAAc,QAAS,SAEtB2H,KAAKozB,QACJO,EAAAt7B,aAAc,YAAa,oCAElCi7B,EAAI7wB,YAAakxB,GACVL,CACT,EAkBeN,EAAAvnB,UAAU8N,YAAcT,EAAMS,YAE9ByZ,EAAAvnB,UAAU0iB,QAAU,WAC5B,GAACnuB,KAAKizB,UAAN,CAGLjzB,KAAKiG,OAAOkhB,WACR,IAAAxO,EAAS3Y,KAAKkzB,WAAa,WAAa,OACvClzB,KAAAiG,OAAQ0S,IAHZ,CAIH,EAIeqa,EAAAvnB,UAAU2oB,OAAS,WAC3Bp0B,KAAKizB,YAGVjzB,KAAKgG,QAAQquB,UAAW,EACxBr0B,KAAKizB,WAAY,EACnB,EAEeD,EAAAvnB,UAAU4nB,QAAU,WAC3BrzB,KAAKizB,YAGXjzB,KAAKgG,QAAQquB,UAAW,EACxBr0B,KAAKizB,WAAY,EACnB,EAEeD,EAAAvnB,UAAU+nB,OAAS,WAE5B,IAAAzU,EAAS/e,KAAKiG,OAAO8Y,OAEzB,GAAK/e,KAAKiG,OAAO3I,QAAQ8gB,YAAcW,EAAO3nB,OAAS,EACrD4I,KAAKo0B,aADP,CAIA,IAAIE,EAAYvV,EAAO3nB,OAAS2nB,EAAO3nB,OAAS,EAAI,EAChDm9B,EAAav0B,KAAKkzB,WAAa,EAAIoB,EAEvCt0B,KADaA,KAAKiG,OAAOuZ,eAAiB+U,EAAa,UAAY,WAHlE,CAKH,EAEevB,EAAAvnB,UAAUkQ,QAAU,WACjC3b,KAAKynB,aACLznB,KAAK4V,QACP,EAIAkD,EAAMiI,OAAQzF,EAAS2F,SAAU,CAC/BuT,iBAAiB,EACjBX,WAAY,CACVC,GAAI,GACJC,GAAI,GAAIC,GAAI,GACZC,GAAI,GAAIC,GAAI,GACZC,GAAI,MAIR7Y,EAASmG,cAAc5f,KAAK,0BAC5B,IAAIkT,EAAQuG,EAAS7P,UA6Bd6P,OA3BPvG,EAAM0f,uBAAyB,WACvBz0B,KAAK1C,QAAQk3B,kBAInBx0B,KAAK00B,WAAa,IAAI1B,GAAgB,EAAIhzB,MAC1CA,KAAK20B,WAAa,IAAI3B,EAAgB,EAAGhzB,MAEpCA,KAAA1F,GAAI,WAAY0F,KAAK40B,yBAC5B,EAEA7f,EAAM6f,wBAA0B,WAC9B50B,KAAK00B,WAAW3S,WAChB/hB,KAAK20B,WAAW5S,WACX/hB,KAAA1F,GAAI,aAAc0F,KAAK60B,0BAC9B,EAEA9f,EAAM8f,0BAA4B,WAChC70B,KAAK00B,WAAWjN,aAChBznB,KAAK20B,WAAWlN,aACXznB,KAAAwV,IAAK,aAAcxV,KAAK60B,0BAC/B,EAIAvZ,EAAS0X,eAAiBA,EAEnB1X,CAEP,iCChNE,SAAUtmB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACb7f,EACAmmB,IACAC,KACAC,KAIJxG,EACI7f,EACAA,EAAOsmB,SACPtmB,EAAO2zB,WACP3zB,EAAO6jB,cAzBb,CA6BC7jB,QAAQ,SAAkBA,EAAQsmB,EAAUqN,EAAY7P,GAM3D,SAASgc,EAAU7uB,GACjBjG,KAAKiG,OAASA,EACdjG,KAAKkhB,SACN,CAED4T,EAASrpB,UAAYtB,OAAOqR,OAAQmN,EAAWld,WAEtCqpB,EAAArpB,UAAUyV,QAAU,WAEtBlhB,KAAA+0B,OAAS9+B,SAASC,cAAc,MACrC8J,KAAK+0B,OAAO9Z,UAAY,qBAExBjb,KAAKg1B,KAAO,GAEZh1B,KAAKi1B,YAAcj1B,KAAKk1B,QAAQ5pB,KAAMtL,MACjCA,KAAA1F,GAAI,cAAe0F,KAAKiG,OAAOmhB,mBAAmB9b,KAAMtL,KAAKiG,QACpE,EAES6uB,EAAArpB,UAAUsW,SAAW,WAC5B/hB,KAAKm1B,UACLn1B,KAAK+0B,OAAO/+B,iBAAkB,QAASgK,KAAKi1B,aACvCj1B,KAAA4oB,eAAgB5oB,KAAK+0B,QAE1B/0B,KAAKiG,OAAOD,QAAQvD,YAAazC,KAAK+0B,OACxC,EAESD,EAAArpB,UAAUgc,WAAa,WAC9BznB,KAAK+0B,OAAOznB,oBAAqB,QAAStN,KAAKi1B,aAC1Cj1B,KAAA8oB,iBAAkB9oB,KAAK+0B,QAE5B/0B,KAAKiG,OAAOD,QAAQlP,YAAakJ,KAAK+0B,OACxC,EAESD,EAAArpB,UAAU0pB,QAAU,WAE3B,IAAIvP,EAAQ5lB,KAAKiG,OAAO8Y,OAAO3nB,OAAS4I,KAAKg1B,KAAK59B,OAC7CwuB,EAAQ,EACX5lB,KAAKo1B,QAASxP,GACJA,EAAQ,GACb5lB,KAAAq1B,YAAazP,EAEtB,EAESkP,EAAArpB,UAAU2pB,QAAU,SAAUE,GAMrC,IALI,IAAA/D,EAAWt7B,SAASu7B,yBACpB+D,EAAU,GACVn+B,EAAS4I,KAAKg1B,KAAK59B,OACnBgQ,EAAMhQ,EAASk+B,EAETr+B,EAAIG,EAAQH,EAAImQ,EAAKnQ,IAAM,CAC/B,IAAAu+B,EAAMv/B,SAASC,cAAc,MACjCs/B,EAAIva,UAAY,MAChBua,EAAIn9B,aAAc,aAAc,aAAgBpB,EAAI,IACpDs6B,EAAS9uB,YAAa+yB,GACtBD,EAAQ1zB,KAAM2zB,EACf,CAEIx1B,KAAA+0B,OAAOtyB,YAAa8uB,GACzBvxB,KAAKg1B,KAAOh1B,KAAKg1B,KAAKna,OAAQ0a,EAChC,EAEST,EAAArpB,UAAU4pB,WAAa,SAAUC,GAEvBt1B,KAAKg1B,KAAKvf,OAAQzV,KAAKg1B,KAAK59B,OAASk+B,EAAOA,GAElDtmB,SAAS,SAAUwmB,GACvBx1B,KAAA+0B,OAAOj+B,YAAa0+B,EAC1B,GAAEx1B,KACL,EAES80B,EAAArpB,UAAUgqB,eAAiB,WAE7Bz1B,KAAK01B,cACR11B,KAAK01B,YAAYza,UAAY,MACxBjb,KAAA01B,YAAYn9B,gBAAgB,iBAG7ByH,KAAKg1B,KAAK59B,SAGhB4I,KAAK01B,YAAc11B,KAAKg1B,KAAMh1B,KAAKiG,OAAOuZ,eAC1Cxf,KAAK01B,YAAYza,UAAY,kBACxBjb,KAAA01B,YAAYr9B,aAAc,eAAgB,QACjD,EAEAy8B,EAASrpB,UAAUkqB,MACnBb,EAASrpB,UAAUypB,QAAU,SAAUxnB,GACrC,IAAIvC,EAASuC,EAAMvC,OAEd,GAAmB,MAAnBA,EAAO3U,SAAP,CAILwJ,KAAKiG,OAAOkhB,WACZ,IAAIhrB,EAAQ6D,KAAKg1B,KAAKplB,QAASzE,GAC1BnL,KAAAiG,OAAOwW,OAAQtgB,EAJnB,CAKH,EAES24B,EAAArpB,UAAUkQ,QAAU,WAC3B3b,KAAKynB,aACLznB,KAAK4V,QACP,EAEA0F,EAASwZ,SAAWA,EAIpBhc,EAAMiI,OAAQzF,EAAS2F,SAAU,CAC/B2U,UAAU,IAGZta,EAASmG,cAAc5f,KAAK,mBAE5B,IAAIkT,EAAQuG,EAAS7P,UAmCd6P,OAjCPvG,EAAM8gB,gBAAkB,WAChB71B,KAAK1C,QAAQs4B,WAGd51B,KAAA41B,SAAW,IAAId,EAAU90B,MAEzBA,KAAA1F,GAAI,WAAY0F,KAAK81B,kBACrB91B,KAAA1F,GAAI,SAAU0F,KAAK+1B,wBACnB/1B,KAAA1F,GAAI,aAAc0F,KAAKg2B,gBACvBh2B,KAAA1F,GAAI,SAAU0F,KAAKg2B,gBACnBh2B,KAAA1F,GAAI,aAAc0F,KAAKi2B,oBAC9B,EAEAlhB,EAAM+gB,iBAAmB,WACvB91B,KAAK41B,SAAS7T,UAChB,EAEAhN,EAAMghB,uBAAyB,WAC7B/1B,KAAK41B,SAASH,gBAChB,EAEA1gB,EAAMihB,eAAiB,WACrBh2B,KAAK41B,SAAST,SAChB,EAEApgB,EAAMkhB,mBAAqB,WACzBj2B,KAAK41B,SAASnO,YAChB,EAIAnM,EAASwZ,SAAWA,EAEbxZ,CAEP,iCCzLE,SAAUtmB,EAAQ6f,GAWuB1M,EAAOC,QAE9CD,UAAiB0M,EACbsG,IACAC,IACAC,KAIJxG,EACI7f,EAAO8f,UACP9f,EAAO6jB,aACP7jB,EAAOsmB,UAvBb,CA2BCtmB,QAAQ,SAAkB8f,EAAWgE,EAAOwC,GAM/C,SAAS4a,EAAQjwB,GACfjG,KAAKiG,OAASA,EACdjG,KAAKiB,MAAQ,UAEbjB,KAAKm2B,mBAAqBn2B,KAAKo2B,iBAAiB9qB,KAAMtL,MACtDA,KAAKq2B,iBAAmBr2B,KAAKs2B,eAAehrB,KAAMtL,KACnD,CAEDk2B,EAAOzqB,UAAYtB,OAAOqR,OAAQ1G,EAAUrJ,WAGrCyqB,EAAAzqB,UAAU8qB,KAAO,WACH,WAAdv2B,KAAKiB,QAIShL,SAASse,OAEjBte,SAAAD,iBAAkB,mBAAoBgK,KAAKq2B,mBAItDr2B,KAAKiB,MAAQ,UAEJhL,SAAAD,iBAAkB,mBAAoBgK,KAAKm2B,oBAEpDn2B,KAAKw2B,QACP,EAEON,EAAAzqB,UAAU+qB,KAAO,WAEjB,GAAc,WAAdx2B,KAAKiB,MAAL,CAID,IAAAw1B,EAAOz2B,KAAKiG,OAAO3I,QAAQo5B,SAExBD,EAAe,iBAARA,EAAmBA,EAAO,IACxC,IAAIvc,EAAQla,KAEZA,KAAK22B,QACA32B,KAAAxE,QAAU3E,YAAY,WACnBqjB,EAAAjU,OAAOigB,MAAM,GACnBhM,EAAMsc,MACP,GAAEC,EAXF,CAYH,EAEOP,EAAAzqB,UAAUmrB,KAAO,WACtB52B,KAAKiB,MAAQ,UACbjB,KAAK22B,QAEI1gC,SAAAqX,oBAAqB,mBAAoBtN,KAAKm2B,mBACzD,EAEOD,EAAAzqB,UAAUkrB,MAAQ,WACvBt/B,aAAc2I,KAAKxE,QACrB,EAEO06B,EAAAzqB,UAAUorB,MAAQ,WACJ,WAAd72B,KAAKiB,QACRjB,KAAKiB,MAAQ,SACbjB,KAAK22B,QAET,EAEOT,EAAAzqB,UAAUqrB,QAAU,WAEN,UAAd92B,KAAKiB,OACRjB,KAAKu2B,MAET,EAGOL,EAAAzqB,UAAU2qB,iBAAmB,WAE5Bp2B,KADa/J,SAASse,OACP,QAAU,YACjC,EAEO2hB,EAAAzqB,UAAU6qB,eAAiB,WAChCt2B,KAAKu2B,OACItgC,SAAAqX,oBAAqB,mBAAoBtN,KAAKq2B,iBACzD,EAIAvd,EAAMiI,OAAQzF,EAAS2F,SAAU,CAC/B8V,sBAAsB,IAGxBzb,EAASmG,cAAc5f,KAAK,iBAC5B,IAAIkT,EAAQuG,EAAS7P,UA+Dd6P,OA7DPvG,EAAMiiB,cAAgB,WACfh3B,KAAAi3B,OAAS,IAAIf,EAAQl2B,MAErBA,KAAA1F,GAAI,WAAY0F,KAAKk3B,gBACrBl3B,KAAA1F,GAAI,WAAY0F,KAAKm3B,YACrBn3B,KAAA1F,GAAI,cAAe0F,KAAKm3B,YACxBn3B,KAAA1F,GAAI,aAAc0F,KAAKo3B,iBAC9B,EAEAriB,EAAMmiB,eAAiB,WACfl3B,KAAK1C,QAAQo5B,WAGnB12B,KAAKi3B,OAAOV,OACPv2B,KAAAgG,QAAQhQ,iBAAkB,aAAcgK,MAC/C,EAIA+U,EAAMsiB,WAAa,WACjBr3B,KAAKi3B,OAAOV,MACd,EAEAxhB,EAAMoiB,WAAa,WACjBn3B,KAAKi3B,OAAOL,MACd,EAEA7hB,EAAMuiB,YAAc,WAClBt3B,KAAKi3B,OAAOJ,OACd,EAEA9hB,EAAMwiB,cAAgB,WACpBv3B,KAAKi3B,OAAOH,SACd,EAEA/hB,EAAMqiB,iBAAmB,WACvBp3B,KAAKi3B,OAAOL,OACP52B,KAAAgG,QAAQsH,oBAAqB,aAActN,KAClD,EAKA+U,EAAMyiB,aAAe,WACbx3B,KAAK1C,QAAQy5B,uBAGnB/2B,KAAKi3B,OAAOJ,QACP72B,KAAAgG,QAAQhQ,iBAAkB,aAAcgK,MAC/C,EAGA+U,EAAM0iB,aAAe,WACnBz3B,KAAKi3B,OAAOH,UACP92B,KAAAgG,QAAQsH,oBAAqB,aAActN,KAClD,EAIAsb,EAAS4a,OAASA,EAEX5a,CAEP,UH7JQoc,KACAC,KAKCrc,8BI9BT,IAAIoK,GAAiBpK,GAAS7P,UAAUia,eACxCpK,GAAS7P,UAAUia,eAAiB,WAC3B1lB,KAAK0d,cAIKgI,GAAA3lB,MAAOC,KAAM9D,WAE5B8D,KAAKmf,cAAc,cACvB,EAEAnqB,OAAO4W,IAAIgsB,SAAW,CAClBriC,KAAM,WACF,IAAI2W,EAAOlM,KACP63B,EAAY,GAAG71B,MAAMuE,KAAKtQ,SAASkB,iBAAiB,mBAAqB,GAE7E,IAAK0gC,EACM,OAAA,EAIDA,EAAA7oB,SAAQ,SAAS6oB,GACvB3rB,EAAK4rB,aAAaD,EAC9B,GACK,EAEDC,aAAc,SAAUD,GACpB,IACIE,EAAkBxkB,KAAKC,MAAMqkB,EAAU1/B,aAAa,yBAGpD6/B,EAAQ,IAAI1c,GAASuc,EACrBE,GALO/3B,KASNi4B,UAAUJ,EAAWG,EAC7B,EAEDC,UAAW,SAAUJ,EAAWG,GAC5B,IAAI9rB,EAAOlM,KACPk4B,EAAOjiC,SAASoW,cAAc,sBAGlC,IAAK6rB,EACM,OAAA,EAGP,IAAAC,EAAY,GAAGn2B,MAAMuE,KAAK2xB,EAAK/gC,iBAAiB,6BAA+B,GAGnF+U,EAAKksB,aAAaJ,EAAO,EAAGG,GAGtBH,EAAA19B,GAAG,cAAc,WACnB,IAAIgsB,EAAe0R,EAAMxY,cACzBtT,EAAKksB,aAAaJ,EAAO1R,EAAc6R,EACnD,IAGkBA,EAAAnpB,SAAQ,SAASqpB,GACdA,EAAAriC,iBAAiB,SAAS,WAE3B,IAAAsiC,EAAgBD,EAASlgC,aAAa,sBAEtCmgC,GACApsB,EAAKqsB,UAAUP,EAAOM,EAAeH,EAEzD,GACA,GACK,EAGDC,aAAc,SAASJ,EAAOM,EAAeH,GACzC,IACIK,EAAgBviC,SAASoW,cAAc,+CAAiDisB,EAAgB,MACxGG,EAAcD,EAAcnsB,cAAc,8BAC1CqsB,EAAaF,EAAcnsB,cAAc,qCACzCssB,EAJO34B,KAIa44B,iBAAiBF,GAE/BP,EAAAnpB,SAAQ,SAAS6pB,GAEXA,EAAA5rB,UAAUG,OAAO,aAGzB,IAAA0rB,EAAiBD,EAAYxsB,cAAc,8BAE3CrX,OAAOqS,WAAa,IACpByxB,EAAex2B,MAAMiF,OAAS,MAE9BuxB,EAAex2B,MAAMiF,OAAS,MAE9C,IAEoBkxB,EAAAn2B,MAAMiF,OAASoxB,EAAa,KAC1BH,EAAAvrB,UAAUQ,IAAI,YAC/B,EAGD8qB,UAAW,SAASP,EAAOM,EAAeH,GAEtCH,EAAMvb,OAAO6b,GACbN,EAAMb,aAFKn3B,KAINo4B,aAAaJ,EAAOM,EAAeH,EAC3C,EAGDS,iBAAkB,SAASG,GACvB,IAAIxxB,EAAS,EAGN,OAFPA,GAAkBwxB,EAAO5kB,YAG5B,GAIL,ICxHyB7Y,GAAMC,GACvBC,GDuHJw9B,ICxHqB19B,GDwHO,WACrBtG,OAAA4W,IAAIgsB,SAASriC,MACxB,EC1H+BgG,GD0H5B,ICxHQ,WACH,IAAIiC,EAAUwC,KACV/D,EAAOC,UAWX7E,aAAamE,IACHA,GAAA3E,YAVE,WACE2E,GAAA,KAGDF,GAAAyE,MAAMvC,EAASvB,EAEpC,GAIoCV,GAIpC,GDwGAvG,OAAOgB,iBAAiB,SAAUgjC,IAElChkC,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIgsB,SAASriC,MACxB,IAAG;;;;;;;AErIH,WASE,IAAI0jC,EAAa,EACbC,EAAe,CAAE,EAGrB,SAASC,EAAS77B,GAChB,IAAKA,EACG,MAAA,IAAI87B,MAAM,6CAEd,IAAC97B,EAAQ0I,QACL,MAAA,IAAIozB,MAAM,oDAEd,IAAC97B,EAAQuqB,QACL,MAAA,IAAIuR,MAAM,oDAGlBp5B,KAAK2N,IAAM,YAAcsrB,EACpBj5B,KAAA1C,QAAU67B,EAASE,QAAQtY,OAAO,GAAIoY,EAASlY,SAAU3jB,GACzD0C,KAAAgG,QAAUhG,KAAK1C,QAAQ0I,QAC5BhG,KAAKs5B,QAAU,IAAIH,EAASE,QAAQr5B,KAAKgG,SACzChG,KAAKsJ,SAAWhM,EAAQuqB,QACxB7nB,KAAKu5B,KAAOv5B,KAAK1C,QAAQk8B,WAAa,aAAe,WAChDx5B,KAAAy5B,QAAUz5B,KAAK1C,QAAQm8B,QAC5Bz5B,KAAK05B,aAAe,KACf15B,KAAA25B,MAAQR,EAASS,MAAMC,aAAa,CACvC5xB,KAAMjI,KAAK1C,QAAQq8B,MACnBJ,KAAMv5B,KAAKu5B,OAEbv5B,KAAKxC,QAAU27B,EAASW,QAAQC,sBAAsB/5B,KAAK1C,QAAQE,SAE/D27B,EAASa,cAAch6B,KAAK1C,QAAQ28B,UACtCj6B,KAAK1C,QAAQ28B,OAASd,EAASa,cAAch6B,KAAK1C,QAAQ28B,SAEvDj6B,KAAA25B,MAAMlsB,IAAIzN,MACVA,KAAAxC,QAAQiQ,IAAIzN,MACJk5B,EAAAl5B,KAAK2N,KAAO3N,KACXi5B,GAAA,CACf,CAGQE,EAAA1tB,UAAUyuB,aAAe,SAAStK,GACpC5vB,KAAA25B,MAAMO,aAAal6B,KAAM4vB,EAC/B,EAGQuJ,EAAA1tB,UAAUoD,QAAU,SAAS5S,GAC/B+D,KAAKy5B,SAGNz5B,KAAKsJ,UACFtJ,KAAAsJ,SAASvJ,MAAMC,KAAM/D,EAE7B,EAIQk9B,EAAA1tB,UAAUkQ,QAAU,WACtB3b,KAAAxC,QAAQ4P,OAAOpN,MACfA,KAAA25B,MAAMvsB,OAAOpN,aACXk5B,EAAal5B,KAAK2N,IAC1B,EAIQwrB,EAAA1tB,UAAU4nB,QAAU,WAEpB,OADPrzB,KAAKy5B,SAAU,EACRz5B,IACR,EAIQm5B,EAAA1tB,UAAU2oB,OAAS,WAGnB,OAFPp0B,KAAKxC,QAAQ28B,UACbn6B,KAAKy5B,SAAU,EACRz5B,IACR,EAIQm5B,EAAA1tB,UAAUya,KAAO,WACjB,OAAAlmB,KAAK25B,MAAMzT,KAAKlmB,KACxB,EAIQm5B,EAAA1tB,UAAUwa,SAAW,WACrB,OAAAjmB,KAAK25B,MAAM1T,SAASjmB,KAC5B,EAGQm5B,EAAAiB,UAAY,SAASzhB,GAC5B,IAAI0hB,EAAoB,GACxB,IAAA,IAASC,KAAepB,EACJmB,EAAAx4B,KAAKq3B,EAAaoB,IAEtC,IAAA,IAASrjC,EAAI,EAAGsjC,EAAMF,EAAkBjjC,OAAQH,EAAIsjC,EAAKtjC,IACrCojC,EAAApjC,GAAG0hB,IAExB,EAIDwgB,EAASqB,WAAa,WACpBrB,EAASiB,UAAU,UACpB,EAIDjB,EAASsB,WAAa,WACpBtB,EAASiB,UAAU,UACpB,EAIDjB,EAASuB,UAAY,WAEnB,IAAA,IAASJ,KADTnB,EAASW,QAAQa,aACOzB,EACTA,EAAAoB,GAAab,SAAU,EAE/B,OAAAz5B,IACR,EAIDm5B,EAASwB,WAAa,WACpBxB,EAASW,QAAQa,YAClB,EAIDxB,EAASyB,eAAiB,WACjB,OAAA5lC,OAAOwS,aAAevR,SAASwC,gBAAgBgP,YACvD,EAID0xB,EAAS0B,cAAgB,WACvB,OAAO5kC,SAASwC,gBAAgB6O,WACjC,EAED6xB,EAAS2B,SAAW,GAEpB3B,EAASlY,SAAW,CAClBzjB,QAASxI,OACT+lC,YAAY,EACZtB,SAAS,EACTE,MAAO,UACPH,YAAY,EACZS,OAAQ,GAGVd,EAASa,cAAgB,CACvB,iBAAkB,WAChB,OAAOh6B,KAAKxC,QAAQgK,cAAgBxH,KAAKs5B,QAAQviB,aAClD,EACD,gBAAiB,WACf,OAAO/W,KAAKxC,QAAQ6J,aAAerH,KAAKs5B,QAAQxiB,YACjD,GAGH9hB,OAAOmkC,SAAWA,CACjB,CAzKH,GAyKG,WAID,SAAS6B,EAA0B1xB,GAC1BtU,OAAA6B,WAAWyS,EAAU,IAAO,GACpC,CAED,IAAI2vB,EAAa,EACbgC,EAAW,CAAE,EACb9B,EAAWnkC,OAAOmkC,SAClB+B,EAAgBlmC,OAAOsK,OAG3B,SAASw6B,EAAQ9zB,GACfhG,KAAKgG,QAAUA,EACfhG,KAAKq5B,QAAUF,EAASE,QACxBr5B,KAAKs5B,QAAU,IAAIt5B,KAAKq5B,QAAQrzB,GAChChG,KAAK2N,IAAM,oBAAsBsrB,EACjCj5B,KAAKm7B,WAAY,EACjBn7B,KAAKo7B,WAAY,EACjBp7B,KAAKq7B,UAAY,CACf5f,EAAGzb,KAAKs5B,QAAQgC,aAChB3P,EAAG3rB,KAAKs5B,QAAQiC,aAElBv7B,KAAKw7B,UAAY,CACfC,SAAU,CAAE,EACZjC,WAAY,CAAE,GAGhBxzB,EAAQ01B,mBAAqB17B,KAAK2N,IACzBstB,EAAAj1B,EAAQ01B,oBAAsB17B,KACzBi5B,GAAA,EACTE,EAASwC,gBACZxC,EAASwC,eAAgB,EAChBxC,EAAAwC,cAAgB,IAAI7B,EAAQ9kC,SAGvCgL,KAAK47B,+BACL57B,KAAK67B,8BACN,CAGO/B,EAAAruB,UAAUgC,IAAM,SAASquB,GAC/B,IAAIvC,EAAOuC,EAASx+B,QAAQk8B,WAAa,aAAe,WACxDx5B,KAAKw7B,UAAUjC,GAAMuC,EAASnuB,KAAOmuB,EACrC97B,KAAKm6B,SACN,EAGOL,EAAAruB,UAAUswB,WAAa,WAC7B,IAAIC,EAAkBh8B,KAAKq5B,QAAQ4C,cAAcj8B,KAAKw7B,UAAUhC,YAC5D0C,EAAgBl8B,KAAKq5B,QAAQ4C,cAAcj8B,KAAKw7B,UAAUC,UAC1DU,EAAWn8B,KAAKgG,SAAWhG,KAAKgG,QAAQhR,OACxCgnC,GAAmBE,IAAkBC,IAClCn8B,KAAAs5B,QAAQ9jB,IAAI,qBACVylB,EAASj7B,KAAK2N,KAExB,EAGOmsB,EAAAruB,UAAUowB,6BAA+B,WAC/C,IAAI3vB,EAAOlM,KAEX,SAASo8B,IACPlwB,EAAKmwB,eACLnwB,EAAKkvB,WAAY,CAClB,CAEIp7B,KAAAs5B,QAAQh/B,GAAG,oBAAoB,WAC7B4R,EAAKkvB,YACRlvB,EAAKkvB,WAAY,EACjBjC,EAAShb,sBAAsBie,GAEvC,GACG,EAGOtC,EAAAruB,UAAUmwB,6BAA+B,WAC/C,IAAI1vB,EAAOlM,KACX,SAASs8B,IACPpwB,EAAKqwB,eACLrwB,EAAKivB,WAAY,CAClB,CAEIn7B,KAAAs5B,QAAQh/B,GAAG,oBAAoB,WAC7B4R,EAAKivB,YAAahC,EAASqD,UAC9BtwB,EAAKivB,WAAY,EACjBhC,EAAShb,sBAAsBme,GAEvC,GACG,EAGOxC,EAAAruB,UAAU4wB,aAAe,WAC/BlD,EAASW,QAAQa,YAClB,EAGOb,EAAAruB,UAAU8wB,aAAe,WAC/B,IAAIE,EAAkB,CAAE,EACpBC,EAAO,CACTlD,WAAY,CACVmD,UAAW38B,KAAKs5B,QAAQgC,aACxBD,UAAWr7B,KAAKq7B,UAAU5f,EAC1BmhB,QAAS,QACTC,SAAU,QAEZpB,SAAU,CACRkB,UAAW38B,KAAKs5B,QAAQiC,YACxBF,UAAWr7B,KAAKq7B,UAAU1P,EAC1BiR,QAAS,OACTC,SAAU,OAId,IAAA,IAASC,KAAWJ,EAAM,CACpB,IAAAnD,EAAOmD,EAAKI,GAEZlN,EADY2J,EAAKoD,UAAYpD,EAAK8B,UACV9B,EAAKqD,QAAUrD,EAAKsD,SAEhD,IAAA,IAASvC,KAAet6B,KAAKw7B,UAAUsB,GAAU,CAC/C,IAAIhB,EAAW97B,KAAKw7B,UAAUsB,GAASxC,GACnC,GAA0B,OAA1BwB,EAASpC,aAAT,CAGA,IAAAqD,EAAwBxD,EAAK8B,UAAYS,EAASpC,aAClDsD,EAAuBzD,EAAKoD,WAAab,EAASpC,cACjCqD,GAAyBC,IACvBD,IAA0BC,KAE/ClB,EAAS5B,aAAatK,GACtB6M,EAAgBX,EAASnC,MAAMjY,IAAMoa,EAASnC,MAP/C,CASF,CACF,CAED,IAAA,IAASsD,KAAYR,EACHA,EAAAQ,GAAUC,gBAG5Bl9B,KAAKq7B,UAAY,CACf5f,EAAGihB,EAAKlD,WAAWmD,UACnBhR,EAAG+Q,EAAKjB,SAASkB,UAEpB,EAGO7C,EAAAruB,UAAUjE,YAAc,WAE9B,OAAIxH,KAAKgG,SAAWhG,KAAKgG,QAAQhR,OACxBmkC,EAASyB,iBAGX56B,KAAKs5B,QAAQ9xB,aACrB,EAGOsyB,EAAAruB,UAAU2B,OAAS,SAAS0uB,UAC3B97B,KAAKw7B,UAAUM,EAASvC,MAAMuC,EAASnuB,KAC9C3N,KAAK+7B,YACN,EAGOjC,EAAAruB,UAAUpE,WAAa,WAE7B,OAAIrH,KAAKgG,SAAWhG,KAAKgG,QAAQhR,OACxBmkC,EAAS0B,gBAGX76B,KAAKs5B,QAAQjyB,YACrB,EAIOyyB,EAAAruB,UAAUkQ,QAAU,WAC1B,IAAIud,EAAe,GACV,IAAA,IAAAK,KAAQv5B,KAAKw7B,UACpB,IAAA,IAASlB,KAAet6B,KAAKw7B,UAAUjC,GACrCL,EAAar3B,KAAK7B,KAAKw7B,UAAUjC,GAAMe,IAG3C,IAAA,IAASrjC,EAAI,EAAGsjC,EAAMrB,EAAa9hC,OAAQH,EAAIsjC,EAAKtjC,IACrCiiC,EAAAjiC,GAAG0kB,SAEnB,EAIOme,EAAAruB,UAAU0uB,QAAU,WAE1B,IAIIuC,EAJAP,EAAWn8B,KAAKgG,SAAWhG,KAAKgG,QAAQhR,OAExCmoC,EAAgBhB,OAAW,EAAYn8B,KAAKs5B,QAAQW,SACpDwC,EAAkB,CAAE,EAyBxB,IAAA,IAASK,KAtBT98B,KAAKu8B,eACEG,EAAA,CACLlD,WAAY,CACV2D,cAAehB,EAAW,EAAIgB,EAAcjZ,KAC5CkZ,cAAejB,EAAW,EAAIn8B,KAAKq7B,UAAU5f,EAC7C4hB,iBAAkBr9B,KAAKqH,aACvBg0B,UAAWr7B,KAAKq7B,UAAU5f,EAC1BmhB,QAAS,QACTC,SAAU,OACVS,WAAY,QAEd7B,SAAU,CACR0B,cAAehB,EAAW,EAAIgB,EAAcI,IAC5CH,cAAejB,EAAW,EAAIn8B,KAAKq7B,UAAU1P,EAC7C0R,iBAAkBr9B,KAAKwH,cACvB6zB,UAAWr7B,KAAKq7B,UAAU1P,EAC1BiR,QAAS,OACTC,SAAU,KACVS,WAAY,QAIU,CACpB,IAAA/D,EAAOmD,EAAKI,GAChB,IAAA,IAASxC,KAAet6B,KAAKw7B,UAAUsB,GAAU,CAC/C,IAKIU,EAAiBC,EAAiBC,EACfC,EANnB7B,EAAW97B,KAAKw7B,UAAUsB,GAASxC,GACnCsD,EAAa9B,EAASx+B,QAAQ28B,OAC9B4D,EAAkB/B,EAASpC,aAC3BoE,EAAgB,EAChBC,EAAmC,MAAnBF,EAIhB/B,EAAS91B,UAAY81B,EAAS91B,QAAQhR,SACxC8oC,EAAgBhC,EAASxC,QAAQW,SAASV,EAAK+D,aAGvB,mBAAfM,EACIA,EAAAA,EAAW79B,MAAM+7B,GAED,iBAAf8B,IACdA,EAAaj8B,WAAWi8B,GACpB9B,EAASx+B,QAAQ28B,OAAOrqB,QAAQ,MAAY,IAC9CguB,EAAan4B,KAAKu4B,KAAKzE,EAAK8D,iBAAmBO,EAAa,OAI9CJ,EAAAjE,EAAK6D,cAAgB7D,EAAK4D,cAC5CrB,EAASpC,aAAej0B,KAAKurB,MAAM8M,EAAgBN,EAAkBI,GACrEH,EAAkBI,EAAkBtE,EAAK8B,UACxBqC,EAAA5B,EAASpC,cAAgBH,EAAK8B,UAE5BsC,GAACF,IAAoBC,GAEnCK,IAHeN,GAAmBC,IAI5B5B,EAAA5B,aAAaX,EAAKsD,UAC3BJ,EAAgBX,EAASnC,MAAMjY,IAAMoa,EAASnC,SAEtCoE,GAAiBJ,GAIlBI,GAAiBxE,EAAK8B,WAAaS,EAASpC,gBAH1CoC,EAAA5B,aAAaX,EAAKqD,SAC3BH,EAAgBX,EAASnC,MAAMjY,IAAMoa,EAASnC,MAMjD,CACF,CAQM,OANPR,EAAShb,uBAAsB,WAC7B,IAAA,IAAS8e,KAAYR,EACHA,EAAAQ,GAAUC,eAElC,IAEWl9B,IACR,EAGO85B,EAAAC,sBAAwB,SAAS/zB,GACvC,OAAO8zB,EAAQmE,cAAcj4B,IAAY,IAAI8zB,EAAQ9zB,EACtD,EAGD8zB,EAAQa,WAAa,WACnB,IAAA,IAASuD,KAAajD,EACXA,EAAAiD,GAAW/D,SAEvB,EAIOL,EAAAmE,cAAgB,SAASj4B,GACxB,OAAAi1B,EAASj1B,EAAQ01B,mBACzB,EAED1mC,OAAOsK,OAAS,WACV47B,GACaA,IAEjBpB,EAAQa,YACT,EAGQxB,EAAAhb,sBAAwB,SAAS7U,IACxBtU,OAAOmpB,uBACrBnpB,OAAOmpC,0BACPnpC,OAAOopC,6BACPpD,GACQz0B,KAAKvR,OAAQsU,EACxB,EACD6vB,EAASW,QAAUA,CAClB,CArTA,GAqTA,WAIQ,SAAAuE,EAAengC,EAAGC,GAClB,OAAAD,EAAEw7B,aAAev7B,EAAEu7B,YAC3B,CAEQ,SAAA4E,EAAsBpgC,EAAGC,GACzB,OAAAA,EAAEu7B,aAAex7B,EAAEw7B,YAC3B,CAED,IAAI6E,EAAS,CACX9C,SAAU,CAAE,EACZjC,WAAY,CAAE,GAEZL,EAAWnkC,OAAOmkC,SAGtB,SAASS,EAAMt8B,GACb0C,KAAKiI,KAAO3K,EAAQ2K,KACpBjI,KAAKu5B,KAAOj8B,EAAQi8B,KACpBv5B,KAAK0hB,GAAK1hB,KAAKiI,KAAO,IAAMjI,KAAKu5B,KACjCv5B,KAAKw7B,UAAY,GACjBx7B,KAAKw+B,qBACLD,EAAOv+B,KAAKu5B,MAAMv5B,KAAKiI,MAAQjI,IAChC,CAGK45B,EAAAnuB,UAAUgC,IAAM,SAASquB,GACxB97B,KAAAw7B,UAAU35B,KAAKi6B,EACrB,EAGKlC,EAAAnuB,UAAU+yB,mBAAqB,WACnCx+B,KAAKy+B,cAAgB,CACnBC,GAAI,GACJC,KAAM,GACNza,KAAM,GACNC,MAAO,GAEV,EAGKyV,EAAAnuB,UAAUyxB,cAAgB,WACrB,IAAA,IAAAtN,KAAa5vB,KAAKy+B,cAAe,CACpC,IAAAjD,EAAYx7B,KAAKy+B,cAAc7O,GAC/BgP,EAAwB,OAAdhP,GAAoC,SAAdA,EAC1B4L,EAAAh2B,KAAKo5B,EAAUN,EAAwBD,GACxC,IAAA,IAAApnC,EAAI,EAAGsjC,EAAMiB,EAAUpkC,OAAQH,EAAIsjC,EAAKtjC,GAAK,EAAG,CACnD,IAAA6kC,EAAWN,EAAUvkC,IACrB6kC,EAASx+B,QAAQy9B,YAAc9jC,IAAMukC,EAAUpkC,OAAS,IACjD0kC,EAAAjtB,QAAQ,CAAC+gB,GAErB,CACF,CACD5vB,KAAKw+B,oBACN,EAGK5E,EAAAnuB,UAAUya,KAAO,SAAS4V,GACzB97B,KAAAw7B,UAAUh2B,KAAK64B,GACpB,IAAIliC,EAAQg9B,EAASE,QAAQwF,QAAQ/C,EAAU97B,KAAKw7B,WAEpD,OADar/B,IAAU6D,KAAKw7B,UAAUpkC,OAAS,EAC/B,KAAO4I,KAAKw7B,UAAUr/B,EAAQ,EAC/C,EAGKy9B,EAAAnuB,UAAUwa,SAAW,SAAS6V,GAC7B97B,KAAAw7B,UAAUh2B,KAAK64B,GACpB,IAAIliC,EAAQg9B,EAASE,QAAQwF,QAAQ/C,EAAU97B,KAAKw7B,WACpD,OAAOr/B,EAAQ6D,KAAKw7B,UAAUr/B,EAAQ,GAAK,IAC5C,EAGDy9B,EAAMnuB,UAAUyuB,aAAe,SAAS4B,EAAUlM,GAChD5vB,KAAKy+B,cAAc7O,GAAW/tB,KAAKi6B,EACpC,EAGKlC,EAAAnuB,UAAU2B,OAAS,SAAS0uB,GAChC,IAAI3/B,EAAQg9B,EAASE,QAAQwF,QAAQ/C,EAAU97B,KAAKw7B,WAChDr/B,GAAY,GACT6D,KAAAw7B,UAAU/lB,OAAOtZ,EAAO,EAEhC,EAIKy9B,EAAAnuB,UAAUqzB,MAAQ,WACf,OAAA9+B,KAAKw7B,UAAU,EACvB,EAIK5B,EAAAnuB,UAAU1D,KAAO,WACrB,OAAO/H,KAAKw7B,UAAUx7B,KAAKw7B,UAAUpkC,OAAS,EAC/C,EAGKwiC,EAAAC,aAAe,SAASv8B,GACrB,OAAAihC,EAAOjhC,EAAQi8B,MAAMj8B,EAAQ2K,OAAS,IAAI2xB,EAAMt8B,EACxD,EAED67B,EAASS,MAAQA,CAChB,CAzGA,GAyGA,WAID,IAAIT,EAAWnkC,OAAOmkC,SAEtB,SAASgD,EAASn2B,GAChB,OAAOA,IAAYA,EAAQhR,MAC5B,CAED,SAAS+pC,EAAU/4B,GACb,OAAAm2B,EAASn2B,GACJA,EAEFA,EAAQg5B,WAChB,CAED,SAASC,EAAmBj5B,GAC1BhG,KAAKgG,QAAUA,EACfhG,KAAKk/B,SAAW,CAAE,CACnB,CAEkBD,EAAAxzB,UAAUjE,YAAc,WAEzC,OADY20B,EAASn8B,KAAKgG,SACXhG,KAAKgG,QAAQwB,YAAcxH,KAAKgG,QAAQyB,YACxD,EAEkBw3B,EAAAxzB,UAAUpE,WAAa,WAExC,OADY80B,EAASn8B,KAAKgG,SACXhG,KAAKgG,QAAQqB,WAAarH,KAAKgG,QAAQsB,WACvD,EAED23B,EAAmBxzB,UAAU+J,IAAM,SAAS9H,EAAOma,GACxC,SAAAsX,EAAgBn5B,EAASoP,EAAWyS,GAClC,IAAA,IAAA5wB,EAAI,EAAGsjC,EAAMnlB,EAAUhe,OAAS,EAAGH,EAAIsjC,EAAKtjC,IAAK,CACpD,IAAAge,EAAWG,EAAUne,GACpB4wB,GAAWA,IAAY5S,GAC1BjP,EAAQsH,oBAAoB2H,EAE/B,CACF,CAEG,IAAAmqB,EAAa1xB,EAAMiC,MAAM,KACzB0vB,EAAYD,EAAW,GACvB5kB,EAAY4kB,EAAW,GACvBp5B,EAAUhG,KAAKgG,QAEnB,GAAIwU,GAAaxa,KAAKk/B,SAAS1kB,IAAc6kB,EAC3CF,EAAgBn5B,EAAShG,KAAKk/B,SAAS1kB,GAAW6kB,GAAYxX,GAC9D7nB,KAAKk/B,SAAS1kB,GAAW6kB,GAAa,WAE/BA,EACE,IAAA,IAAAxgC,KAAMmB,KAAKk/B,SACFC,EAAAn5B,EAAShG,KAAKk/B,SAASrgC,GAAIwgC,IAAc,GAAIxX,GAC7D7nB,KAAKk/B,SAASrgC,GAAIwgC,GAAa,QAG1B,GAAA7kB,GAAaxa,KAAKk/B,SAAS1kB,GAAY,CAC9C,IAAA,IAASna,KAAQL,KAAKk/B,SAAS1kB,GAC7B2kB,EAAgBn5B,EAAShG,KAAKk/B,SAAS1kB,GAAWna,GAAOwnB,GAEtD7nB,KAAAk/B,SAAS1kB,GAAa,CAAE,CAC9B,CACF,EAGkBykB,EAAAxzB,UAAUwuB,OAAS,WAChC,IAACj6B,KAAKgG,QAAQs5B,cACT,OAAA,KAGL,IAAA7mC,EAAkBuH,KAAKgG,QAAQs5B,cAAc7mC,gBAC7C8mC,EAAMR,EAAU/+B,KAAKgG,QAAQs5B,eAC7BE,EAAO,CACTjC,IAAK,EACLrZ,KAAM,GAOD,OAJHlkB,KAAKgG,QAAQy5B,wBACRD,EAAAx/B,KAAKgG,QAAQy5B,yBAGf,CACLlC,IAAKiC,EAAKjC,IAAMgC,EAAIpX,YAAc1vB,EAAgBinC,UAClDxb,KAAMsb,EAAKtb,KAAOqb,EAAIjX,YAAc7vB,EAAgBknC,WAEvD,EAEDV,EAAmBxzB,UAAUnR,GAAK,SAASoT,EAAOma,GAC5C,IAAAuX,EAAa1xB,EAAMiC,MAAM,KACzB0vB,EAAYD,EAAW,GACvB5kB,EAAY4kB,EAAW,IAAM,YAC7BQ,EAAa5/B,KAAKk/B,SAAS1kB,GAAaxa,KAAKk/B,SAAS1kB,IAAc,CAAE,GACzDolB,EAAWP,GAAaO,EAAWP,IAAc,IAEvDx9B,KAAKgmB,GACX7nB,KAAAgG,QAAQhQ,iBAAiBqpC,EAAWxX,EAC1C,EAEkBoX,EAAAxzB,UAAUsL,YAAc,SAAS8oB,GAC9C,IACAC,EADAv4B,EAASvH,KAAKwH,cASX,OANHq4B,IAAkB1D,EAASn8B,KAAKgG,WAClB85B,EAAA9qC,OAAO0U,iBAAiB1J,KAAKgG,SACnCuB,GAAA7F,SAASo+B,EAAcjoB,UAAW,IAClCtQ,GAAA7F,SAASo+B,EAAc5rB,aAAc,KAG1C3M,CACR,EAEkB03B,EAAAxzB,UAAUqL,WAAa,SAAS+oB,GAC7C,IACAC,EADAzgC,EAAQW,KAAKqH,aASV,OANHw4B,IAAkB1D,EAASn8B,KAAKgG,WAClB85B,EAAA9qC,OAAO0U,iBAAiB1J,KAAKgG,SACpC3G,GAAAqC,SAASo+B,EAAcpoB,WAAY,IACnCrY,GAAAqC,SAASo+B,EAAcnoB,YAAa,KAGxCtY,CACR,EAEkB4/B,EAAAxzB,UAAU6vB,WAAa,WACpC,IAAAiE,EAAMR,EAAU/+B,KAAKgG,SACzB,OAAOu5B,EAAMA,EAAIjX,YAActoB,KAAKgG,QAAQs1B,UAC7C,EAEkB2D,EAAAxzB,UAAU8vB,UAAY,WACnC,IAAAgE,EAAMR,EAAU/+B,KAAKgG,SACzB,OAAOu5B,EAAMA,EAAIpX,YAAcnoB,KAAKgG,QAAQu1B,SAC7C,EAED0D,EAAmBle,OAAS,WAC1B,IAAI9kB,EAAO+c,MAAMvN,UAAUzJ,MAAMuE,KAAKrK,WAE7B,SAAA6jC,EAAM50B,EAAQ5Q,GACrB,GAAsB,iBAAX4Q,GAAsC,iBAAR5Q,EACvC,IAAA,IAASoT,KAAOpT,EACVA,EAAIylC,eAAeryB,KACdxC,EAAAwC,GAAOpT,EAAIoT,IAKjB,OAAAxC,CACR,CAED,IAAA,IAASlU,EAAI,EAAGsjC,EAAMt+B,EAAK7E,OAAQH,EAAIsjC,EAAKtjC,IAC1C8oC,EAAM9jC,EAAK,GAAIA,EAAKhF,IAEtB,OAAOgF,EAAK,EACb,EAEDgjC,EAAmBJ,QAAU,SAAS74B,EAASi6B,EAAOhpC,GACpD,OAAgB,MAATgpC,GAAgB,EAAKA,EAAMrwB,QAAQ5J,EAAS/O,EACpD,EAEkBgoC,EAAAhD,cAAgB,SAAS1hC,GAE1C,IAAA,IAAS0N,KAAQ1N,EACR,OAAA,EAEF,OAAA,CACR,EAED4+B,EAAS2B,SAASj5B,KAAK,CACrBoG,KAAM,cACNoxB,QAAS4F,IAEX9F,EAASE,QAAU4F,CAClB,CA7KA,GChkBHjqC,OAAO4W,IAAIulB,OAAS,CAChB57B,KAAM,WACF,IAAI2W,EAAOlM,KAEXkM,EAAKg0B,mBACLh0B,EAAKi0B,eACLj0B,EAAKk0B,cACR,EAEDF,iBAAkB,WACdlgC,KAAKqgC,iBACR,EAGDA,gBAAiB,WACT,IAAAC,EAAarqC,SAASoW,cAAc,6BAExC,GAAmB,OAAfi0B,EACO,OAAA,EAGAA,EAAAtqC,iBAAiB,UAAU,WAClC,IAAIuqC,EAAcvgC,KAAK1C,QAAQgjC,EAAW9gB,eAAerf,MAC5ClK,SAASoW,cAAck0B,GAE7BC,eAAe,CAClBC,SAAU,UAE1B,GACK,EAEDN,aAAc,WACV,IAAIj0B,EAAOlM,KAGP0gC,EAAazqC,SAASoW,cAAc,mBACpCs0B,EAAY1qC,SAASkB,iBAAiB,eAE1C,GAAmB,OAAfupC,EAKJ,IAAA,IAASzpC,EAAI,EAAGA,EAAI0pC,EAAUvpC,SAAUH,EAAG,CACnC,IAAA2pC,EAAWD,EAAU1pC,GAAGyqB,GAGxB1b,EAAU/P,SAAS4qC,eAAeD,GAC9B56B,EAAA3N,aAAa,SAAUpB,GAC/B,IAAIjC,OAAOmkC,SAAS,CAChBnzB,UACA6hB,QAAS,SAAiB+H,GAClB,IAAArf,EAAQvQ,KAAKgG,QAAQ0b,GACrBgC,EAAS1jB,KAAKgG,QAAQ7N,aAAa,UACrB,OAAdy3B,EACIlM,EAAS,GACTxX,EAAK40B,cAAcH,EAAUjd,EAAS,GAAGhC,IAG7CxV,EAAK40B,cAAcvwB,EAE1B,EACD0pB,OAAQ,MAEf,CACJ,EAGD6G,cAAe,SAASvwB,GAGpB,IAFI,IAAAwwB,EAAY9qC,SAASkB,iBAAiB,yBAEjCF,EAAI,EAAGA,EAAI8pC,EAAU3pC,SAAUH,EAAG,CACnC,IAAA+pC,EAAWD,EAAU9pC,GAErBgqC,EADcD,EAAS7oC,aAAa,QACZwX,MAAM,KAClCsxB,EAAYA,EAAU,GAEbD,EAAA/zB,UAAUG,OAAO,aAEtB6zB,IAAc1wB,GACLywB,EAAA/zB,UAAUQ,IAAI,YAE9B,CACJ,EAGD2yB,aAAc,WACN,IAAAc,EAAMjrC,SAASoW,cAAc,sBAEjC,GAAY,OAAR60B,EACO,OAAA,EAGX,IAAIC,EAAYD,EAAI/sB,aAEbnf,OAAAgB,iBAAiB,UAAU,WACXkrC,EAAIzB,wBAAwBlC,KAE5B,GACX2D,EAAAj0B,UAAUQ,IAAI,aACdyzB,EAAA5+B,MAAMiV,WAAa4pB,EAAY,OAE/BD,EAAAj0B,UAAUG,OAAO,aACrB8zB,EAAI5+B,MAAMiV,WAAa,MAEvC,GACK,GAILviB,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIulB,OAAO57B,MACtB,IAAG,GClHHP,OAAO4W,IAAIw1B,MAAQ,CACf7rC,KAAM,WACSyK,KAENqhC,YAED,IAAAC,EAAMrrC,SAASC,cAAc,UACjCorC,EAAIjjC,IAAM,qCACV,IAAIkjC,EAAiBtrC,SAASyQ,qBAAqB,UAAU,GAC9C66B,EAAAhrC,WAAWI,aAAa2qC,EAAKC,EAC/C,EAEDC,UAAW,SAAUC,EAASC,EAAaC,EAAaC,GACpD,GAA0B,OAAtBA,EAA4B,CACxB,IAAAC,EAAa5rC,SAASC,cAAc,OACxC0rC,EAAkBn/B,YAAYo/B,EACjC,CAEGJ,GACI,IAAAzsC,OAAO8sC,GAAG5L,OAAO2L,EAAY,CAC7BxiC,MAAO,OACPkI,OAAQ,IACRk6B,UACAM,WAAY,CACRC,UAAa,EACbC,SAAYP,EACZQ,SAAYP,EACZQ,KAAQ,EACRC,eAAkB,EAClBC,IAAO,EACPC,SAAY,EACZC,SAAYd,IAI3B,EAyBDJ,UAAW,WAIP,IAHA,IACImB,EAAiBvsC,SAASkB,iBAAiB,cAEtCF,EAAI,EAAGA,EAAIurC,EAAeprC,SAAUH,EAAG,CACxC,IAAAwrC,EAAgBD,EAAevrC,GAJ5B+I,KAKF0iC,iBAAiBD,EACzB,CACJ,EAGDC,iBAAkB,SAASD,GACvB,IAAIv2B,EAAOlM,KACP2iC,EAAgBF,EAAcp2B,cAAc,uBAE5Co1B,EAAUkB,EAAcxqC,aAAa,iBACrCupC,EAAciB,EAAcxqC,aAAa,uBACzCwpC,EAAcgB,EAAcxqC,aAAa,uBAE/BwqC,EAAA3sC,iBAAiB,SAAS,WACtBysC,EAAAx1B,UAAUQ,IAAI,aAC5BvB,EAAK02B,iBAAiBnB,EAASC,EAAaC,EAAa3hC,KAAMyiC,EAC3E,GACK,EAGDG,iBAAkB,SAAUnB,EAASC,EAAaC,EAAagB,EAAeF,GAC1E,IAEII,EAAcF,EAAcpsC,WACpBssC,EAAA51B,UAAUQ,IAAI,aAGtB,IAAAq1B,EAAcL,EAAcp2B,cAAc,oBAG9Cy2B,EAAYz1B,UAAY,+GACpB,IAAA01B,EAAkBD,EAAYz2B,cAAc,4BAVrCrM,KAaNwhC,UAAUC,EAASC,EAAaC,EAAaoB,GAbvC/iC,KAcNgjC,WAAWP,EAAeK,EAAaD,EAC/C,EAEDG,WAAY,SAAUP,EAAeK,EAAaD,GAC1C,IAAAI,EAAqBR,EAAcp2B,cAAc,uBAErD,IAAK42B,EACM,OAAA,EAGQA,EAAAjtC,iBAAiB,SAAS,WAC3BysC,EAAAx1B,UAAUG,OAAO,aACnBy1B,EAAA51B,UAAUG,OAAO,aAG7B01B,EAAYz1B,UAAY,EACpC,GACK,GAGLrY,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIw1B,MAAM7rC,MACrB,IAAG,GC3HHP,OAAO4W,IAAIs3B,OAAS,CAChB3tC,KAAM,WACF,IACI4tC,EAAUltC,SAASoW,cAAc,mBAErC,GAAK82B,EAAL,CAIA,IAAIC,EAASD,EAAQ92B,cAAc,0BAC/Bg3B,EAAQptC,SAASoW,cAAc,yBAC/Bi3B,EAASH,EAAQ92B,cAAc,0BATxBrM,KAWNujC,WAAWJ,EAASC,EAAQC,EAAOC,EANvC,CAOJ,EAEDC,WAAY,SAAUJ,EAASC,EAAQC,EAAOC,GACpCD,EAAArtC,iBAAiB,SAAS,SAAS0X,GACrCA,EAAMQ,iBACCk1B,EAAAn2B,UAAUQ,IAAI,UACjC,IAEe61B,EAAAttC,iBAAiB,SAAS,SAAS0X,GACtCA,EAAMQ,iBACCk1B,EAAAn2B,UAAUG,OAAO,UACpC,GACK,GAILpY,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAIs3B,OAAO3tC,MACtB,IAAG,GCjCHP,OAAO4W,IAAI0C,OAAS,CAChB/Y,KAAM,WACF,IAAI2W,EAAOlM,KACPwjC,EAAiBvtC,SAASoW,cAAc,uBACxCo3B,EAAyBxtC,SAASkB,iBAAiB,gCACnDusC,EAAwBztC,SAASkB,iBAAiB,8BAGtD,IAAKqsC,EACM,OAAA,EAGX,IAAA,IAASvsC,EAAI,EAAGA,EAAIwsC,EAAuBrsC,SAAUH,EAAG,CAChD,IAAA0sC,EAAwBF,EAAuBxsC,GACnDiV,EAAK03B,cAAcJ,EAAgBG,GACnCz3B,EAAK23B,YAAYL,EACpB,CAED,IAAA,IAASl/B,EAAI,EAAGA,EAAIo/B,EAAsBtsC,SAAUkN,EAAG,CAC/C,IAAAw/B,EAAsBJ,EAAsBp/B,GAChD4H,EAAK63B,YAAYP,EAAgBM,EACpC,CACJ,EAEDr1B,WAAY,WACJ,IAAA+0B,EAAiBvtC,SAASoW,cAAc,uBAE7Bm3B,EAAAv2B,UAAUQ,IAAI,aACd+1B,EAAAv2B,UAAUQ,IAAI,mBAE7B5W,YAAW,WACQ2sC,EAAAv2B,UAAUG,OAAO,kBACnC,GAAE,IACN,EAEDmB,YAAa,WACL,IAAAi1B,EAAiBvtC,SAASoW,cAAc,uBAE7Bm3B,EAAAv2B,UAAUQ,IAAI,oBAE7B5W,YAAW,WACQ2sC,EAAAv2B,UAAUG,OAAO,oBACjBo2B,EAAAv2B,UAAUG,OAAO,YACnC,GAAE,IACN,EAGDw2B,cAAe,SAAUJ,EAAgBG,GACrC,IAAIz3B,EAAOlM,KAEW2jC,EAAA3tC,iBAAiB,SAAS,WAEtB2tC,EAAA12B,UAAU+2B,OAAO,gBAEnCL,EAAsB12B,UAAUC,SAAS,gBACzChB,EAAKuC,aAELvC,EAAKqC,aAErB,GACK,EAED01B,oBAAqB,YACY,GAAGjiC,MAAMuE,KAAKtQ,SAASkB,iBAAiB,kCAAoC,IAElF6X,SAAQ,SAAS20B,GACdA,EAAA12B,UAAUG,OAAO,eACnD,GACK,EAGD22B,YAAa,SAAUP,EAAgBM,GACnC,IAAI53B,EAAOlM,KAES8jC,EAAA9tC,iBAAiB,SAAS,WAC1CkW,EAAKuC,YACjB,IAE4Bq1B,EAAA9tC,iBAAiB,QAAQ,WACzCkW,EAAKqC,aACjB,GACK,EAGDs1B,YAAa,SAAUL,GACnB,IAAIt3B,EAAOlM,KAEIwjC,EAAAxtC,iBAAiB,SAAS,SAASyG,GAC9CA,EAAEyR,iBAEFhC,EAAKqC,cAGEvZ,OAAA4W,IAAIgC,SAASmB,gBAGhB/Z,OAAO4W,IAAI8C,QACJ1Z,OAAA4W,IAAI8C,OAAOC,OAElC,GACK,GAIL3Z,OAAOgB,iBAAiB,QAAQ,WACrBhB,OAAA4W,IAAI0C,OAAO/Y,MACtB,IAAG,GC9GH,MAAM2uC,GACF,WAAAljB,CAAYkgB,GACHlhC,KAAAqQ,QAAU6wB,EAAI70B,cAAc,wBAC5BrM,KAAAoM,SAAW80B,EAAI70B,cAAc,IAAIrM,KAAKqQ,QAAQlY,aAAa,oBAC3D6H,KAAAmkC,SAAWjD,EAAI70B,cAAc,uBAClCrM,KAAKzK,OAED2rC,EAAIj0B,UAAUC,SAAS,yBACvBlY,OAAO4W,IAAI8C,OAAS1O,KAE3B,CAED,IAAAzK,GACSyK,KAAAqQ,QAAQra,iBAAiB,SAAS,KACgB,UAA/CgK,KAAKqQ,QAAQlY,aAAa,iBAC1B6H,KAAKgT,OAELhT,KAAK2O,OACR,GAER,CAED,IAAAqE,GACShT,KAAAqQ,QAAQhY,aAAa,gBAAiB,QACtC2H,KAAAoM,SAASa,UAAUQ,IAAI,aAExBzN,KAAKmkC,UACLnkC,KAAKmkC,SAAS9c,OAErB,CAED,KAAA1Y,GACS3O,KAAAqQ,QAAQhY,aAAa,gBAAiB,SACtC2H,KAAAoM,SAASa,UAAUG,OAAO,YAElC,EAGL,IAAInX,SAASkB,iBAAiB,iBAAiB6X,SAASkyB,IACpD,IAAIgD,GAAQhD,EAAG,IChCZ,MAAMkD,GAAc3nC,IACvB,IAAI4nC,EAAO,GAUX,YARc,IAAV5nC,EAAEkR,IACF02B,EAAO5nC,EAAEkR,SACkB,IAApBlR,EAAE6nC,cACTD,EAAO5nC,EAAE6nC,mBACY,IAAd7nC,EAAEsrB,UACTsc,EAAO5nC,EAAEsrB,SAGNsc,EAAK/nC,eAGHioC,GAAkBnoC,GAAWA,EAAOC,QAAQ,aAAc,IAAIC,cCnB3E,MAAMkoC,GACJ,WAAAxjB,CAAYkgB,GACVlhC,KAAKkhC,IAAMA,EAEXlhC,KAAKiB,MAAQ,CACXwjC,aAAc,MAGXzkC,KAAA0kC,OAASxD,EAAIyD,QAAQC,cACrB5kC,KAAA6kC,eAAiB3D,EAAIyD,QAAQE,eAE7B7kC,KAAK0kC,SACH1kC,KAAA8kC,YAAc5D,EAAI70B,cAAc,+CACrCrM,KAAK+kC,QAAU/kC,KAAK8kC,YAAYz4B,cAAc,4CAG3CrM,KAAAglC,OAAS9D,EAAI70B,cAAc,yCAC3BrM,KAAAilC,MAAQ/D,EAAI70B,cAAc,wCAC1BrM,KAAAklC,QAAUhE,EAAI70B,cAAc,0CAEjCrM,KAAKmlC,iBAAmB,8CACxBnlC,KAAKolC,gBAAkBlE,EAAI70B,cAAcrM,KAAKmlC,iBAC/C,CAED,IAAA5vC,GACEyK,KAAKqlC,oBACLrlC,KAAKslC,mBACLtlC,KAAKulC,oBAEDvlC,KAAKglC,OAAO7kC,MAAM/I,OAAS4I,KAAK6kC,gBAIpC7kC,KAAKwlC,WAAW,IAAIC,MAAMnoC,IACxB0C,KAAK0lC,UAAUpoC,EAAO,GAEzB,CAED,gBAAAgoC,GAEEtlC,KAAKilC,MAAMjvC,iBAAiB,SAAUyG,IAChCA,EAAE0O,QAAU1O,EAAE0O,OAAOvL,QAAQI,KAAKmlC,mBACpCnlC,KAAK2lC,aAAalpC,EAAE0O,OAAOw5B,QAAQiB,YACpC,IAIH5lC,KAAKilC,MAAMjvC,iBAAiB,WAAYyG,IAEtC,OADgB2nC,GAAW3nC,IAEzB,IAAK,QACHuD,KAAK2lC,aAAalpC,EAAE0O,OAAOw5B,QAAQiB,aACnC,MACF,IAAK,MAiBL,IAAK,SACL,IAAK,MACH5lC,KAAK6lC,WACL,MAjBF,IAAK,UACL,IAAK,KACHppC,EAAEyR,iBAC8B,IAA5BlO,KAAKiB,MAAMwjC,aACbzkC,KAAK8lC,gBAAgB9lC,KAAKiB,MAAMwjC,aAAe,GAE/CzkC,KAAKglC,OAAO3d,QAEd,MACF,IAAK,YACL,IAAK,OACH5qB,EAAEyR,iBACFlO,KAAK8lC,gBAAgB9lC,KAAKiB,MAAMwjC,aAAe,GASlD,GAEJ,CAKD,eAAAqB,CAAgB3pC,GACd,MAAM4pC,EAAW/lC,KAAKilC,MAAM9tC,iBAAiB6I,KAAKmlC,kBAE9ChpC,GAAS4pC,EAAS3uC,SAIlB4I,KAAKiB,MAAMwjC,cACbsB,EAAS/lC,KAAKiB,MAAMwjC,cAAcpsC,aAAa,gBAAiB,SAGlE2H,KAAKiB,MAAMwjC,aAAetoC,EAC1B4pC,EAAS/lC,KAAKiB,MAAMwjC,cAAcpd,QAClC0e,EAAS/lC,KAAKiB,MAAMwjC,cAAcpsC,aAAa,gBAAiB,QACjE,CAED,iBAAAktC,GAEEtvC,SAASwC,gBAAgBzC,iBAAiB,SAAUyG,IAC7CuD,KAAKkhC,IAAIh0B,SAASzQ,EAAE0O,SACvBnL,KAAK6lC,UACN,GAEJ,CAED,iBAAAR,GAEErlC,KAAKglC,OAAOhvC,iBAAiB,WAAYyG,IAEvB,QADA2nC,GAAW3nC,IAEzBuD,KAAK6lC,UACN,IAGH7lC,KAAKglC,OAAOhvC,iBAAiB,SAAUyG,IAErC,OADgB2nC,GAAW3nC,IAGzB,IAAK,MACL,IAAK,SACL,IAAK,KACL,IAAK,UACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,aACL,IAAK,QACL,IAAK,IACL,IAAK,QACL,IAAK,QACL,IAAK,MACH,MAEF,IAAK,YACL,IAAK,OACHuD,KAAKgmC,0BACL,MAEF,QACEhmC,KAAKimC,eACR,IAGEjmC,KAAAglC,OAAOhvC,iBAAiB,SAAS,KACpC,IAAIkwC,EAAQ,GAERlmC,KAAK0kC,SACPwB,EAAQlmC,KAAKglC,OAAO7kC,OAGlB+lC,EAAM9uC,OAAS4I,KAAK6kC,gBAIxB7kC,KAAKwlC,WAAWU,GAAOT,MAAMnoC,IAC3B0C,KAAK0lC,UAAUpoC,GACf0C,KAAKmmC,UAAQ,GACd,GAEJ,CAED,YAAAF,GACMjmC,KAAKglC,OAAO7kC,MAAM/I,OAAS4I,KAAK6kC,gBAI/B7kC,KAAAwlC,WAAWxlC,KAAKglC,OAAO7kC,OAAOslC,MAAMnoC,GAAY0C,KAAKomC,aAAa9oC,IACxE,CAKD,YAAA8oC,CAAa9oC,GACNA,EAAQlG,QAIX4I,KAAK0lC,UAAUpoC,GACf0C,KAAKmmC,aAJLnmC,KAAK6lC,WACL7lC,KAAKqmC,eAAe,IAKvB,CAMD,WAAAC,CAAYrwB,EAASswB,GACnBvmC,KAAKilC,MAAM53B,UAAY,GACvB,MAAMm5B,EAAgBxmC,KAAKolC,gBAAgB1uC,WAAU,GAErD8vC,EAAcjuC,gBAAgB,oBAC9BiuC,EAAcn5B,UAAY4I,EAC1BuwB,EAAcjyB,QAAS,EAClBvU,KAAAilC,MAAMxiC,YAAY+jC,GACvBxmC,KAAKmmC,WAELnmC,KAAKklC,QAAQ73B,UAAYk5B,CAC1B,CAKD,UAAAf,CAAWU,GACT,OAAIlmC,KAAK0kC,OACA1kC,KAAKymC,iBAAiBP,GAGxBlmC,KAAK0mC,iBAAiBR,EAC9B,CAKD,gBAAAQ,CAAiBR,GACf,GAAc,KAAVA,EAAc,CAChB,MAAM5oC,EAAU,IAAI0C,KAAK+kC,QAAQznC,SAE1B,OADPA,EAAQ4K,QACD5K,CACR,CAED,MDvMmC,EAAClB,EAAQ6jC,KACtC,MAAA0G,EAAepC,GAAenoC,GACpC,OAAO6jC,EAAMiD,QAAO,EAAE/iC,WAAWokC,GAAepkC,GAAOuO,OAAOi4B,IAAkB,GAAA,ECqMzEC,CAAwBV,EAAO,IAAIlmC,KAAK+kC,QAAQznC,SACxD,CAKD,sBAAMmpC,CAAiBP,GACf,MAAAW,EAAa,IAAIC,iBACjBC,OAAEA,GAAWF,EAEf,IAAAG,EACA,IACI,MAAA/zB,QAAgBg0B,MAAM,GAAGjnC,KAAK0kC,qBAAqBwB,IAAS,CAAEa,WAC3DC,QAAM/zB,EAAQi0B,MACxB,OAAQhxB,GACE8wB,EAAA,CACPG,UAAU,EAEb,CAEM,OAAAH,CACR,CAED,uBAAAhB,GACmBhmC,KAAKilC,MAAM9tC,iBAAiB6I,KAAKmlC,kBAEpC/tC,SAKd4I,KAAKmmC,WACLnmC,KAAK8lC,gBAAgB,GACtB,CAKD,SAAAJ,CAAUpoC,GACR0C,KAAKilC,MAAM53B,UAAY,GACf/P,EAAA0R,SAAS8R,IAEf,MAAMsmB,EAAUpnC,KAAKolC,gBAAgB1uC,WAAU,GAC/C0wC,EAAQ7yB,QAAS,EACbvU,KAAK0kC,QAEC0C,EAAAzC,QAAQiB,YAAc9kB,EAAO3gB,MACrCinC,EAAQ/5B,UAAYyT,EAAO3gB,QAGnBinC,EAAAzC,QAAQiB,YAAc9kB,EAAO3gB,MACrCinC,EAAQ/5B,UAAYyT,EAAOumB,WAGxBrnC,KAAAilC,MAAMxiC,YAAY2kC,EAAO,IAI3BpnC,KAAAklC,QAAQ73B,UAAY/P,EAAQlG,MAClC,CAKD,YAAAuuC,CAAaxlC,GACXH,KAAKqmC,eAAelmC,GACpBH,KAAKglC,OAAO7kC,MAAQA,EACpBH,KAAK6lC,WACL7lC,KAAKkhC,IAAIpyB,QAAQ,QAAQke,QAC1B,CAKD,cAAAqZ,CAAelmC,GACT,IAACH,KAAK0kC,OAAQ,CAChB1kC,KAAK+kC,QAAQ5kC,MAAQA,EACf,MAAAuN,EAAQ,IAAI2X,MAAM,kBACnBrlB,KAAA+kC,QAAQ5lB,cAAczR,EAC5B,CAEa,KAAVvN,GACGH,KAAAglC,OAAO3sC,aAAa,eAAgB,QACzC2H,KAAKglC,OAAO3sC,aAAa,mBAAoB,UAAU2H,KAAKglC,OAAOtjB,QAE9D1hB,KAAAglC,OAAOzsC,gBAAgB,gBACvByH,KAAAglC,OAAOzsC,gBAAgB,oBAE/B,CAED,QAAA4tC,GACOnmC,KAAAglC,OAAO3sC,aAAa,gBAAiB,QAC1C2H,KAAKilC,MAAM1wB,QAAS,CACrB,CAED,QAAAsxB,GACO7lC,KAAAglC,OAAO3sC,aAAa,gBAAiB,SAC1C2H,KAAKilC,MAAM1wB,QAAS,EACpBvU,KAAKiB,MAAMwjC,aAAe,IAC3B,EAGH,IAAIxuC,SAASkB,iBAAiB,sBAAsB6X,SAASkyB,IAC9C,IAAIsD,GAAatD,GACzB3rC,MAAI,ICrTX+xC","x_google_ignoreList":[0,1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,29]}