{"version":3,"file":"head.js","sources":["../../Softube.Styleguide/node_modules/picturefill/dist/picturefill.js","../../Softube.Styleguide/node_modules/lazysizes/lazysizes.js","../../Softube.Styleguide/node_modules/lazysizes/plugins/bgset/ls.bgset.js","../../Softube.Styleguide/node_modules/lazysizes/plugins/parent-fit/ls.parent-fit.js","../../Softube.Styleguide/src/head.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","(function(window, factory) {\n\tvar lazySizes = factory(window, window.document);\n\twindow.lazySizes = lazySizes;\n\tif(typeof module == 'object' && module.exports){\n\t\tmodule.exports = lazySizes;\n\t}\n}(window, function l(window, document) {\n\t'use strict';\n\t/*jshint eqnull:true */\n\tif(!document.getElementsByClassName){return;}\n\n\tvar lazysizes, lazySizesConfig;\n\n\tvar docElem = document.documentElement;\n\n\tvar Date = window.Date;\n\n\tvar supportPicture = window.HTMLPictureElement;\n\n\tvar _addEventListener = 'addEventListener';\n\n\tvar _getAttribute = 'getAttribute';\n\n\tvar addEventListener = window[_addEventListener];\n\n\tvar setTimeout = window.setTimeout;\n\n\tvar requestAnimationFrame = window.requestAnimationFrame || setTimeout;\n\n\tvar requestIdleCallback = window.requestIdleCallback;\n\n\tvar regPicture = /^picture$/i;\n\n\tvar loadEvents = ['load', 'error', 'lazyincluded', '_lazyloaded'];\n\n\tvar regClassCache = {};\n\n\tvar forEach = Array.prototype.forEach;\n\n\tvar hasClass = function(ele, cls) {\n\t\tif(!regClassCache[cls]){\n\t\t\tregClassCache[cls] = new RegExp('(\\\\s|^)'+cls+'(\\\\s|$)');\n\t\t}\n\t\treturn regClassCache[cls].test(ele[_getAttribute]('class') || '') && regClassCache[cls];\n\t};\n\n\tvar addClass = function(ele, cls) {\n\t\tif (!hasClass(ele, cls)){\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').trim() + ' ' + cls);\n\t\t}\n\t};\n\n\tvar removeClass = function(ele, cls) {\n\t\tvar reg;\n\t\tif ((reg = hasClass(ele,cls))) {\n\t\t\tele.setAttribute('class', (ele[_getAttribute]('class') || '').replace(reg, ' '));\n\t\t}\n\t};\n\n\tvar addRemoveLoadEvents = function(dom, fn, add){\n\t\tvar action = add ? _addEventListener : 'removeEventListener';\n\t\tif(add){\n\t\t\taddRemoveLoadEvents(dom, fn);\n\t\t}\n\t\tloadEvents.forEach(function(evt){\n\t\t\tdom[action](evt, fn);\n\t\t});\n\t};\n\n\tvar triggerEvent = function(elem, name, detail, noBubbles, noCancelable){\n\t\tvar event = document.createEvent('CustomEvent');\n\n\t\tif(!detail){\n\t\t\tdetail = {};\n\t\t}\n\n\t\tdetail.instance = lazysizes;\n\n\t\tevent.initCustomEvent(name, !noBubbles, !noCancelable, detail);\n\n\t\telem.dispatchEvent(event);\n\t\treturn event;\n\t};\n\n\tvar updatePolyfill = function (el, full){\n\t\tvar polyfill;\n\t\tif( !supportPicture && ( polyfill = (window.picturefill || lazySizesConfig.pf) ) ){\n\t\t\tpolyfill({reevaluate: true, elements: [el]});\n\t\t} else if(full && full.src){\n\t\t\tel.src = full.src;\n\t\t}\n\t};\n\n\tvar getCSS = function (elem, style){\n\t\treturn (getComputedStyle(elem, null) || {})[style];\n\t};\n\n\tvar getWidth = function(elem, parent, width){\n\t\twidth = width || elem.offsetWidth;\n\n\t\twhile(width < lazySizesConfig.minSize && parent && !elem._lazysizesWidth){\n\t\t\twidth = parent.offsetWidth;\n\t\t\tparent = parent.parentNode;\n\t\t}\n\n\t\treturn width;\n\t};\n\n\tvar rAF = (function(){\n\t\tvar running, waiting;\n\t\tvar firstFns = [];\n\t\tvar secondFns = [];\n\t\tvar fns = firstFns;\n\n\t\tvar run = function(){\n\t\t\tvar runFns = fns;\n\n\t\t\tfns = firstFns.length ? secondFns : firstFns;\n\n\t\t\trunning = true;\n\t\t\twaiting = false;\n\n\t\t\twhile(runFns.length){\n\t\t\t\trunFns.shift()();\n\t\t\t}\n\n\t\t\trunning = false;\n\t\t};\n\n\t\tvar rafBatch = function(fn, queue){\n\t\t\tif(running && !queue){\n\t\t\t\tfn.apply(this, arguments);\n\t\t\t} else {\n\t\t\t\tfns.push(fn);\n\n\t\t\t\tif(!waiting){\n\t\t\t\t\twaiting = true;\n\t\t\t\t\t(document.hidden ? setTimeout : requestAnimationFrame)(run);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\trafBatch._lsFlush = run;\n\n\t\treturn rafBatch;\n\t})();\n\n\tvar rAFIt = function(fn, simple){\n\t\treturn simple ?\n\t\t\tfunction() {\n\t\t\t\trAF(fn);\n\t\t\t} :\n\t\t\tfunction(){\n\t\t\t\tvar that = this;\n\t\t\t\tvar args = arguments;\n\t\t\t\trAF(function(){\n\t\t\t\t\tfn.apply(that, args);\n\t\t\t\t});\n\t\t\t}\n\t\t;\n\t};\n\n\tvar throttle = function(fn){\n\t\tvar running;\n\t\tvar lastTime = 0;\n\t\tvar gDelay = 125;\n\t\tvar rICTimeout = lazySizesConfig.ricTimeout;\n\t\tvar run = function(){\n\t\t\trunning = false;\n\t\t\tlastTime = Date.now();\n\t\t\tfn();\n\t\t};\n\t\tvar idleCallback = requestIdleCallback && lazySizesConfig.ricTimeout ?\n\t\t\tfunction(){\n\t\t\t\trequestIdleCallback(run, {timeout: rICTimeout});\n\n\t\t\t\tif(rICTimeout !== lazySizesConfig.ricTimeout){\n\t\t\t\t\trICTimeout = lazySizesConfig.ricTimeout;\n\t\t\t\t}\n\t\t\t} :\n\t\t\trAFIt(function(){\n\t\t\t\tsetTimeout(run);\n\t\t\t}, true)\n\t\t;\n\n\t\treturn function(isPriority){\n\t\t\tvar delay;\n\n\t\t\tif((isPriority = isPriority === true)){\n\t\t\t\trICTimeout = 33;\n\t\t\t}\n\n\t\t\tif(running){\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trunning = true;\n\n\t\t\tdelay = gDelay - (Date.now() - lastTime);\n\n\t\t\tif(delay < 0){\n\t\t\t\tdelay = 0;\n\t\t\t}\n\n\t\t\tif(isPriority || (delay < 9 && requestIdleCallback)){\n\t\t\t\tidleCallback();\n\t\t\t} else {\n\t\t\t\tsetTimeout(idleCallback, delay);\n\t\t\t}\n\t\t};\n\t};\n\n\t//based on http://modernjavascript.blogspot.de/2013/08/building-better-debounce.html\n\tvar debounce = function(func) {\n\t\tvar timeout, timestamp;\n\t\tvar wait = 99;\n\t\tvar run = function(){\n\t\t\ttimeout = null;\n\t\t\tfunc();\n\t\t};\n\t\tvar later = function() {\n\t\t\tvar last = Date.now() - timestamp;\n\n\t\t\tif (last < wait) {\n\t\t\t\tsetTimeout(later, wait - last);\n\t\t\t} else {\n\t\t\t\t(requestIdleCallback || run)(run);\n\t\t\t}\n\t\t};\n\n\t\treturn function() {\n\t\t\ttimestamp = Date.now();\n\n\t\t\tif (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t}\n\t\t};\n\t};\n\n\t(function(){\n\t\tvar prop;\n\n\t\tvar lazySizesDefaults = {\n\t\t\tlazyClass: 'lazyload',\n\t\t\tloadedClass: 'lazyloaded',\n\t\t\tloadingClass: 'lazyloading',\n\t\t\tpreloadClass: 'lazypreload',\n\t\t\terrorClass: 'lazyerror',\n\t\t\t//strictClass: 'lazystrict',\n\t\t\tautosizesClass: 'lazyautosizes',\n\t\t\tsrcAttr: 'data-src',\n\t\t\tsrcsetAttr: 'data-srcset',\n\t\t\tsizesAttr: 'data-sizes',\n\t\t\t//preloadAfterLoad: false,\n\t\t\tminSize: 40,\n\t\t\tcustomMedia: {},\n\t\t\tinit: true,\n\t\t\texpFactor: 1.5,\n\t\t\thFac: 0.8,\n\t\t\tloadMode: 2,\n\t\t\tloadHidden: true,\n\t\t\tricTimeout: 300,\n\t\t};\n\n\t\tlazySizesConfig = window.lazySizesConfig || window.lazysizesConfig || {};\n\n\t\tfor(prop in lazySizesDefaults){\n\t\t\tif(!(prop in lazySizesConfig)){\n\t\t\t\tlazySizesConfig[prop] = lazySizesDefaults[prop];\n\t\t\t}\n\t\t}\n\n\t\twindow.lazySizesConfig = lazySizesConfig;\n\n\t\tsetTimeout(function(){\n\t\t\tif(lazySizesConfig.init){\n\t\t\t\tinit();\n\t\t\t}\n\t\t});\n\t})();\n\n\tvar loader = (function(){\n\t\tvar preloadElems, isCompleted, resetPreloadingTimer, loadMode, started;\n\n\t\tvar eLvW, elvH, eLtop, eLleft, eLright, eLbottom;\n\n\t\tvar defaultExpand, preloadExpand, hFac;\n\n\t\tvar regImg = /^img$/i;\n\t\tvar regIframe = /^iframe$/i;\n\n\t\tvar supportScroll = ('onscroll' in window) && !(/glebot/.test(navigator.userAgent));\n\n\t\tvar shrinkExpand = 0;\n\t\tvar currentExpand = 0;\n\n\t\tvar isLoading = 0;\n\t\tvar lowRuns = -1;\n\n\t\tvar resetPreloading = function(e){\n\t\t\tisLoading--;\n\t\t\tif(e && e.target){\n\t\t\t\taddRemoveLoadEvents(e.target, resetPreloading);\n\t\t\t}\n\n\t\t\tif(!e || isLoading < 0 || !e.target){\n\t\t\t\tisLoading = 0;\n\t\t\t}\n\t\t};\n\n\t\tvar isNestedVisible = function(elem, elemExpand){\n\t\t\tvar outerRect;\n\t\t\tvar parent = elem;\n\t\t\tvar visible = getCSS(document.body, 'visibility') == 'hidden' || getCSS(elem, 'visibility') != 'hidden';\n\n\t\t\teLtop -= elemExpand;\n\t\t\teLbottom += elemExpand;\n\t\t\teLleft -= elemExpand;\n\t\t\teLright += elemExpand;\n\n\t\t\twhile(visible && (parent = parent.offsetParent) && parent != document.body && parent != docElem){\n\t\t\t\tvisible = ((getCSS(parent, 'opacity') || 1) > 0);\n\n\t\t\t\tif(visible && getCSS(parent, 'overflow') != 'visible'){\n\t\t\t\t\touterRect = parent.getBoundingClientRect();\n\t\t\t\t\tvisible = eLright > outerRect.left &&\n\t\t\t\t\t\teLleft < outerRect.right &&\n\t\t\t\t\t\teLbottom > outerRect.top - 1 &&\n\t\t\t\t\t\teLtop < outerRect.bottom + 1\n\t\t\t\t\t;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn visible;\n\t\t};\n\n\t\tvar checkElements = function() {\n\t\t\tvar eLlen, i, rect, autoLoadElem, loadedSomething, elemExpand, elemNegativeExpand, elemExpandVal, beforeExpandVal;\n\n\t\t\tvar lazyloadElems = lazysizes.elements;\n\n\t\t\tif((loadMode = lazySizesConfig.loadMode) && isLoading < 8 && (eLlen = lazyloadElems.length)){\n\n\t\t\t\ti = 0;\n\n\t\t\t\tlowRuns++;\n\n\t\t\t\tif(preloadExpand == null){\n\t\t\t\t\tif(!('expand' in lazySizesConfig)){\n\t\t\t\t\t\tlazySizesConfig.expand = docElem.clientHeight > 500 && docElem.clientWidth > 500 ? 500 : 370;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefaultExpand = lazySizesConfig.expand;\n\t\t\t\t\tpreloadExpand = defaultExpand * lazySizesConfig.expFactor;\n\t\t\t\t}\n\n\t\t\t\tif(currentExpand < preloadExpand && isLoading < 1 && lowRuns > 2 && loadMode > 2 && !document.hidden){\n\t\t\t\t\tcurrentExpand = preloadExpand;\n\t\t\t\t\tlowRuns = 0;\n\t\t\t\t} else if(loadMode > 1 && lowRuns > 1 && isLoading < 6){\n\t\t\t\t\tcurrentExpand = defaultExpand;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentExpand = shrinkExpand;\n\t\t\t\t}\n\n\t\t\t\tfor(; i < eLlen; i++){\n\n\t\t\t\t\tif(!lazyloadElems[i] || lazyloadElems[i]._lazyRace){continue;}\n\n\t\t\t\t\tif(!supportScroll){unveilElement(lazyloadElems[i]);continue;}\n\n\t\t\t\t\tif(!(elemExpandVal = lazyloadElems[i][_getAttribute]('data-expand')) || !(elemExpand = elemExpandVal * 1)){\n\t\t\t\t\t\telemExpand = currentExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\tif(beforeExpandVal !== elemExpand){\n\t\t\t\t\t\teLvW = innerWidth + (elemExpand * hFac);\n\t\t\t\t\t\telvH = innerHeight + elemExpand;\n\t\t\t\t\t\telemNegativeExpand = elemExpand * -1;\n\t\t\t\t\t\tbeforeExpandVal = elemExpand;\n\t\t\t\t\t}\n\n\t\t\t\t\trect = lazyloadElems[i].getBoundingClientRect();\n\n\t\t\t\t\tif ((eLbottom = rect.bottom) >= elemNegativeExpand &&\n\t\t\t\t\t\t(eLtop = rect.top) <= elvH &&\n\t\t\t\t\t\t(eLright = rect.right) >= elemNegativeExpand * hFac &&\n\t\t\t\t\t\t(eLleft = rect.left) <= eLvW &&\n\t\t\t\t\t\t(eLbottom || eLright || eLleft || eLtop) &&\n\t\t\t\t\t\t(lazySizesConfig.loadHidden || getCSS(lazyloadElems[i], 'visibility') != 'hidden') &&\n\t\t\t\t\t\t((isCompleted && isLoading < 3 && !elemExpandVal && (loadMode < 3 || lowRuns < 4)) || isNestedVisible(lazyloadElems[i], elemExpand))){\n\t\t\t\t\t\tunveilElement(lazyloadElems[i]);\n\t\t\t\t\t\tloadedSomething = true;\n\t\t\t\t\t\tif(isLoading > 9){break;}\n\t\t\t\t\t} else if(!loadedSomething && isCompleted && !autoLoadElem &&\n\t\t\t\t\t\tisLoading < 4 && lowRuns < 4 && loadMode > 2 &&\n\t\t\t\t\t\t(preloadElems[0] || lazySizesConfig.preloadAfterLoad) &&\n\t\t\t\t\t\t(preloadElems[0] || (!elemExpandVal && ((eLbottom || eLright || eLleft || eLtop) || lazyloadElems[i][_getAttribute](lazySizesConfig.sizesAttr) != 'auto')))){\n\t\t\t\t\t\tautoLoadElem = preloadElems[0] || lazyloadElems[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(autoLoadElem && !loadedSomething){\n\t\t\t\t\tunveilElement(autoLoadElem);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar throttledCheckElements = throttle(checkElements);\n\n\t\tvar switchLoadingClass = function(e){\n\t\t\taddClass(e.target, lazySizesConfig.loadedClass);\n\t\t\tremoveClass(e.target, lazySizesConfig.loadingClass);\n\t\t\taddRemoveLoadEvents(e.target, rafSwitchLoadingClass);\n\t\t\ttriggerEvent(e.target, 'lazyloaded');\n\t\t};\n\t\tvar rafedSwitchLoadingClass = rAFIt(switchLoadingClass);\n\t\tvar rafSwitchLoadingClass = function(e){\n\t\t\trafedSwitchLoadingClass({target: e.target});\n\t\t};\n\n\t\tvar changeIframeSrc = function(elem, src){\n\t\t\ttry {\n\t\t\t\telem.contentWindow.location.replace(src);\n\t\t\t} catch(e){\n\t\t\t\telem.src = src;\n\t\t\t}\n\t\t};\n\n\t\tvar handleSources = function(source){\n\t\t\tvar customMedia;\n\n\t\t\tvar sourceSrcset = source[_getAttribute](lazySizesConfig.srcsetAttr);\n\n\t\t\tif( (customMedia = lazySizesConfig.customMedia[source[_getAttribute]('data-media') || source[_getAttribute]('media')]) ){\n\t\t\t\tsource.setAttribute('media', customMedia);\n\t\t\t}\n\n\t\t\tif(sourceSrcset){\n\t\t\t\tsource.setAttribute('srcset', sourceSrcset);\n\t\t\t}\n\t\t};\n\n\t\tvar lazyUnveil = rAFIt(function (elem, detail, isAuto, sizes, isImg){\n\t\t\tvar src, srcset, parent, isPicture, event, firesLoad;\n\n\t\t\tif(!(event = triggerEvent(elem, 'lazybeforeunveil', detail)).defaultPrevented){\n\n\t\t\t\tif(sizes){\n\t\t\t\t\tif(isAuto){\n\t\t\t\t\t\taddClass(elem, lazySizesConfig.autosizesClass);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.setAttribute('sizes', sizes);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsrcset = elem[_getAttribute](lazySizesConfig.srcsetAttr);\n\t\t\t\tsrc = elem[_getAttribute](lazySizesConfig.srcAttr);\n\n\t\t\t\tif(isImg) {\n\t\t\t\t\tparent = elem.parentNode;\n\t\t\t\t\tisPicture = parent && regPicture.test(parent.nodeName || '');\n\t\t\t\t}\n\n\t\t\t\tfiresLoad = detail.firesLoad || (('src' in elem) && (srcset || src || isPicture));\n\n\t\t\t\tevent = {target: elem};\n\n\t\t\t\tif(firesLoad){\n\t\t\t\t\taddRemoveLoadEvents(elem, resetPreloading, true);\n\t\t\t\t\tclearTimeout(resetPreloadingTimer);\n\t\t\t\t\tresetPreloadingTimer = setTimeout(resetPreloading, 2500);\n\n\t\t\t\t\taddClass(elem, lazySizesConfig.loadingClass);\n\t\t\t\t\taddRemoveLoadEvents(elem, rafSwitchLoadingClass, true);\n\t\t\t\t}\n\n\t\t\t\tif(isPicture){\n\t\t\t\t\tforEach.call(parent.getElementsByTagName('source'), handleSources);\n\t\t\t\t}\n\n\t\t\t\tif(srcset){\n\t\t\t\t\telem.setAttribute('srcset', srcset);\n\t\t\t\t} else if(src && !isPicture){\n\t\t\t\t\tif(regIframe.test(elem.nodeName)){\n\t\t\t\t\t\tchangeIframeSrc(elem, src);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem.src = src;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(isImg && (srcset || isPicture)){\n\t\t\t\t\tupdatePolyfill(elem, {src: src});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(elem._lazyRace){\n\t\t\t\tdelete elem._lazyRace;\n\t\t\t}\n\t\t\tremoveClass(elem, lazySizesConfig.lazyClass);\n\n\t\t\trAF(function(){\n\t\t\t\tif( !firesLoad || (elem.complete && elem.naturalWidth > 1)){\n\t\t\t\t\tif(firesLoad){\n\t\t\t\t\t\tresetPreloading(event);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tisLoading--;\n\t\t\t\t\t}\n\t\t\t\t\tswitchLoadingClass(event);\n\t\t\t\t}\n\t\t\t}, true);\n\t\t});\n\n\t\tvar unveilElement = function (elem){\n\t\t\tvar detail;\n\n\t\t\tvar isImg = regImg.test(elem.nodeName);\n\n\t\t\t//allow using sizes=\"auto\", but don't use. it's invalid. Use data-sizes=\"auto\" or a valid value for sizes instead (i.e.: sizes=\"80vw\")\n\t\t\tvar sizes = isImg && (elem[_getAttribute](lazySizesConfig.sizesAttr) || elem[_getAttribute]('sizes'));\n\t\t\tvar isAuto = sizes == 'auto';\n\n\t\t\tif( (isAuto || !isCompleted) && isImg && (elem[_getAttribute]('src') || elem.srcset) && !elem.complete && !hasClass(elem, lazySizesConfig.errorClass) && hasClass(elem, lazySizesConfig.lazyClass)){return;}\n\n\t\t\tdetail = triggerEvent(elem, 'lazyunveilread').detail;\n\n\t\t\tif(isAuto){\n\t\t\t\t autoSizer.updateElem(elem, true, elem.offsetWidth);\n\t\t\t}\n\n\t\t\telem._lazyRace = true;\n\t\t\tisLoading++;\n\n\t\t\tlazyUnveil(elem, detail, isAuto, sizes, isImg);\n\t\t};\n\n\t\tvar onload = function(){\n\t\t\tif(isCompleted){return;}\n\t\t\tif(Date.now() - started < 999){\n\t\t\t\tsetTimeout(onload, 999);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar afterScroll = debounce(function(){\n\t\t\t\tlazySizesConfig.loadMode = 3;\n\t\t\t\tthrottledCheckElements();\n\t\t\t});\n\n\t\t\tisCompleted = true;\n\n\t\t\tlazySizesConfig.loadMode = 3;\n\n\t\t\tthrottledCheckElements();\n\n\t\t\taddEventListener('scroll', function(){\n\t\t\t\tif(lazySizesConfig.loadMode == 3){\n\t\t\t\t\tlazySizesConfig.loadMode = 2;\n\t\t\t\t}\n\t\t\t\tafterScroll();\n\t\t\t}, true);\n\t\t};\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tstarted = Date.now();\n\n\t\t\t\tlazysizes.elements = document.getElementsByClassName(lazySizesConfig.lazyClass);\n\t\t\t\tpreloadElems = document.getElementsByClassName(lazySizesConfig.lazyClass + ' ' + lazySizesConfig.preloadClass);\n\t\t\t\thFac = lazySizesConfig.hFac;\n\n\t\t\t\taddEventListener('scroll', throttledCheckElements, true);\n\n\t\t\t\taddEventListener('resize', throttledCheckElements, true);\n\n\t\t\t\tif(window.MutationObserver){\n\t\t\t\t\tnew MutationObserver( throttledCheckElements ).observe( docElem, {childList: true, subtree: true, attributes: true} );\n\t\t\t\t} else {\n\t\t\t\t\tdocElem[_addEventListener]('DOMNodeInserted', throttledCheckElements, true);\n\t\t\t\t\tdocElem[_addEventListener]('DOMAttrModified', throttledCheckElements, true);\n\t\t\t\t\tsetInterval(throttledCheckElements, 999);\n\t\t\t\t}\n\n\t\t\t\taddEventListener('hashchange', throttledCheckElements, true);\n\n\t\t\t\t//, 'fullscreenchange'\n\t\t\t\t['focus', 'mouseover', 'click', 'load', 'transitionend', 'animationend', 'webkitAnimationEnd'].forEach(function(name){\n\t\t\t\t\tdocument[_addEventListener](name, throttledCheckElements, true);\n\t\t\t\t});\n\n\t\t\t\tif((/d$|^c/.test(document.readyState))){\n\t\t\t\t\tonload();\n\t\t\t\t} else {\n\t\t\t\t\taddEventListener('load', onload);\n\t\t\t\t\tdocument[_addEventListener]('DOMContentLoaded', throttledCheckElements);\n\t\t\t\t\tsetTimeout(onload, 20000);\n\t\t\t\t}\n\n\t\t\t\tif(lazysizes.elements.length){\n\t\t\t\t\tcheckElements();\n\t\t\t\t\trAF._lsFlush();\n\t\t\t\t} else {\n\t\t\t\t\tthrottledCheckElements();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcheckElems: throttledCheckElements,\n\t\t\tunveil: unveilElement\n\t\t};\n\t})();\n\n\n\tvar autoSizer = (function(){\n\t\tvar autosizesElems;\n\n\t\tvar sizeElement = rAFIt(function(elem, parent, event, width){\n\t\t\tvar sources, i, len;\n\t\t\telem._lazysizesWidth = width;\n\t\t\twidth += 'px';\n\n\t\t\telem.setAttribute('sizes', width);\n\n\t\t\tif(regPicture.test(parent.nodeName || '')){\n\t\t\t\tsources = parent.getElementsByTagName('source');\n\t\t\t\tfor(i = 0, len = sources.length; i < len; i++){\n\t\t\t\t\tsources[i].setAttribute('sizes', width);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!event.detail.dataAttr){\n\t\t\t\tupdatePolyfill(elem, event.detail);\n\t\t\t}\n\t\t});\n\t\tvar getSizeElement = function (elem, dataAttr, width){\n\t\t\tvar event;\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif(parent){\n\t\t\t\twidth = getWidth(elem, parent, width);\n\t\t\t\tevent = triggerEvent(elem, 'lazybeforesizes', {width: width, dataAttr: !!dataAttr});\n\n\t\t\t\tif(!event.defaultPrevented){\n\t\t\t\t\twidth = event.detail.width;\n\n\t\t\t\t\tif(width && width !== elem._lazysizesWidth){\n\t\t\t\t\t\tsizeElement(elem, parent, event, width);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar updateElementsSizes = function(){\n\t\t\tvar i;\n\t\t\tvar len = autosizesElems.length;\n\t\t\tif(len){\n\t\t\t\ti = 0;\n\n\t\t\t\tfor(; i < len; i++){\n\t\t\t\t\tgetSizeElement(autosizesElems[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar debouncedUpdateElementsSizes = debounce(updateElementsSizes);\n\n\t\treturn {\n\t\t\t_: function(){\n\t\t\t\tautosizesElems = document.getElementsByClassName(lazySizesConfig.autosizesClass);\n\t\t\t\taddEventListener('resize', debouncedUpdateElementsSizes);\n\t\t\t},\n\t\t\tcheckElems: debouncedUpdateElementsSizes,\n\t\t\tupdateElem: getSizeElement\n\t\t};\n\t})();\n\n\tvar init = function(){\n\t\tif(!init.i){\n\t\t\tinit.i = true;\n\t\t\tautoSizer._();\n\t\t\tloader._();\n\t\t}\n\t};\n\n\tlazysizes = {\n\t\tcfg: lazySizesConfig,\n\t\tautoSizer: autoSizer,\n\t\tloader: loader,\n\t\tinit: init,\n\t\tuP: updatePolyfill,\n\t\taC: addClass,\n\t\trC: removeClass,\n\t\thC: hasClass,\n\t\tfire: triggerEvent,\n\t\tgW: getWidth,\n\t\trAF: rAF,\n\t};\n\n\treturn lazysizes;\n}\n));\n","(function(window, factory) {\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(window, function(window, document, lazySizes) {\n\t'use strict';\n\tif(!window.addEventListener){return;}\n\n\tvar regWhite = /\\s+/g;\n\tvar regSplitSet = /\\s*\\|\\s+|\\s+\\|\\s*/g;\n\tvar regSource = /^(.+?)(?:\\s+\\[\\s*(.+?)\\s*\\])?$/;\n\tvar regBgUrlEscape = /\\(|\\)|'/;\n\tvar allowedBackgroundSize = {contain: 1, cover: 1};\n\tvar proxyWidth = function(elem){\n\t\tvar width = lazySizes.gW(elem, elem.parentNode);\n\n\t\tif(!elem._lazysizesWidth || width > elem._lazysizesWidth){\n\t\t\telem._lazysizesWidth = width;\n\t\t}\n\t\treturn elem._lazysizesWidth;\n\t};\n\tvar getBgSize = function(elem){\n\t\tvar bgSize;\n\n\t\tbgSize = (getComputedStyle(elem) || {getPropertyValue: function(){}}).getPropertyValue('background-size');\n\n\t\tif(!allowedBackgroundSize[bgSize] && allowedBackgroundSize[elem.style.backgroundSize]){\n\t\t\tbgSize = elem.style.backgroundSize;\n\t\t}\n\n\t\treturn bgSize;\n\t};\n\tvar createPicture = function(sets, elem, img){\n\t\tvar picture = document.createElement('picture');\n\t\tvar sizes = elem.getAttribute(lazySizesConfig.sizesAttr);\n\t\tvar ratio = elem.getAttribute('data-ratio');\n\t\tvar optimumx = elem.getAttribute('data-optimumx');\n\n\t\tif(elem._lazybgset && elem._lazybgset.parentNode == elem){\n\t\t\telem.removeChild(elem._lazybgset);\n\t\t}\n\n\t\tObject.defineProperty(img, '_lazybgset', {\n\t\t\tvalue: elem,\n\t\t\twritable: true\n\t\t});\n\t\tObject.defineProperty(elem, '_lazybgset', {\n\t\t\tvalue: picture,\n\t\t\twritable: true\n\t\t});\n\n\t\tsets = sets.replace(regWhite, ' ').split(regSplitSet);\n\n\t\tpicture.style.display = 'none';\n\t\timg.className = lazySizesConfig.lazyClass;\n\n\t\tif(sets.length == 1 && !sizes){\n\t\t\tsizes = 'auto';\n\t\t}\n\n\t\tsets.forEach(function(set){\n\t\t\tvar source = document.createElement('source');\n\n\t\t\tif(sizes && sizes != 'auto'){\n\t\t\t\tsource.setAttribute('sizes', sizes);\n\t\t\t}\n\n\t\t\tif(set.match(regSource)){\n\t\t\t\tsource.setAttribute(lazySizesConfig.srcsetAttr, RegExp.$1);\n\t\t\t\tif(RegExp.$2){\n\t\t\t\t\tsource.setAttribute('media', lazySizesConfig.customMedia[RegExp.$2] || RegExp.$2);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpicture.appendChild(source);\n\t\t});\n\n\t\tif(sizes){\n\t\t\timg.setAttribute(lazySizesConfig.sizesAttr, sizes);\n\t\t\telem.removeAttribute(lazySizesConfig.sizesAttr);\n\t\t\telem.removeAttribute('sizes');\n\t\t}\n\t\tif(optimumx){\n\t\t\timg.setAttribute('data-optimumx', optimumx);\n\t\t}\n\t\tif(ratio) {\n\t\t\timg.setAttribute('data-ratio', ratio);\n\t\t}\n\n\t\tpicture.appendChild(img);\n\n\t\telem.appendChild(picture);\n\t};\n\n\tvar proxyLoad = function(e){\n\t\tif(!e.target._lazybgset){return;}\n\n\t\tvar image = e.target;\n\t\tvar elem = image._lazybgset;\n\t\tvar bg = image.currentSrc || image.src;\n\n\t\tif(bg){\n\t\t\telem.style.backgroundImage = 'url(' + (regBgUrlEscape.test(bg) ? JSON.stringify(bg) : bg ) + ')';\n\t\t}\n\n\t\tif(image._lazybgsetLoading){\n\t\t\tlazySizes.fire(elem, '_lazyloaded', {}, false, true);\n\t\t\tdelete image._lazybgsetLoading;\n\t\t}\n\t};\n\n\taddEventListener('lazybeforeunveil', function(e){\n\t\tvar set, image, elem;\n\n\t\tif(e.defaultPrevented || !(set = e.target.getAttribute('data-bgset'))){return;}\n\n\t\telem = e.target;\n\t\timage = document.createElement('img');\n\n\t\timage.alt = '';\n\n\t\timage._lazybgsetLoading = true;\n\t\te.detail.firesLoad = true;\n\n\t\tcreatePicture(set, elem, image);\n\n\t\tsetTimeout(function(){\n\t\t\tlazySizes.loader.unveil(image);\n\n\t\t\tlazySizes.rAF(function(){\n\t\t\t\tlazySizes.fire(image, '_lazyloaded', {}, true, true);\n\t\t\t\tif(image.complete) {\n\t\t\t\t\tproxyLoad({target: image});\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t});\n\n\tdocument.addEventListener('load', proxyLoad, true);\n\n\twindow.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.detail.instance != lazySizes){return;}\n\t\tif(e.target._lazybgset && e.detail.dataAttr){\n\t\t\tvar elem = e.target._lazybgset;\n\t\t\tvar bgSize = getBgSize(elem);\n\n\t\t\tif(allowedBackgroundSize[bgSize]){\n\t\t\t\te.target._lazysizesParentFit = bgSize;\n\n\t\t\t\tlazySizes.rAF(function(){\n\t\t\t\t\te.target.setAttribute('data-parent-fit', bgSize);\n\t\t\t\t\tif(e.target._lazysizesParentFit){\n\t\t\t\t\t\tdelete e.target._lazysizesParentFit;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, true);\n\n\tdocument.documentElement.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.defaultPrevented || !e.target._lazybgset || e.detail.instance != lazySizes){return;}\n\t\te.detail.width = proxyWidth(e.target._lazybgset);\n\t});\n}));\n","(function(window, factory) {\n\tvar globalInstall = function(){\n\t\tfactory(window.lazySizes);\n\t\twindow.removeEventListener('lazyunveilread', globalInstall, true);\n\t};\n\n\tfactory = factory.bind(null, window, window.document);\n\n\tif(typeof module == 'object' && module.exports){\n\t\tfactory(require('lazysizes'));\n\t} else if(window.lazySizes) {\n\t\tglobalInstall();\n\t} else {\n\t\twindow.addEventListener('lazyunveilread', globalInstall, true);\n\t}\n}(window, function(window, document, lazySizes) {\n\t'use strict';\n\n\tif(!window.addEventListener){return;}\n\n\tvar regDescriptors = /\\s+(\\d+)(w|h)\\s+(\\d+)(w|h)/;\n\tvar regCssFit = /parent-fit[\"']*\\s*:\\s*[\"']*(contain|cover|width)/;\n\tvar regCssObject = /parent-container[\"']*\\s*:\\s*[\"']*(.+?)(?=(\\s|$|,|'|\"|;))/;\n\tvar regPicture = /^picture$/i;\n\n\tvar getCSS = function (elem){\n\t\treturn (getComputedStyle(elem, null) || {});\n\t};\n\n\tvar parentFit = {\n\n\t\tgetParent: function(element, parentSel){\n\t\t\tvar parent = element;\n\t\t\tvar parentNode = element.parentNode;\n\n\t\t\tif((!parentSel || parentSel == 'prev') && parentNode && regPicture.test(parentNode.nodeName || '')){\n\t\t\t\tparentNode = parentNode.parentNode;\n\t\t\t}\n\n\t\t\tif(parentSel != 'self'){\n\t\t\t\tif(parentSel == 'prev'){\n\t\t\t\t\tparent = element.previousElementSibling;\n\t\t\t\t} else if(parentSel && (parentNode.closest || window.jQuery)){\n\t\t\t\t\tparent = (parentNode.closest ?\n\t\t\t\t\t\t\tparentNode.closest(parentSel) :\n\t\t\t\t\t\t\tjQuery(parentNode).closest(parentSel)[0]) ||\n\t\t\t\t\t\tparentNode\n\t\t\t\t\t;\n\t\t\t\t} else {\n\t\t\t\t\tparent = parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn parent;\n\t\t},\n\n\t\tgetFit: function(element){\n\t\t\tvar tmpMatch, parentObj;\n\t\t\tvar css = getCSS(element);\n\t\t\tvar content = css.content || css.fontFamily;\n\t\t\tvar obj = {\n\t\t\t\tfit: element._lazysizesParentFit || element.getAttribute('data-parent-fit')\n\t\t\t};\n\n\t\t\tif(!obj.fit && content && (tmpMatch = content.match(regCssFit))){\n\t\t\t\tobj.fit = tmpMatch[1];\n\t\t\t}\n\n\t\t\tif(obj.fit){\n\t\t\t\tparentObj = element._lazysizesParentContainer || element.getAttribute('data-parent-container');\n\n\t\t\t\tif(!parentObj && content && (tmpMatch = content.match(regCssObject))){\n\t\t\t\t\tparentObj = tmpMatch[1];\n\t\t\t\t}\n\n\t\t\t\tobj.parent = parentFit.getParent(element, parentObj);\n\n\n\t\t\t} else {\n\t\t\t\tobj.fit = css.objectFit;\n\t\t\t}\n\n\t\t\treturn obj;\n\t\t},\n\n\t\tgetImageRatio: function(element){\n\t\t\tvar i, srcset, media, ratio;\n\t\t\tvar parent = element.parentNode;\n\t\t\tvar elements = parent && regPicture.test(parent.nodeName || '') ?\n\t\t\t\t\tparent.querySelectorAll('source, img') :\n\t\t\t\t\t[element]\n\t\t\t\t;\n\n\t\t\tfor(i = 0; i < elements.length; i++){\n\t\t\t\telement = elements[i];\n\t\t\t\tsrcset = element.getAttribute(lazySizesConfig.srcsetAttr) || element.getAttribute('srcset') || element.getAttribute('data-pfsrcset') || element.getAttribute('data-risrcset') || '';\n\t\t\t\tmedia = element._lsMedia || element.getAttribute('media');\n\t\t\t\tmedia = lazySizesConfig.customMedia[element.getAttribute('data-media') || media] || media;\n\n\t\t\t\tif(srcset && (!media || (window.matchMedia && matchMedia(media) || {}).matches )){\n\t\t\t\t\tratio = parseFloat(element.getAttribute('data-aspectratio'));\n\n\t\t\t\t\tif(!ratio && srcset.match(regDescriptors)){\n\t\t\t\t\t\tif(RegExp.$2 == 'w'){\n\t\t\t\t\t\t\tratio = RegExp.$1 / RegExp.$3;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tratio = RegExp.$3 / RegExp.$1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn ratio;\n\t\t},\n\n\t\tcalculateSize: function(element, width){\n\t\t\tvar displayRatio, height, imageRatio, retWidth;\n\t\t\tvar fitObj = this.getFit(element);\n\t\t\tvar fit = fitObj.fit;\n\t\t\tvar fitElem = fitObj.parent;\n\n\t\t\tif(fit != 'width' && ((fit != 'contain' && fit != 'cover') || !(imageRatio = this.getImageRatio(element)))){\n\t\t\t\treturn width;\n\t\t\t}\n\n\t\t\tif(fitElem){\n\t\t\t\twidth = fitElem.clientWidth;\n\t\t\t} else {\n\t\t\t\tfitElem = element;\n\t\t\t}\n\n\t\t\tretWidth = width;\n\n\t\t\tif(fit == 'width'){\n\t\t\t\tretWidth = width;\n\t\t\t} else {\n\t\t\t\theight = fitElem.clientHeight;\n\n\t\t\t\tif(height > 40 && (displayRatio = width / height) && ((fit == 'cover' && displayRatio < imageRatio) || (fit == 'contain' && displayRatio > imageRatio))){\n\t\t\t\t\tretWidth = width * (imageRatio / displayRatio);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn retWidth;\n\t\t}\n\t};\n\n\tlazySizes.parentFit = parentFit;\n\n\tdocument.addEventListener('lazybeforesizes', function(e){\n\t\tif(e.defaultPrevented || e.detail.instance != lazySizes){return;}\n\n\t\tvar element = e.target;\n\t\te.detail.width = parentFit.calculateSize(element, e.detail.width);\n\t});\n}));\n","import 'picturefill';\r\nimport 'lazysizes/plugins/bgset/ls.bgset';\r\nimport 'lazysizes/plugins/parent-fit/ls.parent-fit.js';\r\nimport 'lazysizes';\r\n\r\n// Configure lazySizes.\r\nwindow.lazySizesConfig = window.lazySizesConfig || {};\r\nwindow.lazySizesConfig.init = false;\r\nwindow.lazySizesConfig.customMedia = {\r\n '--portrait' : '(orientation: portrait) and (max-width: 767px)',\r\n '--landscape' : '(min-width: 768px), (orientation: landscape)',\r\n '--md-and-up' : '(min-width: 769px)',\r\n '--sm' : '(max-width: 768px)'\r\n};\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","type","typeUri","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","console","warn","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","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","cached","sort","Math","pow","sqrt","setSrc","origWidth","getSet","parseSets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","call","pic","sources","getElementsByTagName","getAllSourceElements","supported","parsed","srcSetCandidates","matchingSet","evaluated","extreme","evaled","max","innerWidth","clientWidth","height","innerHeight","clientHeight","vw","vh","em","rem","fillImgs","last","_","name","shift","module","Image","lazySizes","getElementsByClassName","lazysizes","lazySizesConfig","supportPicture","_addEventListener","_getAttribute","requestAnimationFrame","requestIdleCallback","regPicture","loadEvents","regClassCache","forEach","Array","prototype","hasClass","ele","cls","addClass","trim","removeClass","reg","addRemoveLoadEvents","dom","add","action","triggerEvent","elem","detail","noBubbles","noCancelable","event","createEvent","instance","initCustomEvent","dispatchEvent","updatePolyfill","el","full","polyfill","getCSS","getComputedStyle","getWidth","minSize","_lazysizesWidth","rAF","firstFns","secondFns","fns","runFns","waiting","running","rafBatch","queue","hidden","_lsFlush","rAFIt","simple","that","debounce","now","prop","lazySizesDefaults","lazyClass","loadedClass","loadingClass","preloadClass","errorClass","autosizesClass","sizesAttr","customMedia","expFactor","hFac","loadMode","loadHidden","ricTimeout","lazysizesConfig","loader","regImg","regIframe","supportScroll","currentExpand","isLoading","lowRuns","resetPreloading","target","isNestedVisible","elemExpand","outerRect","visible","eLtop","eLbottom","eLleft","eLright","offsetParent","getBoundingClientRect","left","right","top","bottom","checkElements","eLlen","rect","autoLoadElem","loadedSomething","elemNegativeExpand","elemExpandVal","beforeExpandVal","lazyloadElems","preloadExpand","expand","defaultExpand","_lazyRace","eLvW","elvH","isCompleted","unveilElement","preloadElems","preloadAfterLoad","lastTime","rICTimeout","idleCallback","throttledCheckElements","isPriority","delay","switchLoadingClass","rafSwitchLoadingClass","rafedSwitchLoadingClass","handleSources","sourceSrcset","lazyUnveil","isAuto","isImg","isPicture","firesLoad","defaultPrevented","resetPreloadingTimer","contentWindow","location","changeIframeSrc","naturalWidth","autoSizer","updateElem","started","afterScroll","MutationObserver","observe","childList","subtree","attributes","setInterval","checkElems","unveil","sizeElement","dataAttr","getSizeElement","debouncedUpdateElementsSizes","autosizesElems","uP","aC","rC","hC","fire","gW","factory","exports","globalInstall","removeEventListener","regWhite","regSplitSet","regSource","regBgUrlEscape","allowedBackgroundSize","contain","cover","proxyLoad","_lazybgset","bg","currentSrc","backgroundImage","JSON","stringify","_lazybgsetLoading","ratio","optimumx","alt","Object","defineProperty","writable","split","display","className","$2","bgSize","getPropertyValue","backgroundSize","_lazysizesParentFit","bind","require$$0","regDescriptors","regCssFit","regCssObject","parentFit","getParent","parentSel","previousElementSibling","closest","jQuery","getFit","tmpMatch","parentObj","content","fontFamily","fit","_lazysizesParentContainer","objectFit","getImageRatio","_lsMedia","$3","calculateSize","displayRatio","imageRatio","retWidth","fitObj","fitElem","--portrait","--landscape","--md-and-up","--sm"],"mappings":"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"}