[object Object]

← back to Dw Theme Hamburger

hamburger nav at all widths + spelled-out Designer Wallcoverings wordmark (header.liquid, theme.css.liquid, grid.js forced-mobile gates)

aa68d6b228ae3d499fd4279daa1d5290e451056f · 2026-07-13 09:41:43 -0700 · Steve Abrams

Files touched

Diff

commit aa68d6b228ae3d499fd4279daa1d5290e451056f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Jul 13 09:41:43 2026 -0700

    hamburger nav at all widths + spelled-out Designer Wallcoverings wordmark (header.liquid, theme.css.liquid, grid.js forced-mobile gates)
---
 assets/grid.js          |   4 +-
 assets/theme.css.liquid | 102 ++++++++++++++++++++++++++++++++++++++++++++++++
 sections/header.liquid  |   1 +
 3 files changed, 105 insertions(+), 2 deletions(-)

diff --git a/assets/grid.js b/assets/grid.js
index f07bea7..78577dc 100644
--- a/assets/grid.js
+++ b/assets/grid.js
@@ -607,7 +607,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ StaticHeader)\n/* harmony export */ });\n/* harmony import */ var _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @pixelunion/events */ \"./node_modules/@pixelunion/events/dist/EventHandler.js\");\n/* harmony import */ var _themeUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../themeUtils */ \"./source/scripts/themeUtils.js\");\n/* harmony import */ var _StaticNavigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./StaticNavigation */ \"./source/scripts/sections/StaticNavigation.js\");\n/* harmony import */ var _components_PredictiveSearch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/PredictiveSearch */ \"./source/scripts/components/PredictiveSearch.js\");\n/* harmony import */ var _components_SearchTakeover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/SearchTakeover */ \"./source/scripts/components/SearchTakeover.js\");\n\n\n\n\n\nclass StaticHeader extends _StaticNavigation__WEBPACK_IMPORTED_MODULE_2__.default {\n  constructor(section) {\n    super(section);\n    this.el = section.el;\n    this.headerEvents = new _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__.default();\n    this.mainHeader = this.el.querySelector('[data-header-main]');\n    this.headerContent = this.el.querySelector('[data-header-content]');\n    this.navigationWrapper = this.el.querySelector('[data-navigation-wrapper]');\n    if (!this.navigationWrapper) return;\n\n    if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      this.navigationContent = this.el.querySelector('.navigation-mobile[data-navigation-content]');\n    } else {\n      this.navigationContent = this.el.querySelector('.navigation-desktop[data-navigation-content]');\n    }\n\n    this.branding = this.el.querySelector('[data-header-branding]');\n    this.headerTools = this.el.querySelector('.header-tools');\n    this.headerRight = this.el.querySelector('[data-header-content-right]');\n    this.cachedHeight = 0;\n    this.cachedStickyHeight = 0;\n    this.isCacheStale = true;\n    this.search = this.el.querySelector('[data-header-search-toggle]');\n    this.searchTakeoverEl = this.el.querySelector('[data-search-takeover]');\n    this.searchTakeover = new _components_SearchTakeover__WEBPACK_IMPORTED_MODULE_4__.default(this.searchTakeoverEl);\n    this.headerEvents.register(this.search, 'click', () => this.searchTakeover.open());\n    this.enablePredictiveSearch = section.data.enable_predictive_search;\n    this.headerSearchForms = this.el.querySelectorAll('[data-search-form]');\n\n    if (this.enablePredictiveSearch === 'true') {\n      this.headerSearchForms.forEach(el => new _components_PredictiveSearch__WEBPACK_IMPORTED_MODULE_3__.default({\n        el\n      }));\n    }\n\n    this.isStickyHeader = section.data.stickyHeader;\n    this.isCompactCenter = section.data.compactCenter === 'compact-center';\n    this.navHeight = 0;\n    this.windowWidth = _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth();\n    setTimeout(() => {\n      this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n    }, 100);\n\n    this._setupBranding();\n\n    this._setCompactCenterHeights();\n\n    this._toggleStickyHeader(this._shouldHeaderStick());\n\n    this._bindEvents();\n\n    this.reloadNavigation();\n  }\n\n  onSectionUnload() {\n    super.onSectionUnload();\n    window.removeEventListener('resize', this.resizeHeader);\n    window.removeEventListener('scroll', this.scrollHeader);\n\n    this._toggleStickyHeader(this._shouldHeaderStick());\n  }\n\n  _bindEvents() {\n    this.resizeHeader = () => {\n      // Prevent resize caused by iOS viewport change\n      if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth() === this.windowWidth) {\n        return;\n      }\n\n      this.windowWidth = _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth();\n      this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n      this.isCacheStale = true;\n\n      this._toggleStickyHeader(this._shouldHeaderStick());\n\n      this._setCompactCenterHeights();\n    };\n\n    this.scrollHeader = () => {\n      // Only calculate heights on scroll if sticky header is disabled\n      if (!this.isStickyHeader) {\n        this._setCompactCenterHeights();\n      } // Sticky header calculates heights\n\n\n      this._toggleStickyHeader(this._shouldHeaderStick());\n    };\n\n    window.addEventListener('resize', this.resizeHeader);\n    window.addEventListener('scroll', this.scrollHeader);\n  }\n\n  _shouldHeaderStick() {\n    let shouldStick = false;\n\n    if (!this.isStickyHeader) {\n      return shouldStick;\n    }\n\n    if (this.isCacheStale) {\n      let height = document.body.classList.contains('sticky-header') ? 0 : this.headerContent.getBoundingClientRect().height;\n      let stickyHeight = document.body.classList.contains('sticky-header') ? this.headerContent.getBoundingClientRect().height : 0;\n      document.body.classList.toggle('sticky-header');\n      height = !document.body.classList.contains('sticky-header') ? this.headerContent.getBoundingClientRect().height : height;\n      stickyHeight = !document.body.classList.contains('sticky-header') ? stickyHeight : this.headerContent.getBoundingClientRect().height;\n      document.body.classList.toggle('sticky-header');\n      this.cachedHeight = height;\n      this.cachedStickyHeight = stickyHeight;\n      this.isCacheStale = false;\n    }\n\n    if (window.scrollY > this.headerTools.getBoundingClientRect().height + this.cachedHeight - this.cachedStickyHeight) {\n      shouldStick = true;\n    }\n\n    if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      shouldStick = false;\n    }\n\n    return shouldStick;\n  }\n\n  _toggleStickyHeader(toggleOn) {\n    let paddingBottom;\n\n    if (toggleOn == null) {\n      toggleOn = false;\n    }\n\n    if (toggleOn && !document.body.classList.contains('sticky-header')) {\n      paddingBottom = this.cachedHeight;\n      this.mainHeader.style.paddingBottom = `${paddingBottom}px`;\n    }\n\n    if (!toggleOn) {\n      paddingBottom = 0;\n      this.mainHeader.style.paddingBottom = `${paddingBottom}px`;\n    }\n\n    if (toggleOn !== document.body.classList.contains('sticky-header')) {\n      if (toggleOn) {\n        document.body.classList.add('sticky-header');\n      } else {\n        document.body.classList.remove('sticky-header');\n      }\n\n      this._setCompactCenterHeights(!toggleOn);\n    }\n  }\n  /*\n        Match Navigation and Branding heights\n        Center navigation vertically if Branding is taller\n        */\n\n\n  _setCompactCenterHeights(toggleOn) {\n    if (toggleOn == null) {\n      toggleOn = true;\n    }\n\n    if (!this.isCompactCenter) {\n      return;\n    }\n\n    let minHeight = 'auto'; // Get height of inner navigation to prevent height locking on two row navigation\n\n    const navHeight = this.navigationContent.getBoundingClientRect().height;\n    let navOffset = 'auto';\n\n    if (!_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge() && toggleOn) {\n      const logoImg = this.branding.querySelector('img');\n\n      if (logoImg && !logoImg.complete) {\n        this.headerEvents.register(logoImg, 'load', () => this._setCompactCenterHeights());\n      }\n\n      const heights = [];\n      heights.push(navHeight);\n      heights.push(this.branding.getBoundingClientRect().height);\n      minHeight = Math.max.apply(null, heights);\n    }\n\n    if (navHeight < minHeight) {\n      navOffset = (minHeight - navHeight) / 2;\n    }\n\n    this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n\n    if (this.isStickyHeader && document.body.classList.contains('sticky-header')) {\n      this.headerContent.style.minHeight = 'auto';\n      this.navigationWrapper.style.marginTop = 0;\n    } else {\n      this.headerContent.style.minHeight = `${minHeight}px`;\n      this.navigationWrapper.style.marginTop = `${navOffset}px`;\n    }\n  }\n\n  _setupBranding() {\n    // Clone desktop branding to mobile\n    const mobileBranding = this.branding.cloneNode(true);\n    mobileBranding.removeAttribute('data-header-branding');\n    mobileBranding.classList.remove('header-branding-desktop');\n    mobileBranding.classList.add('header-branding-mobile');\n    this.navigationContent.insertBefore(mobileBranding, this.navigationContent.firstChild);\n  }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNIZWFkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ncmlkLy4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvU3RhdGljSGVhZGVyLmpzPzYxZWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICdAcGl4ZWx1bmlvbi9ldmVudHMnO1xuaW1wb3J0IHRoZW1lVXRpbHMgZnJvbSAnLi4vdGhlbWVVdGlscyc7XG5pbXBvcnQgU3RhdGljTmF2aWdhdGlvbiBmcm9tICcuL1N0YXRpY05hdmlnYXRpb24nO1xuaW1wb3J0IFByZWRpY3RpdmVTZWFyY2ggZnJvbSAnLi4vY29tcG9uZW50cy9QcmVkaWN0aXZlU2VhcmNoJztcbmltcG9ydCBTZWFyY2hUYWtlb3ZlciBmcm9tICcuLi9jb21wb25lbnRzL1NlYXJjaFRha2VvdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljSGVhZGVyIGV4dGVuZHMgU3RhdGljTmF2aWdhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICBzdXBlcihzZWN0aW9uKTtcblxuICAgIHRoaXMuZWwgPSBzZWN0aW9uLmVsO1xuXG4gICAgdGhpcy5oZWFkZXJFdmVudHMgPSBuZXcgRXZlbnRIYW5kbGVyKCk7XG5cbiAgICB0aGlzLm1haW5IZWFkZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1tYWluXScpO1xuICAgIHRoaXMuaGVhZGVyQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaGVhZGVyLWNvbnRlbnRdJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtbmF2aWdhdGlvbi13cmFwcGVyXScpO1xuXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25XcmFwcGVyKSByZXR1cm47XG5cbiAgICBpZiAodGhlbWVVdGlscy5pc0xlc3NUaGFuTGFyZ2UoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tbW9iaWxlW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25Db250ZW50ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcubmF2aWdhdGlvbi1kZXNrdG9wW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmcgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1icmFuZGluZ10nKTtcbiAgICB0aGlzLmhlYWRlclRvb2xzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuaGVhZGVyLXRvb2xzJyk7XG5cbiAgICB0aGlzLmhlYWRlclJpZ2h0ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1oZWFkZXItY29udGVudC1yaWdodF0nKTtcblxuICAgIHRoaXMuY2FjaGVkSGVpZ2h0ID0gMDtcbiAgICB0aGlzLmNhY2hlZFN0aWNreUhlaWdodCA9IDA7XG4gICAgdGhpcy5pc0NhY2hlU3RhbGUgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWFyY2ggPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1zZWFyY2gtdG9nZ2xlXScpO1xuICAgIHRoaXMuc2VhcmNoVGFrZW92ZXJFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtc2VhcmNoLXRha2VvdmVyXScpO1xuICAgIHRoaXMuc2VhcmNoVGFrZW92ZXIgPSBuZXcgU2VhcmNoVGFrZW92ZXIodGhpcy5zZWFyY2hUYWtlb3ZlckVsKTtcbiAgICB0aGlzLmhlYWRlckV2ZW50cy5yZWdpc3Rlcih0aGlzLnNlYXJjaCwgJ2NsaWNrJywgKCkgPT4gdGhpcy5zZWFyY2hUYWtlb3Zlci5vcGVuKCkpO1xuXG4gICAgdGhpcy5lbmFibGVQcmVkaWN0aXZlU2VhcmNoID0gc2VjdGlvbi5kYXRhLmVuYWJsZV9wcmVkaWN0aXZlX3NlYXJjaDtcbiAgICB0aGlzLmhlYWRlclNlYXJjaEZvcm1zID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVByZWRpY3RpdmVTZWFyY2ggPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5oZWFkZXJTZWFyY2hGb3Jtcy5mb3JFYWNoKGVsID0+IG5ldyBQcmVkaWN0aXZlU2VhcmNoKHsgZWwgfSkpO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdGlja3lIZWFkZXIgPSBzZWN0aW9uLmRhdGEuc3RpY2t5SGVhZGVyO1xuICAgIHRoaXMuaXNDb21wYWN0Q2VudGVyID0gc2VjdGlvbi5kYXRhLmNvbXBhY3RDZW50ZXIgPT09ICdjb21wYWN0LWNlbnRlcic7XG4gICAgdGhpcy5uYXZIZWlnaHQgPSAwO1xuICAgIHRoaXMud2luZG93V2lkdGggPSB0aGVtZVV0aWxzLndpbmRvd1dpZHRoKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm5hdkhlaWdodCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH0sXG4gICAgMTAwKTtcbiAgICB0aGlzLl9zZXR1cEJyYW5kaW5nKCk7XG4gICAgdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKTtcbiAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIHRoaXMucmVsb2FkTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHN1cGVyLm9uU2VjdGlvblVubG9hZCgpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhlYWRlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGVhZGVyKTtcbiAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLnJlc2l6ZUhlYWRlciA9ICgpID0+IHtcbiAgICAgIC8vIFByZXZlbnQgcmVzaXplIGNhdXNlZCBieSBpT1Mgdmlld3BvcnQgY2hhbmdlXG4gICAgICBpZiAodGhlbWVVdGlscy53aW5kb3dXaWR0aCgpID09PSB0aGlzLndpbmRvd1dpZHRoKSB7IHJldHVybjsgfVxuICAgICAgdGhpcy53aW5kb3dXaWR0aCA9IHRoZW1lVXRpbHMud2luZG93V2lkdGgoKTtcblxuICAgICAgdGhpcy5uYXZIZWlnaHQgPSB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgdGhpcy5pc0NhY2hlU3RhbGUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gICAgICB0aGlzLl9zZXRDb21wYWN0Q2VudGVySGVpZ2h0cygpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxIZWFkZXIgPSAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSBoZWlnaHRzIG9uIHNjcm9sbCBpZiBzdGlja3kgaGVhZGVyIGlzIGRpc2FibGVkXG4gICAgICBpZiAoIXRoaXMuaXNTdGlja3lIZWFkZXIpIHtcbiAgICAgICAgdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RpY2t5IGhlYWRlciBjYWxjdWxhdGVzIGhlaWdodHNcbiAgICAgIHRoaXMuX3RvZ2dsZVN0aWNreUhlYWRlcih0aGlzLl9zaG91bGRIZWFkZXJTdGljaygpKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhlYWRlcik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGVhZGVyKTtcbiAgfVxuXG4gIF9zaG91bGRIZWFkZXJTdGljaygpIHtcbiAgICBsZXQgc2hvdWxkU3RpY2sgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5pc1N0aWNreUhlYWRlcikge1xuICAgICAgcmV0dXJuIHNob3VsZFN0aWNrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2FjaGVTdGFsZSkge1xuICAgICAgbGV0IGhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGlja3ktaGVhZGVyJykgPyAwIDogdGhpcy5oZWFkZXJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGxldCBzdGlja3lIZWlnaHQgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnc3RpY2t5LWhlYWRlcicpID8gdGhpcy5oZWFkZXJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2t5LWhlYWRlcicpO1xuXG4gICAgICBoZWlnaHQgPSAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSA/IHRoaXMuaGVhZGVyQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiBoZWlnaHQ7XG4gICAgICBzdGlja3lIZWlnaHQgPSAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSA/IHN0aWNreUhlaWdodCA6IHRoaXMuaGVhZGVyQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2t5LWhlYWRlcicpO1xuXG4gICAgICB0aGlzLmNhY2hlZEhlaWdodCA9IGhlaWdodDtcbiAgICAgIHRoaXMuY2FjaGVkU3RpY2t5SGVpZ2h0ID0gc3RpY2t5SGVpZ2h0O1xuICAgICAgdGhpcy5pc0NhY2hlU3RhbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LnNjcm9sbFkgPiAoKHRoaXMuaGVhZGVyVG9vbHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICsgdGhpcy5jYWNoZWRIZWlnaHQpIC0gdGhpcy5jYWNoZWRTdGlja3lIZWlnaHQpKSB7XG4gICAgICBzaG91bGRTdGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgIHNob3VsZFN0aWNrID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFN0aWNrO1xuICB9XG5cbiAgX3RvZ2dsZVN0aWNreUhlYWRlcih0b2dnbGVPbikge1xuICAgIGxldCBwYWRkaW5nQm90dG9tO1xuICAgIGlmICh0b2dnbGVPbiA9PSBudWxsKSB7IHRvZ2dsZU9uID0gZmFsc2U7IH1cbiAgICBpZiAodG9nZ2xlT24gJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGlja3ktaGVhZGVyJykpIHtcbiAgICAgIHBhZGRpbmdCb3R0b20gPSB0aGlzLmNhY2hlZEhlaWdodDtcbiAgICAgIHRoaXMubWFpbkhlYWRlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gYCR7cGFkZGluZ0JvdHRvbX1weGA7XG4gICAgfVxuXG4gICAgaWYgKCF0b2dnbGVPbikge1xuICAgICAgcGFkZGluZ0JvdHRvbSA9IDA7XG4gICAgICB0aGlzLm1haW5IZWFkZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGAke3BhZGRpbmdCb3R0b219cHhgO1xuICAgIH1cblxuICAgIGlmICh0b2dnbGVPbiAhPT0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSkge1xuICAgICAgaWYgKHRvZ2dsZU9uKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc3RpY2t5LWhlYWRlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzdGlja3ktaGVhZGVyJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXRDb21wYWN0Q2VudGVySGVpZ2h0cyghdG9nZ2xlT24pO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAgICAgIE1hdGNoIE5hdmlnYXRpb24gYW5kIEJyYW5kaW5nIGhlaWdodHNcbiAgICAgICAgQ2VudGVyIG5hdmlnYXRpb24gdmVydGljYWxseSBpZiBCcmFuZGluZyBpcyB0YWxsZXJcbiAgICAgICAgKi9cbiAgX3NldENvbXBhY3RDZW50ZXJIZWlnaHRzKHRvZ2dsZU9uKSB7XG4gICAgaWYgKHRvZ2dsZU9uID09IG51bGwpIHsgdG9nZ2xlT24gPSB0cnVlOyB9XG4gICAgaWYgKCF0aGlzLmlzQ29tcGFjdENlbnRlcikgeyByZXR1cm47IH1cblxuICAgIGxldCBtaW5IZWlnaHQgPSAnYXV0byc7XG5cbiAgICAvLyBHZXQgaGVpZ2h0IG9mIGlubmVyIG5hdmlnYXRpb24gdG8gcHJldmVudCBoZWlnaHQgbG9ja2luZyBvbiB0d28gcm93IG5hdmlnYXRpb25cbiAgICBjb25zdCBuYXZIZWlnaHQgPSB0aGlzLm5hdmlnYXRpb25Db250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBsZXQgbmF2T2Zmc2V0ID0gJ2F1dG8nO1xuXG4gICAgaWYgKCF0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpICYmIHRvZ2dsZU9uKSB7XG4gICAgICBjb25zdCBsb2dvSW1nID0gdGhpcy5icmFuZGluZy5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICAgIGlmIChsb2dvSW1nICYmICFsb2dvSW1nLmNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyRXZlbnRzLnJlZ2lzdGVyKGxvZ29JbWcsICdsb2FkJywgKCkgPT4gdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWlnaHRzID0gW107XG4gICAgICBoZWlnaHRzLnB1c2gobmF2SGVpZ2h0KTtcbiAgICAgIGhlaWdodHMucHVzaCh0aGlzLmJyYW5kaW5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG5cbiAgICAgIG1pbkhlaWdodCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGhlaWdodHMpO1xuICAgIH1cblxuICAgIGlmIChuYXZIZWlnaHQgPCBtaW5IZWlnaHQpIHtcbiAgICAgIG5hdk9mZnNldCA9IChtaW5IZWlnaHQgLSBuYXZIZWlnaHQpIC8gMjtcbiAgICB9XG5cbiAgICB0aGlzLm5hdkhlaWdodCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuaXNTdGlja3lIZWFkZXIgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSkge1xuICAgICAgdGhpcy5oZWFkZXJDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuc3R5bGUubWFyZ2luVG9wID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9IGAke21pbkhlaWdodH1weGA7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLnN0eWxlLm1hcmdpblRvcCA9IGAke25hdk9mZnNldH1weGA7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwQnJhbmRpbmcoKSB7XG4gICAgLy8gQ2xvbmUgZGVza3RvcCBicmFuZGluZyB0byBtb2JpbGVcbiAgICBjb25zdCBtb2JpbGVCcmFuZGluZyA9IHRoaXMuYnJhbmRpbmcuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgbW9iaWxlQnJhbmRpbmcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWhlYWRlci1icmFuZGluZycpO1xuICAgIG1vYmlsZUJyYW5kaW5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hlYWRlci1icmFuZGluZy1kZXNrdG9wJyk7XG4gICAgbW9iaWxlQnJhbmRpbmcuY2xhc3NMaXN0LmFkZCgnaGVhZGVyLWJyYW5kaW5nLW1vYmlsZScpO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5pbnNlcnRCZWZvcmUobW9iaWxlQnJhbmRpbmcsIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQuZmlyc3RDaGlsZCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFyTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticHeader.js\n");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ StaticHeader)\n/* harmony export */ });\n/* harmony import */ var _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @pixelunion/events */ \"./node_modules/@pixelunion/events/dist/EventHandler.js\");\n/* harmony import */ var _themeUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../themeUtils */ \"./source/scripts/themeUtils.js\");\n/* harmony import */ var _StaticNavigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./StaticNavigation */ \"./source/scripts/sections/StaticNavigation.js\");\n/* harmony import */ var _components_PredictiveSearch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/PredictiveSearch */ \"./source/scripts/components/PredictiveSearch.js\");\n/* harmony import */ var _components_SearchTakeover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/SearchTakeover */ \"./source/scripts/components/SearchTakeover.js\");\n\n\n\n\n\nclass StaticHeader extends _StaticNavigation__WEBPACK_IMPORTED_MODULE_2__.default {\n  constructor(section) {\n    super(section);\n    this.el = section.el;\n    this.headerEvents = new _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__.default();\n    this.mainHeader = this.el.querySelector('[data-header-main]');\n    this.headerContent = this.el.querySelector('[data-header-content]');\n    this.navigationWrapper = this.el.querySelector('[data-navigation-wrapper]');\n    if (!this.navigationWrapper) return;\n\n    if (true /*DW:nav-forced-mobile*/) {\n      this.navigationContent = this.el.querySelector('.navigation-mobile[data-navigation-content]');\n    } else {\n      this.navigationContent = this.el.querySelector('.navigation-desktop[data-navigation-content]');\n    }\n\n    this.branding = this.el.querySelector('[data-header-branding]');\n    this.headerTools = this.el.querySelector('.header-tools');\n    this.headerRight = this.el.querySelector('[data-header-content-right]');\n    this.cachedHeight = 0;\n    this.cachedStickyHeight = 0;\n    this.isCacheStale = true;\n    this.search = this.el.querySelector('[data-header-search-toggle]');\n    this.searchTakeoverEl = this.el.querySelector('[data-search-takeover]');\n    this.searchTakeover = new _components_SearchTakeover__WEBPACK_IMPORTED_MODULE_4__.default(this.searchTakeoverEl);\n    this.headerEvents.register(this.search, 'click', () => this.searchTakeover.open());\n    this.enablePredictiveSearch = section.data.enable_predictive_search;\n    this.headerSearchForms = this.el.querySelectorAll('[data-search-form]');\n\n    if (this.enablePredictiveSearch === 'true') {\n      this.headerSearchForms.forEach(el => new _components_PredictiveSearch__WEBPACK_IMPORTED_MODULE_3__.default({\n        el\n      }));\n    }\n\n    this.isStickyHeader = section.data.stickyHeader;\n    this.isCompactCenter = section.data.compactCenter === 'compact-center';\n    this.navHeight = 0;\n    this.windowWidth = _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth();\n    setTimeout(() => {\n      this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n    }, 100);\n\n    this._setupBranding();\n\n    this._setCompactCenterHeights();\n\n    this._toggleStickyHeader(this._shouldHeaderStick());\n\n    this._bindEvents();\n\n    this.reloadNavigation();\n  }\n\n  onSectionUnload() {\n    super.onSectionUnload();\n    window.removeEventListener('resize', this.resizeHeader);\n    window.removeEventListener('scroll', this.scrollHeader);\n\n    this._toggleStickyHeader(this._shouldHeaderStick());\n  }\n\n  _bindEvents() {\n    this.resizeHeader = () => {\n      // Prevent resize caused by iOS viewport change\n      if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth() === this.windowWidth) {\n        return;\n      }\n\n      this.windowWidth = _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.windowWidth();\n      this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n      this.isCacheStale = true;\n\n      this._toggleStickyHeader(this._shouldHeaderStick());\n\n      this._setCompactCenterHeights();\n    };\n\n    this.scrollHeader = () => {\n      // Only calculate heights on scroll if sticky header is disabled\n      if (!this.isStickyHeader) {\n        this._setCompactCenterHeights();\n      } // Sticky header calculates heights\n\n\n      this._toggleStickyHeader(this._shouldHeaderStick());\n    };\n\n    window.addEventListener('resize', this.resizeHeader);\n    window.addEventListener('scroll', this.scrollHeader);\n  }\n\n  _shouldHeaderStick() {\n    let shouldStick = false;\n\n    if (!this.isStickyHeader) {\n      return shouldStick;\n    }\n\n    if (this.isCacheStale) {\n      let height = document.body.classList.contains('sticky-header') ? 0 : this.headerContent.getBoundingClientRect().height;\n      let stickyHeight = document.body.classList.contains('sticky-header') ? this.headerContent.getBoundingClientRect().height : 0;\n      document.body.classList.toggle('sticky-header');\n      height = !document.body.classList.contains('sticky-header') ? this.headerContent.getBoundingClientRect().height : height;\n      stickyHeight = !document.body.classList.contains('sticky-header') ? stickyHeight : this.headerContent.getBoundingClientRect().height;\n      document.body.classList.toggle('sticky-header');\n      this.cachedHeight = height;\n      this.cachedStickyHeight = stickyHeight;\n      this.isCacheStale = false;\n    }\n\n    if (window.scrollY > this.headerTools.getBoundingClientRect().height + this.cachedHeight - this.cachedStickyHeight) {\n      shouldStick = true;\n    }\n\n    if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      shouldStick = false;\n    }\n\n    return shouldStick;\n  }\n\n  _toggleStickyHeader(toggleOn) {\n    let paddingBottom;\n\n    if (toggleOn == null) {\n      toggleOn = false;\n    }\n\n    if (toggleOn && !document.body.classList.contains('sticky-header')) {\n      paddingBottom = this.cachedHeight;\n      this.mainHeader.style.paddingBottom = `${paddingBottom}px`;\n    }\n\n    if (!toggleOn) {\n      paddingBottom = 0;\n      this.mainHeader.style.paddingBottom = `${paddingBottom}px`;\n    }\n\n    if (toggleOn !== document.body.classList.contains('sticky-header')) {\n      if (toggleOn) {\n        document.body.classList.add('sticky-header');\n      } else {\n        document.body.classList.remove('sticky-header');\n      }\n\n      this._setCompactCenterHeights(!toggleOn);\n    }\n  }\n  /*\n        Match Navigation and Branding heights\n        Center navigation vertically if Branding is taller\n        */\n\n\n  _setCompactCenterHeights(toggleOn) {\n    if (toggleOn == null) {\n      toggleOn = true;\n    }\n\n    if (!this.isCompactCenter) {\n      return;\n    }\n\n    let minHeight = 'auto'; // Get height of inner navigation to prevent height locking on two row navigation\n\n    const navHeight = this.navigationContent.getBoundingClientRect().height;\n    let navOffset = 'auto';\n\n    if (!_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge() && toggleOn) {\n      const logoImg = this.branding.querySelector('img');\n\n      if (logoImg && !logoImg.complete) {\n        this.headerEvents.register(logoImg, 'load', () => this._setCompactCenterHeights());\n      }\n\n      const heights = [];\n      heights.push(navHeight);\n      heights.push(this.branding.getBoundingClientRect().height);\n      minHeight = Math.max.apply(null, heights);\n    }\n\n    if (navHeight < minHeight) {\n      navOffset = (minHeight - navHeight) / 2;\n    }\n\n    this.navHeight = this.navigationWrapper.getBoundingClientRect().height;\n\n    if (this.isStickyHeader && document.body.classList.contains('sticky-header')) {\n      this.headerContent.style.minHeight = 'auto';\n      this.navigationWrapper.style.marginTop = 0;\n    } else {\n      this.headerContent.style.minHeight = `${minHeight}px`;\n      this.navigationWrapper.style.marginTop = `${navOffset}px`;\n    }\n  }\n\n  _setupBranding() {\n    // Clone desktop branding to mobile\n    const mobileBranding = this.branding.cloneNode(true);\n    mobileBranding.removeAttribute('data-header-branding');\n    mobileBranding.classList.remove('header-branding-desktop');\n    mobileBranding.classList.add('header-branding-mobile');\n    this.navigationContent.insertBefore(mobileBranding, this.navigationContent.firstChild);\n  }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNIZWFkZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ncmlkLy4vc291cmNlL3NjcmlwdHMvc2VjdGlvbnMvU3RhdGljSGVhZGVyLmpzPzYxZWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICdAcGl4ZWx1bmlvbi9ldmVudHMnO1xuaW1wb3J0IHRoZW1lVXRpbHMgZnJvbSAnLi4vdGhlbWVVdGlscyc7XG5pbXBvcnQgU3RhdGljTmF2aWdhdGlvbiBmcm9tICcuL1N0YXRpY05hdmlnYXRpb24nO1xuaW1wb3J0IFByZWRpY3RpdmVTZWFyY2ggZnJvbSAnLi4vY29tcG9uZW50cy9QcmVkaWN0aXZlU2VhcmNoJztcbmltcG9ydCBTZWFyY2hUYWtlb3ZlciBmcm9tICcuLi9jb21wb25lbnRzL1NlYXJjaFRha2VvdmVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljSGVhZGVyIGV4dGVuZHMgU3RhdGljTmF2aWdhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICBzdXBlcihzZWN0aW9uKTtcblxuICAgIHRoaXMuZWwgPSBzZWN0aW9uLmVsO1xuXG4gICAgdGhpcy5oZWFkZXJFdmVudHMgPSBuZXcgRXZlbnRIYW5kbGVyKCk7XG5cbiAgICB0aGlzLm1haW5IZWFkZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1tYWluXScpO1xuICAgIHRoaXMuaGVhZGVyQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtaGVhZGVyLWNvbnRlbnRdJyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlciA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtbmF2aWdhdGlvbi13cmFwcGVyXScpO1xuXG4gICAgaWYgKCF0aGlzLm5hdmlnYXRpb25XcmFwcGVyKSByZXR1cm47XG5cbiAgICBpZiAodGhlbWVVdGlscy5pc0xlc3NUaGFuTGFyZ2UoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tbW9iaWxlW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25Db250ZW50ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcubmF2aWdhdGlvbi1kZXNrdG9wW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuICAgIH1cblxuICAgIHRoaXMuYnJhbmRpbmcgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1icmFuZGluZ10nKTtcbiAgICB0aGlzLmhlYWRlclRvb2xzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCcuaGVhZGVyLXRvb2xzJyk7XG5cbiAgICB0aGlzLmhlYWRlclJpZ2h0ID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1oZWFkZXItY29udGVudC1yaWdodF0nKTtcblxuICAgIHRoaXMuY2FjaGVkSGVpZ2h0ID0gMDtcbiAgICB0aGlzLmNhY2hlZFN0aWNreUhlaWdodCA9IDA7XG4gICAgdGhpcy5pc0NhY2hlU3RhbGUgPSB0cnVlO1xuXG4gICAgdGhpcy5zZWFyY2ggPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWhlYWRlci1zZWFyY2gtdG9nZ2xlXScpO1xuICAgIHRoaXMuc2VhcmNoVGFrZW92ZXJFbCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignW2RhdGEtc2VhcmNoLXRha2VvdmVyXScpO1xuICAgIHRoaXMuc2VhcmNoVGFrZW92ZXIgPSBuZXcgU2VhcmNoVGFrZW92ZXIodGhpcy5zZWFyY2hUYWtlb3ZlckVsKTtcbiAgICB0aGlzLmhlYWRlckV2ZW50cy5yZWdpc3Rlcih0aGlzLnNlYXJjaCwgJ2NsaWNrJywgKCkgPT4gdGhpcy5zZWFyY2hUYWtlb3Zlci5vcGVuKCkpO1xuXG4gICAgdGhpcy5lbmFibGVQcmVkaWN0aXZlU2VhcmNoID0gc2VjdGlvbi5kYXRhLmVuYWJsZV9wcmVkaWN0aXZlX3NlYXJjaDtcbiAgICB0aGlzLmhlYWRlclNlYXJjaEZvcm1zID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zZWFyY2gtZm9ybV0nKTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVByZWRpY3RpdmVTZWFyY2ggPT09ICd0cnVlJykge1xuICAgICAgdGhpcy5oZWFkZXJTZWFyY2hGb3Jtcy5mb3JFYWNoKGVsID0+IG5ldyBQcmVkaWN0aXZlU2VhcmNoKHsgZWwgfSkpO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdGlja3lIZWFkZXIgPSBzZWN0aW9uLmRhdGEuc3RpY2t5SGVhZGVyO1xuICAgIHRoaXMuaXNDb21wYWN0Q2VudGVyID0gc2VjdGlvbi5kYXRhLmNvbXBhY3RDZW50ZXIgPT09ICdjb21wYWN0LWNlbnRlcic7XG4gICAgdGhpcy5uYXZIZWlnaHQgPSAwO1xuICAgIHRoaXMud2luZG93V2lkdGggPSB0aGVtZVV0aWxzLndpbmRvd1dpZHRoKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm5hdkhlaWdodCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH0sXG4gICAgMTAwKTtcbiAgICB0aGlzLl9zZXR1cEJyYW5kaW5nKCk7XG4gICAgdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKTtcbiAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gICAgdGhpcy5fYmluZEV2ZW50cygpO1xuICAgIHRoaXMucmVsb2FkTmF2aWdhdGlvbigpO1xuICB9XG5cbiAgb25TZWN0aW9uVW5sb2FkKCkge1xuICAgIHN1cGVyLm9uU2VjdGlvblVubG9hZCgpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhlYWRlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGVhZGVyKTtcbiAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gIH1cblxuICBfYmluZEV2ZW50cygpIHtcbiAgICB0aGlzLnJlc2l6ZUhlYWRlciA9ICgpID0+IHtcbiAgICAgIC8vIFByZXZlbnQgcmVzaXplIGNhdXNlZCBieSBpT1Mgdmlld3BvcnQgY2hhbmdlXG4gICAgICBpZiAodGhlbWVVdGlscy53aW5kb3dXaWR0aCgpID09PSB0aGlzLndpbmRvd1dpZHRoKSB7IHJldHVybjsgfVxuICAgICAgdGhpcy53aW5kb3dXaWR0aCA9IHRoZW1lVXRpbHMud2luZG93V2lkdGgoKTtcblxuICAgICAgdGhpcy5uYXZIZWlnaHQgPSB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgdGhpcy5pc0NhY2hlU3RhbGUgPSB0cnVlO1xuXG4gICAgICB0aGlzLl90b2dnbGVTdGlja3lIZWFkZXIodGhpcy5fc2hvdWxkSGVhZGVyU3RpY2soKSk7XG4gICAgICB0aGlzLl9zZXRDb21wYWN0Q2VudGVySGVpZ2h0cygpO1xuICAgIH07XG4gICAgdGhpcy5zY3JvbGxIZWFkZXIgPSAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGNhbGN1bGF0ZSBoZWlnaHRzIG9uIHNjcm9sbCBpZiBzdGlja3kgaGVhZGVyIGlzIGRpc2FibGVkXG4gICAgICBpZiAoIXRoaXMuaXNTdGlja3lIZWFkZXIpIHtcbiAgICAgICAgdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RpY2t5IGhlYWRlciBjYWxjdWxhdGVzIGhlaWdodHNcbiAgICAgIHRoaXMuX3RvZ2dsZVN0aWNreUhlYWRlcih0aGlzLl9zaG91bGRIZWFkZXJTdGljaygpKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUhlYWRlcik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc2Nyb2xsSGVhZGVyKTtcbiAgfVxuXG4gIF9zaG91bGRIZWFkZXJTdGljaygpIHtcbiAgICBsZXQgc2hvdWxkU3RpY2sgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5pc1N0aWNreUhlYWRlcikge1xuICAgICAgcmV0dXJuIHNob3VsZFN0aWNrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQ2FjaGVTdGFsZSkge1xuICAgICAgbGV0IGhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGlja3ktaGVhZGVyJykgPyAwIDogdGhpcy5oZWFkZXJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgIGxldCBzdGlja3lIZWlnaHQgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnc3RpY2t5LWhlYWRlcicpID8gdGhpcy5oZWFkZXJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCA6IDA7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2t5LWhlYWRlcicpO1xuXG4gICAgICBoZWlnaHQgPSAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSA/IHRoaXMuaGVhZGVyQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgOiBoZWlnaHQ7XG4gICAgICBzdGlja3lIZWlnaHQgPSAhZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSA/IHN0aWNreUhlaWdodCA6IHRoaXMuaGVhZGVyQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc3RpY2t5LWhlYWRlcicpO1xuXG4gICAgICB0aGlzLmNhY2hlZEhlaWdodCA9IGhlaWdodDtcbiAgICAgIHRoaXMuY2FjaGVkU3RpY2t5SGVpZ2h0ID0gc3RpY2t5SGVpZ2h0O1xuICAgICAgdGhpcy5pc0NhY2hlU3RhbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAod2luZG93LnNjcm9sbFkgPiAoKHRoaXMuaGVhZGVyVG9vbHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICsgdGhpcy5jYWNoZWRIZWlnaHQpIC0gdGhpcy5jYWNoZWRTdGlja3lIZWlnaHQpKSB7XG4gICAgICBzaG91bGRTdGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgIHNob3VsZFN0aWNrID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFN0aWNrO1xuICB9XG5cbiAgX3RvZ2dsZVN0aWNreUhlYWRlcih0b2dnbGVPbikge1xuICAgIGxldCBwYWRkaW5nQm90dG9tO1xuICAgIGlmICh0b2dnbGVPbiA9PSBudWxsKSB7IHRvZ2dsZU9uID0gZmFsc2U7IH1cbiAgICBpZiAodG9nZ2xlT24gJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdGlja3ktaGVhZGVyJykpIHtcbiAgICAgIHBhZGRpbmdCb3R0b20gPSB0aGlzLmNhY2hlZEhlaWdodDtcbiAgICAgIHRoaXMubWFpbkhlYWRlci5zdHlsZS5wYWRkaW5nQm90dG9tID0gYCR7cGFkZGluZ0JvdHRvbX1weGA7XG4gICAgfVxuXG4gICAgaWYgKCF0b2dnbGVPbikge1xuICAgICAgcGFkZGluZ0JvdHRvbSA9IDA7XG4gICAgICB0aGlzLm1haW5IZWFkZXIuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGAke3BhZGRpbmdCb3R0b219cHhgO1xuICAgIH1cblxuICAgIGlmICh0b2dnbGVPbiAhPT0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSkge1xuICAgICAgaWYgKHRvZ2dsZU9uKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnc3RpY2t5LWhlYWRlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdzdGlja3ktaGVhZGVyJyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXRDb21wYWN0Q2VudGVySGVpZ2h0cyghdG9nZ2xlT24pO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAgICAgIE1hdGNoIE5hdmlnYXRpb24gYW5kIEJyYW5kaW5nIGhlaWdodHNcbiAgICAgICAgQ2VudGVyIG5hdmlnYXRpb24gdmVydGljYWxseSBpZiBCcmFuZGluZyBpcyB0YWxsZXJcbiAgICAgICAgKi9cbiAgX3NldENvbXBhY3RDZW50ZXJIZWlnaHRzKHRvZ2dsZU9uKSB7XG4gICAgaWYgKHRvZ2dsZU9uID09IG51bGwpIHsgdG9nZ2xlT24gPSB0cnVlOyB9XG4gICAgaWYgKCF0aGlzLmlzQ29tcGFjdENlbnRlcikgeyByZXR1cm47IH1cblxuICAgIGxldCBtaW5IZWlnaHQgPSAnYXV0byc7XG5cbiAgICAvLyBHZXQgaGVpZ2h0IG9mIGlubmVyIG5hdmlnYXRpb24gdG8gcHJldmVudCBoZWlnaHQgbG9ja2luZyBvbiB0d28gcm93IG5hdmlnYXRpb25cbiAgICBjb25zdCBuYXZIZWlnaHQgPSB0aGlzLm5hdmlnYXRpb25Db250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICBsZXQgbmF2T2Zmc2V0ID0gJ2F1dG8nO1xuXG4gICAgaWYgKCF0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpICYmIHRvZ2dsZU9uKSB7XG4gICAgICBjb25zdCBsb2dvSW1nID0gdGhpcy5icmFuZGluZy5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICAgIGlmIChsb2dvSW1nICYmICFsb2dvSW1nLmNvbXBsZXRlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyRXZlbnRzLnJlZ2lzdGVyKGxvZ29JbWcsICdsb2FkJywgKCkgPT4gdGhpcy5fc2V0Q29tcGFjdENlbnRlckhlaWdodHMoKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBoZWlnaHRzID0gW107XG4gICAgICBoZWlnaHRzLnB1c2gobmF2SGVpZ2h0KTtcbiAgICAgIGhlaWdodHMucHVzaCh0aGlzLmJyYW5kaW5nLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG5cbiAgICAgIG1pbkhlaWdodCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGhlaWdodHMpO1xuICAgIH1cblxuICAgIGlmIChuYXZIZWlnaHQgPCBtaW5IZWlnaHQpIHtcbiAgICAgIG5hdk9mZnNldCA9IChtaW5IZWlnaHQgLSBuYXZIZWlnaHQpIC8gMjtcbiAgICB9XG5cbiAgICB0aGlzLm5hdkhlaWdodCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgaWYgKHRoaXMuaXNTdGlja3lIZWFkZXIgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ3N0aWNreS1oZWFkZXInKSkge1xuICAgICAgdGhpcy5oZWFkZXJDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuc3R5bGUubWFyZ2luVG9wID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJDb250ZW50LnN0eWxlLm1pbkhlaWdodCA9IGAke21pbkhlaWdodH1weGA7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLnN0eWxlLm1hcmdpblRvcCA9IGAke25hdk9mZnNldH1weGA7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwQnJhbmRpbmcoKSB7XG4gICAgLy8gQ2xvbmUgZGVza3RvcCBicmFuZGluZyB0byBtb2JpbGVcbiAgICBjb25zdCBtb2JpbGVCcmFuZGluZyA9IHRoaXMuYnJhbmRpbmcuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgbW9iaWxlQnJhbmRpbmcucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWhlYWRlci1icmFuZGluZycpO1xuICAgIG1vYmlsZUJyYW5kaW5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hlYWRlci1icmFuZGluZy1kZXNrdG9wJyk7XG4gICAgbW9iaWxlQnJhbmRpbmcuY2xhc3NMaXN0LmFkZCgnaGVhZGVyLWJyYW5kaW5nLW1vYmlsZScpO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5pbnNlcnRCZWZvcmUobW9iaWxlQnJhbmRpbmcsIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQuZmlyc3RDaGlsZCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFyTUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticHeader.js\n");
 
 /***/ }),
 
