{"version":3,"sources":["webpack:///home-bundle.js","webpack:///webpack/bootstrap 9caea95a9ac30528f436","webpack:///(webpack)/buildin/global.js","webpack:///./Static/javascript/pages/home.ts","webpack:///./node_modules/smoothscroll-polyfill/dist/smoothscroll.js","webpack:///./Static/javascript/vendor/gumshoe.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","3","g","this","Function","eval","e","window","44","addActiveClass","activeHeroBlockId","document","querySelector","getAttribute","activeHeroBlock","heroTintOverlay","heroContent","classList","contains","add","truncateLongTitles","titles","length","innerHTML","titlesInnerHTML","innerWidth","clientHeight","substring","initGumshoe","gumshoe","init","selector","container","offset","activeClass","scrollDelay","callback","nav","value","heroBlocksPosition","resizeTimer","heroBlocks","Array","slice","querySelectorAll","smoothscroll","polyfill","addEventListener","forEach","title","push","navbarContainer","jumpSections","section","sectionTarget","id","block","blockPosition","offsetTop","scrollTop","clientTop","homeBlockNav","preventDefault","scrollTo","top","left","behavior","clearTimeout","setTimeout","45","scrollElement","x","y","scrollLeft","ease","k","Math","cos","PI","shouldBailOut","firstArg","undefined","TypeError","hasScrollableSpace","el","axis","ROUNDING_TOLERANCE","scrollHeight","clientWidth","scrollWidth","canOverflow","overflowValue","w","getComputedStyle","isScrollable","isScrollableY","isScrollableX","findScrollableParent","body","parentNode","host","step","context","currentX","currentY","time","now","elapsed","startTime","SCROLL_TIME","startX","startY","method","scrollable","requestAnimationFrame","bind","smoothScroll","scrollX","pageXOffset","scrollY","pageYOffset","original","scroll","documentElement","style","__forceSmoothScrollPolyfill__","Element","HTMLElement","scrollBy","elementScroll","scrollIntoView","performance","Date","userAgent","userAgentPatterns","RegExp","join","test","navigator","arguments","SyntaxError","scrollableParent","parentRects","getBoundingClientRect","clientRects","position","46","root","factory","global","settings","eventTimeout","docHeight","header","headerHeight","currentNav","scrollEventDelay","supports","createElement","navs","defaults","selectorHeader","collection","scope","toString","prop","len","extend","extended","deep","obj","getHeight","elem","max","offsetHeight","getDocumentHeight","getOffsetTop","location","offsetParent","isInViewport","distance","bottom","innerHeight","right","sortNavs","sort","a","b","setDistances","target","getNavs","navLinks","hash","parent","tagName","toLowerCase","deactivateCurrentNav","remove","activateNav","getCurrentNav","setInitCurrentNav","destroy","removeEventListener","eventThrottler","scrollStop","event","type","options"],"mappings":"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","file":"home-bundle.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 44);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n\n/***/ 44:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar smoothscroll = __webpack_require__(45);\r\nvar gumshoe = __webpack_require__(46);\r\nvar heroBlocksPosition = [];\r\nvar resizeTimer = null;\r\nvar heroBlocks = Array.prototype.slice.call(document.querySelectorAll(\".hero-block\"));\r\nvar homeBlockNavLink = null;\r\nvar titles = Array.prototype.slice.call(document.querySelectorAll(\".hero-title\"));\r\nvar titlesInnerHTML = [];\r\n// For IE and Edge\r\nsmoothscroll.polyfill();\r\nwindow.addEventListener(\"DOMContentLoaded\", function () {\r\n titles.forEach(function (title) {\r\n titlesInnerHTML.push(title.innerHTML);\r\n });\r\n truncateLongTitles();\r\n if (document.querySelector(\".scrollspy-dot-navbar\")) {\r\n var navbarContainer = document.querySelectorAll('.scrollspy-dot-navbar')[0];\r\n // Find all sections to add to scrollspy nav list\r\n var jumpSections = Array.prototype.slice.call(document.querySelectorAll('[data-scrollspy=\"true\"]'));\r\n var jumpList_1 = '';\r\n // Create list item by looping through each section\r\n jumpSections.forEach(function (section) {\r\n var sectionTarget = section.id;\r\n jumpList_1 += \"
  • \";\r\n });\r\n // Add string of list items to scrollspy nav\r\n var jumpListContainer = navbarContainer.querySelectorAll('nav ul')[0];\r\n jumpListContainer.innerHTML = jumpList_1;\r\n // Handler when the DOM is fully loaded\r\n initGumshoe();\r\n }\r\n ;\r\n heroBlocks.forEach(function (block) {\r\n var blockPosition = block.offsetTop - block.scrollTop + block.clientTop;\r\n heroBlocksPosition.push(blockPosition);\r\n });\r\n var homeBlockNav = Array.prototype.slice.call(document.querySelector(\".home-page-nav\").querySelectorAll(\"li\"));\r\n var _loop_1 = function (i) {\r\n homeBlockNav[i].querySelector(\"a\").addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n window.scrollTo({ top: heroBlocksPosition[i], left: 0, behavior: 'smooth' });\r\n });\r\n };\r\n for (var i = 0; i < homeBlockNav.length; i++) {\r\n _loop_1(i);\r\n }\r\n});\r\nwindow.addEventListener(\"resize\", function () {\r\n if (resizeTimer != null) {\r\n clearTimeout(resizeTimer);\r\n }\r\n resizeTimer = setTimeout(function () {\r\n heroBlocksPosition = [];\r\n heroBlocks.forEach(function (block) {\r\n var blockPosition = block.offsetTop - block.scrollTop + block.clientTop;\r\n heroBlocksPosition.push(blockPosition);\r\n });\r\n initGumshoe();\r\n }, 500);\r\n truncateLongTitles();\r\n});\r\nfunction addActiveClass() {\r\n var activeHeroBlockId = document.querySelector(\"a.home-page-nav-active\").getAttribute(\"href\");\r\n var activeHeroBlock = document.querySelector(activeHeroBlockId);\r\n var heroTintOverlay = activeHeroBlock.querySelector(\".hero-tint-overlay\");\r\n var heroContent = activeHeroBlock.querySelector(\".hero-content\");\r\n if (!heroTintOverlay.classList.contains(\"hero-tint-overlay-show\")) {\r\n heroTintOverlay.classList.add(\"hero-tint-overlay-show\");\r\n }\r\n if (!heroContent.classList.contains(\"hero-content-show\")) {\r\n heroContent.classList.add(\"hero-content-show\");\r\n }\r\n}\r\nfunction truncateLongTitles() {\r\n for (var i = 0; i < titles.length; i++) {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n if (window.innerWidth <= 1600 && window.innerWidth > 1280) {\r\n // Upperbound is equal to 2 times the title font-size at this breakpoint\r\n // This prevents the title from ever wrapping over 2 lines\r\n if (titles[i].clientHeight > 432) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n if (window.innerWidth <= 1280 && window.innerWidth > 1025) {\r\n if (titles[i].clientHeight > 320) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n if (window.innerWidth <= 1025) {\r\n if (titles[i].clientHeight > 240) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n }\r\n}\r\nfunction initGumshoe() {\r\n gumshoe.init({\r\n selector: '[data-gumshoe] a',\r\n //selectorHeader: '#siteHeader', // Fixed header selector (must use a valid CSS selector)\r\n container: window,\r\n offset: 250,\r\n activeClass: 'home-page-nav-active',\r\n scrollDelay: false,\r\n callback: function (nav) {\r\n addActiveClass();\r\n } // Callback to run after setting active link\r\n });\r\n}\r\n\n\n/***/ }),\n\n/***/ 45:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (true) {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n\n\n/***/ }),\n\n/***/ 46:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * gumshoe v3.5.0: A simple, framework-agnostic scrollspy script.\r\n * (c) 2017 Chris Ferdinandi\r\n * MIT License\r\n * http://github.com/cferdinandi/gumshoe\r\n */\r\n\r\n(function (root, factory) {\r\n if (true) {\r\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory(root)),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n } else if (typeof exports === 'object') {\r\n module.exports = factory(root);\r\n } else {\r\n root.gumshoe = factory(root);\r\n }\r\n})(typeof global !== 'undefined' ? global : this.window || this.global, (function (root) {\r\n\r\n 'use strict';\r\n\r\n //\r\n // Variables\r\n //\r\n\r\n var gumshoe = {}; // Object for public APIs\r\n var supports = 'querySelector' in document && 'addEventListener' in root && 'classList' in document.createElement('_'); // Feature test\r\n var navs = []; // Array for nav elements\r\n var settings, eventTimeout, docHeight, header, headerHeight, currentNav, scrollEventDelay;\r\n\r\n // Default settings\r\n var defaults = {\r\n selector: '[data-gumshoe] a',\r\n selectorHeader: '[data-gumshoe-header]',\r\n container: root,\r\n offset: 0,\r\n activeClass: 'active',\r\n scrollDelay: false,\r\n callback: function () { }\r\n };\r\n\r\n\r\n //\r\n // Methods\r\n //\r\n\r\n\t/**\r\n\t * A simple forEach() implementation for Arrays, Objects and NodeLists.\r\n\t * @private\r\n\t * @author Todd Motto\r\n\t * @link https://github.com/toddmotto/foreach\r\n\t * @param {Array|Object|NodeList} collection Collection of items to iterate\r\n\t * @param {Function} callback Callback function for each iteration\r\n\t * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)\r\n\t */\r\n var forEach = function (collection, callback, scope) {\r\n if (Object.prototype.toString.call(collection) === '[object Object]') {\r\n for (var prop in collection) {\r\n if (Object.prototype.hasOwnProperty.call(collection, prop)) {\r\n callback.call(scope, collection[prop], prop, collection);\r\n }\r\n }\r\n } else {\r\n for (var i = 0, len = collection.length; i < len; i++) {\r\n callback.call(scope, collection[i], i, collection);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Merge two or more objects. Returns a new object.\r\n\t * @private\r\n\t * @param {Boolean} deep If true, do a deep (or recursive) merge [optional]\r\n\t * @param {Object} objects The objects to merge together\r\n\t * @returns {Object} Merged values of defaults and options\r\n\t */\r\n var extend = function () {\r\n\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n var length = arguments.length;\r\n\r\n // Check if a deep merge\r\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function (obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n // If deep merge and property is an object, merge properties\r\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\r\n extended[prop] = extend(true, extended[prop], obj[prop]);\r\n } else {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for (; i < length; i++) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n\r\n return extended;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get the height of an element.\r\n\t * @private\r\n\t * @param {Node} elem The element to get the height of\r\n\t * @return {Number} The element's height in pixels\r\n\t */\r\n var getHeight = function (elem) {\r\n return Math.max(elem.scrollHeight, elem.offsetHeight, elem.clientHeight);\r\n };\r\n\r\n\t/**\r\n\t * Get the document element's height\r\n\t * @private\r\n\t * @returns {Number}\r\n\t */\r\n var getDocumentHeight = function () {\r\n return Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Get an element's distance from the top of the Document.\r\n\t * @private\r\n\t * @param {Node} elem The element\r\n\t * @return {Number} Distance from the top in pixels\r\n\t */\r\n var getOffsetTop = function (elem) {\r\n var location = 0;\r\n if (elem.offsetParent) {\r\n do {\r\n location += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n } else {\r\n location = elem.offsetTop;\r\n }\r\n location = location - headerHeight - settings.offset;\r\n return location >= 0 ? location : 0;\r\n };\r\n\r\n\t/**\r\n\t * Determine if an element is in the viewport\r\n\t * @param {Node} elem The element\r\n\t * @return {Boolean} Returns true if element is in the viewport\r\n\t */\r\n var isInViewport = function (elem) {\r\n var distance = elem.getBoundingClientRect();\r\n return (\r\n distance.top >= 0 &&\r\n distance.left >= 0 &&\r\n distance.bottom <= (root.innerHeight || document.documentElement.clientHeight) &&\r\n distance.right <= (root.innerWidth || document.documentElement.clientWidth)\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Arrange nagivation elements from furthest from the top to closest\r\n\t * @private\r\n\t */\r\n var sortNavs = function () {\r\n navs.sort((function (a, b) {\r\n if (a.distance > b.distance) {\r\n return -1;\r\n }\r\n if (a.distance < b.distance) {\r\n return 1;\r\n }\r\n return 0;\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Calculate the distance of elements from the top of the document\r\n\t * @public\r\n\t */\r\n gumshoe.setDistances = function () {\r\n\r\n // Calculate distances\r\n docHeight = getDocumentHeight(); // The document\r\n headerHeight = header ? (getHeight(header) + getOffsetTop(header)) : 0; // The fixed header\r\n forEach(navs, (function (nav) {\r\n nav.distance = getOffsetTop(nav.target); // Each navigation target\r\n }));\r\n\r\n // When done, organization navigation elements\r\n sortNavs();\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get all navigation elements and store them in an array\r\n\t * @private\r\n\t */\r\n var getNavs = function () {\r\n\r\n // Get all navigation links\r\n var navLinks = document.querySelectorAll(settings.selector);\r\n\r\n // For each link, create an object of attributes and push to an array\r\n forEach(navLinks, (function (nav) {\r\n if (!nav.hash) return;\r\n var target = document.querySelector(nav.hash);\r\n if (!target) return;\r\n navs.push({\r\n nav: nav,\r\n target: target,\r\n parent: nav.parentNode.tagName.toLowerCase() === 'li' ? nav.parentNode : null,\r\n distance: 0\r\n });\r\n }));\r\n\r\n };\r\n\r\n\r\n\t/**\r\n\t * Remove the activation class from the currently active navigation element\r\n\t * @private\r\n\t */\r\n var deactivateCurrentNav = function () {\r\n if (currentNav) {\r\n currentNav.nav.classList.remove(settings.activeClass);\r\n if (currentNav.parent) {\r\n currentNav.parent.classList.remove(settings.activeClass);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Add the activation class to the currently active navigation element\r\n\t * @private\r\n\t * @param {Node} nav The currently active nav\r\n\t */\r\n var activateNav = function (nav) {\r\n\r\n // If a current Nav is set, deactivate it\r\n deactivateCurrentNav();\r\n\r\n // Activate the current target's navigation element\r\n nav.nav.classList.add(settings.activeClass);\r\n if (nav.parent) {\r\n nav.parent.classList.add(settings.activeClass);\r\n }\r\n\r\n settings.callback(nav); // Callback after methods are run\r\n\r\n // Set new currentNav\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n\r\n };\r\n\r\n\t/**\r\n\t * Determine which navigation element is currently active and run activation method\r\n\t * @public\r\n\t * @returns {Object} The current nav data.\r\n\t */\r\n gumshoe.getCurrentNav = function () {\r\n\r\n // Get current position from top of the document\r\n var position = root.pageYOffset;\r\n\r\n // If at the bottom of the page and last section is in the viewport, activate the last nav\r\n if ((root.innerHeight + position) >= docHeight && isInViewport(navs[0].target)) {\r\n activateNav(navs[0]);\r\n return navs[0];\r\n }\r\n\r\n // Otherwise, loop through each nav until you find the active one\r\n for (var i = 0, len = navs.length; i < len; i++) {\r\n var nav = navs[i];\r\n if (nav.distance <= position) {\r\n activateNav(nav);\r\n return nav;\r\n }\r\n }\r\n\r\n // If no active nav is found, deactivate the current nav\r\n deactivateCurrentNav();\r\n settings.callback();\r\n\r\n };\r\n\r\n\t/**\r\n\t * If nav element has active class on load, set it as currently active navigation\r\n\t * @private\r\n\t */\r\n var setInitCurrentNav = function () {\r\n forEach(navs, (function (nav) {\r\n if (nav.nav.classList.contains(settings.activeClass)) {\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n }\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Destroy the current initialization.\r\n\t * @public\r\n\t */\r\n gumshoe.destroy = function () {\r\n\r\n // If plugin isn't already initialized, stop\r\n if (!settings) return;\r\n\r\n // Remove event listeners\r\n settings.container.removeEventListener('resize', eventThrottler, false);\r\n settings.container.removeEventListener('scroll', eventThrottler, false);\r\n\r\n // Reset variables\r\n navs = [];\r\n settings = null;\r\n eventTimeout = null;\r\n docHeight = null;\r\n header = null;\r\n headerHeight = null;\r\n currentNav = null;\r\n scrollEventDelay = null;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Run functions after scrolling stops\r\n\t * @param {[type]} event [description]\r\n\t * @return {[type]} [description]\r\n\t */\r\n var scrollStop = function (event) {\r\n\r\n // Clear our timeout throughout the scroll\r\n window.clearTimeout(eventTimeout);\r\n\r\n // recalculate distances and then get currently active nav\r\n eventTimeout = setTimeout((function () {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }), 66);\r\n\r\n };\r\n\r\n\t/**\r\n\t * On window scroll and resize, only run events at a rate of 15fps for better performance\r\n\t * @private\r\n\t * @param {Function} eventTimeout Timeout function\r\n\t * @param {Object} settings\r\n\t */\r\n var eventThrottler = function (event) {\r\n if (!eventTimeout) {\r\n eventTimeout = setTimeout((function () {\r\n\r\n eventTimeout = null; // Reset timeout\r\n\r\n // If scroll event, get currently active nav\r\n if (event.type === 'scroll') {\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n // If resize event, recalculate distances and then get currently active nav\r\n if (event.type === 'resize') {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n }), 66);\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Initialize Plugin\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n gumshoe.init = function (options) {\r\n\r\n // feature test\r\n if (!supports) return;\r\n\r\n // Destroy any existing initializations\r\n gumshoe.destroy();\r\n\r\n // Set variables\r\n settings = extend(defaults, options || {}); // Merge user options with defaults\r\n header = document.querySelector(settings.selectorHeader); // Get fixed header\r\n getNavs(); // Get navigation elements\r\n\r\n // If no navigation elements exist, stop running gumshoe\r\n if (navs.length === 0) return;\r\n\r\n // Run init methods\r\n setInitCurrentNav();\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n\r\n // Listen for events\r\n settings.container.addEventListener('resize', eventThrottler, false);\r\n if (settings.scrollDelay) {\r\n settings.container.addEventListener('scroll', scrollStop, false);\r\n } else {\r\n settings.container.addEventListener('scroll', eventThrottler, false);\r\n }\r\n\r\n };\r\n\r\n\r\n //\r\n // Public APIs\r\n //\r\n\r\n return gumshoe;\r\n\r\n}));\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3)))\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// home-bundle.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 44);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9caea95a9ac30528f436","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\n} catch(e) {\n\t// This works if the window reference is available\n\tif(typeof window === \"object\")\n\t\tg = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 3\n// module chunks = 0 1 2 3 4","import * as smoothscroll from 'smoothscroll-polyfill';\r\nvar gumshoe = require('../vendor/gumshoe');\r\n\r\nlet heroBlocksPosition = [];\r\nlet resizeTimer = null;\r\nlet heroBlocks = Array.prototype.slice.call(document.querySelectorAll(\".hero-block\"));\r\nlet homeBlockNavLink = null;\r\nlet titles = Array.prototype.slice.call(document.querySelectorAll(\".hero-title\"));\r\nlet titlesInnerHTML = [];\r\n\r\n// For IE and Edge\r\nsmoothscroll.polyfill();\r\n\r\nwindow.addEventListener(\"DOMContentLoaded\", function () {\r\n titles.forEach(function (title) {\r\n titlesInnerHTML.push(title.innerHTML);\r\n })\r\n\r\n truncateLongTitles();\r\n\r\n if (document.querySelector(\".scrollspy-dot-navbar\")) {\r\n let navbarContainer = document.querySelectorAll('.scrollspy-dot-navbar')[0];\r\n\r\n // Find all sections to add to scrollspy nav list\r\n const jumpSections = Array.prototype.slice.call(document.querySelectorAll('[data-scrollspy=\"true\"]'));\r\n let jumpList = '';\r\n\r\n // Create list item by looping through each section\r\n jumpSections.forEach(section => {\r\n let sectionTarget = section.id;\r\n\r\n jumpList += `
  • `;\r\n });\r\n\r\n // Add string of list items to scrollspy nav\r\n const jumpListContainer = navbarContainer.querySelectorAll('nav ul')[0];\r\n jumpListContainer.innerHTML = jumpList;\r\n\r\n // Handler when the DOM is fully loaded\r\n initGumshoe()\r\n };\r\n\r\n heroBlocks.forEach(function (block) {\r\n let blockPosition = block.offsetTop - block.scrollTop + block.clientTop;\r\n heroBlocksPosition.push(blockPosition);\r\n })\r\n\r\n let homeBlockNav = Array.prototype.slice.call(document.querySelector(\".home-page-nav\").querySelectorAll(\"li\"));\r\n\r\n for (let i = 0; i < homeBlockNav.length; i++) {\r\n homeBlockNav[i].querySelector(\"a\").addEventListener(\"click\", function (e) {\r\n e.preventDefault();\r\n window.scrollTo({ top: heroBlocksPosition[i], left: 0, behavior: 'smooth' });\r\n })\r\n }\r\n})\r\n\r\nwindow.addEventListener(\"resize\", function () { \r\n if (resizeTimer != null) {\r\n clearTimeout(resizeTimer);\r\n }\r\n\r\n resizeTimer = setTimeout(function () {\r\n heroBlocksPosition = [];\r\n\r\n heroBlocks.forEach(function (block) {\r\n let blockPosition = block.offsetTop - block.scrollTop + block.clientTop;\r\n heroBlocksPosition.push(blockPosition);\r\n })\r\n\r\n initGumshoe()\r\n }, 500);\r\n\r\n truncateLongTitles();\r\n})\r\n\r\nfunction addActiveClass() {\r\n let activeHeroBlockId = document.querySelector(\"a.home-page-nav-active\").getAttribute(\"href\");\r\n let activeHeroBlock = document.querySelector(activeHeroBlockId);\r\n let heroTintOverlay = activeHeroBlock.querySelector(\".hero-tint-overlay\");\r\n let heroContent = activeHeroBlock.querySelector(\".hero-content\");\r\n\r\n if (!heroTintOverlay.classList.contains(\"hero-tint-overlay-show\")) {\r\n heroTintOverlay.classList.add(\"hero-tint-overlay-show\");\r\n }\r\n\r\n if (!heroContent.classList.contains(\"hero-content-show\")) {\r\n heroContent.classList.add(\"hero-content-show\");\r\n }\r\n}\r\n\r\nfunction truncateLongTitles() {\r\n for (let i = 0; i < titles.length; i++) { \r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n\r\n if (window.innerWidth <= 1600 && window.innerWidth > 1280) {\r\n // Upperbound is equal to 2 times the title font-size at this breakpoint\r\n // This prevents the title from ever wrapping over 2 lines\r\n if (titles[i].clientHeight > 432) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n if (window.innerWidth <= 1280 && window.innerWidth > 1025) {\r\n if (titles[i].clientHeight > 320) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n if (window.innerWidth <= 1025) {\r\n if (titles[i].clientHeight > 240) {\r\n titles[i].innerHTML = titles[i].innerHTML.substring(0, 18) + \"...\";\r\n }\r\n else {\r\n titles[i].innerHTML = titlesInnerHTML[i];\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction initGumshoe() {\r\n gumshoe.init({\r\n selector: '[data-gumshoe] a', // Default link selector (must use a valid CSS selector)\r\n //selectorHeader: '#siteHeader', // Fixed header selector (must use a valid CSS selector)\r\n container: window, // The element to spy on scrolling in (must be a valid DOM Node) \r\n offset: 250, // Distance in pixels to offset calculations\r\n activeClass: 'home-page-nav-active', // Class to apply to active navigation link and its parent list item\r\n scrollDelay: false, // Wait until scrolling has stopped before updating the navigation\r\n callback: function (nav) {\r\n addActiveClass();\r\n } // Callback to run after setting active link\r\n });\r\n}\n\n\n// WEBPACK FOOTER //\n// ./Static/javascript/pages/home.ts","/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n 'use strict';\n\n // polyfill\n function polyfill() {\n // aliases\n var w = window;\n var d = document;\n\n // return if scroll behavior is supported and polyfill is not forced\n if (\n 'scrollBehavior' in d.documentElement.style &&\n w.__forceSmoothScrollPolyfill__ !== true\n ) {\n return;\n }\n\n // globals\n var Element = w.HTMLElement || w.Element;\n var SCROLL_TIME = 468;\n\n // object gathering original scroll methods\n var original = {\n scroll: w.scroll || w.scrollTo,\n scrollBy: w.scrollBy,\n elementScroll: Element.prototype.scroll || scrollElement,\n scrollIntoView: Element.prototype.scrollIntoView\n };\n\n // define timing method\n var now =\n w.performance && w.performance.now\n ? w.performance.now.bind(w.performance)\n : Date.now;\n\n /**\n * indicates if a the current browser is made by Microsoft\n * @method isMicrosoftBrowser\n * @param {String} userAgent\n * @returns {Boolean}\n */\n function isMicrosoftBrowser(userAgent) {\n var userAgentPatterns = ['MSIE ', 'Trident/', 'Edge/'];\n\n return new RegExp(userAgentPatterns.join('|')).test(userAgent);\n }\n\n /*\n * IE has rounding bug rounding down clientHeight and clientWidth and\n * rounding up scrollHeight and scrollWidth causing false positives\n * on hasScrollableSpace\n */\n var ROUNDING_TOLERANCE = isMicrosoftBrowser(w.navigator.userAgent) ? 1 : 0;\n\n /**\n * changes scroll position inside an element\n * @method scrollElement\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function scrollElement(x, y) {\n this.scrollLeft = x;\n this.scrollTop = y;\n }\n\n /**\n * returns result of applying ease math function to a number\n * @method ease\n * @param {Number} k\n * @returns {Number}\n */\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n /**\n * indicates if a smooth behavior should be applied\n * @method shouldBailOut\n * @param {Number|Object} firstArg\n * @returns {Boolean}\n */\n function shouldBailOut(firstArg) {\n if (\n firstArg === null ||\n typeof firstArg !== 'object' ||\n firstArg.behavior === undefined ||\n firstArg.behavior === 'auto' ||\n firstArg.behavior === 'instant'\n ) {\n // first argument is not an object/null\n // or behavior is auto, instant or undefined\n return true;\n }\n\n if (typeof firstArg === 'object' && firstArg.behavior === 'smooth') {\n // first argument is an object and behavior is smooth\n return false;\n }\n\n // throw error when behavior is not supported\n throw new TypeError(\n 'behavior member of ScrollOptions ' +\n firstArg.behavior +\n ' is not a valid value for enumeration ScrollBehavior.'\n );\n }\n\n /**\n * indicates if an element has scrollable space in the provided axis\n * @method hasScrollableSpace\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function hasScrollableSpace(el, axis) {\n if (axis === 'Y') {\n return el.clientHeight + ROUNDING_TOLERANCE < el.scrollHeight;\n }\n\n if (axis === 'X') {\n return el.clientWidth + ROUNDING_TOLERANCE < el.scrollWidth;\n }\n }\n\n /**\n * indicates if an element has a scrollable overflow property in the axis\n * @method canOverflow\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function canOverflow(el, axis) {\n var overflowValue = w.getComputedStyle(el, null)['overflow' + axis];\n\n return overflowValue === 'auto' || overflowValue === 'scroll';\n }\n\n /**\n * indicates if an element can be scrolled in either axis\n * @method isScrollable\n * @param {Node} el\n * @param {String} axis\n * @returns {Boolean}\n */\n function isScrollable(el) {\n var isScrollableY = hasScrollableSpace(el, 'Y') && canOverflow(el, 'Y');\n var isScrollableX = hasScrollableSpace(el, 'X') && canOverflow(el, 'X');\n\n return isScrollableY || isScrollableX;\n }\n\n /**\n * finds scrollable parent of an element\n * @method findScrollableParent\n * @param {Node} el\n * @returns {Node} el\n */\n function findScrollableParent(el) {\n while (el !== d.body && isScrollable(el) === false) {\n el = el.parentNode || el.host;\n }\n\n return el;\n }\n\n /**\n * self invoked function that, given a context, steps through scrolling\n * @method step\n * @param {Object} context\n * @returns {undefined}\n */\n function step(context) {\n var time = now();\n var value;\n var currentX;\n var currentY;\n var elapsed = (time - context.startTime) / SCROLL_TIME;\n\n // avoid elapsed times higher than one\n elapsed = elapsed > 1 ? 1 : elapsed;\n\n // apply easing to elapsed time\n value = ease(elapsed);\n\n currentX = context.startX + (context.x - context.startX) * value;\n currentY = context.startY + (context.y - context.startY) * value;\n\n context.method.call(context.scrollable, currentX, currentY);\n\n // scroll more if we have not reached our destination\n if (currentX !== context.x || currentY !== context.y) {\n w.requestAnimationFrame(step.bind(w, context));\n }\n }\n\n /**\n * scrolls window or element with a smooth behavior\n * @method smoothScroll\n * @param {Object|Node} el\n * @param {Number} x\n * @param {Number} y\n * @returns {undefined}\n */\n function smoothScroll(el, x, y) {\n var scrollable;\n var startX;\n var startY;\n var method;\n var startTime = now();\n\n // define scroll context\n if (el === d.body) {\n scrollable = w;\n startX = w.scrollX || w.pageXOffset;\n startY = w.scrollY || w.pageYOffset;\n method = original.scroll;\n } else {\n scrollable = el;\n startX = el.scrollLeft;\n startY = el.scrollTop;\n method = scrollElement;\n }\n\n // scroll looping over a frame\n step({\n scrollable: scrollable,\n method: method,\n startTime: startTime,\n startX: startX,\n startY: startY,\n x: x,\n y: y\n });\n }\n\n // ORIGINAL METHODS OVERRIDES\n // w.scroll and w.scrollTo\n w.scroll = w.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scroll.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object'\n ? arguments[0]\n : w.scrollX || w.pageXOffset,\n // use top prop, second argument if present or fallback to scrollY\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined\n ? arguments[1]\n : w.scrollY || w.pageYOffset\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : w.scrollX || w.pageXOffset,\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : w.scrollY || w.pageYOffset\n );\n };\n\n // w.scrollBy\n w.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0])) {\n original.scrollBy.call(\n w,\n arguments[0].left !== undefined\n ? arguments[0].left\n : typeof arguments[0] !== 'object' ? arguments[0] : 0,\n arguments[0].top !== undefined\n ? arguments[0].top\n : arguments[1] !== undefined ? arguments[1] : 0\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n w,\n d.body,\n ~~arguments[0].left + (w.scrollX || w.pageXOffset),\n ~~arguments[0].top + (w.scrollY || w.pageYOffset)\n );\n };\n\n // Element.prototype.scroll and Element.prototype.scrollTo\n Element.prototype.scroll = Element.prototype.scrollTo = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n // if one number is passed, throw error to match Firefox implementation\n if (typeof arguments[0] === 'number' && arguments[1] === undefined) {\n throw new SyntaxError('Value could not be converted');\n }\n\n original.elementScroll.call(\n this,\n // use left prop, first number argument or fallback to scrollLeft\n arguments[0].left !== undefined\n ? ~~arguments[0].left\n : typeof arguments[0] !== 'object' ? ~~arguments[0] : this.scrollLeft,\n // use top prop, second argument or fallback to scrollTop\n arguments[0].top !== undefined\n ? ~~arguments[0].top\n : arguments[1] !== undefined ? ~~arguments[1] : this.scrollTop\n );\n\n return;\n }\n\n var left = arguments[0].left;\n var top = arguments[0].top;\n\n // LET THE SMOOTHNESS BEGIN!\n smoothScroll.call(\n this,\n this,\n typeof left === 'undefined' ? this.scrollLeft : ~~left,\n typeof top === 'undefined' ? this.scrollTop : ~~top\n );\n };\n\n // Element.prototype.scrollBy\n Element.prototype.scrollBy = function() {\n // avoid action when no arguments are passed\n if (arguments[0] === undefined) {\n return;\n }\n\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.elementScroll.call(\n this,\n arguments[0].left !== undefined\n ? ~~arguments[0].left + this.scrollLeft\n : ~~arguments[0] + this.scrollLeft,\n arguments[0].top !== undefined\n ? ~~arguments[0].top + this.scrollTop\n : ~~arguments[1] + this.scrollTop\n );\n\n return;\n }\n\n this.scroll({\n left: ~~arguments[0].left + this.scrollLeft,\n top: ~~arguments[0].top + this.scrollTop,\n behavior: arguments[0].behavior\n });\n };\n\n // Element.prototype.scrollIntoView\n Element.prototype.scrollIntoView = function() {\n // avoid smooth behavior if not required\n if (shouldBailOut(arguments[0]) === true) {\n original.scrollIntoView.call(\n this,\n arguments[0] === undefined ? true : arguments[0]\n );\n\n return;\n }\n\n // LET THE SMOOTHNESS BEGIN!\n var scrollableParent = findScrollableParent(this);\n var parentRects = scrollableParent.getBoundingClientRect();\n var clientRects = this.getBoundingClientRect();\n\n if (scrollableParent !== d.body) {\n // reveal element inside parent\n smoothScroll.call(\n this,\n scrollableParent,\n scrollableParent.scrollLeft + clientRects.left - parentRects.left,\n scrollableParent.scrollTop + clientRects.top - parentRects.top\n );\n\n // reveal parent in viewport unless is fixed\n if (w.getComputedStyle(scrollableParent).position !== 'fixed') {\n w.scrollBy({\n left: parentRects.left,\n top: parentRects.top,\n behavior: 'smooth'\n });\n }\n } else {\n // reveal element in viewport\n w.scrollBy({\n left: clientRects.left,\n top: clientRects.top,\n behavior: 'smooth'\n });\n }\n };\n }\n\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n // commonjs\n module.exports = { polyfill: polyfill };\n } else {\n // global\n polyfill();\n }\n\n}());\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/smoothscroll-polyfill/dist/smoothscroll.js\n// module id = 45\n// module chunks = 3","/*!\r\n * gumshoe v3.5.0: A simple, framework-agnostic scrollspy script.\r\n * (c) 2017 Chris Ferdinandi\r\n * MIT License\r\n * http://github.com/cferdinandi/gumshoe\r\n */\r\n\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define([], factory(root));\r\n } else if (typeof exports === 'object') {\r\n module.exports = factory(root);\r\n } else {\r\n root.gumshoe = factory(root);\r\n }\r\n})(typeof global !== 'undefined' ? global : this.window || this.global, (function (root) {\r\n\r\n 'use strict';\r\n\r\n //\r\n // Variables\r\n //\r\n\r\n var gumshoe = {}; // Object for public APIs\r\n var supports = 'querySelector' in document && 'addEventListener' in root && 'classList' in document.createElement('_'); // Feature test\r\n var navs = []; // Array for nav elements\r\n var settings, eventTimeout, docHeight, header, headerHeight, currentNav, scrollEventDelay;\r\n\r\n // Default settings\r\n var defaults = {\r\n selector: '[data-gumshoe] a',\r\n selectorHeader: '[data-gumshoe-header]',\r\n container: root,\r\n offset: 0,\r\n activeClass: 'active',\r\n scrollDelay: false,\r\n callback: function () { }\r\n };\r\n\r\n\r\n //\r\n // Methods\r\n //\r\n\r\n\t/**\r\n\t * A simple forEach() implementation for Arrays, Objects and NodeLists.\r\n\t * @private\r\n\t * @author Todd Motto\r\n\t * @link https://github.com/toddmotto/foreach\r\n\t * @param {Array|Object|NodeList} collection Collection of items to iterate\r\n\t * @param {Function} callback Callback function for each iteration\r\n\t * @param {Array|Object|NodeList} scope Object/NodeList/Array that forEach is iterating over (aka `this`)\r\n\t */\r\n var forEach = function (collection, callback, scope) {\r\n if (Object.prototype.toString.call(collection) === '[object Object]') {\r\n for (var prop in collection) {\r\n if (Object.prototype.hasOwnProperty.call(collection, prop)) {\r\n callback.call(scope, collection[prop], prop, collection);\r\n }\r\n }\r\n } else {\r\n for (var i = 0, len = collection.length; i < len; i++) {\r\n callback.call(scope, collection[i], i, collection);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Merge two or more objects. Returns a new object.\r\n\t * @private\r\n\t * @param {Boolean} deep If true, do a deep (or recursive) merge [optional]\r\n\t * @param {Object} objects The objects to merge together\r\n\t * @returns {Object} Merged values of defaults and options\r\n\t */\r\n var extend = function () {\r\n\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n var length = arguments.length;\r\n\r\n // Check if a deep merge\r\n if (Object.prototype.toString.call(arguments[0]) === '[object Boolean]') {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function (obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n // If deep merge and property is an object, merge properties\r\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\r\n extended[prop] = extend(true, extended[prop], obj[prop]);\r\n } else {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for (; i < length; i++) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n\r\n return extended;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get the height of an element.\r\n\t * @private\r\n\t * @param {Node} elem The element to get the height of\r\n\t * @return {Number} The element's height in pixels\r\n\t */\r\n var getHeight = function (elem) {\r\n return Math.max(elem.scrollHeight, elem.offsetHeight, elem.clientHeight);\r\n };\r\n\r\n\t/**\r\n\t * Get the document element's height\r\n\t * @private\r\n\t * @returns {Number}\r\n\t */\r\n var getDocumentHeight = function () {\r\n return Math.max(\r\n document.body.scrollHeight, document.documentElement.scrollHeight,\r\n document.body.offsetHeight, document.documentElement.offsetHeight,\r\n document.body.clientHeight, document.documentElement.clientHeight\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Get an element's distance from the top of the Document.\r\n\t * @private\r\n\t * @param {Node} elem The element\r\n\t * @return {Number} Distance from the top in pixels\r\n\t */\r\n var getOffsetTop = function (elem) {\r\n var location = 0;\r\n if (elem.offsetParent) {\r\n do {\r\n location += elem.offsetTop;\r\n elem = elem.offsetParent;\r\n } while (elem);\r\n } else {\r\n location = elem.offsetTop;\r\n }\r\n location = location - headerHeight - settings.offset;\r\n return location >= 0 ? location : 0;\r\n };\r\n\r\n\t/**\r\n\t * Determine if an element is in the viewport\r\n\t * @param {Node} elem The element\r\n\t * @return {Boolean} Returns true if element is in the viewport\r\n\t */\r\n var isInViewport = function (elem) {\r\n var distance = elem.getBoundingClientRect();\r\n return (\r\n distance.top >= 0 &&\r\n distance.left >= 0 &&\r\n distance.bottom <= (root.innerHeight || document.documentElement.clientHeight) &&\r\n distance.right <= (root.innerWidth || document.documentElement.clientWidth)\r\n );\r\n };\r\n\r\n\t/**\r\n\t * Arrange nagivation elements from furthest from the top to closest\r\n\t * @private\r\n\t */\r\n var sortNavs = function () {\r\n navs.sort((function (a, b) {\r\n if (a.distance > b.distance) {\r\n return -1;\r\n }\r\n if (a.distance < b.distance) {\r\n return 1;\r\n }\r\n return 0;\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Calculate the distance of elements from the top of the document\r\n\t * @public\r\n\t */\r\n gumshoe.setDistances = function () {\r\n\r\n // Calculate distances\r\n docHeight = getDocumentHeight(); // The document\r\n headerHeight = header ? (getHeight(header) + getOffsetTop(header)) : 0; // The fixed header\r\n forEach(navs, (function (nav) {\r\n nav.distance = getOffsetTop(nav.target); // Each navigation target\r\n }));\r\n\r\n // When done, organization navigation elements\r\n sortNavs();\r\n\r\n };\r\n\r\n\t/**\r\n\t * Get all navigation elements and store them in an array\r\n\t * @private\r\n\t */\r\n var getNavs = function () {\r\n\r\n // Get all navigation links\r\n var navLinks = document.querySelectorAll(settings.selector);\r\n\r\n // For each link, create an object of attributes and push to an array\r\n forEach(navLinks, (function (nav) {\r\n if (!nav.hash) return;\r\n var target = document.querySelector(nav.hash);\r\n if (!target) return;\r\n navs.push({\r\n nav: nav,\r\n target: target,\r\n parent: nav.parentNode.tagName.toLowerCase() === 'li' ? nav.parentNode : null,\r\n distance: 0\r\n });\r\n }));\r\n\r\n };\r\n\r\n\r\n\t/**\r\n\t * Remove the activation class from the currently active navigation element\r\n\t * @private\r\n\t */\r\n var deactivateCurrentNav = function () {\r\n if (currentNav) {\r\n currentNav.nav.classList.remove(settings.activeClass);\r\n if (currentNav.parent) {\r\n currentNav.parent.classList.remove(settings.activeClass);\r\n }\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Add the activation class to the currently active navigation element\r\n\t * @private\r\n\t * @param {Node} nav The currently active nav\r\n\t */\r\n var activateNav = function (nav) {\r\n\r\n // If a current Nav is set, deactivate it\r\n deactivateCurrentNav();\r\n\r\n // Activate the current target's navigation element\r\n nav.nav.classList.add(settings.activeClass);\r\n if (nav.parent) {\r\n nav.parent.classList.add(settings.activeClass);\r\n }\r\n\r\n settings.callback(nav); // Callback after methods are run\r\n\r\n // Set new currentNav\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n\r\n };\r\n\r\n\t/**\r\n\t * Determine which navigation element is currently active and run activation method\r\n\t * @public\r\n\t * @returns {Object} The current nav data.\r\n\t */\r\n gumshoe.getCurrentNav = function () {\r\n\r\n // Get current position from top of the document\r\n var position = root.pageYOffset;\r\n\r\n // If at the bottom of the page and last section is in the viewport, activate the last nav\r\n if ((root.innerHeight + position) >= docHeight && isInViewport(navs[0].target)) {\r\n activateNav(navs[0]);\r\n return navs[0];\r\n }\r\n\r\n // Otherwise, loop through each nav until you find the active one\r\n for (var i = 0, len = navs.length; i < len; i++) {\r\n var nav = navs[i];\r\n if (nav.distance <= position) {\r\n activateNav(nav);\r\n return nav;\r\n }\r\n }\r\n\r\n // If no active nav is found, deactivate the current nav\r\n deactivateCurrentNav();\r\n settings.callback();\r\n\r\n };\r\n\r\n\t/**\r\n\t * If nav element has active class on load, set it as currently active navigation\r\n\t * @private\r\n\t */\r\n var setInitCurrentNav = function () {\r\n forEach(navs, (function (nav) {\r\n if (nav.nav.classList.contains(settings.activeClass)) {\r\n currentNav = {\r\n nav: nav.nav,\r\n parent: nav.parent\r\n };\r\n }\r\n }));\r\n };\r\n\r\n\t/**\r\n\t * Destroy the current initialization.\r\n\t * @public\r\n\t */\r\n gumshoe.destroy = function () {\r\n\r\n // If plugin isn't already initialized, stop\r\n if (!settings) return;\r\n\r\n // Remove event listeners\r\n settings.container.removeEventListener('resize', eventThrottler, false);\r\n settings.container.removeEventListener('scroll', eventThrottler, false);\r\n\r\n // Reset variables\r\n navs = [];\r\n settings = null;\r\n eventTimeout = null;\r\n docHeight = null;\r\n header = null;\r\n headerHeight = null;\r\n currentNav = null;\r\n scrollEventDelay = null;\r\n\r\n };\r\n\r\n\t/**\r\n\t * Run functions after scrolling stops\r\n\t * @param {[type]} event [description]\r\n\t * @return {[type]} [description]\r\n\t */\r\n var scrollStop = function (event) {\r\n\r\n // Clear our timeout throughout the scroll\r\n window.clearTimeout(eventTimeout);\r\n\r\n // recalculate distances and then get currently active nav\r\n eventTimeout = setTimeout((function () {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }), 66);\r\n\r\n };\r\n\r\n\t/**\r\n\t * On window scroll and resize, only run events at a rate of 15fps for better performance\r\n\t * @private\r\n\t * @param {Function} eventTimeout Timeout function\r\n\t * @param {Object} settings\r\n\t */\r\n var eventThrottler = function (event) {\r\n if (!eventTimeout) {\r\n eventTimeout = setTimeout((function () {\r\n\r\n eventTimeout = null; // Reset timeout\r\n\r\n // If scroll event, get currently active nav\r\n if (event.type === 'scroll') {\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n // If resize event, recalculate distances and then get currently active nav\r\n if (event.type === 'resize') {\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n }\r\n\r\n }), 66);\r\n }\r\n };\r\n\r\n\t/**\r\n\t * Initialize Plugin\r\n\t * @public\r\n\t * @param {Object} options User settings\r\n\t */\r\n gumshoe.init = function (options) {\r\n\r\n // feature test\r\n if (!supports) return;\r\n\r\n // Destroy any existing initializations\r\n gumshoe.destroy();\r\n\r\n // Set variables\r\n settings = extend(defaults, options || {}); // Merge user options with defaults\r\n header = document.querySelector(settings.selectorHeader); // Get fixed header\r\n getNavs(); // Get navigation elements\r\n\r\n // If no navigation elements exist, stop running gumshoe\r\n if (navs.length === 0) return;\r\n\r\n // Run init methods\r\n setInitCurrentNav();\r\n gumshoe.setDistances();\r\n gumshoe.getCurrentNav();\r\n\r\n // Listen for events\r\n settings.container.addEventListener('resize', eventThrottler, false);\r\n if (settings.scrollDelay) {\r\n settings.container.addEventListener('scroll', scrollStop, false);\r\n } else {\r\n settings.container.addEventListener('scroll', eventThrottler, false);\r\n }\r\n\r\n };\r\n\r\n\r\n //\r\n // Public APIs\r\n //\r\n\r\n return gumshoe;\r\n\r\n}));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./Static/javascript/vendor/gumshoe.js\n// module id = 46\n// module chunks = 3"],"sourceRoot":""}