{"version":3,"sources":["what-input.js","foundation.core.js","foundation.util.nest.js","foundation.util.keyboard.js","foundation.util.mediaQuery.js","foundation.util.triggers.js","foundation.accordionMenu.js","foundation.accordion.js","tooltipster.bundle.js","jquery.tabs.js","pikaday.js","pikaday.jquery.js","readmore.js","player.min.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClhCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AClxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtVA;AACA;AACA","file":"../dist/libs.js","sourcesContent":["/**\n * what-input - A global utility for tracking the current input method (mouse, keyboard or touch).\n * @version v5.2.12\n * @link https://github.com/ten1seven/what-input\n * @license MIT\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"whatInput\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"whatInput\"] = factory();\n\telse\n\t\troot[\"whatInput\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n\t'use strict';\n\n\tmodule.exports = function () {\n\t /*\n\t * bail out if there is no document or window\n\t * (i.e. in a node/non-DOM environment)\n\t *\n\t * Return a stubbed API instead\n\t */\n\t if (typeof document === 'undefined' || typeof window === 'undefined') {\n\t return {\n\t // always return \"initial\" because no interaction will ever be detected\n\t ask: function ask() {\n\t return 'initial';\n\t },\n\n\t // always return null\n\t element: function element() {\n\t return null;\n\t },\n\n\t // no-op\n\t ignoreKeys: function ignoreKeys() {},\n\n\t // no-op\n\t specificKeys: function specificKeys() {},\n\n\t // no-op\n\t registerOnChange: function registerOnChange() {},\n\n\t // no-op\n\t unRegisterOnChange: function unRegisterOnChange() {}\n\t };\n\t }\n\n\t /*\n\t * variables\n\t */\n\n\t // cache document.documentElement\n\t var docElem = document.documentElement;\n\n\t // currently focused dom element\n\t var currentElement = null;\n\n\t // last used input type\n\t var currentInput = 'initial';\n\n\t // last used input intent\n\t var currentIntent = currentInput;\n\n\t // UNIX timestamp of current event\n\t var currentTimestamp = Date.now();\n\n\t // check for a `data-whatpersist` attribute on either the `html` or `body` elements, defaults to `true`\n\t var shouldPersist = false;\n\n\t // form input types\n\t var formInputs = ['button', 'input', 'select', 'textarea'];\n\n\t // empty array for holding callback functions\n\t var functionList = [];\n\n\t // list of modifier keys commonly used with the mouse and\n\t // can be safely ignored to prevent false keyboard detection\n\t var ignoreMap = [16, // shift\n\t 17, // control\n\t 18, // alt\n\t 91, // Windows key / left Apple cmd\n\t 93 // Windows menu / right Apple cmd\n\t ];\n\n\t var specificMap = [];\n\n\t // mapping of events to input types\n\t var inputMap = {\n\t keydown: 'keyboard',\n\t keyup: 'keyboard',\n\t mousedown: 'mouse',\n\t mousemove: 'mouse',\n\t MSPointerDown: 'pointer',\n\t MSPointerMove: 'pointer',\n\t pointerdown: 'pointer',\n\t pointermove: 'pointer',\n\t touchstart: 'touch',\n\t touchend: 'touch'\n\n\t // boolean: true if the page is being scrolled\n\t };var isScrolling = false;\n\n\t // store current mouse position\n\t var mousePos = {\n\t x: null,\n\t y: null\n\n\t // map of IE 10 pointer events\n\t };var pointerMap = {\n\t 2: 'touch',\n\t 3: 'touch', // treat pen like touch\n\t 4: 'mouse'\n\n\t // check support for passive event listeners\n\t };var supportsPassive = false;\n\n\t try {\n\t var opts = Object.defineProperty({}, 'passive', {\n\t get: function get() {\n\t supportsPassive = true;\n\t }\n\t });\n\n\t window.addEventListener('test', null, opts);\n\t } catch (e) {}\n\t // fail silently\n\n\n\t /*\n\t * set up\n\t */\n\n\t var setUp = function setUp() {\n\t // add correct mouse wheel event mapping to `inputMap`\n\t inputMap[detectWheel()] = 'mouse';\n\n\t addListeners();\n\t };\n\n\t /*\n\t * events\n\t */\n\n\t var addListeners = function addListeners() {\n\t // `pointermove`, `MSPointerMove`, `mousemove` and mouse wheel event binding\n\t // can only demonstrate potential, but not actual, interaction\n\t // and are treated separately\n\t var options = supportsPassive ? { passive: true, capture: true } : true;\n\n\t document.addEventListener('DOMContentLoaded', setPersist, true);\n\n\t // pointer events (mouse, pen, touch)\n\t if (window.PointerEvent) {\n\t window.addEventListener('pointerdown', setInput, true);\n\t window.addEventListener('pointermove', setIntent, true);\n\t } else if (window.MSPointerEvent) {\n\t window.addEventListener('MSPointerDown', setInput, true);\n\t window.addEventListener('MSPointerMove', setIntent, true);\n\t } else {\n\t // mouse events\n\t window.addEventListener('mousedown', setInput, true);\n\t window.addEventListener('mousemove', setIntent, true);\n\n\t // touch events\n\t if ('ontouchstart' in window) {\n\t window.addEventListener('touchstart', setInput, options);\n\t window.addEventListener('touchend', setInput, true);\n\t }\n\t }\n\n\t // mouse wheel\n\t window.addEventListener(detectWheel(), setIntent, options);\n\n\t // keyboard events\n\t window.addEventListener('keydown', setInput, true);\n\t window.addEventListener('keyup', setInput, true);\n\n\t // focus events\n\t window.addEventListener('focusin', setElement, true);\n\t window.addEventListener('focusout', clearElement, true);\n\t };\n\n\t // checks if input persistence should happen and\n\t // get saved state from session storage if true (defaults to `false`)\n\t var setPersist = function setPersist() {\n\t shouldPersist = !(docElem.getAttribute('data-whatpersist') === 'false' || document.body.getAttribute('data-whatpersist') === 'false');\n\n\t if (shouldPersist) {\n\t // check for session variables and use if available\n\t try {\n\t if (window.sessionStorage.getItem('what-input')) {\n\t currentInput = window.sessionStorage.getItem('what-input');\n\t }\n\n\t if (window.sessionStorage.getItem('what-intent')) {\n\t currentIntent = window.sessionStorage.getItem('what-intent');\n\t }\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\n\t // always run these so at least `initial` state is set\n\t doUpdate('input');\n\t doUpdate('intent');\n\t };\n\n\t // checks conditions before updating new input\n\t var setInput = function setInput(event) {\n\t var eventKey = event.which;\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t var ignoreMatch = !specificMap.length && ignoreMap.indexOf(eventKey) === -1;\n\n\t var specificMatch = specificMap.length && specificMap.indexOf(eventKey) !== -1;\n\n\t var shouldUpdate = value === 'keyboard' && eventKey && (ignoreMatch || specificMatch) || value === 'mouse' || value === 'touch';\n\n\t // prevent touch detection from being overridden by event execution order\n\t if (validateTouch(value)) {\n\t shouldUpdate = false;\n\t }\n\n\t if (shouldUpdate && currentInput !== value) {\n\t currentInput = value;\n\n\t persistInput('input', currentInput);\n\t doUpdate('input');\n\t }\n\n\t if (shouldUpdate && currentIntent !== value) {\n\t // preserve intent for keyboard interaction with form fields\n\t var activeElem = document.activeElement;\n\t var notFormInput = activeElem && activeElem.nodeName && (formInputs.indexOf(activeElem.nodeName.toLowerCase()) === -1 || activeElem.nodeName.toLowerCase() === 'button' && !checkClosest(activeElem, 'form'));\n\n\t if (notFormInput) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t }\n\t };\n\n\t // updates the doc and `inputTypes` array with new input\n\t var doUpdate = function doUpdate(which) {\n\t docElem.setAttribute('data-what' + which, which === 'input' ? currentInput : currentIntent);\n\n\t fireFunctions(which);\n\t };\n\n\t // updates input intent for `mousemove` and `pointermove`\n\t var setIntent = function setIntent(event) {\n\t var value = inputMap[event.type];\n\n\t if (value === 'pointer') {\n\t value = pointerType(event);\n\t }\n\n\t // test to see if `mousemove` happened relative to the screen to detect scrolling versus mousemove\n\t detectScrolling(event);\n\n\t // only execute if scrolling isn't happening\n\t if ((!isScrolling && !validateTouch(value) || isScrolling && event.type === 'wheel' || event.type === 'mousewheel' || event.type === 'DOMMouseScroll') && currentIntent !== value) {\n\t currentIntent = value;\n\n\t persistInput('intent', currentIntent);\n\t doUpdate('intent');\n\t }\n\t };\n\n\t var setElement = function setElement(event) {\n\t if (!event.target.nodeName) {\n\t // If nodeName is undefined, clear the element\n\t // This can happen if click inside an element.\n\t clearElement();\n\t return;\n\t }\n\n\t currentElement = event.target.nodeName.toLowerCase();\n\t docElem.setAttribute('data-whatelement', currentElement);\n\n\t if (event.target.classList && event.target.classList.length) {\n\t docElem.setAttribute('data-whatclasses', event.target.classList.toString().replace(' ', ','));\n\t }\n\t };\n\n\t var clearElement = function clearElement() {\n\t currentElement = null;\n\n\t docElem.removeAttribute('data-whatelement');\n\t docElem.removeAttribute('data-whatclasses');\n\t };\n\n\t var persistInput = function persistInput(which, value) {\n\t if (shouldPersist) {\n\t try {\n\t window.sessionStorage.setItem('what-' + which, value);\n\t } catch (e) {\n\t // fail silently\n\t }\n\t }\n\t };\n\n\t /*\n\t * utilities\n\t */\n\n\t var pointerType = function pointerType(event) {\n\t if (typeof event.pointerType === 'number') {\n\t return pointerMap[event.pointerType];\n\t } else {\n\t // treat pen like touch\n\t return event.pointerType === 'pen' ? 'touch' : event.pointerType;\n\t }\n\t };\n\n\t // prevent touch detection from being overridden by event execution order\n\t var validateTouch = function validateTouch(value) {\n\t var timestamp = Date.now();\n\n\t var touchIsValid = value === 'mouse' && currentInput === 'touch' && timestamp - currentTimestamp < 200;\n\n\t currentTimestamp = timestamp;\n\n\t return touchIsValid;\n\t };\n\n\t // detect version of mouse wheel event to use\n\t // via https://developer.mozilla.org/en-US/docs/Web/API/Element/wheel_event\n\t var detectWheel = function detectWheel() {\n\t var wheelType = null;\n\n\t // Modern browsers support \"wheel\"\n\t if ('onwheel' in document.createElement('div')) {\n\t wheelType = 'wheel';\n\t } else {\n\t // Webkit and IE support at least \"mousewheel\"\n\t // or assume that remaining browsers are older Firefox\n\t wheelType = document.onmousewheel !== undefined ? 'mousewheel' : 'DOMMouseScroll';\n\t }\n\n\t return wheelType;\n\t };\n\n\t // runs callback functions\n\t var fireFunctions = function fireFunctions(type) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].type === type) {\n\t functionList[i].fn.call(undefined, type === 'input' ? currentInput : currentIntent);\n\t }\n\t }\n\t };\n\n\t // finds matching element in an object\n\t var objPos = function objPos(match) {\n\t for (var i = 0, len = functionList.length; i < len; i++) {\n\t if (functionList[i].fn === match) {\n\t return i;\n\t }\n\t }\n\t };\n\n\t var detectScrolling = function detectScrolling(event) {\n\t if (mousePos.x !== event.screenX || mousePos.y !== event.screenY) {\n\t isScrolling = false;\n\n\t mousePos.x = event.screenX;\n\t mousePos.y = event.screenY;\n\t } else {\n\t isScrolling = true;\n\t }\n\t };\n\n\t // manual version of `closest()`\n\t var checkClosest = function checkClosest(elem, tag) {\n\t var ElementPrototype = window.Element.prototype;\n\n\t if (!ElementPrototype.matches) {\n\t ElementPrototype.matches = ElementPrototype.msMatchesSelector || ElementPrototype.webkitMatchesSelector;\n\t }\n\n\t if (!ElementPrototype.closest) {\n\t do {\n\t if (elem.matches(tag)) {\n\t return elem;\n\t }\n\n\t elem = elem.parentElement || elem.parentNode;\n\t } while (elem !== null && elem.nodeType === 1);\n\n\t return null;\n\t } else {\n\t return elem.closest(tag);\n\t }\n\t };\n\n\t /*\n\t * init\n\t */\n\n\t // don't start script unless browser cuts the mustard\n\t // (also passes if polyfills are used)\n\t if ('addEventListener' in window && Array.prototype.indexOf) {\n\t setUp();\n\t }\n\n\t /*\n\t * api\n\t */\n\n\t return {\n\t // returns string: the current input type\n\t // opt: 'intent'|'input'\n\t // 'input' (default): returns the same value as the `data-whatinput` attribute\n\t // 'intent': includes `data-whatintent` value if it's different than `data-whatinput`\n\t ask: function ask(opt) {\n\t return opt === 'intent' ? currentIntent : currentInput;\n\t },\n\n\t // returns string: the currently focused element or null\n\t element: function element() {\n\t return currentElement;\n\t },\n\n\t // overwrites ignored keys with provided array\n\t ignoreKeys: function ignoreKeys(arr) {\n\t ignoreMap = arr;\n\t },\n\n\t // overwrites specific char keys to update on\n\t specificKeys: function specificKeys(arr) {\n\t specificMap = arr;\n\t },\n\n\t // attach functions to input and intent \"events\"\n\t // funct: function to fire on change\n\t // eventType: 'input'|'intent'\n\t registerOnChange: function registerOnChange(fn, eventType) {\n\t functionList.push({\n\t fn: fn,\n\t type: eventType || 'input'\n\t });\n\t },\n\n\t unRegisterOnChange: function unRegisterOnChange(fn) {\n\t var position = objPos(fn);\n\n\t if (position || position === 0) {\n\t functionList.splice(position, 1);\n\t }\n\t },\n\n\t clearStorage: function clearStorage() {\n\t window.sessionStorage.clear();\n\t }\n\t };\n\t}();\n\n/***/ })\n/******/ ])\n});\n;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"jquery\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"] = factory(root[\"jQuery\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE_jquery__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.core.js\":\n/*!*******************************!*\\\n !*** ./js/foundation.core.js ***!\n \\*******************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* binding */ Foundation; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ \"./js/foundation.core.utils.js\");\n/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ \"./js/foundation.util.mediaQuery.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n\n\nvar FOUNDATION_VERSION = '6.8.1';\n\n// Global Foundation object\n// This is attached to the window, or used as a module for AMD/Browserify\nvar Foundation = {\n version: FOUNDATION_VERSION,\n /**\n * Stores initialized plugins.\n */\n _plugins: {},\n /**\n * Stores generated unique ids for plugin instances\n */\n _uuids: [],\n /**\n * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing.\n * @param {Object} plugin - The constructor of the plugin.\n */\n plugin: function plugin(_plugin, name) {\n // Object key to use when adding to global Foundation object\n // Examples: Foundation.Reveal, Foundation.OffCanvas\n var className = name || functionName(_plugin);\n // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin\n // Examples: data-reveal, data-off-canvas\n var attrName = hyphenate(className);\n\n // Add to the Foundation object and the plugins list (for reflowing)\n this._plugins[attrName] = this[className] = _plugin;\n },\n /**\n * @function\n * Populates the _uuids array with pointers to each individual plugin instance.\n * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls.\n * Also fires the initialization event for each plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @param {String} name - the name of the plugin, passed as a camelCased string.\n * @fires Plugin#init\n */\n registerPlugin: function registerPlugin(plugin, name) {\n var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase();\n plugin.uuid = (0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__.GetYoDigits)(6, pluginName);\n if (!plugin.$element.attr(\"data-\".concat(pluginName))) {\n plugin.$element.attr(\"data-\".concat(pluginName), plugin.uuid);\n }\n if (!plugin.$element.data('zfPlugin')) {\n plugin.$element.data('zfPlugin', plugin);\n }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n plugin.$element.trigger(\"init.zf.\".concat(pluginName));\n this._uuids.push(plugin.uuid);\n return;\n },\n /**\n * @function\n * Removes the plugins uuid from the _uuids array.\n * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute.\n * Also fires the destroyed event for the plugin, consolidating repetitive code.\n * @param {Object} plugin - an instance of a plugin, usually `this` in context.\n * @fires Plugin#destroyed\n */\n unregisterPlugin: function unregisterPlugin(plugin) {\n var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor));\n this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1);\n plugin.$element.removeAttr(\"data-\".concat(pluginName)).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */.trigger(\"destroyed.zf.\".concat(pluginName));\n for (var prop in plugin) {\n if (typeof plugin[prop] === 'function') {\n plugin[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n\n return;\n },\n /**\n * @function\n * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc.\n * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'`\n * @default If no argument is passed, reflow all currently active plugins.\n */\n reInit: function reInit(plugins) {\n var isJQ = plugins instanceof (jquery__WEBPACK_IMPORTED_MODULE_0___default());\n try {\n if (isJQ) {\n plugins.each(function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('zfPlugin')._init();\n });\n } else {\n var type = _typeof(plugins),\n _this = this,\n fns = {\n 'object': function object(plgs) {\n plgs.forEach(function (p) {\n p = hyphenate(p);\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + p + ']').foundation('_init');\n });\n },\n 'string': function string() {\n plugins = hyphenate(plugins);\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + plugins + ']').foundation('_init');\n },\n 'undefined': function undefined() {\n this.object(Object.keys(_this._plugins));\n }\n };\n fns[type](plugins);\n }\n } catch (err) {\n console.error(err);\n } finally {\n return plugins;\n }\n },\n /**\n * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized.\n * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object.\n * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything.\n */\n reflow: function reflow(elem, plugins) {\n // If plugins is undefined, just grab everything\n if (typeof plugins === 'undefined') {\n plugins = Object.keys(this._plugins);\n }\n // If plugins is a string, convert it to an array with one item\n else if (typeof plugins === 'string') {\n plugins = [plugins];\n }\n var _this = this;\n\n // Iterate through each plugin\n jquery__WEBPACK_IMPORTED_MODULE_0___default().each(plugins, function (i, name) {\n // Get the current plugin\n var plugin = _this._plugins[name];\n\n // Localize the search to all elements inside elem, as well as elem itself, unless elem === document\n var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(elem).find('[data-' + name + ']').addBack('[data-' + name + ']').filter(function () {\n return typeof jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data(\"zfPlugin\") === 'undefined';\n });\n\n // For each plugin found, initialize it\n $elem.each(function () {\n var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n opts = {\n reflow: true\n };\n if ($el.attr('data-options')) {\n $el.attr('data-options').split(';').forEach(function (option) {\n var opt = option.split(':').map(function (el) {\n return el.trim();\n });\n if (opt[0]) opts[opt[0]] = parseValue(opt[1]);\n });\n }\n try {\n $el.data('zfPlugin', new plugin(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), opts));\n } catch (er) {\n console.error(er);\n } finally {\n return;\n }\n });\n });\n },\n getFnName: functionName,\n addToJquery: function addToJquery() {\n // TODO: consider not making this a jQuery function\n // TODO: need way to reflow vs. re-initialize\n /**\n * The Foundation jQuery method.\n * @param {String|Array} method - An action to perform on the current jQuery object.\n */\n var foundation = function foundation(method) {\n var type = _typeof(method),\n $noJS = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.no-js');\n if ($noJS.length) {\n $noJS.removeClass('no-js');\n }\n if (type === 'undefined') {\n //needs to initialize the Foundation object, or an individual plugin.\n _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__.MediaQuery._init();\n Foundation.reflow(this);\n } else if (type === 'string') {\n //an individual method to invoke on a plugin or group of plugins\n var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary\n var plugClass = this.data('zfPlugin'); //determine the class of plugin\n\n if (typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined') {\n //make sure both the class and method exist\n if (this.length === 1) {\n //if there's only one, call it directly.\n plugClass[method].apply(plugClass, args);\n } else {\n this.each(function (i, el) {\n //otherwise loop through the jQuery collection and invoke the method on each\n plugClass[method].apply(jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).data('zfPlugin'), args);\n });\n }\n } else {\n //error for no class or no method\n throw new ReferenceError(\"We're sorry, '\" + method + \"' is not an available method for \" + (plugClass ? functionName(plugClass) : 'this element') + '.');\n }\n } else {\n //error for invalid argument type\n throw new TypeError(\"We're sorry, \".concat(type, \" is not a valid parameter. You must use a string representing the method you wish to invoke.\"));\n }\n return this;\n };\n (jquery__WEBPACK_IMPORTED_MODULE_0___default().fn).foundation = foundation;\n return (jquery__WEBPACK_IMPORTED_MODULE_0___default());\n }\n};\nFoundation.util = {\n /**\n * Function for applying a debounce effect to a function call.\n * @function\n * @param {Function} func - Function to be called at end of timeout.\n * @param {Number} delay - Time in ms to delay the call of `func`.\n * @returns function\n */\n throttle: function throttle(func, delay) {\n var timer = null;\n return function () {\n var context = this,\n args = arguments;\n if (timer === null) {\n timer = setTimeout(function () {\n func.apply(context, args);\n timer = null;\n }, delay);\n }\n };\n }\n};\nwindow.Foundation = Foundation;\n\n// Polyfill for requestAnimationFrame\n(function () {\n if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () {\n return new Date().getTime();\n };\n var vendors = ['webkit', 'moz'];\n for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {\n var vp = vendors[i];\n window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];\n window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame'];\n }\n if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {\n var lastTime = 0;\n window.requestAnimationFrame = function (callback) {\n var now = Date.now();\n var nextTime = Math.max(lastTime + 16, now);\n return setTimeout(function () {\n callback(lastTime = nextTime);\n }, nextTime - now);\n };\n window.cancelAnimationFrame = clearTimeout;\n }\n /**\n * Polyfill for performance.now, required by rAF\n */\n if (!window.performance || !window.performance.now) {\n window.performance = {\n start: Date.now(),\n now: function now() {\n return Date.now() - this.start;\n }\n };\n }\n})();\nif (!Function.prototype.bind) {\n /* eslint-disable no-extend-native */\n Function.prototype.bind = function (oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function fNOP() {},\n fBound = function fBound() {\n return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n if (this.prototype) {\n // native functions don't have a prototype\n fNOP.prototype = this.prototype;\n }\n fBound.prototype = new fNOP();\n return fBound;\n };\n}\n// Polyfill to get the name of a function in IE9\nfunction functionName(fn) {\n if (typeof Function.prototype.name === 'undefined') {\n var funcNameRegex = /function\\s([^(]{1,})\\(/;\n var results = funcNameRegex.exec(fn.toString());\n return results && results.length > 1 ? results[1].trim() : \"\";\n } else if (typeof fn.prototype === 'undefined') {\n return fn.constructor.name;\n } else {\n return fn.prototype.constructor.name;\n }\n}\nfunction parseValue(str) {\n if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str);\n return str;\n}\n// Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n\n/***/ }),\n\n/***/ \"./js/foundation.core.plugin.js\":\n/*!**************************************!*\\\n !*** ./js/foundation.core.plugin.js ***!\n \\**************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Plugin: function() { return /* binding */ Plugin; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core.utils */ \"./js/foundation.core.utils.js\");\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\n// Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST\n// {function} _setup (replaces previous constructor),\n// {function} _destroy (replaces previous destroy)\nvar Plugin = /*#__PURE__*/function () {\n function Plugin(element, options) {\n _classCallCheck(this, Plugin);\n this._setup(element, options);\n var pluginName = getPluginName(this);\n this.uuid = (0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_0__.GetYoDigits)(6, pluginName);\n if (!this.$element.attr(\"data-\".concat(pluginName))) {\n this.$element.attr(\"data-\".concat(pluginName), this.uuid);\n }\n if (!this.$element.data('zfPlugin')) {\n this.$element.data('zfPlugin', this);\n }\n /**\n * Fires when the plugin has initialized.\n * @event Plugin#init\n */\n this.$element.trigger(\"init.zf.\".concat(pluginName));\n }\n _createClass(Plugin, [{\n key: \"destroy\",\n value: function destroy() {\n this._destroy();\n var pluginName = getPluginName(this);\n this.$element.removeAttr(\"data-\".concat(pluginName)).removeData('zfPlugin')\n /**\n * Fires when the plugin has been destroyed.\n * @event Plugin#destroyed\n */.trigger(\"destroyed.zf.\".concat(pluginName));\n for (var prop in this) {\n if (this.hasOwnProperty(prop)) {\n this[prop] = null; //clean up script to prep for garbage collection.\n }\n }\n }\n }]);\n return Plugin;\n}(); // Convert PascalCase to kebab-case\n// Thank you: http://stackoverflow.com/a/8955580\nfunction hyphenate(str) {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction getPluginName(obj) {\n return hyphenate(obj.className);\n}\n\n\n/***/ }),\n\n/***/ \"./js/foundation.core.utils.js\":\n/*!*************************************!*\\\n !*** ./js/foundation.core.utils.js ***!\n \\*************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ GetYoDigits: function() { return /* binding */ GetYoDigits; },\n/* harmony export */ RegExpEscape: function() { return /* binding */ RegExpEscape; },\n/* harmony export */ ignoreMousedisappear: function() { return /* binding */ ignoreMousedisappear; },\n/* harmony export */ onLoad: function() { return /* binding */ onLoad; },\n/* harmony export */ rtl: function() { return /* binding */ rtl; },\n/* harmony export */ transitionend: function() { return /* binding */ transitionend; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\n\n// Core Foundation Utilities, utilized in a number of places.\n\n/**\n * Returns a boolean for RTL support\n */\nfunction rtl() {\n return jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('dir') === 'rtl';\n}\n\n/**\n * returns a random base-36 uid with namespacing\n * @function\n * @param {Number} length - number of random base-36 digits desired. Increase for more random strings.\n * @param {String} namespace - name of plugin to be incorporated in uid, optional.\n * @default {String} '' - if no plugin name is provided, nothing is appended to the uid.\n * @returns {String} - unique id\n */\nfunction GetYoDigits() {\n var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6;\n var namespace = arguments.length > 1 ? arguments[1] : undefined;\n var str = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyz';\n var charsLength = chars.length;\n for (var i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * charsLength)];\n }\n return namespace ? \"\".concat(str, \"-\").concat(namespace) : str;\n}\n\n/**\n * Escape a string so it can be used as a regexp pattern\n * @function\n * @see https://stackoverflow.com/a/9310752/4317384\n *\n * @param {String} str - string to escape.\n * @returns {String} - escaped string\n */\nfunction RegExpEscape(str) {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n}\nfunction transitionend($elem) {\n var transitions = {\n 'transition': 'transitionend',\n 'WebkitTransition': 'webkitTransitionEnd',\n 'MozTransition': 'transitionend',\n 'OTransition': 'otransitionend'\n };\n var elem = document.createElement('div'),\n end;\n for (var transition in transitions) {\n if (typeof elem.style[transition] !== 'undefined') {\n end = transitions[transition];\n }\n }\n if (end) {\n return end;\n } else {\n setTimeout(function () {\n $elem.triggerHandler('transitionend', [$elem]);\n }, 1);\n return 'transitionend';\n }\n}\n\n/**\n * Return an event type to listen for window load.\n *\n * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered.\n * If `handler` is passed, attach it to the event on `$elem`.\n * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself.\n * @function\n *\n * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed.\n * @param {Function} [] handler - function to attach to the event.\n * @returns {String} - event type that should or will be triggered.\n */\nfunction onLoad($elem, handler) {\n var didLoad = document.readyState === 'complete';\n var eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad';\n var cb = function cb() {\n return $elem.triggerHandler(eventType);\n };\n if ($elem) {\n if (handler) $elem.one(eventType, handler);\n if (didLoad) setTimeout(cb);else jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', cb);\n }\n return eventType;\n}\n\n/**\n * Retuns an handler for the `mouseleave` that ignore disappeared mouses.\n *\n * If the mouse \"disappeared\" from the document (like when going on a browser UI element, See https://git.io/zf-11410),\n * the event is ignored.\n * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window\n * (like by switching to an other window with [Alt]+[Tab]).\n * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document\n * outside of the element it left.\n *\n * @function\n *\n * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch.\n * @param {Object} [] options - object of options:\n * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows.\n * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left.\n * @returns {Function} - filtered handler to use to listen on the `mouseleave` event.\n */\nfunction ignoreMousedisappear(handler) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$ignoreLeaveWindo = _ref.ignoreLeaveWindow,\n ignoreLeaveWindow = _ref$ignoreLeaveWindo === void 0 ? false : _ref$ignoreLeaveWindo,\n _ref$ignoreReappear = _ref.ignoreReappear,\n ignoreReappear = _ref$ignoreReappear === void 0 ? false : _ref$ignoreReappear;\n return function leaveEventHandler(eLeave) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n var callback = handler.bind.apply(handler, [this, eLeave].concat(rest));\n\n // The mouse left: call the given callback if the mouse entered elsewhere\n if (eLeave.relatedTarget !== null) {\n return callback();\n }\n\n // Otherwise, check if the mouse actually left the window.\n // In firefox if the user switched between windows, the window sill have the focus by the time\n // the event is triggered. We have to debounce the event to test this case.\n setTimeout(function leaveEventDebouncer() {\n if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) {\n return callback();\n }\n\n // Otherwise, wait for the mouse to reeapear outside of the element,\n if (!ignoreReappear) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).one('mouseenter', function reenterEventHandler(eReenter) {\n if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(eLeave.currentTarget).has(eReenter.target).length) {\n // Fill where the mouse finally entered.\n eLeave.relatedTarget = eReenter.target;\n callback();\n }\n });\n }\n }, 0);\n };\n}\n\n\n/***/ }),\n\n/***/ \"./js/foundation.util.mediaQuery.js\":\n/*!******************************************!*\\\n !*** ./js/foundation.util.mediaQuery.js ***!\n \\******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MediaQuery: function() { return /* binding */ MediaQuery; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n// Default set of media queries\n// const defaultQueries = {\n// 'default' : 'only screen',\n// landscape : 'only screen and (orientation: landscape)',\n// portrait : 'only screen and (orientation: portrait)',\n// retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n// 'only screen and (min--moz-device-pixel-ratio: 2),' +\n// 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n// 'only screen and (min-device-pixel-ratio: 2),' +\n// 'only screen and (min-resolution: 192dpi),' +\n// 'only screen and (min-resolution: 2dppx)'\n// };\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n}());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n current: '',\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init: function _init() {\n // make sure the initialization is only done once when calling _init() several times\n if (this.isInitialized === true) {\n return this;\n } else {\n this.isInitialized = true;\n }\n var self = this;\n var $meta = jquery__WEBPACK_IMPORTED_MODULE_0___default()('meta.foundation-mq');\n if (!$meta.length) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('').appendTo(document.head);\n }\n var extractedStyles = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.foundation-mq').css('font-family');\n var namedQueries;\n namedQueries = parseStyleToObject(extractedStyles);\n self.queries = []; // reset\n\n for (var key in namedQueries) {\n if (namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: \"only screen and (min-width: \".concat(namedQueries[key], \")\")\n });\n }\n }\n this.current = this._getCurrentSize();\n this._watcher();\n },\n /**\n * Reinitializes the media query helper.\n * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization.\n * @function\n * @private\n */\n _reInit: function _reInit() {\n this.isInitialized = false;\n this._init();\n },\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast: function atLeast(size) {\n var query = this.get(size);\n if (query) {\n return window.matchMedia(query).matches;\n }\n return false;\n },\n /**\n * Checks if the screen is within the given breakpoint.\n * If smaller than the breakpoint of larger than its upper limit it returns false.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise.\n */\n only: function only(size) {\n return size === this._getCurrentSize();\n },\n /**\n * Checks if the screen is within a breakpoint or smaller.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger.\n */\n upTo: function upTo(size) {\n var nextSize = this.next(size);\n\n // If the next breakpoint does not match, the screen is smaller than\n // the upper limit of this breakpoint.\n if (nextSize) {\n return !this.atLeast(nextSize);\n }\n\n // If there is no next breakpoint, the \"size\" breakpoint does not have\n // an upper limit and the screen will always be within it or smaller.\n return true;\n },\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is: function is(size) {\n var parts = size.trim().split(' ').filter(function (p) {\n return !!p.length;\n });\n var _parts = _slicedToArray(parts, 2),\n bpSize = _parts[0],\n _parts$ = _parts[1],\n bpModifier = _parts$ === void 0 ? '' : _parts$;\n\n // Only the breakpont\n if (bpModifier === 'only') {\n return this.only(bpSize);\n }\n // At least the breakpoint (included)\n if (!bpModifier || bpModifier === 'up') {\n return this.atLeast(bpSize);\n }\n // Up to the breakpoint (included)\n if (bpModifier === 'down') {\n return this.upTo(bpSize);\n }\n throw new Error(\"\\n Invalid breakpoint passed to MediaQuery.is().\\n Expected a breakpoint name formatted like \\\" \\\", got \\\"\".concat(size, \"\\\".\\n \"));\n },\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get: function get(size) {\n for (var i in this.queries) {\n if (this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n return null;\n },\n /**\n * Get the breakpoint following the given breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint.\n * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one.\n */\n next: function next(size) {\n var _this = this;\n var queryIndex = this.queries.findIndex(function (q) {\n return _this._getQueryName(q) === size;\n });\n if (queryIndex === -1) {\n throw new Error(\"\\n Unknown breakpoint \\\"\".concat(size, \"\\\" passed to MediaQuery.next().\\n Ensure it is present in your Sass \\\"$breakpoints\\\" setting.\\n \"));\n }\n var nextQuery = this.queries[queryIndex + 1];\n return nextQuery ? nextQuery.name : null;\n },\n /**\n * Returns the name of the breakpoint related to the given value.\n * @function\n * @private\n * @param {String|Object} value - Breakpoint name or query object.\n * @returns {String} Name of the breakpoint.\n */\n _getQueryName: function _getQueryName(value) {\n if (typeof value === 'string') return value;\n if (_typeof(value) === 'object') return value.name;\n throw new TypeError(\"\\n Invalid value passed to MediaQuery._getQueryName().\\n Expected a breakpoint name (String) or a breakpoint query (Object), got \\\"\".concat(value, \"\\\" (\").concat(_typeof(value), \")\\n \"));\n },\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize: function _getCurrentSize() {\n var matched;\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n return matched && this._getQueryName(matched);\n },\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher: function _watcher() {\n var _this2 = this;\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('resize.zf.trigger', function () {\n var newSize = _this2._getCurrentSize(),\n currentSize = _this2.current;\n if (newSize !== currentSize) {\n // Change the current media query\n _this2.current = newSize;\n\n // Broadcast the media query change on the window\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n}\n\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!***********************************************!*\\\n !*** ./js/entries/plugins/foundation.core.js ***!\n \\***********************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation; },\n/* harmony export */ GetYoDigits: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.GetYoDigits; },\n/* harmony export */ Plugin: function() { return /* reexport safe */ _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__.Plugin; },\n/* harmony export */ RegExpEscape: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.RegExpEscape; },\n/* harmony export */ ignoreMousedisappear: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.ignoreMousedisappear; },\n/* harmony export */ onLoad: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.onLoad; },\n/* harmony export */ rtl: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.rtl; },\n/* harmony export */ transitionend: function() { return /* reexport safe */ _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.transitionend; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.core */ \"./js/foundation.core.js\");\n/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../foundation.core.plugin */ \"./js/foundation.core.plugin.js\");\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../foundation.core.utils */ \"./js/foundation.core.utils.js\");\n// --- Foundation Core API ---\n// Initialize Foundation and add some utilities to its public API for backward compatibility.\n// Please note that every utility do not have to be added to the core API.\n\n\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.addToJquery((jquery__WEBPACK_IMPORTED_MODULE_0___default()));\n\n// Every plugin depends on plugin now, we can include that on the core for the\n// script inclusion path.\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.Plugin = _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__.Plugin;\n\n// These are now separated out, but historically were a part of this module,\n// and since this is here for backwards compatibility we include them in\n// this entry.\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.rtl = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.rtl;\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.GetYoDigits = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.GetYoDigits;\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.transitionend = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.transitionend;\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.RegExpEscape = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.RegExpEscape;\n_foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation.onLoad = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.onLoad;\nwindow.Foundation = _foundation_core__WEBPACK_IMPORTED_MODULE_1__.Foundation;\n\n// --- Foundation Core exports ---\n// Export \"Plugin\" and all core utilities, since the `foundation.core` entry plays the role of\n// all core source files.\n\n\n\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.core.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.nest\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.util.nest.js\":\n/*!************************************!*\\\n !*** ./js/foundation.util.nest.js ***!\n \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Nest: function() { return /* binding */ Nest; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n\nvar Nest = {\n Feather: function Feather(menu) {\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf';\n menu.attr('role', 'menubar');\n menu.find('a').attr({\n 'role': 'menuitem'\n });\n var items = menu.find('li').attr({\n 'role': 'none'\n }),\n subMenuClass = \"is-\".concat(type, \"-submenu\"),\n subItemClass = \"\".concat(subMenuClass, \"-item\"),\n hasSubClass = \"is-\".concat(type, \"-submenu-parent\"),\n applyAria = type !== 'accordion'; // Accordions handle their own ARIA attriutes.\n\n items.each(function () {\n var $item = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n $sub = $item.children('ul');\n if ($sub.length) {\n $item.addClass(hasSubClass);\n if (applyAria) {\n var firstItem = $item.children('a:first');\n firstItem.attr({\n 'aria-haspopup': true,\n 'aria-label': firstItem.attr('aria-label') || firstItem.text()\n });\n // Note: Drilldowns behave differently in how they hide, and so need\n // additional attributes. We should look if this possibly over-generalized\n // utility (Nest) is appropriate when we rework menus in 6.4\n if (type === 'drilldown') {\n $item.attr({\n 'aria-expanded': false\n });\n }\n }\n $sub.addClass(\"submenu \".concat(subMenuClass)).attr({\n 'data-submenu': '',\n 'role': 'menubar'\n });\n if (type === 'drilldown') {\n $sub.attr({\n 'aria-hidden': true\n });\n }\n }\n if ($item.parent('[data-submenu]').length) {\n $item.addClass(\"is-submenu-item \".concat(subItemClass));\n }\n });\n return;\n },\n Burn: function Burn(menu, type) {\n var\n //items = menu.find('li'),\n subMenuClass = \"is-\".concat(type, \"-submenu\"),\n subItemClass = \"\".concat(subMenuClass, \"-item\"),\n hasSubClass = \"is-\".concat(type, \"-submenu-parent\");\n menu.find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li').removeClass(\"\".concat(subMenuClass, \" \").concat(subItemClass, \" \").concat(hasSubClass, \" is-submenu-item submenu is-active\")).removeAttr('data-submenu').css('display', '');\n }\n};\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!****************************************************!*\\\n !*** ./js/entries/plugins/foundation.util.nest.js ***!\n \\****************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; },\n/* harmony export */ Nest: function() { return /* reexport safe */ _foundation_util_nest__WEBPACK_IMPORTED_MODULE_1__.Nest; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.util.nest */ \"./js/foundation.util.nest.js\");\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.Nest = _foundation_util_nest__WEBPACK_IMPORTED_MODULE_1__.Nest;\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.util.nest.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.keyboard\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.util.keyboard.js\":\n/*!****************************************!*\\\n !*** ./js/foundation.util.keyboard.js ***!\n \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Keyboard: function() { return /* binding */ Keyboard; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ \"./foundation.core\");\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__);\n/*******************************************\n * *\n * This util was created by Marius Olbertz *\n * Please thank Marius on GitHub /owlbertz *\n * or the web http://www.mariusolbertz.de/ *\n * *\n ******************************************/\n\n\n\nvar keyCodes = {\n 9: 'TAB',\n 13: 'ENTER',\n 27: 'ESCAPE',\n 32: 'SPACE',\n 35: 'END',\n 36: 'HOME',\n 37: 'ARROW_LEFT',\n 38: 'ARROW_UP',\n 39: 'ARROW_RIGHT',\n 40: 'ARROW_DOWN'\n};\nvar commands = {};\n\n// Functions pulled out to be referenceable from internals\nfunction findFocusable($element) {\n if (!$element) {\n return false;\n }\n return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () {\n if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':visible') || jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('tabindex') < 0) {\n return false;\n } //only have visible elements and those that have a tabindex greater or equal 0\n return true;\n }).sort(function (a, b) {\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(a).attr('tabindex') === jquery__WEBPACK_IMPORTED_MODULE_0___default()(b).attr('tabindex')) {\n return 0;\n }\n var aTabIndex = parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()(a).attr('tabindex'), 10),\n bTabIndex = parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()(b).attr('tabindex'), 10);\n // Undefined is treated the same as 0\n if (typeof jquery__WEBPACK_IMPORTED_MODULE_0___default()(a).attr('tabindex') === 'undefined' && bTabIndex > 0) {\n return 1;\n }\n if (typeof jquery__WEBPACK_IMPORTED_MODULE_0___default()(b).attr('tabindex') === 'undefined' && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex === 0 && bTabIndex > 0) {\n return 1;\n }\n if (bTabIndex === 0 && aTabIndex > 0) {\n return -1;\n }\n if (aTabIndex < bTabIndex) {\n return -1;\n }\n if (aTabIndex > bTabIndex) {\n return 1;\n }\n });\n}\nfunction parseKey(event) {\n var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase();\n\n // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events\n key = key.replace(/\\W+/, '');\n if (event.shiftKey) key = \"SHIFT_\".concat(key);\n if (event.ctrlKey) key = \"CTRL_\".concat(key);\n if (event.altKey) key = \"ALT_\".concat(key);\n\n // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`)\n key = key.replace(/_$/, '');\n return key;\n}\nvar Keyboard = {\n keys: getKeyCodes(keyCodes),\n /**\n * Parses the (keyboard) event and returns a String that represents its key\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n * @param {Event} event - the event generated by the event handler\n * @return String key - String that represents the key pressed\n */\n parseKey: parseKey,\n /**\n * Handles the given (keyboard) event\n * @param {Event} event - the event generated by the event handler\n * @param {String} component - Foundation component's name, e.g. Slider or Reveal\n * @param {Objects} functions - collection of functions that are to be executed\n */\n handleKey: function handleKey(event, component, functions) {\n var commandList = commands[component],\n keyCode = this.parseKey(event),\n cmds,\n command,\n fn;\n if (!commandList) return console.warn('Component not defined!');\n\n // Ignore the event if it was already handled\n if (event.zfIsKeyHandled === true) return;\n\n // This component does not differentiate between ltr and rtl\n if (typeof commandList.ltr === 'undefined') {\n cmds = commandList; // use plain list\n } else {\n // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa\n if ((0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__.rtl)()) cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default().extend({}, commandList.ltr, commandList.rtl);else cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default().extend({}, commandList.rtl, commandList.ltr);\n }\n command = cmds[keyCode];\n fn = functions[command];\n // Execute the handler if found\n if (fn && typeof fn === 'function') {\n var returnValue = fn.apply();\n\n // Mark the event as \"handled\" to prevent future handlings\n event.zfIsKeyHandled = true;\n\n // Execute function when event was handled\n if (functions.handled || typeof functions.handled === 'function') {\n functions.handled(returnValue);\n }\n } else {\n // Execute function when event was not handled\n if (functions.unhandled || typeof functions.unhandled === 'function') {\n functions.unhandled();\n }\n }\n },\n /**\n * Finds all focusable elements within the given `$element`\n * @param {jQuery} $element - jQuery object to search within\n * @return {jQuery} $focusable - all focusable elements within `$element`\n */\n\n findFocusable: findFocusable,\n /**\n * Returns the component name name\n * @param {Object} component - Foundation component, e.g. Slider or Reveal\n * @return String componentName\n */\n register: function register(componentName, cmds) {\n commands[componentName] = cmds;\n },\n // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context?\n //\n /**\n * Traps the focus in the given element.\n * @param {jQuery} $element jQuery object to trap the foucs into.\n */\n trapFocus: function trapFocus($element) {\n var $focusable = findFocusable($element),\n $firstFocusable = $focusable.eq(0),\n $lastFocusable = $focusable.eq(-1);\n $element.on('keydown.zf.trapfocus', function (event) {\n if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') {\n event.preventDefault();\n $firstFocusable.focus();\n } else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') {\n event.preventDefault();\n $lastFocusable.focus();\n }\n });\n },\n /**\n * Releases the trapped focus from the given element.\n * @param {jQuery} $element jQuery object to release the focus for.\n */\n releaseFocus: function releaseFocus($element) {\n $element.off('keydown.zf.trapfocus');\n }\n};\n\n/*\n * Constants for easier comparing.\n * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE\n */\nfunction getKeyCodes(kcs) {\n var k = {};\n for (var kc in kcs) {\n if (kcs.hasOwnProperty(kc)) k[kcs[kc]] = kcs[kc];\n }\n return k;\n}\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************************!*\\\n !*** ./js/entries/plugins/foundation.util.keyboard.js ***!\n \\********************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; },\n/* harmony export */ Keyboard: function() { return /* reexport safe */ _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__.Keyboard; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.util.keyboard */ \"./js/foundation.util.keyboard.js\");\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.Keyboard = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__.Keyboard;\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.util.keyboard.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.mediaQuery\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.util.mediaQuery.js\":\n/*!******************************************!*\\\n !*** ./js/foundation.util.mediaQuery.js ***!\n \\******************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MediaQuery: function() { return /* binding */ MediaQuery; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n// Default set of media queries\n// const defaultQueries = {\n// 'default' : 'only screen',\n// landscape : 'only screen and (orientation: landscape)',\n// portrait : 'only screen and (orientation: portrait)',\n// retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n// 'only screen and (min--moz-device-pixel-ratio: 2),' +\n// 'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n// 'only screen and (min-device-pixel-ratio: 2),' +\n// 'only screen and (min-resolution: 192dpi),' +\n// 'only screen and (min-resolution: 2dppx)'\n// };\n\n// matchMedia() polyfill - Test a CSS media type/query in JS.\n// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license\n/* eslint-disable */\nwindow.matchMedia || (window.matchMedia = function () {\n \"use strict\";\n\n // For browsers that support matchMedium api such as IE 9 and webkit\n var styleMedia = window.styleMedia || window.media;\n\n // For those that don't support matchMedium\n if (!styleMedia) {\n var style = document.createElement('style'),\n script = document.getElementsByTagName('script')[0],\n info = null;\n style.type = 'text/css';\n style.id = 'matchmediajs-test';\n if (!script) {\n document.head.appendChild(style);\n } else {\n script.parentNode.insertBefore(style, script);\n }\n\n // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers\n info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle;\n styleMedia = {\n matchMedium: function matchMedium(media) {\n var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';\n\n // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers\n if (style.styleSheet) {\n style.styleSheet.cssText = text;\n } else {\n style.textContent = text;\n }\n\n // Test if media query is true or false\n return info.width === '1px';\n }\n };\n }\n return function (media) {\n return {\n matches: styleMedia.matchMedium(media || 'all'),\n media: media || 'all'\n };\n };\n}());\n/* eslint-enable */\n\nvar MediaQuery = {\n queries: [],\n current: '',\n /**\n * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher.\n * @function\n * @private\n */\n _init: function _init() {\n // make sure the initialization is only done once when calling _init() several times\n if (this.isInitialized === true) {\n return this;\n } else {\n this.isInitialized = true;\n }\n var self = this;\n var $meta = jquery__WEBPACK_IMPORTED_MODULE_0___default()('meta.foundation-mq');\n if (!$meta.length) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('').appendTo(document.head);\n }\n var extractedStyles = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.foundation-mq').css('font-family');\n var namedQueries;\n namedQueries = parseStyleToObject(extractedStyles);\n self.queries = []; // reset\n\n for (var key in namedQueries) {\n if (namedQueries.hasOwnProperty(key)) {\n self.queries.push({\n name: key,\n value: \"only screen and (min-width: \".concat(namedQueries[key], \")\")\n });\n }\n }\n this.current = this._getCurrentSize();\n this._watcher();\n },\n /**\n * Reinitializes the media query helper.\n * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization.\n * @function\n * @private\n */\n _reInit: function _reInit() {\n this.isInitialized = false;\n this._init();\n },\n /**\n * Checks if the screen is at least as wide as a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller.\n */\n atLeast: function atLeast(size) {\n var query = this.get(size);\n if (query) {\n return window.matchMedia(query).matches;\n }\n return false;\n },\n /**\n * Checks if the screen is within the given breakpoint.\n * If smaller than the breakpoint of larger than its upper limit it returns false.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise.\n */\n only: function only(size) {\n return size === this._getCurrentSize();\n },\n /**\n * Checks if the screen is within a breakpoint or smaller.\n * @function\n * @param {String} size - Name of the breakpoint to check.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger.\n */\n upTo: function upTo(size) {\n var nextSize = this.next(size);\n\n // If the next breakpoint does not match, the screen is smaller than\n // the upper limit of this breakpoint.\n if (nextSize) {\n return !this.atLeast(nextSize);\n }\n\n // If there is no next breakpoint, the \"size\" breakpoint does not have\n // an upper limit and the screen will always be within it or smaller.\n return true;\n },\n /**\n * Checks if the screen matches to a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method.\n * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not.\n */\n is: function is(size) {\n var parts = size.trim().split(' ').filter(function (p) {\n return !!p.length;\n });\n var _parts = _slicedToArray(parts, 2),\n bpSize = _parts[0],\n _parts$ = _parts[1],\n bpModifier = _parts$ === void 0 ? '' : _parts$;\n\n // Only the breakpont\n if (bpModifier === 'only') {\n return this.only(bpSize);\n }\n // At least the breakpoint (included)\n if (!bpModifier || bpModifier === 'up') {\n return this.atLeast(bpSize);\n }\n // Up to the breakpoint (included)\n if (bpModifier === 'down') {\n return this.upTo(bpSize);\n }\n throw new Error(\"\\n Invalid breakpoint passed to MediaQuery.is().\\n Expected a breakpoint name formatted like \\\" \\\", got \\\"\".concat(size, \"\\\".\\n \"));\n },\n /**\n * Gets the media query of a breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint to get.\n * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist.\n */\n get: function get(size) {\n for (var i in this.queries) {\n if (this.queries.hasOwnProperty(i)) {\n var query = this.queries[i];\n if (size === query.name) return query.value;\n }\n }\n return null;\n },\n /**\n * Get the breakpoint following the given breakpoint.\n * @function\n * @param {String} size - Name of the breakpoint.\n * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one.\n */\n next: function next(size) {\n var _this = this;\n var queryIndex = this.queries.findIndex(function (q) {\n return _this._getQueryName(q) === size;\n });\n if (queryIndex === -1) {\n throw new Error(\"\\n Unknown breakpoint \\\"\".concat(size, \"\\\" passed to MediaQuery.next().\\n Ensure it is present in your Sass \\\"$breakpoints\\\" setting.\\n \"));\n }\n var nextQuery = this.queries[queryIndex + 1];\n return nextQuery ? nextQuery.name : null;\n },\n /**\n * Returns the name of the breakpoint related to the given value.\n * @function\n * @private\n * @param {String|Object} value - Breakpoint name or query object.\n * @returns {String} Name of the breakpoint.\n */\n _getQueryName: function _getQueryName(value) {\n if (typeof value === 'string') return value;\n if (_typeof(value) === 'object') return value.name;\n throw new TypeError(\"\\n Invalid value passed to MediaQuery._getQueryName().\\n Expected a breakpoint name (String) or a breakpoint query (Object), got \\\"\".concat(value, \"\\\" (\").concat(_typeof(value), \")\\n \"));\n },\n /**\n * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one).\n * @function\n * @private\n * @returns {String} Name of the current breakpoint.\n */\n _getCurrentSize: function _getCurrentSize() {\n var matched;\n for (var i = 0; i < this.queries.length; i++) {\n var query = this.queries[i];\n if (window.matchMedia(query.value).matches) {\n matched = query;\n }\n }\n return matched && this._getQueryName(matched);\n },\n /**\n * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes.\n * @function\n * @private\n */\n _watcher: function _watcher() {\n var _this2 = this;\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('resize.zf.trigger', function () {\n var newSize = _this2._getCurrentSize(),\n currentSize = _this2.current;\n if (newSize !== currentSize) {\n // Change the current media query\n _this2.current = newSize;\n\n // Broadcast the media query change on the window\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).trigger('changed.zf.mediaquery', [newSize, currentSize]);\n }\n });\n }\n};\n\n// Thank you: https://github.com/sindresorhus/query-string\nfunction parseStyleToObject(str) {\n var styleObject = {};\n if (typeof str !== 'string') {\n return styleObject;\n }\n str = str.trim().slice(1, -1); // browsers re-quote string style values\n\n if (!str) {\n return styleObject;\n }\n styleObject = str.split('&').reduce(function (ret, param) {\n var parts = param.replace(/\\+/g, ' ').split('=');\n var key = parts[0];\n var val = parts[1];\n key = decodeURIComponent(key);\n\n // missing `=` should be `null`:\n // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n val = typeof val === 'undefined' ? null : decodeURIComponent(val);\n if (!ret.hasOwnProperty(key)) {\n ret[key] = val;\n } else if (Array.isArray(ret[key])) {\n ret[key].push(val);\n } else {\n ret[key] = [ret[key], val];\n }\n return ret;\n }, {});\n return styleObject;\n}\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!**********************************************************!*\\\n !*** ./js/entries/plugins/foundation.util.mediaQuery.js ***!\n \\**********************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; },\n/* harmony export */ MediaQuery: function() { return /* reexport safe */ _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__.MediaQuery; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.util.mediaQuery */ \"./js/foundation.util.mediaQuery.js\");\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.MediaQuery = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__.MediaQuery;\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.MediaQuery._init();\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.util.mediaQuery.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.motion\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\", \"./foundation.util.motion\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.motion\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.triggers\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"], root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.motion\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.util.triggers.js\":\n/*!****************************************!*\\\n !*** ./js/foundation.util.triggers.js ***!\n \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Triggers: function() { return /* binding */ Triggers; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ \"./foundation.core\");\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ \"./foundation.util.motion\");\n/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n\n\nvar MutationObserver = function () {\n var prefixes = ['WebKit', 'Moz', 'O', 'Ms', ''];\n for (var i = 0; i < prefixes.length; i++) {\n if (\"\".concat(prefixes[i], \"MutationObserver\") in window) {\n return window[\"\".concat(prefixes[i], \"MutationObserver\")];\n }\n }\n return false;\n}();\nvar triggers = function triggers(el, type) {\n el.data(type).split(' ').forEach(function (id) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(id))[type === 'close' ? 'trigger' : 'triggerHandler'](\"\".concat(type, \".zf.trigger\"), [el]);\n });\n};\nvar Triggers = {\n Listeners: {\n Basic: {},\n Global: {}\n },\n Initializers: {}\n};\nTriggers.Listeners.Basic = {\n openListener: function openListener() {\n triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'open');\n },\n closeListener: function closeListener() {\n var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('close');\n if (id) {\n triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'close');\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('close.zf.trigger');\n }\n },\n toggleListener: function toggleListener() {\n var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle');\n if (id) {\n triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'toggle');\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('toggle.zf.trigger');\n }\n },\n closeableListener: function closeableListener(e) {\n var animation = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('closable');\n\n // Only close the first closable element. See https://git.io/zf-7833\n e.stopPropagation();\n if (animation !== '') {\n _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__.Motion.animateOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), animation, function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('closed.zf');\n });\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).fadeOut().trigger('closed.zf');\n }\n },\n toggleFocusListener: function toggleFocusListener() {\n var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle-focus');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(id)).triggerHandler('toggle.zf.trigger', [jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)]);\n }\n};\n\n// Elements with [data-open] will reveal a plugin that supports it when clicked.\nTriggers.Initializers.addOpenListener = function ($elem) {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener);\n $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener);\n};\n\n// Elements with [data-close] will close a plugin that supports it when clicked.\n// If used without a value on [data-close], the event will bubble, allowing it to close a parent component.\nTriggers.Initializers.addCloseListener = function ($elem) {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener);\n $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener);\n};\n\n// Elements with [data-toggle] will toggle a plugin that supports it when clicked.\nTriggers.Initializers.addToggleListener = function ($elem) {\n $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener);\n $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener);\n};\n\n// Elements with [data-closable] will respond to close.zf.trigger events.\nTriggers.Initializers.addCloseableListener = function ($elem) {\n $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener);\n $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener);\n};\n\n// Elements with [data-toggle-focus] will respond to coming in and out of focus\nTriggers.Initializers.addToggleFocusListener = function ($elem) {\n $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener);\n $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener);\n};\n\n// More Global/complex listeners and triggers\nTriggers.Listeners.Global = {\n resizeListener: function resizeListener($nodes) {\n if (!MutationObserver) {\n //fallback for IE 9\n $nodes.each(function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('resizeme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a resize event\n $nodes.attr('data-events', \"resize\");\n },\n scrollListener: function scrollListener($nodes) {\n if (!MutationObserver) {\n //fallback for IE 9\n $nodes.each(function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('scrollme.zf.trigger');\n });\n }\n //trigger all listening elements and signal a scroll event\n $nodes.attr('data-events', \"scroll\");\n },\n closeMeListener: function closeMeListener(e, pluginId) {\n var plugin = e.namespace.split('.')[0];\n var plugins = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-\".concat(plugin, \"]\")).not(\"[data-yeti-box=\\\"\".concat(pluginId, \"\\\"]\"));\n plugins.each(function () {\n var _this = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n _this.triggerHandler('close.zf.trigger', [_this]);\n });\n }\n};\n\n// Global, parses whole document.\nTriggers.Initializers.addClosemeListener = function (pluginName) {\n var yetiBoxes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-yeti-box]'),\n plugNames = ['dropdown', 'tooltip', 'reveal'];\n if (pluginName) {\n if (typeof pluginName === 'string') {\n plugNames.push(pluginName);\n } else if (_typeof(pluginName) === 'object' && typeof pluginName[0] === 'string') {\n plugNames = plugNames.concat(pluginName);\n } else {\n console.error('Plugin names must be strings');\n }\n }\n if (yetiBoxes.length) {\n var listeners = plugNames.map(function (name) {\n return \"closeme.zf.\".concat(name);\n }).join(' ');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener);\n }\n};\nfunction debounceGlobalListener(debounce, trigger, listener) {\n var timer,\n args = Array.prototype.slice.call(arguments, 3);\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on(trigger, function () {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(function () {\n listener.apply(null, args);\n }, debounce || 10); //default time to emit scroll event\n });\n}\n\nTriggers.Initializers.addResizeListener = function (debounce) {\n var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-resize]');\n if ($nodes.length) {\n debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes);\n }\n};\nTriggers.Initializers.addScrollListener = function (debounce) {\n var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scroll]');\n if ($nodes.length) {\n debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes);\n }\n};\nTriggers.Initializers.addMutationEventsListener = function ($elem) {\n if (!MutationObserver) {\n return false;\n }\n var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]');\n\n //element callback\n var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) {\n var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(mutationRecordsList[0].target);\n\n //trigger the event handler for the element depending on type\n switch (mutationRecordsList[0].type) {\n case \"attributes\":\n if ($target.attr(\"data-events\") === \"scroll\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]);\n }\n if ($target.attr(\"data-events\") === \"resize\" && mutationRecordsList[0].attributeName === \"data-events\") {\n $target.triggerHandler('resizeme.zf.trigger', [$target]);\n }\n if (mutationRecordsList[0].attributeName === \"style\") {\n $target.closest(\"[data-mutate]\").attr(\"data-events\", \"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n }\n break;\n case \"childList\":\n $target.closest(\"[data-mutate]\").attr(\"data-events\", \"mutate\");\n $target.closest(\"[data-mutate]\").triggerHandler('mutateme.zf.trigger', [$target.closest(\"[data-mutate]\")]);\n break;\n default:\n return false;\n //nothing\n }\n };\n\n if ($nodes.length) {\n //for each element that needs to listen for resizing, scrolling, or mutation add a single observer\n for (var i = 0; i <= $nodes.length - 1; i++) {\n var elementObserver = new MutationObserver(listeningElementsMutation);\n elementObserver.observe($nodes[i], {\n attributes: true,\n childList: true,\n characterData: false,\n subtree: true,\n attributeFilter: [\"data-events\", \"style\"]\n });\n }\n }\n};\nTriggers.Initializers.addSimpleListeners = function () {\n var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n Triggers.Initializers.addOpenListener($document);\n Triggers.Initializers.addCloseListener($document);\n Triggers.Initializers.addToggleListener($document);\n Triggers.Initializers.addCloseableListener($document);\n Triggers.Initializers.addToggleFocusListener($document);\n};\nTriggers.Initializers.addGlobalListeners = function () {\n var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document);\n Triggers.Initializers.addMutationEventsListener($document);\n Triggers.Initializers.addResizeListener(250);\n Triggers.Initializers.addScrollListener();\n Triggers.Initializers.addClosemeListener();\n};\nTriggers.init = function (__, Foundation) {\n (0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__.onLoad)(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n if ((jquery__WEBPACK_IMPORTED_MODULE_0___default().triggersInitialized) !== true) {\n Triggers.Initializers.addSimpleListeners();\n Triggers.Initializers.addGlobalListeners();\n (jquery__WEBPACK_IMPORTED_MODULE_0___default().triggersInitialized) = true;\n }\n });\n if (Foundation) {\n Foundation.Triggers = Triggers;\n // Legacy included to be backwards compatible for now.\n Foundation.IHearYou = Triggers.Initializers.addGlobalListeners;\n }\n};\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"./foundation.util.motion\":\n/*!********************************************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.util.motion\"],\"amd\":\"./foundation.util.motion\",\"commonjs\":\"./foundation.util.motion\",\"commonjs2\":\"./foundation.util.motion\"} ***!\n \\********************************************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_motion__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************************!*\\\n !*** ./js/entries/plugins/foundation.util.triggers.js ***!\n \\********************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; },\n/* harmony export */ Triggers: function() { return /* reexport safe */ _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_2__.Triggers; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../foundation.util.triggers */ \"./js/foundation.util.triggers.js\");\n\n\n\n_foundation_util_triggers__WEBPACK_IMPORTED_MODULE_2__.Triggers.init((jquery__WEBPACK_IMPORTED_MODULE_1___default()), _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation);\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.util.triggers.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.keyboard\"), require(\"./foundation.util.nest\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\", \"./foundation.util.keyboard\", \"./foundation.util.nest\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.keyboard\"), require(\"./foundation.util.nest\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.accordionMenu\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"], root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.keyboard\"], root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.nest\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__, __WEBPACK_EXTERNAL_MODULE__foundation_util_nest__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.accordionMenu.js\":\n/*!****************************************!*\\\n !*** ./js/foundation.accordionMenu.js ***!\n \\****************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AccordionMenu: function() { return /* binding */ AccordionMenu; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ \"./foundation.util.keyboard\");\n/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.nest */ \"./foundation.util.nest\");\n/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.plugin */ \"./foundation.core\");\n/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n\n/**\n * AccordionMenu module.\n * @module foundation.accordionMenu\n * @requires foundation.util.keyboard\n * @requires foundation.util.nest\n */\nvar AccordionMenu = /*#__PURE__*/function (_Plugin) {\n _inherits(AccordionMenu, _Plugin);\n var _super = _createSuper(AccordionMenu);\n function AccordionMenu() {\n _classCallCheck(this, AccordionMenu);\n return _super.apply(this, arguments);\n }\n _createClass(AccordionMenu, [{\n key: \"_setup\",\n value:\n /**\n * Creates a new instance of an accordion menu.\n * @class\n * @name AccordionMenu\n * @fires AccordionMenu#init\n * @param {jQuery} element - jQuery object to make into an accordion menu.\n * @param {Object} options - Overrides to the default plugin settings.\n */\n function _setup(element, options) {\n this.$element = element;\n this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default().extend({}, AccordionMenu.defaults, this.$element.data(), options);\n this.className = 'AccordionMenu'; // ie9 back compat\n\n this._init();\n _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__.Keyboard.register('AccordionMenu', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_RIGHT': 'open',\n 'ARROW_UP': 'up',\n 'ARROW_DOWN': 'down',\n 'ARROW_LEFT': 'close',\n 'ESCAPE': 'closeAll'\n });\n }\n\n /**\n * Initializes the accordion menu by hiding all nested menus.\n * @private\n */\n }, {\n key: \"_init\",\n value: function _init() {\n _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__.Nest.Feather(this.$element, 'accordion');\n var _this = this;\n this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem');\n this.$element.attr({\n 'aria-multiselectable': this.options.multiOpen\n });\n this.$menuLinks = this.$element.find('.is-accordion-submenu-parent');\n this.$menuLinks.each(function () {\n var linkId = this.id || (0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.GetYoDigits)(6, 'acc-menu-link'),\n $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n $sub = $elem.children('[data-submenu]'),\n subId = $sub[0].id || (0,_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.GetYoDigits)(6, 'acc-menu'),\n isActive = $sub.hasClass('is-active');\n if (_this.options.parentLink) {\n var $anchor = $elem.children('a');\n $anchor.clone().prependTo($sub).wrap('
  • ');\n }\n if (_this.options.submenuToggle) {\n $elem.addClass('has-submenu-toggle');\n $elem.children('a').after('');\n } else {\n $elem.attr({\n 'aria-controls': subId,\n 'aria-expanded': isActive,\n 'id': linkId\n });\n }\n $sub.attr({\n 'aria-labelledby': linkId,\n 'aria-hidden': !isActive,\n 'role': 'group',\n 'id': subId\n });\n });\n var initPanes = this.$element.find('.is-active');\n if (initPanes.length) {\n initPanes.each(function () {\n _this.down(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this));\n });\n }\n this._events();\n }\n\n /**\n * Adds event handlers for items within the menu.\n * @private\n */\n }, {\n key: \"_events\",\n value: function _events() {\n var _this = this;\n this.$element.find('li').each(function () {\n var $submenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]');\n if ($submenu.length) {\n if (_this.options.submenuToggle) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function () {\n _this.toggle($submenu);\n });\n } else {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) {\n e.preventDefault();\n _this.toggle($submenu);\n });\n }\n }\n }).on('keydown.zf.accordionMenu', function (e) {\n var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this),\n $elements = $element.parent('ul').children('li'),\n $prevElement,\n $nextElement,\n $target = $element.children('[data-submenu]');\n $elements.each(function (i) {\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) {\n $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first();\n $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first();\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]:visible').length) {\n // has open sub menu\n $nextElement = $element.find('li:first-child').find('a').first();\n }\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':first-child')) {\n // is first element of sub menu\n $prevElement = $element.parents('li').first().find('a').first();\n } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) {\n // if previous element has open sub menu\n $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first();\n }\n if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':last-child')) {\n // is last element of sub menu\n $nextElement = $element.parents('li').first().next('li').find('a').first();\n }\n return;\n }\n });\n _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__.Keyboard.handleKey(e, 'AccordionMenu', {\n open: function open() {\n if ($target.is(':hidden')) {\n _this.down($target);\n $target.find('li').first().find('a').first().focus();\n }\n },\n close: function close() {\n if ($target.length && !$target.is(':hidden')) {\n // close active sub of this item\n _this.up($target);\n } else if ($element.parent('[data-submenu]').length) {\n // close currently open sub\n _this.up($element.parent('[data-submenu]'));\n $element.parents('li').first().find('a').first().focus();\n }\n },\n up: function up() {\n $prevElement.focus();\n return true;\n },\n down: function down() {\n $nextElement.focus();\n return true;\n },\n toggle: function toggle() {\n if (_this.options.submenuToggle) {\n return false;\n }\n if ($element.children('[data-submenu]').length) {\n _this.toggle($element.children('[data-submenu]'));\n return true;\n }\n },\n closeAll: function closeAll() {\n _this.hideAll();\n },\n handled: function handled(preventDefault) {\n if (preventDefault) {\n e.preventDefault();\n }\n }\n });\n }); //.attr('tabindex', 0);\n }\n\n /**\n * Closes all panes of the menu.\n * @function\n */\n }, {\n key: \"hideAll\",\n value: function hideAll() {\n this.up(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Opens all panes of the menu.\n * @function\n */\n }, {\n key: \"showAll\",\n value: function showAll() {\n this.down(this.$element.find('[data-submenu]'));\n }\n\n /**\n * Toggles the open/close state of a submenu.\n * @function\n * @param {jQuery} $target - the submenu to toggle\n */\n }, {\n key: \"toggle\",\n value: function toggle($target) {\n if (!$target.is(':animated')) {\n if (!$target.is(':hidden')) {\n this.up($target);\n } else {\n this.down($target);\n }\n }\n }\n\n /**\n * Opens the sub-menu defined by `$target`.\n * @param {jQuery} $target - Sub-menu to open.\n * @fires AccordionMenu#down\n */\n }, {\n key: \"down\",\n value: function down($target) {\n var _this2 = this;\n // If having multiple submenus active is disabled, close all the submenus\n // that are not parents or children of the targeted submenu.\n if (!this.options.multiOpen) {\n // The \"branch\" of the targetted submenu, from the component root to\n // the active submenus nested in it.\n var $targetBranch = $target.parentsUntil(this.$element).add($target).add($target.find('.is-active'));\n // All the active submenus that are not in the branch.\n var $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch);\n this.up($othersActiveSubmenus);\n }\n $target.addClass('is-active').attr({\n 'aria-hidden': false\n });\n if (this.options.submenuToggle) {\n $target.prev('.submenu-toggle').attr({\n 'aria-expanded': true\n });\n } else {\n $target.parent('.is-accordion-submenu-parent').attr({\n 'aria-expanded': true\n });\n }\n $target.slideDown(this.options.slideSpeed, function () {\n /**\n * Fires when the menu is done opening.\n * @event AccordionMenu#down\n */\n _this2.$element.trigger('down.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well.\n * @param {jQuery} $target - Sub-menu to close.\n * @fires AccordionMenu#up\n */\n }, {\n key: \"up\",\n value: function up($target) {\n var _this3 = this;\n var $submenus = $target.find('[data-submenu]');\n var $allmenus = $target.add($submenus);\n $submenus.slideUp(0);\n $allmenus.removeClass('is-active').attr('aria-hidden', true);\n if (this.options.submenuToggle) {\n $allmenus.prev('.submenu-toggle').attr('aria-expanded', false);\n } else {\n $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false);\n }\n $target.slideUp(this.options.slideSpeed, function () {\n /**\n * Fires when the menu is done collapsing up.\n * @event AccordionMenu#up\n */\n _this3.$element.trigger('up.zf.accordionMenu', [$target]);\n });\n }\n\n /**\n * Destroys an instance of accordion menu.\n * @fires AccordionMenu#destroyed\n */\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n this.$element.find('[data-submenu]').slideDown(0).css('display', '');\n this.$element.find('a').off('click.zf.accordionMenu');\n this.$element.find('[data-is-parent-link]').detach();\n if (this.options.submenuToggle) {\n this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle');\n this.$element.find('.submenu-toggle').remove();\n }\n _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__.Nest.Burn(this.$element, 'accordion');\n }\n }]);\n return AccordionMenu;\n}(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__.Plugin);\nAccordionMenu.defaults = {\n /**\n * Adds the parent link to the submenu.\n * @option\n * @type {boolean}\n * @default false\n */\n parentLink: false,\n /**\n * Amount of time to animate the opening of a submenu in ms.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Adds a separate submenu toggle button. This allows the parent item to have a link.\n * @option\n * @example true\n */\n submenuToggle: false,\n /**\n * The text used for the submenu toggle if enabled. This is used for screen readers only.\n * @option\n * @example true\n */\n submenuToggleText: 'Toggle menu',\n /**\n * Allow the menu to have multiple open panes.\n * @option\n * @type {boolean}\n * @default true\n */\n multiOpen: true\n};\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"./foundation.util.keyboard\":\n/*!****************************************************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.util.keyboard\"],\"amd\":\"./foundation.util.keyboard\",\"commonjs\":\"./foundation.util.keyboard\",\"commonjs2\":\"./foundation.util.keyboard\"} ***!\n \\****************************************************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__;\n\n/***/ }),\n\n/***/ \"./foundation.util.nest\":\n/*!************************************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.util.nest\"],\"amd\":\"./foundation.util.nest\",\"commonjs\":\"./foundation.util.nest\",\"commonjs2\":\"./foundation.util.nest\"} ***!\n \\************************************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_nest__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!********************************************************!*\\\n !*** ./js/entries/plugins/foundation.accordionMenu.js ***!\n \\********************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AccordionMenu: function() { return /* reexport safe */ _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_1__.AccordionMenu; },\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.accordionMenu */ \"./js/foundation.accordionMenu.js\");\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.plugin(_foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_1__.AccordionMenu, 'AccordionMenu');\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.accordionMenu.js.map","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.keyboard\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"./foundation.core\", \"jquery\", \"./foundation.util.keyboard\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"__FOUNDATION_EXTERNAL__\"] = factory(require(\"./foundation.core\"), require(\"jquery\"), require(\"./foundation.util.keyboard\"));\n\telse\n\t\troot[\"__FOUNDATION_EXTERNAL__\"] = root[\"__FOUNDATION_EXTERNAL__\"] || {}, root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.accordion\"] = factory(root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.core\"], root[\"jQuery\"], root[\"__FOUNDATION_EXTERNAL__\"][\"foundation.util.keyboard\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__foundation_core__, __WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__) {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./js/foundation.accordion.js\":\n/*!************************************!*\\\n !*** ./js/foundation.accordion.js ***!\n \\************************************/\n/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {\n\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accordion: function() { return /* binding */ Accordion; }\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ \"./foundation.core\");\n/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.keyboard */ \"./foundation.util.keyboard\");\n/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\n\n\n\n\n/**\n * Accordion module.\n * @module foundation.accordion\n * @requires foundation.util.keyboard\n */\nvar Accordion = /*#__PURE__*/function (_Plugin) {\n _inherits(Accordion, _Plugin);\n var _super = _createSuper(Accordion);\n function Accordion() {\n _classCallCheck(this, Accordion);\n return _super.apply(this, arguments);\n }\n _createClass(Accordion, [{\n key: \"_setup\",\n value:\n /**\n * Creates a new instance of an accordion.\n * @class\n * @name Accordion\n * @fires Accordion#init\n * @param {jQuery} element - jQuery object to make into an accordion.\n * @param {Object} options - a plain object with settings to override the default options.\n */\n function _setup(element, options) {\n this.$element = element;\n this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default().extend({}, Accordion.defaults, this.$element.data(), options);\n this.className = 'Accordion'; // ie9 back compat\n this._init();\n _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__.Keyboard.register('Accordion', {\n 'ENTER': 'toggle',\n 'SPACE': 'toggle',\n 'ARROW_DOWN': 'next',\n 'ARROW_UP': 'previous',\n 'HOME': 'first',\n 'END': 'last'\n });\n }\n\n /**\n * Initializes the accordion by animating the preset active pane(s).\n * @private\n */\n }, {\n key: \"_init\",\n value: function _init() {\n var _this2 = this;\n this._isInitializing = true;\n this.$tabs = this.$element.children('[data-accordion-item]');\n this.$tabs.each(function (idx, el) {\n var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el),\n $content = $el.children('[data-tab-content]'),\n id = $content[0].id || (0,_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__.GetYoDigits)(6, 'accordion'),\n linkId = el.id ? \"\".concat(el.id, \"-label\") : \"\".concat(id, \"-label\");\n $el.find('a:first').attr({\n 'aria-controls': id,\n 'id': linkId,\n 'aria-expanded': false\n });\n $content.attr({\n 'role': 'region',\n 'aria-labelledby': linkId,\n 'aria-hidden': true,\n 'id': id\n });\n });\n var $initActive = this.$element.find('.is-active').children('[data-tab-content]');\n if ($initActive.length) {\n // Save up the initial hash to return to it later when going back in history\n this._initialAnchor = $initActive.prev('a').attr('href');\n this._openSingleTab($initActive);\n }\n this._checkDeepLink = function () {\n var anchor = window.location.hash;\n if (!anchor.length) {\n // If we are still initializing and there is no anchor, then there is nothing to do\n if (_this2._isInitializing) return;\n // Otherwise, move to the initial anchor\n if (_this2._initialAnchor) anchor = _this2._initialAnchor;\n }\n var $anchor = anchor && jquery__WEBPACK_IMPORTED_MODULE_0___default()(anchor);\n var $link = anchor && _this2.$element.find(\"[href$=\\\"\".concat(anchor, \"\\\"]\"));\n // Whether the anchor element that has been found is part of this element\n var isOwnAnchor = !!($anchor.length && $link.length);\n if (isOwnAnchor) {\n // If there is an anchor for the hash, open it (if not already active)\n if ($anchor && $link && $link.length) {\n if (!$link.parent('[data-accordion-item]').hasClass('is-active')) {\n _this2._openSingleTab($anchor);\n }\n }\n // Otherwise, close everything\n else {\n _this2._closeAllTabs();\n }\n\n // Roll up a little to show the titles\n if (_this2.options.deepLinkSmudge) {\n (0,_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__.onLoad)(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () {\n var offset = _this2.$element.offset();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({\n scrollTop: offset.top - _this2.options.deepLinkSmudgeOffset\n }, _this2.options.deepLinkSmudgeDelay);\n });\n }\n\n /**\n * Fires when the plugin has deeplinked at pageload\n * @event Accordion#deeplink\n */\n _this2.$element.trigger('deeplink.zf.accordion', [$link, $anchor]);\n }\n };\n\n //use browser to open a tab, if it exists in this tabset\n if (this.options.deepLink) {\n this._checkDeepLink();\n }\n this._events();\n this._isInitializing = false;\n }\n\n /**\n * Adds event handlers for items within the accordion.\n * @private\n */\n }, {\n key: \"_events\",\n value: function _events() {\n var _this = this;\n this.$tabs.each(function () {\n var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n var $tabContent = $elem.children('[data-tab-content]');\n if ($tabContent.length) {\n $elem.children('a').off('click.zf.accordion keydown.zf.accordion').on('click.zf.accordion', function (e) {\n e.preventDefault();\n _this.toggle($tabContent);\n }).on('keydown.zf.accordion', function (e) {\n _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_2__.Keyboard.handleKey(e, 'Accordion', {\n toggle: function toggle() {\n _this.toggle($tabContent);\n },\n next: function next() {\n var $a = $elem.next().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n previous: function previous() {\n var $a = $elem.prev().find('a').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n first: function first() {\n var $a = _this.$tabs.first().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n last: function last() {\n var $a = _this.$tabs.last().find('.accordion-title').focus();\n if (!_this.options.multiExpand) {\n $a.trigger('click.zf.accordion');\n }\n },\n handled: function handled() {\n e.preventDefault();\n }\n });\n });\n }\n });\n if (this.options.deepLink) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink);\n }\n }\n\n /**\n * Toggles the selected content pane's open/close state.\n * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`).\n * @function\n */\n }, {\n key: \"toggle\",\n value: function toggle($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot toggle an accordion that is disabled.');\n return;\n }\n if ($target.parent().hasClass('is-active')) {\n this.up($target);\n } else {\n this.down($target);\n }\n //either replace or update browser history\n if (this.options.deepLink) {\n var anchor = $target.prev('a').attr('href');\n if (this.options.updateHistory) {\n history.pushState({}, '', anchor);\n } else {\n history.replaceState({}, '', anchor);\n }\n }\n }\n\n /**\n * Opens the accordion tab defined by `$target`.\n * @param {jQuery} $target - Accordion pane to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n */\n }, {\n key: \"down\",\n value: function down($target) {\n if ($target.closest('[data-accordion]').is('[disabled]')) {\n console.info('Cannot call down on an accordion that is disabled.');\n return;\n }\n if (this.options.multiExpand) this._openTab($target);else this._openSingleTab($target);\n }\n\n /**\n * Closes the tab defined by `$target`.\n * It may be ignored if the Accordion options don't allow it.\n *\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n */\n }, {\n key: \"up\",\n value: function up($target) {\n if (this.$element.is('[disabled]')) {\n console.info('Cannot call up on an accordion that is disabled.');\n return;\n }\n\n // Don't close the item if it is already closed\n var $targetItem = $target.parent();\n if (!$targetItem.hasClass('is-active')) return;\n\n // Don't close the item if there is no other active item (unless with `allowAllClosed`)\n var $othersItems = $targetItem.siblings();\n if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return;\n this._closeTab($target);\n }\n\n /**\n * Make the tab defined by `$target` the only opened tab, closing all others tabs.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @function\n * @private\n */\n }, {\n key: \"_openSingleTab\",\n value: function _openSingleTab($target) {\n // Close all the others active tabs.\n var $activeContents = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeContents.length) {\n this._closeTab($activeContents.not($target));\n }\n\n // Then open the target.\n this._openTab($target);\n }\n\n /**\n * Opens the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to open (`.accordion-content`).\n * @fires Accordion#down\n * @function\n * @private\n */\n }, {\n key: \"_openTab\",\n value: function _openTab($target) {\n var _this3 = this;\n var $targetItem = $target.parent();\n var targetContentId = $target.attr('aria-labelledby');\n $target.attr('aria-hidden', false);\n $targetItem.addClass('is-active');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(targetContentId)).attr({\n 'aria-expanded': true\n });\n $target.finish().slideDown(this.options.slideSpeed, function () {\n /**\n * Fires when the tab is done opening.\n * @event Accordion#down\n */\n _this3.$element.trigger('down.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes the tab defined by `$target`.\n * @param {jQuery} $target - Accordion tab to close (`.accordion-content`).\n * @fires Accordion#up\n * @function\n * @private\n */\n }, {\n key: \"_closeTab\",\n value: function _closeTab($target) {\n var _this4 = this;\n var $targetItem = $target.parent();\n var targetContentId = $target.attr('aria-labelledby');\n $target.attr('aria-hidden', true);\n $targetItem.removeClass('is-active');\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#\".concat(targetContentId)).attr({\n 'aria-expanded': false\n });\n $target.finish().slideUp(this.options.slideSpeed, function () {\n /**\n * Fires when the tab is done collapsing up.\n * @event Accordion#up\n */\n _this4.$element.trigger('up.zf.accordion', [$target]);\n });\n }\n\n /**\n * Closes all active tabs\n * @fires Accordion#up\n * @function\n * @private\n */\n }, {\n key: \"_closeAllTabs\",\n value: function _closeAllTabs() {\n var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]');\n if ($activeTabs.length) {\n this._closeTab($activeTabs);\n }\n }\n\n /**\n * Destroys an instance of an accordion.\n * @fires Accordion#destroyed\n * @function\n */\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', '');\n this.$element.find('a').off('.zf.accordion');\n if (this.options.deepLink) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink);\n }\n }\n }]);\n return Accordion;\n}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__.Plugin);\nAccordion.defaults = {\n /**\n * Amount of time to animate the opening of an accordion pane.\n * @option\n * @type {number}\n * @default 250\n */\n slideSpeed: 250,\n /**\n * Allow the accordion to have multiple open panes.\n * @option\n * @type {boolean}\n * @default false\n */\n multiExpand: false,\n /**\n * Allow the accordion to close all panes.\n * @option\n * @type {boolean}\n * @default false\n */\n allowAllClosed: false,\n /**\n * Link the location hash to the open pane.\n * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes.\n * @option\n * @type {boolean}\n * @default false\n */\n deepLink: false,\n /**\n * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible\n * @option\n * @type {boolean}\n * @default false\n */\n deepLinkSmudge: false,\n /**\n * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment\n * @option\n * @type {number}\n * @default 300\n */\n deepLinkSmudgeDelay: 300,\n /**\n * If `deepLinkSmudge` is enabled, the offset for scrollToTtop to prevent overlap by a sticky element at the top of the page\n * @option\n * @type {number}\n * @default 0\n */\n deepLinkSmudgeOffset: 0,\n /**\n * If `deepLink` is enabled, update the browser history with the open accordion\n * @option\n * @type {boolean}\n * @default false\n */\n updateHistory: false\n};\n\n\n/***/ }),\n\n/***/ \"./foundation.core\":\n/*!****************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.core\"],\"amd\":\"./foundation.core\",\"commonjs\":\"./foundation.core\",\"commonjs2\":\"./foundation.core\"} ***!\n \\****************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_core__;\n\n/***/ }),\n\n/***/ \"./foundation.util.keyboard\":\n/*!****************************************************************************************************************************************************************************************************!*\\\n !*** external {\"root\":[\"__FOUNDATION_EXTERNAL__\",\"foundation.util.keyboard\"],\"amd\":\"./foundation.util.keyboard\",\"commonjs\":\"./foundation.util.keyboard\",\"commonjs2\":\"./foundation.util.keyboard\"} ***!\n \\****************************************************************************************************************************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__foundation_util_keyboard__;\n\n/***/ }),\n\n/***/ \"jquery\":\n/*!********************************************************************************************!*\\\n !*** external {\"root\":[\"jQuery\"],\"amd\":\"jquery\",\"commonjs\":\"jquery\",\"commonjs2\":\"jquery\"} ***!\n \\********************************************************************************************/\n/***/ (function(module) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t!function() {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = function(module) {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\tfunction() { return module['default']; } :\n/******/ \t\t\t\tfunction() { return module; };\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t!function() {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = function(exports) {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.\n!function() {\n/*!****************************************************!*\\\n !*** ./js/entries/plugins/foundation.accordion.js ***!\n \\****************************************************/\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Accordion: function() { return /* reexport safe */ _foundation_accordion__WEBPACK_IMPORTED_MODULE_1__.Accordion; },\n/* harmony export */ Foundation: function() { return /* reexport safe */ _foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation; }\n/* harmony export */ });\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.core */ \"./foundation.core\");\n/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_foundation_core__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _foundation_accordion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../foundation.accordion */ \"./js/foundation.accordion.js\");\n\n\n_foundation_core__WEBPACK_IMPORTED_MODULE_0__.Foundation.plugin(_foundation_accordion__WEBPACK_IMPORTED_MODULE_1__.Accordion, 'Accordion');\n\n}();\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=foundation.accordion.js.map","/**\r\n * tooltipster http://iamceege.github.io/tooltipster/\r\n * A rockin' custom tooltip jQuery plugin\r\n * Developed by Caleb Jacob and Louis Ameline\r\n * MIT license\r\n */\r\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n define([\"jquery\"], function (a0) {\n return (factory(a0));\n });\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require(\"jquery\"));\n } else {\n factory(jQuery);\n }\n}(this, function ($) {\n\n// This file will be UMDified by a build task.\n\nvar defaults = {\n\t\tanimation: 'fade',\n\t\tanimationDuration: 350,\n\t\tcontent: null,\n\t\tcontentAsHTML: false,\n\t\tcontentCloning: false,\n\t\tdebug: true,\n\t\tdelay: 300,\n\t\tdelayTouch: [300, 500],\n\t\tfunctionInit: null,\n\t\tfunctionBefore: null,\n\t\tfunctionReady: null,\n\t\tfunctionAfter: null,\n\t\tfunctionFormat: null,\n\t\tIEmin: 6,\n\t\tinteractive: false,\n\t\tmultiple: false,\n\t\t// will default to document.body, or must be an element positioned at (0, 0)\n\t\t// in the document, typically like the very top views of an app.\n\t\tparent: null,\n\t\tplugins: ['sideTip'],\n\t\trepositionOnScroll: false,\n\t\trestoration: 'none',\n\t\tselfDestruction: true,\n\t\ttheme: [],\n\t\ttimer: 0,\n\t\ttrackerInterval: 500,\n\t\ttrackOrigin: false,\n\t\ttrackTooltip: false,\n\t\ttrigger: 'hover',\n\t\ttriggerClose: {\n\t\t\tclick: false,\n\t\t\tmouseleave: false,\n\t\t\toriginClick: false,\n\t\t\tscroll: false,\n\t\t\ttap: false,\n\t\t\ttouchleave: false\n\t\t},\n\t\ttriggerOpen: {\n\t\t\tclick: false,\n\t\t\tmouseenter: false,\n\t\t\ttap: false,\n\t\t\ttouchstart: false\n\t\t},\n\t\tupdateAnimation: 'rotate',\n\t\tzIndex: 9999999\n\t},\n\t// we'll avoid using the 'window' global as a good practice but npm's\n\t// jquery@<2.1.0 package actually requires a 'window' global, so not sure\n\t// it's useful at all\n\twin = (typeof window != 'undefined') ? window : null,\n\t// env will be proxied by the core for plugins to have access its properties\n\tenv = {\n\t\t// detect if this device can trigger touch events. Better have a false\n\t\t// positive (unused listeners, that's ok) than a false negative.\n\t\t// https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js\n\t\t// http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\n\t\thasTouchCapability: !!(\n\t\t\twin\n\t\t\t&&\t(\t'ontouchstart' in win\n\t\t\t\t||\t(win.DocumentTouch && win.document instanceof win.DocumentTouch)\n\t\t\t\t||\twin.navigator.maxTouchPoints\n\t\t\t)\n\t\t),\n\t\thasTransitions: transitionSupport(),\n\t\tIE: false,\n\t\t// don't set manually, it will be updated by a build task after the manifest\n\t\tsemVer: '4.2.8',\n\t\twindow: win\n\t},\n\tcore = function() {\n\t\t\n\t\t// core variables\n\t\t\n\t\t// the core emitters\n\t\tthis.__$emitterPrivate = $({});\n\t\tthis.__$emitterPublic = $({});\n\t\tthis.__instancesLatestArr = [];\n\t\t// collects plugin constructors\n\t\tthis.__plugins = {};\n\t\t// proxy env variables for plugins who might use them\n\t\tthis._env = env;\n\t};\n\n// core methods\ncore.prototype = {\n\t\n\t/**\n\t * A function to proxy the public methods of an object onto another\n\t *\n\t * @param {object} constructor The constructor to bridge\n\t * @param {object} obj The object that will get new methods (an instance or the core)\n\t * @param {string} pluginName A plugin name for the console log message\n\t * @return {core}\n\t * @private\n\t */\n\t__bridge: function(constructor, obj, pluginName) {\n\t\t\n\t\t// if it's not already bridged\n\t\tif (!obj[pluginName]) {\n\t\t\t\n\t\t\tvar fn = function() {};\n\t\t\tfn.prototype = constructor;\n\t\t\t\n\t\t\tvar pluginInstance = new fn();\n\t\t\t\n\t\t\t// the _init method has to exist in instance constructors but might be missing\n\t\t\t// in core constructors\n\t\t\tif (pluginInstance.__init) {\n\t\t\t\tpluginInstance.__init(obj);\n\t\t\t}\n\t\t\t\n\t\t\t$.each(constructor, function(methodName, fn) {\n\t\t\t\t\n\t\t\t\t// don't proxy \"private\" methods, only \"protected\" and public ones\n\t\t\t\tif (methodName.indexOf('__') != 0) {\n\t\t\t\t\t\n\t\t\t\t\t// if the method does not exist yet\n\t\t\t\t\tif (!obj[methodName]) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tobj[methodName] = function() {\n\t\t\t\t\t\t\treturn pluginInstance[methodName].apply(pluginInstance, Array.prototype.slice.apply(arguments));\n\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t// remember to which plugin this method corresponds (several plugins may\n\t\t\t\t\t\t// have methods of the same name, we need to be sure)\n\t\t\t\t\t\tobj[methodName].bridged = pluginInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if (defaults.debug) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tconsole.log('The '+ methodName +' method of the '+ pluginName\n\t\t\t\t\t\t\t+' plugin conflicts with another plugin or native methods');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tobj[pluginName] = pluginInstance;\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For mockup in Node env if need be, for testing purposes\n\t *\n\t * @return {core}\n\t * @private\n\t */\n\t__setWindow: function(window) {\n\t\tenv.window = window;\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns a ruler, a tool to help measure the size of a tooltip under\n\t * various settings. Meant for plugins\n\t * \n\t * @see Ruler\n\t * @return {object} A Ruler instance\n\t * @protected\n\t */\n\t_getRuler: function($tooltip) {\n\t\treturn new Ruler($tooltip);\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_off: function() {\n\t\tthis.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_on: function() {\n\t\tthis.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @return {core}\n\t * @protected\n\t */\n\t_one: function() {\n\t\tthis.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns (getter) or adds (setter) a plugin\n\t *\n\t * @param {string|object} plugin Provide a string (in the full form\n\t * \"namespace.name\") to use as as getter, an object to use as a setter\n\t * @return {object|core}\n\t * @protected\n\t */\n\t_plugin: function(plugin) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// getter\n\t\tif (typeof plugin == 'string') {\n\t\t\t\n\t\t\tvar pluginName = plugin,\n\t\t\t\tp = null;\n\t\t\t\n\t\t\t// if the namespace is provided, it's easy to search\n\t\t\tif (pluginName.indexOf('.') > 0) {\n\t\t\t\tp = self.__plugins[pluginName];\n\t\t\t}\n\t\t\t// otherwise, return the first name that matches\n\t\t\telse {\n\t\t\t\t$.each(self.__plugins, function(i, plugin) {\n\t\t\t\t\t\n\t\t\t\t\tif (plugin.name.substring(plugin.name.length - pluginName.length - 1) == '.'+ pluginName) {\n\t\t\t\t\t\tp = plugin;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\treturn p;\n\t\t}\n\t\t// setter\n\t\telse {\n\t\t\t\n\t\t\t// force namespaces\n\t\t\tif (plugin.name.indexOf('.') < 0) {\n\t\t\t\tthrow new Error('Plugins must be namespaced');\n\t\t\t}\n\t\t\t\n\t\t\tself.__plugins[plugin.name] = plugin;\n\t\t\t\n\t\t\t// if the plugin has core features\n\t\t\tif (plugin.core) {\n\t\t\t\t\n\t\t\t\t// bridge non-private methods onto the core to allow new core methods\n\t\t\t\tself.__bridge(plugin.core, self, plugin.name);\n\t\t\t}\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t},\n\t\n\t/**\n\t * Trigger events on the core emitters\n\t * \n\t * @returns {core}\n\t * @protected\n\t */\n\t_trigger: function() {\n\t\t\n\t\tvar args = Array.prototype.slice.apply(arguments);\n\t\t\n\t\tif (typeof args[0] == 'string') {\n\t\t\targs[0] = { type: args[0] };\n\t\t}\n\t\t\n\t\t// note: the order of emitters matters\n\t\tthis.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);\n\t\tthis.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns instances of all tooltips in the page or an a given element\n\t *\n\t * @param {string|HTML object collection} selector optional Use this\n\t * parameter to restrict the set of objects that will be inspected\n\t * for the retrieval of instances. By default, all instances in the\n\t * page are returned.\n\t * @return {array} An array of instance objects\n\t * @public\n\t */\n\tinstances: function(selector) {\n\t\t\n\t\tvar instances = [],\n\t\t\tsel = selector || '.tooltipstered';\n\t\t\n\t\t$(sel).each(function() {\n\t\t\t\n\t\t\tvar $this = $(this),\n\t\t\t\tns = $this.data('tooltipster-ns');\n\t\t\t\n\t\t\tif (ns) {\n\t\t\t\t\n\t\t\t\t$.each(ns, function(i, namespace) {\n\t\t\t\t\tinstances.push($this.data(namespace));\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn instances;\n\t},\n\t\n\t/**\n\t * Returns the Tooltipster objects generated by the last initializing call\n\t *\n\t * @return {array} An array of instance objects\n\t * @public\n\t */\n\tinstancesLatest: function() {\n\t\treturn this.__instancesLatestArr;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_off() instead)\n\t *\n\t * @return {core}\n\t * @public\n\t */\n\toff: function() {\n\t\tthis.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_on() instead)\n\t *\n\t * @return {core}\n\t * @public\n\t */\n\ton: function() {\n\t\tthis.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_one() instead)\n\t * \n\t * @return {core}\n\t * @public\n\t */\n\tone: function() {\n\t\tthis.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns all HTML elements which have one or more tooltips\n\t *\n\t * @param {string} selector optional Use this to restrict the results\n\t * to the descendants of an element\n\t * @return {array} An array of HTML elements\n\t * @public\n\t */\n\torigins: function(selector) {\n\t\t\n\t\tvar sel = selector ?\n\t\t\tselector +' ' :\n\t\t\t'';\n\t\t\n\t\treturn $(sel +'.tooltipstered').toArray();\n\t},\n\t\n\t/**\n\t * Change default options for all future instances\n\t *\n\t * @param {object} d The options that should be made defaults\n\t * @return {core}\n\t * @public\n\t */\n\tsetDefaults: function(d) {\n\t\t$.extend(defaults, d);\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For users to trigger their handlers on the public emitter\n\t * \n\t * @returns {core}\n\t * @public\n\t */\n\ttriggerHandler: function() {\n\t\tthis.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t}\n};\n\n// $.tooltipster will be used to call core methods\n$.tooltipster = new core();\n\n// the Tooltipster instance class (mind the capital T)\n$.Tooltipster = function(element, options) {\n\t\n\t// list of instance variables\n\t\n\t// stack of custom callbacks provided as parameters to API methods\n\tthis.__callbacks = {\n\t\tclose: [],\n\t\topen: []\n\t};\n\t// the schedule time of DOM removal\n\tthis.__closingTime;\n\t// this will be the user content shown in the tooltip. A capital \"C\" is used\n\t// because there is also a method called content()\n\tthis.__Content;\n\t// for the size tracker\n\tthis.__contentBcr;\n\t// to disable the tooltip after destruction\n\tthis.__destroyed = false;\n\t// we can't emit directly on the instance because if a method with the same\n\t// name as the event exists, it will be called by jQuery. Se we use a plain\n\t// object as emitter. This emitter is for internal use by plugins,\n\t// if needed.\n\tthis.__$emitterPrivate = $({});\n\t// this emitter is for the user to listen to events without risking to mess\n\t// with our internal listeners\n\tthis.__$emitterPublic = $({});\n\tthis.__enabled = true;\n\t// the reference to the gc interval\n\tthis.__garbageCollector;\n\t// various position and size data recomputed before each repositioning\n\tthis.__Geometry;\n\t// the tooltip position, saved after each repositioning by a plugin\n\tthis.__lastPosition;\n\t// a unique namespace per instance\n\tthis.__namespace = 'tooltipster-'+ Math.round(Math.random()*1000000);\n\tthis.__options;\n\t// will be used to support origins in scrollable areas\n\tthis.__$originParents;\n\tthis.__pointerIsOverOrigin = false;\n\t// to remove themes if needed\n\tthis.__previousThemes = [];\n\t// the state can be either: appearing, stable, disappearing, closed\n\tthis.__state = 'closed';\n\t// timeout references\n\tthis.__timeouts = {\n\t\tclose: [],\n\t\topen: null\n\t};\n\t// store touch events to be able to detect emulated mouse events\n\tthis.__touchEvents = [];\n\t// the reference to the tracker interval\n\tthis.__tracker = null;\n\t// the element to which this tooltip is associated\n\tthis._$origin;\n\t// this will be the tooltip element (jQuery wrapped HTML element).\n\t// It's the job of a plugin to create it and append it to the DOM\n\tthis._$tooltip;\n\t\n\t// launch\n\tthis.__init(element, options);\n};\n\n$.Tooltipster.prototype = {\n\t\n\t/**\n\t * @param origin\n\t * @param options\n\t * @private\n\t */\n\t__init: function(origin, options) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tself._$origin = $(origin);\n\t\tself.__options = $.extend(true, {}, defaults, options);\n\t\t\n\t\t// some options may need to be reformatted\n\t\tself.__optionsFormat();\n\t\t\n\t\t// don't run on old IE if asked no to\n\t\tif (\t!env.IE\n\t\t\t||\tenv.IE >= self.__options.IEmin\n\t\t) {\n\t\t\t\n\t\t\t// note: the content is null (empty) by default and can stay that\n\t\t\t// way if the plugin remains initialized but not fed any content. The\n\t\t\t// tooltip will just not appear.\n\t\t\t\n\t\t\t// let's save the initial value of the title attribute for later\n\t\t\t// restoration if need be.\n\t\t\tvar initialTitle = null;\n\t\t\t\n\t\t\t// it will already have been saved in case of multiple tooltips\n\t\t\tif (self._$origin.data('tooltipster-initialTitle') === undefined) {\n\t\t\t\t\n\t\t\t\tinitialTitle = self._$origin.attr('title');\n\t\t\t\t\n\t\t\t\t// we do not want initialTitle to be \"undefined\" because\n\t\t\t\t// of how jQuery's .data() method works\n\t\t\t\tif (initialTitle === undefined) initialTitle = null;\n\t\t\t\t\n\t\t\t\tself._$origin.data('tooltipster-initialTitle', initialTitle);\n\t\t\t}\n\t\t\t\n\t\t\t// If content is provided in the options, it has precedence over the\n\t\t\t// title attribute.\n\t\t\t// Note: an empty string is considered content, only 'null' represents\n\t\t\t// the absence of content.\n\t\t\t// Also, an existing title=\"\" attribute will result in an empty string\n\t\t\t// content\n\t\t\tif (self.__options.content !== null) {\n\t\t\t\tself.__contentSet(self.__options.content);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\tvar selector = self._$origin.attr('data-tooltip-content'),\n\t\t\t\t\t$el;\n\t\t\t\t\n\t\t\t\tif (selector){\n\t\t\t\t\t$el = $(selector);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ($el && $el[0]) {\n\t\t\t\t\tself.__contentSet($el.first());\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself.__contentSet(initialTitle);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin\n\t\t\t\t// strip the title off of the element to prevent the default tooltips\n\t\t\t\t// from popping up\n\t\t\t\t.removeAttr('title')\n\t\t\t\t// to be able to find all instances on the page later (upon window\n\t\t\t\t// events in particular)\n\t\t\t\t.addClass('tooltipstered');\n\t\t\t\n\t\t\t// set listeners on the origin\n\t\t\tself.__prepareOrigin();\n\t\t\t\n\t\t\t// set the garbage collector\n\t\t\tself.__prepareGC();\n\t\t\t\n\t\t\t// init plugins\n\t\t\t$.each(self.__options.plugins, function(i, pluginName) {\n\t\t\t\tself._plug(pluginName);\n\t\t\t});\n\t\t\t\n\t\t\t// to detect swiping\n\t\t\tif (env.hasTouchCapability) {\n\t\t\t\t$(env.window.document.body).on('touchmove.'+ self.__namespace +'-triggerOpen', function(event) {\n\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\tself\n\t\t\t\t// prepare the tooltip when it gets created. This event must\n\t\t\t\t// be fired by a plugin\n\t\t\t\t._on('created', function() {\n\t\t\t\t\tself.__prepareTooltip();\n\t\t\t\t})\n\t\t\t\t// save position information when it's sent by a plugin\n\t\t\t\t._on('repositioned', function(e) {\n\t\t\t\t\tself.__lastPosition = e.position;\n\t\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tself.__options.disabled = true;\n\t\t}\n\t},\n\t\n\t/**\n\t * Insert the content into the appropriate HTML element of the tooltip\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__contentInsert: function() {\n\t\t\n\t\tvar self = this,\n\t\t\t$el = self._$tooltip.find('.tooltipster-content'),\n\t\t\tformattedContent = self.__Content,\n\t\t\tformat = function(content) {\n\t\t\t\tformattedContent = content;\n\t\t\t};\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'format',\n\t\t\tcontent: self.__Content,\n\t\t\tformat: format\n\t\t});\n\t\t\n\t\tif (self.__options.functionFormat) {\n\t\t\t\n\t\t\tformattedContent = self.__options.functionFormat.call(\n\t\t\t\tself,\n\t\t\t\tself,\n\t\t\t\t{ origin: self._$origin[0] },\n\t\t\t\tself.__Content\n\t\t\t);\n\t\t}\n\t\t\n\t\tif (typeof formattedContent === 'string' && !self.__options.contentAsHTML) {\n\t\t\t$el.text(formattedContent);\n\t\t}\n\t\telse {\n\t\t\t$el\n\t\t\t\t.empty()\n\t\t\t\t.append(formattedContent);\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Save the content, cloning it beforehand if need be\n\t * \n\t * @param content\n\t * @returns {self}\n\t * @private\n\t */\n\t__contentSet: function(content) {\n\t\t\n\t\t// clone if asked. Cloning the object makes sure that each instance has its\n\t\t// own version of the content (in case a same object were provided for several\n\t\t// instances)\n\t\t// reminder: typeof null === object\n\t\tif (content instanceof $ && this.__options.contentCloning) {\n\t\t\tcontent = content.clone(true);\n\t\t}\n\t\t\n\t\tthis.__Content = content;\n\t\t\n\t\tthis._trigger({\n\t\t\ttype: 'updated',\n\t\t\tcontent: content\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Error message about a method call made after destruction\n\t * \n\t * @private\n\t */\n\t__destroyError: function() {\n\t\tthrow new Error('This tooltip has been destroyed and cannot execute your method call.');\n\t},\n\t\n\t/**\n\t * Gather all information about dimensions and available space,\n\t * called before every repositioning\n\t * \n\t * @private\n\t * @returns {object}\n\t */\n\t__geometry: function() {\n\t\t\n\t\tvar\tself = this,\n\t\t\t$target = self._$origin,\n\t\t\toriginIsArea = self._$origin.is('area');\n\t\t\n\t\t// if this._$origin is a map area, the target we'll need\n\t\t// the dimensions of is actually the image using the map,\n\t\t// not the area itself\n\t\tif (originIsArea) {\n\t\t\t\n\t\t\tvar mapName = self._$origin.parent().attr('name');\n\t\t\t\n\t\t\t$target = $('img[usemap=\"#'+ mapName +'\"]');\n\t\t}\n\t\t\n\t\tvar bcr = $target[0].getBoundingClientRect(),\n\t\t\t$document = $(env.window.document),\n\t\t\t$window = $(env.window),\n\t\t\t$parent = $target,\n\t\t\t// some useful properties of important elements\n\t\t\tgeo = {\n\t\t\t\t// available space for the tooltip, see down below\n\t\t\t\tavailable: {\n\t\t\t\t\tdocument: null,\n\t\t\t\t\twindow: null\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: $document.height(),\n\t\t\t\t\t\twidth: $document.width()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\twindow: {\n\t\t\t\t\tscroll: {\n\t\t\t\t\t\t// the second ones are for IE compatibility\n\t\t\t\t\t\tleft: env.window.scrollX || env.window.document.documentElement.scrollLeft,\n\t\t\t\t\t\ttop: env.window.scrollY || env.window.document.documentElement.scrollTop\n\t\t\t\t\t},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: $window.height(),\n\t\t\t\t\t\twidth: $window.width()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\torigin: {\n\t\t\t\t\t// the origin has a fixed lineage if itself or one of its\n\t\t\t\t\t// ancestors has a fixed position\n\t\t\t\t\tfixedLineage: false,\n\t\t\t\t\t// relative to the document\n\t\t\t\t\toffset: {},\n\t\t\t\t\tsize: {\n\t\t\t\t\t\theight: bcr.bottom - bcr.top,\n\t\t\t\t\t\twidth: bcr.right - bcr.left\n\t\t\t\t\t},\n\t\t\t\t\tusemapImage: originIsArea ? $target[0] : null,\n\t\t\t\t\t// relative to the window\n\t\t\t\t\twindowOffset: {\n\t\t\t\t\t\tbottom: bcr.bottom,\n\t\t\t\t\t\tleft: bcr.left,\n\t\t\t\t\t\tright: bcr.right,\n\t\t\t\t\t\ttop: bcr.top\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tgeoFixed = false;\n\t\t\n\t\t// if the element is a map area, some properties may need\n\t\t// to be recalculated\n\t\tif (originIsArea) {\n\t\t\t\n\t\t\tvar shape = self._$origin.attr('shape'),\n\t\t\t\tcoords = self._$origin.attr('coords');\n\t\t\t\n\t\t\tif (coords) {\n\t\t\t\t\n\t\t\t\tcoords = coords.split(',');\n\t\t\t\t\n\t\t\t\t$.map(coords, function(val, i) {\n\t\t\t\t\tcoords[i] = parseInt(val);\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// if the image itself is the area, nothing more to do\n\t\t\tif (shape != 'default') {\n\t\t\t\t\n\t\t\t\tswitch(shape) {\n\t\t\t\t\t\n\t\t\t\t\tcase 'circle':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar circleCenterLeft = coords[0],\n\t\t\t\t\t\t\tcircleCenterTop = coords[1],\n\t\t\t\t\t\t\tcircleRadius = coords[2],\n\t\t\t\t\t\t\tareaTopOffset = circleCenterTop - circleRadius,\n\t\t\t\t\t\t\tareaLeftOffset = circleCenterLeft - circleRadius;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = circleRadius * 2;\n\t\t\t\t\t\tgeo.origin.size.width = geo.origin.size.height;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaLeftOffset;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaTopOffset;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase 'rect':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar areaLeft = coords[0],\n\t\t\t\t\t\t\tareaTop = coords[1],\n\t\t\t\t\t\t\tareaRight = coords[2],\n\t\t\t\t\t\t\tareaBottom = coords[3];\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = areaBottom - areaTop;\n\t\t\t\t\t\tgeo.origin.size.width = areaRight - areaLeft;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaLeft;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaTop;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\t\tcase 'poly':\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar areaSmallestX = 0,\n\t\t\t\t\t\t\tareaSmallestY = 0,\n\t\t\t\t\t\t\tareaGreatestX = 0,\n\t\t\t\t\t\t\tareaGreatestY = 0,\n\t\t\t\t\t\t\tarrayAlternate = 'even';\n\t\t\t\t\t\t\n\t\t\t\t\t\tfor (var i = 0; i < coords.length; i++) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar areaNumber = coords[i];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (arrayAlternate == 'even') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (areaNumber > areaGreatestX) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tareaGreatestX = areaNumber;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\t\t\t\t\tareaSmallestX = areaGreatestX;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (areaNumber < areaSmallestX) {\n\t\t\t\t\t\t\t\t\tareaSmallestX = areaNumber;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tarrayAlternate = 'odd';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif (areaNumber > areaGreatestY) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tareaGreatestY = areaNumber;\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (i == 1) {\n\t\t\t\t\t\t\t\t\t\tareaSmallestY = areaGreatestY;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (areaNumber < areaSmallestY) {\n\t\t\t\t\t\t\t\t\tareaSmallestY = areaNumber;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tarrayAlternate = 'even';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.size.height = areaGreatestY - areaSmallestY;\n\t\t\t\t\t\tgeo.origin.size.width = areaGreatestX - areaSmallestX;\n\t\t\t\t\t\t\n\t\t\t\t\t\tgeo.origin.windowOffset.left += areaSmallestX;\n\t\t\t\t\t\tgeo.origin.windowOffset.top += areaSmallestY;\n\t\t\t\t\t\t\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// user callback through an event\n\t\tvar edit = function(r) {\n\t\t\tgeo.origin.size.height = r.height,\n\t\t\t\tgeo.origin.windowOffset.left = r.left,\n\t\t\t\tgeo.origin.windowOffset.top = r.top,\n\t\t\t\tgeo.origin.size.width = r.width\n\t\t};\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'geometry',\n\t\t\tedit: edit,\n\t\t\tgeometry: {\n\t\t\t\theight: geo.origin.size.height,\n\t\t\t\tleft: geo.origin.windowOffset.left,\n\t\t\t\ttop: geo.origin.windowOffset.top,\n\t\t\t\twidth: geo.origin.size.width\n\t\t\t}\n\t\t});\n\t\t\n\t\t// calculate the remaining properties with what we got\n\t\t\n\t\tgeo.origin.windowOffset.right = geo.origin.windowOffset.left + geo.origin.size.width;\n\t\tgeo.origin.windowOffset.bottom = geo.origin.windowOffset.top + geo.origin.size.height;\n\t\t\n\t\tgeo.origin.offset.left = geo.origin.windowOffset.left + geo.window.scroll.left;\n\t\tgeo.origin.offset.top = geo.origin.windowOffset.top + geo.window.scroll.top;\n\t\tgeo.origin.offset.bottom = geo.origin.offset.top + geo.origin.size.height;\n\t\tgeo.origin.offset.right = geo.origin.offset.left + geo.origin.size.width;\n\t\t\n\t\t// the space that is available to display the tooltip relatively to the document\n\t\tgeo.available.document = {\n\t\t\tbottom: {\n\t\t\t\theight: geo.document.size.height - geo.origin.offset.bottom,\n\t\t\t\twidth: geo.document.size.width\n\t\t\t},\n\t\t\tleft: {\n\t\t\t\theight: geo.document.size.height,\n\t\t\t\twidth: geo.origin.offset.left\n\t\t\t},\n\t\t\tright: {\n\t\t\t\theight: geo.document.size.height,\n\t\t\t\twidth: geo.document.size.width - geo.origin.offset.right\n\t\t\t},\n\t\t\ttop: {\n\t\t\t\theight: geo.origin.offset.top,\n\t\t\t\twidth: geo.document.size.width\n\t\t\t}\n\t\t};\n\t\t\n\t\t// the space that is available to display the tooltip relatively to the viewport\n\t\t// (the resulting values may be negative if the origin overflows the viewport)\n\t\tgeo.available.window = {\n\t\t\tbottom: {\n\t\t\t\t// the inner max is here to make sure the available height is no bigger\n\t\t\t\t// than the viewport height (when the origin is off screen at the top).\n\t\t\t\t// The outer max just makes sure that the height is not negative (when\n\t\t\t\t// the origin overflows at the bottom).\n\t\t\t\theight: Math.max(geo.window.size.height - Math.max(geo.origin.windowOffset.bottom, 0), 0),\n\t\t\t\twidth: geo.window.size.width\n\t\t\t},\n\t\t\tleft: {\n\t\t\t\theight: geo.window.size.height,\n\t\t\t\twidth: Math.max(geo.origin.windowOffset.left, 0)\n\t\t\t},\n\t\t\tright: {\n\t\t\t\theight: geo.window.size.height,\n\t\t\t\twidth: Math.max(geo.window.size.width - Math.max(geo.origin.windowOffset.right, 0), 0)\n\t\t\t},\n\t\t\ttop: {\n\t\t\t\theight: Math.max(geo.origin.windowOffset.top, 0),\n\t\t\t\twidth: geo.window.size.width\n\t\t\t}\n\t\t};\n\t\t\n\t\twhile ($parent[0].tagName.toLowerCase() != 'html') {\n\t\t\t\n\t\t\tif ($parent.css('position') == 'fixed') {\n\t\t\t\tgeo.origin.fixedLineage = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t$parent = $parent.parent();\n\t\t}\n\t\t\n\t\treturn geo;\n\t},\n\t\n\t/**\n\t * Some options may need to be formated before being used\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__optionsFormat: function() {\n\t\t\n\t\tif (typeof this.__options.animationDuration == 'number') {\n\t\t\tthis.__options.animationDuration = [this.__options.animationDuration, this.__options.animationDuration];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.delay == 'number') {\n\t\t\tthis.__options.delay = [this.__options.delay, this.__options.delay];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.delayTouch == 'number') {\n\t\t\tthis.__options.delayTouch = [this.__options.delayTouch, this.__options.delayTouch];\n\t\t}\n\t\t\n\t\tif (typeof this.__options.theme == 'string') {\n\t\t\tthis.__options.theme = [this.__options.theme];\n\t\t}\n\t\t\n\t\t// determine the future parent\n\t\tif (this.__options.parent === null) {\n\t\t\tthis.__options.parent = $(env.window.document.body);\n\t\t}\n\t\telse if (typeof this.__options.parent == 'string') {\n\t\t\tthis.__options.parent = $(this.__options.parent);\n\t\t}\n\t\t\n\t\tif (this.__options.trigger == 'hover') {\n\t\t\t\n\t\t\tthis.__options.triggerOpen = {\n\t\t\t\tmouseenter: true,\n\t\t\t\ttouchstart: true\n\t\t\t};\n\t\t\t\n\t\t\tthis.__options.triggerClose = {\n\t\t\t\tmouseleave: true,\n\t\t\t\toriginClick: true,\n\t\t\t\ttouchleave: true\n\t\t\t};\n\t\t}\n\t\telse if (this.__options.trigger == 'click') {\n\t\t\t\n\t\t\tthis.__options.triggerOpen = {\n\t\t\t\tclick: true,\n\t\t\t\ttap: true\n\t\t\t};\n\t\t\t\n\t\t\tthis.__options.triggerClose = {\n\t\t\t\tclick: true,\n\t\t\t\ttap: true\n\t\t\t};\n\t\t}\n\t\t\n\t\t// for the plugins\n\t\tthis._trigger('options');\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Schedules or cancels the garbage collector task\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareGC: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// in case the selfDestruction option has been changed by a method call\n\t\tif (self.__options.selfDestruction) {\n\t\t\t\n\t\t\t// the GC task\n\t\t\tself.__garbageCollector = setInterval(function() {\n\t\t\t\t\n\t\t\t\tvar now = new Date().getTime();\n\t\t\t\t\n\t\t\t\t// forget the old events\n\t\t\t\tself.__touchEvents = $.grep(self.__touchEvents, function(event, i) {\n\t\t\t\t\t// 1 minute\n\t\t\t\t\treturn now - event.time > 60000;\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\t// auto-destruct if the origin is gone\n\t\t\t\tif (!bodyContains(self._$origin)) {\n\t\t\t\t\t\n\t\t\t\t\tself.close(function(){\n\t\t\t\t\t\tself.destroy();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, 20000);\n\t\t}\n\t\telse {\n\t\t\tclearInterval(self.__garbageCollector);\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Sets listeners on the origin if the open triggers require them.\n\t * Unlike the listeners set at opening time, these ones\n\t * remain even when the tooltip is closed. It has been made a\n\t * separate method so it can be called when the triggers are\n\t * changed in the options. Closing is handled in _open()\n\t * because of the bindings that may be needed on the tooltip\n\t * itself\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareOrigin: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// in case we're resetting the triggers\n\t\tself._$origin.off('.'+ self.__namespace +'-triggerOpen');\n\t\t\n\t\t// if the device is touch capable, even if only mouse triggers\n\t\t// are asked, we need to listen to touch events to know if the mouse\n\t\t// events are actually emulated (so we can ignore them)\n\t\tif (env.hasTouchCapability) {\n\t\t\t\n\t\t\tself._$origin.on(\n\t\t\t\t'touchstart.'+ self.__namespace +'-triggerOpen ' +\n\t\t\t\t'touchend.'+ self.__namespace +'-triggerOpen ' +\n\t\t\t\t'touchcancel.'+ self.__namespace +'-triggerOpen',\n\t\t\t\tfunction(event){\n\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\t\n\t\t// mouse click and touch tap work the same way\n\t\tif (\tself.__options.triggerOpen.click\n\t\t\t||\t(self.__options.triggerOpen.tap && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerOpen.click) {\n\t\t\t\teventNames += 'click.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerOpen.tap && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\tself._open(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// mouseenter and touch start work the same way\n\t\tif (\tself.__options.triggerOpen.mouseenter\n\t\t\t||\t(self.__options.triggerOpen.touchstart && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerOpen.mouseenter) {\n\t\t\t\teventNames += 'mouseenter.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerOpen.touchstart && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchstart.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t) {\n\t\t\t\t\tself.__pointerIsOverOrigin = true;\n\t\t\t\t\tself._openShortly(event);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// info for the mouseleave/touchleave close triggers when they use a delay\n\t\tif (\tself.__options.triggerClose.mouseleave\n\t\t\t||\t(self.__options.triggerClose.touchleave && env.hasTouchCapability)\n\t\t) {\n\t\t\t\n\t\t\tvar eventNames = '';\n\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\teventNames += 'mouseleave.'+ self.__namespace +'-triggerOpen ';\n\t\t\t}\n\t\t\tif (self.__options.triggerClose.touchleave && env.hasTouchCapability) {\n\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerOpen touchcancel.'+ self.__namespace +'-triggerOpen';\n\t\t\t}\n\t\t\t\n\t\t\tself._$origin.on(eventNames, function(event) {\n\t\t\t\t\n\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\tself.__pointerIsOverOrigin = false;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Do the things that need to be done only once after the tooltip\n\t * HTML element it has been created. It has been made a separate\n\t * method so it can be called when options are changed. Remember\n\t * that the tooltip may actually exist in the DOM before it is\n\t * opened, and present after it has been closed: it's the display\n\t * plugin that takes care of handling it.\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__prepareTooltip: function() {\n\t\t\n\t\tvar self = this,\n\t\t\tp = self.__options.interactive ? 'auto' : '';\n\t\t\n\t\t// this will be useful to know quickly if the tooltip is in\n\t\t// the DOM or not \n\t\tself._$tooltip\n\t\t\t.attr('id', self.__namespace)\n\t\t\t.css({\n\t\t\t\t// pointer events\n\t\t\t\t'pointer-events': p,\n\t\t\t\tzIndex: self.__options.zIndex\n\t\t\t});\n\t\t\n\t\t// themes\n\t\t// remove the old ones and add the new ones\n\t\t$.each(self.__previousThemes, function(i, theme) {\n\t\t\tself._$tooltip.removeClass(theme);\n\t\t});\n\t\t$.each(self.__options.theme, function(i, theme) {\n\t\t\tself._$tooltip.addClass(theme);\n\t\t});\n\t\t\n\t\tself.__previousThemes = $.merge([], self.__options.theme);\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Handles the scroll on any of the parents of the origin (when the\n\t * tooltip is open)\n\t *\n\t * @param {object} event\n\t * @returns {self}\n\t * @private\n\t */\n\t__scrollHandler: function(event) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (self.__options.triggerClose.scroll) {\n\t\t\tself._close(event);\n\t\t}\n\t\telse {\n\t\t\t\n\t\t\t// if the origin or tooltip have been removed: do nothing, the tracker will\n\t\t\t// take care of it later\n\t\t\tif (bodyContains(self._$origin) && bodyContains(self._$tooltip)) {\n\t\t\t\t\n\t\t\t\tvar geo = null;\n\t\t\t\t\n\t\t\t\t// if the scroll happened on the window\n\t\t\t\tif (event.target === env.window.document) {\n\t\t\t\t\t\n\t\t\t\t\t// if the origin has a fixed lineage, window scroll will have no\n\t\t\t\t\t// effect on its position nor on the position of the tooltip\n\t\t\t\t\tif (!self.__Geometry.origin.fixedLineage) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// we don't need to do anything unless repositionOnScroll is true\n\t\t\t\t\t\t// because the tooltip will already have moved with the window\n\t\t\t\t\t\t// (and of course with the origin)\n\t\t\t\t\t\tif (self.__options.repositionOnScroll) {\n\t\t\t\t\t\t\tself.reposition(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// if the scroll happened on another parent of the tooltip, it means\n\t\t\t\t// that it's in a scrollable area and now needs to have its position\n\t\t\t\t// adjusted or recomputed, depending ont the repositionOnScroll\n\t\t\t\t// option. Also, if the origin is partly hidden due to a parent that\n\t\t\t\t// hides its overflow, we'll just hide (not close) the tooltip.\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\tgeo = self.__geometry();\n\t\t\t\t\t\n\t\t\t\t\tvar overflows = false;\n\t\t\t\t\t\n\t\t\t\t\t// a fixed position origin is not affected by the overflow hiding\n\t\t\t\t\t// of a parent\n\t\t\t\t\tif (self._$origin.css('position') != 'fixed') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.__$originParents.each(function(i, el) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar $el = $(el),\n\t\t\t\t\t\t\t\toverflowX = $el.css('overflow-x'),\n\t\t\t\t\t\t\t\toverflowY = $el.css('overflow-y');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (overflowX != 'visible' || overflowY != 'visible') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar bcr = el.getBoundingClientRect();\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (overflowX != 'visible') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (\tgeo.origin.windowOffset.left < bcr.left\n\t\t\t\t\t\t\t\t\t\t||\tgeo.origin.windowOffset.right > bcr.right\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\toverflows = true;\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (overflowY != 'visible') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (\tgeo.origin.windowOffset.top < bcr.top\n\t\t\t\t\t\t\t\t\t\t||\tgeo.origin.windowOffset.bottom > bcr.bottom\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\toverflows = true;\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// no need to go further if fixed, for the same reason as above\n\t\t\t\t\t\t\tif ($el.css('position') == 'fixed') {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (overflows) {\n\t\t\t\t\t\tself._$tooltip.css('visibility', 'hidden');\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip.css('visibility', 'visible');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reposition\n\t\t\t\t\t\tif (self.__options.repositionOnScroll) {\n\t\t\t\t\t\t\tself.reposition(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// or just adjust offset\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// we have to use offset and not windowOffset because this way,\n\t\t\t\t\t\t\t// only the scroll distance of the scrollable areas are taken into\n\t\t\t\t\t\t\t// account (the scrolltop value of the main window must be\n\t\t\t\t\t\t\t// ignored since the tooltip already moves with it)\n\t\t\t\t\t\t\tvar offsetLeft = geo.origin.offset.left - self.__Geometry.origin.offset.left,\n\t\t\t\t\t\t\t\toffsetTop = geo.origin.offset.top - self.__Geometry.origin.offset.top;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// add the offset to the position initially computed by the display plugin\n\t\t\t\t\t\t\tself._$tooltip.css({\n\t\t\t\t\t\t\t\tleft: self.__lastPosition.coord.left + offsetLeft,\n\t\t\t\t\t\t\t\ttop: self.__lastPosition.coord.top + offsetTop\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tself._trigger({\n\t\t\t\t\ttype: 'scroll',\n\t\t\t\t\tevent: event,\n\t\t\t\t\tgeo: geo\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Changes the state of the tooltip\n\t *\n\t * @param {string} state\n\t * @returns {self}\n\t * @private\n\t */\n\t__stateSet: function(state) {\n\t\t\n\t\tthis.__state = state;\n\t\t\n\t\tthis._trigger({\n\t\t\ttype: 'state',\n\t\t\tstate: state\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Clear appearance timeouts\n\t *\n\t * @returns {self}\n\t * @private\n\t */\n\t__timeoutsClear: function() {\n\t\t\n\t\t// there is only one possible open timeout: the delayed opening\n\t\t// when the mouseenter/touchstart open triggers are used\n\t\tclearTimeout(this.__timeouts.open);\n\t\tthis.__timeouts.open = null;\n\t\t\n\t\t// ... but several close timeouts: the delayed closing when the\n\t\t// mouseleave close trigger is used and the timer option\n\t\t$.each(this.__timeouts.close, function(i, timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t});\n\t\tthis.__timeouts.close = [];\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Start the tracker that will make checks at regular intervals\n\t * \n\t * @returns {self}\n\t * @private\n\t */\n\t__trackerStart: function() {\n\t\t\n\t\tvar self = this,\n\t\t\t$content = self._$tooltip.find('.tooltipster-content');\n\t\t\n\t\t// get the initial content size\n\t\tif (self.__options.trackTooltip) {\n\t\t\tself.__contentBcr = $content[0].getBoundingClientRect();\n\t\t}\n\t\t\n\t\tself.__tracker = setInterval(function() {\n\t\t\t\n\t\t\t// if the origin or tooltip elements have been removed.\n\t\t\t// Note: we could destroy the instance now if the origin has\n\t\t\t// been removed but we'll leave that task to our garbage collector\n\t\t\tif (!bodyContains(self._$origin) || !bodyContains(self._$tooltip)) {\n\t\t\t\tself._close();\n\t\t\t}\n\t\t\t// if everything is alright\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// compare the former and current positions of the origin to reposition\n\t\t\t\t// the tooltip if need be\n\t\t\t\tif (self.__options.trackOrigin) {\n\t\t\t\t\t\n\t\t\t\t\tvar g = self.__geometry(),\n\t\t\t\t\t\tidentical = false;\n\t\t\t\t\t\n\t\t\t\t\t// compare size first (a change requires repositioning too)\n\t\t\t\t\tif (areEqual(g.origin.size, self.__Geometry.origin.size)) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// for elements that have a fixed lineage (see __geometry()), we track the\n\t\t\t\t\t\t// top and left properties (relative to window)\n\t\t\t\t\t\tif (self.__Geometry.origin.fixedLineage) {\n\t\t\t\t\t\t\tif (areEqual(g.origin.windowOffset, self.__Geometry.origin.windowOffset)) {\n\t\t\t\t\t\t\t\tidentical = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// otherwise, track total offset (relative to document)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif (areEqual(g.origin.offset, self.__Geometry.origin.offset)) {\n\t\t\t\t\t\t\t\tidentical = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (!identical) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// close the tooltip when using the mouseleave close trigger\n\t\t\t\t\t\t// (see https://github.com/iamceege/tooltipster/pull/253)\n\t\t\t\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\t\t\t\tself._close();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (self.__options.trackTooltip) {\n\t\t\t\t\t\n\t\t\t\t\tvar currentBcr = $content[0].getBoundingClientRect();\n\t\t\t\t\t\n\t\t\t\t\tif (\tcurrentBcr.height !== self.__contentBcr.height\n\t\t\t\t\t\t||\tcurrentBcr.width !== self.__contentBcr.width\n\t\t\t\t\t) {\n\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\tself.__contentBcr = currentBcr;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, self.__options.trackerInterval);\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Closes the tooltip (after the closing delay)\n\t * \n\t * @param event\n\t * @param callback\n\t * @param force Set to true to override a potential refusal of the user's function\n\t * @returns {self}\n\t * @protected\n\t */\n\t_close: function(event, callback, force) {\n\t\t\n\t\tvar self = this,\n\t\t\tok = true;\n\t\t\n\t\tself._trigger({\n\t\t\ttype: 'close',\n\t\t\tevent: event,\n\t\t\tstop: function() {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t});\n\t\t\n\t\t// a destroying tooltip (force == true) may not refuse to close\n\t\tif (ok || force) {\n\t\t\t\n\t\t\t// save the method custom callback and cancel any open method custom callbacks\n\t\t\tif (callback) self.__callbacks.close.push(callback);\n\t\t\tself.__callbacks.open = [];\n\t\t\t\n\t\t\t// clear open/close timeouts\n\t\t\tself.__timeoutsClear();\n\t\t\t\n\t\t\tvar finishCallbacks = function() {\n\t\t\t\t\n\t\t\t\t// trigger any close method custom callbacks and reset them\n\t\t\t\t$.each(self.__callbacks.close, function(i,c) {\n\t\t\t\t\tc.call(self, self, {\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tself.__callbacks.close = [];\n\t\t\t};\n\t\t\t\n\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\n\t\t\t\tvar necessary = true,\n\t\t\t\t\td = new Date(),\n\t\t\t\t\tnow = d.getTime(),\n\t\t\t\t\tnewClosingTime = now + self.__options.animationDuration[1];\n\t\t\t\t\n\t\t\t\t// the tooltip may already already be disappearing, but if a new\n\t\t\t\t// call to close() is made after the animationDuration was changed\n\t\t\t\t// to 0 (for example), we ought to actually close it sooner than\n\t\t\t\t// previously scheduled. In that case it should be noted that the\n\t\t\t\t// browser will not adapt the animation duration to the new\n\t\t\t\t// animationDuration that was set after the start of the closing\n\t\t\t\t// animation.\n\t\t\t\t// Note: the same thing could be considered at opening, but is not\n\t\t\t\t// really useful since the tooltip is actually opened immediately\n\t\t\t\t// upon a call to _open(). Since it would not make the opening\n\t\t\t\t// animation finish sooner, its sole impact would be to trigger the\n\t\t\t\t// state event and the open callbacks sooner than the actual end of\n\t\t\t\t// the opening animation, which is not great.\n\t\t\t\tif (self.__state == 'disappearing') {\n\t\t\t\t\t\n\t\t\t\t\tif (\tnewClosingTime > self.__closingTime\n\t\t\t\t\t\t// in case closing is actually overdue because the script\n\t\t\t\t\t\t// execution was suspended. See #679\n\t\t\t\t\t\t&&\tself.__options.animationDuration[1] > 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tnecessary = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (necessary) {\n\t\t\t\t\t\n\t\t\t\t\tself.__closingTime = newClosingTime;\n\t\t\t\t\t\n\t\t\t\t\tif (self.__state != 'disappearing') {\n\t\t\t\t\t\tself.__stateSet('disappearing');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tvar finish = function() {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// stop the tracker\n\t\t\t\t\t\tclearInterval(self.__tracker);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// a \"beforeClose\" option has been asked several times but would\n\t\t\t\t\t\t// probably useless since the content element is still accessible\n\t\t\t\t\t\t// via ::content(), and because people can always use listeners\n\t\t\t\t\t\t// inside their content to track what's going on. For the sake of\n\t\t\t\t\t\t// simplicity, this has been denied. Bur for the rare people who\n\t\t\t\t\t\t// really need the option (for old browsers or for the case where\n\t\t\t\t\t\t// detaching the content is actually destructive, for file or\n\t\t\t\t\t\t// password inputs for example), this event will do the work.\n\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\ttype: 'closing',\n\t\t\t\t\t\t\tevent: event\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t// unbind listeners which are no longer needed\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t.off('.'+ self.__namespace +'-triggerClose')\n\t\t\t\t\t\t\t.removeClass('tooltipster-dying');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// orientationchange, scroll and resize listeners\n\t\t\t\t\t\t$(env.window).off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// scroll listeners\n\t\t\t\t\t\tself.__$originParents.each(function(i, el) {\n\t\t\t\t\t\t\t$(el).off('scroll.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// clear the array to prevent memory leaks\n\t\t\t\t\t\tself.__$originParents = null;\n\t\t\t\t\t\t\n\t\t\t\t\t\t$(env.window.document.body).off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$origin.off('.'+ self.__namespace +'-triggerClose');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._off('dismissable');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// a plugin that would like to remove the tooltip from the\n\t\t\t\t\t\t// DOM when closed should bind on this\n\t\t\t\t\t\tself.__stateSet('closed');\n\t\t\t\t\t\t\n\t\t\t\t\t\t// trigger event\n\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\ttype: 'after',\n\t\t\t\t\t\t\tevent: event\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our constructor custom callback function\n\t\t\t\t\t\tif (self.__options.functionAfter) {\n\t\t\t\t\t\t\tself.__options.functionAfter.call(self, self, {\n\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our method custom callbacks functions\n\t\t\t\t\t\tfinishCallbacks();\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip.css({\n\t\t\t\t\t\t\t'-moz-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-ms-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-o-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'-webkit-animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'animation-duration': self.__options.animationDuration[1] + 'ms',\n\t\t\t\t\t\t\t'transition-duration': self.__options.animationDuration[1] + 'ms'\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t// clear both potential open and close tasks\n\t\t\t\t\t\t\t.clearQueue()\n\t\t\t\t\t\t\t.removeClass('tooltipster-show')\n\t\t\t\t\t\t\t// for transitions only\n\t\t\t\t\t\t\t.addClass('tooltipster-dying');\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (self.__options.animationDuration[1] > 0) {\n\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip.queue(finish);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t.stop()\n\t\t\t\t\t\t\t.fadeOut(self.__options.animationDuration[1], finish);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// if the tooltip is already closed, we still need to trigger\n\t\t\t// the method custom callbacks\n\t\t\telse {\n\t\t\t\tfinishCallbacks();\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_off: function() {\n\t\tthis.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @returns {self}\n\t * @protected\n\t */\n\t_on: function() {\n\t\tthis.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For internal use by plugins, if needed\n\t *\n\t * @returns {self}\n\t * @protected\n\t */\n\t_one: function() {\n\t\tthis.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Opens the tooltip right away.\n\t *\n\t * @param event\n\t * @param callback Will be called when the opening animation is over\n\t * @returns {self}\n\t * @protected\n\t */\n\t_open: function(event, callback) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// if the destruction process has not begun and if this was not\n\t\t// triggered by an unwanted emulated click event\n\t\tif (!self.__destroying) {\n\t\t\t\n\t\t\t// check that the origin is still in the DOM\n\t\t\tif (\tbodyContains(self._$origin)\n\t\t\t\t// if the tooltip is enabled\n\t\t\t\t&&\tself.__enabled\n\t\t\t) {\n\t\t\t\t\n\t\t\t\tvar ok = true;\n\t\t\t\t\n\t\t\t\t// if the tooltip is not open yet, we need to call functionBefore.\n\t\t\t\t// otherwise we can jst go on\n\t\t\t\tif (self.__state == 'closed') {\n\t\t\t\t\t\n\t\t\t\t\t// trigger an event. The event.stop function allows the callback\n\t\t\t\t\t// to prevent the opening of the tooltip\n\t\t\t\t\tself._trigger({\n\t\t\t\t\t\ttype: 'before',\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\tstop: function() {\n\t\t\t\t\t\t\tok = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tif (ok && self.__options.functionBefore) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// call our custom function before continuing\n\t\t\t\t\t\tok = self.__options.functionBefore.call(self, self, {\n\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\torigin: self._$origin[0]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (ok !== false) {\n\t\t\t\t\t\n\t\t\t\t\t// if there is some content\n\t\t\t\t\tif (self.__Content !== null) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// save the method callback and cancel close method callbacks\n\t\t\t\t\t\tif (callback) {\n\t\t\t\t\t\t\tself.__callbacks.open.push(callback);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.__callbacks.close = [];\n\t\t\t\t\t\t\n\t\t\t\t\t\t// get rid of any appearance timeouts\n\t\t\t\t\t\tself.__timeoutsClear();\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar extraTime,\n\t\t\t\t\t\t\tfinish = function() {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (self.__state != 'stable') {\n\t\t\t\t\t\t\t\t\tself.__stateSet('stable');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// trigger any open method custom callbacks and reset them\n\t\t\t\t\t\t\t\t$.each(self.__callbacks.open, function(i,c) {\n\t\t\t\t\t\t\t\t\tc.call(self, self, {\n\t\t\t\t\t\t\t\t\t\torigin: self._$origin[0],\n\t\t\t\t\t\t\t\t\t\ttooltip: self._$tooltip[0]\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself.__callbacks.open = [];\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if the tooltip is already open\n\t\t\t\t\t\tif (self.__state !== 'closed') {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// the timer (if any) will start (or restart) right now\n\t\t\t\t\t\t\textraTime = 0;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// if it was disappearing, cancel that\n\t\t\t\t\t\t\tif (self.__state === 'disappearing') {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself.__stateSet('appearing');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t.clearQueue()\n\t\t\t\t\t\t\t\t\t\t.removeClass('tooltipster-dying')\n\t\t\t\t\t\t\t\t\t\t.addClass('tooltipster-show');\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__options.animationDuration[0] > 0) {\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[0]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tself._$tooltip.queue(finish);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// in case the tooltip was currently fading out, bring it back\n\t\t\t\t\t\t\t\t\t// to life\n\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t.stop()\n\t\t\t\t\t\t\t\t\t\t.fadeIn(finish);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// if the tooltip is already open, we still need to trigger the method\n\t\t\t\t\t\t\t// custom callback\n\t\t\t\t\t\t\telse if (self.__state == 'stable') {\n\t\t\t\t\t\t\t\tfinish();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// if the tooltip isn't already open, open it\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// a plugin must bind on this and store the tooltip in this._$tooltip\n\t\t\t\t\t\t\tself.__stateSet('appearing');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// the timer (if any) will start when the tooltip has fully appeared\n\t\t\t\t\t\t\t// after its transition\n\t\t\t\t\t\t\textraTime = self.__options.animationDuration[0];\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// insert the content inside the tooltip\n\t\t\t\t\t\t\tself.__contentInsert();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// reposition the tooltip and attach to the DOM\n\t\t\t\t\t\t\tself.reposition(event, true);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// animate in the tooltip. If the display plugin wants no css\n\t\t\t\t\t\t\t// animations, it may override the animation option with a\n\t\t\t\t\t\t\t// dummy value that will produce no effect\n\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// note: there seems to be an issue with start animations which\n\t\t\t\t\t\t\t\t// are randomly not played on fast devices in both Chrome and FF,\n\t\t\t\t\t\t\t\t// couldn't find a way to solve it yet. It seems that applying\n\t\t\t\t\t\t\t\t// the classes before appending to the DOM helps a little, but\n\t\t\t\t\t\t\t\t// it messes up some CSS transitions. The issue almost never\n\t\t\t\t\t\t\t\t// happens when delay[0]==0 though\n\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t.addClass('tooltipster-'+ self.__options.animation)\n\t\t\t\t\t\t\t\t\t.addClass('tooltipster-initial')\n\t\t\t\t\t\t\t\t\t.css({\n\t\t\t\t\t\t\t\t\t\t'-moz-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-ms-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-o-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'-webkit-animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'animation-duration': self.__options.animationDuration[0] + 'ms',\n\t\t\t\t\t\t\t\t\t\t'transition-duration': self.__options.animationDuration[0] + 'ms'\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tsetTimeout(\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// a quick hover may have already triggered a mouseleave\n\t\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t\t\t\t.addClass('tooltipster-show')\n\t\t\t\t\t\t\t\t\t\t\t\t.removeClass('tooltipster-initial');\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (self.__options.animationDuration[0] > 0) {\n\t\t\t\t\t\t\t\t\t\t\t\tself._$tooltip.delay(self.__options.animationDuration[0]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._$tooltip.queue(finish);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// old browsers will have to live with this\n\t\t\t\t\t\t\t\tself._$tooltip\n\t\t\t\t\t\t\t\t\t.css('display', 'none')\n\t\t\t\t\t\t\t\t\t.fadeIn(self.__options.animationDuration[0], finish);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// checks if the origin is removed while the tooltip is open\n\t\t\t\t\t\t\tself.__trackerStart();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// NOTE: the listeners below have a '-triggerClose' namespace\n\t\t\t\t\t\t\t// because we'll remove them when the tooltip closes (unlike\n\t\t\t\t\t\t\t// the '-triggerOpen' listeners). So some of them are actually\n\t\t\t\t\t\t\t// not about close triggers, rather about positioning.\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t$(env.window)\n\t\t\t\t\t\t\t\t// reposition on resize\n\t\t\t\t\t\t\t\t.on('resize.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tvar $ae = $(document.activeElement);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// reposition only if the resize event was not triggered upon the opening\n\t\t\t\t\t\t\t\t\t// of a virtual keyboard due to an input field being focused within the tooltip\n\t\t\t\t\t\t\t\t\t// (otherwise the repositioning would lose the focus)\n\t\t\t\t\t\t\t\t\tif (\t(!$ae.is('input') && !$ae.is('textarea'))\n\t\t\t\t\t\t\t\t\t\t||\t!$.contains(self._$tooltip[0], $ae[0])\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tself.reposition(e);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t// same as below for parents\n\t\t\t\t\t\t\t\t.on('scroll.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\tself.__scrollHandler(e);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__$originParents = self._$origin.parents();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// scrolling may require the tooltip to be moved or even\n\t\t\t\t\t\t\t// repositioned in some cases\n\t\t\t\t\t\t\tself.__$originParents.each(function(i, parent) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t$(parent).on('scroll.'+ self.__namespace +'-triggerClose', function(e) {\n\t\t\t\t\t\t\t\t\tself.__scrollHandler(e);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (\tself.__options.triggerClose.mouseleave\n\t\t\t\t\t\t\t\t||\t(self.__options.triggerClose.touchleave && env.hasTouchCapability)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// we use an event to allow users/plugins to control when the mouseleave/touchleave\n\t\t\t\t\t\t\t\t// close triggers will come to action. It allows to have more triggering elements\n\t\t\t\t\t\t\t\t// than just the origin and the tooltip for example, or to cancel/delay the closing,\n\t\t\t\t\t\t\t\t// or to make the tooltip interactive even if it wasn't when it was open, etc.\n\t\t\t\t\t\t\t\tself._on('dismissable', function(event) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (event.dismissable) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (event.delay) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttimeout = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\t\t\t// event.event may be undefined\n\t\t\t\t\t\t\t\t\t\t\t\tself._close(event.event);\n\t\t\t\t\t\t\t\t\t\t\t}, event.delay);\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself.__timeouts.close.push(timeout);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tself._close(event);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// now set the listeners that will trigger 'dismissable' events\n\t\t\t\t\t\t\t\tvar $elements = self._$origin,\n\t\t\t\t\t\t\t\t\teventNamesIn = '',\n\t\t\t\t\t\t\t\t\teventNamesOut = '',\n\t\t\t\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// if we have to allow interaction, bind on the tooltip too\n\t\t\t\t\t\t\t\tif (self.__options.interactive) {\n\t\t\t\t\t\t\t\t\t$elements = $elements.add(self._$tooltip);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (self.__options.triggerClose.mouseleave) {\n\t\t\t\t\t\t\t\t\teventNamesIn += 'mouseenter.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t\teventNamesOut += 'mouseleave.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (self.__options.triggerClose.touchleave && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\teventNamesIn += 'touchstart.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t\teventNamesOut += 'touchend.'+ self.__namespace +'-triggerClose touchcancel.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t$elements\n\t\t\t\t\t\t\t\t\t// close after some time spent outside of the elements\n\t\t\t\t\t\t\t\t\t.on(eventNamesOut, function(event) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// it's ok if the touch gesture ended up to be a swipe,\n\t\t\t\t\t\t\t\t\t\t// it's still a \"touch leave\" situation\n\t\t\t\t\t\t\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tvar delay = (event.type == 'mouseleave') ?\n\t\t\t\t\t\t\t\t\t\t\t\tself.__options.delay :\n\t\t\t\t\t\t\t\t\t\t\t\tself.__options.delayTouch;\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\t\t\t\t\t\tdelay: delay[1],\n\t\t\t\t\t\t\t\t\t\t\t\tdismissable: true,\n\t\t\t\t\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'dismissable'\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t// suspend the mouseleave timeout when the pointer comes back\n\t\t\t\t\t\t\t\t\t// over the elements\n\t\t\t\t\t\t\t\t\t.on(eventNamesIn, function(event) {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// it's also ok if the touch event is a swipe gesture\n\t\t\t\t\t\t\t\t\t\tif (\tself._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t\t||\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tself._trigger({\n\t\t\t\t\t\t\t\t\t\t\t\tdismissable: false,\n\t\t\t\t\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: 'dismissable'\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// close the tooltip when the origin gets a mouse click (common behavior of\n\t\t\t\t\t\t\t// native tooltips)\n\t\t\t\t\t\t\tif (self.__options.triggerClose.originClick) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._$origin.on('click.'+ self.__namespace + '-triggerClose', function(event) {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t// we could actually let a tap trigger this but this feature just\n\t\t\t\t\t\t\t\t\t// does not make sense on touch devices\n\t\t\t\t\t\t\t\t\tif (\t!self._touchIsTouchEvent(event)\n\t\t\t\t\t\t\t\t\t\t&&\t!self._touchIsEmulatedEvent(event)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tself._close(event);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// set the same bindings for click and touch on the body to close the tooltip\n\t\t\t\t\t\t\tif (\tself.__options.triggerClose.click\n\t\t\t\t\t\t\t\t||\t(self.__options.triggerClose.tap && env.hasTouchCapability)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// don't set right away since the click/tap event which triggered this method\n\t\t\t\t\t\t\t\t// (if it was a click/tap) is going to bubble up to the body, we don't want it\n\t\t\t\t\t\t\t\t// to close the tooltip immediately after it opened\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tvar eventNames = '',\n\t\t\t\t\t\t\t\t\t\t\t$body = $(env.window.document.body);\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.click) {\n\t\t\t\t\t\t\t\t\t\t\teventNames += 'click.'+ self.__namespace +'-triggerClose ';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.tap && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\t\t\teventNames += 'touchend.'+ self.__namespace +'-triggerClose';\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t$body.on(eventNames, function(event) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\tif (self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tif (!self.__options.interactive || !$.contains(self._$tooltip[0], event.target)) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tself._close(event);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t// needed to detect and ignore swiping\n\t\t\t\t\t\t\t\t\t\tif (self.__options.triggerClose.tap && env.hasTouchCapability) {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t$body.on('touchstart.'+ self.__namespace +'-triggerClose', function(event) {\n\t\t\t\t\t\t\t\t\t\t\t\tself._touchRecordEvent(event);\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself._trigger('ready');\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// call our custom callback\n\t\t\t\t\t\t\tif (self.__options.functionReady) {\n\t\t\t\t\t\t\t\tself.__options.functionReady.call(self, self, {\n\t\t\t\t\t\t\t\t\torigin: self._$origin[0],\n\t\t\t\t\t\t\t\t\ttooltip: self._$tooltip[0]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if we have a timer set, let the countdown begin\n\t\t\t\t\t\tif (self.__options.timer > 0) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tvar timeout = setTimeout(function() {\n\t\t\t\t\t\t\t\tself._close();\n\t\t\t\t\t\t\t}, self.__options.timer + extraTime);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__timeouts.close.push(timeout);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * When using the mouseenter/touchstart open triggers, this function will\n\t * schedule the opening of the tooltip after the delay, if there is one\n\t *\n\t * @param event\n\t * @returns {self}\n\t * @protected\n \t */\n\t_openShortly: function(event) {\n\t\t\n\t\tvar self = this,\n\t\t\tok = true;\n\t\t\n\t\tif (self.__state != 'stable' && self.__state != 'appearing') {\n\t\t\t\n\t\t\t// if a timeout is not already running\n\t\t\tif (!self.__timeouts.open) {\n\t\t\t\t\n\t\t\t\tself._trigger({\n\t\t\t\t\ttype: 'start',\n\t\t\t\t\tevent: event,\n\t\t\t\t\tstop: function() {\n\t\t\t\t\t\tok = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (ok) {\n\t\t\t\t\t\n\t\t\t\t\tvar delay = (event.type.indexOf('touch') == 0) ?\n\t\t\t\t\t\tself.__options.delayTouch :\n\t\t\t\t\t\tself.__options.delay;\n\t\t\t\t\t\n\t\t\t\t\tif (delay[0]) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.__timeouts.open = setTimeout(function() {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tself.__timeouts.open = null;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// open only if the pointer (mouse or touch) is still over the origin.\n\t\t\t\t\t\t\t// The check on the \"meaningful event\" can only be made here, after some\n\t\t\t\t\t\t\t// time has passed (to know if the touch was a swipe or not)\n\t\t\t\t\t\t\tif (self.__pointerIsOverOrigin && self._touchIsMeaningfulEvent(event)) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// signal that we go on\n\t\t\t\t\t\t\t\tself._trigger('startend');\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._open(event);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// signal that we cancel\n\t\t\t\t\t\t\t\tself._trigger('startcancel');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, delay[0]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// signal that we go on\n\t\t\t\t\t\tself._trigger('startend');\n\t\t\t\t\t\t\n\t\t\t\t\t\tself._open(event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Meant for plugins to get their options\n\t * \n\t * @param {string} pluginName The name of the plugin that asks for its options\n\t * @param {object} defaultOptions The default options of the plugin\n\t * @returns {object} The options\n\t * @protected\n\t */\n\t_optionsExtract: function(pluginName, defaultOptions) {\n\t\t\n\t\tvar self = this,\n\t\t\toptions = $.extend(true, {}, defaultOptions);\n\t\t\n\t\t// if the plugin options were isolated in a property named after the\n\t\t// plugin, use them (prevents conflicts with other plugins)\n\t\tvar pluginOptions = self.__options[pluginName];\n\t\t\n\t\t// if not, try to get them as regular options\n\t\tif (!pluginOptions){\n\t\t\t\n\t\t\tpluginOptions = {};\n\t\t\t\n\t\t\t$.each(defaultOptions, function(optionName, value) {\n\t\t\t\t\n\t\t\t\tvar o = self.__options[optionName];\n\t\t\t\t\n\t\t\t\tif (o !== undefined) {\n\t\t\t\t\tpluginOptions[optionName] = o;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t\n\t\t// let's merge the default options and the ones that were provided. We'd want\n\t\t// to do a deep copy but not let jQuery merge arrays, so we'll do a shallow\n\t\t// extend on two levels, that will be enough if options are not more than 1\n\t\t// level deep\n\t\t$.each(options, function(optionName, value) {\n\t\t\t\n\t\t\tif (pluginOptions[optionName] !== undefined) {\n\t\t\t\t\n\t\t\t\tif ((\t\ttypeof value == 'object'\n\t\t\t\t\t\t&&\t!(value instanceof Array)\n\t\t\t\t\t\t&&\tvalue != null\n\t\t\t\t\t)\n\t\t\t\t\t&&\n\t\t\t\t\t(\t\ttypeof pluginOptions[optionName] == 'object'\n\t\t\t\t\t\t&&\t!(pluginOptions[optionName] instanceof Array)\n\t\t\t\t\t\t&&\tpluginOptions[optionName] != null\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t$.extend(options[optionName], pluginOptions[optionName]);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\toptions[optionName] = pluginOptions[optionName];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\treturn options;\n\t},\n\t\n\t/**\n\t * Used at instantiation of the plugin, or afterwards by plugins that activate themselves\n\t * on existing instances\n\t * \n\t * @param {object} pluginName\n\t * @returns {self}\n\t * @protected\n\t */\n\t_plug: function(pluginName) {\n\t\t\n\t\tvar plugin = $.tooltipster._plugin(pluginName);\n\t\t\n\t\tif (plugin) {\n\t\t\t\n\t\t\t// if there is a constructor for instances\n\t\t\tif (plugin.instance) {\n\t\t\t\t\n\t\t\t\t// proxy non-private methods on the instance to allow new instance methods\n\t\t\t\t$.tooltipster.__bridge(plugin.instance, this, plugin.name);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthrow new Error('The \"'+ pluginName +'\" plugin is not defined');\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * This will return true if the event is a mouse event which was\n\t * emulated by the browser after a touch event. This allows us to\n\t * really dissociate mouse and touch triggers.\n\t * \n\t * There is a margin of error if a real mouse event is fired right\n\t * after (within the delay shown below) a touch event on the same\n\t * element, but hopefully it should not happen often.\n\t * \n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsEmulatedEvent: function(event) {\n\t\t\n\t\tvar isEmulated = false,\n\t\t\tnow = new Date().getTime();\n\t\t\n\t\tfor (var i = this.__touchEvents.length - 1; i >= 0; i--) {\n\t\t\t\n\t\t\tvar e = this.__touchEvents[i];\n\t\t\t\n\t\t\t// delay, in milliseconds. It's supposed to be 300ms in\n\t\t\t// most browsers (350ms on iOS) to allow a double tap but\n\t\t\t// can be less (check out FastClick for more info)\n\t\t\tif (now - e.time < 500) {\n\t\t\t\t\n\t\t\t\tif (e.target === event.target) {\n\t\t\t\t\tisEmulated = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn isEmulated;\n\t},\n\t\n\t/**\n\t * Returns false if the event was an emulated mouse event or\n\t * a touch event involved in a swipe gesture.\n\t * \n\t * @param {object} event\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsMeaningfulEvent: function(event) {\n\t\treturn (\n\t\t\t\t(this._touchIsTouchEvent(event) && !this._touchSwiped(event.target))\n\t\t\t||\t(!this._touchIsTouchEvent(event) && !this._touchIsEmulatedEvent(event))\n\t\t);\n\t},\n\t\n\t/**\n\t * Checks if an event is a touch event\n\t * \n\t * @param {object} event\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchIsTouchEvent: function(event){\n\t\treturn event.type.indexOf('touch') == 0;\n\t},\n\t\n\t/**\n\t * Store touch events for a while to detect swiping and emulated mouse events\n\t * \n\t * @param {object} event\n\t * @returns {self}\n\t * @protected\n\t */\n\t_touchRecordEvent: function(event) {\n\t\t\n\t\tif (this._touchIsTouchEvent(event)) {\n\t\t\tevent.time = new Date().getTime();\n\t\t\tthis.__touchEvents.push(event);\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns true if a swipe happened after the last touchstart event fired on\n\t * event.target.\n\t * \n\t * We need to differentiate a swipe from a tap before we let the event open\n\t * or close the tooltip. A swipe is when a touchmove (scroll) event happens\n\t * on the body between the touchstart and the touchend events of an element.\n\t * \n\t * @param {object} target The HTML element that may have triggered the swipe\n\t * @returns {boolean}\n\t * @protected\n\t */\n\t_touchSwiped: function(target) {\n\t\t\n\t\tvar swiped = false;\n\t\t\n\t\tfor (var i = this.__touchEvents.length - 1; i >= 0; i--) {\n\t\t\t\n\t\t\tvar e = this.__touchEvents[i];\n\t\t\t\n\t\t\tif (e.type == 'touchmove') {\n\t\t\t\tswiped = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse if (\n\t\t\t\te.type == 'touchstart'\n\t\t\t\t&&\ttarget === e.target\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn swiped;\n\t},\n\t\n\t/**\n\t * Triggers an event on the instance emitters\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_trigger: function() {\n\t\t\n\t\tvar args = Array.prototype.slice.apply(arguments);\n\t\t\n\t\tif (typeof args[0] == 'string') {\n\t\t\targs[0] = { type: args[0] };\n\t\t}\n\t\t\n\t\t// add properties to the event\n\t\targs[0].instance = this;\n\t\targs[0].origin = this._$origin ? this._$origin[0] : null;\n\t\targs[0].tooltip = this._$tooltip ? this._$tooltip[0] : null;\n\t\t\n\t\t// note: the order of emitters matters\n\t\tthis.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);\n\t\t$.tooltipster._trigger.apply($.tooltipster, args);\n\t\tthis.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Deactivate a plugin on this instance\n\t * \n\t * @returns {self}\n\t * @protected\n\t */\n\t_unplug: function(pluginName) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// if the plugin has been activated on this instance\n\t\tif (self[pluginName]) {\n\t\t\t\n\t\t\tvar plugin = $.tooltipster._plugin(pluginName);\n\t\t\t\n\t\t\t// if there is a constructor for instances\n\t\t\tif (plugin.instance) {\n\t\t\t\t\n\t\t\t\t// unbridge\n\t\t\t\t$.each(plugin.instance, function(methodName, fn) {\n\t\t\t\t\t\n\t\t\t\t\t// if the method exists (privates methods do not) and comes indeed from\n\t\t\t\t\t// this plugin (may be missing or come from a conflicting plugin).\n\t\t\t\t\tif (\tself[methodName]\n\t\t\t\t\t\t&&\tself[methodName].bridged === self[pluginName]\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete self[methodName];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\t\n\t\t\t// destroy the plugin\n\t\t\tif (self[pluginName].__destroy) {\n\t\t\t\tself[pluginName].__destroy();\n\t\t\t}\n\t\t\t\n\t\t\t// remove the reference to the plugin instance\n\t\t\tdelete self[pluginName];\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * @see self::_close\n\t * @returns {self}\n\t * @public\n\t */\n\tclose: function(callback) {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis._close(null, callback);\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Sets or gets the content of the tooltip\n\t * \n\t * @returns {mixed|self}\n\t * @public\n\t */\n\tcontent: function(content) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\t// getter method\n\t\tif (content === undefined) {\n\t\t\treturn self.__Content;\n\t\t}\n\t\t// setter method\n\t\telse {\n\t\t\t\n\t\t\tif (!self.__destroyed) {\n\t\t\t\t\n\t\t\t\t// change the content\n\t\t\t\tself.__contentSet(content);\n\t\t\t\t\n\t\t\t\tif (self.__Content !== null) {\n\t\t\t\t\t\n\t\t\t\t\t// update the tooltip if it is open\n\t\t\t\t\tif (self.__state !== 'closed') {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reset the content in the tooltip\n\t\t\t\t\t\tself.__contentInsert();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// reposition and resize the tooltip\n\t\t\t\t\t\tself.reposition();\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if we want to play a little animation showing the content changed\n\t\t\t\t\t\tif (self.__options.updateAnimation) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (env.hasTransitions) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// keep the reference in the local scope\n\t\t\t\t\t\t\t\tvar animation = self.__options.updateAnimation;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tself._$tooltip.addClass('tooltipster-update-'+ animation);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// remove the class after a while. The actual duration of the\n\t\t\t\t\t\t\t\t// update animation may be shorter, it's set in the CSS rules\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.removeClass('tooltipster-update-'+ animation);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}, 1000);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tself._$tooltip.fadeTo(200, 0.5, function() {\n\t\t\t\t\t\t\t\t\tif (self.__state != 'closed') {\n\t\t\t\t\t\t\t\t\t\tself._$tooltip.fadeTo(200, 1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself._close();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tself.__destroyError();\n\t\t\t}\n\t\t\t\n\t\t\treturn self;\n\t\t}\n\t},\n\t\n\t/**\n\t * Destroys the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tdestroy: function() {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (!self.__destroyed) {\n\t\t\t\n\t\t\tif(self.__state != 'closed'){\n\t\t\t\t\n\t\t\t\t// no closing delay\n\t\t\t\tself.option('animationDuration', 0)\n\t\t\t\t\t// force closing\n\t\t\t\t\t._close(null, null, true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// there might be an open timeout still running\n\t\t\t\tself.__timeoutsClear();\n\t\t\t}\n\t\t\t\n\t\t\t// send event\n\t\t\tself._trigger('destroy');\n\t\t\t\n\t\t\tself.__destroyed = true;\n\t\t\t\n\t\t\tself._$origin\n\t\t\t\t.removeData(self.__namespace)\n\t\t\t\t// remove the open trigger listeners\n\t\t\t\t.off('.'+ self.__namespace +'-triggerOpen');\n\t\t\t\n\t\t\t// remove the touch listener\n\t\t\t$(env.window.document.body).off('.' + self.__namespace +'-triggerOpen');\n\t\t\t\n\t\t\tvar ns = self._$origin.data('tooltipster-ns');\n\t\t\t\n\t\t\t// if the origin has been removed from DOM, its data may\n\t\t\t// well have been destroyed in the process and there would\n\t\t\t// be nothing to clean up or restore\n\t\t\tif (ns) {\n\t\t\t\t\n\t\t\t\t// if there are no more tooltips on this element\n\t\t\t\tif (ns.length === 1) {\n\t\t\t\t\t\n\t\t\t\t\t// optional restoration of a title attribute\n\t\t\t\t\tvar title = null;\n\t\t\t\t\tif (self.__options.restoration == 'previous') {\n\t\t\t\t\t\ttitle = self._$origin.data('tooltipster-initialTitle');\n\t\t\t\t\t}\n\t\t\t\t\telse if (self.__options.restoration == 'current') {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// old school technique to stringify when outerHTML is not supported\n\t\t\t\t\t\ttitle = (typeof self.__Content == 'string') ?\n\t\t\t\t\t\t\tself.__Content :\n\t\t\t\t\t\t\t$('
    ').append(self.__Content).html();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (title) {\n\t\t\t\t\t\tself._$origin.attr('title', title);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// final cleaning\n\t\t\t\t\t\n\t\t\t\t\tself._$origin.removeClass('tooltipstered');\n\t\t\t\t\t\n\t\t\t\t\tself._$origin\n\t\t\t\t\t\t.removeData('tooltipster-ns')\n\t\t\t\t\t\t.removeData('tooltipster-initialTitle');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// remove the instance namespace from the list of namespaces of\n\t\t\t\t\t// tooltips present on the element\n\t\t\t\t\tns = $.grep(ns, function(el, i) {\n\t\t\t\t\t\treturn el !== self.__namespace;\n\t\t\t\t\t});\n\t\t\t\t\tself._$origin.data('tooltipster-ns', ns);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// last event\n\t\t\tself._trigger('destroyed');\n\t\t\t\n\t\t\t// unbind private and public event listeners\n\t\t\tself._off();\n\t\t\tself.off();\n\t\t\t\n\t\t\t// remove external references, just in case\n\t\t\tself.__Content = null;\n\t\t\tself.__$emitterPrivate = null;\n\t\t\tself.__$emitterPublic = null;\n\t\t\tself.__options.parent = null;\n\t\t\tself._$origin = null;\n\t\t\tself._$tooltip = null;\n\t\t\t\n\t\t\t// make sure the object is no longer referenced in there to prevent\n\t\t\t// memory leaks\n\t\t\t$.tooltipster.__instancesLatestArr = $.grep($.tooltipster.__instancesLatestArr, function(el, i) {\n\t\t\t\treturn self !== el;\n\t\t\t});\n\t\t\t\n\t\t\tclearInterval(self.__garbageCollector);\n\t\t}\n\t\telse {\n\t\t\tself.__destroyError();\n\t\t}\n\t\t\n\t\t// we return the scope rather than true so that the call to\n\t\t// .tooltipster('destroy') actually returns the matched elements\n\t\t// and applies to all of them\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Disables the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tdisable: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\t\n\t\t\t// close first, in case the tooltip would not disappear on\n\t\t\t// its own (no close trigger)\n\t\t\tthis._close();\n\t\t\tthis.__enabled = false;\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns the HTML element of the origin\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\telementOrigin: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\treturn this._$origin[0];\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t},\n\t\n\t/**\n\t * Returns the HTML element of the tooltip\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\telementTooltip: function() {\n\t\treturn this._$tooltip ? this._$tooltip[0] : null;\n\t},\n\t\n\t/**\n\t * Enables the tooltip\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tenable: function() {\n\t\tthis.__enabled = true;\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Alias, deprecated in 4.0.0\n\t * \n\t * @param {function} callback\n\t * @returns {self}\n\t * @public\n\t */\n\thide: function(callback) {\n\t\treturn this.close(callback);\n\t},\n\t\n\t/**\n\t * Returns the instance\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\tinstance: function() {\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_off() instead)\n\t * \n\t * @returns {self}\n\t * @public\n\t */\n\toff: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins (use ::_on() instead)\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\ton: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\tone: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * @see self::_open\n\t * @returns {self}\n\t * @public\n\t */\n\topen: function(callback) {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis._open(null, callback);\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Get or set options. For internal use and advanced users only.\n\t * \n\t * @param {string} o Option name\n\t * @param {mixed} val optional A new value for the option\n\t * @return {mixed|self} If val is omitted, the value of the option\n\t * is returned, otherwise the instance itself is returned\n\t * @public\n\t */ \n\toption: function(o, val) {\n\t\t\n\t\t// getter\n\t\tif (val === undefined) {\n\t\t\treturn this.__options[o];\n\t\t}\n\t\t// setter\n\t\telse {\n\t\t\t\n\t\t\tif (!this.__destroyed) {\n\t\t\t\t\n\t\t\t\t// change value\n\t\t\t\tthis.__options[o] = val;\n\t\t\t\t\n\t\t\t\t// format\n\t\t\t\tthis.__optionsFormat();\n\t\t\t\t\n\t\t\t\t// re-prepare the triggers if needed\n\t\t\t\tif ($.inArray(o, ['trigger', 'triggerClose', 'triggerOpen']) >= 0) {\n\t\t\t\t\tthis.__prepareOrigin();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (o === 'selfDestruction') {\n\t\t\t\t\tthis.__prepareGC();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.__destroyError();\n\t\t\t}\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t},\n\t\n\t/**\n\t * This method is in charge of setting the position and size properties of the tooltip.\n\t * All the hard work is delegated to the display plugin.\n\t * Note: The tooltip may be detached from the DOM at the moment the method is called \n\t * but must be attached by the end of the method call.\n\t * \n\t * @param {object} event For internal use only. Defined if an event such as\n\t * window resizing triggered the repositioning\n\t * @param {boolean} tooltipIsDetached For internal use only. Set this to true if you\n\t * know that the tooltip not being in the DOM is not an issue (typically when the\n\t * tooltip element has just been created but has not been added to the DOM yet).\n\t * @returns {self}\n\t * @public\n\t */\n\treposition: function(event, tooltipIsDetached) {\n\t\t\n\t\tvar self = this;\n\t\t\n\t\tif (!self.__destroyed) {\n\t\t\t\n\t\t\t// if the tooltip is still open and the origin is still in the DOM\n\t\t\tif (self.__state != 'closed' && bodyContains(self._$origin)) {\n\t\t\t\t\n\t\t\t\t// if the tooltip has not been removed from DOM manually (or if it\n\t\t\t\t// has been detached on purpose)\n\t\t\t\tif (tooltipIsDetached || bodyContains(self._$tooltip)) {\n\t\t\t\t\t\n\t\t\t\t\tif (!tooltipIsDetached) {\n\t\t\t\t\t\t// detach in case the tooltip overflows the window and adds\n\t\t\t\t\t\t// scrollbars to it, so __geometry can be accurate\n\t\t\t\t\t\tself._$tooltip.detach();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// refresh the geometry object before passing it as a helper\n\t\t\t\t\tself.__Geometry = self.__geometry();\n\t\t\t\t\t\n\t\t\t\t\t// let a plugin fo the rest\n\t\t\t\t\tself._trigger({\n\t\t\t\t\t\ttype: 'reposition',\n\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\thelper: {\n\t\t\t\t\t\t\tgeo: self.__Geometry\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tself.__destroyError();\n\t\t}\n\t\t\n\t\treturn self;\n\t},\n\t\n\t/**\n\t * Alias, deprecated in 4.0.0\n\t *\n\t * @param callback\n\t * @returns {self}\n\t * @public\n\t */\n\tshow: function(callback) {\n\t\treturn this.open(callback);\n\t},\n\t\n\t/**\n\t * Returns some properties about the instance\n\t * \n\t * @returns {object}\n\t * @public\n\t */\n\tstatus: function() {\n\t\t\n\t\treturn {\n\t\t\tdestroyed: this.__destroyed,\n\t\t\tenabled: this.__enabled,\n\t\t\topen: this.__state !== 'closed',\n\t\t\tstate: this.__state\n\t\t};\n\t},\n\t\n\t/**\n\t * For public use only, not to be used by plugins\n\t *\n\t * @returns {self}\n\t * @public\n\t */\n\ttriggerHandler: function() {\n\t\t\n\t\tif (!this.__destroyed) {\n\t\t\tthis.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));\n\t\t}\n\t\telse {\n\t\t\tthis.__destroyError();\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n};\n\n$.fn.tooltipster = function() {\n\t\n\t// for using in closures\n\tvar args = Array.prototype.slice.apply(arguments),\n\t\t// common mistake: an HTML element can't be in several tooltips at the same time\n\t\tcontentCloningWarning = 'You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.';\n\t\n\t// this happens with $(sel).tooltipster(...) when $(sel) does not match anything\n\tif (this.length === 0) {\n\t\t\n\t\t// still chainable\n\t\treturn this;\n\t}\n\t// this happens when calling $(sel).tooltipster('methodName or options')\n\t// where $(sel) matches one or more elements\n\telse {\n\t\t\n\t\t// method calls\n\t\tif (typeof args[0] === 'string') {\n\t\t\t\n\t\t\tvar v = '#*$~&';\n\t\t\t\n\t\t\tthis.each(function() {\n\t\t\t\t\n\t\t\t\t// retrieve the namepaces of the tooltip(s) that exist on that element.\n\t\t\t\t// We will interact with the first tooltip only.\n\t\t\t\tvar ns = $(this).data('tooltipster-ns'),\n\t\t\t\t\t// self represents the instance of the first tooltipster plugin\n\t\t\t\t\t// associated to the current HTML object of the loop\n\t\t\t\t\tself = ns ? $(this).data(ns[0]) : null;\n\t\t\t\t\n\t\t\t\t// if the current element holds a tooltipster instance\n\t\t\t\tif (self) {\n\t\t\t\t\t\n\t\t\t\t\tif (typeof self[args[0]] === 'function') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (\tthis.length > 1\n\t\t\t\t\t\t\t&&\targs[0] == 'content'\n\t\t\t\t\t\t\t&&\t(\targs[1] instanceof $\n\t\t\t\t\t\t\t\t|| (typeof args[1] == 'object' && args[1] != null && args[1].tagName)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t&&\t!self.__options.contentCloning\n\t\t\t\t\t\t\t&&\tself.__options.debug\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconsole.log(contentCloningWarning);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// note : args[1] and args[2] may not be defined\n\t\t\t\t\t\tvar resp = self[args[0]](args[1], args[2]);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error('Unknown method \"'+ args[0] +'\"');\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// if the function returned anything other than the instance\n\t\t\t\t\t// itself (which implies chaining, except for the `instance` method)\n\t\t\t\t\tif (resp !== self || args[0] === 'instance') {\n\t\t\t\t\t\t\n\t\t\t\t\t\tv = resp;\n\t\t\t\t\t\t\n\t\t\t\t\t\t// return false to stop .each iteration on the first element\n\t\t\t\t\t\t// matched by the selector\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow new Error('You called Tooltipster\\'s \"'+ args[0] +'\" method on an uninitialized element');\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\treturn (v !== '#*$~&') ? v : this;\n\t\t}\n\t\t// first argument is undefined or an object: the tooltip is initializing\n\t\telse {\n\t\t\t\n\t\t\t// reset the array of last initialized objects\n\t\t\t$.tooltipster.__instancesLatestArr = [];\n\t\t\t\n\t\t\t// is there a defined value for the multiple option in the options object ?\n\t\t\tvar\tmultipleIsSet = args[0] && args[0].multiple !== undefined,\n\t\t\t\t// if the multiple option is set to true, or if it's not defined but\n\t\t\t\t// set to true in the defaults\n\t\t\t\tmultiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple),\n\t\t\t\t// same for content\n\t\t\t\tcontentIsSet = args[0] && args[0].content !== undefined,\n\t\t\t\tcontent = (contentIsSet && args[0].content) || (!contentIsSet && defaults.content),\n\t\t\t\t// same for contentCloning\n\t\t\t\tcontentCloningIsSet = args[0] && args[0].contentCloning !== undefined,\n\t\t\t\tcontentCloning =\n\t\t\t\t\t\t(contentCloningIsSet && args[0].contentCloning)\n\t\t\t\t\t||\t(!contentCloningIsSet && defaults.contentCloning),\n\t\t\t\t// same for debug\n\t\t\t\tdebugIsSet = args[0] && args[0].debug !== undefined,\n\t\t\t\tdebug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug);\n\t\t\t\n\t\t\tif (\tthis.length > 1\n\t\t\t\t&&\t(\tcontent instanceof $\n\t\t\t\t\t|| (typeof content == 'object' && content != null && content.tagName)\n\t\t\t\t)\n\t\t\t\t&&\t!contentCloning\n\t\t\t\t&&\tdebug\n\t\t\t) {\n\t\t\t\tconsole.log(contentCloningWarning);\n\t\t\t}\n\t\t\t\n\t\t\t// create a tooltipster instance for each element if it doesn't\n\t\t\t// already have one or if the multiple option is set, and attach the\n\t\t\t// object to it\n\t\t\tthis.each(function() {\n\t\t\t\t\n\t\t\t\tvar go = false,\n\t\t\t\t\t$this = $(this),\n\t\t\t\t\tns = $this.data('tooltipster-ns'),\n\t\t\t\t\tobj = null;\n\t\t\t\t\n\t\t\t\tif (!ns) {\n\t\t\t\t\tgo = true;\n\t\t\t\t}\n\t\t\t\telse if (multiple) {\n\t\t\t\t\tgo = true;\n\t\t\t\t}\n\t\t\t\telse if (debug) {\n\t\t\t\t\tconsole.log('Tooltipster: one or more tooltips are already attached to the element below. Ignoring.');\n\t\t\t\t\tconsole.log(this);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (go) {\n\t\t\t\t\tobj = new $.Tooltipster(this, args[0]);\n\t\t\t\t\t\n\t\t\t\t\t// save the reference of the new instance\n\t\t\t\t\tif (!ns) ns = [];\n\t\t\t\t\tns.push(obj.__namespace);\n\t\t\t\t\t$this.data('tooltipster-ns', ns);\n\t\t\t\t\t\n\t\t\t\t\t// save the instance itself\n\t\t\t\t\t$this.data(obj.__namespace, obj);\n\t\t\t\t\t\n\t\t\t\t\t// call our constructor custom function.\n\t\t\t\t\t// we do this here and not in ::init() because we wanted\n\t\t\t\t\t// the object to be saved in $this.data before triggering\n\t\t\t\t\t// it\n\t\t\t\t\tif (obj.__options.functionInit) {\n\t\t\t\t\t\tobj.__options.functionInit.call(obj, obj, {\n\t\t\t\t\t\t\torigin: this\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// and now the event, for the plugins and core emitter\n\t\t\t\t\tobj._trigger('init');\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$.tooltipster.__instancesLatestArr.push(obj);\n\t\t\t});\n\t\t\t\n\t\t\treturn this;\n\t\t}\n\t}\n};\n\n// Utilities\n\n/**\n * A class to check if a tooltip can fit in given dimensions\n * \n * @param {object} $tooltip The jQuery wrapped tooltip element, or a clone of it\n */\nfunction Ruler($tooltip) {\n\t\n\t// list of instance variables\n\t\n\tthis.$container;\n\tthis.constraints = null;\n\tthis.__$tooltip;\n\t\n\tthis.__init($tooltip);\n}\n\nRuler.prototype = {\n\t\n\t/**\n\t * Move the tooltip into an invisible div that does not allow overflow to make\n\t * size tests. Note: the tooltip may or may not be attached to the DOM at the\n\t * moment this method is called, it does not matter.\n\t * \n\t * @param {object} $tooltip The object to test. May be just a clone of the\n\t * actual tooltip.\n\t * @private\n\t */\n\t__init: function($tooltip) {\n\t\t\n\t\tthis.__$tooltip = $tooltip;\n\t\t\n\t\tthis.__$tooltip\n\t\t\t.css({\n\t\t\t\t// for some reason we have to specify top and left 0\n\t\t\t\tleft: 0,\n\t\t\t\t// any overflow will be ignored while measuring\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t// positions at (0,0) without the div using 100% of the available width\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0\n\t\t\t})\n\t\t\t// overflow must be auto during the test. We re-set this in case\n\t\t\t// it were modified by the user\n\t\t\t.find('.tooltipster-content')\n\t\t\t\t.css('overflow', 'auto');\n\t\t\n\t\tthis.$container = $('
    ')\n\t\t\t.append(this.__$tooltip)\n\t\t\t.appendTo(env.window.document.body);\n\t},\n\t\n\t/**\n\t * Force the browser to redraw (re-render) the tooltip immediately. This is required\n\t * when you changed some CSS properties and need to make something with it\n\t * immediately, without waiting for the browser to redraw at the end of instructions.\n\t *\n\t * @see http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes\n\t * @private\n\t */\n\t__forceRedraw: function() {\n\t\t\n\t\t// note: this would work but for Webkit only\n\t\t//this.__$tooltip.close();\n\t\t//this.__$tooltip[0].offsetHeight;\n\t\t//this.__$tooltip.open();\n\t\t\n\t\t// works in FF too\n\t\tvar $p = this.__$tooltip.parent();\n\t\tthis.__$tooltip.detach();\n\t\tthis.__$tooltip.appendTo($p);\n\t},\n\t\n\t/**\n\t * Set maximum dimensions for the tooltip. A call to ::measure afterwards\n\t * will tell us if the content overflows or if it's ok\n\t *\n\t * @param {int} width\n\t * @param {int} height\n\t * @return {Ruler}\n\t * @public\n\t */\n\tconstrain: function(width, height) {\n\t\t\n\t\tthis.constraints = {\n\t\t\twidth: width,\n\t\t\theight: height\n\t\t};\n\t\t\n\t\tthis.__$tooltip.css({\n\t\t\t// we disable display:flex, otherwise the content would overflow without\n\t\t\t// creating horizontal scrolling (which we need to detect).\n\t\t\tdisplay: 'block',\n\t\t\t// reset any previous height\n\t\t\theight: '',\n\t\t\t// we'll check if horizontal scrolling occurs\n\t\t\toverflow: 'auto',\n\t\t\t// we'll set the width and see what height is generated and if there\n\t\t\t// is horizontal overflow\n\t\t\twidth: width\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Reset the tooltip content overflow and remove the test container\n\t * \n\t * @returns {Ruler}\n\t * @public\n\t */\n\tdestroy: function() {\n\t\t\n\t\t// in case the element was not a clone\n\t\tthis.__$tooltip\n\t\t\t.detach()\n\t\t\t.find('.tooltipster-content')\n\t\t\t\t.css({\n\t\t\t\t\t// reset to CSS value\n\t\t\t\t\tdisplay: '',\n\t\t\t\t\toverflow: ''\n\t\t\t\t});\n\t\t\n\t\tthis.$container.remove();\n\t},\n\t\n\t/**\n\t * Removes any constraints\n\t * \n\t * @returns {Ruler}\n\t * @public\n\t */\n\tfree: function() {\n\t\t\n\t\tthis.constraints = null;\n\t\t\n\t\t// reset to natural size\n\t\tthis.__$tooltip.css({\n\t\t\tdisplay: '',\n\t\t\theight: '',\n\t\t\toverflow: 'visible',\n\t\t\twidth: ''\n\t\t});\n\t\t\n\t\treturn this;\n\t},\n\t\n\t/**\n\t * Returns the size of the tooltip. When constraints are applied, also returns\n\t * whether the tooltip fits in the provided dimensions.\n\t * The idea is to see if the new height is small enough and if the content does\n\t * not overflow horizontally.\n\t *\n\t * @param {int} width\n\t * @param {int} height\n\t * @returns {object} An object with a bool `fits` property and a `size` property\n\t * @public\n\t */\n\tmeasure: function() {\n\t\t\n\t\tthis.__forceRedraw();\n\t\t\n\t\tvar tooltipBcr = this.__$tooltip[0].getBoundingClientRect(),\n\t\t\tresult = { size: {\n\t\t\t\t// bcr.width/height are not defined in IE8- but in this\n\t\t\t\t// case, bcr.right/bottom will have the same value\n\t\t\t\t// except in iOS 8+ where tooltipBcr.bottom/right are wrong\n\t\t\t\t// after scrolling for reasons yet to be determined.\n\t\t\t\t// tooltipBcr.top/left might not be 0, see issue #514\n\t\t\t\theight: tooltipBcr.height || (tooltipBcr.bottom - tooltipBcr.top),\n\t\t\t\twidth: tooltipBcr.width || (tooltipBcr.right - tooltipBcr.left)\n\t\t\t}};\n\t\t\n\t\tif (this.constraints) {\n\t\t\t\n\t\t\t// note: we used to use offsetWidth instead of boundingRectClient but\n\t\t\t// it returned rounded values, causing issues with sub-pixel layouts.\n\t\t\t\n\t\t\t// note2: noticed that the bcrWidth of text content of a div was once\n\t\t\t// greater than the bcrWidth of its container by 1px, causing the final\n\t\t\t// tooltip box to be too small for its content. However, evaluating\n\t\t\t// their widths one against the other (below) surprisingly returned\n\t\t\t// equality. Happened only once in Chrome 48, was not able to reproduce\n\t\t\t// => just having fun with float position values...\n\t\t\t\n\t\t\tvar $content = this.__$tooltip.find('.tooltipster-content'),\n\t\t\t\theight = this.__$tooltip.outerHeight(),\n\t\t\t\tcontentBcr = $content[0].getBoundingClientRect(),\n\t\t\t\tfits = {\n\t\t\t\t\theight: height <= this.constraints.height,\n\t\t\t\t\twidth: (\n\t\t\t\t\t\t// this condition accounts for min-width property that\n\t\t\t\t\t\t// may apply\n\t\t\t\t\t\ttooltipBcr.width <= this.constraints.width\n\t\t\t\t\t\t\t// the -1 is here because scrollWidth actually returns\n\t\t\t\t\t\t\t// a rounded value, and may be greater than bcr.width if\n\t\t\t\t\t\t\t// it was rounded up. This may cause an issue for contents\n\t\t\t\t\t\t\t// which actually really overflow by 1px or so, but that\n\t\t\t\t\t\t\t// should be rare. Not sure how to solve this efficiently.\n\t\t\t\t\t\t\t// See http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx\n\t\t\t\t\t\t&&\tcontentBcr.width >= $content[0].scrollWidth - 1\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t\n\t\t\tresult.fits = fits.height && fits.width;\n\t\t}\n\t\t\n\t\t// old versions of IE get the width wrong for some reason and it causes\n\t\t// the text to be broken to a new line, so we round it up. If the width\n\t\t// is the width of the screen though, we can assume it is accurate.\n\t\tif (\tenv.IE\n\t\t\t&&\tenv.IE <= 11\n\t\t\t&&\tresult.size.width !== env.window.document.documentElement.clientWidth\n\t\t) {\n\t\t\tresult.size.width = Math.ceil(result.size.width) + 1;\n\t\t}\n\t\t\n\t\treturn result;\n\t}\n};\n\n// quick & dirty compare function, not bijective nor multidimensional\nfunction areEqual(a,b) {\n\tvar same = true;\n\t$.each(a, function(i, _) {\n\t\tif (b[i] === undefined || a[i] !== b[i]) {\n\t\t\tsame = false;\n\t\t\treturn false;\n\t\t}\n\t});\n\treturn same;\n}\n\n/**\n * A fast function to check if an element is still in the DOM. It\n * tries to use an id as ids are indexed by the browser, or falls\n * back to jQuery's `contains` method. May fail if two elements\n * have the same id, but so be it\n *\n * @param {object} $obj A jQuery-wrapped HTML element\n * @return {boolean}\n */\nfunction bodyContains($obj) {\n\tvar id = $obj.attr('id'),\n\t\tel = id ? env.window.document.getElementById(id) : null;\n\t// must also check that the element with the id is the one we want\n\treturn el ? el === $obj[0] : $.contains(env.window.document.body, $obj[0]);\n}\n\n// detect IE versions for dirty fixes\nvar uA = navigator.userAgent.toLowerCase();\nif (uA.indexOf('msie') != -1) env.IE = parseInt(uA.split('msie')[1]);\nelse if (uA.toLowerCase().indexOf('trident') !== -1 && uA.indexOf(' rv:11') !== -1) env.IE = 11;\nelse if (uA.toLowerCase().indexOf('edge/') != -1) env.IE = parseInt(uA.toLowerCase().split('edge/')[1]);\n\n// detecting support for CSS transitions\nfunction transitionSupport() {\n\t\n\t// env.window is not defined yet when this is called\n\tif (!win) return false;\n\t\n\tvar b = win.document.body || win.document.documentElement,\n\t\ts = b.style,\n\t\tp = 'transition',\n\t\tv = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];\n\t\n\tif (typeof s[p] == 'string') { return true; }\n\t\n\tp = p.charAt(0).toUpperCase() + p.substr(1);\n\tfor (var i=0; i' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t\t'
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t''\n\t\t\t);\n\t\t\t\n\t\t\t// hide arrow if asked\n\t\t\tif (!this.__options.arrow) {\n\t\t\t\t$html\n\t\t\t\t\t.find('.tooltipster-box')\n\t\t\t\t\t\t.css('margin', 0)\n\t\t\t\t\t\t.end()\n\t\t\t\t\t.find('.tooltipster-arrow')\n\t\t\t\t\t\t.hide();\n\t\t\t}\n\t\t\t\n\t\t\t// apply min/max width if asked\n\t\t\tif (this.__options.minWidth) {\n\t\t\t\t$html.css('min-width', this.__options.minWidth + 'px');\n\t\t\t}\n\t\t\tif (this.__options.maxWidth) {\n\t\t\t\t$html.css('max-width', this.__options.maxWidth + 'px');\n\t\t\t}\n\t\t\t\n\t\t\tthis.__instance._$tooltip = $html;\n\t\t\t\n\t\t\t// tell the instance that the tooltip element has been created\n\t\t\tthis.__instance._trigger('created');\n\t\t},\n\t\t\n\t\t/**\n\t\t * Used when the plugin is to be unplugged\n\t\t *\n\t\t * @private\n\t\t */\n\t\t__destroy: function() {\n\t\t\tthis.__instance._off('.'+ self.__namespace);\n\t\t},\n\t\t\n\t\t/**\n\t\t * (Re)compute this.__options from the options declared to the instance\n\t\t *\n\t\t * @private\n\t\t */\n\t\t__optionsFormat: function() {\n\t\t\t\n\t\t\tvar self = this;\n\t\t\t\n\t\t\t// get the options\n\t\t\tself.__options = self.__instance._optionsExtract(pluginName, self.__defaults());\n\t\t\t\n\t\t\t// for backward compatibility, deprecated in v4.0.0\n\t\t\tif (self.__options.position) {\n\t\t\t\tself.__options.side = self.__options.position;\n\t\t\t}\n\t\t\t\n\t\t\t// options formatting\n\t\t\t\n\t\t\t// format distance as a four-cell array if it ain't one yet and then make\n\t\t\t// it an object with top/bottom/left/right properties\n\t\t\tif (typeof self.__options.distance != 'object') {\n\t\t\t\tself.__options.distance = [self.__options.distance];\n\t\t\t}\n\t\t\tif (self.__options.distance.length < 4) {\n\t\t\t\tif (self.__options.distance[1] === undefined) self.__options.distance[1] = self.__options.distance[0];\n\t\t\t\tif (self.__options.distance[2] === undefined) self.__options.distance[2] = self.__options.distance[0];\n\t\t\t\tif (self.__options.distance[3] === undefined) self.__options.distance[3] = self.__options.distance[1];\n\t\t\t}\n\t\t\t\n\t\t\tself.__options.distance = {\n\t\t\t\ttop: self.__options.distance[0],\n\t\t\t\tright: self.__options.distance[1],\n\t\t\t\tbottom: self.__options.distance[2],\n\t\t\t\tleft: self.__options.distance[3]\n\t\t\t};\n\t\t\t\n\t\t\t// let's transform:\n\t\t\t// 'top' into ['top', 'bottom', 'right', 'left']\n\t\t\t// 'right' into ['right', 'left', 'top', 'bottom']\n\t\t\t// 'bottom' into ['bottom', 'top', 'right', 'left']\n\t\t\t// 'left' into ['left', 'right', 'top', 'bottom']\n\t\t\tif (typeof self.__options.side == 'string') {\n\t\t\t\t\n\t\t\t\tvar opposites = {\n\t\t\t\t\t'top': 'bottom',\n\t\t\t\t\t'right': 'left',\n\t\t\t\t\t'bottom': 'top',\n\t\t\t\t\t'left': 'right'\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tself.__options.side = [self.__options.side, opposites[self.__options.side]];\n\t\t\t\t\n\t\t\t\tif (self.__options.side[0] == 'left' || self.__options.side[0] == 'right') {\n\t\t\t\t\tself.__options.side.push('top', 'bottom');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself.__options.side.push('right', 'left');\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// misc\n\t\t\t// disable the arrow in IE6 unless the arrow option was explicitly set to true\n\t\t\tif (\t$.tooltipster._env.IE === 6\n\t\t\t\t&&\tself.__options.arrow !== true\n\t\t\t) {\n\t\t\t\tself.__options.arrow = false;\n\t\t\t}\n\t\t},\n\t\t\n\t\t/**\n\t\t * This method must compute and set the positioning properties of the\n\t\t * tooltip (left, top, width, height, etc.). It must also make sure the\n\t\t * tooltip is eventually appended to its parent (since the element may be\n\t\t * detached from the DOM at the moment the method is called).\n\t\t *\n\t\t * We'll evaluate positioning scenarios to find which side can contain the\n\t\t * tooltip in the best way. We'll consider things relatively to the window\n\t\t * (unless the user asks not to), then to the document (if need be, or if the\n\t\t * user explicitly requires the tests to run on the document). For each\n\t\t * scenario, measures are taken, allowing us to know how well the tooltip\n\t\t * is going to fit. After that, a sorting function will let us know what\n\t\t * the best scenario is (we also allow the user to choose his favorite\n\t\t * scenario by using an event).\n\t\t * \n\t\t * @param {object} helper An object that contains variables that plugin\n\t\t * creators may find useful (see below)\n\t\t * @param {object} helper.geo An object with many layout properties\n\t\t * about objects of interest (window, document, origin). This should help\n\t\t * plugin users compute the optimal position of the tooltip\n\t\t * @private\n\t\t */\n\t\t__reposition: function(event, helper) {\n\t\t\t\n\t\t\tvar self = this,\n\t\t\t\tfinalResult,\n\t\t\t\t// to know where to put the tooltip, we need to know on which point\n\t\t\t\t// of the x or y axis we should center it. That coordinate is the target\n\t\t\t\ttargets = self.__targetFind(helper),\n\t\t\t\ttestResults = [];\n\t\t\t\n\t\t\t// make sure the tooltip is detached while we make tests on a clone\n\t\t\tself.__instance._$tooltip.detach();\n\t\t\t\n\t\t\t// we could actually provide the original element to the Ruler and\n\t\t\t// not a clone, but it just feels right to keep it out of the\n\t\t\t// machinery.\n\t\t\tvar $clone = self.__instance._$tooltip.clone(),\n\t\t\t\t// start position tests session\n\t\t\t\truler = $.tooltipster._getRuler($clone),\n\t\t\t\tsatisfied = false,\n\t\t\t\tanimation = self.__instance.option('animation');\n\t\t\t\n\t\t\t// an animation class could contain properties that distort the size\n\t\t\tif (animation) {\n\t\t\t\t$clone.removeClass('tooltipster-'+ animation);\n\t\t\t}\n\t\t\t\n\t\t\t// start evaluating scenarios\n\t\t\t$.each(['window', 'document'], function(i, container) {\n\t\t\t\t\n\t\t\t\tvar takeTest = null;\n\t\t\t\t\n\t\t\t\t// let the user decide to keep on testing or not\n\t\t\t\tself.__instance._trigger({\n\t\t\t\t\tcontainer: container,\n\t\t\t\t\thelper: helper,\n\t\t\t\t\tsatisfied: satisfied,\n\t\t\t\t\ttakeTest: function(bool) {\n\t\t\t\t\t\ttakeTest = bool;\n\t\t\t\t\t},\n\t\t\t\t\tresults: testResults,\n\t\t\t\t\ttype: 'positionTest'\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif (\ttakeTest == true\n\t\t\t\t\t||\t(\ttakeTest != false\n\t\t\t\t\t\t&&\tsatisfied == false\n\t\t\t\t\t\t\t// skip the window scenarios if asked. If they are reintegrated by\n\t\t\t\t\t\t\t// the callback of the positionTest event, they will have to be\n\t\t\t\t\t\t\t// excluded using the callback of positionTested\n\t\t\t\t\t\t&&\t(container != 'window' || self.__options.viewportAware)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\t\n\t\t\t\t\t// for each allowed side\n\t\t\t\t\tfor (var i=0; i < self.__options.side.length; i++) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar distance = {\n\t\t\t\t\t\t\t\thorizontal: 0,\n\t\t\t\t\t\t\t\tvertical: 0\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tside = self.__options.side[i];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (side == 'top' || side == 'bottom') {\n\t\t\t\t\t\t\tdistance.vertical = self.__options.distance[side];\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tdistance.horizontal = self.__options.distance[side];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// this may have an effect on the size of the tooltip if there are css\n\t\t\t\t\t\t// rules for the arrow or something else\n\t\t\t\t\t\tself.__sideChange($clone, side);\n\t\t\t\t\t\t\n\t\t\t\t\t\t$.each(['natural', 'constrained'], function(i, mode) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\ttakeTest = null;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// emit an event on the instance\n\t\t\t\t\t\t\tself.__instance._trigger({\n\t\t\t\t\t\t\t\tcontainer: container,\n\t\t\t\t\t\t\t\tevent: event,\n\t\t\t\t\t\t\t\thelper: helper,\n\t\t\t\t\t\t\t\tmode: mode,\n\t\t\t\t\t\t\t\tresults: testResults,\n\t\t\t\t\t\t\t\tsatisfied: satisfied,\n\t\t\t\t\t\t\t\tside: side,\n\t\t\t\t\t\t\t\ttakeTest: function(bool) {\n\t\t\t\t\t\t\t\t\ttakeTest = bool;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttype: 'positionTest'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (\ttakeTest == true\n\t\t\t\t\t\t\t\t||\t(\ttakeTest != false\n\t\t\t\t\t\t\t\t\t&&\tsatisfied == false\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tvar testResult = {\n\t\t\t\t\t\t\t\t\tcontainer: container,\n\t\t\t\t\t\t\t\t\t// we let the distance as an object here, it can make things a little easier\n\t\t\t\t\t\t\t\t\t// during the user's calculations at positionTest/positionTested\n\t\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t\t// whether the tooltip can fit in the size of the viewport (does not mean\n\t\t\t\t\t\t\t\t\t// that we'll be able to make it initially entirely visible, see 'whole')\n\t\t\t\t\t\t\t\t\tfits: null,\n\t\t\t\t\t\t\t\t\tmode: mode,\n\t\t\t\t\t\t\t\t\touterSize: null,\n\t\t\t\t\t\t\t\t\tside: side,\n\t\t\t\t\t\t\t\t\tsize: null,\n\t\t\t\t\t\t\t\t\ttarget: targets[side],\n\t\t\t\t\t\t\t\t\t// check if the origin has enough surface on screen for the tooltip to\n\t\t\t\t\t\t\t\t\t// aim at it without overflowing the viewport (this is due to the thickness\n\t\t\t\t\t\t\t\t\t// of the arrow represented by the minIntersection length).\n\t\t\t\t\t\t\t\t\t// If not, the tooltip will have to be partly or entirely off screen in\n\t\t\t\t\t\t\t\t\t// order to stay docked to the origin. This value will stay null when the\n\t\t\t\t\t\t\t\t\t// container is the document, as it is not relevant\n\t\t\t\t\t\t\t\t\twhole: null\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// get the size of the tooltip with or without size constraints\n\t\t\t\t\t\t\t\tvar rulerConfigured = (mode == 'natural') ?\n\t\t\t\t\t\t\t\t\t\truler.free() :\n\t\t\t\t\t\t\t\t\t\truler.constrain(\n\t\t\t\t\t\t\t\t\t\t\thelper.geo.available[container][side].width - distance.horizontal,\n\t\t\t\t\t\t\t\t\t\t\thelper.geo.available[container][side].height - distance.vertical\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\trulerResults = rulerConfigured.measure();\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttestResult.size = rulerResults.size;\n\t\t\t\t\t\t\t\ttestResult.outerSize = {\n\t\t\t\t\t\t\t\t\theight: rulerResults.size.height + distance.vertical,\n\t\t\t\t\t\t\t\t\twidth: rulerResults.size.width + distance.horizontal\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (mode == 'natural') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif(\t\thelper.geo.available[container][side].width >= testResult.outerSize.width\n\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.available[container][side].height >= testResult.outerSize.height\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\ttestResult.fits = true;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttestResult.fits = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\ttestResult.fits = rulerResults.fits;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif (container == 'window') {\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif (!testResult.fits) {\n\t\t\t\t\t\t\t\t\t\ttestResult.whole = false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tif (side == 'top' || side == 'bottom') {\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\ttestResult.whole = (\n\t\t\t\t\t\t\t\t\t\t\t\t\thelper.geo.origin.windowOffset.right >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.window.size.width - helper.geo.origin.windowOffset.left >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\ttestResult.whole = (\n\t\t\t\t\t\t\t\t\t\t\t\t\thelper.geo.origin.windowOffset.bottom >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t\t&&\thelper.geo.window.size.height - helper.geo.origin.windowOffset.top >= self.__options.minIntersection\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\ttestResults.push(testResult);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t// we don't need to compute more positions if we have one fully on screen\n\t\t\t\t\t\t\t\tif (testResult.whole) {\n\t\t\t\t\t\t\t\t\tsatisfied = true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t// don't run the constrained test unless the natural width was greater\n\t\t\t\t\t\t\t\t\t// than the available width, otherwise it's pointless as we know it\n\t\t\t\t\t\t\t\t\t// wouldn't fit either\n\t\t\t\t\t\t\t\t\tif (\ttestResult.mode == 'natural'\n\t\t\t\t\t\t\t\t\t\t&&\t(\ttestResult.fits\n\t\t\t\t\t\t\t\t\t\t\t||\ttestResult.size.width <= helper.geo.available[container][side].width\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\t// the user may eliminate the unwanted scenarios from testResults, but he's\n\t\t\t// not supposed to alter them at this point. functionPosition and the\n\t\t\t// position event serve that purpose.\n\t\t\tself.__instance._trigger({\n\t\t\t\tedit: function(r) {\n\t\t\t\t\ttestResults = r;\n\t\t\t\t},\n\t\t\t\tevent: event,\n\t\t\t\thelper: helper,\n\t\t\t\tresults: testResults,\n\t\t\t\ttype: 'positionTested'\n\t\t\t});\n\t\t\t\n\t\t\t/**\n\t\t\t * Sort the scenarios to find the favorite one.\n\t\t\t * \n\t\t\t * The favorite scenario is when we can fully display the tooltip on screen,\n\t\t\t * even if it means that the middle of the tooltip is no longer centered on\n\t\t\t * the middle of the origin (when the origin is near the edge of the screen\n\t\t\t * or even partly off screen). We want the tooltip on the preferred side,\n\t\t\t * even if it means that we have to use a constrained size rather than a\n\t\t\t * natural one (as long as it fits). When the origin is off screen at the top\n\t\t\t * the tooltip will be positioned at the bottom (if allowed), if the origin\n\t\t\t * is off screen on the right, it will be positioned on the left, etc.\n\t\t\t * If there are no scenarios where the tooltip can fit on screen, or if the\n\t\t\t * user does not want the tooltip to fit on screen (viewportAware == false),\n\t\t\t * we fall back to the scenarios relative to the document.\n\t\t\t * \n\t\t\t * When the tooltip is bigger than the viewport in either dimension, we stop\n\t\t\t * looking at the window scenarios and consider the document scenarios only,\n\t\t\t * with the same logic to find on which side it would fit best.\n\t\t\t * \n\t\t\t * If the tooltip cannot fit the document on any side, we force it at the\n\t\t\t * bottom, so at least the user can scroll to see it.\n \t\t\t */\n\t\t\ttestResults.sort(function(a, b) {\n\t\t\t\t\n\t\t\t\t// best if it's whole (the tooltip fits and adapts to the viewport)\n\t\t\t\tif (a.whole && !b.whole) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\telse if (!a.whole && b.whole) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\telse if (a.whole && b.whole) {\n\t\t\t\t\t\n\t\t\t\t\tvar ai = self.__options.side.indexOf(a.side),\n\t\t\t\t\t\tbi = self.__options.side.indexOf(b.side);\n\t\t\t\t\t\n\t\t\t\t\t// use the user's sides fallback array\n\t\t\t\t\tif (ai < bi) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (ai > bi) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// will be used if the user forced the tests to continue\n\t\t\t\t\t\treturn a.mode == 'natural' ? -1 : 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\t// better if it fits\n\t\t\t\t\tif (a.fits && !b.fits) {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!a.fits && b.fits) {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\telse if (a.fits && b.fits) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar ai = self.__options.side.indexOf(a.side),\n\t\t\t\t\t\t\tbi = self.__options.side.indexOf(b.side);\n\t\t\t\t\t\t\n\t\t\t\t\t\t// use the user's sides fallback array\n\t\t\t\t\t\tif (ai < bi) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (ai > bi) {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// will be used if the user forced the tests to continue\n\t\t\t\t\t\t\treturn a.mode == 'natural' ? -1 : 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// if everything failed, this will give a preference to the case where\n\t\t\t\t\t\t// the tooltip overflows the document at the bottom\n\t\t\t\t\t\tif (\ta.container == 'document'\n\t\t\t\t\t\t\t&&\ta.side == 'bottom'\n\t\t\t\t\t\t\t&&\ta.mode == 'natural'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn -1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\treturn 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t\n\t\t\tfinalResult = testResults[0];\n\t\t\t\n\t\t\t\n\t\t\t// now let's find the coordinates of the tooltip relatively to the window\n\t\t\tfinalResult.coord = {};\n\t\t\t\n\t\t\tswitch (finalResult.side) {\n\t\t\t\t\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'right':\n\t\t\t\t\tfinalResult.coord.top = Math.floor(finalResult.target - finalResult.size.height / 2);\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bottom':\n\t\t\t\tcase 'top':\n\t\t\t\t\tfinalResult.coord.left = Math.floor(finalResult.target - finalResult.size.width / 2);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tswitch (finalResult.side) {\n\t\t\t\t\n\t\t\t\tcase 'left':\n\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.left - finalResult.outerSize.width;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'right':\n\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.right + finalResult.distance.horizontal;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'top':\n\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.top - finalResult.outerSize.height;\n\t\t\t\t\tbreak;\n\t\t\t\t\n\t\t\t\tcase 'bottom':\n\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.bottom + finalResult.distance.vertical;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// if the tooltip can potentially be contained within the viewport dimensions\n\t\t\t// and that we are asked to make it fit on screen\n\t\t\tif (finalResult.container == 'window') {\n\t\t\t\t\n\t\t\t\t// if the tooltip overflows the viewport, we'll move it accordingly (then it will\n\t\t\t\t// not be centered on the middle of the origin anymore). We only move horizontally\n\t\t\t\t// for top and bottom tooltips and vice versa.\n\t\t\t\tif (finalResult.side == 'top' || finalResult.side == 'bottom') {\n\t\t\t\t\t\n\t\t\t\t\t// if there is an overflow on the left\n\t\t\t\t\tif (finalResult.coord.left < 0) {\n\t\t\t\t\t\t\n\t\t\t\t\t\t// prevent the overflow unless the origin itself gets off screen (minus the\n\t\t\t\t\t\t// margin needed to keep the arrow pointing at the target)\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.right - this.__options.minIntersection >= 0) {\n\t\t\t\t\t\t\tfinalResult.coord.left = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.right - this.__options.minIntersection - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// or an overflow on the right\n\t\t\t\t\telse if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.left + this.__options.minIntersection <= helper.geo.window.size.width) {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.left = helper.geo.origin.windowOffset.left + this.__options.minIntersection + 1 - finalResult.size.width;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t\n\t\t\t\t\t// overflow at the top\n\t\t\t\t\tif (finalResult.coord.top < 0) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.bottom - this.__options.minIntersection >= 0) {\n\t\t\t\t\t\t\tfinalResult.coord.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.bottom - this.__options.minIntersection - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// or at the bottom\n\t\t\t\t\telse if (finalResult.coord.top > helper.geo.window.size.height - finalResult.size.height) {\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (helper.geo.origin.windowOffset.top + this.__options.minIntersection <= helper.geo.window.size.height) {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.window.size.height - finalResult.size.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tfinalResult.coord.top = helper.geo.origin.windowOffset.top + this.__options.minIntersection + 1 - finalResult.size.height;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// there might be overflow here too but it's easier to handle. If there has\n\t\t\t\t// to be an overflow, we'll make sure it's on the right side of the screen\n\t\t\t\t// (because the browser will extend the document size if there is an overflow\n\t\t\t\t// on the right, but not on the left). The sort function above has already\n\t\t\t\t// made sure that a bottom document overflow is preferred to a top overflow,\n\t\t\t\t// so we don't have to care about it.\n\t\t\t\t\n\t\t\t\t// if there is an overflow on the right\n\t\t\t\tif (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {\n\t\t\t\t\t\n\t\t\t\t\t// this may actually create on overflow on the left but we'll fix it in a sec\n\t\t\t\t\tfinalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// if there is an overflow on the left\n\t\t\t\tif (finalResult.coord.left < 0) {\n\t\t\t\t\t\n\t\t\t\t\t// don't care if it overflows the right after that, we made our best\n\t\t\t\t\tfinalResult.coord.left = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\t// submit the positioning proposal to the user function which may choose to change\n\t\t\t// the side, size and/or the coordinates\n\t\t\t\n\t\t\t// first, set the rules that corresponds to the proposed side: it may change\n\t\t\t// the size of the tooltip, and the custom functionPosition may want to detect the\n\t\t\t// size of something before making a decision. So let's make things easier for the\n\t\t\t// implementor\n\t\t\tself.__sideChange($clone, finalResult.side);\n\t\t\t\n\t\t\t// add some variables to the helper\n\t\t\thelper.tooltipClone = $clone[0];\n\t\t\thelper.tooltipParent = self.__instance.option('parent').parent[0];\n\t\t\t// move informative values to the helper\n\t\t\thelper.mode = finalResult.mode;\n\t\t\thelper.whole = finalResult.whole;\n\t\t\t// add some variables to the helper for the functionPosition callback (these\n\t\t\t// will also be added to the event fired by self.__instance._trigger but that's\n\t\t\t// ok, we're just being consistent)\n\t\t\thelper.origin = self.__instance._$origin[0];\n\t\t\thelper.tooltip = self.__instance._$tooltip[0];\n\t\t\t\n\t\t\t// leave only the actionable values in there for functionPosition\n\t\t\tdelete finalResult.container;\n\t\t\tdelete finalResult.fits;\n\t\t\tdelete finalResult.mode;\n\t\t\tdelete finalResult.outerSize;\n\t\t\tdelete finalResult.whole;\n\t\t\t\n\t\t\t// keep only the distance on the relevant side, for clarity\n\t\t\tfinalResult.distance = finalResult.distance.horizontal || finalResult.distance.vertical;\n\t\t\t\n\t\t\t// beginners may not be comfortable with the concept of editing the object\n\t\t\t// passed by reference, so we provide an edit function and pass a clone\n\t\t\tvar finalResultClone = $.extend(true, {}, finalResult);\n\t\t\t\n\t\t\t// emit an event on the instance\n\t\t\tself.__instance._trigger({\n\t\t\t\tedit: function(result) {\n\t\t\t\t\tfinalResult = result;\n\t\t\t\t},\n\t\t\t\tevent: event,\n\t\t\t\thelper: helper,\n\t\t\t\tposition: finalResultClone,\n\t\t\t\ttype: 'position'\n\t\t\t});\n\t\t\t\n\t\t\tif (self.__options.functionPosition) {\n\t\t\t\t\n\t\t\t\tvar result = self.__options.functionPosition.call(self, self.__instance, helper, finalResultClone);\n\t\t\t\t\n\t\t\t\tif (result) finalResult = result;\n\t\t\t}\n\t\t\t\n\t\t\t// end the positioning tests session (the user might have had a\n\t\t\t// use for it during the position event, now it's over)\n\t\t\truler.destroy();\n\t\t\t\n\t\t\t// compute the position of the target relatively to the tooltip root\n\t\t\t// element so we can place the arrow and make the needed adjustments\n\t\t\tvar arrowCoord,\n\t\t\t\tmaxVal;\n\t\t\t\n\t\t\tif (finalResult.side == 'top' || finalResult.side == 'bottom') {\n\t\t\t\t\n\t\t\t\tarrowCoord = {\n\t\t\t\t\tprop: 'left',\n\t\t\t\t\tval: finalResult.target - finalResult.coord.left\n\t\t\t\t};\n\t\t\t\tmaxVal = finalResult.size.width - this.__options.minIntersection;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\tarrowCoord = {\n\t\t\t\t\tprop: 'top',\n\t\t\t\t\tval: finalResult.target - finalResult.coord.top\n\t\t\t\t};\n\t\t\t\tmaxVal = finalResult.size.height - this.__options.minIntersection;\n\t\t\t}\n\t\t\t\n\t\t\t// cannot lie beyond the boundaries of the tooltip, minus the\n\t\t\t// arrow margin\n\t\t\tif (arrowCoord.val < this.__options.minIntersection) {\n\t\t\t\tarrowCoord.val = this.__options.minIntersection;\n\t\t\t}\n\t\t\telse if (arrowCoord.val > maxVal) {\n\t\t\t\tarrowCoord.val = maxVal;\n\t\t\t}\n\t\t\t\n\t\t\tvar originParentOffset;\n\t\t\t\n\t\t\t// let's convert the window-relative coordinates into coordinates relative to the\n\t\t\t// future positioned parent that the tooltip will be appended to\n\t\t\tif (helper.geo.origin.fixedLineage) {\n\t\t\t\t\n\t\t\t\t// same as windowOffset when the position is fixed\n\t\t\t\toriginParentOffset = helper.geo.origin.windowOffset;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// this assumes that the parent of the tooltip is located at\n\t\t\t\t// (0, 0) in the document, typically like when the parent is\n\t\t\t\t// .\n\t\t\t\t// If we ever allow other types of parent, .tooltipster-ruler\n\t\t\t\t// will have to be appended to the parent to inherit css style\n\t\t\t\t// values that affect the display of the text and such.\n\t\t\t\toriginParentOffset = {\n\t\t\t\t\tleft: helper.geo.origin.windowOffset.left + helper.geo.window.scroll.left,\n\t\t\t\t\ttop: helper.geo.origin.windowOffset.top + helper.geo.window.scroll.top\n\t\t\t\t};\n\t\t\t}\n\t\t\t\n\t\t\tfinalResult.coord = {\n\t\t\t\tleft: originParentOffset.left + (finalResult.coord.left - helper.geo.origin.windowOffset.left),\n\t\t\t\ttop: originParentOffset.top + (finalResult.coord.top - helper.geo.origin.windowOffset.top)\n\t\t\t};\n\t\t\t\n\t\t\t// set position values on the original tooltip element\n\t\t\t\n\t\t\tself.__sideChange(self.__instance._$tooltip, finalResult.side);\n\t\t\t\n\t\t\tif (helper.geo.origin.fixedLineage) {\n\t\t\t\tself.__instance._$tooltip\n\t\t\t\t\t.css('position', 'fixed');\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// CSS default\n\t\t\t\tself.__instance._$tooltip\n\t\t\t\t\t.css('position', '');\n\t\t\t}\n\t\t\t\n\t\t\tself.__instance._$tooltip\n\t\t\t\t.css({\n\t\t\t\t\tleft: finalResult.coord.left,\n\t\t\t\t\ttop: finalResult.coord.top,\n\t\t\t\t\t// we need to set a size even if the tooltip is in its natural size\n\t\t\t\t\t// because when the tooltip is positioned beyond the width of the body\n\t\t\t\t\t// (which is by default the width of the window; it will happen when\n\t\t\t\t\t// you scroll the window horizontally to get to the origin), its text\n\t\t\t\t\t// content will otherwise break lines at each word to keep up with the\n\t\t\t\t\t// body overflow strategy.\n\t\t\t\t\theight: finalResult.size.height,\n\t\t\t\t\twidth: finalResult.size.width\n\t\t\t\t})\n\t\t\t\t.find('.tooltipster-arrow')\n\t\t\t\t\t.css({\n\t\t\t\t\t\t'left': '',\n\t\t\t\t\t\t'top': ''\n\t\t\t\t\t})\n\t\t\t\t\t.css(arrowCoord.prop, arrowCoord.val);\n\t\t\t\n\t\t\t// append the tooltip HTML element to its parent\n\t\t\tself.__instance._$tooltip.appendTo(self.__instance.option('parent'));\n\t\t\t\n\t\t\tself.__instance._trigger({\n\t\t\t\ttype: 'repositioned',\n\t\t\t\tevent: event,\n\t\t\t\tposition: finalResult\n\t\t\t});\n\t\t},\n\t\t\n\t\t/**\n\t\t * Make whatever modifications are needed when the side is changed. This has\n\t\t * been made an independant method for easy inheritance in custom plugins based\n\t\t * on this default plugin.\n\t\t *\n\t\t * @param {object} $obj\n\t\t * @param {string} side\n\t\t * @private\n\t\t */\n\t\t__sideChange: function($obj, side) {\n\t\t\t\n\t\t\t$obj\n\t\t\t\t.removeClass('tooltipster-bottom')\n\t\t\t\t.removeClass('tooltipster-left')\n\t\t\t\t.removeClass('tooltipster-right')\n\t\t\t\t.removeClass('tooltipster-top')\n\t\t\t\t.addClass('tooltipster-'+ side);\n\t\t},\n\t\t\n\t\t/**\n\t\t * Returns the target that the tooltip should aim at for a given side.\n\t\t * The calculated value is a distance from the edge of the window\n\t\t * (left edge for top/bottom sides, top edge for left/right side). The\n\t\t * tooltip will be centered on that position and the arrow will be\n\t\t * positioned there (as much as possible).\n\t\t *\n\t\t * @param {object} helper\n\t\t * @return {integer}\n\t\t * @private\n\t\t */\n\t\t__targetFind: function(helper) {\n\t\t\t\n\t\t\tvar target = {},\n\t\t\t\trects = this.__instance._$origin[0].getClientRects();\n\t\t\t\n\t\t\t// these lines fix a Chrome bug (issue #491)\n\t\t\tif (rects.length > 1) {\n\t\t\t\tvar opacity = this.__instance._$origin.css('opacity');\n\t\t\t\tif(opacity == 1) {\n\t\t\t\t\tthis.__instance._$origin.css('opacity', 0.99);\n\t\t\t\t\trects = this.__instance._$origin[0].getClientRects();\n\t\t\t\t\tthis.__instance._$origin.css('opacity', 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t// by default, the target will be the middle of the origin\n\t\t\tif (rects.length < 2) {\n\t\t\t\t\n\t\t\t\ttarget.top = Math.floor(helper.geo.origin.windowOffset.left + (helper.geo.origin.size.width / 2));\n\t\t\t\ttarget.bottom = target.top;\n\t\t\t\t\n\t\t\t\ttarget.left = Math.floor(helper.geo.origin.windowOffset.top + (helper.geo.origin.size.height / 2));\n\t\t\t\ttarget.right = target.left;\n\t\t\t}\n\t\t\t// if multiple client rects exist, the element may be text split\n\t\t\t// up into multiple lines and the middle of the origin may not be\n\t\t\t// best option anymore. We need to choose the best target client rect\n\t\t\telse {\n\t\t\t\t\n\t\t\t\t// top: the first\n\t\t\t\tvar targetRect = rects[0];\n\t\t\t\ttarget.top = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);\n\t\t\n\t\t\t\t// right: the middle line, rounded down in case there is an even\n\t\t\t\t// number of lines (looks more centered => check out the\n\t\t\t\t// demo with 4 split lines)\n\t\t\t\tif (rects.length > 2) {\n\t\t\t\t\ttargetRect = rects[Math.ceil(rects.length / 2) - 1];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttargetRect = rects[0];\n\t\t\t\t}\n\t\t\t\ttarget.right = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);\n\t\t\n\t\t\t\t// bottom: the last\n\t\t\t\ttargetRect = rects[rects.length - 1];\n\t\t\t\ttarget.bottom = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);\n\t\t\n\t\t\t\t// left: the middle line, rounded up\n\t\t\t\tif (rects.length > 2) {\n\t\t\t\t\ttargetRect = rects[Math.ceil((rects.length + 1) / 2) - 1];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttargetRect = rects[rects.length - 1];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ttarget.left = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);\n\t\t\t}\n\t\t\t\n\t\t\treturn target;\n\t\t}\n\t}\n});\n\n/* a build task will add \"return $;\" here */\nreturn $;\n\n}));\n","/**\n * Accessible Tabs - jQuery plugin for accessible, unobtrusive tabs\n * Build to seemlessly work with the CCS-Framework YAML (yaml.de) not depending on YAML though\n * @requires jQuery - tested with 1.9.1, 1.7 and 1.4.2 but might as well work with older versions\n *\n * english article: http://blog.ginader.de/archives/2009/02/07/jQuery-Accessible-Tabs-How-to-make-tabs-REALLY-accessible.php\n * german article: http://blog.ginader.de/archives/2009/02/07/jQuery-Accessible-Tabs-Wie-man-Tabs-WIRKLICH-zugaenglich-macht.php\n *\n * code: http://github.com/ginader/Accessible-Tabs\n * please report issues at: http://github.com/ginader/Accessible-Tabs/issues\n *\n * Copyright (c) 2016 Dirk Ginader (http://dir.kg)\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n */\n\n(function($) {\n var debugMode = true;\n $.fn.extend({\n // We assume there could be multiple sets of tabs on a page, so,\n // the unique id for each invididual tab's heading is identified with params q and r (e.g., id=\"accessibletabscontent0-2\")\n getUniqueId: function(p, q, r){\n if (r===undefined) {r='';} else {r='-'+r;}\n return p + q + r;\n },\n // in case a className i.e. currentInfoClass contains more than one className this converts\n // 'current-info visuallyhidden' to '.current-info.visuallyhidden' to be used as jQuery selector\n getClassSelectorsFromClassNames: function(className){\n if(className.indexOf(' ' > -1)){\n // the className has spaces so it probably contains more than one classNames\n return '.'+className.split(' ').join('.');\n }else{\n return '.'+className;\n }\n },\n accessibleTabs: function(config) {\n var defaults = {\n wrapperClass: 'content', // Classname to apply to the div that is wrapped around the original Markup\n currentClass: 'current', // Classname to apply to the LI of the selected Tab\n tabhead: 'h4', // Tag or valid Query Selector of the Elements to Transform the Tabs-Navigation from (originals are removed)\n tabheadClass: 'tabhead', // Classname to apply to the target heading element for each tab div\n tabbody: '.tabbody', // Tag or valid Query Selector of the Elements to be treated as the Tab Body\n fx:'show', // can be \"fadeIn\", \"slideDown\", \"show\"\n fxspeed: 'normal', // speed (String|Number): \"slow\", \"normal\", or \"fast\") or the number of milliseconds to run the animation\n currentInfoText: 'current tab: ', // text to indicate for screenreaders which tab is the current one\n currentInfoPosition: 'prepend', // Definition where to insert the Info Text. Can be either \"prepend\" or \"append\"\n currentInfoClass: 'current-info', // Class to apply to the span wrapping the CurrentInfoText\n tabsListClass:'tabs-list', // Class to apply to the generated list of tabs above the content\n syncheights:false, // syncs the heights of the tab contents when the SyncHeight plugin is available http://blog.ginader.de/dev/jquery/syncheight/index.php\n syncHeightMethodName:'syncHeight', // set the Method name of the plugin you want to use to sync the tab contents. Defaults to the SyncHeight plugin: http://github.com/ginader/syncHeight\n cssClassAvailable:false, // Enable individual css classes for tabs. Gets the appropriate class name of a tabhead element and apply it to the tab list element. Boolean value\n saveState:false, // save the selected tab into a cookie so it stays selected after a reload. This requires that the wrapping div needs to have an ID (so we know which tab we're saving)\n autoAnchor:false, // will move over any existing id of a headline in tabs markup so it can be linked to it\n pagination:false, // adds buttons to each tab to switch to the next/previous tab\n position:'top', // can be 'top' or 'bottom'. Defines where the tabs list is inserted.\n wrapInnerNavLinks: '', // inner wrap for a-tags in tab navigation. See http://api.jquery.com/wrapInner/ for further informations\n firstNavItemClass: 'first', // Classname of the first list item in the tab navigation\n lastNavItemClass: 'last', // Classname of the last list item in the tab navigation\n clearfixClass: 'clearfix' // Name of the Class that is used to clear/contain floats\n };\n var keyCodes = {\n 37 : -1, //LEFT\n 38 : -1, //UP\n 39 : +1, //RIGHT\n 40 : +1 //DOWN\n };\n var positions = {\n top : 'prepend',\n bottom : 'append'\n };\n this.options = $.extend(defaults, config);\n\n var tabsCount = 0;\n if($(\"body\").data('accessibleTabsCount') !== undefined){\n tabsCount = $(\"body\").data('accessibleTabsCount');\n }\n $(\"body\").data('accessibleTabsCount',this.length+tabsCount);\n\n var o = this;\n return this.each(function(t) {\n var el = $(this);\n var list = '';\n var tabCount = 0;\n var ids = [];\n\n $(el).wrapInner('
    ');\n\n $(el).find(o.options.tabhead).each(function(i){\n var id = '';\n var elId = $(this).attr('id');\n if(elId){\n // Skip this item if it already exists.\n if(elId.indexOf('accessibletabscontent') === 0) {\n return;\n }\n id =' id=\"'+elId+'\"';\n }\n var tabId = o.getUniqueId('accessibletabscontent', tabsCount+t, i);//get a unique id to assign to this tab's heading\n var navItemId = o.getUniqueId('accessibletabsnavigation', tabsCount+t, i);//get a unique id for this navigation item\n ids.push(tabId);\n if(o.options.cssClassAvailable === true) {\n var cssClass = '';\n if($(this).attr('class')) {\n cssClass = $(this).attr('class');\n cssClass = ' class=\"'+cssClass+'\"';\n }\n list += '
  • '+$(this).html()+'
  • ';\n } else {\n list += '
  • '+$(this).html()+'
  • ';\n }\n $(this).attr({\"id\": tabId, \"class\": o.options.tabheadClass, \"tabindex\": \"-1\"});//assign the unique id and the tabheadClass class name to this tab's heading\n tabCount++;\n });\n\n if (o.options.syncheights && $.fn[o.options.syncHeightMethodName]) {\n $(el).find(o.options.tabbody)[o.options.syncHeightMethodName]();\n $(window).resize(function(){\n $(el).find(o.options.tabbody)[o.options.syncHeightMethodName]();\n });\n }\n\n // Ensure that the call to setup tabs is re-runnable\n var tabs_selector = o.getClassSelectorsFromClassNames(o.options.tabsListClass);\n if(!$(el).find(tabs_selector).length) {\n $(el)[positions[o.options.position]]('
      ');\n }\n\n $(el).find(tabs_selector).append(list);\n\n // initial show first content block and hide the others\n var content = $(el).find(o.options.tabbody);\n if (content.length > 0) {\n $(content).hide();\n $(content[0]).show();\n }\n $(el).find(\"ul\"+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+\">li:first\").addClass(o.options.currentClass).addClass(o.options.firstNavItemClass)\n .find('a')[o.options.currentInfoPosition](''+o.options.currentInfoText+'')\n .parents(\"ul\"+o.getClassSelectorsFromClassNames(o.options.tabsListClass)).children('li:last').addClass(o.options.lastNavItemClass);\n\n if (o.options.wrapInnerNavLinks) {\n $(el).find('ul'+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+'>li>a').wrapInner(o.options.wrapInnerNavLinks);\n }\n\n $(el).find('ul'+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+'>li>a').each(function(i){\n $(this).click(function(event){\n event.preventDefault();\n el.trigger(\"showTab.accessibleTabs\", [$(event.target)]);\n if(o.options.saveState && $.cookie){\n $.cookie('accessibletab_'+el.attr('id')+'_active',i);\n }\n $(el).find('ul'+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+'>li.'+o.options.currentClass).removeClass(o.options.currentClass)\n .find(\"span\"+o.getClassSelectorsFromClassNames(o.options.currentInfoClass)).remove();\n $(this).blur();\n $(el).find(o.options.tabbody+':visible').hide();\n $(el).find(o.options.tabbody).eq(i)[o.options.fx](o.options.fxspeed);\n $(this)[o.options.currentInfoPosition](''+o.options.currentInfoText+'')\n .parent().addClass(o.options.currentClass);\n //now, only after writing the currentInfoText span to the tab list link, set focus to the tab's heading\n\n $($(this).attr(\"href\")).focus().keyup(function(event){\n if(keyCodes[event.keyCode]){\n o.showAccessibleTab(i+keyCodes[event.keyCode]);\n $(this).unbind( \"keyup\" );\n }\n });\n\n // $(el).find('.accessibletabsanchor').keyup(function(event){\n // if(keyCodes[event.keyCode]){\n // o.showAccessibleTab(i+keyCodes[event.keyCode]);\n // }\n // });\n });\n\n $(this).focus(function(){\n $(document).keyup(function(event){\n if(keyCodes[event.keyCode]){\n o.showAccessibleTab(i+keyCodes[event.keyCode]);\n }\n });\n });\n $(this).blur(function(){\n $(document).unbind( \"keyup\" );\n });\n\n });\n\n if(o.options.saveState && $.cookie){\n var savedState = $.cookie('accessibletab_'+el.attr('id')+'_active');\n debug($.cookie('accessibletab_'+el.attr('id')+'_active'));\n if(savedState !== null){\n o.showAccessibleTab(savedState,el.attr('id'));\n }\n }\n\n if(o.options.autoAnchor && window.location.hash){\n var anchorTab = $(o.getClassSelectorsFromClassNames(o.options.tabsListClass)).find(window.location.hash);\n if(anchorTab.length){\n anchorTab.click();\n }\n }\n\n if(o.options.pagination){\n var m = '';\n var tabs = $(el).find('.tabbody');\n var tabcount = tabs.length;\n tabs.each(function(idx){\n $(this).append(m);\n var next = idx+1;\n if(next>=tabcount){next = 0;}\n var previous = idx-1;\n if(previous<0){previous = tabcount-1;}\n var p = $(this).find('.pagination');\n var previousEl = p.find('.previous');\n previousEl.find('span').text($('#'+ids[previous]).text());\n previousEl.find('a').attr('href','#'+ids[previous])\n .click(function(event){\n event.preventDefault();\n $(el).find('.tabs-list a').eq(previous).click();\n });\n var nextEl = p.find('.next');\n nextEl.find('span').text($('#'+ids[next]).text());\n nextEl.find('a').attr('href','#'+ids[next])\n .click(function(event){\n event.preventDefault();\n $(el).find('.tabs-list a').eq(next).click();\n });\n });\n }\n });\n },\n showAccessibleTab: function(index,id){\n debug('showAccessibleTab');\n var o = this;\n if(id) {\n var el = $('#'+id);\n var links = el.find('ul'+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+'>li>a');\n el.trigger(\"showTab.accessibleTabs\", [links.eq(index)]);\n links.eq(index).click();\n } else {\n return this.each(function() {\n var el = $(this);\n el.trigger(\"showTab.accessibleTabs\");\n var links = el.find('ul'+o.getClassSelectorsFromClassNames(o.options.tabsListClass)+'>li>a');\n el.trigger(\"showTab.accessibleTabs\", [links.eq(index)]);\n links.eq(index).click();\n });\n }\n },\n showAccessibleTabSelector: function(selector){\n debug('showAccessibleTabSelector');\n var el = $(selector);\n if(el){\n if(el.get(0).nodeName.toLowerCase() === 'a'){\n el.click();\n }else{\n debug('the selector of a showAccessibleTabSelector() call needs to point to a tabs headline!');\n }\n }\n }\n });\n // private Methods\n function debug(msg,info){\n if(debugMode && window.console && window.console.log){\n if(info){\n window.console.log(info+': ',msg);\n }else{\n window.console.log(msg);\n }\n }\n }\n})(jQuery);\n","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n var moment;\n if (typeof exports === 'object') {\n // CommonJS module\n // Load moment.js as an optional dependency\n try { moment = require('moment'); } catch (e) {}\n module.exports = factory(moment);\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(function (req)\n {\n // Load moment.js as an optional dependency\n var id = 'moment';\n try { moment = req(id); } catch (e) {}\n return factory(moment);\n });\n } else {\n root.Pikaday = factory(root.moment);\n }\n}(this, function (moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n ariaLabel: 'Use the arrow keys to pick a date',\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // minimum number of days in the week that gets week number one\n // default ISO 8601, week 01 is the week with the first Thursday (4)\n firstWeekOfYearMinDays: 4,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '' +\n '' +\n '';\n },\n\n isoWeek = function(date, firstWeekOfYearMinDays) {\n // Ensure we're at the start of the day.\n date.setHours(0, 0, 0, 0);\n\n // Thursday in current week decides the year because January 4th\n // is always in the first week according to ISO8601.\n var yearDay = date.getDate(),\n weekDay = date.getDay(),\n dayInFirstWeek = firstWeekOfYearMinDays,\n dayShift = dayInFirstWeek - 1, // counting starts at 0\n daysPerWeek = 7,\n prevWeekDay = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek),\n msPerDay = 24 * 60 * 60 * 1000,\n daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n return weekNum;\n },\n\n renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n var date = new Date(y, m, d),\n week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n return '' + week + '';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '' + (isRTL ? days.reverse() : days).join('') + '';\n },\n\n renderBody = function(rows)\n {\n return '' + rows.join('') + '';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('');\n }\n for (i = 0; i < 7; i++) {\n arr.push('' + renderDayName(opts, i, true) + '');\n }\n return '' + (opts.isRTL ? arr.reverse() : arr).join('') + '';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '
      ',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('');\n }\n\n monthHtml = '
      ' + opts.i18n.months[month] + '
      ';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('');\n }\n }\n yearHtml = '
      ' + year + opts.yearSuffix + '
      ';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '';\n }\n\n return html += '
      ';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '' + renderHead(opts) + renderBody(data) + '
      ';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n case 8:\n case 46:\n self.setDate(null);\n break;\n }\n }\n };\n\n self._parseFieldValue = function()\n {\n if (opts.parse) {\n return opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n var date = moment(opts.field.value, opts.format, opts.formatStrict);\n return (date && date.isValid()) ? date.toDate() : null;\n } else {\n return new Date(Date.parse(opts.field.value));\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n date = self._parseFieldValue();\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n opts.defaultDate = self._parseFieldValue();\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * clear and reset the date\n */\n clear: function()\n {\n this.setDate(null);\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '
      ' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
      ';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', opts.ariaLabel);\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n leftAligned = true;\n bottomAligned = true;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n leftAligned = false;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n bottomAligned = false;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n\n addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n\n if (!this._o.container) {\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n }\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}));\n","/*!\n * Pikaday jQuery plugin.\n *\n * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n */\n\n(function (root, factory)\n{\n 'use strict';\n\n if (typeof exports === 'object') {\n // CommonJS module\n factory(require('jquery'), require('pikaday'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery', 'pikaday'], factory);\n } else {\n // Browser globals\n factory(root.jQuery, root.Pikaday);\n }\n}(this, function ($, Pikaday)\n{\n 'use strict';\n\n $.fn.pikaday = function()\n {\n var args = arguments;\n\n if (!args || !args.length) {\n args = [{ }];\n }\n\n return this.each(function()\n {\n var self = $(this),\n plugin = self.data('pikaday');\n\n if (!(plugin instanceof Pikaday)) {\n if (typeof args[0] === 'object') {\n var options = $.extend({}, args[0]);\n options.field = self[0];\n self.data('pikaday', new Pikaday(options));\n }\n } else {\n if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') {\n plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1));\n\n if (args[0] === 'destroy') {\n self.removeData('pikaday');\n }\n }\n }\n });\n };\n\n}));\n","/*!\n * @preserve\n *\n * Readmore.js jQuery plugin\n * Author: @jed_foster\n * Project home: http://jedfoster.github.io/Readmore.js\n * Licensed under the MIT license\n *\n * Debounce function from http://davidwalsh.name/javascript-debounce-function\n */\n\n/* global jQuery */\n\n(function(factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function($) {\n 'use strict';\n\n var readmore = 'readmore',\n defaults = {\n speed: 100,\n collapsedHeight: 200,\n heightMargin: 16,\n moreLink: 'Read More',\n lessLink: 'Close',\n embedCSS: true,\n blockCSS: 'display: block; width: 100%;',\n startOpen: false,\n\n // callbacks\n blockProcessed: function() {},\n beforeToggle: function() {},\n afterToggle: function() {}\n },\n cssEmbedded = {},\n uniqueIdCounter = 0;\n\n function debounce(func, wait, immediate) {\n var timeout;\n\n return function() {\n var context = this, args = arguments;\n var later = function() {\n timeout = null;\n if (! immediate) {\n func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n }\n\n function uniqueId(prefix) {\n var id = ++uniqueIdCounter;\n\n return String(prefix === null ? 'rmjs-' : prefix) + id;\n }\n\n function setBoxHeights(element) {\n var el = element.clone().css({\n height: 'auto',\n width: element.width(),\n maxHeight: 'none',\n overflow: 'hidden'\n }).insertAfter(element),\n expandedHeight = el.outerHeight(),\n cssMaxHeight = parseInt(el.css({maxHeight: ''}).css('max-height').replace(/[^-\\d\\.]/g, ''), 10),\n defaultHeight = element.data('defaultHeight');\n\n el.remove();\n\n var collapsedHeight = cssMaxHeight || element.data('collapsedHeight') || defaultHeight;\n\n // Store our measurements.\n element.data({\n expandedHeight: expandedHeight,\n maxHeight: cssMaxHeight,\n collapsedHeight: collapsedHeight\n })\n // and disable any `max-height` property set in CSS\n .css({\n maxHeight: 'none'\n });\n }\n\n var resizeBoxes = debounce(function() {\n $('[data-readmore]').each(function() {\n var current = $(this),\n isExpanded = (current.attr('aria-expanded') === 'true');\n\n setBoxHeights(current);\n\n current.css({\n height: current.data( (isExpanded ? 'expandedHeight' : 'collapsedHeight') )\n });\n });\n }, 100);\n\n function embedCSS(options) {\n if (! cssEmbedded[options.selector]) {\n var styles = ' ';\n\n if (options.embedCSS && options.blockCSS !== '') {\n styles += options.selector + ' + [data-readmore-toggle], ' +\n options.selector + '[data-readmore]{' +\n options.blockCSS +\n '}';\n }\n\n // Include the transition CSS even if embedCSS is false\n styles += options.selector + '[data-readmore]{' +\n 'transition: height ' + options.speed + 'ms;' +\n 'overflow: hidden;' +\n '}';\n\n (function(d, u) {\n var css = d.createElement('style');\n css.type = 'text/css';\n\n if (css.styleSheet) {\n css.styleSheet.cssText = u;\n }\n else {\n css.appendChild(d.createTextNode(u));\n }\n\n d.getElementsByTagName('head')[0].appendChild(css);\n }(document, styles));\n\n cssEmbedded[options.selector] = true;\n }\n }\n\n function Readmore(element, options) {\n this.element = element;\n\n this.options = $.extend({}, defaults, options);\n\n embedCSS(this.options);\n\n this._defaults = defaults;\n this._name = readmore;\n\n this.init();\n\n // IE8 chokes on `window.addEventListener`, so need to test for support.\n if (window.addEventListener) {\n // Need to resize boxes when the page has fully loaded.\n window.addEventListener('load', resizeBoxes);\n window.addEventListener('resize', resizeBoxes);\n }\n else {\n window.attachEvent('load', resizeBoxes);\n window.attachEvent('resize', resizeBoxes);\n }\n }\n\n\n Readmore.prototype = {\n init: function() {\n var current = $(this.element);\n\n current.data({\n defaultHeight: this.options.collapsedHeight,\n heightMargin: this.options.heightMargin\n });\n\n setBoxHeights(current);\n\n var collapsedHeight = current.data('collapsedHeight'),\n heightMargin = current.data('heightMargin');\n\n if (current.outerHeight(true) <= collapsedHeight + heightMargin) {\n // The block is shorter than the limit, so there's no need to truncate it.\n if (this.options.blockProcessed && typeof this.options.blockProcessed === 'function') {\n this.options.blockProcessed(current, false);\n }\n return true;\n }\n else {\n var id = current.attr('id') || uniqueId(),\n useLink = this.options.startOpen ? this.options.lessLink : this.options.moreLink;\n\n current.attr({\n 'data-readmore': '',\n 'aria-expanded': this.options.startOpen,\n 'id': id\n });\n\n current.after($(useLink)\n .on('click', (function(_this) {\n return function(event) {\n _this.toggle(this, current[0], event);\n };\n })(this))\n .attr({\n 'data-readmore-toggle': id,\n 'aria-controls': id\n }));\n\n if (! this.options.startOpen) {\n current.css({\n height: collapsedHeight\n });\n }\n\n if (this.options.blockProcessed && typeof this.options.blockProcessed === 'function') {\n this.options.blockProcessed(current, true);\n }\n }\n },\n\n toggle: function(trigger, element, event) {\n if (event) {\n event.preventDefault();\n }\n\n if (! trigger) {\n trigger = $('[aria-controls=\"' + this.element.id + '\"]')[0];\n }\n\n if (! element) {\n element = this.element;\n }\n\n var $element = $(element),\n newHeight = '',\n newLink = '',\n expanded = false,\n collapsedHeight = $element.data('collapsedHeight');\n\n if ($element.height() <= collapsedHeight) {\n newHeight = $element.data('expandedHeight') + 'px';\n newLink = 'lessLink';\n expanded = true;\n }\n else {\n newHeight = collapsedHeight;\n newLink = 'moreLink';\n }\n\n // Fire beforeToggle callback\n // Since we determined the new \"expanded\" state above we're now out of sync\n // with our true current state, so we need to flip the value of `expanded`\n if (this.options.beforeToggle && typeof this.options.beforeToggle === 'function') {\n this.options.beforeToggle(trigger, $element, ! expanded);\n }\n\n $element.css({'height': newHeight});\n\n // Fire afterToggle callback\n $element.on('transitionend', (function(_this) {\n return function() {\n if (_this.options.afterToggle && typeof _this.options.afterToggle === 'function') {\n _this.options.afterToggle(trigger, $element, expanded);\n }\n\n $(this).attr({\n 'aria-expanded': expanded\n }).off('transitionend');\n };\n })(this));\n\n $(trigger).replaceWith($(this.options[newLink])\n .on('click', (function(_this) {\n return function(event) {\n _this.toggle(this, element, event);\n };\n })(this))\n .attr({\n 'data-readmore-toggle': $element.attr('id'),\n 'aria-controls': $element.attr('id')\n }));\n },\n\n destroy: function() {\n $(this.element).each(function() {\n var current = $(this);\n\n current.attr({\n 'data-readmore': null,\n 'aria-expanded': null\n })\n .css({\n maxHeight: '',\n height: ''\n })\n .next('[data-readmore-toggle]')\n .remove();\n\n current.removeData();\n });\n }\n };\n\n\n $.fn.readmore = function(options) {\n var args = arguments,\n selector = this.selector;\n\n options = options || {};\n\n if (typeof options === 'object') {\n return this.each(function() {\n if ($.data(this, 'plugin_' + readmore)) {\n var instance = $.data(this, 'plugin_' + readmore);\n instance.destroy.apply(instance);\n }\n\n options.selector = selector;\n\n $.data(this, 'plugin_' + readmore, new Readmore(this, options));\n });\n }\n else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') {\n return this.each(function () {\n var instance = $.data(this, 'plugin_' + readmore);\n if (instance instanceof Readmore && typeof instance[options] === 'function') {\n instance[options].apply(instance, Array.prototype.slice.call(args, 1));\n }\n });\n }\n };\n\n}));\n\n","/*! @vimeo/player v2.23.0 | (c) 2024 Vimeo | MIT License | https://github.com/vimeo/player.js */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):((e=\"undefined\"!=typeof globalThis?globalThis:e||self).Vimeo=e.Vimeo||{},e.Vimeo.Player=t())}(this,function(){\"use strict\";function r(t,e){var n,r=Object.keys(t);return Object.getOwnPropertySymbols&&(n=Object.getOwnPropertySymbols(t),e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)),r}function u(t){for(var e=1;e