@@ -618,7 +618,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
 
 "use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ StaticNavigation)\n/* harmony export */ });\n/* harmony import */ var _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @pixelunion/events */ \"./node_modules/@pixelunion/events/dist/EventHandler.js\");\n/* harmony import */ var _themeUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../themeUtils */ \"./source/scripts/themeUtils.js\");\n\n\nclass StaticNavigation {\n  constructor(section) {\n    this.el = section.el;\n    this.events = new _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__.default();\n    this.navigationWrapper = this.el.querySelector('[data-navigation-wrapper]');\n    if (!this.navigationWrapper) return;\n    this.navigationWrapper.classList.add('navigation--loading');\n    this.reloadNavigation();\n    this.navigationWrapper.classList.remove('navigation--loading');\n    this.navigationWrapper.classList.add('navigation--loaded');\n  }\n\n  reloadNavigation() {\n    this.events.unregisterAll();\n\n    if (!_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      this.navigationContent = this.el.querySelector('.navigation-desktop[data-navigation-content]');\n      const headerBranding = document.querySelector('[data-header-branding]');\n      headerBranding.parentNode.insertBefore(this.navigationWrapper, headerBranding.nextSibling);\n      const megaNavs = this.navigationContent.querySelectorAll('li[data-mega-nav=\"true\"]');\n      megaNavs.forEach(el => {\n        el.classList.remove('has-dropdown');\n        el.classList.add('has-mega-nav');\n      });\n    } else {\n      this.navigationContent = this.el.querySelector('.navigation-mobile[data-navigation-content]');\n      const headerMain = document.querySelector('[data-header-main]');\n      headerMain.parentNode.insertBefore(this.navigationWrapper, headerMain.nextSibling);\n      const megaNavs = this.navigationContent.querySelectorAll('li[data-mega-nav=\"true\"]');\n      megaNavs.forEach(el => {\n        el.classList.add('has-dropdown');\n        el.classList.remove('has-mega-nav');\n      });\n    }\n\n    this.el.querySelectorAll('.mega-nav-list li a, .mega-nav-list li summary').forEach(anchor => this.events.register(anchor, 'mouseover', this._onMegaNavAnchorMouseover.bind(this)));\n    this.el.querySelectorAll('.mega-nav-list a, .mega-nav-list summary').forEach(anchor => this.events.register(anchor, 'mouseleave', this._onMegaNavAnchorMouseleave.bind(this)));\n    this.el.querySelectorAll('[data-header-nav-toggle]').forEach(toggle => this.events.register(toggle, 'click', this._onMobileNavigationClick.bind(this)));\n    this.events.register(window, 'resize', _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.debounce(this._onResize.bind(this), 500));\n    const currentCloseAction = {\n      el: null,\n      timeout: null\n    };\n    this.el.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(toggle => this.events.register(toggle, 'mouseenter', event => {\n      if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) return;\n      const {\n        currentTarget\n      } = event;\n\n      if (currentCloseAction.el && currentCloseAction.timeout) {\n        clearTimeout(currentCloseAction.timeout);\n\n        this._closeDropdown(currentCloseAction.el);\n\n        currentCloseAction.el = null;\n        currentCloseAction.timeout = null;\n      }\n\n      if (currentTarget.classList.contains('has-mega-nav')) {\n        this._swapMegaNavImages(currentTarget.querySelector('.mega-nav-image img'));\n      }\n\n      this._openDropdown(currentTarget);\n    }));\n    this.el.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(toggle => this.events.register(toggle, 'mouseleave', event => {\n      if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) return;\n      const {\n        currentTarget\n      } = event;\n\n      if (currentCloseAction.el && currentCloseAction.timeout) {\n        // Don't add another action for an element that is nested within a currently closing dropdown\n        if (currentCloseAction.el.contains(currentTarget)) return;\n        clearTimeout(currentCloseAction.timeout); // Close the current dropdown if one exists and hasn't been run, but only if it isn't a child of this new event\n\n        if (!currentTarget.contains(currentCloseAction.el)) {\n          this._closeDropdown(currentCloseAction.el);\n        }\n      }\n\n      currentCloseAction.el = currentTarget;\n      currentCloseAction.timeout = setTimeout(() => {\n        this._closeDropdown(currentCloseAction.el);\n\n        currentCloseAction.el = null;\n        currentCloseAction.timeout = null;\n      }, 400);\n    }));\n    this.detailsElements = this.el.querySelectorAll('[data-nav-details]');\n    this.firstLevelDetails = [...this.el.querySelectorAll('.navigation-menu > .has-dropdown > [data-nav-details]')];\n\n    this.click = e => {\n      e.stopPropagation();\n      const clickedParent = e.target.closest('.navigation-menu-link');\n      const clickedDetailsEl = e.target.closest('[data-nav-details]'); // Close siblings\n\n      if (this.firstLevelDetails.includes(clickedDetailsEl)) {\n        this.firstLevelDetails.forEach(detailsElement => {\n          const details = detailsElement;\n\n          if (details !== clickedDetailsEl) {\n            details.open = false;\n          }\n        });\n      } // If the link being clicked is a parent link, then take control of the navigation\n\n\n      if (clickedParent && clickedParent.dataset.href) {\n        e.preventDefault(); // if already open, continue to link destination\n\n        if (clickedDetailsEl.open) {\n          window.location = clickedParent.dataset.href;\n          return;\n        } // If the submenu isn't open, open it\n\n\n        clickedDetailsEl.open = true;\n      }\n    };\n\n    if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLarge()) {\n      // Adding click event for details elements on desktop\n      this.detailsElements.forEach(detailsElement => this.events.register(detailsElement, 'click', event => this.click(event)));\n      this.detailsElements.forEach(detailsElement => this.events.register(detailsElement, 'touchend', e => this.click(e)));\n    }\n\n    this.el.querySelectorAll('.has-dropdown > a > [data-subnav-toggle]').forEach(toggle => this.events.register(toggle, 'click', event => {\n      event.stopPropagation();\n      event.preventDefault();\n      const {\n        currentTarget\n      } = event;\n      const triggerEl = currentTarget.parentElement.parentElement;\n\n      if (triggerEl.classList.contains('has-dropdown--active')) {\n        this._closeDropdown(triggerEl);\n      } else {\n        this._openDropdown(triggerEl);\n      }\n    }));\n    this.el.querySelectorAll('.navigation-submenu').forEach(toggle => this.events.register(toggle, 'revealer-animating', event => {\n      if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n        return;\n      }\n\n      const {\n        currentTarget: dropdown\n      } = event;\n\n      if (!dropdown.classList.contains('animating-in')) {\n        return;\n      }\n\n      dropdown.classList.remove('navigation-submenu-open-left');\n      dropdown.style.opacity = 0;\n      dropdown.style.display = 'block';\n      const navigationWidth = this.navigationWrapper.getBoundingClientRect().width;\n      const offset = dropdown.getBoundingClientRect().left + window.pageXOffset;\n\n      if (offset + 200 > navigationWidth) {\n        dropdown.classList.add('navigation-submenu-open-left');\n      }\n\n      dropdown.style.opacity = '';\n      dropdown.style.display = '';\n    }));\n  }\n\n  onSectionDeselect() {\n    this._toggleMobileNavigation('close');\n  }\n\n  onSectionUnload() {\n    this.events.unregisterAll();\n\n    this._toggleMobileNavigation('close');\n  }\n\n  _onResize() {\n    if (!_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      this._toggleMobileNavigation('close');\n    }\n\n    this.reloadNavigation();\n  }\n\n  _onMegaNavAnchorMouseover(e) {\n    this._swapMegaNavImages(e.currentTarget.parentNode);\n  }\n\n  _onMegaNavAnchorMouseleave(e) {\n    const megaNavImage = e.target.closest('.mega-nav').querySelector('.mega-nav-image img');\n    if (!megaNavImage) return;\n    megaNavImage.setAttribute('src', megaNavImage.dataset.image);\n    megaNavImage.setAttribute('alt', megaNavImage.dataset.alt);\n  }\n\n  _onMobileNavigationClick() {\n    this._toggleMobileNavigation();\n  }\n\n  _openDropdown(triggerEl) {\n    triggerEl.classList.add('has-dropdown--active');\n    const navigationSubmenuToggle = triggerEl.querySelector('.navigation-submenu-toggle');\n\n    if (_themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLessThanLarge()) {\n      const dropdown = triggerEl.querySelector('.navigation-submenu');\n      triggerEl.classList.add('has-mobile-dropdown--active');\n      dropdown.classList.add('navigation-submenu-visible');\n\n      this._setTierHeight();\n    } else {\n      const megaNav = triggerEl.querySelector('.mega-nav');\n      const dropdown = triggerEl.querySelector('.navigation-submenu');\n\n      if (megaNav) {\n        megaNav.classList.add('visible');\n      } else {\n        dropdown.classList.add('navigation-submenu-visible');\n        dropdown.classList.add('visible');\n      }\n    }\n\n    navigationSubmenuToggle.setAttribute('aria-expanded', true);\n    this.details = triggerEl.querySelector('[data-nav-details]');\n\n    if (this.details && _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLarge()) {\n      this.details.open = true;\n    }\n  }\n\n  _closeDropdown(triggerEl) {\n    triggerEl.classList.remove('has-dropdown--active');\n    triggerEl.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(innerTriggerEl => this._closeDropdown(innerTriggerEl));\n    const dropdown = triggerEl.querySelector('.navigation-submenu');\n    const megaNav = triggerEl.querySelector('.mega-nav');\n    const navigationSubmenuToggle = triggerEl.querySelector('.navigation-submenu-toggle');\n\n    if (dropdown) {\n      dropdown.classList.remove('navigation-submenu-visible');\n      dropdown.classList.remove('visible');\n    }\n\n    triggerEl.classList.remove('has-mobile-dropdown--active');\n\n    if (megaNav) {\n      megaNav.classList.remove('visible');\n    }\n\n    this._setTierHeight();\n\n    if (navigationSubmenuToggle) {\n      navigationSubmenuToggle.setAttribute('aria-expanded', false);\n    }\n\n    this.details = triggerEl.querySelector('[data-nav-details]');\n\n    if (this.details && _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.isLarge()) {\n      this.details.open = false;\n    }\n  }\n\n  _toggleMobileNavigation(force = null) {\n    if (document.body.classList.contains('mobile-nav-open') && force !== 'open') {\n      this.navigationContent.removeAttribute('style');\n      document.body.classList.remove('mobile-nav-open');\n      document.body.classList.remove('lock-scroll');\n      this.navigationContent.classList.remove('visible');\n      this.navigationWrapper.classList.remove('visible');\n      this.navigationWrapper.classList.remove('background'); // Close opened menus on navigation close\n\n      this.navigationContent.querySelectorAll('.has-dropdown--active').forEach(triggerEl => this._closeDropdown(triggerEl));\n    } else if (!document.body.classList.contains('mobile-nav-open') && force !== 'close') {\n      document.body.classList.add('mobile-nav-open');\n      document.body.classList.add('lock-scroll');\n      this.navigationWrapper.classList.add('visible');\n      this.navigationWrapper.classList.add('background');\n      this.navigationContent.classList.add('visible');\n\n      this._setTierHeight();\n    }\n  }\n\n  _setTierHeight() {\n    this.navigationContent.style.overflowY = scroll;\n    this.navigationContent.style.height = '100%';\n  }\n\n  _swapMegaNavImages(target) {\n    if (!target) return;\n    const {\n      image,\n      imageAlt\n    } = target.dataset;\n\n    if (image && image !== '') {\n      const megaNavImg = target.closest('.mega-nav').querySelector('.mega-nav-image img');\n      if (!megaNavImg) return;\n      megaNavImg.setAttribute('src', image);\n      megaNavImg.setAttribute('srcset', '');\n      megaNavImg.setAttribute('alt', imageAlt);\n    }\n  }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNOYXZpZ2F0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3JpZC8uL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY05hdmlnYXRpb24uanM/Yjk0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJ0BwaXhlbHVuaW9uL2V2ZW50cyc7XG5pbXBvcnQgdGhlbWVVdGlscyBmcm9tICcuLi90aGVtZVV0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljTmF2aWdhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLmVsID0gc2VjdGlvbi5lbDtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXIoKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hdmlnYXRpb24td3JhcHBlcl0nKTtcblxuICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uV3JhcHBlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCduYXZpZ2F0aW9uLS1sb2FkaW5nJyk7XG5cbiAgICB0aGlzLnJlbG9hZE5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi0tbG9hZGluZycpO1xuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi0tbG9hZGVkJyk7XG4gIH1cblxuICByZWxvYWROYXZpZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnRzLnVucmVnaXN0ZXJBbGwoKTtcblxuICAgIGlmICghdGhlbWVVdGlscy5pc0xlc3NUaGFuTGFyZ2UoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tZGVza3RvcFtkYXRhLW5hdmlnYXRpb24tY29udGVudF0nKTtcblxuICAgICAgY29uc3QgaGVhZGVyQnJhbmRpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1oZWFkZXItYnJhbmRpbmddJyk7XG5cbiAgICAgIGhlYWRlckJyYW5kaW5nLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubmF2aWdhdGlvbldyYXBwZXIsIGhlYWRlckJyYW5kaW5nLm5leHRTaWJsaW5nKTtcblxuICAgICAgY29uc3QgbWVnYU5hdnMgPSB0aGlzLm5hdmlnYXRpb25Db250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpW2RhdGEtbWVnYS1uYXY9XCJ0cnVlXCJdJyk7XG5cbiAgICAgIG1lZ2FOYXZzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtZHJvcGRvd24nKTtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaGFzLW1lZ2EtbmF2Jyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tbW9iaWxlW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuXG4gICAgICBjb25zdCBoZWFkZXJNYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaGVhZGVyLW1haW5dJyk7XG5cbiAgICAgIGhlYWRlck1haW4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5uYXZpZ2F0aW9uV3JhcHBlciwgaGVhZGVyTWFpbi5uZXh0U2libGluZyk7XG5cbiAgICAgIGNvbnN0IG1lZ2FOYXZzID0gdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaVtkYXRhLW1lZ2EtbmF2PVwidHJ1ZVwiXScpO1xuXG4gICAgICBtZWdhTmF2cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaGFzLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1tZWdhLW5hdicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubWVnYS1uYXYtbGlzdCBsaSBhLCAubWVnYS1uYXYtbGlzdCBsaSBzdW1tYXJ5JykuZm9yRWFjaChhbmNob3IgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIoYW5jaG9yLCAnbW91c2VvdmVyJywgdGhpcy5fb25NZWdhTmF2QW5jaG9yTW91c2VvdmVyLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZWdhLW5hdi1saXN0IGEsIC5tZWdhLW5hdi1saXN0IHN1bW1hcnknKS5mb3JFYWNoKGFuY2hvciA9PiB0aGlzLmV2ZW50cy5yZWdpc3RlcihhbmNob3IsICdtb3VzZWxlYXZlJywgdGhpcy5fb25NZWdhTmF2QW5jaG9yTW91c2VsZWF2ZS5iaW5kKHRoaXMpKSk7XG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1oZWFkZXItbmF2LXRvZ2dsZV0nKS5mb3JFYWNoKHRvZ2dsZSA9PiB0aGlzLmV2ZW50cy5yZWdpc3Rlcih0b2dnbGUsICdjbGljaycsIHRoaXMuX29uTW9iaWxlTmF2aWdhdGlvbkNsaWNrLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLmV2ZW50cy5yZWdpc3Rlcih3aW5kb3csICdyZXNpemUnLCB0aGVtZVV0aWxzLmRlYm91bmNlKHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyksIDUwMCkpO1xuXG4gICAgY29uc3QgY3VycmVudENsb3NlQWN0aW9uID0ge1xuICAgICAgZWw6IG51bGwsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duLCAuaGFzLW1lZ2EtbmF2JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnbW91c2VlbnRlcicsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwgJiYgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGN1cnJlbnRDbG9zZUFjdGlvbi50aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bihjdXJyZW50Q2xvc2VBY3Rpb24uZWwpO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBudWxsO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24udGltZW91dCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaGFzLW1lZ2EtbmF2JykpIHtcbiAgICAgICAgdGhpcy5fc3dhcE1lZ2FOYXZJbWFnZXMoY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCcubWVnYS1uYXYtaW1hZ2UgaW1nJykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vcGVuRHJvcGRvd24oY3VycmVudFRhcmdldCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duLCAuaGFzLW1lZ2EtbmF2JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnbW91c2VsZWF2ZScsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwgJiYgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpIHtcbiAgICAgICAgLy8gRG9uJ3QgYWRkIGFub3RoZXIgYWN0aW9uIGZvciBhbiBlbGVtZW50IHRoYXQgaXMgbmVzdGVkIHdpdGhpbiBhIGN1cnJlbnRseSBjbG9zaW5nIGRyb3Bkb3duXG4gICAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwuY29udGFpbnMoY3VycmVudFRhcmdldCkpIHJldHVybjtcblxuICAgICAgICBjbGVhclRpbWVvdXQoY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpO1xuXG4gICAgICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IGRyb3Bkb3duIGlmIG9uZSBleGlzdHMgYW5kIGhhc24ndCBiZWVuIHJ1biwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYSBjaGlsZCBvZiB0aGlzIG5ldyBldmVudFxuICAgICAgICBpZiAoIWN1cnJlbnRUYXJnZXQuY29udGFpbnMoY3VycmVudENsb3NlQWN0aW9uLmVsKSkge1xuICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oY3VycmVudENsb3NlQWN0aW9uLmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bihjdXJyZW50Q2xvc2VBY3Rpb24uZWwpO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBudWxsO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24udGltZW91dCA9IG51bGw7XG4gICAgICB9LCA0MDApO1xuICAgIH0pKTtcblxuICAgIHRoaXMuZGV0YWlsc0VsZW1lbnRzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcblxuICAgIHRoaXMuZmlyc3RMZXZlbERldGFpbHMgPSBbLi4udGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2aWdhdGlvbi1tZW51ID4gLmhhcy1kcm9wZG93biA+IFtkYXRhLW5hdi1kZXRhaWxzXScpXTtcblxuICAgIHRoaXMuY2xpY2sgPSBlID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGNvbnN0IGNsaWNrZWRQYXJlbnQgPSBlLnRhcmdldC5jbG9zZXN0KCcubmF2aWdhdGlvbi1tZW51LWxpbmsnKTtcbiAgICAgIGNvbnN0IGNsaWNrZWREZXRhaWxzRWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcblxuICAgICAgLy8gQ2xvc2Ugc2libGluZ3NcbiAgICAgIGlmICh0aGlzLmZpcnN0TGV2ZWxEZXRhaWxzLmluY2x1ZGVzKGNsaWNrZWREZXRhaWxzRWwpKSB7XG4gICAgICAgIHRoaXMuZmlyc3RMZXZlbERldGFpbHMuZm9yRWFjaChkZXRhaWxzRWxlbWVudCA9PiB7XG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IGRldGFpbHNFbGVtZW50O1xuICAgICAgICAgIGlmIChkZXRhaWxzICE9PSBjbGlja2VkRGV0YWlsc0VsKSB7XG4gICAgICAgICAgICBkZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgbGluayBiZWluZyBjbGlja2VkIGlzIGEgcGFyZW50IGxpbmssIHRoZW4gdGFrZSBjb250cm9sIG9mIHRoZSBuYXZpZ2F0aW9uXG4gICAgICBpZiAoY2xpY2tlZFBhcmVudCAmJiBjbGlja2VkUGFyZW50LmRhdGFzZXQuaHJlZikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vIGlmIGFscmVhZHkgb3BlbiwgY29udGludWUgdG8gbGluayBkZXN0aW5hdGlvblxuICAgICAgICBpZiAoY2xpY2tlZERldGFpbHNFbC5vcGVuKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gY2xpY2tlZFBhcmVudC5kYXRhc2V0LmhyZWY7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHN1Ym1lbnUgaXNuJ3Qgb3Blbiwgb3BlbiBpdFxuICAgICAgICBjbGlja2VkRGV0YWlsc0VsLm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhlbWVVdGlscy5pc0xhcmdlKCkpIHtcbiAgICAgIC8vIEFkZGluZyBjbGljayBldmVudCBmb3IgZGV0YWlscyBlbGVtZW50cyBvbiBkZXNrdG9wXG4gICAgICB0aGlzLmRldGFpbHNFbGVtZW50cy5mb3JFYWNoKGRldGFpbHNFbGVtZW50ID0+IHRoaXMuZXZlbnRzLnJlZ2lzdGVyKGRldGFpbHNFbGVtZW50LCAnY2xpY2snLCBldmVudCA9PiB0aGlzLmNsaWNrKGV2ZW50KSkpO1xuICAgICAgdGhpcy5kZXRhaWxzRWxlbWVudHMuZm9yRWFjaChkZXRhaWxzRWxlbWVudCA9PiB0aGlzLmV2ZW50cy5yZWdpc3RlcihkZXRhaWxzRWxlbWVudCwgJ3RvdWNoZW5kJywgZSA9PiB0aGlzLmNsaWNrKGUpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duID4gYSA+IFtkYXRhLXN1Ym5hdi10b2dnbGVdJykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICBjb25zdCB0cmlnZ2VyRWwgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgaWYgKHRyaWdnZXJFbC5jbGFzc0xpc3QuY29udGFpbnMoJ2hhcy1kcm9wZG93bi0tYWN0aXZlJykpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bih0cmlnZ2VyRWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3BlbkRyb3Bkb3duKHRyaWdnZXJFbCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2aWdhdGlvbi1zdWJtZW51JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAncmV2ZWFsZXItYW5pbWF0aW5nJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQ6IGRyb3Bkb3duIH0gPSBldmVudDtcblxuICAgICAgaWYgKCFkcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoJ2FuaW1hdGluZy1pbicpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi1zdWJtZW51LW9wZW4tbGVmdCcpO1xuICAgICAgZHJvcGRvd24uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICBkcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25XaWR0aCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkcm9wZG93bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuXG4gICAgICBpZiAoKG9mZnNldCArIDIwMCkgPiBuYXZpZ2F0aW9uV2lkdGgpIHtcbiAgICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi1zdWJtZW51LW9wZW4tbGVmdCcpO1xuICAgICAgfVxuXG4gICAgICBkcm9wZG93bi5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICBkcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfSkpO1xuICB9XG5cbiAgb25TZWN0aW9uRGVzZWxlY3QoKSB7XG4gICAgdGhpcy5fdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbignY2xvc2UnKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLmV2ZW50cy51bnJlZ2lzdGVyQWxsKCk7XG4gICAgdGhpcy5fdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbignY2xvc2UnKTtcbiAgfVxuXG4gIF9vblJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZU1vYmlsZU5hdmlnYXRpb24oJ2Nsb3NlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWxvYWROYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBfb25NZWdhTmF2QW5jaG9yTW91c2VvdmVyKGUpIHtcbiAgICB0aGlzLl9zd2FwTWVnYU5hdkltYWdlcyhlLmN1cnJlbnRUYXJnZXQucGFyZW50Tm9kZSk7XG4gIH1cblxuICBfb25NZWdhTmF2QW5jaG9yTW91c2VsZWF2ZShlKSB7XG4gICAgY29uc3QgbWVnYU5hdkltYWdlID0gZS50YXJnZXRcbiAgICAgIC5jbG9zZXN0KCcubWVnYS1uYXYnKVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdi1pbWFnZSBpbWcnKTtcblxuICAgIGlmICghbWVnYU5hdkltYWdlKSByZXR1cm47XG5cbiAgICBtZWdhTmF2SW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBtZWdhTmF2SW1hZ2UuZGF0YXNldC5pbWFnZSk7XG4gICAgbWVnYU5hdkltYWdlLnNldEF0dHJpYnV0ZSgnYWx0JywgbWVnYU5hdkltYWdlLmRhdGFzZXQuYWx0KTtcbiAgfVxuXG4gIF9vbk1vYmlsZU5hdmlnYXRpb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVNb2JpbGVOYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBfb3BlbkRyb3Bkb3duKHRyaWdnZXJFbCkge1xuICAgIHRyaWdnZXJFbC5jbGFzc0xpc3QuYWRkKCdoYXMtZHJvcGRvd24tLWFjdGl2ZScpO1xuXG4gICAgY29uc3QgbmF2aWdhdGlvblN1Ym1lbnVUb2dnbGUgPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tc3VibWVudS10b2dnbGUnKTtcblxuICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSB7XG4gICAgICBjb25zdCBkcm9wZG93biA9IHRyaWdnZXJFbC5xdWVyeVNlbGVjdG9yKCcubmF2aWdhdGlvbi1zdWJtZW51Jyk7XG4gICAgICB0cmlnZ2VyRWwuY2xhc3NMaXN0LmFkZCgnaGFzLW1vYmlsZS1kcm9wZG93bi0tYWN0aXZlJyk7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QuYWRkKCduYXZpZ2F0aW9uLXN1Ym1lbnUtdmlzaWJsZScpO1xuICAgICAgdGhpcy5fc2V0VGllckhlaWdodCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZWdhTmF2ID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdicpO1xuICAgICAgY29uc3QgZHJvcGRvd24gPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tc3VibWVudScpO1xuXG4gICAgICBpZiAobWVnYU5hdikge1xuICAgICAgICBtZWdhTmF2LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ25hdmlnYXRpb24tc3VibWVudS12aXNpYmxlJyk7XG4gICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZpZ2F0aW9uU3VibWVudVRvZ2dsZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgIHRoaXMuZGV0YWlscyA9IHRyaWdnZXJFbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcbiAgICBpZiAodGhpcy5kZXRhaWxzICYmIHRoZW1lVXRpbHMuaXNMYXJnZSgpKSB7XG4gICAgICB0aGlzLmRldGFpbHMub3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2Nsb3NlRHJvcGRvd24odHJpZ2dlckVsKSB7XG4gICAgdHJpZ2dlckVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1kcm9wZG93bi0tYWN0aXZlJyk7XG4gICAgdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5oYXMtZHJvcGRvd24sIC5oYXMtbWVnYS1uYXYnKS5mb3JFYWNoKGlubmVyVHJpZ2dlckVsID0+IHRoaXMuX2Nsb3NlRHJvcGRvd24oaW5uZXJUcmlnZ2VyRWwpKTtcblxuICAgIGNvbnN0IGRyb3Bkb3duID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5uYXZpZ2F0aW9uLXN1Ym1lbnUnKTtcbiAgICBjb25zdCBtZWdhTmF2ID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdicpO1xuICAgIGNvbnN0IG5hdmlnYXRpb25TdWJtZW51VG9nZ2xlID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5uYXZpZ2F0aW9uLXN1Ym1lbnUtdG9nZ2xlJyk7XG5cbiAgICBpZiAoZHJvcGRvd24pIHtcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ25hdmlnYXRpb24tc3VibWVudS12aXNpYmxlJyk7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgdHJpZ2dlckVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1tb2JpbGUtZHJvcGRvd24tLWFjdGl2ZScpO1xuXG4gICAgaWYgKG1lZ2FOYXYpIHtcbiAgICAgIG1lZ2FOYXYuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLl9zZXRUaWVySGVpZ2h0KCk7XG5cbiAgICBpZiAobmF2aWdhdGlvblN1Ym1lbnVUb2dnbGUpIHtcbiAgICAgIG5hdmlnYXRpb25TdWJtZW51VG9nZ2xlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRldGFpbHMgPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbmF2LWRldGFpbHNdJyk7XG4gICAgaWYgKHRoaXMuZGV0YWlscyAmJiB0aGVtZVV0aWxzLmlzTGFyZ2UoKSkge1xuICAgICAgdGhpcy5kZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbihmb3JjZSA9IG51bGwpIHtcbiAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ21vYmlsZS1uYXYtb3BlbicpICYmIGZvcmNlICE9PSAnb3BlbicpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2JpbGUtbmF2LW9wZW4nKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbG9jay1zY3JvbGwnKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2JhY2tncm91bmQnKTtcblxuICAgICAgLy8gQ2xvc2Ugb3BlbmVkIG1lbnVzIG9uIG5hdmlnYXRpb24gY2xvc2VcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmhhcy1kcm9wZG93bi0tYWN0aXZlJykuZm9yRWFjaCh0cmlnZ2VyRWwgPT4gdGhpcy5fY2xvc2VEcm9wZG93bih0cmlnZ2VyRWwpKTtcbiAgICB9IGVsc2UgaWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9iaWxlLW5hdi1vcGVuJykgJiYgZm9yY2UgIT09ICdjbG9zZScpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbW9iaWxlLW5hdi1vcGVuJyk7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2xvY2stc2Nyb2xsJyk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnYmFja2dyb3VuZCcpO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgICB0aGlzLl9zZXRUaWVySGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgX3NldFRpZXJIZWlnaHQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGw7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gIH1cblxuICBfc3dhcE1lZ2FOYXZJbWFnZXModGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgaW1hZ2UsIGltYWdlQWx0IH0gPSB0YXJnZXQuZGF0YXNldDtcblxuICAgIGlmIChpbWFnZSAmJiAoaW1hZ2UgIT09ICcnKSkge1xuICAgICAgY29uc3QgbWVnYU5hdkltZyA9IHRhcmdldC5jbG9zZXN0KCcubWVnYS1uYXYnKS5xdWVyeVNlbGVjdG9yKCcubWVnYS1uYXYtaW1hZ2UgaW1nJyk7XG5cbiAgICAgIGlmICghbWVnYU5hdkltZykgcmV0dXJuO1xuXG4gICAgICBtZWdhTmF2SW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1hZ2UpO1xuICAgICAgbWVnYU5hdkltZy5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsICcnKTtcbiAgICAgIG1lZ2FOYXZJbWcuc2V0QXR0cmlidXRlKCdhbHQnLCBpbWFnZUFsdCk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticNavigation.js\n");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ StaticNavigation)\n/* harmony export */ });\n/* harmony import */ var _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @pixelunion/events */ \"./node_modules/@pixelunion/events/dist/EventHandler.js\");\n/* harmony import */ var _themeUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../themeUtils */ \"./source/scripts/themeUtils.js\");\n\n\nclass StaticNavigation {\n  constructor(section) {\n    this.el = section.el;\n    this.events = new _pixelunion_events__WEBPACK_IMPORTED_MODULE_0__.default();\n    this.navigationWrapper = this.el.querySelector('[data-navigation-wrapper]');\n    if (!this.navigationWrapper) return;\n    this.navigationWrapper.classList.add('navigation--loading');\n    this.reloadNavigation();\n    this.navigationWrapper.classList.remove('navigation--loading');\n    this.navigationWrapper.classList.add('navigation--loaded');\n  }\n\n  reloadNavigation() {\n    this.events.unregisterAll();\n\n    if (!true /*DW:nav-forced-mobile*/) {\n      this.navigationContent = this.el.querySelector('.navigation-desktop[data-navigation-content]');\n      const headerBranding = document.querySelector('[data-header-branding]');\n      headerBranding.parentNode.insertBefore(this.navigationWrapper, headerBranding.nextSibling);\n      const megaNavs = this.navigationContent.querySelectorAll('li[data-mega-nav=\"true\"]');\n      megaNavs.forEach(el => {\n        el.classList.remove('has-dropdown');\n        el.classList.add('has-mega-nav');\n      });\n    } else {\n      this.navigationContent = this.el.querySelector('.navigation-mobile[data-navigation-content]');\n      const headerMain = document.querySelector('[data-header-main]');\n      headerMain.parentNode.insertBefore(this.navigationWrapper, headerMain.nextSibling);\n      const megaNavs = this.navigationContent.querySelectorAll('li[data-mega-nav=\"true\"]');\n      megaNavs.forEach(el => {\n        el.classList.add('has-dropdown');\n        el.classList.remove('has-mega-nav');\n      });\n    }\n\n    this.el.querySelectorAll('.mega-nav-list li a, .mega-nav-list li summary').forEach(anchor => this.events.register(anchor, 'mouseover', this._onMegaNavAnchorMouseover.bind(this)));\n    this.el.querySelectorAll('.mega-nav-list a, .mega-nav-list summary').forEach(anchor => this.events.register(anchor, 'mouseleave', this._onMegaNavAnchorMouseleave.bind(this)));\n    this.el.querySelectorAll('[data-header-nav-toggle]').forEach(toggle => this.events.register(toggle, 'click', this._onMobileNavigationClick.bind(this)));\n    this.events.register(window, 'resize', _themeUtils__WEBPACK_IMPORTED_MODULE_1__.default.debounce(this._onResize.bind(this), 500));\n    const currentCloseAction = {\n      el: null,\n      timeout: null\n    };\n    this.el.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(toggle => this.events.register(toggle, 'mouseenter', event => {\n      if (true /*DW:nav-forced-mobile*/) return;\n      const {\n        currentTarget\n      } = event;\n\n      if (currentCloseAction.el && currentCloseAction.timeout) {\n        clearTimeout(currentCloseAction.timeout);\n\n        this._closeDropdown(currentCloseAction.el);\n\n        currentCloseAction.el = null;\n        currentCloseAction.timeout = null;\n      }\n\n      if (currentTarget.classList.contains('has-mega-nav')) {\n        this._swapMegaNavImages(currentTarget.querySelector('.mega-nav-image img'));\n      }\n\n      this._openDropdown(currentTarget);\n    }));\n    this.el.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(toggle => this.events.register(toggle, 'mouseleave', event => {\n      if (true /*DW:nav-forced-mobile*/) return;\n      const {\n        currentTarget\n      } = event;\n\n      if (currentCloseAction.el && currentCloseAction.timeout) {\n        // Don't add another action for an element that is nested within a currently closing dropdown\n        if (currentCloseAction.el.contains(currentTarget)) return;\n        clearTimeout(currentCloseAction.timeout); // Close the current dropdown if one exists and hasn't been run, but only if it isn't a child of this new event\n\n        if (!currentTarget.contains(currentCloseAction.el)) {\n          this._closeDropdown(currentCloseAction.el);\n        }\n      }\n\n      currentCloseAction.el = currentTarget;\n      currentCloseAction.timeout = setTimeout(() => {\n        this._closeDropdown(currentCloseAction.el);\n\n        currentCloseAction.el = null;\n        currentCloseAction.timeout = null;\n      }, 400);\n    }));\n    this.detailsElements = this.el.querySelectorAll('[data-nav-details]');\n    this.firstLevelDetails = [...this.el.querySelectorAll('.navigation-menu > .has-dropdown > [data-nav-details]')];\n\n    this.click = e => {\n      e.stopPropagation();\n      const clickedParent = e.target.closest('.navigation-menu-link');\n      const clickedDetailsEl = e.target.closest('[data-nav-details]'); // Close siblings\n\n      if (this.firstLevelDetails.includes(clickedDetailsEl)) {\n        this.firstLevelDetails.forEach(detailsElement => {\n          const details = detailsElement;\n\n          if (details !== clickedDetailsEl) {\n            details.open = false;\n          }\n        });\n      } // If the link being clicked is a parent link, then take control of the navigation\n\n\n      if (clickedParent && clickedParent.dataset.href) {\n        e.preventDefault(); // if already open, continue to link destination\n\n        if (clickedDetailsEl.open) {\n          window.location = clickedParent.dataset.href;\n          return;\n        } // If the submenu isn't open, open it\n\n\n        clickedDetailsEl.open = true;\n      }\n    };\n\n    if (false /*DW:nav-forced-mobile*/) {\n      // Adding click event for details elements on desktop\n      this.detailsElements.forEach(detailsElement => this.events.register(detailsElement, 'click', event => this.click(event)));\n      this.detailsElements.forEach(detailsElement => this.events.register(detailsElement, 'touchend', e => this.click(e)));\n    }\n\n    this.el.querySelectorAll('.has-dropdown > a > [data-subnav-toggle]').forEach(toggle => this.events.register(toggle, 'click', event => {\n      event.stopPropagation();\n      event.preventDefault();\n      const {\n        currentTarget\n      } = event;\n      const triggerEl = currentTarget.parentElement.parentElement;\n\n      if (triggerEl.classList.contains('has-dropdown--active')) {\n        this._closeDropdown(triggerEl);\n      } else {\n        this._openDropdown(triggerEl);\n      }\n    }));\n    this.el.querySelectorAll('.navigation-submenu').forEach(toggle => this.events.register(toggle, 'revealer-animating', event => {\n      if (true /*DW:nav-forced-mobile*/) {\n        return;\n      }\n\n      const {\n        currentTarget: dropdown\n      } = event;\n\n      if (!dropdown.classList.contains('animating-in')) {\n        return;\n      }\n\n      dropdown.classList.remove('navigation-submenu-open-left');\n      dropdown.style.opacity = 0;\n      dropdown.style.display = 'block';\n      const navigationWidth = this.navigationWrapper.getBoundingClientRect().width;\n      const offset = dropdown.getBoundingClientRect().left + window.pageXOffset;\n\n      if (offset + 200 > navigationWidth) {\n        dropdown.classList.add('navigation-submenu-open-left');\n      }\n\n      dropdown.style.opacity = '';\n      dropdown.style.display = '';\n    }));\n  }\n\n  onSectionDeselect() {\n    this._toggleMobileNavigation('close');\n  }\n\n  onSectionUnload() {\n    this.events.unregisterAll();\n\n    this._toggleMobileNavigation('close');\n  }\n\n  _onResize() {\n    if (!true /*DW:nav-forced-mobile*/) {\n      this._toggleMobileNavigation('close');\n    }\n\n    this.reloadNavigation();\n  }\n\n  _onMegaNavAnchorMouseover(e) {\n    this._swapMegaNavImages(e.currentTarget.parentNode);\n  }\n\n  _onMegaNavAnchorMouseleave(e) {\n    const megaNavImage = e.target.closest('.mega-nav').querySelector('.mega-nav-image img');\n    if (!megaNavImage) return;\n    megaNavImage.setAttribute('src', megaNavImage.dataset.image);\n    megaNavImage.setAttribute('alt', megaNavImage.dataset.alt);\n  }\n\n  _onMobileNavigationClick() {\n    this._toggleMobileNavigation();\n  }\n\n  _openDropdown(triggerEl) {\n    triggerEl.classList.add('has-dropdown--active');\n    const navigationSubmenuToggle = triggerEl.querySelector('.navigation-submenu-toggle');\n\n    if (true /*DW:nav-forced-mobile*/) {\n      const dropdown = triggerEl.querySelector('.navigation-submenu');\n      triggerEl.classList.add('has-mobile-dropdown--active');\n      dropdown.classList.add('navigation-submenu-visible');\n\n      this._setTierHeight();\n    } else {\n      const megaNav = triggerEl.querySelector('.mega-nav');\n      const dropdown = triggerEl.querySelector('.navigation-submenu');\n\n      if (megaNav) {\n        megaNav.classList.add('visible');\n      } else {\n        dropdown.classList.add('navigation-submenu-visible');\n        dropdown.classList.add('visible');\n      }\n    }\n\n    navigationSubmenuToggle.setAttribute('aria-expanded', true);\n    this.details = triggerEl.querySelector('[data-nav-details]');\n\n    if (this.details && false /*DW:nav-forced-mobile*/) {\n      this.details.open = true;\n    }\n  }\n\n  _closeDropdown(triggerEl) {\n    triggerEl.classList.remove('has-dropdown--active');\n    triggerEl.querySelectorAll('.has-dropdown, .has-mega-nav').forEach(innerTriggerEl => this._closeDropdown(innerTriggerEl));\n    const dropdown = triggerEl.querySelector('.navigation-submenu');\n    const megaNav = triggerEl.querySelector('.mega-nav');\n    const navigationSubmenuToggle = triggerEl.querySelector('.navigation-submenu-toggle');\n\n    if (dropdown) {\n      dropdown.classList.remove('navigation-submenu-visible');\n      dropdown.classList.remove('visible');\n    }\n\n    triggerEl.classList.remove('has-mobile-dropdown--active');\n\n    if (megaNav) {\n      megaNav.classList.remove('visible');\n    }\n\n    this._setTierHeight();\n\n    if (navigationSubmenuToggle) {\n      navigationSubmenuToggle.setAttribute('aria-expanded', false);\n    }\n\n    this.details = triggerEl.querySelector('[data-nav-details]');\n\n    if (this.details && false /*DW:nav-forced-mobile*/) {\n      this.details.open = false;\n    }\n  }\n\n  _toggleMobileNavigation(force = null) {\n    if (document.body.classList.contains('mobile-nav-open') && force !== 'open') {\n      this.navigationContent.removeAttribute('style');\n      document.body.classList.remove('mobile-nav-open');\n      document.body.classList.remove('lock-scroll');\n      this.navigationContent.classList.remove('visible');\n      this.navigationWrapper.classList.remove('visible');\n      this.navigationWrapper.classList.remove('background'); // Close opened menus on navigation close\n\n      this.navigationContent.querySelectorAll('.has-dropdown--active').forEach(triggerEl => this._closeDropdown(triggerEl));\n    } else if (!document.body.classList.contains('mobile-nav-open') && force !== 'close') {\n      document.body.classList.add('mobile-nav-open');\n      document.body.classList.add('lock-scroll');\n      this.navigationWrapper.classList.add('visible');\n      this.navigationWrapper.classList.add('background');\n      this.navigationContent.classList.add('visible');\n\n      this._setTierHeight();\n    }\n  }\n\n  _setTierHeight() {\n    this.navigationContent.style.overflowY = scroll;\n    this.navigationContent.style.height = '100%';\n  }\n\n  _swapMegaNavImages(target) {\n    if (!target) return;\n    const {\n      image,\n      imageAlt\n    } = target.dataset;\n\n    if (image && image !== '') {\n      const megaNavImg = target.closest('.mega-nav').querySelector('.mega-nav-image img');\n      if (!megaNavImg) return;\n      megaNavImg.setAttribute('src', image);\n      megaNavImg.setAttribute('srcset', '');\n      megaNavImg.setAttribute('alt', imageAlt);\n    }\n  }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zb3VyY2Uvc2NyaXB0cy9zZWN0aW9ucy9TdGF0aWNOYXZpZ2F0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZ3JpZC8uL3NvdXJjZS9zY3JpcHRzL3NlY3Rpb25zL1N0YXRpY05hdmlnYXRpb24uanM/Yjk0MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJ0BwaXhlbHVuaW9uL2V2ZW50cyc7XG5pbXBvcnQgdGhlbWVVdGlscyBmcm9tICcuLi90aGVtZVV0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGljTmF2aWdhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHNlY3Rpb24pIHtcbiAgICB0aGlzLmVsID0gc2VjdGlvbi5lbDtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudEhhbmRsZXIoKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIgPSB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW5hdmlnYXRpb24td3JhcHBlcl0nKTtcblxuICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uV3JhcHBlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlci5jbGFzc0xpc3QuYWRkKCduYXZpZ2F0aW9uLS1sb2FkaW5nJyk7XG5cbiAgICB0aGlzLnJlbG9hZE5hdmlnYXRpb24oKTtcblxuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi0tbG9hZGluZycpO1xuICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi0tbG9hZGVkJyk7XG4gIH1cblxuICByZWxvYWROYXZpZ2F0aW9uKCkge1xuICAgIHRoaXMuZXZlbnRzLnVucmVnaXN0ZXJBbGwoKTtcblxuICAgIGlmICghdGhlbWVVdGlscy5pc0xlc3NUaGFuTGFyZ2UoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tZGVza3RvcFtkYXRhLW5hdmlnYXRpb24tY29udGVudF0nKTtcblxuICAgICAgY29uc3QgaGVhZGVyQnJhbmRpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1oZWFkZXItYnJhbmRpbmddJyk7XG5cbiAgICAgIGhlYWRlckJyYW5kaW5nLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubmF2aWdhdGlvbldyYXBwZXIsIGhlYWRlckJyYW5kaW5nLm5leHRTaWJsaW5nKTtcblxuICAgICAgY29uc3QgbWVnYU5hdnMgPSB0aGlzLm5hdmlnYXRpb25Db250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpW2RhdGEtbWVnYS1uYXY9XCJ0cnVlXCJdJyk7XG5cbiAgICAgIG1lZ2FOYXZzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdoYXMtZHJvcGRvd24nKTtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaGFzLW1lZ2EtbmF2Jyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudCA9IHRoaXMuZWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tbW9iaWxlW2RhdGEtbmF2aWdhdGlvbi1jb250ZW50XScpO1xuXG4gICAgICBjb25zdCBoZWFkZXJNYWluID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtaGVhZGVyLW1haW5dJyk7XG5cbiAgICAgIGhlYWRlck1haW4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5uYXZpZ2F0aW9uV3JhcHBlciwgaGVhZGVyTWFpbi5uZXh0U2libGluZyk7XG5cbiAgICAgIGNvbnN0IG1lZ2FOYXZzID0gdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdsaVtkYXRhLW1lZ2EtbmF2PVwidHJ1ZVwiXScpO1xuXG4gICAgICBtZWdhTmF2cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaGFzLWRyb3Bkb3duJyk7XG4gICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1tZWdhLW5hdicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubWVnYS1uYXYtbGlzdCBsaSBhLCAubWVnYS1uYXYtbGlzdCBsaSBzdW1tYXJ5JykuZm9yRWFjaChhbmNob3IgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIoYW5jaG9yLCAnbW91c2VvdmVyJywgdGhpcy5fb25NZWdhTmF2QW5jaG9yTW91c2VvdmVyLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZWdhLW5hdi1saXN0IGEsIC5tZWdhLW5hdi1saXN0IHN1bW1hcnknKS5mb3JFYWNoKGFuY2hvciA9PiB0aGlzLmV2ZW50cy5yZWdpc3RlcihhbmNob3IsICdtb3VzZWxlYXZlJywgdGhpcy5fb25NZWdhTmF2QW5jaG9yTW91c2VsZWF2ZS5iaW5kKHRoaXMpKSk7XG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1oZWFkZXItbmF2LXRvZ2dsZV0nKS5mb3JFYWNoKHRvZ2dsZSA9PiB0aGlzLmV2ZW50cy5yZWdpc3Rlcih0b2dnbGUsICdjbGljaycsIHRoaXMuX29uTW9iaWxlTmF2aWdhdGlvbkNsaWNrLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLmV2ZW50cy5yZWdpc3Rlcih3aW5kb3csICdyZXNpemUnLCB0aGVtZVV0aWxzLmRlYm91bmNlKHRoaXMuX29uUmVzaXplLmJpbmQodGhpcyksIDUwMCkpO1xuXG4gICAgY29uc3QgY3VycmVudENsb3NlQWN0aW9uID0ge1xuICAgICAgZWw6IG51bGwsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duLCAuaGFzLW1lZ2EtbmF2JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnbW91c2VlbnRlcicsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwgJiYgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGN1cnJlbnRDbG9zZUFjdGlvbi50aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bihjdXJyZW50Q2xvc2VBY3Rpb24uZWwpO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBudWxsO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24udGltZW91dCA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaGFzLW1lZ2EtbmF2JykpIHtcbiAgICAgICAgdGhpcy5fc3dhcE1lZ2FOYXZJbWFnZXMoY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCcubWVnYS1uYXYtaW1hZ2UgaW1nJykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vcGVuRHJvcGRvd24oY3VycmVudFRhcmdldCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duLCAuaGFzLW1lZ2EtbmF2JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnbW91c2VsZWF2ZScsIGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwgJiYgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpIHtcbiAgICAgICAgLy8gRG9uJ3QgYWRkIGFub3RoZXIgYWN0aW9uIGZvciBhbiBlbGVtZW50IHRoYXQgaXMgbmVzdGVkIHdpdGhpbiBhIGN1cnJlbnRseSBjbG9zaW5nIGRyb3Bkb3duXG4gICAgICAgIGlmIChjdXJyZW50Q2xvc2VBY3Rpb24uZWwuY29udGFpbnMoY3VycmVudFRhcmdldCkpIHJldHVybjtcblxuICAgICAgICBjbGVhclRpbWVvdXQoY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQpO1xuXG4gICAgICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IGRyb3Bkb3duIGlmIG9uZSBleGlzdHMgYW5kIGhhc24ndCBiZWVuIHJ1biwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYSBjaGlsZCBvZiB0aGlzIG5ldyBldmVudFxuICAgICAgICBpZiAoIWN1cnJlbnRUYXJnZXQuY29udGFpbnMoY3VycmVudENsb3NlQWN0aW9uLmVsKSkge1xuICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oY3VycmVudENsb3NlQWN0aW9uLmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBjdXJyZW50VGFyZ2V0O1xuICAgICAgY3VycmVudENsb3NlQWN0aW9uLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bihjdXJyZW50Q2xvc2VBY3Rpb24uZWwpO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24uZWwgPSBudWxsO1xuICAgICAgICBjdXJyZW50Q2xvc2VBY3Rpb24udGltZW91dCA9IG51bGw7XG4gICAgICB9LCA0MDApO1xuICAgIH0pKTtcblxuICAgIHRoaXMuZGV0YWlsc0VsZW1lbnRzID0gdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcblxuICAgIHRoaXMuZmlyc3RMZXZlbERldGFpbHMgPSBbLi4udGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2aWdhdGlvbi1tZW51ID4gLmhhcy1kcm9wZG93biA+IFtkYXRhLW5hdi1kZXRhaWxzXScpXTtcblxuICAgIHRoaXMuY2xpY2sgPSBlID0+IHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGNvbnN0IGNsaWNrZWRQYXJlbnQgPSBlLnRhcmdldC5jbG9zZXN0KCcubmF2aWdhdGlvbi1tZW51LWxpbmsnKTtcbiAgICAgIGNvbnN0IGNsaWNrZWREZXRhaWxzRWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcblxuICAgICAgLy8gQ2xvc2Ugc2libGluZ3NcbiAgICAgIGlmICh0aGlzLmZpcnN0TGV2ZWxEZXRhaWxzLmluY2x1ZGVzKGNsaWNrZWREZXRhaWxzRWwpKSB7XG4gICAgICAgIHRoaXMuZmlyc3RMZXZlbERldGFpbHMuZm9yRWFjaChkZXRhaWxzRWxlbWVudCA9PiB7XG4gICAgICAgICAgY29uc3QgZGV0YWlscyA9IGRldGFpbHNFbGVtZW50O1xuICAgICAgICAgIGlmIChkZXRhaWxzICE9PSBjbGlja2VkRGV0YWlsc0VsKSB7XG4gICAgICAgICAgICBkZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgbGluayBiZWluZyBjbGlja2VkIGlzIGEgcGFyZW50IGxpbmssIHRoZW4gdGFrZSBjb250cm9sIG9mIHRoZSBuYXZpZ2F0aW9uXG4gICAgICBpZiAoY2xpY2tlZFBhcmVudCAmJiBjbGlja2VkUGFyZW50LmRhdGFzZXQuaHJlZikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vIGlmIGFscmVhZHkgb3BlbiwgY29udGludWUgdG8gbGluayBkZXN0aW5hdGlvblxuICAgICAgICBpZiAoY2xpY2tlZERldGFpbHNFbC5vcGVuKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gY2xpY2tlZFBhcmVudC5kYXRhc2V0LmhyZWY7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHN1Ym1lbnUgaXNuJ3Qgb3Blbiwgb3BlbiBpdFxuICAgICAgICBjbGlja2VkRGV0YWlsc0VsLm9wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhlbWVVdGlscy5pc0xhcmdlKCkpIHtcbiAgICAgIC8vIEFkZGluZyBjbGljayBldmVudCBmb3IgZGV0YWlscyBlbGVtZW50cyBvbiBkZXNrdG9wXG4gICAgICB0aGlzLmRldGFpbHNFbGVtZW50cy5mb3JFYWNoKGRldGFpbHNFbGVtZW50ID0+IHRoaXMuZXZlbnRzLnJlZ2lzdGVyKGRldGFpbHNFbGVtZW50LCAnY2xpY2snLCBldmVudCA9PiB0aGlzLmNsaWNrKGV2ZW50KSkpO1xuICAgICAgdGhpcy5kZXRhaWxzRWxlbWVudHMuZm9yRWFjaChkZXRhaWxzRWxlbWVudCA9PiB0aGlzLmV2ZW50cy5yZWdpc3RlcihkZXRhaWxzRWxlbWVudCwgJ3RvdWNoZW5kJywgZSA9PiB0aGlzLmNsaWNrKGUpKSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuaGFzLWRyb3Bkb3duID4gYSA+IFtkYXRhLXN1Ym5hdi10b2dnbGVdJykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAnY2xpY2snLCBldmVudCA9PiB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICBjb25zdCB0cmlnZ2VyRWwgPSBjdXJyZW50VGFyZ2V0LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcblxuICAgICAgaWYgKHRyaWdnZXJFbC5jbGFzc0xpc3QuY29udGFpbnMoJ2hhcy1kcm9wZG93bi0tYWN0aXZlJykpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bih0cmlnZ2VyRWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb3BlbkRyb3Bkb3duKHRyaWdnZXJFbCk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdGhpcy5lbC5xdWVyeVNlbGVjdG9yQWxsKCcubmF2aWdhdGlvbi1zdWJtZW51JykuZm9yRWFjaCh0b2dnbGUgPT4gdGhpcy5ldmVudHMucmVnaXN0ZXIodG9nZ2xlLCAncmV2ZWFsZXItYW5pbWF0aW5nJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRUYXJnZXQ6IGRyb3Bkb3duIH0gPSBldmVudDtcblxuICAgICAgaWYgKCFkcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoJ2FuaW1hdGluZy1pbicpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnbmF2aWdhdGlvbi1zdWJtZW51LW9wZW4tbGVmdCcpO1xuICAgICAgZHJvcGRvd24uc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgICBkcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25XaWR0aCA9IHRoaXMubmF2aWdhdGlvbldyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkcm9wZG93bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0O1xuXG4gICAgICBpZiAoKG9mZnNldCArIDIwMCkgPiBuYXZpZ2F0aW9uV2lkdGgpIHtcbiAgICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnbmF2aWdhdGlvbi1zdWJtZW51LW9wZW4tbGVmdCcpO1xuICAgICAgfVxuXG4gICAgICBkcm9wZG93bi5zdHlsZS5vcGFjaXR5ID0gJyc7XG4gICAgICBkcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfSkpO1xuICB9XG5cbiAgb25TZWN0aW9uRGVzZWxlY3QoKSB7XG4gICAgdGhpcy5fdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbignY2xvc2UnKTtcbiAgfVxuXG4gIG9uU2VjdGlvblVubG9hZCgpIHtcbiAgICB0aGlzLmV2ZW50cy51bnJlZ2lzdGVyQWxsKCk7XG4gICAgdGhpcy5fdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbignY2xvc2UnKTtcbiAgfVxuXG4gIF9vblJlc2l6ZSgpIHtcbiAgICBpZiAoIXRoZW1lVXRpbHMuaXNMZXNzVGhhbkxhcmdlKCkpIHtcbiAgICAgIHRoaXMuX3RvZ2dsZU1vYmlsZU5hdmlnYXRpb24oJ2Nsb3NlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWxvYWROYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBfb25NZWdhTmF2QW5jaG9yTW91c2VvdmVyKGUpIHtcbiAgICB0aGlzLl9zd2FwTWVnYU5hdkltYWdlcyhlLmN1cnJlbnRUYXJnZXQucGFyZW50Tm9kZSk7XG4gIH1cblxuICBfb25NZWdhTmF2QW5jaG9yTW91c2VsZWF2ZShlKSB7XG4gICAgY29uc3QgbWVnYU5hdkltYWdlID0gZS50YXJnZXRcbiAgICAgIC5jbG9zZXN0KCcubWVnYS1uYXYnKVxuICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdi1pbWFnZSBpbWcnKTtcblxuICAgIGlmICghbWVnYU5hdkltYWdlKSByZXR1cm47XG5cbiAgICBtZWdhTmF2SW1hZ2Uuc2V0QXR0cmlidXRlKCdzcmMnLCBtZWdhTmF2SW1hZ2UuZGF0YXNldC5pbWFnZSk7XG4gICAgbWVnYU5hdkltYWdlLnNldEF0dHJpYnV0ZSgnYWx0JywgbWVnYU5hdkltYWdlLmRhdGFzZXQuYWx0KTtcbiAgfVxuXG4gIF9vbk1vYmlsZU5hdmlnYXRpb25DbGljaygpIHtcbiAgICB0aGlzLl90b2dnbGVNb2JpbGVOYXZpZ2F0aW9uKCk7XG4gIH1cblxuICBfb3BlbkRyb3Bkb3duKHRyaWdnZXJFbCkge1xuICAgIHRyaWdnZXJFbC5jbGFzc0xpc3QuYWRkKCdoYXMtZHJvcGRvd24tLWFjdGl2ZScpO1xuXG4gICAgY29uc3QgbmF2aWdhdGlvblN1Ym1lbnVUb2dnbGUgPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tc3VibWVudS10b2dnbGUnKTtcblxuICAgIGlmICh0aGVtZVV0aWxzLmlzTGVzc1RoYW5MYXJnZSgpKSB7XG4gICAgICBjb25zdCBkcm9wZG93biA9IHRyaWdnZXJFbC5xdWVyeVNlbGVjdG9yKCcubmF2aWdhdGlvbi1zdWJtZW51Jyk7XG4gICAgICB0cmlnZ2VyRWwuY2xhc3NMaXN0LmFkZCgnaGFzLW1vYmlsZS1kcm9wZG93bi0tYWN0aXZlJyk7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QuYWRkKCduYXZpZ2F0aW9uLXN1Ym1lbnUtdmlzaWJsZScpO1xuICAgICAgdGhpcy5fc2V0VGllckhlaWdodCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBtZWdhTmF2ID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdicpO1xuICAgICAgY29uc3QgZHJvcGRvd24gPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignLm5hdmlnYXRpb24tc3VibWVudScpO1xuXG4gICAgICBpZiAobWVnYU5hdikge1xuICAgICAgICBtZWdhTmF2LmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ25hdmlnYXRpb24tc3VibWVudS12aXNpYmxlJyk7XG4gICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZpZ2F0aW9uU3VibWVudVRvZ2dsZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKTtcblxuICAgIHRoaXMuZGV0YWlscyA9IHRyaWdnZXJFbC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1uYXYtZGV0YWlsc10nKTtcbiAgICBpZiAodGhpcy5kZXRhaWxzICYmIHRoZW1lVXRpbHMuaXNMYXJnZSgpKSB7XG4gICAgICB0aGlzLmRldGFpbHMub3BlbiA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgX2Nsb3NlRHJvcGRvd24odHJpZ2dlckVsKSB7XG4gICAgdHJpZ2dlckVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1kcm9wZG93bi0tYWN0aXZlJyk7XG4gICAgdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5oYXMtZHJvcGRvd24sIC5oYXMtbWVnYS1uYXYnKS5mb3JFYWNoKGlubmVyVHJpZ2dlckVsID0+IHRoaXMuX2Nsb3NlRHJvcGRvd24oaW5uZXJUcmlnZ2VyRWwpKTtcblxuICAgIGNvbnN0IGRyb3Bkb3duID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5uYXZpZ2F0aW9uLXN1Ym1lbnUnKTtcbiAgICBjb25zdCBtZWdhTmF2ID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5tZWdhLW5hdicpO1xuICAgIGNvbnN0IG5hdmlnYXRpb25TdWJtZW51VG9nZ2xlID0gdHJpZ2dlckVsLnF1ZXJ5U2VsZWN0b3IoJy5uYXZpZ2F0aW9uLXN1Ym1lbnUtdG9nZ2xlJyk7XG5cbiAgICBpZiAoZHJvcGRvd24pIHtcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ25hdmlnYXRpb24tc3VibWVudS12aXNpYmxlJyk7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgdHJpZ2dlckVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1tb2JpbGUtZHJvcGRvd24tLWFjdGl2ZScpO1xuXG4gICAgaWYgKG1lZ2FOYXYpIHtcbiAgICAgIG1lZ2FOYXYuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIH1cbiAgICB0aGlzLl9zZXRUaWVySGVpZ2h0KCk7XG5cbiAgICBpZiAobmF2aWdhdGlvblN1Ym1lbnVUb2dnbGUpIHtcbiAgICAgIG5hdmlnYXRpb25TdWJtZW51VG9nZ2xlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRldGFpbHMgPSB0cmlnZ2VyRWwucXVlcnlTZWxlY3RvcignW2RhdGEtbmF2LWRldGFpbHNdJyk7XG4gICAgaWYgKHRoaXMuZGV0YWlscyAmJiB0aGVtZVV0aWxzLmlzTGFyZ2UoKSkge1xuICAgICAgdGhpcy5kZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfdG9nZ2xlTW9iaWxlTmF2aWdhdGlvbihmb3JjZSA9IG51bGwpIHtcbiAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ21vYmlsZS1uYXYtb3BlbicpICYmIGZvcmNlICE9PSAnb3BlbicpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdtb2JpbGUtbmF2LW9wZW4nKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbG9jay1zY3JvbGwnKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uV3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2JhY2tncm91bmQnKTtcblxuICAgICAgLy8gQ2xvc2Ugb3BlbmVkIG1lbnVzIG9uIG5hdmlnYXRpb24gY2xvc2VcbiAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmhhcy1kcm9wZG93bi0tYWN0aXZlJykuZm9yRWFjaCh0cmlnZ2VyRWwgPT4gdGhpcy5fY2xvc2VEcm9wZG93bih0cmlnZ2VyRWwpKTtcbiAgICB9IGVsc2UgaWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9iaWxlLW5hdi1vcGVuJykgJiYgZm9yY2UgIT09ICdjbG9zZScpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbW9iaWxlLW5hdi1vcGVuJyk7XG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2xvY2stc2Nyb2xsJyk7XG4gICAgICB0aGlzLm5hdmlnYXRpb25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcbiAgICAgIHRoaXMubmF2aWdhdGlvbldyYXBwZXIuY2xhc3NMaXN0LmFkZCgnYmFja2dyb3VuZCcpO1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJyk7XG4gICAgICB0aGlzLl9zZXRUaWVySGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgX3NldFRpZXJIZWlnaHQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5zdHlsZS5vdmVyZmxvd1kgPSBzY3JvbGw7XG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGVudC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gIH1cblxuICBfc3dhcE1lZ2FOYXZJbWFnZXModGFyZ2V0KSB7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcblxuICAgIGNvbnN0IHsgaW1hZ2UsIGltYWdlQWx0IH0gPSB0YXJnZXQuZGF0YXNldDtcblxuICAgIGlmIChpbWFnZSAmJiAoaW1hZ2UgIT09ICcnKSkge1xuICAgICAgY29uc3QgbWVnYU5hdkltZyA9IHRhcmdldC5jbG9zZXN0KCcubWVnYS1uYXYnKS5xdWVyeVNlbGVjdG9yKCcubWVnYS1uYXYtaW1hZ2UgaW1nJyk7XG5cbiAgICAgIGlmICghbWVnYU5hdkltZykgcmV0dXJuO1xuXG4gICAgICBtZWdhTmF2SW1nLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1hZ2UpO1xuICAgICAgbWVnYU5hdkltZy5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsICcnKTtcbiAgICAgIG1lZ2FOYXZJbWcuc2V0QXR0cmlidXRlKCdhbHQnLCBpbWFnZUFsdCk7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTlUQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./source/scripts/sections/StaticNavigation.js\n");
 
 /***/ }),
 
diff --git a/assets/theme.css.liquid b/assets/theme.css.liquid
index 7745f53..ac0c962 100644
--- a/assets/theme.css.liquid
+++ b/assets/theme.css.liquid
@@ -12301,4 +12301,106 @@ https://apps.shopify.com/coin
 }
 .age-gate__select-wrapper .select-wrapper {
   max-width: none;
+}
+
+/* ── DW hamburger nav + spelled-out wordmark (2026-07) ─────────────────
+   Desktop now uses the same drawer navigation as mobile: the horizontal
+   tab bar is hidden and the hamburger opens the slide-in drawer at every
+   width. Pairs with the forced-mobile gates patched in grid.js
+   (StaticNavigation + StaticHeader navigationContent pick). */
+
+.header-branding .logo-link {
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  text-decoration: none;
+}
+.header-wordmark {
+  font-family: {{ fonts_font_navigation_family }};
+  font-weight: {{ fonts_font_navigation_weight }};
+  font-size: 21px;
+  letter-spacing: 0.22em;
+  text-transform: uppercase;
+  color: {{ settings.navigation-color }};
+  white-space: nowrap;
+  line-height: 1.2;
+}
+@media (max-width: 1079px) {
+  .header-branding-desktop .logo-link {
+    justify-content: center;
+  }
+  .header-wordmark {
+    font-size: 14px;
+    letter-spacing: 0.16em;
+  }
+}
+@media (max-width: 539px) {
+  .header-wordmark {
+    font-size: 11px;
+    letter-spacing: 0.12em;
+  }
+}
+.navigation-mobile .header-branding-mobile .header-wordmark {
+  font-size: 13px;
+  letter-spacing: 0.14em;
+}
+
+@media (min-width: 1080px) {
+  /* hamburger visible upper-left, in flow */
+  .header-content-left {
+    position: static;
+    display: block;
+    transform: none;
+    margin-right: 22px;
+  }
+  .navigation-toggle {
+    display: inline-block;
+  }
+  .navigation-toggle-icon {
+    width: 22px;
+    height: 15px;
+  }
+
+  /* header row becomes flex: [hamburger][logo+wordmark]……[search/cart] */
+  .header-main-content {
+    display: flex;
+    align-items: center;
+  }
+  .header-layout-compact-left .header-branding-desktop,
+  .header-layout-compact-center .header-branding-desktop,
+  .header-layout-default .header-branding-desktop {
+    position: static;
+    width: auto;
+    flex: 0 0 auto;
+    transform: none;
+    padding-top: 20px;
+    padding-bottom: 20px;
+  }
+  .header-layout-compact-left .header-content-right,
+  .header-layout-compact-center .header-content-right,
+  .header-layout-default .header-content-right {
+    position: static;
+    width: auto;
+    flex: 0 0 auto;
+    margin-left: auto;
+    transform: none;
+  }
+
+  /* horizontal tab bar off; drawer on */
+  .navigation.navigation-desktop {
+    display: none !important;
+  }
+  .header-layout-compact-left .navigation-wrapper,
+  .header-layout-compact-center .navigation-wrapper,
+  .header-layout-default .navigation-wrapper {
+    display: block;
+    width: auto;
+  }
+  .navigation.navigation-mobile {
+    display: block;
+    left: 0;
+  }
+  .navigation.navigation-mobile .navigation-submenu-toggle {
+    display: inline-block;
+  }
 }
\ No newline at end of file
diff --git a/sections/header.liquid b/sections/header.liquid
index b651244..d5e628f 100644
--- a/sections/header.liquid
+++ b/sections/header.liquid
@@ -135,6 +135,7 @@
               size: '200x100',
               focal_point: section.settings.logo.presentation.focal_point,
             %}
+            <span class="header-wordmark">Designer&nbsp;Wallcoverings</span>
           {%- else -%}
             <h1>{{- shop.name -}}</h1>
           {%- endif -%}

← 465e38d snapshot: live theme pull before hamburger nav rework  ·  back to Dw Theme Hamburger  ·  drawer branding block visible on desktop (close X fix) e386008 →